feat(core): extensions

This commit is contained in:
Wroud
2020-04-26 22:04:46 +03:00
parent 54c272265d
commit b1c1f8ebb5
6 changed files with 138 additions and 0 deletions
@@ -0,0 +1,23 @@
/*
* cloudbeaver - Cloud Database Manager
* Copyright (C) 2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { createExtension, isExtension, IExtension } from '../../../../extensions';
const connectionProviderSymbol = Symbol('@extension/ConnectionProvider');
export interface IConnectionProvider<T = never> {
(context: T): string;
}
export function connectionProvider<T>(provider: IConnectionProvider<T>) {
return createExtension<T>(provider, connectionProviderSymbol);
}
export function isConnectionProvider<T>(obj: IExtension<T>): obj is IConnectionProvider<T> & IExtension<T> {
return isExtension(obj, connectionProviderSymbol);
}
@@ -0,0 +1,23 @@
/*
* cloudbeaver - Cloud Database Manager
* Copyright (C) 2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { createExtension, isExtension, IExtension } from '../../../../extensions';
const connectionSetterSymbol = Symbol('@extension/ConnectionSetter');
export interface IConnectionSetter<T = never> {
(connectionId: string, context: T): Promise<boolean> | boolean;
}
export function connectionSetter<T>(setter: IConnectionSetter<T>) {
return createExtension<T>(setter, connectionSetterSymbol);
}
export function isConnectionSetter<T>(obj: IExtension<T>): obj is IConnectionSetter<T> & IExtension<T> {
return isExtension(obj, connectionSetterSymbol);
}
@@ -0,0 +1,23 @@
/*
* cloudbeaver - Cloud Database Manager
* Copyright (C) 2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { createExtension, isExtension, IExtension } from '../../../../extensions';
const objectCatalogProviderSymbol = Symbol('@extension/ObjectCatalogProvider');
export interface IObjectCatalogProvider<T = never> {
(context: T): string | undefined;
}
export function objectCatalogProvider<T>(provider: IObjectCatalogProvider<T>) {
return createExtension<T>(provider, objectCatalogProviderSymbol);
}
export function isObjectCatalogProvider<T>(obj: IExtension<T>): obj is IObjectCatalogProvider<T> & IExtension<T> {
return isExtension(obj, objectCatalogProviderSymbol);
}
@@ -0,0 +1,23 @@
/*
* cloudbeaver - Cloud Database Manager
* Copyright (C) 2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { createExtension, isExtension, IExtension } from '../../../../extensions';
const objectCatalogSetterSymbol = Symbol('@extension/ObjectCatalogSetter');
export interface IObjectCatalogSetter<T = never> {
(catalogId: string, context: T): Promise<boolean> | boolean;
}
export function objectCatalogSetter<T>(provider: IObjectCatalogSetter<T>) {
return createExtension<T>(provider, objectCatalogSetterSymbol);
}
export function isObjectCatalogSetter<T>(obj: IExtension<T>): obj is IObjectCatalogSetter<T> & IExtension<T> {
return isExtension(obj, objectCatalogSetterSymbol) as boolean;
}
@@ -0,0 +1,23 @@
/*
* cloudbeaver - Cloud Database Manager
* Copyright (C) 2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { createExtension, isExtension, IExtension } from '../../../../extensions';
const objectSchemaProviderSymbol = Symbol('@extension/ObjectSchemaProvider');
export interface IObjectSchemaProvider<T = never> {
(context: T): string | undefined;
}
export function objectSchemaProvider<T>(provider: IObjectSchemaProvider<T>) {
return createExtension<T>(provider, objectSchemaProviderSymbol);
}
export function isObjectSchemaProvider<T>(obj: IExtension<T>): obj is IObjectSchemaProvider<T> & IExtension<T> {
return isExtension(obj, objectSchemaProviderSymbol);
}
@@ -0,0 +1,23 @@
/*
* cloudbeaver - Cloud Database Manager
* Copyright (C) 2020 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { createExtension, isExtension, IExtension } from '../../../../extensions';
const objectSchemaSetterSymbol = Symbol('@extension/ObjectSchemaSetter');
export interface IObjectSchemaSetter<T = never> {
(schemaId: string, context: T): Promise<boolean> | boolean;
}
export function objectSchemaSetter<T>(provider: IObjectSchemaSetter<T>) {
return createExtension<T>(provider, objectSchemaSetterSymbol);
}
export function isObjectSchemaSetter<T>(obj: IExtension<T>): obj is IObjectSchemaSetter<T> & IExtension<T> {
return isExtension(obj, objectSchemaSetterSymbol) as boolean;
}