diff --git a/application/source/dom/constants.mjs b/application/source/dom/constants.mjs index 432ae76ebcac8f1363b321b256d159bbab018224..cc2770b5c98e45e5f503bd85da335ebe34057590 100644 --- a/application/source/dom/constants.mjs +++ b/application/source/dom/constants.mjs @@ -59,6 +59,9 @@ export { ATTRIBUTE_HIDDEN, objectUpdaterLinkSymbol, customElementUpdaterLinkSymbol, + optionCallbackName, + ATTRIBUTE_SCRIPT_HOST, + ATTRIBUTE_OPTION_CALLBACK }; /** @@ -86,6 +89,16 @@ const ATTRIBUTE_PREFIX = "data-monster-"; */ const ATTRIBUTE_OPTIONS = `${ATTRIBUTE_PREFIX}options`; +/** + * This is name of the attribute to pass the script host to a control + * + * @memberOf Monster.DOM + * @license AGPLv3 + * @since 3.48.0 + * @type {string} + */ +const ATTRIBUTE_SCRIPT_HOST = `${ATTRIBUTE_PREFIX}script-host`; + /** * This is the name of the attribute to pass options to a control * @@ -96,6 +109,26 @@ const ATTRIBUTE_OPTIONS = `${ATTRIBUTE_PREFIX}options`; */ const ATTRIBUTE_OPTIONS_SELECTOR = `${ATTRIBUTE_PREFIX}options-selector`; +/** + * This is the name of the attribute to pass the callback to a control + * + * @memberOf Monster.DOM + * @license AGPLv3 + * @since 3.48.0 + * @type {string} + */ +const ATTRIBUTE_OPTION_CALLBACK = `${ATTRIBUTE_PREFIX}option-callback`; + +/** + * This is the name of the callback to pass the callback to a control + * + * @memberOf Monster.DOM + * @license AGPLv3 + * @since 3.48.0 + * @type {string} + */ +const optionCallbackName = `initCustomControlOptionsCallback`; + /** * @memberOf Monster.DOM * @type {string} diff --git a/application/source/dom/customelement.mjs b/application/source/dom/customelement.mjs index 9ce57bfa812b77d25df6591799a5af41fbde428d..0a6b79f0268017eb5e511cf0b59d18e58c3f1147 100644 --- a/application/source/dom/customelement.mjs +++ b/application/source/dom/customelement.mjs @@ -5,6 +5,7 @@ * License text available at https://www.gnu.org/licenses/agpl-3.0.en.html */ +import {findElementWithIdUpwards} from "./util.mjs"; import {internalSymbol} from "../constants.mjs"; import {extend} from "../data/extend.mjs"; import {Pathfinder} from "../data/pathfinder.mjs"; @@ -22,8 +23,11 @@ import { ATTRIBUTE_DISABLED, ATTRIBUTE_ERRORMESSAGE, ATTRIBUTE_OPTIONS, + ATTRIBUTE_OPTION_CALLBACK, ATTRIBUTE_OPTIONS_SELECTOR, + ATTRIBUTE_SCRIPT_HOST, customElementUpdaterLinkSymbol, + optionCallbackName } from "./constants.mjs"; import {findDocumentTemplate, Template} from "./template.mjs"; import {addObjectWithUpdaterToElement} from "./updater.mjs"; @@ -67,6 +71,12 @@ const attributeObserverSymbol = Symbol.for("@schukai/monster/dom/@@attributeObse */ const attributeMutationObserverSymbol = Symbol("@schukai/monster/dom/@@mutationObserver"); +/** + * @private + * @type {symbol} + */ +const scriptHostElementSymbol = Symbol("scriptHostElement"); + /** * HTMLElement * @external HTMLElement @@ -212,6 +222,7 @@ class CustomElement extends HTMLElement { }); this[initMethodSymbol](); initOptionObserver.call(this); + this[scriptHostElementSymbol] = []; } @@ -520,6 +531,7 @@ class CustomElement extends HTMLElement { self.setOptions(ScriptOptions); } + if (self.getOption("shadowMode", false) !== false) { try { initShadowRoot.call(self); @@ -541,6 +553,8 @@ class CustomElement extends HTMLElement { } } + initFromCallbackHost.call(this); + try { nodeList = new Set([...elements, ...getSlottedElements.call(self)]); } catch (e) { @@ -607,7 +621,7 @@ class CustomElement extends HTMLElement { const self = this; if (attrName.startsWith("data-monster-option-")) { - setOptionFromAttribute(self, attrName, this[internalSymbol].getSubject()["options"]) + setOptionFromAttribute(self, attrName, this[internalSymbol].getSubject()["options"]) } const callback = self[attributeObserverSymbol]?.[attrName]; @@ -641,6 +655,99 @@ class CustomElement extends HTMLElement { return containChildNode.call(self.shadowRoot, node); } + + /** + * Calls a callback function if it exists. + * + * @param {string} name + * @param {*} args + * @returns {*} + */ + callCallback(name, args) { + const self = this; + return callControlCallback.call(self, name, ...args); + } + + +} + +/** + * @param {string} callBackFunctionName + * @param {*} args + * @return {any} + */ +function callControlCallback(callBackFunctionName, ...args) { + const self = this; + + if (!isString(callBackFunctionName) || callBackFunctionName === "") { + return; + } + + if (callBackFunctionName in self) { + return self[callBackFunctionName](self, ...args); + + } + + if (!self.hasAttribute(ATTRIBUTE_SCRIPT_HOST)) { + return; + } + + if (self[scriptHostElementSymbol].length === 0) { + + const targetId = self.getAttribute(ATTRIBUTE_SCRIPT_HOST); + if (!targetId) { + return; + } + + const list = targetId.split(",") + for (const id of list) { + const host = findElementWithIdUpwards(self, targetId); + if (!(host instanceof HTMLElement)) { + continue; + } + + self[scriptHostElementSymbol].push(host); + } + } + + for (const host of self[scriptHostElementSymbol]) { + if (callBackFunctionName in host) { + try { + return host[callBackFunctionName](self, ...args); + } catch (e) { + addAttributeToken(self, ATTRIBUTE_ERRORMESSAGE, e.toString()); + } + } + } + + addAttributeToken(self, ATTRIBUTE_ERRORMESSAGE, `callback ${callBackFunctionName} not found`); + +} + +/** + * This Function is called when the element is attached to the DOM. + * + * It looks for the attribute `data-monster-option-callback`. Is this attribute is not set, the default callback + * `initCustomControlOptionsCallback` is called. + * + * The callback is searched in this element and in the host element. If the callback is found, it is called with the + * element as parameter. + * + * The `monster + * + * @this CustomElement + */ +function initFromCallbackHost() { + const self = this; + + let callBackFunctionName = optionCallbackName // default callback + if (self.hasAttribute(ATTRIBUTE_OPTION_CALLBACK)) { + callBackFunctionName = self.getAttribute(ATTRIBUTE_OPTION_CALLBACK); + } + + callControlCallback.call(self, callBackFunctionName); + + } /** diff --git a/development/package.json b/development/package.json index 28037f58c740bcb7bb93a1916db68be8c82ec693..0c4e75bc1004095ad280e50fd1d9ab4e504047ef 100644 --- a/development/package.json +++ b/development/package.json @@ -33,14 +33,14 @@ "crypt": "^0.0.2", "cssnano": "^6.0.1", "esbuild": "^0.17.18", - "flow-bin": "^0.205.0", + "flow-bin": "^0.205.1", "fs": "0.0.1-security", "glob": "^10.2.2", "graphviz": "^0.0.9", "jsdoc": "^4.0.2", "jsdoc-external-example": "github:volker-schukai/jsdoc-external-example", "jsdoc-plantuml": "^1.0.3", - "jsdom": "^21.1.2", + "jsdom": "^22.0.0", "jsdom-global": "^3.0.2", "mocha": "^10.2.0", "node-plantuml": "^0.9.0", @@ -54,18 +54,18 @@ "postcss-nesting": "^11.2.2", "postcss-normalize": "^10.0.1", "postcss-responsive-type": "^1.0.0", - "postcss-rtlcss": "^4.0.5", + "postcss-rtlcss": "^4.0.6", "postcss-strip-units": "^2.0.1", "rome": "^12.0.0", "sinon": "^15.0.4", "url": "^0.11.0", "url-exist": "3.0.1", "util": "^0.12.5", - "vite": "^4.3.3", + "vite": "^4.3.5", "vite-plugin-banner": "^0.7.0", "vite-plugin-list-directory-contents": "^1.4.5", "vite-plugin-minify": "^1.5.2", - "vite-plugin-mkcert": "^1.14.1", + "vite-plugin-mkcert": "^1.15.0", "ws": "^8.13.0" } } diff --git a/development/pnpm-lock.yaml b/development/pnpm-lock.yaml index 805e452118dfeeeec49ba7dffe2a76a475b8518c..60681fd7ca66ac79ab008849b9c2afac1ba2bba3 100644 --- a/development/pnpm-lock.yaml +++ b/development/pnpm-lock.yaml @@ -41,8 +41,8 @@ devDependencies: specifier: ^0.17.18 version: 0.17.18 flow-bin: - specifier: ^0.205.0 - version: 0.205.0 + specifier: ^0.205.1 + version: 0.205.1 fs: specifier: 0.0.1-security version: 0.0.1-security @@ -62,11 +62,11 @@ devDependencies: specifier: ^1.0.3 version: 1.0.3(jsdoc@4.0.2) jsdom: - specifier: ^21.1.2 - version: 21.1.2 + specifier: ^22.0.0 + version: 22.0.0 jsdom-global: specifier: ^3.0.2 - version: 3.0.2(jsdom@21.1.2) + version: 3.0.2(jsdom@22.0.0) mocha: specifier: ^10.2.0 version: 10.2.0 @@ -104,8 +104,8 @@ devDependencies: specifier: ^1.0.0 version: 1.0.0 postcss-rtlcss: - specifier: ^4.0.5 - version: 4.0.5(postcss@8.4.23) + specifier: ^4.0.6 + version: 4.0.6(postcss@8.4.23) postcss-strip-units: specifier: ^2.0.1 version: 2.0.1 @@ -125,8 +125,8 @@ devDependencies: specifier: ^0.12.5 version: 0.12.5 vite: - specifier: ^4.3.3 - version: 4.3.3(@types/node@18.16.3) + specifier: ^4.3.5 + version: 4.3.5(@types/node@18.16.4) vite-plugin-banner: specifier: ^0.7.0 version: 0.7.0 @@ -135,10 +135,10 @@ devDependencies: version: 1.4.5 vite-plugin-minify: specifier: ^1.5.2 - version: 1.5.2(vite@4.3.3) + version: 1.5.2(vite@4.3.5) vite-plugin-mkcert: - specifier: ^1.14.1 - version: 1.14.1(vite@4.3.3) + specifier: ^1.15.0 + version: 1.15.0(vite@4.3.5) ws: specifier: ^8.13.0 version: 8.13.0 @@ -165,17 +165,17 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.21.5: - resolution: {integrity: sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g==} + /@babel/core@7.21.8: + resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.21.4 '@babel/generator': 7.21.5 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.5) + '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) '@babel/helper-module-transforms': 7.21.5 '@babel/helpers': 7.21.5 - '@babel/parser': 7.21.5 + '@babel/parser': 7.21.8 '@babel/template': 7.20.7 '@babel/traverse': 7.21.5 '@babel/types': 7.21.5 @@ -198,14 +198,14 @@ packages: jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.5): + /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8): resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.5 + '@babel/core': 7.21.8 '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 lru-cache: 5.1.1 @@ -304,8 +304,8 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.21.5: - resolution: {integrity: sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ==} + /@babel/parser@7.21.8: + resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: @@ -317,7 +317,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.21.4 - '@babel/parser': 7.21.5 + '@babel/parser': 7.21.8 '@babel/types': 7.21.5 dev: true @@ -331,7 +331,7 @@ packages: '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.21.5 + '@babel/parser': 7.21.8 '@babel/types': 7.21.5 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 @@ -567,7 +567,7 @@ packages: resolution: {integrity: sha512-AouQ5I0a9TeRdHSN093WX5yz3ZlMbRyQ1xHn7K4OmXcbsRnS96Biy5Q2sTkqLwwTouAk/SNeWIjzrDZFQHp9Mw==} hasBin: true dependencies: - '@babel/core': 7.21.5 + '@babel/core': 7.21.8 globals: 11.12.0 yargs: 13.3.2 transitivePeerDependencies: @@ -586,6 +586,18 @@ packages: resolution: {integrity: sha512-TlQiXt/vS5ZwY0V3salvlyQzIzMGZEyw9inmJA25A8heL2kBVENbToiEc64R6ETNf5YHa2lwnc2I7iNHP9SqeQ==} dev: true + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.0.1 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} @@ -639,24 +651,24 @@ packages: lodash: 4.17.21 dev: true - /@microsoft/api-extractor-model@7.26.7(@types/node@18.16.3): - resolution: {integrity: sha512-rx3Tq632VG3ddR74kPuPbv1qmUgO2IuCvn1z16hbNWNS5RhnTQqNPWIm7NVoi6lCh2E7uxzfmdnWXIXiJhM5IQ==} + /@microsoft/api-extractor-model@7.26.8(@types/node@18.16.4): + resolution: {integrity: sha512-ESj3bBJkiMg/8tS0PW4+2rUgTVwOEfy41idTnFgdbVX+O50bN6S99MV6FIPlCZWCnRDcBfwxRXLdAkOQQ0JqGw==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.58.0(@types/node@18.16.3) + '@rushstack/node-core-library': 3.58.0(@types/node@18.16.4) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.34.7(@types/node@18.16.3): - resolution: {integrity: sha512-8CrrYyOBWqc4XFviR1KSuHSlmJjlnC5CVpPkcFB8HXiLABUVaVWFTsOzJIwUU6z8mc4BZPZ8tSGAg/mwFDU31Q==} + /@microsoft/api-extractor@7.34.8(@types/node@18.16.4): + resolution: {integrity: sha512-2Eh1PlZ8wULtH3kyAWcj62gFtjGKRXrEplsCO54vMLjiav3qet454VpSBXwKkXBenBylZRMk3SMBcpcuJ8RnKQ==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.26.7(@types/node@18.16.3) + '@microsoft/api-extractor-model': 7.26.8(@types/node@18.16.4) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.58.0(@types/node@18.16.3) + '@rushstack/node-core-library': 3.58.0(@types/node@18.16.4) '@rushstack/rig-package': 0.3.18 '@rushstack/ts-command-line': 4.13.2 colors: 1.2.5 @@ -918,7 +930,7 @@ packages: dev: true optional: true - /@rushstack/node-core-library@3.58.0(@types/node@18.16.3): + /@rushstack/node-core-library@3.58.0(@types/node@18.16.4): resolution: {integrity: sha512-DHAZ3LTOEq2/EGURznpTJDnB3SNE2CKMDXuviQ6afhru6RykE3QoqXkeyjbpLb5ib5cpIRCPE/wykNe0xmQj3w==} peerDependencies: '@types/node': '*' @@ -926,7 +938,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 18.16.3 + '@types/node': 18.16.4 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -952,33 +964,33 @@ packages: string-argv: 0.3.2 dev: true - /@sentry-internal/tracing@7.50.0: - resolution: {integrity: sha512-4TQ4vN0aMBWsUXfJWk2xbe4x7fKfwCXgXKTtHC/ocwwKM+0EefV5Iw9YFG8IrIQN4vMtuRzktqcs9q0/Sbv7tg==} + /@sentry-internal/tracing@7.51.0: + resolution: {integrity: sha512-mhXl4B02OQq6/vevjX04OchmQbxPRaLci9vTTPcPcIz/n+wkum29ze35gHcJsPJUesScjd0m19Xou3C8fNnZRA==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.50.0 - '@sentry/types': 7.50.0 - '@sentry/utils': 7.50.0 + '@sentry/core': 7.51.0 + '@sentry/types': 7.51.0 + '@sentry/utils': 7.51.0 tslib: 1.14.1 dev: true - /@sentry/core@7.50.0: - resolution: {integrity: sha512-6oD1a3fYs4aiNK7tuJSd88LHjYJAetd7ZK/AfJniU7zWKj4jxIYfO8nhm0qdnhEDs81RcweVDmPhWm3Kwrzzsg==} + /@sentry/core@7.51.0: + resolution: {integrity: sha512-GgYwlXU8Y1kDEHsJO1Bmr2CNan5BzoNRR0TDBmxRgI/DgTNNSYrXeFDELgPi9/p/0XENeuttzDZ3iYd1nF7meA==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.50.0 - '@sentry/utils': 7.50.0 + '@sentry/types': 7.51.0 + '@sentry/utils': 7.51.0 tslib: 1.14.1 dev: true - /@sentry/node@7.50.0: - resolution: {integrity: sha512-11UJBKoQFMp7f8sbzeO2gENsKIUkVCNBTzuPRib7l2K1HMjSfacXmwwma7ZEs0mc3ofIZ1UYuyONAXmI1lK9cQ==} + /@sentry/node@7.51.0: + resolution: {integrity: sha512-UHJ0yN3I8hSrythr3/KPewh+xLIdjF6AU+BW3bgsP0ZtztrftrQk9+XnWRIX0p6ZstzoP4F3arkJIXkWfOk5Pg==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.50.0 - '@sentry/core': 7.50.0 - '@sentry/types': 7.50.0 - '@sentry/utils': 7.50.0 + '@sentry-internal/tracing': 7.51.0 + '@sentry/core': 7.51.0 + '@sentry/types': 7.51.0 + '@sentry/utils': 7.51.0 cookie: 0.4.2 https-proxy-agent: 5.0.1 lru_map: 0.3.3 @@ -987,16 +999,16 @@ packages: - supports-color dev: true - /@sentry/types@7.50.0: - resolution: {integrity: sha512-Zo9vyI98QNeYT0K0y57Rb4JRWDaPEgmp+QkQ4CRQZFUTWetO5fvPZ4Gb/R7TW16LajuHZlbJBHmvmNj2pkL2kw==} + /@sentry/types@7.51.0: + resolution: {integrity: sha512-8REzzY0DslDryp6Yxj+tJ4NkXFHulLW9k8dgZV2Qo/0rBDMKir8g0IHYeN8ZBcnWrx2F+6rQb6uN6BjyLZY7Dg==} engines: {node: '>=8'} dev: true - /@sentry/utils@7.50.0: - resolution: {integrity: sha512-iyPwwC6fwJsiPhH27ZbIiSsY5RaccHBqADS2zEjgKYhmP4P9WGgHRDrvLEnkOjqQyKNb6c0yfmv83n0uxYnolw==} + /@sentry/utils@7.51.0: + resolution: {integrity: sha512-y5zq4IfZDCm6cg0EQJMghUM4YjZToFni7J5OKopLXKVtc9YtRtkYoFuFqEWm4HBuBwplreiS/KkDQgWn3FVn7A==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.50.0 + '@sentry/types': 7.51.0 tslib: 1.14.1 dev: true @@ -1080,16 +1092,16 @@ packages: resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} dev: true - /@types/node@18.16.3: - resolution: {integrity: sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==} + /@types/node@18.16.4: + resolution: {integrity: sha512-LUhvPmAKAbgm+p/K11IWszLZVoZDlMF4NRmqbhEzDz/CnCuehPkZXwZbBCKGJsgjnuVejotBwM7B3Scrq4EqDw==} dev: true /@wesbos/code-icons@1.2.4: resolution: {integrity: sha512-ZiU0xf7epnCRrLDQIPnFstzoNWDvcUTtKoDU3VhpjsaGRzVClSmsi39c4kHxIOdfxvg4zwdW+goH96xr/vMTQQ==} dependencies: - '@types/node': 18.16.3 - vite: 4.3.3(@types/node@18.16.3) - vite-plugin-dts: 1.7.3(@types/node@18.16.3)(vite@4.3.3) + '@types/node': 18.16.4 + vite: 4.3.5(@types/node@18.16.4) + vite-plugin-dts: 1.7.3(@types/node@18.16.4)(vite@4.3.5) vscode-icons-js: 11.6.1 transitivePeerDependencies: - less @@ -1112,18 +1124,6 @@ packages: event-target-shim: 5.0.1 dev: true - /acorn-globals@7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - dependencies: - acorn: 8.8.2 - acorn-walk: 8.2.0 - dev: true - - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -1323,7 +1323,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001482 - electron-to-chromium: 1.4.378 + electron-to-chromium: 1.4.384 node-releases: 2.0.10 update-browserslist-db: 1.0.11(browserslist@4.21.5) dev: true @@ -1618,13 +1618,13 @@ packages: resolution: {integrity: sha512-uhipnEEH6SkC176Za0Rt3D7pTV60nTiS2Vn4wZBIQacUtfPBxuTG4dox/jy2yXDCEiFX62gYhehvCIYPudjzFA==} hasBin: true dependencies: - '@babel/core': 7.21.5 + '@babel/core': 7.21.8 '@financial-times/js-features-analyser': 0.0.4 browserslist: 4.21.5 execa: 4.1.0 polyfill-library: 3.111.0 semver: 7.5.0 - snyk: 1.1150.0 + snyk: 1.1152.0 yargs: 15.4.1 transitivePeerDependencies: - supports-color @@ -1698,7 +1698,7 @@ packages: css-declaration-sorter: 6.4.0(postcss@8.4.23) cssnano-utils: 4.0.0(postcss@8.4.23) postcss: 8.4.23 - postcss-calc: 9.0.0(postcss@8.4.23) + postcss-calc: 9.0.1(postcss@8.4.23) postcss-colormin: 6.0.0(postcss@8.4.23) postcss-convert-values: 6.0.0(postcss@8.4.23) postcss-discard-comments: 6.0.0(postcss@8.4.23) @@ -1809,10 +1809,6 @@ packages: type-detect: 4.0.8 dev: true - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -1889,8 +1885,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.378: - resolution: {integrity: sha512-RfCD26kGStl6+XalfX3DGgt3z2DNwJS5DKRHCpkPq5T/PqpZMPB1moSRXuK9xhkt/sF57LlpzJgNoYl7mO7Z6w==} + /electron-to-chromium@1.4.384: + resolution: {integrity: sha512-I97q0MmRAAqj53+a8vZsDkEXBZki+ehYAOPzwtQzALip52aEp2+BJqHFtTlsfjoqVZYwPpHC8wM6MbsSZQ/Eqw==} dev: true /emoji-regex@7.0.3: @@ -1974,39 +1970,10 @@ packages: engines: {node: '>=10'} dev: true - /escodegen@2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -2046,10 +2013,6 @@ packages: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -2099,8 +2062,8 @@ packages: hasBin: true dev: true - /flow-bin@0.205.0: - resolution: {integrity: sha512-akmM+++RkcIuFbfhhVfFnHNwdyUVjzZHzA9eeepiXm/NP7HUkOTndlX1o6/vjeOjUbDFcsXhvo209n4ZNK5ceA==} + /flow-bin@0.205.1: + resolution: {integrity: sha512-pGQ/ZFr9hnbhRmc+K3K1Ui9BwDivlesNEd2mZbm5pCnxEUvbbj9nXHlTD4s4qO0k+LBKYLMZzQwBVYyRUE380g==} engines: {node: '>=0.10.0'} hasBin: true dev: true @@ -2262,7 +2225,7 @@ packages: hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.1.4 + jackspeak: 2.2.0 minimatch: 9.0.0 minipass: 5.0.0 path-scurry: 1.7.0 @@ -2594,11 +2557,11 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jackspeak@2.1.4: - resolution: {integrity: sha512-7CGd4ZQu5M/FgQLlcgcsY858wf+ukg1ma5M95FACSfC54+88vm594Nv6C3NqWfk8wyK1u+E3SzvVsxr7bwONmg==} + /jackspeak@2.2.0: + resolution: {integrity: sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==} engines: {node: '>=14'} dependencies: - cliui: github.com/isaacs/cliui/9f97090165675fdda63a79c29bc36bb1033506b0 + '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 dev: true @@ -2645,7 +2608,7 @@ packages: engines: {node: '>=12.0.0'} hasBin: true dependencies: - '@babel/parser': 7.21.5 + '@babel/parser': 7.21.8 '@jsdoc/salty': 0.2.5 '@types/markdown-it': 12.2.3 bluebird: 3.7.2 @@ -2662,17 +2625,17 @@ packages: underscore: 1.13.6 dev: true - /jsdom-global@3.0.2(jsdom@21.1.2): + /jsdom-global@3.0.2(jsdom@22.0.0): resolution: {integrity: sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==} peerDependencies: jsdom: '>=10.0.0' dependencies: - jsdom: 21.1.2 + jsdom: 22.0.0 dev: true - /jsdom@21.1.2: - resolution: {integrity: sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ==} - engines: {node: '>=14'} + /jsdom@22.0.0: + resolution: {integrity: sha512-p5ZTEb5h+O+iU02t0GfEjAnkdYPrQSkfuTSMkMYyIoMvUNEHsbG0bHHbfXIcfTqD2UfvjQX7mmgiFsyRwGscVw==} + engines: {node: '>=16'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -2680,13 +2643,10 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.2 - acorn-globals: 7.0.1 cssstyle: 3.0.0 data-urls: 4.0.0 decimal.js: 10.4.3 domexception: 4.0.0 - escodegen: 2.0.0 form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 @@ -2785,14 +2745,6 @@ packages: engines: {node: '>=12'} dev: true - /levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true - /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -3210,18 +3162,6 @@ packages: mimic-fn: 2.1.0 dev: true - /optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.3 - dev: true - /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3377,8 +3317,8 @@ packages: postcss: 8.4.23 dev: true - /postcss-calc@9.0.0(postcss@8.4.23): - resolution: {integrity: sha512-B9BNW/SVh4SMJfoCQ6D9h1Wo7Yjqks7UdbiARJ16J5TIsQn5NEqwMF5joSgOYb26oJPUR5Uv3fCQ/4PvmZWeJQ==} + /postcss-calc@9.0.1(postcss@8.4.23): + resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.2 @@ -3742,14 +3682,14 @@ packages: postcss: 6.0.23 dev: true - /postcss-rtlcss@4.0.5(postcss@8.4.23): - resolution: {integrity: sha512-Yh5DKJwiqwSsCV9frm41kHNY+IMiaqS+ERRGNZ7jkYXqtrEwfQoKZG55dUESz8Vq7NJlDefjOiZ3KlQ8Nomsfg==} + /postcss-rtlcss@4.0.6(postcss@8.4.23): + resolution: {integrity: sha512-YNm6g2Y7Gngqtrpq3GC7cUkzH5Gq7aB+Lw9MSgF9s2ro1BDY7W4zqnd15g2ueatUUpSTg2/F5KDjQoTdjhbAKg==} engines: {node: '>=12.0.0'} peerDependencies: - postcss: ^8.4.6 + postcss: ^8.4.21 dependencies: postcss: 8.4.23 - rtlcss: 4.0.0 + rtlcss: 4.1.0 dev: true /postcss-selector-parser@6.0.12: @@ -3835,11 +3775,6 @@ packages: source-map-js: 1.0.2 dev: true - /prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: true - /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true @@ -3998,8 +3933,8 @@ packages: sprintf-js: 1.1.2 dev: true - /rollup@3.21.2: - resolution: {integrity: sha512-c4vC+JZ3bbF4Kqq2TtM7zSKtSyMybFOjqmomFax3xpfYaPZDZ4iz8NMIuBRMjnXOcKYozw7bC6vhJjiWD6JpzQ==} + /rollup@3.21.5: + resolution: {integrity: sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -4024,8 +3959,8 @@ packages: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true - /rtlcss@4.0.0: - resolution: {integrity: sha512-j6oypPP+mgFwDXL1JkLCtm6U/DQntMUqlv5SOhpgHhdIE+PmBcjrtAHIpXfbIup47kD5Sgja9JDsDF1NNOsBwQ==} + /rtlcss@4.1.0: + resolution: {integrity: sha512-W+N4hh0nVqVrrn3mRkHakxpB+c9cQ4CRT67O39kgA+1DjyhrdsqyCqIuHXyvWaXn4/835n+oX3fYJCi4+G/06A==} engines: {node: '>=12.0.0'} hasBin: true dependencies: @@ -4145,13 +4080,13 @@ packages: supports-color: 7.2.0 dev: true - /snyk@1.1150.0: - resolution: {integrity: sha512-jwDKDoR2wEko/NXN8FHsJi+w03R3vK/npImnpYc78SX3eGWSc4WCCvIGM2TsYHbXVvU8HsOr5m2lvAwF3v8rbw==} + /snyk@1.1152.0: + resolution: {integrity: sha512-4FNlDaBgoNSNX5N4+FpqnQrtgLxM+M91tbN5jgYWKPkAJLipAbuG/KhHIVdzCND4dEVf8vrfU1oL7XaVf6tVdQ==} engines: {node: '>=12'} hasBin: true requiresBuild: true dependencies: - '@sentry/node': 7.50.0 + '@sentry/node': 7.51.0 global-agent: 3.0.0 transitivePeerDependencies: - supports-color @@ -4426,13 +4361,6 @@ packages: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: true - /type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: true - /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -4560,21 +4488,21 @@ packages: resolution: {integrity: sha512-g0cm0wbrR6b6wR8FWtfD1RSDPacdumKEOAnneXv+NpJ9ez+j6rklRv6lMOO+aPf+Y6Zb8OzgIk0FXBZ6h+DeZQ==} dev: true - /vite-plugin-dts@1.7.3(@types/node@18.16.3)(vite@4.3.3): + /vite-plugin-dts@1.7.3(@types/node@18.16.4)(vite@4.3.5): resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: '>=2.9.0' dependencies: - '@microsoft/api-extractor': 7.34.7(@types/node@18.16.3) + '@microsoft/api-extractor': 7.34.8(@types/node@18.16.4) '@rollup/pluginutils': 5.0.2 - '@rushstack/node-core-library': 3.58.0(@types/node@18.16.3) + '@rushstack/node-core-library': 3.58.0(@types/node@18.16.4) debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.2.12 fs-extra: 10.1.0 kolorist: 1.8.0 ts-morph: 17.0.1 - vite: 4.3.3(@types/node@18.16.3) + vite: 4.3.5(@types/node@18.16.4) transitivePeerDependencies: - '@types/node' - rollup @@ -4585,8 +4513,8 @@ packages: resolution: {integrity: sha512-67Abh1X9rhJq7u9Hxq9CJznM0acAPynvumkQ33wzvigW1aaPfsHNNMnhArABYryXnqASlmiZHpbhYOtDI9KfYw==} dependencies: '@wesbos/code-icons': 1.2.4 - vite: 4.3.3(@types/node@18.16.3) - vite-plugin-dts: 1.7.3(@types/node@18.16.3)(vite@4.3.3) + vite: 4.3.5(@types/node@18.16.4) + vite-plugin-dts: 1.7.3(@types/node@18.16.4)(vite@4.3.5) vscode-icons-js: 11.6.1 transitivePeerDependencies: - '@types/node' @@ -4599,17 +4527,17 @@ packages: - terser dev: true - /vite-plugin-minify@1.5.2(vite@4.3.3): + /vite-plugin-minify@1.5.2(vite@4.3.5): resolution: {integrity: sha512-clf3THHlet1jD35y8+mbw/xgACbdUQ1Eyc9zZFiqaxVOZLSC3UbrkOYOG+Nf4cleRjWgb8czbXrnQiWZICVh3Q==} peerDependencies: vite: '*' dependencies: html-minifier-terser: 6.1.0 - vite: 4.3.3(@types/node@18.16.3) + vite: 4.3.5(@types/node@18.16.4) dev: true - /vite-plugin-mkcert@1.14.1(vite@4.3.3): - resolution: {integrity: sha512-s/TmH62VA3DYXaqX2230PomrHXSRwfYyXur1c8hN5fGEUrT+w9KnXHnurZ53AMSUc/bI7RF6bQ1K5J+hZQTjoQ==} + /vite-plugin-mkcert@1.15.0(vite@4.3.5): + resolution: {integrity: sha512-0Pz7iExvo7pS2HsxMe6Y/HIrsFJidXN8Sju7tsL1XYQdbUKb/D0L5Wkj3UoGQmbbWZUFf8nHHa0XYbd4FH6ZrA==} engines: {node: '>=v16.7.0'} peerDependencies: vite: '>=3' @@ -4618,14 +4546,14 @@ packages: axios: 1.4.0(debug@4.3.4) debug: 4.3.4(supports-color@8.1.1) picocolors: 1.0.0 - vite: 4.3.3(@types/node@18.16.3) + vite: 4.3.5(@types/node@18.16.4) transitivePeerDependencies: - encoding - supports-color dev: true - /vite@4.3.3(@types/node@18.16.3): - resolution: {integrity: sha512-MwFlLBO4udZXd+VBcezo3u8mC77YQk+ik+fbc0GZWGgzfbPP+8Kf0fldhARqvSYmtIWoAJ5BXPClUbMTlqFxrA==} + /vite@4.3.5(@types/node@18.16.4): + resolution: {integrity: sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -4649,10 +4577,10 @@ packages: terser: optional: true dependencies: - '@types/node': 18.16.3 + '@types/node': 18.16.4 esbuild: 0.17.18 postcss: 8.4.23 - rollup: 3.21.2 + rollup: 3.21.5 optionalDependencies: fsevents: 2.3.2 dev: true @@ -4745,11 +4673,6 @@ packages: isexe: 2.0.0 dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true @@ -4939,22 +4862,6 @@ packages: commander: 9.5.0 dev: true - github.com/isaacs/cliui/9f97090165675fdda63a79c29bc36bb1033506b0: - resolution: {tarball: https://codeload.github.com/isaacs/cliui/tar.gz/9f97090165675fdda63a79c29bc36bb1033506b0} - name: cliui - version: 8.0.1 - engines: {node: '>=12'} - prepare: true - requiresBuild: true - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.0.1 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - github.com/volker-schukai/jsdoc-external-example/e039186b531487bd1b1d5e2e1586a396b910c9d9: resolution: {tarball: https://codeload.github.com/volker-schukai/jsdoc-external-example/tar.gz/e039186b531487bd1b1d5e2e1586a396b910c9d9} name: jsdoc-external-example diff --git a/development/test/cases/dom/customelement-initfromscripthost.mjs b/development/test/cases/dom/customelement-initfromscripthost.mjs new file mode 100644 index 0000000000000000000000000000000000000000..f93bb14f4fce1b3b8898750f6a83b25f9c7a3025 --- /dev/null +++ b/development/test/cases/dom/customelement-initfromscripthost.mjs @@ -0,0 +1,143 @@ +'use strict'; + +import chai from "chai" +// import {internalSymbol} from "../../../../application/source/constants.mjs"; +// import {ATTRIBUTE_OPTIONS} from "../../../../application/source/dom/constants.mjs"; +import {getDocument} from "../../../../application/source/dom/util.mjs"; +// import {ProxyObserver} from "../../../../application/source/types/proxyobserver.mjs"; +// import {addObjectWithUpdaterToElement} from "../../../../application/source/dom/updater.mjs"; +import {chaiDom} from "../../util/chai-dom.mjs"; +import {initJSDOM} from "../../util/jsdom.mjs"; + + +let expect = chai.expect; +chai.use(chaiDom); + +// let html1 = ` +// <div id="scripthost"> +// </div> +// +// <div> +// < +// </div> +// `; + + +// defined in constants.mjs +// const updaterSymbolKey = "@schukai/monster/dom/custom-element@@options-updater-link" +// const updaterSymbolSymbol = Symbol.for(updaterSymbolKey); + + + +describe('DOM', function () { + + let CustomElement, registerCustomElement, TestComponent, document, TestComponent2,assignUpdaterToElement; + + describe('initFromScriptHost()', function () { + + const randomTagNumber = "monster-test"+Math.floor(Math.random() * 1000000); + + before(function (done) { + initJSDOM().then(() => { + + import("../../../../application/source/dom/customelement.mjs").then((m) => { + + try { + CustomElement = m['CustomElement']; + registerCustomElement = m['registerCustomElement']; + + TestComponent2 = class extends CustomElement { + static getTag() { + return randomTagNumber; + } + + /** + * + * @return {Object} + */ + get defaults() { + + return Object.assign({}, super.defaults, { + test: 0, + templates: { + main: '<h1></h1><article><p>test</p><div id="container"></div></article>' + }, + }) + } + + } + + registerCustomElement(TestComponent2) + + document = getDocument(); + done() + } catch (e) { + done(e); + } + + + }).catch((e) => { + done(e); + }); + + }); + }) + + afterEach(() => { + let mocks = document.getElementById('mocks'); + mocks.innerHTML = ""; + }) + + describe('call callback', function () { + it('should not found callback and add error attribute', function () { + + let mocks = document.getElementById('mocks'); + mocks.innerHTML = `<div id="call-back-host"></div><div id="container"></div>`; + + let control = document.createElement(randomTagNumber); + control.setAttribute('data-monster-script-host', "call-back-host"); + document.getElementById('container').appendChild(control); + expect(control.getOption('test')).is.eql(0); + expect(control.hasAttribute('data-monster-error')).is.true; + + }); + + it('should found callback initCustomControlOptionsCallback', function () { + + let mocks = document.getElementById('mocks'); + mocks.innerHTML = `<div id="call-back-host"></div><div id="container"></div>`; + + const container = document.getElementById('call-back-host'); + container.initCustomControlOptionsCallback = function (control) { + control.setOption('test', 1); + } + + let control = document.createElement(randomTagNumber); + control.setAttribute('data-monster-script-host', "call-back-host"); + document.getElementById('container').appendChild(control); + expect(control.getOption('test')).is.eql(1); + expect(control.hasAttribute('data-monster-error')).is.false; + + }); + + it('should found callback initCustomControlOptionsCallback from self', function () { + + let mocks = document.getElementById('mocks'); + mocks.innerHTML = `<div id="call-back-host"></div><div id="container"></div>`; + + let control = document.createElement(randomTagNumber); + expect(control.getOption('test')).is.eql(0); + control.initCustomControlOptionsCallback = function (control) { + control.setOption('test', 2); + } + + control.setAttribute('data-monster-script-host', "call-back-host"); + document.getElementById('container').appendChild(control); + expect(control.getOption('test')).is.eql(2); + expect(control.hasAttribute('data-monster-error')).is.false; + + }); + }) + + }); +}) \ No newline at end of file