Skip to content
Snippets Groups Projects
Verified Commit 63591402 authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

feat: deprecate BaseWithOption in favorit of equipWithInternal

parent 431a945f
No related branches found
No related tags found
No related merge requests found
...@@ -6,8 +6,9 @@ ...@@ -6,8 +6,9 @@
*/ */
import { extend } from "../data/extend.mjs"; import { extend } from "../data/extend.mjs";
import { BaseWithOptions } from "../types/basewithoptions.mjs"; import { Base } from "../types/base.mjs";
import { getGlobalObject } from "../types/global.mjs"; import { getGlobalObject } from "../types/global.mjs";
import {equipWithInternal} from "../types/internal.mjs";
import { isArray } from "../types/is.mjs"; import { isArray } from "../types/is.mjs";
import { ATTRIBUTE_HREF, ATTRIBUTE_SRC } from "./constants.mjs"; import { ATTRIBUTE_HREF, ATTRIBUTE_SRC } from "./constants.mjs";
import { Resource } from "./resource.mjs"; import { Resource } from "./resource.mjs";
...@@ -26,7 +27,7 @@ export { ResourceManager }; ...@@ -26,7 +27,7 @@ export { ResourceManager };
* @memberOf Monster.DOM * @memberOf Monster.DOM
* @summary A Resource class * @summary A Resource class
*/ */
class ResourceManager extends BaseWithOptions { class ResourceManager extends Base {
/** /**
* *
* @param {Object} options * @param {Object} options
...@@ -34,12 +35,21 @@ class ResourceManager extends BaseWithOptions { ...@@ -34,12 +35,21 @@ class ResourceManager extends BaseWithOptions {
*/ */
constructor(options) { constructor(options) {
super(options); super(options);
equipWithInternal.call(this);
if (!(this.getOption("document") instanceof Document)) { if (!(this.getOption("document") instanceof Document)) {
throw new Error("unsupported document type"); throw new Error("unsupported document type");
} }
} }
/**
* @deprecated since 3.15.0 use getInternal instead
* @property {string} baseurl
*/
getOption(key) {
return this.getInternal(key);
}
/** /**
* @property {string} baseurl * @property {string} baseurl
*/ */
...@@ -47,6 +57,14 @@ class ResourceManager extends BaseWithOptions { ...@@ -47,6 +57,14 @@ class ResourceManager extends BaseWithOptions {
this.getOption("document")?.baseURL; this.getOption("document")?.baseURL;
} }
/**
* @property {string} baseurl
* @deprecated since 3.15.0 use internalDefaults instead
*/
get defaults() {
return this.internalDefaults;
}
/** /**
* *
* @property {HTMLDocument} document=document Document * @property {HTMLDocument} document=document Document
...@@ -55,8 +73,8 @@ class ResourceManager extends BaseWithOptions { ...@@ -55,8 +73,8 @@ class ResourceManager extends BaseWithOptions {
* @property {Array} resources.stylesheets=[] array with {@link Monster.DOM.Resource.Link.Stylesheet} objects * @property {Array} resources.stylesheets=[] array with {@link Monster.DOM.Resource.Link.Stylesheet} objects
* @property {Array} resources.data=[] array with {@link Monster.DOM.Resource.Data} objects * @property {Array} resources.data=[] array with {@link Monster.DOM.Resource.Data} objects
*/ */
get defaults() { get internalDefaults() {
return Object.assign({}, super.defaults, { return Object.assign({}, {
document: getGlobalObject("document"), document: getGlobalObject("document"),
resources: { resources: {
scripts: [], scripts: [],
......
...@@ -10,14 +10,14 @@ import { instanceSymbol } from "../constants.mjs"; ...@@ -10,14 +10,14 @@ import { instanceSymbol } from "../constants.mjs";
export { Base }; export { Base };
/** /**
* This is the base class from which all monster classes are derived. * This is the base class from which the most classes are derived.
* *
* This class has besides a `toString` which returns the json representation of the object * This class has besides a `toString` which returns the json representation of the object
* also a functionality to check if an object is an instance of a class. * also a functionality to check if an object is an instance of a class.
* *
* Therefor the class has a static method ` [Symbol.hasInstance](that)` which returns true if the object * Therefor the class has a static method ` [Symbol.hasInstance](that)` which returns true if the object
* is an instance of the class. * is an instance of the class.
* F *
* @see [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance](developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance) * @see [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance](developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance)
* *
* Derived classes should implement a static getter `instanceSymbol` which returns a unique symbol. * Derived classes should implement a static getter `instanceSymbol` which returns a unique symbol.
......
...@@ -26,6 +26,7 @@ export { BaseWithOptions }; ...@@ -26,6 +26,7 @@ export { BaseWithOptions };
* @since 1.13.0 * @since 1.13.0
* @copyright schukai GmbH * @copyright schukai GmbH
* @memberOf Monster.Types * @memberOf Monster.Types
* @deprecated since 3.15.0 use {@link Monster.Types.Base} with {@link Monster.Types.equipWithInternal} instead.
*/ */
class BaseWithOptions extends Base { class BaseWithOptions extends Base {
/** /**
......
/**
* Copyright schukai GmbH and contributors 2022. All Rights Reserved.
* Node module: @schukai/monster
* This file is licensed under the AGPLv3 License.
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
*/
import {internalSymbol} from "../constants.mjs";
import {extend} from "../data/extend.mjs";
import {Pathfinder} from "../data/pathfinder.mjs";
import {parseDataURL} from "./dataurl.mjs";
import {isString} from "./is.mjs";
import {Observer} from "./observer.mjs";
import {ProxyObserver} from "./proxyobserver.mjs";
import {validateObject} from "./validate.mjs";
import {isObject} from "./is.mjs";
export {equipWithInternal}
/**
* @private
* @type {string}
*/
const propertyName = 'internalDefaults'
/**
* This function extends the given object with the following methods:
*
* - attachInternalObserver
* - detachInternalObserver
* - containsInternalObserver
* - setInternal
* - setInternals
* - getInternal
*
* @license AGPLv3
* @since 3.15.0
* @copyright schukai GmbH
* @memberOf Monster.Types
*/
function equipWithInternal() {
const self = this;
validateObject(self);
if (!hasGetter(self, propertyName)) {
Object.defineProperty(self, propertyName, {
get: function () {
return {};
}
});
}
const defaults = extend({}, self[propertyName] || {});
self[internalSymbol] = new ProxyObserver(defaults);
/**
* Attach a new observer
*
* @param {Observer} observer
* @returns {ProxyObserver}
*/
self["attachInternalObserver"] = (observer) => {
self[internalSymbol].attachObserver(observer);
return self;
}
/**
* Detach a observer
*
* @param {Observer} observer
* @returns {ProxyObserver}
*/
self["detachInternalObserver"] = (observer) => {
self[internalSymbol].detachObserver(observer);
return self;
}
/**
* Check if a observer is attached
*
* @param {Observer} observer
* @returns {boolean}
*/
self["containsInternalObserver"] = (observer) => {
return self[internalSymbol].containsObserver(observer);
}
/**
* Set an internal value, nested internals can be specified by path `a.b.c`
*
* @param {string} path
* @param {*} value
* @return {Datasource}
*/
self["setInternal"] = (path, value) => {
new Pathfinder(self[internalSymbol].getSubject()).setVia(path, value);
return self;
}
/**
* set multiple internals at once
*
* @param {string|object} options
* @return {Datasource}
* @throws {Error} the options does not contain a valid json definition
*/
self["setInternals"] = (options) => {
if (isString(options)) {
options = parseOptionsJSON(options);
}
extend(self[internalSymbol].getSubject(), defaults, options);
return self;
}
/**
* nested internals can be specified by path `a.b.c`
*
* @param {string} path
* @param {*} defaultValue
* @return {*}
*/
self["getInternal"] = (path, defaultValue) => {
let value;
try {
value = new Pathfinder(self[internalSymbol]
.getRealSubject()).getVia(path);
} catch (e) {
}
if (value === undefined) return defaultValue;
return value;
}
}
/**
* @private
* @param obj
* @param prop
* @return {boolean}
*/
function hasGetter(obj, prop) {
while (isObject(obj)) {
if (Object.getOwnPropertyDescriptor(obj, prop)?.['get']) {
return true;
}
obj = Object.getPrototypeOf(obj);
}
return false;
}
/**
* @private
* @param data
* @return {Object}
*/
function parseOptionsJSON(data) {
let obj = {};
if (!isString(data)) {
return obj;
}
// the configuration can be specified as a data url.
try {
let dataUrl = parseDataURL(data);
data = dataUrl.content;
} catch (e) {
}
try {
obj = JSON.parse(data);
} catch (e) {
throw e;
}
return validateObject(obj);
}
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
"url": "^0.11.0", "url": "^0.11.0",
"url-exist": "3.0.1", "url-exist": "3.0.1",
"util": "^0.12.5", "util": "^0.12.5",
"vite": "^4.1.3", "vite": "^4.1.4",
"vite-plugin-banner": "^0.7.0", "vite-plugin-banner": "^0.7.0",
"vite-plugin-list-directory-contents": "^1.4.5", "vite-plugin-list-directory-contents": "^1.4.5",
"vite-plugin-minify": "^1.5.2", "vite-plugin-minify": "^1.5.2",
......
...@@ -42,7 +42,7 @@ specifiers: ...@@ -42,7 +42,7 @@ specifiers:
url: ^0.11.0 url: ^0.11.0
url-exist: 3.0.1 url-exist: 3.0.1
util: ^0.12.5 util: ^0.12.5
vite: ^4.1.3 vite: ^4.1.4
vite-plugin-banner: ^0.7.0 vite-plugin-banner: ^0.7.0
vite-plugin-list-directory-contents: ^1.4.5 vite-plugin-list-directory-contents: ^1.4.5
vite-plugin-minify: ^1.5.2 vite-plugin-minify: ^1.5.2
...@@ -91,11 +91,11 @@ devDependencies: ...@@ -91,11 +91,11 @@ devDependencies:
url: 0.11.0 url: 0.11.0
url-exist: 3.0.1 url-exist: 3.0.1
util: 0.12.5 util: 0.12.5
vite: 4.1.3 vite: 4.1.4
vite-plugin-banner: 0.7.0 vite-plugin-banner: 0.7.0
vite-plugin-list-directory-contents: 1.4.5 vite-plugin-list-directory-contents: 1.4.5
vite-plugin-minify: 1.5.2_vite@4.1.3 vite-plugin-minify: 1.5.2_vite@4.1.4
vite-plugin-mkcert: 1.13.2_vite@4.1.3 vite-plugin-mkcert: 1.13.2_vite@4.1.4
ws: 8.12.1 ws: 8.12.1
packages: packages:
...@@ -128,12 +128,12 @@ packages: ...@@ -128,12 +128,12 @@ packages:
'@babel/code-frame': 7.18.6 '@babel/code-frame': 7.18.6
'@babel/generator': 7.21.1 '@babel/generator': 7.21.1
'@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0
'@babel/helper-module-transforms': 7.21.0 '@babel/helper-module-transforms': 7.21.2
'@babel/helpers': 7.21.0 '@babel/helpers': 7.21.0
'@babel/parser': 7.21.1 '@babel/parser': 7.21.2
'@babel/template': 7.20.7 '@babel/template': 7.20.7
'@babel/traverse': 7.21.0 '@babel/traverse': 7.21.2
'@babel/types': 7.21.0 '@babel/types': 7.21.2
convert-source-map: 1.9.0 convert-source-map: 1.9.0
debug: 4.3.4 debug: 4.3.4
gensync: 1.0.0-beta.2 gensync: 1.0.0-beta.2
...@@ -147,7 +147,7 @@ packages: ...@@ -147,7 +147,7 @@ packages:
resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==} resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.21.0 '@babel/types': 7.21.2
'@jridgewell/gen-mapping': 0.3.2 '@jridgewell/gen-mapping': 0.3.2
'@jridgewell/trace-mapping': 0.3.17 '@jridgewell/trace-mapping': 0.3.17
jsesc: 2.5.2 jsesc: 2.5.2
...@@ -177,25 +177,25 @@ packages: ...@@ -177,25 +177,25 @@ packages:
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/template': 7.20.7 '@babel/template': 7.20.7
'@babel/types': 7.21.0 '@babel/types': 7.21.2
dev: true dev: true
/@babel/helper-hoist-variables/7.18.6: /@babel/helper-hoist-variables/7.18.6:
resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.21.0 '@babel/types': 7.21.2
dev: true dev: true
/@babel/helper-module-imports/7.18.6: /@babel/helper-module-imports/7.18.6:
resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.21.0 '@babel/types': 7.21.2
dev: true dev: true
/@babel/helper-module-transforms/7.21.0: /@babel/helper-module-transforms/7.21.2:
resolution: {integrity: sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==} resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/helper-environment-visitor': 7.18.9 '@babel/helper-environment-visitor': 7.18.9
...@@ -204,8 +204,8 @@ packages: ...@@ -204,8 +204,8 @@ packages:
'@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6
'@babel/helper-validator-identifier': 7.19.1 '@babel/helper-validator-identifier': 7.19.1
'@babel/template': 7.20.7 '@babel/template': 7.20.7
'@babel/traverse': 7.21.0 '@babel/traverse': 7.21.2
'@babel/types': 7.21.0 '@babel/types': 7.21.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
...@@ -214,14 +214,14 @@ packages: ...@@ -214,14 +214,14 @@ packages:
resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.21.0 '@babel/types': 7.21.2
dev: true dev: true
/@babel/helper-split-export-declaration/7.18.6: /@babel/helper-split-export-declaration/7.18.6:
resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.21.0 '@babel/types': 7.21.2
dev: true dev: true
/@babel/helper-string-parser/7.19.4: /@babel/helper-string-parser/7.19.4:
...@@ -244,8 +244,8 @@ packages: ...@@ -244,8 +244,8 @@ packages:
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/template': 7.20.7 '@babel/template': 7.20.7
'@babel/traverse': 7.21.0 '@babel/traverse': 7.21.2
'@babel/types': 7.21.0 '@babel/types': 7.21.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
...@@ -259,12 +259,12 @@ packages: ...@@ -259,12 +259,12 @@ packages:
js-tokens: 4.0.0 js-tokens: 4.0.0
dev: true dev: true
/@babel/parser/7.21.1: /@babel/parser/7.21.2:
resolution: {integrity: sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==} resolution: {integrity: sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
hasBin: true hasBin: true
dependencies: dependencies:
'@babel/types': 7.21.0 '@babel/types': 7.21.2
dev: true dev: true
/@babel/template/7.20.7: /@babel/template/7.20.7:
...@@ -272,12 +272,12 @@ packages: ...@@ -272,12 +272,12 @@ packages:
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/code-frame': 7.18.6 '@babel/code-frame': 7.18.6
'@babel/parser': 7.21.1 '@babel/parser': 7.21.2
'@babel/types': 7.21.0 '@babel/types': 7.21.2
dev: true dev: true
/@babel/traverse/7.21.0: /@babel/traverse/7.21.2:
resolution: {integrity: sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==} resolution: {integrity: sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/code-frame': 7.18.6 '@babel/code-frame': 7.18.6
...@@ -286,16 +286,16 @@ packages: ...@@ -286,16 +286,16 @@ packages:
'@babel/helper-function-name': 7.21.0 '@babel/helper-function-name': 7.21.0
'@babel/helper-hoist-variables': 7.18.6 '@babel/helper-hoist-variables': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6
'@babel/parser': 7.21.1 '@babel/parser': 7.21.2
'@babel/types': 7.21.0 '@babel/types': 7.21.2
debug: 4.3.4 debug: 4.3.4
globals: 11.12.0 globals: 11.12.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@babel/types/7.21.0: /@babel/types/7.21.2:
resolution: {integrity: sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==} resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/helper-string-parser': 7.19.4 '@babel/helper-string-parser': 7.19.4
...@@ -808,12 +808,12 @@ packages: ...@@ -808,12 +808,12 @@ packages:
- '@types/node' - '@types/node'
dev: true dev: true
/@microsoft/api-extractor-model/7.26.4_@types+node@18.14.0: /@microsoft/api-extractor-model/7.26.4_@types+node@18.14.1:
resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==}
dependencies: dependencies:
'@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2 '@microsoft/tsdoc-config': 0.16.2
'@rushstack/node-core-library': 3.55.2_@types+node@18.14.0 '@rushstack/node-core-library': 3.55.2_@types+node@18.14.1
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
dev: true dev: true
...@@ -838,14 +838,14 @@ packages: ...@@ -838,14 +838,14 @@ packages:
- '@types/node' - '@types/node'
dev: true dev: true
/@microsoft/api-extractor/7.34.4_@types+node@18.14.0: /@microsoft/api-extractor/7.34.4_@types+node@18.14.1:
resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==}
hasBin: true hasBin: true
dependencies: dependencies:
'@microsoft/api-extractor-model': 7.26.4_@types+node@18.14.0 '@microsoft/api-extractor-model': 7.26.4_@types+node@18.14.1
'@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc': 0.14.2
'@microsoft/tsdoc-config': 0.16.2 '@microsoft/tsdoc-config': 0.16.2
'@rushstack/node-core-library': 3.55.2_@types+node@18.14.0 '@rushstack/node-core-library': 3.55.2_@types+node@18.14.1
'@rushstack/rig-package': 0.3.18 '@rushstack/rig-package': 0.3.18
'@rushstack/ts-command-line': 4.13.2 '@rushstack/ts-command-line': 4.13.2
colors: 1.2.5 colors: 1.2.5
...@@ -1117,7 +1117,7 @@ packages: ...@@ -1117,7 +1117,7 @@ packages:
z-schema: 5.0.5 z-schema: 5.0.5
dev: true dev: true
/@rushstack/node-core-library/3.55.2_@types+node@18.14.0: /@rushstack/node-core-library/3.55.2_@types+node@18.14.1:
resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==} resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==}
peerDependencies: peerDependencies:
'@types/node': '*' '@types/node': '*'
...@@ -1125,7 +1125,7 @@ packages: ...@@ -1125,7 +1125,7 @@ packages:
'@types/node': '@types/node':
optional: true optional: true
dependencies: dependencies:
'@types/node': 18.14.0 '@types/node': 18.14.1
colors: 1.2.5 colors: 1.2.5
fs-extra: 7.0.1 fs-extra: 7.0.1
import-lazy: 4.0.0 import-lazy: 4.0.0
...@@ -1225,16 +1225,16 @@ packages: ...@@ -1225,16 +1225,16 @@ packages:
resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
dev: true dev: true
/@types/node/18.14.0: /@types/node/18.14.1:
resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==} resolution: {integrity: sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ==}
dev: true dev: true
/@wesbos/code-icons/1.2.4: /@wesbos/code-icons/1.2.4:
resolution: {integrity: sha512-ZiU0xf7epnCRrLDQIPnFstzoNWDvcUTtKoDU3VhpjsaGRzVClSmsi39c4kHxIOdfxvg4zwdW+goH96xr/vMTQQ==} resolution: {integrity: sha512-ZiU0xf7epnCRrLDQIPnFstzoNWDvcUTtKoDU3VhpjsaGRzVClSmsi39c4kHxIOdfxvg4zwdW+goH96xr/vMTQQ==}
dependencies: dependencies:
'@types/node': 18.14.0 '@types/node': 18.14.1
vite: 4.1.3_@types+node@18.14.0 vite: 4.1.4_@types+node@18.14.1
vite-plugin-dts: 1.7.3_p5hrhorwe35jeumio2pz6ujxge vite-plugin-dts: 1.7.3_75ucbpp7logpdg7n5tkyaoxqqm
vscode-icons-js: 11.6.1 vscode-icons-js: 11.6.1
transitivePeerDependencies: transitivePeerDependencies:
- less - less
...@@ -1393,8 +1393,8 @@ packages: ...@@ -1393,8 +1393,8 @@ packages:
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dev: true dev: true
/axios/1.3.3_debug@4.3.4: /axios/1.3.4_debug@4.3.4:
resolution: {integrity: sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA==} resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==}
dependencies: dependencies:
follow-redirects: 1.15.2_debug@4.3.4 follow-redirects: 1.15.2_debug@4.3.4
form-data: 4.0.0 form-data: 4.0.0
...@@ -1454,7 +1454,7 @@ packages: ...@@ -1454,7 +1454,7 @@ packages:
hasBin: true hasBin: true
dependencies: dependencies:
caniuse-lite: 1.0.30001457 caniuse-lite: 1.0.30001457
electron-to-chromium: 1.4.304 electron-to-chromium: 1.4.308
node-releases: 2.0.10 node-releases: 2.0.10
update-browserslist-db: 1.0.10_browserslist@4.21.5 update-browserslist-db: 1.0.10_browserslist@4.21.5
dev: true dev: true
...@@ -1750,7 +1750,7 @@ packages: ...@@ -1750,7 +1750,7 @@ packages:
execa: 4.1.0 execa: 4.1.0
polyfill-library: 3.111.0 polyfill-library: 3.111.0
semver: 7.3.8 semver: 7.3.8
snyk: 1.1107.0 snyk: 1.1108.0
yargs: 15.4.1 yargs: 15.4.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
...@@ -2012,8 +2012,8 @@ packages: ...@@ -2012,8 +2012,8 @@ packages:
tslib: 2.5.0 tslib: 2.5.0
dev: true dev: true
/electron-to-chromium/1.4.304: /electron-to-chromium/1.4.308:
resolution: {integrity: sha512-6c8M+ojPgDIXN2NyfGn8oHASXYnayj+gSEnGeLMKb9zjsySeVB/j7KkNAAG9yDcv8gNlhvFg5REa1N/kQU6pgA==} resolution: {integrity: sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==}
dev: true dev: true
/emoji-regex/7.0.3: /emoji-regex/7.0.3:
...@@ -2310,7 +2310,7 @@ packages: ...@@ -2310,7 +2310,7 @@ packages:
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
dependencies: dependencies:
inherits: 2.0.4 inherits: 2.0.4
readable-stream: 2.3.7 readable-stream: 2.3.8
dev: true dev: true
/fs-extra/10.1.0: /fs-extra/10.1.0:
...@@ -2509,7 +2509,7 @@ packages: ...@@ -2509,7 +2509,7 @@ packages:
he: 1.2.0 he: 1.2.0
param-case: 3.0.4 param-case: 3.0.4
relateurl: 0.2.7 relateurl: 0.2.7
terser: 5.16.4 terser: 5.16.5
dev: true dev: true
/html-minifier/4.0.0: /html-minifier/4.0.0:
...@@ -2751,7 +2751,7 @@ packages: ...@@ -2751,7 +2751,7 @@ packages:
engines: {node: '>=12.0.0'} engines: {node: '>=12.0.0'}
hasBin: true hasBin: true
dependencies: dependencies:
'@babel/parser': 7.21.1 '@babel/parser': 7.21.2
'@jsdoc/salty': 0.2.3 '@jsdoc/salty': 0.2.3
'@types/markdown-it': 12.2.3 '@types/markdown-it': 12.2.3
bluebird: 3.7.2 bluebird: 3.7.2
...@@ -3971,8 +3971,8 @@ packages: ...@@ -3971,8 +3971,8 @@ packages:
pify: 2.3.0 pify: 2.3.0
dev: true dev: true
/readable-stream/2.3.7: /readable-stream/2.3.8:
resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
dependencies: dependencies:
core-util-is: 1.0.3 core-util-is: 1.0.3
inherits: 2.0.4 inherits: 2.0.4
...@@ -4167,8 +4167,8 @@ packages: ...@@ -4167,8 +4167,8 @@ packages:
supports-color: 7.2.0 supports-color: 7.2.0
dev: true dev: true
/snyk/1.1107.0: /snyk/1.1108.0:
resolution: {integrity: sha512-SMspMZFp32NSevt4HZrKAsomJ92ZteuSuQhvNqwiIEIKirrWg9IxaHfnWZLMLEWiB6D4g1xnjred0RFSDVzdTQ==} resolution: {integrity: sha512-HThKYgmcZgNG9ONuGUtJ/JuUaDzyqRHbPljJc50dtU9nEBmUc915jtPfrKKITdn6K+Ap9Rs8eVqnXWq0MGW0hA==}
engines: {node: '>=12'} engines: {node: '>=12'}
hasBin: true hasBin: true
dev: true dev: true
...@@ -4356,8 +4356,8 @@ packages: ...@@ -4356,8 +4356,8 @@ packages:
engines: {'0': node >=0.4.0} engines: {'0': node >=0.4.0}
dev: true dev: true
/terser/5.16.4: /terser/5.16.5:
resolution: {integrity: sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==} resolution: {integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
dependencies: dependencies:
...@@ -4553,28 +4553,28 @@ packages: ...@@ -4553,28 +4553,28 @@ packages:
resolution: {integrity: sha512-g0cm0wbrR6b6wR8FWtfD1RSDPacdumKEOAnneXv+NpJ9ez+j6rklRv6lMOO+aPf+Y6Zb8OzgIk0FXBZ6h+DeZQ==} resolution: {integrity: sha512-g0cm0wbrR6b6wR8FWtfD1RSDPacdumKEOAnneXv+NpJ9ez+j6rklRv6lMOO+aPf+Y6Zb8OzgIk0FXBZ6h+DeZQ==}
dev: true dev: true
/vite-plugin-dts/1.7.3_p5hrhorwe35jeumio2pz6ujxge: /vite-plugin-dts/1.7.3_75ucbpp7logpdg7n5tkyaoxqqm:
resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies: peerDependencies:
vite: '>=2.9.0' vite: '>=2.9.0'
dependencies: dependencies:
'@microsoft/api-extractor': 7.34.4_@types+node@18.14.0 '@microsoft/api-extractor': 7.34.4_@types+node@18.14.1
'@rollup/pluginutils': 5.0.2 '@rollup/pluginutils': 5.0.2
'@rushstack/node-core-library': 3.55.2_@types+node@18.14.0 '@rushstack/node-core-library': 3.55.2_@types+node@18.14.1
debug: 4.3.4 debug: 4.3.4
fast-glob: 3.2.12 fast-glob: 3.2.12
fs-extra: 10.1.0 fs-extra: 10.1.0
kolorist: 1.7.0 kolorist: 1.7.0
ts-morph: 17.0.1 ts-morph: 17.0.1
vite: 4.1.3_@types+node@18.14.0 vite: 4.1.4_@types+node@18.14.1
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- rollup - rollup
- supports-color - supports-color
dev: true dev: true
/vite-plugin-dts/1.7.3_vite@4.1.3: /vite-plugin-dts/1.7.3_vite@4.1.4:
resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies: peerDependencies:
...@@ -4588,7 +4588,7 @@ packages: ...@@ -4588,7 +4588,7 @@ packages:
fs-extra: 10.1.0 fs-extra: 10.1.0
kolorist: 1.7.0 kolorist: 1.7.0
ts-morph: 17.0.1 ts-morph: 17.0.1
vite: 4.1.3 vite: 4.1.4
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- rollup - rollup
...@@ -4599,8 +4599,8 @@ packages: ...@@ -4599,8 +4599,8 @@ packages:
resolution: {integrity: sha512-67Abh1X9rhJq7u9Hxq9CJznM0acAPynvumkQ33wzvigW1aaPfsHNNMnhArABYryXnqASlmiZHpbhYOtDI9KfYw==} resolution: {integrity: sha512-67Abh1X9rhJq7u9Hxq9CJznM0acAPynvumkQ33wzvigW1aaPfsHNNMnhArABYryXnqASlmiZHpbhYOtDI9KfYw==}
dependencies: dependencies:
'@wesbos/code-icons': 1.2.4 '@wesbos/code-icons': 1.2.4
vite: 4.1.3 vite: 4.1.4
vite-plugin-dts: 1.7.3_vite@4.1.3 vite-plugin-dts: 1.7.3_vite@4.1.4
vscode-icons-js: 11.6.1 vscode-icons-js: 11.6.1
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
...@@ -4613,33 +4613,33 @@ packages: ...@@ -4613,33 +4613,33 @@ packages:
- terser - terser
dev: true dev: true
/vite-plugin-minify/1.5.2_vite@4.1.3: /vite-plugin-minify/1.5.2_vite@4.1.4:
resolution: {integrity: sha512-clf3THHlet1jD35y8+mbw/xgACbdUQ1Eyc9zZFiqaxVOZLSC3UbrkOYOG+Nf4cleRjWgb8czbXrnQiWZICVh3Q==} resolution: {integrity: sha512-clf3THHlet1jD35y8+mbw/xgACbdUQ1Eyc9zZFiqaxVOZLSC3UbrkOYOG+Nf4cleRjWgb8czbXrnQiWZICVh3Q==}
peerDependencies: peerDependencies:
vite: '*' vite: '*'
dependencies: dependencies:
html-minifier-terser: 6.1.0 html-minifier-terser: 6.1.0
vite: 4.1.3 vite: 4.1.4
dev: true dev: true
/vite-plugin-mkcert/1.13.2_vite@4.1.3: /vite-plugin-mkcert/1.13.2_vite@4.1.4:
resolution: {integrity: sha512-zna6J66cgCaNt2vAP/kDLuBbzr3kivwS4wjBxGvoKK61PBdvlPW2M+vxEGEpuRrrW7X4vQAX9JzmXk1QSAI4Eg==} resolution: {integrity: sha512-zna6J66cgCaNt2vAP/kDLuBbzr3kivwS4wjBxGvoKK61PBdvlPW2M+vxEGEpuRrrW7X4vQAX9JzmXk1QSAI4Eg==}
engines: {node: '>=v16.7.0'} engines: {node: '>=v16.7.0'}
peerDependencies: peerDependencies:
vite: '>=3' vite: '>=3'
dependencies: dependencies:
'@octokit/rest': 19.0.7 '@octokit/rest': 19.0.7
axios: 1.3.3_debug@4.3.4 axios: 1.3.4_debug@4.3.4
debug: 4.3.4 debug: 4.3.4
picocolors: 1.0.0 picocolors: 1.0.0
vite: 4.1.3 vite: 4.1.4
transitivePeerDependencies: transitivePeerDependencies:
- encoding - encoding
- supports-color - supports-color
dev: true dev: true
/vite/4.1.3: /vite/4.1.4:
resolution: {integrity: sha512-0Zqo4/Fr/swSOBmbl+HAAhOjrqNwju+yTtoe4hQX9UsARdcuc9njyOdr6xU0DDnV7YP0RT6mgTTOiRtZgxfCxA==} resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
...@@ -4671,8 +4671,8 @@ packages: ...@@ -4671,8 +4671,8 @@ packages:
fsevents: 2.3.2 fsevents: 2.3.2
dev: true dev: true
/vite/4.1.3_@types+node@18.14.0: /vite/4.1.4_@types+node@18.14.1:
resolution: {integrity: sha512-0Zqo4/Fr/swSOBmbl+HAAhOjrqNwju+yTtoe4hQX9UsARdcuc9njyOdr6xU0DDnV7YP0RT6mgTTOiRtZgxfCxA==} resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
...@@ -4696,7 +4696,7 @@ packages: ...@@ -4696,7 +4696,7 @@ packages:
terser: terser:
optional: true optional: true
dependencies: dependencies:
'@types/node': 18.14.0 '@types/node': 18.14.1
esbuild: 0.16.17 esbuild: 0.16.17
postcss: 8.4.21 postcss: 8.4.21
resolve: 1.22.1 resolve: 1.22.1
......
"use strict";
import {expect} from "chai"
import {equipWithInternal} from "../../../../application/source/types/internal.mjs";
import {Observer} from "../../../../application/source/types/observer.mjs";
class SomeRandomClass1 extends Object {
doit() {
return "done";
}
}
class SomeRandomClass2 extends Object {
constructor() {
super();
equipWithInternal.call(this);
}
get defaultInternal() {
return {
test: "test"
}
}
}
describe('Base inject with options', function () {
describe('new SomeRandomClass', function () {
it('is instance of SomeRandomClass1', function () {
expect(new SomeRandomClass2).not.to.be.instanceOf(SomeRandomClass1);
expect(new SomeRandomClass2).to.be.instanceOf(SomeRandomClass2);
});
it('is instance of SomeRandomClass2', function () {
expect(new SomeRandomClass1).to.be.instanceOf(SomeRandomClass1);
expect(new SomeRandomClass1).not.to.be.instanceOf(SomeRandomClass2);
});
})
describe('Extends SomeRandomClass with internals', function () {
it('attach and notify internal observer', function (done) {
const c = new SomeRandomClass2;
c.attachInternalObserver(new Observer(() => {
done();
}));
c.setInternal("test", "test");
});
it('attach and remove internal observer', function () {
const c = new SomeRandomClass2;
const observer = new Observer(() => {
});
expect(c.containsInternalObserver(observer)).to.be.false;
c.attachInternalObserver(observer);
expect(c.containsInternalObserver(observer)).to.be.true;
c.detachInternalObserver(observer);
expect(c.containsInternalObserver(observer)).to.be.false;
});
it("getInternal and setInternal", function () {
const c = new SomeRandomClass2;
expect(c.setInternal("test", "yeah")).to.be.instanceOf(SomeRandomClass2);
expect(c.getInternal("test")).to.be.equal("yeah");
});
it("deal with default values", function () {
const testClass = class extends Object {
constructor() {
super();
equipWithInternal.call(this);
}
get internalDefaults() {
return {
test: "xyz"
}
}
}
const c = new testClass;
expect(c.getInternal("test")).to.be.equal("xyz");
expect(c.getInternal("test2", "abc")).to.be.equal("abc");
});
it("deal with defaults from defaults", function () {
const testClass = class extends Object {
constructor() {
super();
equipWithInternal.call(this);
}
get internalDefaults() {
return {
test: "xyz"
}
}
}
const testClass2 = class extends testClass {
constructor() {
super();
equipWithInternal.call(this);
}
get internalDefaults() {
return Object.assign({}, super.internalDefaults, {
test2: "abc"
})
}
}
const c = new testClass2;
expect(c.getInternal("test")).to.be.equal("xyz");
expect(c.getInternal("test2")).to.be.equal("abc");
});
it("set multiple values", function () {
const c = new SomeRandomClass2;
expect(c.setInternals({
test: "yeah",
test2: "yeah2"
})).to.be.instanceOf(SomeRandomClass2);
expect(c.getInternal("test")).to.be.equal("yeah");
expect(c.getInternal("test2")).to.be.equal("yeah2");
c.setInternals({
test2: "yeah2-new",
test3: "yeah3"
});
expect(c.getInternal("test")).to.be.equal("yeah");
expect(c.getInternal("test2")).to.be.equal("yeah2-new");
expect(c.getInternal("test3")).to.be.equal("yeah3");
});
});
})
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment