From d997e8fbb1338cd502db1f729074ce82aeee80e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Tue, 28 Nov 2023 12:56:07 +0100 Subject: [PATCH] refactor into class-api --- .../counter-workspace-context.ts | 8 +- .../incrementor-workspace-action.ts | 3 +- src/Umbraco.Web.UI.Client/package-lock.json | 1081 ++++++++++++++--- src/Umbraco.Web.UI.Client/package.json | 72 +- .../src/apps/app/app.context.ts | 3 +- ...server-extension-registrator.controller.ts | 3 +- .../src/libs/class-api/class.mixin.ts | 10 +- .../src/libs/class-api/context-base.class.ts | 29 + .../controller-base.class.ts} | 4 +- .../src/libs/class-api/index.ts | 2 + .../libs/controller-api/context-base.class.ts | 17 - .../controller-host-element.mixin.ts | 4 +- .../controller-host-provider.test.ts | 5 +- ...base.mixin.ts => controller-host.mixin.ts} | 2 +- .../libs/controller-api/controller.test.ts | 96 +- .../src/libs/controller-api/index.ts | 4 +- ...e-extension-initializer.controller.test.ts | 4 +- .../base-extension-initializer.controller.ts | 3 +- ...-extensions-initializer.controller.test.ts | 7 +- .../base-extensions-initializer.controller.ts | 3 +- .../extension-api-initializer.test.ts | 20 +- .../bundle-extension-initializer.ts | 7 +- .../entry-point-extension-initializer.ts | 5 +- .../packages/core/action/repository-action.ts | 5 +- .../action/collection-action-base.ts | 2 +- .../collection/collection-alias.condition.ts | 2 +- .../collection/collection-default.context.ts | 3 +- .../input-tiny-mce/tiny-mce-plugin.ts | 6 +- .../culture/repository/culture.repository.ts | 9 +- .../core/debug/context-debug.controller.ts | 3 +- .../conditions/menu-alias.condition.ts | 2 +- .../conditions/section-alias.condition.ts | 2 +- .../conditions/switch.condition.ts | 3 +- .../core/picker-input/picker-input.context.ts | 5 +- .../property-action-menu.context.ts | 3 +- .../core/repository/repository-base.ts | 3 +- .../src/packages/core/themes/theme.context.ts | 5 +- .../tree-item-base/tree-item-base.context.ts | 3 +- .../src/packages/core/tree/tree.context.ts | 3 +- .../invariant-workspace-variant-context.ts | 27 +- .../workspace-action/workspace-action-base.ts | 6 +- .../workspace/workspace-alias.condition.ts | 2 +- .../editable-workspace-context-base.ts | 3 +- .../workspace-entity-type.condition.ts | 2 +- .../workspace-is-new-redirect-controller.ts | 3 +- .../workspace-property.context.ts | 44 +- .../workspace-split-view.context.ts | 22 +- .../repository/dictionary.repository.ts | 3 +- .../detail/document-type-detail.repository.ts | 3 +- .../repository/document.repository.ts | 3 +- .../document-permission.repository.ts | 4 +- .../document-variant-context.ts | 38 +- .../log-viewer/workspace/logviewer.context.ts | 3 +- .../detail/media-type-detail.repository.ts | 3 +- .../media/repository/media.repository.ts | 3 +- .../repository/member-type.repository.ts | 3 +- .../package/repository/package.repository.ts | 3 +- .../repository/server-extension.controller.ts | 6 +- .../app-language.context.ts | 21 +- .../repository/language.repository.ts | 3 +- .../repository/relation-type.repository.ts | 3 +- .../tags/repository/tag.repository.ts | 9 +- .../repository/partial-view.repository.ts | 3 +- .../scripts/repository/script.repository.ts | 3 +- .../repository/stylesheet.repository.ts | 3 +- .../repository/template.repository.ts | 3 +- .../user/current-user/current-user.context.ts | 3 +- .../user-group-collection.repository.ts | 3 +- .../repository/user-group.repository.ts | 3 +- .../conditions/user-permission.condition.ts | 2 +- .../user-allow-action-base.condition.ts | 2 +- .../src/shared/auth/auth.context.ts | 5 +- .../shared/resources/resource.controller.ts | 3 +- .../src/shared/router/route.context.ts | 15 +- .../extending/registration/conditions.mdx | 2 +- 75 files changed, 1281 insertions(+), 437 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/libs/class-api/context-base.class.ts rename src/Umbraco.Web.UI.Client/src/libs/{controller-api/controller.class.ts => class-api/controller-base.class.ts} (66%) delete mode 100644 src/Umbraco.Web.UI.Client/src/libs/controller-api/context-base.class.ts rename src/Umbraco.Web.UI.Client/src/libs/controller-api/{controller-host-base.mixin.ts => controller-host.mixin.ts} (97%) diff --git a/src/Umbraco.Web.UI.Client/examples/workspace-context-counter/counter-workspace-context.ts b/src/Umbraco.Web.UI.Client/examples/workspace-context-counter/counter-workspace-context.ts index 3b31fd648a..9d3988074d 100644 --- a/src/Umbraco.Web.UI.Client/examples/workspace-context-counter/counter-workspace-context.ts +++ b/src/Umbraco.Web.UI.Client/examples/workspace-context-counter/counter-workspace-context.ts @@ -1,16 +1,16 @@ import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbNumberState } from '@umbraco-cms/backoffice/observable-api'; // The Example Workspace Context Controller: export class WorkspaceContextCounter extends UmbBaseController { - // We always keep our states private, and expose the values as observables: #counter = new UmbNumberState(0); readonly counter = this.#counter.asObservable(); constructor(host: UmbControllerHost) { - super(host); + super(host, EXAMPLE_COUNTER_CONTEXT.toString()); this.provideContext(EXAMPLE_COUNTER_CONTEXT, this); } @@ -18,12 +18,10 @@ export class WorkspaceContextCounter extends UmbBaseController { increment() { this.#counter.next(this.#counter.value + 1); } - } // Declare a api export, so Extension Registry can initialize this class: export const api = WorkspaceContextCounter; - // Declare a Context Token that other elements can use to request the WorkspaceContextCounter: export const EXAMPLE_COUNTER_CONTEXT = new UmbContextToken('example.workspaceContext.counter'); diff --git a/src/Umbraco.Web.UI.Client/examples/workspace-context-counter/incrementor-workspace-action.ts b/src/Umbraco.Web.UI.Client/examples/workspace-context-counter/incrementor-workspace-action.ts index f53371786d..b0cfe188b4 100644 --- a/src/Umbraco.Web.UI.Client/examples/workspace-context-counter/incrementor-workspace-action.ts +++ b/src/Umbraco.Web.UI.Client/examples/workspace-context-counter/incrementor-workspace-action.ts @@ -1,10 +1,9 @@ -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import type { UmbWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import { EXAMPLE_COUNTER_CONTEXT } from './counter-workspace-context'; // The Example Incrementor Workspace Action Controller: export class ExampleIncrementorWorkspaceAction extends UmbBaseController implements UmbWorkspaceAction { - // This method is executed async execute() { await this.consumeContext(EXAMPLE_COUNTER_CONTEXT, (context) => { diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 1ee50d4678..d07bebef26 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -48,7 +48,7 @@ "@web/dev-server-esbuild": "^0.4.1", "@web/dev-server-import-maps": "^0.1.1", "@web/dev-server-rollup": "^0.6.0", - "@web/test-runner": "^0.17.0", + "@web/test-runner": "^0.18.0", "@web/test-runner-playwright": "^0.10.1", "babel-loader": "^9.1.3", "eslint": "^8.46.0", @@ -3425,18 +3425,15 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.5.tgz", - "integrity": "sha512-a0gpUa+XlxZHotoOklh99X6RC5R+hQGcVcYOH+oOIEBfQXPp8Z5c765XAu/zhxsjRuAZN4Xx4vZNlwN4wJro2A==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", + "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", "dev": true, "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", - "http-proxy-agent": "7.0.0", - "https-proxy-agent": "7.0.1", "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "socks-proxy-agent": "8.0.1", + "proxy-agent": "6.3.0", "tar-fs": "3.0.4", "unbzip2-stream": "1.4.3", "yargs": "17.7.1" @@ -4211,6 +4208,162 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.0.tgz", + "integrity": "sha512-keHkkWAe7OtdALGoutLY3utvthkGF+Y17ws9LYT8pxMBYXaCoH/8dXS2uzo6e8+sEhY7y/zi5RFo22Dy2lFpDw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.0.tgz", + "integrity": "sha512-y3Kt+34smKQNWilicPbBz/MXEY7QwDzMFNgwEWeYiOhUt9MTWKjHqe3EVkXwT2fR7izOvHpDWZ0o2IyD9SWX7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.0.tgz", + "integrity": "sha512-oLzzxcUIHltHxOCmaXl+pkIlU+uhSxef5HfntW7RsLh1eHm+vJzjD9Oo4oUKso4YuP4PpbFJNlZjJuOrxo8dPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.0.tgz", + "integrity": "sha512-+ANnmjkcOBaV25n0+M0Bere3roeVAnwlKW65qagtuAfIxXF9YxUneRyAn/RDcIdRa7QrjRNJL3jR7T43ObGe8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.0.tgz", + "integrity": "sha512-tBTSIkjSVUyrekddpkAqKOosnj1Fc0ZY0rJL2bIEWPKqlEQk0paORL9pUIlt7lcGJi3LzMIlUGXvtNi1Z6MOCQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.0.tgz", + "integrity": "sha512-Ed8uJI3kM11de9S0j67wAV07JUNhbAqIrDYhQBrQW42jGopgheyk/cdcshgGO4fW5Wjq97COCY/BHogdGvKVNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.0.tgz", + "integrity": "sha512-mZoNQ/qK4D7SSY8v6kEsAAyDgznzLLuSFCA3aBHZTmf3HP/dW4tNLTtWh9+LfyO0Z1aUn+ecpT7IQ3WtIg3ViQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.0.tgz", + "integrity": "sha512-rouezFHpwCqdEXsqAfNsTgSWO0FoZ5hKv5p+TGO5KFhyN/dvYXNMqMolOb8BkyKcPqjYRBeT+Z6V3aM26rPaYg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.0.tgz", + "integrity": "sha512-Bbm+fyn3S6u51urfj3YnqBXg5vI2jQPncRRELaucmhBVyZkbWClQ1fEsRmdnCPpQOQfkpg9gZArvtMVkOMsh1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.0.tgz", + "integrity": "sha512-+MRMcyx9L2kTrTUzYmR61+XVsliMG4odFb5UmqtiT8xOfEicfYAGEuF/D1Pww1+uZkYhBqAHpvju7VN+GnC3ng==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.0.tgz", + "integrity": "sha512-rxfeE6K6s/Xl2HGeK6cO8SiQq3k/3BYpw7cfhW5Bk2euXNEpuzi2cc7llxx1si1QgwfjNtdRNTGqdBzGlFZGFw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.0.tgz", + "integrity": "sha512-QqmCsydHS172Y0Kc13bkMXvipbJSvzeglBncJG3LsYJSiPlxYACz7MmJBs4A8l1oU+jfhYEIC/+AUSlvjmiX/g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -6650,6 +6803,12 @@ "node": ">=12" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -6771,9 +6930,9 @@ } }, "node_modules/@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", + "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", "dev": true }, "node_modules/@types/connect": { @@ -7279,9 +7438,9 @@ "dev": true }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "optional": true, "dependencies": { @@ -8759,61 +8918,25 @@ } }, "node_modules/@web/config-loader": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.2.1.tgz", - "integrity": "sha512-cQvTYA5lWLyyO8/R2aOReiudLa8r0LFHvMNYCwSAjzvrghb+AHxaW3BJWP9ORx6OaDcI7g5X8OATA81LSJce4A==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.3.1.tgz", + "integrity": "sha512-IYjHXUgSGGNpO3YJQ9foLcazbJlAWDdJGRe9be7aOhon0Nd6Na5JIOJAej7jsMu76fKHr4b4w2LfIdNQ4fJ8pA==", "dev": true, - "dependencies": { - "semver": "^7.3.4" - }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, - "node_modules/@web/config-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@web/config-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@web/config-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@web/dev-server": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.3.0.tgz", - "integrity": "sha512-QlKiWrf8MAUIXAhMSGuBepXyZFNOi3GDPQGsnf5ZAnFXUAOT3LCXiKSBMSKfXIrPpFQ7AzyJwT+KIZ7LvnMJcg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.4.1.tgz", + "integrity": "sha512-GHeyH8MBZQpODFiHiXAdX4hOVbeDyD/DUermUinh/nexWAZUcXyXa200RItuAL6b25MQ3D/5hKNDypujSvXxiw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", - "@web/config-loader": "^0.2.1", - "@web/dev-server-core": "^0.5.1", - "@web/dev-server-rollup": "^0.5.1", + "@web/config-loader": "^0.3.0", + "@web/dev-server-core": "^0.7.0", + "@web/dev-server-rollup": "^0.6.1", "camelcase": "^6.2.0", "command-line-args": "^5.1.1", "command-line-usage": "^7.0.1", @@ -8829,7 +8952,7 @@ "web-dev-server": "dist/bin.js" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@web/dev-server-core": { @@ -8931,16 +9054,16 @@ } }, "node_modules/@web/dev-server-rollup": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.0.tgz", - "integrity": "sha512-3cSLo/H8AGrJH7BRY/s7W3g38gzaBj3jcLiT1iUXPNFVn4hQJDO8mZEHqe02/XcO5p6wE65w6GrH0NAjOu1gUg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.6.1.tgz", + "integrity": "sha512-vhtsQ8qu1pBHailOBOYJwZnYDc1Lmx6ZAd2j+y5PD2ck0R1LmVsZ7dZK8hDCpkvpvlu2ndURjL9tbzdcsBRJmg==", "dev": true, "dependencies": { "@rollup/plugin-node-resolve": "^15.0.1", "@web/dev-server-core": "^0.7.0", "nanocolors": "^0.2.1", "parse5": "^6.0.1", - "rollup": "^3.15.0", + "rollup": "^4.4.0", "whatwg-url": "^11.0.0" }, "engines": { @@ -8991,6 +9114,34 @@ "node": ">=16.14" } }, + "node_modules/@web/dev-server-rollup/node_modules/rollup": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.6.0.tgz", + "integrity": "sha512-R8i5Her4oO1LiMQ3jKf7MUglYV/mhQ5g5OKeld5CnkmPdIGo79FDDQYqPhq/PCVuTQVuxsWgIbDy9F+zdHn80w==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.6.0", + "@rollup/rollup-android-arm64": "4.6.0", + "@rollup/rollup-darwin-arm64": "4.6.0", + "@rollup/rollup-darwin-x64": "4.6.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.6.0", + "@rollup/rollup-linux-arm64-gnu": "4.6.0", + "@rollup/rollup-linux-arm64-musl": "4.6.0", + "@rollup/rollup-linux-x64-gnu": "4.6.0", + "@rollup/rollup-linux-x64-musl": "4.6.0", + "@rollup/rollup-win32-arm64-msvc": "4.6.0", + "@rollup/rollup-win32-ia32-msvc": "4.6.0", + "@rollup/rollup-win32-x64-msvc": "4.6.0", + "fsevents": "~2.3.2" + } + }, "node_modules/@web/dev-server-rollup/node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -9012,32 +9163,15 @@ } } }, - "node_modules/@web/dev-server/node_modules/@web/dev-server-rollup": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.5.4.tgz", - "integrity": "sha512-lIN+lwj84Oh8Whe4vHijjMVe7NLJUzLxiiUsOleUtrBp1b7Us9QyUNCJK/iYitHJJDhCw6JcLJbCJ5H+vW969Q==", - "dev": true, - "dependencies": { - "@rollup/plugin-node-resolve": "^15.0.1", - "@web/dev-server-core": "^0.6.2", - "nanocolors": "^0.2.1", - "parse5": "^6.0.1", - "rollup": "^3.15.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@web/dev-server/node_modules/@web/dev-server-rollup/node_modules/@web/dev-server-core": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.6.3.tgz", - "integrity": "sha512-BWlgxIXQbg3RqUdz9Cfeh3XqFv0KcjQi4DLaZy9s63IlXgNZTzesTfDzliP/mIdWd5r8KZYh/P3n6LMi7CLPjQ==", + "node_modules/@web/dev-server/node_modules/@web/dev-server-core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.0.tgz", + "integrity": "sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g==", "dev": true, "dependencies": { "@types/koa": "^2.11.6", "@types/ws": "^7.4.0", - "@web/parse5-utils": "^2.0.2", + "@web/parse5-utils": "^2.1.0", "chokidar": "^3.4.3", "clone": "^2.1.2", "es-module-lexer": "^1.0.0", @@ -9055,13 +9189,13 @@ "ws": "^7.4.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@web/dev-server/node_modules/es-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", - "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, "node_modules/@web/dev-server/node_modules/ip": { @@ -9114,18 +9248,18 @@ } }, "node_modules/@web/test-runner": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.17.0.tgz", - "integrity": "sha512-wt2auPsy8ZChqqiCrRdS4DInCAUnEOYZfpPV9Shx/6/UKqhg8MTgPJQ53wDRsCjzxxgZLhVeBpGKP3jmZriFxw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.0.tgz", + "integrity": "sha512-aAlQrdSqwCie1mxuSK5kM0RYDJZL4Q0Hd5LeXn1on3OtHLtgztL4dZzzNSuAWablR2/Vuve3ChwDDxmYSTqXRg==", "dev": true, "dependencies": { - "@web/browser-logs": "^0.3.3", - "@web/config-loader": "^0.2.1", - "@web/dev-server": "^0.3.0", - "@web/test-runner-chrome": "^0.14.0", - "@web/test-runner-commands": "^0.8.0", - "@web/test-runner-core": "^0.11.1", - "@web/test-runner-mocha": "^0.8.1", + "@web/browser-logs": "^0.4.0", + "@web/config-loader": "^0.3.0", + "@web/dev-server": "^0.4.0", + "@web/test-runner-chrome": "^0.15.0", + "@web/test-runner-commands": "^0.9.0", + "@web/test-runner-core": "^0.13.0", + "@web/test-runner-mocha": "^0.9.0", "camelcase": "^6.2.0", "command-line-args": "^5.1.1", "command-line-usage": "^7.0.1", @@ -9141,23 +9275,165 @@ "wtr": "dist/bin.js" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/@web/test-runner-chrome": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.14.0.tgz", - "integrity": "sha512-iAgcKC65RsFf5UvG7cBAguXVPkCEpdVfq2GPfZiXnrA/DXVMMZhsqQW+opDUQnG+50cO1GpOgMWBcurEhKBu6Q==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.15.0.tgz", + "integrity": "sha512-ZqkTJGQ57FDz3lWw+9CKfHuTV64S9GzBy5+0siSQulEVPfGiTzpksx9DohtA3BCLXdbEq4OHg40/XIQJomlc9w==", "dev": true, "dependencies": { - "@web/test-runner-core": "^0.11.2", - "@web/test-runner-coverage-v8": "^0.7.0", + "@web/test-runner-core": "^0.13.0", + "@web/test-runner-coverage-v8": "^0.8.0", "async-mutex": "0.4.0", "chrome-launcher": "^0.15.0", "puppeteer-core": "^20.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/browser-logs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", + "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", + "dev": true, + "dependencies": { + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/dev-server-core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.0.tgz", + "integrity": "sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g==", + "dev": true, + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.1.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/test-runner-core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.0.tgz", + "integrity": "sha512-mUrETPg9n4dHWEk+D46BU3xVhQf+ljT4cG7FSpmF7AIOsXWgWHoaXp6ReeVcEmM5fmznXec2O/apTb9hpGrP3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.4.0", + "@web/dev-server-core": "^0.7.0", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/@web/test-runner-coverage-v8": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.8.0.tgz", + "integrity": "sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.13.0", + "istanbul-lib-coverage": "^3.0.0", + "lru-cache": "^8.0.4", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@web/test-runner-chrome/node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "node_modules/@web/test-runner-chrome/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/@web/test-runner-chrome/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@web/test-runner-chrome/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/@web/test-runner-commands": { @@ -9248,16 +9524,141 @@ } }, "node_modules/@web/test-runner-mocha": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.8.1.tgz", - "integrity": "sha512-CfYNZBbUSBiPNKkbF/dhxayecLCYZnu3g4cfgpfgmvLewlVOO6gNxaPt2c1/QhZutzTvXcMlsmaoWyk08F+V6A==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.9.0.tgz", + "integrity": "sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==", "dev": true, "dependencies": { - "@types/mocha": "^10.0.1", - "@web/test-runner-core": "^0.11.1" + "@web/test-runner-core": "^0.13.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/@web/browser-logs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", + "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", + "dev": true, + "dependencies": { + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/@web/dev-server-core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.0.tgz", + "integrity": "sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g==", + "dev": true, + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.1.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/@web/test-runner-core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.0.tgz", + "integrity": "sha512-mUrETPg9n4dHWEk+D46BU3xVhQf+ljT4cG7FSpmF7AIOsXWgWHoaXp6ReeVcEmM5fmznXec2O/apTb9hpGrP3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.4.0", + "@web/dev-server-core": "^0.7.0", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@web/test-runner-mocha/node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "node_modules/@web/test-runner-mocha/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/@web/test-runner-mocha/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/@web/test-runner-playwright": { @@ -9274,17 +9675,95 @@ "node": ">=16.0.0" } }, - "node_modules/@web/test-runner/node_modules/@web/test-runner-commands": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.8.0.tgz", - "integrity": "sha512-R40Rz+Tf3Y3Z4Ka9ey0DQcwYz3BflkyaoL2TNc7CR33iN6zv9pzRkRrtt4M/cSQfOPBTEsLlVAi1FsbvXsCKuQ==", + "node_modules/@web/test-runner/node_modules/@web/browser-logs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.4.0.tgz", + "integrity": "sha512-/EBiDAUCJ2DzZhaFxTPRIznEPeafdLbXShIL6aTu7x73x7ZoxSDv7DGuTsh2rWNMUa4+AKli4UORrpyv6QBOiA==", "dev": true, "dependencies": { - "@web/test-runner-core": "^0.11.1", + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner/node_modules/@web/dev-server-core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.0.tgz", + "integrity": "sha512-1FJe6cJ3r0x0ZmxY/FnXVduQD4lKX7QgYhyS6N+VmIpV+tBU4sGRbcrmeoYeY+nlnPa6p2oNuonk3X5ln/W95g==", + "dev": true, + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^2.1.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^5.0.0", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^8.0.4", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner/node_modules/@web/test-runner-commands": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.9.0.tgz", + "integrity": "sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.13.0", "mkdirp": "^1.0.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" + } + }, + "node_modules/@web/test-runner/node_modules/@web/test-runner-core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.0.tgz", + "integrity": "sha512-mUrETPg9n4dHWEk+D46BU3xVhQf+ljT4cG7FSpmF7AIOsXWgWHoaXp6ReeVcEmM5fmznXec2O/apTb9hpGrP3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^2.0.0", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.4.0", + "@web/dev-server-core": "^0.7.0", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^2.0.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@web/test-runner/node_modules/convert-source-map": { @@ -9293,6 +9772,48 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/@web/test-runner/node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "node_modules/@web/test-runner/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "node_modules/@web/test-runner/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@web/test-runner/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.7.tgz", @@ -10075,6 +10596,15 @@ } ] }, + "node_modules/basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/better-opn": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", @@ -11110,6 +11640,15 @@ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "dev": true }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -11267,6 +11806,32 @@ "integrity": "sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==", "dev": true }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/degenerator/node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -11391,9 +11956,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1135028", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1135028.tgz", - "integrity": "sha512-jEcNGrh6lOXNRJvZb9RjeevtZGrgugPKSMJZxfyxWQnhlKawMPhMtk/dfC+Z/6xNXExlzTKlY5LzIAK/fRpQIw==", + "version": "0.0.1147663", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", "dev": true }, "node_modules/diff": { @@ -11831,6 +12396,46 @@ "node": ">=0.8.0" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/eslint": { "version": "8.46.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", @@ -12590,9 +13195,9 @@ "dev": true }, "node_modules/fast-fifo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz", - "integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true }, "node_modules/fast-glob": { @@ -13268,6 +13873,53 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/get-uri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", + "dev": true, + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.0", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/get-uri/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/get-uri/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/get-uri/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/giget": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.3.tgz", @@ -13286,19 +13938,6 @@ "giget": "dist/cli.mjs" } }, - "node_modules/giget/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", @@ -13745,9 +14384,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -14649,17 +15288,17 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { @@ -14671,6 +15310,48 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14683,6 +15364,12 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/istanbul-reports": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", @@ -16997,6 +17684,15 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -17829,6 +18525,45 @@ "node": ">=6" } }, + "node_modules/pac-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "dev": true, + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", + "dev": true, + "dependencies": { + "degenerator": "^5.0.0", + "ip": "^1.1.8", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver/node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, "node_modules/pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", @@ -18553,6 +19288,34 @@ "node": ">= 0.10" } }, + "node_modules/proxy-agent": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -18600,16 +19363,16 @@ } }, "node_modules/puppeteer-core": { - "version": "20.8.2", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.8.2.tgz", - "integrity": "sha512-dWo60gFuFPdNhdabW9MMm6GpvkG6tND2D8FvrZ2MF+HggNApHrvLfbERj8vD6vXKV7UqDAJO0KI1OMo3S3Cm5w==", + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", + "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", "dev": true, "dependencies": { - "@puppeteer/browsers": "1.4.5", + "@puppeteer/browsers": "1.4.6", "chromium-bidi": "0.4.16", "cross-fetch": "4.0.0", "debug": "4.3.4", - "devtools-protocol": "0.0.1135028", + "devtools-protocol": "0.0.1147663", "ws": "8.13.0" }, "engines": { @@ -19877,12 +20640,12 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", - "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dev": true, "dependencies": { - "agent-base": "^7.0.1", + "agent-base": "^7.0.2", "debug": "^4.3.4", "socks": "^2.7.1" }, @@ -20085,9 +20848,9 @@ "dev": true }, "node_modules/streamx": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.0.tgz", - "integrity": "sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==", + "version": "2.15.5", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz", + "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==", "dev": true, "dependencies": { "fast-fifo": "^1.1.0", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 5a07ebb6ed..cc4883c48b 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -93,38 +93,38 @@ "url": "https://umbraco.com" }, "scripts": { - "dev": "vite", - "build": "tsc --project ./src/tsconfig.build.json && rollup -c ./src/rollup.config.js", - "build:vite": "tsc && vite build --mode staging", - "build:for:static": "vite build", - "build:for:cms": "npm run build && node ./devops/build/copy-to-cms.js", - "build:for:npm": "npm run build && tsc-alias -f -p src/tsconfig.build.json && npm run generate:jsonschema:dist && npm run wc-analyze && npm run wc-analyze:vscode", - "preview": "vite preview --open", - "test": "web-test-runner --coverage", - "test:watch": "web-test-runner --watch", "auth:test:e2e": "npx playwright test --config apps/auth/", "backoffice:test:e2e": "npx playwright test", - "test:e2e": "npm run auth:test:e2e && npm run backoffice:test:e2e", - "lint": "eslint src", + "build-storybook": "npm run wc-analyze && storybook build", + "build:for:cms": "npm run build && node ./devops/build/copy-to-cms.js", + "build:for:npm": "npm run build && tsc-alias -f -p src/tsconfig.build.json && npm run generate:jsonschema:dist && npm run wc-analyze && npm run wc-analyze:vscode", + "build:for:static": "vite build", + "build:vite": "tsc && vite build --mode staging", + "build": "tsc --project ./src/tsconfig.build.json && rollup -c ./src/rollup.config.js", + "check": "npm run lint:errors && npm run compile && npm run build-storybook && npm run generate:jsonschema:dist", + "compile": "tsc", + "dev": "vite", + "example": "node ./devops/example-runner/index.js", + "format:fix": "npm run format -- --write", + "format": "prettier 'src/**/*.ts' -- check", + "generate:api-dev": "openapi --input http://localhost:11000/umbraco/swagger/management/swagger.json --output src/external/backend-api/src --postfixServices Resource --useOptions", + "generate:api": "openapi --input https://raw.githubusercontent.com/umbraco/Umbraco-CMS/v14/dev/src/Umbraco.Cms.Api.Management/OpenApi.json --output src/external/backend-api/src --postfixServices Resource --useOptions", + "generate:icons": "node ./devops/icons/index.js", + "generate:jsonschema:dist": "typescript-json-schema --required --include \"./src/packages/core/extension-registry/umbraco-package.ts\" --out dist-cms/umbraco-package-schema.json tsconfig.json UmbracoPackage", + "generate:jsonschema": "typescript-json-schema --required --include \"./src/packages/core/extension-registry/*.ts\"", "lint:errors": "npm run lint -- --quiet", "lint:fix": "npm run lint -- --fix", - "format": "prettier 'src/**/*.ts' -- check", - "format:fix": "npm run format -- --write", - "generate:api": "openapi --input https://raw.githubusercontent.com/umbraco/Umbraco-CMS/v14/dev/src/Umbraco.Cms.Api.Management/OpenApi.json --output src/external/backend-api/src --postfixServices Resource --useOptions", - "generate:api-dev": "openapi --input http://localhost:11000/umbraco/swagger/management/swagger.json --output src/external/backend-api/src --postfixServices Resource --useOptions", - "generate:jsonschema": "typescript-json-schema --required --include \"./src/packages/core/extension-registry/*.ts\"", - "generate:jsonschema:dist": "typescript-json-schema --required --include \"./src/packages/core/extension-registry/umbraco-package.ts\" --out dist-cms/umbraco-package-schema.json tsconfig.json UmbracoPackage", - "storybook": "npm run wc-analyze && storybook dev -p 6006", - "storybook:build": "npm run wc-analyze && storybook build", - "build-storybook": "npm run wc-analyze && storybook build", - "generate:icons": "node ./devops/icons/index.js", - "wc-analyze": "wca **/*.element.ts --outFile dist-cms/custom-elements.json", - "wc-analyze:vscode": "wca **/*.element.ts --format vscode --outFile dist-cms/vscode-html-custom-data.json", + "lint": "eslint src", "new-extension": "plop --plopfile ./devops/plop/plop.js", - "compile": "tsc", - "check": "npm run lint:errors && npm run compile && npm run build-storybook && npm run generate:jsonschema:dist", "prepublishOnly": "node ./devops/publish/cleanse-pkg.js", - "example": "node ./devops/example-runner/index.js" + "preview": "vite preview --open", + "storybook:build": "npm run wc-analyze && storybook build", + "storybook": "npm run wc-analyze && storybook dev -p 6006", + "test:e2e": "npm run auth:test:e2e && npm run backoffice:test:e2e", + "test:watch": "web-test-runner --watch", + "test": "web-test-runner --coverage", + "wc-analyze:vscode": "wca **/*.element.ts --format vscode --outFile dist-cms/vscode-html-custom-data.json", + "wc-analyze": "wca **/*.element.ts --outFile dist-cms/custom-elements.json" }, "engines": { "node": ">=20.9 <21", @@ -134,8 +134,8 @@ "@openid/appauth": "^1.3.1", "@types/dompurify": "^3.0.4", "@types/uuid": "^9.0.2", - "@umbraco-ui/uui": "1.6.0-rc.0", "@umbraco-ui/uui-css": "1.6.0-rc.0", + "@umbraco-ui/uui": "1.6.0-rc.0", "dompurify": "^3.0.6", "element-internals-polyfill": "^1.3.7", "lit": "^2.8.0", @@ -143,8 +143,8 @@ "marked": "^9.1.0", "monaco-editor": "^0.41.0", "rxjs": "^7.8.1", - "tinymce": "^6.7.3", "tinymce-i18n": "^23.8.7", + "tinymce": "^6.7.3", "uuid": "^9.0.0" }, "devDependencies": { @@ -160,8 +160,8 @@ "@storybook/addon-essentials": "7.5.3", "@storybook/addon-links": "7.5.3", "@storybook/mdx2-csf": "^1.1.0", - "@storybook/web-components": "7.5.3", "@storybook/web-components-vite": "7.5.3", + "@storybook/web-components": "7.5.3", "@types/chai": "^4.3.5", "@types/lodash-es": "^4.17.8", "@types/mocha": "^10.0.1", @@ -170,40 +170,40 @@ "@web/dev-server-esbuild": "^0.4.1", "@web/dev-server-import-maps": "^0.1.1", "@web/dev-server-rollup": "^0.6.0", - "@web/test-runner": "^0.17.0", "@web/test-runner-playwright": "^0.10.1", + "@web/test-runner": "^0.18.0", "babel-loader": "^9.1.3", - "eslint": "^8.46.0", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-typescript": "^3.6.0", "eslint-plugin-import": "^2.28.0", - "eslint-plugin-lit": "^1.10.1", "eslint-plugin-lit-a11y": "^4.1.0", + "eslint-plugin-lit": "^1.10.1", "eslint-plugin-local-rules": "^1.3.2", "eslint-plugin-storybook": "^0.6.15", "eslint-plugin-wc": "^1.5.0", + "eslint": "^8.46.0", "lucide-static": "^0.290.0", "msw": "^1.2.3", "openapi-typescript-codegen": "^0.25.0", "playwright-msw": "^2.2.1", "plop": "^4.0.0", "prettier": "3.0.3", - "react": "^18.2.0", "react-dom": "^18.2.0", + "react": "^18.2.0", "remark-gfm": "^3.0.1", - "rollup": "^3.27.2", "rollup-plugin-dts": "^5.3.1", "rollup-plugin-esbuild": "^5.0.0", "rollup-plugin-import-css": "^3.3.4", "rollup-plugin-web-worker-loader": "^1.6.1", + "rollup": "^3.27.2", "storybook": "7.5.3", "tiny-glob": "^0.2.9", "tsc-alias": "^1.8.8", - "typescript": "^5.1.6", "typescript-json-schema": "^0.62.0", - "vite": "^4.4.9", + "typescript": "^5.1.6", "vite-plugin-static-copy": "^0.17.0", "vite-tsconfig-paths": "^4.2.0", + "vite": "^4.4.9", "web-component-analyzer": "^2.0.0-next.5" }, "msw": { diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app.context.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app.context.ts index 912029a1e3..fda9153bb5 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app.context.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/app.context.ts @@ -1,5 +1,6 @@ import { UmbAppContextConfig } from './app-context-config.interface.js'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export class UmbAppContext extends UmbBaseController { diff --git a/src/Umbraco.Web.UI.Client/src/apps/backoffice/server-extension-registrator.controller.ts b/src/Umbraco.Web.UI.Client/src/apps/backoffice/server-extension-registrator.controller.ts index fc11e076de..742340f313 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/backoffice/server-extension-registrator.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/backoffice/server-extension-registrator.controller.ts @@ -1,5 +1,6 @@ import { PackageResource, OpenAPI } from '@umbraco-cms/backoffice/backend-api'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbBackofficeExtensionRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; import { ManifestBase, isManifestBaseType } from '@umbraco-cms/backoffice/extension-api'; diff --git a/src/Umbraco.Web.UI.Client/src/libs/class-api/class.mixin.ts b/src/Umbraco.Web.UI.Client/src/libs/class-api/class.mixin.ts index 09d985c7db..c075be0ee0 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/class-api/class.mixin.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/class-api/class.mixin.ts @@ -3,7 +3,7 @@ import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import type { ClassConstructor } from '@umbraco-cms/backoffice/extension-api'; import { type UmbControllerHost, - UmbControllerHostBaseMixin, + UmbControllerHostMixin, UmbController, UmbControllerAlias, } from '@umbraco-cms/backoffice/controller-api'; @@ -17,7 +17,7 @@ import { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; type UmbClassMixinConstructor = new ( host: UmbControllerHost, - controllerAlias: UmbControllerAlias, + controllerAlias?: UmbControllerAlias, ) => UmbClassMixinDeclaration; declare class UmbClassMixinDeclaration implements UmbClassMixinInterface { @@ -53,11 +53,11 @@ declare class UmbClassMixinDeclaration implements UmbClassMixinInterface { } export const UmbClassMixin = (superClass: T) => { - class UmbClassMixinClass extends UmbControllerHostBaseMixin(superClass) implements UmbControllerHost { + class UmbClassMixinClass extends UmbControllerHostMixin(superClass) implements UmbControllerHost { protected _host: UmbControllerHost; protected _controllerAlias: UmbControllerAlias; - constructor(host: UmbControllerHost, controllerAlias: UmbControllerAlias) { + constructor(host: UmbControllerHost, controllerAlias?: UmbControllerAlias) { super(); this._host = host; this._controllerAlias = controllerAlias ?? Symbol(); // This will fallback to a Symbol, ensuring that this class is only appended to the controller host once. @@ -122,8 +122,8 @@ export const UmbClassMixin = (superClass: T) => { public destroy() { if (this._host) { this._host.removeController(this); + this._host = undefined as any; } - //delete this._host; super.destroy(); } } diff --git a/src/Umbraco.Web.UI.Client/src/libs/class-api/context-base.class.ts b/src/Umbraco.Web.UI.Client/src/libs/class-api/context-base.class.ts new file mode 100644 index 0000000000..9a16412b4d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/libs/class-api/context-base.class.ts @@ -0,0 +1,29 @@ +import { type UmbContextToken } from '../context-api/index.js'; +import { type UmbControllerHost } from '../controller-api/index.js'; +import { UmbBaseController } from './controller-base.class.js'; + +/** + * This base provides the necessary for a class to become a context-api controller. + * + */ +export abstract class UmbContextBase< + ContextType, + GivenContextToken extends UmbContextToken = UmbContextToken, +> extends UmbBaseController { + constructor(host: UmbControllerHost, contextToken: GivenContextToken | string) { + super(host, contextToken.toString()); + //this.provideContext(contextToken, this as unknown as ContextType); + } +} + +/** + * + * + * + * DOES IT HELP TO NOT IMPORT BASE CONTROLLER? + * + * AND HOW ABOUT IF THIS WHAT DOING SO BUT NOT USD BY ANYONE? + * + * + * + */ diff --git a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.class.ts b/src/Umbraco.Web.UI.Client/src/libs/class-api/controller-base.class.ts similarity index 66% rename from src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.class.ts rename to src/Umbraco.Web.UI.Client/src/libs/class-api/controller-base.class.ts index 213a27ae4b..5c2b78b2b7 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.class.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/class-api/controller-base.class.ts @@ -1,5 +1,5 @@ -import { UmbClassMixin } from '../class-api/index.js'; -import { UmbController } from './controller.interface.js'; +import { type UmbController } from '../controller-api/controller.interface.js'; +import { UmbClassMixin } from './index.js'; /** * This mixin enables a web-component to host controllers. diff --git a/src/Umbraco.Web.UI.Client/src/libs/class-api/index.ts b/src/Umbraco.Web.UI.Client/src/libs/class-api/index.ts index a6874daafa..72155e8b3b 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/class-api/index.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/class-api/index.ts @@ -1,2 +1,4 @@ export * from './class.interface.js'; export * from './class.mixin.js'; +export * from './context-base.class.js'; +export * from './controller-base.class.js'; diff --git a/src/Umbraco.Web.UI.Client/src/libs/controller-api/context-base.class.ts b/src/Umbraco.Web.UI.Client/src/libs/controller-api/context-base.class.ts deleted file mode 100644 index c402d924e4..0000000000 --- a/src/Umbraco.Web.UI.Client/src/libs/controller-api/context-base.class.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { UmbContextToken } from '../context-api/token/context-token.js'; -import type { UmbControllerHost } from './controller-host.interface.js'; -import { UmbBaseController } from './controller.class.js'; - -/** - * This base provides the necessary for a class to become a context-api controller. - * - */ -export abstract class UmbContextBase< - ContextType, - GivenContextToken extends UmbContextToken = UmbContextToken, -> extends UmbBaseController { - constructor(host: UmbControllerHost, contextToken: GivenContextToken | string) { - super(host, contextToken.toString()); - this.provideContext(contextToken, this as unknown as ContextType); - } -} diff --git a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-element.mixin.ts b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-element.mixin.ts index 016fcb93ac..58dd599b3a 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-element.mixin.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-element.mixin.ts @@ -1,5 +1,5 @@ import type { UmbControllerAlias } from './controller-alias.type.js'; -import { UmbControllerHostBaseMixin } from './controller-host-base.mixin.js'; +import { UmbControllerHostMixin } from './controller-host.mixin.js'; import type { UmbControllerHost } from './controller-host.interface.js'; import type { UmbController } from './controller.interface.js'; import type { HTMLElementConstructor } from '@umbraco-cms/backoffice/extension-api'; @@ -21,7 +21,7 @@ export declare class UmbControllerHostElement extends HTMLElement implements Umb * @mixin */ export const UmbControllerHostElementMixin = (superClass: T) => { - class UmbControllerHostElementClass extends UmbControllerHostBaseMixin(superClass) implements UmbControllerHost { + class UmbControllerHostElementClass extends UmbControllerHostMixin(superClass) implements UmbControllerHost { getHostElement(): EventTarget { return this; } diff --git a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-provider.test.ts b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-provider.test.ts index 1a148b3535..91c4ce6cf9 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-provider.test.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-provider.test.ts @@ -27,10 +27,10 @@ describe('UmbControllerHostTestElement', () => { .create=${(host: UmbControllerHostElement) => new UmbContextProviderController(host, 'my-test-context-alias', contextValue)}> - ` + `, ); consumer = element.getElementsByTagName( - 'umb-test-controller-host-initializer-consumer' + 'umb-test-controller-host-initializer-consumer', )[0] as UmbTestControllerHostInitializerConsumerElement; }); @@ -39,6 +39,7 @@ describe('UmbControllerHostTestElement', () => { }); it('provides the context', () => { + // Potentially we need to wait a bit here, cause the value might not be set already? as of the context consumption... expect(consumer.value).to.equal(contextValue); }); }); diff --git a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-base.mixin.ts b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host.mixin.ts similarity index 97% rename from src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-base.mixin.ts rename to src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host.mixin.ts index e5d95ed905..b91d443105 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host-base.mixin.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller-host.mixin.ts @@ -21,7 +21,7 @@ declare class UmbControllerHostBaseDeclaration implements Omit(superClass: T) => { +export const UmbControllerHostMixin = (superClass: T) => { class UmbControllerHostBaseClass extends superClass { #controllers: UmbController[] = []; diff --git a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.test.ts b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.test.ts index ff023ef662..e2f9d725be 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.test.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.test.ts @@ -1,15 +1,32 @@ import { expect } from '@open-wc/testing'; -import { UmbControllerHostElement, UmbControllerHostElementMixin } from './controller-host-element.mixin.js'; -import { UmbBaseController } from './controller.class.js'; +import { type UmbControllerHostElement, UmbControllerHostElementMixin } from './controller-host-element.mixin.js'; +import { UmbControllerHostMixin } from './controller-host.mixin.js'; +import { type UmbControllerAlias } from './controller-alias.type.js'; +import { type UmbControllerHost } from './controller-host.interface.js'; import { customElement } from '@umbraco-cms/backoffice/external/lit'; @customElement('test-my-controller-host') export class UmbTestControllerHostElement extends UmbControllerHostElementMixin(HTMLElement) {} -export class UmbTestControllerImplementationElement extends UmbBaseController { +export class UmbTestControllerImplementation extends UmbControllerHostMixin(class {}) { testIsConnected = false; testIsDestroyed = false; + private _host: UmbControllerHost; + readonly controllerAlias: UmbControllerAlias; + + constructor(host: UmbControllerHost, controllerAlias?: UmbControllerAlias) { + super(); + this._host = host; + this.controllerAlias = controllerAlias ?? Symbol(); // This will fallback to a Symbol, ensuring that this class is only appended to the controller host once. + this._host.addController(this); + } + + getHostElement(): EventTarget { + // Different from class.mixin implementation is that we here have a ? to make sure the bad test can run. + return this._host?.getHostElement(); + } + hostConnected(): void { super.hostConnected(); this.testIsConnected = true; @@ -20,6 +37,10 @@ export class UmbTestControllerImplementationElement extends UmbBaseController { } public destroy(): void { + if (this._host) { + this._host.removeController(this); + this._host = undefined as any; + } super.destroy(); this.testIsDestroyed = true; } @@ -64,9 +85,9 @@ describe('UmbController', () => { }); describe('Controller Public API', () => { - let controller: UmbTestControllerImplementationElement; + let controller: UmbTestControllerImplementation; beforeEach(() => { - controller = new UmbTestControllerImplementationElement(hostElement, 'my-test-controller-alias'); + controller = new UmbTestControllerImplementation(hostElement, 'my-test-controller-alias'); }); describe('methods', () => { @@ -102,9 +123,26 @@ describe('UmbController', () => { }); describe('Controllers lifecycle', () => { + it('host-element relation is removed when destroyed', () => { + const ctrl = new UmbTestControllerImplementation(hostElement); + + // The host does own a reference to its controller: + expect(hostElement.hasController(ctrl)).to.be.true; + // The controller does own a reference to its host: + expect(hostElement.getHostElement()).to.be.equal(hostElement); + + ctrl.destroy(); + + // The relation is removed: + expect(hostElement.hasController(ctrl)).to.be.false; + expect(ctrl.getHostElement()).to.be.undefined; + expect(ctrl.testIsConnected).to.be.false; + expect(ctrl.testIsDestroyed).to.be.true; + }); + it('controller is removed from host when destroyed', () => { - const ctrl = new UmbTestControllerImplementationElement(hostElement); - const subCtrl = new UmbTestControllerImplementationElement(ctrl); + const ctrl = new UmbTestControllerImplementation(hostElement); + const subCtrl = new UmbTestControllerImplementation(ctrl); expect(hostElement.hasController(ctrl)).to.be.true; expect(ctrl.hasController(subCtrl)).to.be.true; @@ -120,8 +158,8 @@ describe('UmbController', () => { }); it('controller is destroyed when removed from host', () => { - const ctrl = new UmbTestControllerImplementationElement(hostElement); - const subCtrl = new UmbTestControllerImplementationElement(ctrl); + const ctrl = new UmbTestControllerImplementation(hostElement); + const subCtrl = new UmbTestControllerImplementation(ctrl); expect(ctrl.testIsDestroyed).to.be.false; expect(subCtrl.testIsDestroyed).to.be.false; @@ -137,11 +175,11 @@ describe('UmbController', () => { }); it('all controllers are destroyed when the hosting controller gets destroyed', () => { - const ctrl = new UmbTestControllerImplementationElement(hostElement); - const subCtrl = new UmbTestControllerImplementationElement(ctrl); - const subCtrl2 = new UmbTestControllerImplementationElement(ctrl); - const subSubCtrl1 = new UmbTestControllerImplementationElement(subCtrl); - const subSubCtrl2 = new UmbTestControllerImplementationElement(subCtrl); + const ctrl = new UmbTestControllerImplementation(hostElement); + const subCtrl = new UmbTestControllerImplementation(ctrl); + const subCtrl2 = new UmbTestControllerImplementation(ctrl); + const subSubCtrl1 = new UmbTestControllerImplementation(subCtrl); + const subSubCtrl2 = new UmbTestControllerImplementation(subCtrl); expect(ctrl.testIsDestroyed).to.be.false; expect(hostElement.hasController(ctrl)).to.be.true; @@ -173,8 +211,8 @@ describe('UmbController', () => { }); it('hostConnected & hostDisconnected is triggered accordingly to the state of the controller host.', () => { - const ctrl = new UmbTestControllerImplementationElement(hostElement); - const subCtrl = new UmbTestControllerImplementationElement(ctrl); + const ctrl = new UmbTestControllerImplementation(hostElement); + const subCtrl = new UmbTestControllerImplementation(ctrl); expect(hostElement.hasController(ctrl)).to.be.true; expect(ctrl.hasController(subCtrl)).to.be.true; @@ -195,8 +233,8 @@ describe('UmbController', () => { it('hostConnected is triggered if controller host is already connected at time of adding controller.', async () => { document.body.appendChild(hostElement); - const ctrl = new UmbTestControllerImplementationElement(hostElement); - const subCtrl = new UmbTestControllerImplementationElement(ctrl); + const ctrl = new UmbTestControllerImplementation(hostElement); + const subCtrl = new UmbTestControllerImplementation(ctrl); expect(hostElement.hasController(ctrl)).to.be.true; expect(ctrl.hasController(subCtrl)).to.be.true; @@ -218,8 +256,8 @@ describe('UmbController', () => { describe('Controllers against other Controllers', () => { it('controller is replaced by another controller using the same string as controller-alias', () => { - const firstCtrl = new UmbTestControllerImplementationElement(hostElement, 'my-test-alias'); - const secondCtrl = new UmbTestControllerImplementationElement(hostElement, 'my-test-alias'); + const firstCtrl = new UmbTestControllerImplementation(hostElement, 'my-test-alias'); + const secondCtrl = new UmbTestControllerImplementation(hostElement, 'my-test-alias'); expect(hostElement.hasController(firstCtrl)).to.be.false; expect(hostElement.hasController(secondCtrl)).to.be.true; @@ -227,29 +265,29 @@ describe('UmbController', () => { it('controller is replaced by another controller using the the same symbol as controller-alias', () => { const mySymbol = Symbol(); - const firstCtrl = new UmbTestControllerImplementationElement(hostElement, mySymbol); - const secondCtrl = new UmbTestControllerImplementationElement(hostElement, mySymbol); + const firstCtrl = new UmbTestControllerImplementation(hostElement, mySymbol); + const secondCtrl = new UmbTestControllerImplementation(hostElement, mySymbol); expect(hostElement.hasController(firstCtrl)).to.be.false; expect(hostElement.hasController(secondCtrl)).to.be.true; }); it('controller is not replacing another controller when using the undefined as controller-alias', () => { - const firstCtrl = new UmbTestControllerImplementationElement(hostElement, undefined); - const secondCtrl = new UmbTestControllerImplementationElement(hostElement, undefined); + const firstCtrl = new UmbTestControllerImplementation(hostElement, undefined); + const secondCtrl = new UmbTestControllerImplementation(hostElement, undefined); expect(hostElement.hasController(firstCtrl)).to.be.true; expect(hostElement.hasController(secondCtrl)).to.be.true; }); - it('sub controllers is not replacing another sub controllers when using the same controller-alias', () => { + it('sub controllers is not replacing sub controllers of another host when using the same controller-alias', () => { const mySymbol = Symbol(); - const firstCtrl = new UmbTestControllerImplementationElement(hostElement, undefined); - const secondCtrl = new UmbTestControllerImplementationElement(hostElement, undefined); + const firstCtrl = new UmbTestControllerImplementation(hostElement, undefined); + const secondCtrl = new UmbTestControllerImplementation(hostElement, undefined); - const firstSubCtrl = new UmbTestControllerImplementationElement(firstCtrl, mySymbol); - const secondSubCtrl = new UmbTestControllerImplementationElement(secondCtrl, mySymbol); + const firstSubCtrl = new UmbTestControllerImplementation(firstCtrl, mySymbol); + const secondSubCtrl = new UmbTestControllerImplementation(secondCtrl, mySymbol); expect(firstCtrl.hasController(firstSubCtrl)).to.be.true; expect(secondCtrl.hasController(secondSubCtrl)).to.be.true; diff --git a/src/Umbraco.Web.UI.Client/src/libs/controller-api/index.ts b/src/Umbraco.Web.UI.Client/src/libs/controller-api/index.ts index aaaf2acc1a..26ffaaec28 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/controller-api/index.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/controller-api/index.ts @@ -1,7 +1,5 @@ -export * from './controller-host-base.mixin.js'; +export * from './controller-host.mixin.js'; export * from './controller-host.interface.js'; export * from './controller-host-element.mixin.js'; -export * from './controller.class.js'; export * from './controller.interface.js'; export * from './controller-alias.type.js'; -export * from './context-base.class.js'; diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.test.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.test.ts index 5ab3eb2e06..defda3c310 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.test.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.test.ts @@ -11,11 +11,11 @@ import { UmbControllerHostElement, UmbControllerHostElementMixin, } from '../../controller-api/controller-host-element.mixin.js'; -import { UmbBaseController } from '../../controller-api/controller.class.js'; -import { UmbControllerHost } from '../../controller-api/controller-host.interface.js'; import { UmbBaseExtensionInitializer } from './index.js'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { customElement, html } from '@umbraco-cms/backoffice/external/lit'; import { UmbSwitchCondition } from '@umbraco-cms/backoffice/extension-registry'; +import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; @customElement('umb-test-controller-host') export class UmbTestControllerHostElement extends UmbControllerHostElementMixin(HTMLElement) {} diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.ts index d64037be56..8a2a17358d 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.ts @@ -1,5 +1,6 @@ import type { UmbExtensionCondition } from '../condition/extension-condition.interface.js'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { type ManifestCondition, type ManifestWithDynamicConditions, diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.test.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.test.ts index 232899c638..c45eb296aa 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.test.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.test.ts @@ -3,11 +3,8 @@ import { UmbExtensionRegistry } from '../registry/extension.registry.js'; import { ManifestCondition, ManifestWithDynamicConditions, UmbConditionConfigBase } from '../types/index.js'; import { UmbExtensionCondition } from '../condition/extension-condition.interface.js'; import { PermittedControllerType, UmbBaseExtensionInitializer, UmbBaseExtensionsInitializer } from './index.js'; -import { - UmbBaseController, - UmbControllerHost, - UmbControllerHostElementMixin, -} from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { UmbControllerHost, UmbControllerHostElementMixin } from '@umbraco-cms/backoffice/controller-api'; import { customElement, html } from '@umbraco-cms/backoffice/external/lit'; @customElement('umb-test-controller-host') diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts index 301069cca4..4d8f579ec4 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts @@ -5,7 +5,8 @@ import type { UmbBaseExtensionInitializer, UmbExtensionRegistry, } from '@umbraco-cms/backoffice/extension-api'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; export type PermittedControllerType = ControllerType & { manifest: Required>; diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-api-initializer.test.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-api-initializer.test.ts index e31650bcb3..a9bf451556 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-api-initializer.test.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-api-initializer.test.ts @@ -2,26 +2,28 @@ import { expect, fixture } from '@open-wc/testing'; import { UmbExtensionRegistry } from '../registry/extension.registry.js'; import { ManifestApi, ManifestWithDynamicConditions } from '../types/index.js'; import { UmbExtensionApiInitializer } from './index.js'; -import { UmbBaseController, UmbControllerHost, UmbControllerHostElement, UmbControllerHostElementMixin } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { + type UmbControllerHost, + UmbControllerHostElement, + UmbControllerHostElementMixin, +} from '@umbraco-cms/backoffice/controller-api'; import { customElement, html } from '@umbraco-cms/backoffice/external/lit'; import { type ManifestSection, UmbSwitchCondition } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-test-controller-host') export class UmbTestControllerHostElement extends UmbControllerHostElementMixin(HTMLElement) {} - export class UmbTestApiController extends UmbBaseController { - public i_am_test_api_controller = true; - constructor(host:UmbControllerHost) { + constructor(host: UmbControllerHost) { super(host); } - } interface TestManifest extends ManifestWithDynamicConditions, ManifestApi { - type: 'test-type' + type: 'test-type'; } describe('UmbExtensionApiController', () => { @@ -37,7 +39,7 @@ describe('UmbExtensionApiController', () => { type: 'test-type', name: 'test-type-1', alias: 'Umb.Test.Type-1', - api: UmbTestApiController + api: UmbTestApiController, }; extensionRegistry.register(manifest); @@ -61,7 +63,7 @@ describe('UmbExtensionApiController', () => { extensionController.destroy(); } } - } + }, ); /* TODO: Consider if builder pattern would be a more nice way to setup this: @@ -151,7 +153,7 @@ describe('UmbExtensionApiController', () => { done(); extensionController.destroy(); // need to destroy the controller. } - } + }, ); }); }); diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/bundle-extension-initializer.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/bundle-extension-initializer.ts index 68e4a7d6ac..e48e049bb0 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/bundle-extension-initializer.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/bundle-extension-initializer.ts @@ -1,7 +1,8 @@ import type { ManifestBase, ManifestBundle } from '../types/index.js'; import { UmbExtensionRegistry } from '../registry/extension.registry.js'; import { loadManifestPlainJs } from '../functions/load-manifest-plain-js.function.js'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; export class UmbBundleExtensionInitializer extends UmbBaseController { #extensionRegistry; @@ -29,7 +30,7 @@ export class UmbBundleExtensionInitializer extends UmbBaseController { } async instantiateBundle(manifest: ManifestBundle) { - if(manifest.js) { + if (manifest.js) { const js = await loadManifestPlainJs(manifest.js); if (js) { @@ -47,7 +48,7 @@ export class UmbBundleExtensionInitializer extends UmbBaseController { } async unregisterBundle(manifest: ManifestBundle) { - if(manifest.js) { + if (manifest.js) { const js = await loadManifestPlainJs(manifest.js); if (js) { diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/entry-point-extension-initializer.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/entry-point-extension-initializer.ts index 0d4a62585d..dc1ff2d0f5 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/entry-point-extension-initializer.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/initializers/entry-point-extension-initializer.ts @@ -1,11 +1,10 @@ -import { UmbBaseController } from '../../controller-api/controller.class.js'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import type { ManifestEntryPoint } from '../types/index.js'; import { UmbExtensionRegistry } from '../registry/extension.registry.js'; import { hasInitExport, loadManifestPlainJs } from '../functions/index.js'; import { UmbElement } from '@umbraco-cms/backoffice/element-api'; export class UmbEntryPointExtensionInitializer extends UmbBaseController { - #host; #extensionRegistry; #entryPointMap = new Map(); @@ -25,7 +24,7 @@ export class UmbEntryPointExtensionInitializer extends UmbBaseController { } async instantiateEntryPoint(manifest: ManifestEntryPoint) { - if(manifest.js) { + if (manifest.js) { const js = await loadManifestPlainJs(manifest.js); // If the extension has an onInit export, be sure to run that or else let the module handle itself if (hasInitExport(js)) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/action/repository-action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/action/repository-action.ts index 9545bdcf97..0f4a178922 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/action/repository-action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/action/repository-action.ts @@ -1,4 +1,5 @@ -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { type UmbApi, UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; @@ -9,7 +10,7 @@ export class UmbActionBase extends UmbBaseController implements super(host); new UmbExtensionApiInitializer(this, umbExtensionsRegistry, repositoryAlias, [this._host], (permitted, ctrl) => { - this.repository = permitted ? ctrl.api as RepositoryType : undefined; + this.repository = permitted ? (ctrl.api as RepositoryType) : undefined; }); /*this.observe( umbExtensionsRegistry.getByTypeAndAlias('repository', repositoryAlias), diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-base.ts index 782a402ab9..e89dc022fe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-base.ts @@ -1,4 +1,4 @@ -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import type { UmbApi } from '@umbraco-cms/backoffice/extension-api'; export interface UmbCollectionAction extends UmbApi { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-alias.condition.ts index 22f5f2f8e8..f7f900fd49 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-alias.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-alias.condition.ts @@ -1,5 +1,5 @@ import { UMB_COLLECTION_CONTEXT } from './collection-default.context.js'; -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestCondition, UmbConditionConfigBase, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-default.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-default.context.ts index 8a7282ea78..008922dd60 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-default.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-default.context.ts @@ -1,6 +1,7 @@ import { UmbCollectionConfiguration, UmbCollectionContext } from './types.js'; import { UmbCollectionRepository } from '@umbraco-cms/backoffice/repository'; -import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbArrayState, UmbNumberState, UmbObjectState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/tiny-mce-plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/tiny-mce-plugin.ts index 354c4608a6..bb6dd2f8f4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/tiny-mce-plugin.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-tiny-mce/tiny-mce-plugin.ts @@ -1,5 +1,5 @@ import type { UmbInputTinyMceElement } from '@umbraco-cms/backoffice/components'; -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; import type { Editor } from '@umbraco-cms/backoffice/external/tinymce'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; @@ -9,7 +9,7 @@ export class UmbTinyMcePluginBase extends UmbBaseController implements UmbApi { configuration?: UmbPropertyEditorConfigCollection; constructor(arg: TinyMcePluginArguments) { - super(arg.host) + super(arg.host); this.editor = arg.editor; this.configuration = arg.host.configuration; } @@ -18,4 +18,4 @@ export class UmbTinyMcePluginBase extends UmbBaseController implements UmbApi { export type TinyMcePluginArguments = { host: UmbInputTinyMceElement; editor: Editor; -} +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/culture/repository/culture.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/core/culture/repository/culture.repository.ts index e26f96fc43..a44ad431d6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/culture/repository/culture.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/culture/repository/culture.repository.ts @@ -1,23 +1,20 @@ import { UmbCultureServerDataSource } from './sources/culture.server.data.js'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { type UmbApi } from '@umbraco-cms/backoffice/extension-api'; export class UmbCultureRepository extends UmbBaseController implements UmbApi { - #dataSource: UmbCultureServerDataSource; constructor(host: UmbControllerHost) { super(host); this.#dataSource = new UmbCultureServerDataSource(this); - } requestCultures({ skip, take } = { skip: 0, take: 1000 }) { return this.#dataSource.getCollection({ skip, take }); } - destroy() { - - } + destroy() {} } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/debug/context-debug.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/debug/context-debug.controller.ts index 3f23fe3dad..94d3cd4fa7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/debug/context-debug.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/debug/context-debug.controller.ts @@ -1,5 +1,6 @@ import { contextData, UMB_DEBUG_CONTEXT_EVENT_TYPE } from '@umbraco-cms/backoffice/context-api'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; // Temp controller to get the code away from the app.element.ts export class UmbContextDebugController extends UmbBaseController { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/menu-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/menu-alias.condition.ts index 61e605eb93..29bd771d32 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/menu-alias.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/menu-alias.condition.ts @@ -1,5 +1,5 @@ import { UMB_MENU_CONTEXT_TOKEN } from '../../menu/menu.context.js'; -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestCondition, UmbConditionConfigBase, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/section-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/section-alias.condition.ts index 036f4dbe5a..d5c26579fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/section-alias.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/section-alias.condition.ts @@ -1,4 +1,4 @@ -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestCondition, UmbConditionConfigBase, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/switch.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/switch.condition.ts index ae88f91385..c94877f2da 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/switch.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/switch.condition.ts @@ -1,4 +1,5 @@ -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestCondition, UmbConditionConfigBase, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/picker-input/picker-input.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/picker-input/picker-input.context.ts index ef21943022..b898934c2b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/picker-input/picker-input.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/picker-input/picker-input.context.ts @@ -1,6 +1,7 @@ import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; import { UmbItemRepository, UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UMB_CONFIRM_MODAL, UMB_MODAL_MANAGER_CONTEXT_TOKEN, @@ -11,7 +12,7 @@ import { import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import { ItemResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; -export class UmbPickerInputContextextends UmbBaseController { +export class UmbPickerInputContext extends UmbBaseController { modalAlias: string | UmbModalToken; repository?: UmbItemRepository; #getUnique: (entry: ItemType) => string | undefined; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/shared/property-action-menu/property-action-menu.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/shared/property-action-menu/property-action-menu.context.ts index 8823bdabce..d6b4ee573e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-action/shared/property-action-menu/property-action-menu.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-action/shared/property-action-menu/property-action-menu.context.ts @@ -1,4 +1,5 @@ -import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; export class UmbPropertyActionMenuContext extends UmbBaseController { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/repository/repository-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/repository/repository-base.ts index e61b2a50fc..992a12cf0e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/repository/repository-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/repository/repository-base.ts @@ -1,4 +1,5 @@ -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; // TODO: Revisit if constructor method should be omitted export abstract class UmbRepositoryBase extends UmbBaseController { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/themes/theme.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/themes/theme.context.ts index 917740824d..333afce863 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/themes/theme.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/themes/theme.context.ts @@ -1,7 +1,8 @@ import { map } from '@umbraco-cms/backoffice/external/rxjs'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbStringState, UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestTheme, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { loadManifestPlainCss } from '@umbraco-cms/backoffice/extension-api'; @@ -61,7 +62,7 @@ export class UmbThemeContext extends UmbBaseController { this.#styleElement?.childNodes.forEach((node) => node.remove()); this.#styleElement?.setAttribute('href', ''); } - } + }, ); } else { localStorage.removeItem(LOCAL_STORAGE_KEY); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item-base/tree-item-base.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item-base/tree-item-base.context.ts index 4879620c4d..5097c33ed8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item-base/tree-item-base.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree-item-base/tree-item-base.context.ts @@ -6,7 +6,8 @@ import { UMB_SECTION_CONTEXT_TOKEN, UMB_SECTION_SIDEBAR_CONTEXT_TOKEN } from '@u import type { UmbSectionContext, UmbSectionSidebarContext } from '@umbraco-cms/backoffice/section'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { UmbBooleanState, UmbDeepState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; export type UmbTreeItemUniqueFunction = ( diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts index 42bb903267..ddd3c0af26 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/tree/tree.context.ts @@ -8,7 +8,8 @@ import { umbExtensionsRegistry, } from '@umbraco-cms/backoffice/extension-registry'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; import { ProblemDetails } from '@umbraco-cms/backoffice/backend-api'; import { UmbSelectionManager } from '@umbraco-cms/backoffice/utils'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/variant-context/invariant-workspace-variant-context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/variant-context/invariant-workspace-variant-context.ts index 8eaeb84b17..4831680795 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/variant-context/invariant-workspace-variant-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/variant-context/invariant-workspace-variant-context.ts @@ -1,11 +1,20 @@ -import { DocumentVariantResponseModel } from "@umbraco-cms/backoffice/backend-api"; -import { UmbBaseController, UmbControllerHost } from "@umbraco-cms/backoffice/controller-api"; -import { UmbObjectState } from "@umbraco-cms/backoffice/observable-api"; -import { UmbVariantId } from "@umbraco-cms/backoffice/variant"; -import { UMB_VARIANT_CONTEXT, UmbVariantContext, UmbInvariantableWorkspaceContextInterface } from "@umbraco-cms/backoffice/workspace"; - -export class UmbInvariantWorkspaceVariantContext extends UmbBaseController implements UmbVariantContext { +import { DocumentVariantResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; +import { + UMB_VARIANT_CONTEXT, + UmbVariantContext, + UmbInvariantableWorkspaceContextInterface, +} from '@umbraco-cms/backoffice/workspace'; +export class UmbInvariantWorkspaceVariantContext< + WorkspaceType extends UmbInvariantableWorkspaceContextInterface = UmbInvariantableWorkspaceContextInterface, + > + extends UmbBaseController + implements UmbVariantContext +{ protected _workspace: WorkspaceType; #currentVariant = new UmbObjectState(undefined); @@ -33,8 +42,6 @@ export class UmbInvariantWorkspaceVariantContext; } -export abstract class UmbWorkspaceActionBase extends UmbBaseController +export abstract class UmbWorkspaceActionBase + extends UmbBaseController implements UmbWorkspaceAction { workspaceContext?: WorkspaceContextType; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-alias.condition.ts index 09f9941cd8..2c6840ba36 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-alias.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-alias.condition.ts @@ -1,5 +1,5 @@ import { UMB_WORKSPACE_CONTEXT } from './workspace-context/index.js'; -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestCondition, UmbConditionConfigBase, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/editable-workspace-context-base.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/editable-workspace-context-base.ts index 84decb5fcc..7c7e720546 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/editable-workspace-context-base.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/editable-workspace-context-base.ts @@ -1,5 +1,6 @@ import { UmbSaveableWorkspaceContextInterface } from './saveable-workspace-context.interface.js'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbEntityBase } from '@umbraco-cms/backoffice/models'; import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-entity-type.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-entity-type.condition.ts index 8ec90a1a7a..e4a1380015 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-entity-type.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-entity-type.condition.ts @@ -1,5 +1,5 @@ import { UMB_WORKSPACE_CONTEXT } from './workspace-context/index.js'; -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestCondition, UmbConditionConfigBase, diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-is-new-redirect-controller/workspace-is-new-redirect-controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-is-new-redirect-controller/workspace-is-new-redirect-controller.ts index 74a4192315..adf71b59b9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-is-new-redirect-controller/workspace-is-new-redirect-controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-is-new-redirect-controller/workspace-is-new-redirect-controller.ts @@ -1,5 +1,6 @@ import { UmbEditableWorkspaceContextBase } from '../workspace-context/index.js'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import type { UmbEntityBase } from '@umbraco-cms/backoffice/models'; import { createRoutePathBuilder, type UmbRouterSlotElement } from '@umbraco-cms/backoffice/router'; import { ensurePathEndsWithSlash } from '@umbraco-cms/backoffice/utils'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property/workspace-property.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property/workspace-property.context.ts index 135619f858..2e6c4055a0 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property/workspace-property.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-property/workspace-property.context.ts @@ -2,7 +2,8 @@ import { UmbPropertyEditorUiElement } from '../../extension-registry/interfaces/ import { type WorkspacePropertyData } from '../types/workspace-property-data.type.js'; import { UMB_VARIANT_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; -import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbClassState, UmbObjectState, @@ -10,14 +11,10 @@ import { UmbObserverController, UmbBasicState, } from '@umbraco-cms/backoffice/observable-api'; -import { - UmbContextProviderController, - UmbContextToken, -} from '@umbraco-cms/backoffice/context-api'; +import { UmbContextProviderController, UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; export class UmbWorkspacePropertyContext extends UmbBaseController { - private _providerController: UmbContextProviderController; #data = new UmbObjectState>({}); @@ -73,44 +70,37 @@ export class UmbWorkspacePropertyContext extends UmbBaseControl }); } - private _observePropertyVariant?: UmbObserverController; private _observePropertyValue?: UmbObserverController; private async _observeProperty() { const alias = this.#data.getValue().alias; if (!this.#variantContext || !alias) return; - const variantIdSubject = await this.#variantContext.propertyVariantId?.(alias) ?? undefined; + const variantIdSubject = (await this.#variantContext.propertyVariantId?.(alias)) ?? undefined; this._observePropertyVariant?.destroy(); - if(variantIdSubject) { - this._observePropertyVariant = this.observe( - variantIdSubject, - (variantId) => { - this.#variantId.next(variantId); - } - ); + if (variantIdSubject) { + this._observePropertyVariant = this.observe(variantIdSubject, (variantId) => { + this.#variantId.next(variantId); + }); } // TODO: Verify if we need to optimize runtime by parsing the propertyVariantID, cause this method retrieves it again: - const subject = await this.#variantContext.propertyValueByAlias(alias) + const subject = await this.#variantContext.propertyValueByAlias(alias); this._observePropertyValue?.destroy(); - if(subject) { - this._observePropertyValue = this.observe( - subject, - (value) => { - // Note: Do not try to compare new / old value, as it can of any type. We trust the UmbObjectState in doing such. - this.#data.update({ value }); - } - ); + if (subject) { + this._observePropertyValue = this.observe(subject, (value) => { + // Note: Do not try to compare new / old value, as it can of any type. We trust the UmbObjectState in doing such. + this.#data.update({ value }); + }); } } private _generateVariantDifferenceString() { - if(!this.#variantContext) return; + if (!this.#variantContext) return; const contextVariantId = this.#variantContext.getVariantId?.() ?? undefined; this._variantDifference.next( - contextVariantId ? this.#variantId.getValue()?.toDifferencesString(contextVariantId) : '' + contextVariantId ? this.#variantId.getValue()?.toDifferencesString(contextVariantId) : '', ); } @@ -150,5 +140,5 @@ export class UmbWorkspacePropertyContext extends UmbBaseControl } export const UMB_WORKSPACE_PROPERTY_CONTEXT_TOKEN = new UmbContextToken( - 'UmbWorkspacePropertyContext' + 'UmbWorkspacePropertyContext', ); diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-split-view/workspace-split-view.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-split-view/workspace-split-view.context.ts index cd8966ea93..394a420342 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-split-view/workspace-split-view.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-split-view/workspace-split-view.context.ts @@ -1,17 +1,12 @@ import { UmbVariantContext } from '../variant-context/index.js'; import { UMB_VARIANT_WORKSPACE_CONTEXT_TOKEN } from '../index.js'; import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; -import { - UmbContextToken, -} from '@umbraco-cms/backoffice/context-api'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { - UmbNumberState, -} from '@umbraco-cms/backoffice/observable-api'; - +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { UmbNumberState } from '@umbraco-cms/backoffice/observable-api'; export class UmbWorkspaceSplitViewContext extends UmbBaseController { - #workspaceContext?: typeof UMB_VARIANT_WORKSPACE_CONTEXT_TOKEN.TYPE; public getWorkspaceContext() { return this.#workspaceContext; @@ -37,7 +32,6 @@ export class UmbWorkspaceSplitViewContext extends UmbBaseController { this._observeVariant(); }); - this.provideContext(UMB_WORKSPACE_SPLIT_VIEW_CONTEXT, this); } @@ -59,11 +53,10 @@ export class UmbWorkspaceSplitViewContext extends UmbBaseController { const variantId = UmbVariantId.Create(activeVariantInfo); this.#variantContext = this.#workspaceContext?.createVariantContext(this, variantId); }, - '_observeActiveVariant' + '_observeActiveVariant', ); } - public switchVariant(variant: UmbVariantId) { const index = this.#index.value; if (index === undefined) return; @@ -87,9 +80,6 @@ export class UmbWorkspaceSplitViewContext extends UmbBaseController { this.#index.next(index); } - - - /** * * concept this class could have methods to set and get the culture and segment of the active variant? just by using the index. @@ -103,5 +93,5 @@ export class UmbWorkspaceSplitViewContext extends UmbBaseController { } export const UMB_WORKSPACE_SPLIT_VIEW_CONTEXT = new UmbContextToken( - 'umbWorkspaceSplitViewContext' + 'umbWorkspaceSplitViewContext', ); diff --git a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/repository/dictionary.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/repository/dictionary.repository.ts index 0601c1ffe5..466ae316d3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/repository/dictionary.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/dictionary/dictionary/repository/dictionary.repository.ts @@ -1,7 +1,8 @@ import { type UmbDictionaryTreeStore, UMB_DICTIONARY_TREE_STORE_CONTEXT } from '../tree/index.js'; import { UmbDictionaryStore, UMB_DICTIONARY_STORE_CONTEXT_TOKEN } from './dictionary.store.js'; import { UmbDictionaryDetailServerDataSource } from './sources/dictionary.detail.server.data.js'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; import { CreateDictionaryItemRequestModel, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.repository.ts index 11599e4ed9..93bb8043c5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.repository.ts @@ -3,7 +3,8 @@ import { UMB_DOCUMENT_TYPE_ITEM_STORE_CONTEXT, UmbDocumentTypeItemStore } from ' import { UmbDocumentTypeServerDataSource } from './document-type.server.data.js'; import { UmbDocumentTypeDetailStore, UMB_DOCUMENT_TYPE_DETAIL_STORE_CONTEXT } from './document-type-detail.store.js'; import { type UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; -import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { CreateDocumentTypeRequestModel, DocumentTypeResponseModel, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts index 6afd5b74ba..4e6e9e87a1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/document.repository.ts @@ -4,7 +4,8 @@ import { UmbDocumentTreeStore, UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN } from './d import { UMB_DOCUMENT_ITEM_STORE_CONTEXT_TOKEN, type UmbDocumentItemStore } from './document-item.store.js'; import { UmbDocumentItemServerDataSource } from './sources/document-item.server.data.js'; import type { UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { DocumentResponseModel, CreateDocumentRequestModel, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/repository/document-permission.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/repository/document-permission.repository.ts index ebf14d9874..5f8d4b501f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/repository/document-permission.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/user-permissions/repository/document-permission.repository.ts @@ -1,8 +1,8 @@ import { UmbDocumentPermissionServerDataSource } from './document-permission.server.data.js'; -import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; export class UmbDocumentPermissionRepository extends UmbBaseController { - #permissionSource: UmbDocumentPermissionServerDataSource; constructor(host: UmbControllerHostElement) { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/variant-context/document-variant-context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/variant-context/document-variant-context.ts index 1d837afa4c..97946d2fab 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/variant-context/document-variant-context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/variant-context/document-variant-context.ts @@ -1,14 +1,14 @@ -import type { UmbDocumentWorkspaceContext } from "../workspace/index.js"; -import { DocumentVariantResponseModel, PropertyTypeModelBaseModel } from "@umbraco-cms/backoffice/backend-api"; -import { UmbBaseController, UmbControllerHost } from "@umbraco-cms/backoffice/controller-api"; -import { map } from "@umbraco-cms/backoffice/external/rxjs"; -import { UmbObjectState } from "@umbraco-cms/backoffice/observable-api"; -import { UmbVariantId } from "@umbraco-cms/backoffice/variant"; -import { UMB_VARIANT_CONTEXT, UmbVariantContext } from "@umbraco-cms/backoffice/workspace"; +import type { UmbDocumentWorkspaceContext } from '../workspace/index.js'; +import { DocumentVariantResponseModel, PropertyTypeModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { map } from '@umbraco-cms/backoffice/external/rxjs'; +import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbVariantId } from '@umbraco-cms/backoffice/variant'; +import { UMB_VARIANT_CONTEXT, UmbVariantContext } from '@umbraco-cms/backoffice/workspace'; // TODO: This code can be split into a UmbContentTypeVariantContext, leaving just the publishing state and methods to this class. export class UmbDocumentVariantContext extends UmbBaseController implements UmbVariantContext { - #workspace: UmbDocumentWorkspaceContext; #variantId: UmbVariantId; public getVariantId() { @@ -27,7 +27,6 @@ export class UmbDocumentVariantContext extends UmbBaseController implements UmbV // This will actually make it simpler if multiple are watching the same property. // But it will also mean that we wil watch all properties and their structure, for variantID, all the time for all of the properties. - getType(): string { return this.#workspace.getEntityType(); } @@ -44,8 +43,6 @@ export class UmbDocumentVariantContext extends UmbBaseController implements UmbV return this.#workspace.getVariant(this.#variantId); } - - constructor(host: UmbControllerHost, workspace: UmbDocumentWorkspaceContext, variantId?: UmbVariantId) { // The controller alias, is a very generic name cause we want only one of these for this controller host. super(host, 'variantContext'); @@ -58,15 +55,14 @@ export class UmbDocumentVariantContext extends UmbBaseController implements UmbV if (!variantInfo) return; this.#currentVariant.next(variantInfo); }, - '_observeActiveVariant' + '_observeActiveVariant', ); // TODO: Refactor: use the document dataset context token. this.provideContext(UMB_VARIANT_CONTEXT, this); } - - #createPropertyVariantId(property:PropertyTypeModelBaseModel) { + #createPropertyVariantId(property: PropertyTypeModelBaseModel) { return UmbVariantId.Create({ culture: property.variesByCulture ? this.#variantId.culture : null, segment: property.variesBySegment ? this.#variantId.segment : null, @@ -78,7 +74,9 @@ export class UmbDocumentVariantContext extends UmbBaseController implements UmbV * Ideally do not use these methods, its better to communicate directly with the workspace, but if you do not know the property variant id, then this will figure it out for you. So good for externals to set or get values of a property. */ async propertyVariantId(propertyAlias: string) { - return (await this.#workspace.structure.propertyStructureByAlias(propertyAlias)).pipe(map((property) => property ? this.#createPropertyVariantId(property) : undefined)); + return (await this.#workspace.structure.propertyStructureByAlias(propertyAlias)).pipe( + map((property) => (property ? this.#createPropertyVariantId(property) : undefined)), + ); } /** @@ -87,7 +85,13 @@ export class UmbDocumentVariantContext extends UmbBaseController implements UmbV */ async propertyValueByAlias(propertyAlias: string) { await this.#workspace.isLoaded(); - return (await this.#workspace.structure.propertyStructureByAlias(propertyAlias)).pipe(map((property) => property?.alias ? this.#workspace.getPropertyValue(property.alias, this.#createPropertyVariantId(property)) : undefined)); + return (await this.#workspace.structure.propertyStructureByAlias(propertyAlias)).pipe( + map((property) => + property?.alias + ? this.#workspace.getPropertyValue(property.alias, this.#createPropertyVariantId(property)) + : undefined, + ), + ); } // TODO: Refactor: Not used currently, but should investigate if we can implement this, to spare some energy. @@ -102,7 +106,7 @@ export class UmbDocumentVariantContext extends UmbBaseController implements UmbV async setPropertyValue(propertyAlias: string, value: unknown) { // This is not reacting to if the property variant settings changes while running. const property = await this.#workspace.structure.getPropertyStructureByAlias(propertyAlias); - if(property) { + if (property) { const variantId = this.#createPropertyVariantId(property); // This is not reacting to if the property variant settings changes while running. diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer.context.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer.context.ts index 63840ae9a8..5824382518 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer.context.ts @@ -10,7 +10,8 @@ import { PagedSavedLogSearchResponseModel, SavedLogSearchPresenationBaseModel, } from '@umbraco-cms/backoffice/backend-api'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { query } from '@umbraco-cms/backoffice/router'; import { UMB_WORKSPACE_CONTEXT, UmbWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.repository.ts index b01d10316f..9bfe3a6c64 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media-types/repository/detail/media-type-detail.repository.ts @@ -3,7 +3,8 @@ import { UMB_MEDIA_TYPE_ITEM_STORE_CONTEXT, UmbMediaTypeItemStore } from '../ite import { UmbMediaTypeServerDataSource } from './media-type-detail.server.data-source.js'; import { UmbMediaTypeDetailStore, UMB_MEDIA_TYPE_DETAIL_STORE_CONTEXT } from './media-type-detail.store.js'; import { type UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; -import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { CreateMediaTypeRequestModel, MediaTypeResponseModel, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.repository.ts index f26879f8d6..a9cdf4b6db 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/media.repository.ts @@ -4,7 +4,8 @@ import { UMB_MEDIA_STORE_CONTEXT, UmbMediaStore } from './media.store.js'; import { UmbMediaDetailServerDataSource } from './sources/media-detail.server.data-source.js'; import { UmbMediaItemServerDataSource } from './sources/media-item.server.data-source.js'; import { UmbMediaItemStore } from './media-item.store.js'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { CreateMediaRequestModel, UpdateMediaRequestModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbDetailRepository } from '@umbraco-cms/backoffice/repository'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/repository/member-type.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/repository/member-type.repository.ts index 7e283e6321..1fd415ae68 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member-types/repository/member-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member-types/repository/member-type.repository.ts @@ -2,7 +2,8 @@ import type { MemberTypeDetails } from '../types.js'; import { UmbMemberTypeTreeStore, UMB_MEMBER_TYPE_TREE_STORE_CONTEXT } from '../tree/index.js'; import { UmbMemberTypeStore, UMB_MEMBER_TYPE_STORE_CONTEXT } from './member-type.store.js'; import { UmbMemberTypeDetailServerDataSource } from './sources/member-type.detail.server.data.js'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; export class UmbMemberTypeRepository extends UmbBaseController { diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/package.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/package.repository.ts index 4c413502fe..8d0a265c6c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/package.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/package.repository.ts @@ -1,6 +1,7 @@ import { UmbPackageStore, UMB_PACKAGE_STORE_TOKEN } from './package.store.js'; import { UmbPackageServerDataSource } from './sources/package.server.data.js'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbApi, ManifestBase, isManifestBaseType } from '@umbraco-cms/backoffice/extension-api'; import { OpenAPI } from '@umbraco-cms/backoffice/backend-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/server-extension.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/server-extension.controller.ts index d18cd6044c..615c2b87c8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/server-extension.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/packages/package/repository/server-extension.controller.ts @@ -1,9 +1,9 @@ import { UmbPackageRepository } from './package.repository.js'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbBackofficeExtensionRegistry } from '@umbraco-cms/backoffice/extension-registry'; export class UmbExtensionInitializer extends UmbBaseController { - #extensionRegistry: UmbBackofficeExtensionRegistry; #repository: UmbPackageRepository; #localPackages: Array>; @@ -11,7 +11,7 @@ export class UmbExtensionInitializer extends UmbBaseController { constructor( host: UmbControllerHostElement, extensionRegistry: UmbBackofficeExtensionRegistry, - localPackages: Array> + localPackages: Array>, ) { super(host, UmbExtensionInitializer.name); diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/languages/app-language-select/app-language.context.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/languages/app-language-select/app-language.context.ts index 25cf932076..ffff1c32b4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/languages/app-language-select/app-language.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/languages/app-language-select/app-language.context.ts @@ -1,6 +1,7 @@ import { UmbLanguageRepository } from '../repository/language.repository.js'; import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { LanguageResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; @@ -30,14 +31,18 @@ export class UmbAppLanguageContext extends UmbBaseController implements UmbApi { async #observeLanguages() { const { asObservable } = await this.#languageRepository.requestLanguages(); - this.observe(asObservable(), (languages) => { - this.#languages = languages; + this.observe( + asObservable(), + (languages) => { + this.#languages = languages; - // If the app language is not set, set it to the default language - if (!this.#appLanguage.getValue()) { - this.#initAppLanguage(); - } - }, '_observeLanguages'); + // If the app language is not set, set it to the default language + if (!this.#appLanguage.getValue()) { + this.#initAppLanguage(); + } + }, + '_observeLanguages', + ); } #initAppLanguage() { diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/languages/repository/language.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/languages/repository/language.repository.ts index aaa1fb5c45..759b77cb19 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/languages/repository/language.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/languages/repository/language.repository.ts @@ -2,7 +2,8 @@ import { UmbLanguageServerDataSource } from './sources/language.server.data.js'; import { UmbLanguageStore, UMB_LANGUAGE_STORE_CONTEXT_TOKEN } from './language.store.js'; import { UmbLanguageItemServerDataSource } from './sources/language-item.server.data.js'; import { UMB_LANGUAGE_ITEM_STORE_CONTEXT_TOKEN, UmbLanguageItemStore } from './language-item.store.js'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; import { LanguageItemResponseModel, LanguageResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbItemRepository } from '@umbraco-cms/backoffice/repository'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts index e946422f98..cfa68550db 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/relation-types/repository/relation-type.repository.ts @@ -1,7 +1,8 @@ import { UmbRelationTypeTreeStore, UMB_RELATION_TYPE_TREE_STORE_CONTEXT } from '../tree/index.js'; import { UmbRelationTypeServerDataSource } from './sources/relation-type.server.data.js'; import { UmbRelationTypeStore, UMB_RELATION_TYPE_STORE_CONTEXT_TOKEN } from './relation-type.store.js'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { CreateRelationTypeRequestModel, RelationTypeResponseModel, diff --git a/src/Umbraco.Web.UI.Client/src/packages/tags/repository/tag.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/tags/repository/tag.repository.ts index 3ece7b958d..c1a5346d58 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/tags/repository/tag.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/tags/repository/tag.repository.ts @@ -1,6 +1,7 @@ import { UmbTagServerDataSource } from './sources/tag.server.data.js'; import { UmbTagStore, UMB_TAG_STORE_CONTEXT_TOKEN } from './tag.store.js'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; export class UmbTagRepository extends UmbBaseController implements UmbApi { @@ -16,13 +17,13 @@ export class UmbTagRepository extends UmbBaseController implements UmbApi { this.#init = this.consumeContext(UMB_TAG_STORE_CONTEXT_TOKEN, (instance) => { this.#tagStore = instance; - }).asPromise() + }).asPromise(); } async requestTags( tagGroupName: string, culture: string | null, - { skip, take, query } = { skip: 0, take: 1000, query: '' } + { skip, take, query } = { skip: 0, take: 1000, query: '' }, ) { await this.#init; @@ -53,7 +54,7 @@ export class UmbTagRepository extends UmbBaseController implements UmbApi { tagGroupName: string, culture: string | null, query: string, - { skip, take } = { skip: 0, take: 1000 } + { skip, take } = { skip: 0, take: 1000 }, ) { return this.requestTags(tagGroupName, culture, { skip, take, query }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/partial-view.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/partial-view.repository.ts index 79559712f9..d6925faf7a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/partial-view.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/partial-views/repository/partial-view.repository.ts @@ -5,7 +5,8 @@ import { UmbPartialViewFolderServerDataSource, } from './sources/partial-view-folder.server.data-source.js'; import { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { CreateFolderRequestModel, CreatePartialViewRequestModel, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/script.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/script.repository.ts index d90aad41b2..08a7a450d7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/script.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/scripts/repository/script.repository.ts @@ -18,7 +18,8 @@ import { TextFileResponseModelBaseModel, UpdateScriptRequestModel, } from '@umbraco-cms/backoffice/backend-api'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/stylesheet.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/stylesheet.repository.ts index 458bd18fbc..fb661a53ac 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/stylesheet.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/stylesheets/repository/stylesheet.repository.ts @@ -6,7 +6,8 @@ import { UmbStylesheetFolderServerDataSource, } from './sources/stylesheet.folder.server.data.js'; import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { DataSourceResponse, UmbDataSourceErrorResponse, diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/template.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/template.repository.ts index 0f6773a4da..bd76fe39b9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/template.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/templating/templates/repository/template.repository.ts @@ -6,7 +6,8 @@ import { UmbTemplateItemServerDataSource } from './sources/template.item.server. import { UmbTemplateQueryBuilderServerDataSource } from './sources/template.query-builder.server.data.js'; import { Observable } from '@umbraco-cms/backoffice/external/rxjs'; import type { UmbDetailRepository, UmbItemDataSource, UmbItemRepository } from '@umbraco-cms/backoffice/repository'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbNotificationContext, UMB_NOTIFICATION_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/notification'; import type { CreateTemplateRequestModel, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts index d6bc1232be..710fbf4b4f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/current-user/current-user.context.ts @@ -1,6 +1,7 @@ import { UmbCurrentUser } from './types.js'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; import { firstValueFrom } from '@umbraco-cms/backoffice/external/rxjs'; import { UserResource } from '@umbraco-cms/backoffice/backend-api'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.repository.ts index 134bdd346f..fba21ddbfc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.repository.ts @@ -3,7 +3,8 @@ import { UMB_USER_GROUP_STORE_CONTEXT_TOKEN, UmbUserGroupStore } from '../../rep import { UmbUserGroupCollectionServerDataSource } from './user-group-collection.server.data-source.js'; import { UserGroupResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbCollectionDataSource, UmbCollectionRepository } from '@umbraco-cms/backoffice/repository'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; export class UmbUserGroupCollectionRepository extends UmbBaseController implements UmbCollectionRepository { #init; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/user-group.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/user-group.repository.ts index cca6148eef..326a8d69ea 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/user-group.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/user-group.repository.ts @@ -18,7 +18,8 @@ import { DataSourceResponse, } from '@umbraco-cms/backoffice/repository'; import { UMB_NOTIFICATION_CONTEXT_TOKEN, UmbNotificationContext } from '@umbraco-cms/backoffice/notification'; -import { UmbBaseController, type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbApi } from '@umbraco-cms/backoffice/extension-api'; // TODO: implement diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/conditions/user-permission.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/conditions/user-permission.condition.ts index 18ad039224..74e1a3d0f8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/conditions/user-permission.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-permission/conditions/user-permission.condition.ts @@ -1,5 +1,5 @@ import { UMB_CURRENT_USER_CONTEXT } from '../../current-user/current-user.context.js'; -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestCondition, UmbConditionConfigBase, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-action-base.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-action-base.condition.ts index edb50f5c6d..3955f4e1d5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-action-base.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-action-base.condition.ts @@ -1,6 +1,6 @@ import { UmbUserDetail } from '../types.js'; import { UmbUserWorkspaceContext } from '../workspace/user-workspace.context.js'; -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { isCurrentUser } from '@umbraco-cms/backoffice/current-user'; import { UmbConditionConfigBase, diff --git a/src/Umbraco.Web.UI.Client/src/shared/auth/auth.context.ts b/src/Umbraco.Web.UI.Client/src/shared/auth/auth.context.ts index 7b6b143058..7eea0b7ed5 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/auth/auth.context.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/auth/auth.context.ts @@ -1,7 +1,8 @@ -import { IUmbAuthContext } from './auth.context.interface.js'; +import { type IUmbAuthContext } from './auth.context.interface.js'; import { UmbAuthFlow } from './auth-flow.js'; import { UMB_AUTH_CONTEXT } from './auth.context.token.js'; -import { UmbBaseController, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbBooleanState } from '@umbraco-cms/backoffice/observable-api'; export class UmbAuthContext extends UmbBaseController implements IUmbAuthContext { diff --git a/src/Umbraco.Web.UI.Client/src/shared/resources/resource.controller.ts b/src/Umbraco.Web.UI.Client/src/shared/resources/resource.controller.ts index 0afe664c6d..c3c769f97c 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/resources/resource.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/resources/resource.controller.ts @@ -5,7 +5,8 @@ import { UMB_NOTIFICATION_CONTEXT_TOKEN, UmbNotificationOptions, } from '@umbraco-cms/backoffice/notification'; -import { UmbBaseController, UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import type { DataSourceResponse } from '@umbraco-cms/backoffice/repository'; diff --git a/src/Umbraco.Web.UI.Client/src/shared/router/route.context.ts b/src/Umbraco.Web.UI.Client/src/shared/router/route.context.ts index 9c06390502..7804270ad3 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/router/route.context.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/router/route.context.ts @@ -2,7 +2,8 @@ import type { UmbRoute } from './route.interface.js'; import { createRoutePathBuilder } from './generate-route-path-builder.function.js'; import type { IRoutingInfo, IRouterSlot } from '@umbraco-cms/backoffice/external/router-slot'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; -import { UmbBaseController, type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { type UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { UMB_MODAL_MANAGER_CONTEXT_TOKEN, UmbModalRouteRegistration } from '@umbraco-cms/backoffice/modal'; const EmptyDiv = document.createElement('div'); @@ -51,7 +52,11 @@ export class UmbRouteContext extends UmbBaseController { component: EmptyDiv, setup: async (component, info) => { if (!this.#modalContext) return; - const modalContext = await modalRegistration.routeSetup(this.#modalRouter, this.#modalContext, info.match.params); + const modalContext = await modalRegistration.routeSetup( + this.#modalRouter, + this.#modalContext, + info.match.params, + ); if (modalContext) { modalContext.onSubmit().then( () => { @@ -59,7 +64,7 @@ export class UmbRouteContext extends UmbBaseController { }, () => { this.#removeModalPath(info); - } + }, ); } }, @@ -74,10 +79,10 @@ export class UmbRouteContext extends UmbBaseController { #generateModalRoutes() { const newModals = this.#modalRegistrations.filter( - (x) => !this.#modalRoutes.find((route) => x.key === route.__modalKey) + (x) => !this.#modalRoutes.find((route) => x.key === route.__modalKey), ); const routesToRemove = this.#modalRoutes.filter( - (route) => !this.#modalRegistrations.find((x) => x.key === route.__modalKey) + (route) => !this.#modalRegistrations.find((x) => x.key === route.__modalKey), ); const cleanedRoutes = this.#modalRoutes.filter((route) => !routesToRemove.includes(route)); diff --git a/src/Umbraco.Web.UI.Client/storybook/stories/extending/registration/conditions.mdx b/src/Umbraco.Web.UI.Client/storybook/stories/extending/registration/conditions.mdx index d3f74b7e5e..5b8ad78caa 100644 --- a/src/Umbraco.Web.UI.Client/storybook/stories/extending/registration/conditions.mdx +++ b/src/Umbraco.Web.UI.Client/storybook/stories/extending/registration/conditions.mdx @@ -51,7 +51,7 @@ The following conditions are available out of the box, for all extension types t You can make your own conditions by creating a class that implements the `UmbExtensionCondition` interface. ```typescript -import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; import { ManifestCondition, UmbConditionConfigBase,