From 38fe42fa10d7578ca4315990757937cfcaef9fec Mon Sep 17 00:00:00 2001 From: Wroud Date: Sun, 26 Apr 2020 20:01:00 +0300 Subject: [PATCH] feat(extensions): implementation --- webapp/packages/core/extensions/package.json | 8 +++++ .../core/src/extensions/IExtension.ts | 15 ++++++++++ .../packages/core/src/extensions/constants.ts | 10 +++++++ .../core/src/extensions/createExtension.ts | 30 +++++++++++++++++++ webapp/packages/core/src/extensions/index.ts | 2 ++ 5 files changed, 65 insertions(+) create mode 100644 webapp/packages/core/extensions/package.json create mode 100644 webapp/packages/core/src/extensions/IExtension.ts create mode 100644 webapp/packages/core/src/extensions/constants.ts create mode 100644 webapp/packages/core/src/extensions/createExtension.ts create mode 100644 webapp/packages/core/src/extensions/index.ts diff --git a/webapp/packages/core/extensions/package.json b/webapp/packages/core/extensions/package.json new file mode 100644 index 0000000000..3b62caed89 --- /dev/null +++ b/webapp/packages/core/extensions/package.json @@ -0,0 +1,8 @@ +{ + "name": "@dbeaver/core/extensions", + "private": true, + "sideEffects": false, + "main": "../dist/extensions", + "module": "../dist/extensions", + "types": "../dist/types/extensions" +} diff --git a/webapp/packages/core/src/extensions/IExtension.ts b/webapp/packages/core/src/extensions/IExtension.ts new file mode 100644 index 0000000000..b11e5de0e1 --- /dev/null +++ b/webapp/packages/core/src/extensions/IExtension.ts @@ -0,0 +1,15 @@ +/* + * 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 { EXTENSION_SYMBOL, EXTENSION_TYPE_SYMBOL } from './constants'; + + +export interface IExtension { + [EXTENSION_SYMBOL]: symbol; + [EXTENSION_TYPE_SYMBOL]?: T; +} diff --git a/webapp/packages/core/src/extensions/constants.ts b/webapp/packages/core/src/extensions/constants.ts new file mode 100644 index 0000000000..9e98216e22 --- /dev/null +++ b/webapp/packages/core/src/extensions/constants.ts @@ -0,0 +1,10 @@ +/* + * 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. + */ + +export const EXTENSION_SYMBOL = Symbol('@extension'); +export const EXTENSION_TYPE_SYMBOL = Symbol('@extension/type'); diff --git a/webapp/packages/core/src/extensions/createExtension.ts b/webapp/packages/core/src/extensions/createExtension.ts new file mode 100644 index 0000000000..2b3c21ce5c --- /dev/null +++ b/webapp/packages/core/src/extensions/createExtension.ts @@ -0,0 +1,30 @@ +/* + * 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 { EXTENSION_SYMBOL } from './constants'; +import { IExtension } from './IExtension'; + +export function createExtension( + extension: object, + key: symbol +): IExtension { + return Object.assign(extension, { [EXTENSION_SYMBOL]: key }); +} + +export function isExtension( + obj: any, + key?: symbol, +): obj is IExtension { + if (!(EXTENSION_SYMBOL in obj)) { + return false; + } + if (key && obj[EXTENSION_SYMBOL] !== key) { + return false; + } + return true; +} diff --git a/webapp/packages/core/src/extensions/index.ts b/webapp/packages/core/src/extensions/index.ts new file mode 100644 index 0000000000..4a845dbddb --- /dev/null +++ b/webapp/packages/core/src/extensions/index.ts @@ -0,0 +1,2 @@ +export * from './IExtension'; +export * from './createExtension';