From 3ee2a0c069e0c76b80046bd7fc5dedee890c2ba7 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Mon, 5 Aug 2024 10:24:36 +0200 Subject: [PATCH 01/43] update dependencies to new unified ckeditor5 package --- app/package.json | 36 +- itest/package.json | 6 +- package.json | 4 + packages/ckeditor5-bbcode/package.json | 6 +- packages/ckeditor5-common/package.json | 7 +- packages/ckeditor5-core-common/package.json | 4 +- .../package.json | 13 +- .../package.json | 16 +- .../ckeditor5-coremedia-content/package.json | 4 +- .../package.json | 8 +- .../ckeditor5-coremedia-images/package.json | 12 +- .../ckeditor5-coremedia-link/package.json | 18 +- .../package.json | 10 +- .../ckeditor5-coremedia-richtext/package.json | 8 +- .../package.json | 13 +- .../package.json | 5 +- packages/ckeditor5-data-facade/package.json | 11 +- .../package.json | 8 +- .../ckeditor5-dialog-visibility/package.json | 6 +- packages/ckeditor5-dom-converter/package.json | 4 +- packages/ckeditor5-font-mapper/package.json | 10 +- packages/ckeditor5-link-common/package.json | 14 +- pnpm-lock.yaml | 1583 +++++++---------- 23 files changed, 731 insertions(+), 1075 deletions(-) diff --git a/app/package.json b/app/package.json index 9f1fed03d..821d1edce 100644 --- a/app/package.json +++ b/app/package.json @@ -15,35 +15,7 @@ "license": "Apache-2.0", "private": true, "dependencies": { - "@ckeditor/ckeditor5-alignment": "42.0.1", - "@ckeditor/ckeditor5-autoformat": "42.0.1", - "@ckeditor/ckeditor5-autosave": "42.0.1", - "@ckeditor/ckeditor5-basic-styles": "42.0.1", - "@ckeditor/ckeditor5-block-quote": "42.0.1", - "@ckeditor/ckeditor5-clipboard": "42.0.1", - "@ckeditor/ckeditor5-code-block": "42.0.1", - "@ckeditor/ckeditor5-core": "42.0.1", - "@ckeditor/ckeditor5-editor-classic": "42.0.1", - "@ckeditor/ckeditor5-engine": "42.0.1", - "@ckeditor/ckeditor5-essentials": "42.0.1", - "@ckeditor/ckeditor5-find-and-replace": "42.0.1", - "@ckeditor/ckeditor5-font": "42.0.1", - "@ckeditor/ckeditor5-heading": "42.0.1", - "@ckeditor/ckeditor5-highlight": "42.0.1", - "@ckeditor/ckeditor5-image": "42.0.1", - "@ckeditor/ckeditor5-indent": "42.0.1", - "@ckeditor/ckeditor5-language": "42.0.1", - "@ckeditor/ckeditor5-link": "42.0.1", - "@ckeditor/ckeditor5-list": "42.0.1", - "@ckeditor/ckeditor5-paragraph": "42.0.1", - "@ckeditor/ckeditor5-paste-from-office": "42.0.1", - "@ckeditor/ckeditor5-remove-format": "42.0.1", - "@ckeditor/ckeditor5-source-editing": "42.0.1", - "@ckeditor/ckeditor5-table": "42.0.1", - "@ckeditor/ckeditor5-typing": "42.0.1", - "@ckeditor/ckeditor5-ui": "42.0.1", - "@ckeditor/ckeditor5-upload": "42.0.1", - "@ckeditor/ckeditor5-utils": "42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-coremedia-example-data": "^1.0.0", "@coremedia/ckeditor5-bbcode": "^20.1.0", "@coremedia/ckeditor5-coremedia-blocklist": "^20.1.0", @@ -64,10 +36,10 @@ "xml-formatter": "^3.6.2" }, "devDependencies": { - "@ckeditor/ckeditor5-dev-translations": "^40.3.1", - "@ckeditor/ckeditor5-dev-utils": "^40.3.1", + "@ckeditor/ckeditor5-dev-translations": "^42.0.0", + "@ckeditor/ckeditor5-dev-utils": "^42.0.0", "@ckeditor/ckeditor5-inspector": "^4.1.0", - "@ckeditor/ckeditor5-theme-lark": "42.0.1", + "@ckeditor/ckeditor5-theme-lark": "42.0.2", "@types/node": "^20.14.10", "circular-dependency-plugin": "^5.2.2", "css-loader": "^7.1.2", diff --git a/itest/package.json b/itest/package.json index 5f54bfe88..83f372dbc 100644 --- a/itest/package.json +++ b/itest/package.json @@ -17,11 +17,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-editor-classic": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-link": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-coremedia-example-data": "^1.0.0", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@coremedia/ckeditor5-coremedia-link": "^20.1.0", diff --git a/package.json b/package.json index 8b414c0fd..6eda15ff1 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,10 @@ "@coremedia/set-version": "1.1.1" }, "devDependencies": { + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0", "@types/jest": "^29.5.12", "@typescript-eslint/eslint-plugin": "^7.7.0", "@typescript-eslint/parser": "^7.7.0", diff --git a/packages/ckeditor5-bbcode/package.json b/packages/ckeditor5-bbcode/package.json index 36768ae5d..c25701408 100644 --- a/packages/ckeditor5-bbcode/package.json +++ b/packages/ckeditor5-bbcode/package.json @@ -26,11 +26,10 @@ "npm-check-updates": "npm-check-updates --upgrade" }, "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@coremedia/ckeditor5-dom-support": "^20.1.0", "@types/jest": "^29.5.12", + "ckeditor5": "^42.0.2", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", @@ -47,8 +46,7 @@ "/types" ], "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@bbob/core": "^3.0.2", diff --git a/packages/ckeditor5-common/package.json b/packages/ckeditor5-common/package.json index 09ad576bf..6d431778c 100644 --- a/packages/ckeditor5-common/package.json +++ b/packages/ckeditor5-common/package.json @@ -23,13 +23,18 @@ "devDependencies": { "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", + "ckeditor5": "^42.0.2", "jest": "^29.7.0", "jest-config": "^29.7.0", "rimraf": "^6.0.1", "typescript": "^5.4.5" }, + "peerDependencies": { + "ckeditor5": "^42.0.2" + }, "dependencies": { - "@coremedia/ckeditor5-logging": "^20.1.0" + "@coremedia/ckeditor5-logging": "^20.1.0", + "ckeditor5": "^42.0.2" }, "scripts": { "clean": "pnpm clean:src && pnpm clean:dist", diff --git a/packages/ckeditor5-core-common/package.json b/packages/ckeditor5-core-common/package.json index 096f8c4b2..855892cc8 100644 --- a/packages/ckeditor5-core-common/package.json +++ b/packages/ckeditor5-core-common/package.json @@ -24,16 +24,16 @@ ], "license": "Apache-2.0", "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", + "ckeditor5": "^42.0.2", "jest": "^29.7.0", "jest-config": "^29.7.0", "rimraf": "^6.0.1", "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-blocklist/package.json b/packages/ckeditor5-coremedia-blocklist/package.json index 3ef49c7ee..ff47fb04c 100644 --- a/packages/ckeditor5-coremedia-blocklist/package.json +++ b/packages/ckeditor5-coremedia-blocklist/package.json @@ -35,29 +35,20 @@ "/theme" ], "devDependencies": { - "@ckeditor/ckeditor5-clipboard": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@coremedia/service-agent": "^1.1.5 || ^2.0.1", "@types/jest": "^29.5.12", + "ckeditor5": "^42.0.2", "jest": "^29.7.0", "rimraf": "^6.0.1", "rxjs": "^7.8.1", "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-clipboard": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia/service-agent": "^1.1.5 || ^2.0.1" }, "dependencies": { - "@ckeditor/ckeditor5-find-and-replace": "^42.0.1", "@coremedia/ckeditor5-core-common": "^20.1.0", "@coremedia/ckeditor5-coremedia-studio-integration": "^20.1.0", "@coremedia/ckeditor5-logging": "^20.1.0" diff --git a/packages/ckeditor5-coremedia-content-clipboard/package.json b/packages/ckeditor5-coremedia-content-clipboard/package.json index 2c0d93a2d..1a7863817 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/package.json +++ b/packages/ckeditor5-coremedia-content-clipboard/package.json @@ -25,13 +25,7 @@ "npm-check-updates": "npm-check-updates --upgrade" }, "devDependencies": { - "@ckeditor/ckeditor5-clipboard": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-html-support": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-undo": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@coremedia/service-agent": "^1.1.5 || ^2.0.1", "@types/jest": "^29.5.12", @@ -52,13 +46,7 @@ "/theme" ], "peerDependencies": { - "@ckeditor/ckeditor5-clipboard": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-html-support": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-undo": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia/service-agent": "^1.1.5 || ^2.0.1" }, "dependencies": { diff --git a/packages/ckeditor5-coremedia-content/package.json b/packages/ckeditor5-coremedia-content/package.json index 8f006488c..6be2d5d9e 100644 --- a/packages/ckeditor5-coremedia-content/package.json +++ b/packages/ckeditor5-coremedia-content/package.json @@ -23,7 +23,7 @@ ], "license": "Apache-2.0", "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@coremedia/service-agent": "^1.1.5 || ^2.0.1", "@types/jest": "^29.5.12", @@ -37,7 +37,7 @@ "@coremedia/ckeditor5-logging": "^20.1.0" }, "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia/service-agent": "^1.1.5 || ^2.0.1" }, "scripts": { diff --git a/packages/ckeditor5-coremedia-differencing/package.json b/packages/ckeditor5-coremedia-differencing/package.json index 9447807a7..67e50063f 100644 --- a/packages/ckeditor5-coremedia-differencing/package.json +++ b/packages/ckeditor5-coremedia-differencing/package.json @@ -24,9 +24,7 @@ ], "license": "Apache-2.0", "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-coremedia-example-data": "^1.0.0", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", @@ -37,9 +35,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-images/package.json b/packages/ckeditor5-coremedia-images/package.json index d82552274..686aae22f 100644 --- a/packages/ckeditor5-coremedia-images/package.json +++ b/packages/ckeditor5-coremedia-images/package.json @@ -34,11 +34,7 @@ "/theme" ], "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-image": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@coremedia/service-agent": "^1.1.5 || ^2.0.1", "@types/jest": "^29.5.12", @@ -49,11 +45,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-image": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia/service-agent": "^1.1.5 || ^2.0.1" }, "dependencies": { diff --git a/packages/ckeditor5-coremedia-link/package.json b/packages/ckeditor5-coremedia-link/package.json index 8c8857bdc..3c112a1db 100644 --- a/packages/ckeditor5-coremedia-link/package.json +++ b/packages/ckeditor5-coremedia-link/package.json @@ -34,16 +34,10 @@ "/theme" ], "devDependencies": { - "@ckeditor/ckeditor5-clipboard": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-link": "^42.0.1", - "@ckeditor/ckeditor5-typing": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@coremedia/service-agent": "^1.1.5 || ^2.0.1", "@types/jest": "^29.5.12", + "ckeditor5": "^42.0.2", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", @@ -51,14 +45,8 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-clipboard": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-link": "^42.0.1", - "@ckeditor/ckeditor5-typing": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1" + "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-richtext-support/package.json b/packages/ckeditor5-coremedia-richtext-support/package.json index be39dbafe..0322bfae4 100644 --- a/packages/ckeditor5-coremedia-richtext-support/package.json +++ b/packages/ckeditor5-coremedia-richtext-support/package.json @@ -26,10 +26,7 @@ "npm-check-updates": "npm-check-updates --upgrade" }, "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-html-support": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", @@ -47,10 +44,7 @@ "/src" ], "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-html-support": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-core-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-richtext/package.json b/packages/ckeditor5-coremedia-richtext/package.json index 9afe9c8c5..847628163 100644 --- a/packages/ckeditor5-coremedia-richtext/package.json +++ b/packages/ckeditor5-coremedia-richtext/package.json @@ -26,9 +26,7 @@ "npm-check-updates": "npm-check-updates --upgrade" }, "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-coremedia-example-data": "^1.0.0", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", @@ -48,9 +46,7 @@ "/src" ], "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-studio-essentials/package.json b/packages/ckeditor5-coremedia-studio-essentials/package.json index e4bb46b2e..1e9e7d77d 100644 --- a/packages/ckeditor5-coremedia-studio-essentials/package.json +++ b/packages/ckeditor5-coremedia-studio-essentials/package.json @@ -35,12 +35,7 @@ "/src" ], "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-link": "^42.0.1", - "@ckeditor/ckeditor5-typing": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", @@ -50,11 +45,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-typing": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-coremedia-richtext": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/package.json b/packages/ckeditor5-coremedia-studio-integration-mock/package.json index 4d87a2e08..9a4d0195a 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/package.json +++ b/packages/ckeditor5-coremedia-studio-integration-mock/package.json @@ -38,11 +38,12 @@ "devDependencies": { "@babel/cli": "^7.24.1", "@babel/core": "^7.24.4", - "@ckeditor/ckeditor5-core": "^42.0.1", "@coremedia-internal/ckeditor5-babel-config": "^1.0.0", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@coremedia/service-agent": "^1.1.5 || ^2.0.1", "@types/jest": "^29.5.12", + "ckeditor5": "^42.0.2", + "@ckeditor/ckeditor5-core": "^42.0.2", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", @@ -50,7 +51,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia/service-agent": "^1.1.5 || ^2.0.1" }, "dependencies": { diff --git a/packages/ckeditor5-data-facade/package.json b/packages/ckeditor5-data-facade/package.json index 62d100feb..5544228f6 100644 --- a/packages/ckeditor5-data-facade/package.json +++ b/packages/ckeditor5-data-facade/package.json @@ -33,11 +33,7 @@ "/src" ], "devDependencies": { - "@ckeditor/ckeditor5-autosave": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", @@ -46,10 +42,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-autosave": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-core-common": "^20.1.0", diff --git a/packages/ckeditor5-dataprocessor-support/package.json b/packages/ckeditor5-dataprocessor-support/package.json index 071254a0d..530eee53e 100644 --- a/packages/ckeditor5-dataprocessor-support/package.json +++ b/packages/ckeditor5-dataprocessor-support/package.json @@ -27,9 +27,7 @@ "npm-check-updates": "npm-check-updates --upgrade" }, "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", @@ -39,9 +37,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/packages/ckeditor5-dialog-visibility/package.json b/packages/ckeditor5-dialog-visibility/package.json index 50a242436..3096fe561 100644 --- a/packages/ckeditor5-dialog-visibility/package.json +++ b/packages/ckeditor5-dialog-visibility/package.json @@ -24,8 +24,7 @@ "npm-check-updates": "npm-check-updates --upgrade" }, "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", + "ckeditor5": "^42.0.2", "rimraf": "^6.0.1", "typescript": "^5.4.5" }, @@ -38,7 +37,6 @@ "/src" ], "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1" + "ckeditor5": "^42.0.2" } } diff --git a/packages/ckeditor5-dom-converter/package.json b/packages/ckeditor5-dom-converter/package.json index cc010beda..8c7aeec33 100644 --- a/packages/ckeditor5-dom-converter/package.json +++ b/packages/ckeditor5-dom-converter/package.json @@ -22,7 +22,7 @@ ], "license": "Apache-2.0", "devDependencies": { - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", @@ -30,7 +30,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/packages/ckeditor5-font-mapper/package.json b/packages/ckeditor5-font-mapper/package.json index e6f79b5ab..f37265bc7 100644 --- a/packages/ckeditor5-font-mapper/package.json +++ b/packages/ckeditor5-font-mapper/package.json @@ -24,10 +24,7 @@ ], "license": "Apache-2.0", "devDependencies": { - "@ckeditor/ckeditor5-clipboard": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", "@types/webpack": "^5.28.5", @@ -36,10 +33,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-clipboard": "^42.0.1", - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/packages/ckeditor5-link-common/package.json b/packages/ckeditor5-link-common/package.json index 357124f0b..071a71eb3 100644 --- a/packages/ckeditor5-link-common/package.json +++ b/packages/ckeditor5-link-common/package.json @@ -24,12 +24,7 @@ ], "license": "Apache-2.0", "devDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-link": "^42.0.1", - "@ckeditor/ckeditor5-typing": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1", + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", @@ -38,12 +33,7 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@ckeditor/ckeditor5-core": "^42.0.1", - "@ckeditor/ckeditor5-engine": "^42.0.1", - "@ckeditor/ckeditor5-link": "^42.0.1", - "@ckeditor/ckeditor5-typing": "^42.0.1", - "@ckeditor/ckeditor5-ui": "^42.0.1", - "@ckeditor/ckeditor5-utils": "^42.0.1" + "ckeditor5": "^42.0.2" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 073634e58..ceba2d6d4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,6 +12,18 @@ importers: specifier: 1.1.1 version: 1.1.1 devDependencies: + '@babel/generator': + specifier: ^7.25.0 + version: 7.25.0 + '@babel/parser': + specifier: ^7.25.0 + version: 7.25.3 + '@babel/traverse': + specifier: ^7.25.0 + version: 7.25.3 + '@babel/types': + specifier: ^7.25.0 + version: 7.25.2 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -69,93 +81,6 @@ importers: app: dependencies: - '@ckeditor/ckeditor5-alignment': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-autoformat': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-autosave': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-basic-styles': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-block-quote': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-clipboard': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-code-block': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-core': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-editor-classic': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-essentials': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-find-and-replace': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-font': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-heading': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-highlight': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-image': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-indent': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-language': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-link': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-list': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-paragraph': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-paste-from-office': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-remove-format': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-source-editing': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-table': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-typing': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-upload': - specifier: 42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: 42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-coremedia-example-data': specifier: ^1.0.0 version: link:../packages/ckeditor5-coremedia-example-data @@ -207,22 +132,25 @@ importers: '@coremedia/service-agent': specifier: ^2.0.1 version: 2.0.1 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 xml-formatter: specifier: ^3.6.2 version: 3.6.2 devDependencies: '@ckeditor/ckeditor5-dev-translations': - specifier: ^40.3.1 - version: 40.3.1 + specifier: ^42.0.0 + version: 42.0.0 '@ckeditor/ckeditor5-dev-utils': - specifier: ^40.3.1 - version: 40.3.1(webpack@5.93.0(webpack-cli@5.1.4)) + specifier: ^42.0.0 + version: 42.0.0(webpack@5.93.0(webpack-cli@5.1.4)) '@ckeditor/ckeditor5-inspector': specifier: ^4.1.0 version: 4.1.0 '@ckeditor/ckeditor5-theme-lark': - specifier: 42.0.1 - version: 42.0.1 + specifier: 42.0.2 + version: 42.0.2 '@types/node': specifier: ^20.14.10 version: 20.14.10 @@ -268,21 +196,6 @@ importers: itest: devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-editor-classic': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-link': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-coremedia-example-data': specifier: ^1.0.0 version: link:../packages/ckeditor5-coremedia-example-data @@ -310,6 +223,9 @@ importers: '@types/node': specifier: ^20.14.10 version: 20.14.10 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 expect-playwright: specifier: ^0.8.0 version: 0.8.0 @@ -395,12 +311,6 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers @@ -410,6 +320,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -431,6 +344,9 @@ importers: '@coremedia/ckeditor5-logging': specifier: ^20.1.0 version: link:../ckeditor5-logging + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 devDependencies: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 @@ -460,15 +376,15 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -484,9 +400,6 @@ importers: packages/ckeditor5-coremedia-blocklist: dependencies: - '@ckeditor/ckeditor5-find-and-replace': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia/ckeditor5-core-common': specifier: ^20.1.0 version: link:../ckeditor5-core-common @@ -497,21 +410,6 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-clipboard': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers @@ -521,6 +419,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -543,9 +444,6 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers @@ -555,6 +453,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -583,27 +484,6 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-clipboard': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-html-support': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-undo': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers @@ -613,6 +493,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -653,15 +536,6 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-coremedia-example-data': specifier: ^1.0.0 version: link:../ckeditor5-coremedia-example-data @@ -671,6 +545,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -733,21 +610,6 @@ importers: specifier: ^7.8.1 version: 7.8.1 devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-image': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers @@ -757,6 +619,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -800,27 +665,6 @@ importers: specifier: ^7.8.1 version: 7.8.1 devDependencies: - '@ckeditor/ckeditor5-clipboard': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-link': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-typing': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers @@ -830,6 +674,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -870,15 +717,6 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-coremedia-example-data': specifier: ^1.0.0 version: link:../ckeditor5-coremedia-example-data @@ -888,6 +726,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -913,24 +754,15 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-html-support': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -956,30 +788,15 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-coremedia-richtext-support devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-link': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-typing': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -1055,8 +872,8 @@ importers: specifier: ^7.24.4 version: 7.24.4 '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 + specifier: ^42.0.2 + version: 42.0.2 '@coremedia-internal/ckeditor5-babel-config': specifier: ^1.0.0 version: link:../ckeditor5-babel-config @@ -1069,6 +886,9 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -1094,27 +914,15 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-autosave': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -1137,21 +945,15 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -1170,12 +972,9 @@ importers: packages/ckeditor5-dialog-visibility: devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -1195,15 +994,15 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -1248,18 +1047,6 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-clipboard': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers @@ -1269,6 +1056,9 @@ importers: '@types/webpack': specifier: ^5.28.5 version: 5.28.5 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -1318,30 +1108,15 @@ importers: specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: - '@ckeditor/ckeditor5-core': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-engine': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-link': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-typing': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-ui': - specifier: ^42.0.1 - version: 42.0.1 - '@ckeditor/ckeditor5-utils': - specifier: ^42.0.1 - version: 42.0.1 '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@types/jest': specifier: ^29.5.12 version: 29.5.12 + ckeditor5: + specifier: ^42.0.2 + version: 42.0.2 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10) @@ -1426,20 +1201,12 @@ packages: resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.22.15': - resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.23.6': - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.24.4': resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + '@babel/generator@7.25.0': + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.22.5': @@ -1475,26 +1242,14 @@ packages: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.23.0': resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.23.0': resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} @@ -1549,28 +1304,12 @@ packages: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.22.5': - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.23.4': - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.1': resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.22.15': - resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.22.20': @@ -1613,23 +1352,13 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.22.16': - resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.23.9': - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.24.4': resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + '@babel/parser@7.25.3': + resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} engines: {node: '>=6.0.0'} hasBin: true @@ -2100,10 +1829,6 @@ packages: resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} - '@babel/template@7.22.15': - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - '@babel/template@7.23.9': resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} engines: {node: '>=6.9.0'} @@ -2116,40 +1841,24 @@ packages: resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.23.9': - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} '@babel/traverse@7.24.1': resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.22.17': - resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.22.19': - resolution: {integrity: sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.23.6': - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.23.9': - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + '@babel/traverse@7.25.3': + resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} engines: {node: '>=6.9.0'} '@babel/types@7.24.0': resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} '@bbob/core@3.0.2': @@ -2173,188 +1882,188 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@ckeditor/ckeditor5-adapter-ckfinder@42.0.1': - resolution: {integrity: sha512-dfyULdo7vQDnFJWZfm0Qv6scW2TVnWLPEVo5r1D9knZbDC4zWFCmr0GeSjMHYKbtstPJzQ1QiVWKMFhWPvOeLg==} + '@ckeditor/ckeditor5-adapter-ckfinder@42.0.2': + resolution: {integrity: sha512-nX624WYyyJh6BGGy7jNOlEyf+Kv95VWHKlqn39HLTLKlONBp3zBhAtN9rd0gqU5EM6FgPQ+RjOtQinuto0B6oQ==} - '@ckeditor/ckeditor5-alignment@42.0.1': - resolution: {integrity: sha512-vy0SyqB1+SQ5ADZyyqZy4I4kD1SEVigFuCA+77IyaL9eDWvwZswwp+YuvnLRe3pZgPhCus1QMbxgbalhxnbhRg==} + '@ckeditor/ckeditor5-alignment@42.0.2': + resolution: {integrity: sha512-g6I0f5Ko7tckHrKYyZhNQL3dGHTcMbjypIfEkk3SAv68X4bDKLImVUJ1L6y0aZnGNoI40cMr0byEyln5rOq67Q==} - '@ckeditor/ckeditor5-autoformat@42.0.1': - resolution: {integrity: sha512-jJvtrbgtvbB4gcgWnAXIyHpb51i3dxY84Uwoc1KIRJyBeCX2vSoXKZ9frnQZp1r5r/MZfW0esuqyMHDI9R+TJQ==} + '@ckeditor/ckeditor5-autoformat@42.0.2': + resolution: {integrity: sha512-tnMdNc8VJ4y4wqbkSAbBGRiUukByOo1nBqyvzYS+SZ2Wzo67OmzKybvqz60PFYIbPAQJa0/uFkvgd55c+VTaqg==} - '@ckeditor/ckeditor5-autosave@42.0.1': - resolution: {integrity: sha512-ogKO/b+Ckj1yJTkuhCUnsVXkgHztKcU8K8zmpN9+nZR+BHqPEsrw7zEYdQm6LQi3tARdEvDvItqehcGDi9MA8Q==} + '@ckeditor/ckeditor5-autosave@42.0.2': + resolution: {integrity: sha512-QIsftrJ6LjJrmUTDfJYpBKy9DJ79ltt2pMHtb8DhoyugGZUup40pFvMrt/4/UuQRm64jS/IjhwWXkSMg4PejJw==} - '@ckeditor/ckeditor5-basic-styles@42.0.1': - resolution: {integrity: sha512-p//VnlaacNeMTOmWdSFQomrTsteXRACkwd8Fr1qTu/m8FT4x8o0S2+UMiIh+H2fkUz9kqfy0lm/BE/RKsBOjng==} + '@ckeditor/ckeditor5-basic-styles@42.0.2': + resolution: {integrity: sha512-LT0Kk1K30z/YhI48QBDa69tjU1G2ljSKi5pU5pfiSBLhMl1ShLmXIAy6cEHnijHS0mte8FGwhiGXmNB/jAZ7Iw==} - '@ckeditor/ckeditor5-block-quote@42.0.1': - resolution: {integrity: sha512-pSh752pye2vp68DAnrUg+Evi1FlxbBK2zUjt2xT92WOrqpow9b1LYdmnZkeJayt271+ot1rowyNEm8v+uOZBHw==} + '@ckeditor/ckeditor5-block-quote@42.0.2': + resolution: {integrity: sha512-xfX+tdAhn7WPHNNZR5Wkjl+OnmbNlEOVVZCL2iAjfswf4r3CglLnJOa529FO+4MyNcwkP+joQ3iVBclZNbETLw==} - '@ckeditor/ckeditor5-ckbox@42.0.1': - resolution: {integrity: sha512-1URxhD1ejokpsTUyD+s8aoZkejBh84402sfwLTXnF6oF7Fd6XpFwkW7u3kRQVgkP88d+BeT+SXUw9230IODD5w==} + '@ckeditor/ckeditor5-ckbox@42.0.2': + resolution: {integrity: sha512-RvCUphlhrTuGBy78kEOFJvdvmP3o7ajibubOOpVfUMz1V8BbTmmx1+XaveCDxznkwiCLUwqZplWZnpPoEABj2w==} - '@ckeditor/ckeditor5-ckfinder@42.0.1': - resolution: {integrity: sha512-tZx2UNBblgRhJEP+ZylAOsp8DT8lvmpjxnfQWgh9RKhzrH13b4cIjN+7lbDNVLtuniCz0aSR7dHnWBrl9TxUOg==} + '@ckeditor/ckeditor5-ckfinder@42.0.2': + resolution: {integrity: sha512-3lkMF+9Z3R1OUfwZJdORlRDgPSyR9Be57zgizpevpKTenxrZ+UU33ib/kvK8LXVDOzz3qp7UyCucLfY1KNXCzA==} - '@ckeditor/ckeditor5-clipboard@42.0.1': - resolution: {integrity: sha512-+NN8dqdskyrtkjdv5NXZqO1VvKlGvQh1+kC/PqAuBBB/mGNVHBXnUmV3RoIFHBv3C7YolW3ltwjQduz71Ay25A==} + '@ckeditor/ckeditor5-clipboard@42.0.2': + resolution: {integrity: sha512-x76SjAhaguwVQtJSgz62q96RsJsw0eSM7ZnuUqLjMMzO+hq2hAj7ZIJNPcA46ZyDR6LDQzH760IumSz0xlHn9w==} - '@ckeditor/ckeditor5-cloud-services@42.0.1': - resolution: {integrity: sha512-nzwJKgWR0SFXV1b4pkxnOZelk2aXWxiaAmMrF4jZV8F1pTVsU3/SKxBbqhZxQZFImi9xhAGdka6QrIwEquIq1g==} + '@ckeditor/ckeditor5-cloud-services@42.0.2': + resolution: {integrity: sha512-oNdtgD/suEh5nAndXsjik8HgRDk095EGxkmrMO+Z3gbOit28fvTDL6bbUOQvenoNNWa7RXLZMbfyiTMuNH+X8Q==} - '@ckeditor/ckeditor5-code-block@42.0.1': - resolution: {integrity: sha512-Ix35lRf/gS0sLPS3QawZYfnyT8TtEwTW0kfg/lhx7z+lTXmjlR7cAVAeIDrP3uQnASEydyIWHkqlzp9le0HjGA==} + '@ckeditor/ckeditor5-code-block@42.0.2': + resolution: {integrity: sha512-NFGn+350VS6/UNhHm9CurOLm3ZiXFUCO/SgKRILPKZ82Wh2GQqocs5O3yvvo1WQ9jA2DEwjfN0TgOpwgVOZQPQ==} - '@ckeditor/ckeditor5-core@42.0.1': - resolution: {integrity: sha512-a/Lftjxi/jFiBM8l9/VI7qNqiTgGSqed4FGua1RFfE35v6goOsfFhIPkzT9sTXJL5ZDj7Zjrh/RrOc3jKzjdPA==} + '@ckeditor/ckeditor5-core@42.0.2': + resolution: {integrity: sha512-LkNx1Qpk/gwh0wYkl4FdZfi1N2G5Gmp026sVp301boyE9sSVeR3YxcSdKXfsr2HII+7EdJHxMswTvnd/L+IdSg==} - '@ckeditor/ckeditor5-dev-translations@40.3.1': - resolution: {integrity: sha512-PgGVIz2seENB8RlM3GSPvsqMCiHAll4r4F4xXjmfSEZY+H7OK9ImiXbhpV+jzi2A3eoyJ49VZyaIGx6edM8jew==} + '@ckeditor/ckeditor5-dev-translations@42.0.0': + resolution: {integrity: sha512-qdme0GXrefAH+7hpBNRnU7nxXsUWvrLrc/AnbsWr+4pjsoU4NXHHdjLqJdlQE0u371LlYjj+HYZ/V50NdeHzIw==} engines: {node: '>=18.0.0', npm: '>=5.7.1'} - '@ckeditor/ckeditor5-dev-utils@40.3.1': - resolution: {integrity: sha512-hTEdh0TbSEQmlL0d1inZ8sRfiyDEdoJ0shZKridCw/Egs76lL6WoPkMUkGIl9ApLGIs48S+xx0OMBDzvzrrMpQ==} + '@ckeditor/ckeditor5-dev-utils@42.0.0': + resolution: {integrity: sha512-zfzTnKN6uZmRK+4uXgVY5eWajxeXGirMK2Yac8HsQVankTfQkhA1UZCeJMFOWJIU3SUqbEVTL9Rg5XvieZjc7Q==} engines: {node: '>=18.0.0', npm: '>=5.7.1'} - '@ckeditor/ckeditor5-easy-image@42.0.1': - resolution: {integrity: sha512-l+1Pa7K5DzCL6d5+3nwDPYEUxC92pkfRQGn+LDdfjXg3kCyRexP5FasFrRCwuNmZRjws+B8gzLoTS1bRCrWB4A==} + '@ckeditor/ckeditor5-easy-image@42.0.2': + resolution: {integrity: sha512-JYVpX6lRVRve8roROx5y6nsixLXLuVwIokBLoo+usS313xeeZvjoLrxGTeRuyyVbK3BFPE+zqyXsgqGs1Q0stg==} - '@ckeditor/ckeditor5-editor-balloon@42.0.1': - resolution: {integrity: sha512-gZ8rFF7NbYUsNfHY4I2QYbHvfoQiGu1puzflZ7vPEiu/q09E8W5TtYwRTaWDXfIwLP4RbpXBKb4xnArThdrFqw==} + '@ckeditor/ckeditor5-editor-balloon@42.0.2': + resolution: {integrity: sha512-NXTVQ3aBW8OirKgv8PJvjSDDbl39JGlnS/W+/LRwUlOgHVVWHVSMMqY52AhP90TzP6xfbFYBYX8n13EB6o/4Bw==} - '@ckeditor/ckeditor5-editor-classic@42.0.1': - resolution: {integrity: sha512-WASM6IXZED1uTvbWtLAgkga9JCVITvWGgDVAJgAYD6+7a5F2iEqxdegoV4duSr0qWhhzFqeRpey8mLrUi9VYwg==} + '@ckeditor/ckeditor5-editor-classic@42.0.2': + resolution: {integrity: sha512-K9+154AP/OpxDn6702772QCiT830lAQXsiUty1Z35MM3hVS5quwkuxS6V0NjKxx0AcqUmmgdXoFxx6v4mj3R7g==} - '@ckeditor/ckeditor5-editor-decoupled@42.0.1': - resolution: {integrity: sha512-IR/ymKv813b8lVcFtKA6jGBvSTyc8UMOr/5yTCmvUYGBYjD39wv4QQpj4AClbbVL8CPNxUAToexLxelhjc1cgQ==} + '@ckeditor/ckeditor5-editor-decoupled@42.0.2': + resolution: {integrity: sha512-ANhlpcZXV+nZl/f9o+wS5vqc+Va5K4LnYA0F/pJNTNlighVCa1nGQX11tRGm48vItpNlgQxty+p86NHa+7YrLw==} - '@ckeditor/ckeditor5-editor-inline@42.0.1': - resolution: {integrity: sha512-A2qd/hcKpeIxRubyWLK2TZhPPCvZsDJerySSAzw6fFpAgedlBV2Lz048tV3AJholhwlFsITuaNyna/dTVE6/qg==} + '@ckeditor/ckeditor5-editor-inline@42.0.2': + resolution: {integrity: sha512-gWngpGE/6JDCyKpKTX7iIgFaxrDPzocZt56p1JmBJCNpVQb4sGoZs94uUg7rxlVo8t3PDH+foL49gSdBKYS9uw==} - '@ckeditor/ckeditor5-editor-multi-root@42.0.1': - resolution: {integrity: sha512-IDU22zezBwM40/ofeAloHGzbghQxPlKW21h6XYs1RmKJLzq87BuxiZ4KY8hJkg9asdZrw4gU7YS20570QvjBjQ==} + '@ckeditor/ckeditor5-editor-multi-root@42.0.2': + resolution: {integrity: sha512-1Cv4WGB75KoWZWewCOnHP4s4HGFXKt3BajvDkN8LXS6CtaIPDkH18okY/ivH/Idhu1pT9k2bjzCfR7W4EhtRJg==} - '@ckeditor/ckeditor5-engine@42.0.1': - resolution: {integrity: sha512-hI7qVWVYYcfCeJ846Kjbbam4VnYYG93XDcL2SXKcyCgtuiJPiQroL7tvfSKTvBn2KZR2SwpHFfPkm5QXrZP+Xg==} + '@ckeditor/ckeditor5-engine@42.0.2': + resolution: {integrity: sha512-mI4+X6Z0ihnyAKzka5RjoUgZoaRDckMniN8LLYNum3ewz+KWIVjtHn6NBrqEqw24BpwYfSVEPL/NdgA6xl93Jw==} - '@ckeditor/ckeditor5-enter@42.0.1': - resolution: {integrity: sha512-HuROcF33ekLzR8Uuc7tkonZqxEcpQ37pkd1Rx7V6JCt60rapm7cpELKl3nxDDyPUh+cWZ2nM6iQh/vsvXZkSKw==} + '@ckeditor/ckeditor5-enter@42.0.2': + resolution: {integrity: sha512-pzVXQPdBgskiqVpCG/yxliuEXPECCI3GJ/OF5wXs2GQ04IcqBz5FsazUtSLS5nnA4e3YpcdzzEC0Kn1ASdl7QQ==} - '@ckeditor/ckeditor5-essentials@42.0.1': - resolution: {integrity: sha512-+hjE9KMCIsmajNmWVdUYpx27CogUry1g674VJ6he9QaFqrVsfApihZD98Zgl1QfoDdaCFnBpI9W/PE+2M1veIw==} + '@ckeditor/ckeditor5-essentials@42.0.2': + resolution: {integrity: sha512-4qhW/7zm69KHnotKEs05YB6YTD6WB6QWJ6U44V6dFGJUUUmYN1fOt9ri6lU8snUVhJrU0C9IuGpVkb8Aby79GQ==} - '@ckeditor/ckeditor5-find-and-replace@42.0.1': - resolution: {integrity: sha512-GhjbzZIJ6aVfbQyCfru6jGTv1A3tmNcWs/YncSewZFb1Xxgk9EkfPcynB+hG3X8X38bX8ggvbxoicRFGKqzLHg==} + '@ckeditor/ckeditor5-find-and-replace@42.0.2': + resolution: {integrity: sha512-9Fc5nKUhDtivHxGoY5nEvwjqUyvMwcNs1Xo6nt9aXeG0gd4mrCdUQaQfRIlcycLmeVD1MgKfWh7sOv+EtuYFRA==} - '@ckeditor/ckeditor5-font@42.0.1': - resolution: {integrity: sha512-5TEbQvvrQn45S+08ancAFFecv8BWvC2L4nIxPKKYikOsFNScE6C5nxrr/Xaa98ZEgHowp48z+yZxLjTDwOZctQ==} + '@ckeditor/ckeditor5-font@42.0.2': + resolution: {integrity: sha512-Soj1auf82Zz6y56qKf6nV6RSjNPENZm9vpkJ9jhyQ4pMh6YvQ7EkzbOwPCoskXm+ab8EAuH+bjS0n5lewN5i7Q==} - '@ckeditor/ckeditor5-heading@42.0.1': - resolution: {integrity: sha512-Uf6IlamcgnZn3VkliP4+qWxEFKdaZNGfCntU08oW4b0Wf3i3P7lbBz73ZQ1sUF79QWZVlZiMIuQNL5RjAc93eA==} + '@ckeditor/ckeditor5-heading@42.0.2': + resolution: {integrity: sha512-1lwxsxzJRikSerwhH1By9FlAO2EQhcrt3xnpxBFME3pS2Y6tbkHj81W5Lu2cf+0ew5Bzcp5uqTvaArRtVssY1A==} - '@ckeditor/ckeditor5-highlight@42.0.1': - resolution: {integrity: sha512-mUvnfdX6HYa7kbsfDILLCX32Ia4lFDfOQm/mx5gR17hxbv//u55jZESKwvwNwUBoYXzln/hg2ifqoPFTFuC/aA==} + '@ckeditor/ckeditor5-highlight@42.0.2': + resolution: {integrity: sha512-I/qVqC1YS6Hfg1dZjP665NU2fIx5Dk4Rjq2ku7yxQrsmG+rle2xrEzXF1BsaBeK6ko+fX7JaP86dTvywnnOeaw==} - '@ckeditor/ckeditor5-horizontal-line@42.0.1': - resolution: {integrity: sha512-nw99pQ3dgm9G/M88UDtcvVUy3Xb6+baLz1IvanfItgVrH8FFObICFZjNJWxd/H4xtbQzMz1Ty6w8ZocPWja9sg==} + '@ckeditor/ckeditor5-horizontal-line@42.0.2': + resolution: {integrity: sha512-zXnK2k5F5lhbLVwHzyURPMRGc8pc1YPz8fYXmz1pf/JG/EgXGGuUlczkpzegBUb9MctFgZbs09xIkTkVBQZmNw==} - '@ckeditor/ckeditor5-html-embed@42.0.1': - resolution: {integrity: sha512-MEim8XV+75aEnDGRkrft15oURiyVEOvHo9h+7cFeE3hgI9+wjk/V3arHQIAUkZTT3XpRv8LQKjBC1hmXTz7YyA==} + '@ckeditor/ckeditor5-html-embed@42.0.2': + resolution: {integrity: sha512-aqCV9vQJd6KiYsTEW6UlWtyMTZgXI2oHK7/1p8WUagabHU1ZFT+jkExC8QG9n0M76Sq9TIynqBlfl4OOijT6NQ==} - '@ckeditor/ckeditor5-html-support@42.0.1': - resolution: {integrity: sha512-RxWl+RyfBSpa9setDWmtoF3ertzVOmaLi7Aw7xnyn71jV+S3aCMlZphiv7m9KENNy46FOc+Nzct5sScnJ+EpVg==} + '@ckeditor/ckeditor5-html-support@42.0.2': + resolution: {integrity: sha512-z+Tg/jOf9+wzCo/NywkuHPGfOnKHfSr0hvkGjrq8b2OU9B1nJI34VTjJWSFH5NfLpn3tZo2dy3EcaoN9B7rSHA==} - '@ckeditor/ckeditor5-image@42.0.1': - resolution: {integrity: sha512-O1u27JxByLNgZpmwP3up6lh48IU89w/7rMvd9WByQCyZpUPTT2J/4Mvjlimq1AMt61qmzx08TdcfhI+8aRhBvA==} + '@ckeditor/ckeditor5-image@42.0.2': + resolution: {integrity: sha512-RH1r10rsnEFSBNBXe3d02J6JDvoLKxwz/KCvC/EoOR4UEKDe0FNodt3+VZrb0JNqkBUIxqdtvEobXb6YmGQaDQ==} - '@ckeditor/ckeditor5-indent@42.0.1': - resolution: {integrity: sha512-aT/ui69ncvXFv/9TJqe3TUegppH62b2E9XaQqfwCmm1jZ5BDEG8oYnJI1htnsnmQSOXqye7m5276F+47nrN42w==} + '@ckeditor/ckeditor5-indent@42.0.2': + resolution: {integrity: sha512-qXVXqvflW8kKa7odjiSTrQtj75C5opmnGUyrM+37f7CC8OmrcjXJ5GgrFnKwHyny9YHtvQyyN+GCuzuir6a9eA==} '@ckeditor/ckeditor5-inspector@4.1.0': resolution: {integrity: sha512-yKoIFpaSVQQIhgFEyoltwG40OSsWX5psYdYvNxW84nfxgrs90DJrbMQDtdchVZNMXBu6CkJfPiPG0WBLU9su3g==} engines: {node: '>=14.0.0', npm: '>=5.7.1'} - '@ckeditor/ckeditor5-language@42.0.1': - resolution: {integrity: sha512-iWmfEySQqDzNT8VN7qh8yr8tzUjrUwjYuYV2yvggNHPMo66JoRGsJwwZDYcdx1tOzIhcxOtZnQLK3v34k0gNQg==} + '@ckeditor/ckeditor5-language@42.0.2': + resolution: {integrity: sha512-s0pMdNxuE+kBCFiop5Lgv/UsYAYLKCENesMXVIRrxI73GRjwJXIq5f/5a7xwvfmH3/TQT5GMrfNmf5EeYo5NHA==} - '@ckeditor/ckeditor5-link@42.0.1': - resolution: {integrity: sha512-SaLYdmAknaMgX9ABxafMUmJ7a42IgKZQU58+wwwD+gWmaXt/vmWSCSbe1q6+e49UejnBMC4NCDC6YaQWAiTrIw==} + '@ckeditor/ckeditor5-link@42.0.2': + resolution: {integrity: sha512-KySX11v1RyimZyc4u3AF6a/bEvA3gQg/krRsrzBbMIadtC1WN/C7w7XzjmYvx8Ui0SsH/ChBu16SxmRKO4HuTA==} - '@ckeditor/ckeditor5-list@42.0.1': - resolution: {integrity: sha512-yEzFuO28msXm8I65lpF/D6eWLDK6ZsWnKsYDcQI45QlsVGxrs9r0t4mJzmHv26lN4p4/2pv5CPM1w1+ovvC6Ww==} + '@ckeditor/ckeditor5-list@42.0.2': + resolution: {integrity: sha512-NTNDb01QDyjDZis8nyOsvgSNwy6YniulGDZdyeulhmFy6zyHG0GFeYA0kAyW6/bnniWyW9cpfUrAK9KTLuql4A==} - '@ckeditor/ckeditor5-markdown-gfm@42.0.1': - resolution: {integrity: sha512-P2ihM9c3cVDeCdrVk3JoTmG3ApJZgbYy1Iag1rcoLyVW185nn4H3rkPBVSVFfa1+B9lw0Oe50YcPv67mIWe8VQ==} + '@ckeditor/ckeditor5-markdown-gfm@42.0.2': + resolution: {integrity: sha512-mh81YHQqVF0ZVSgd7hbO3EzuM78zIhwwZiiVsJ68e4aCfpYjc3Ni1NpyORj+tian743PmFr7WAUqIePdNPmQEg==} - '@ckeditor/ckeditor5-media-embed@42.0.1': - resolution: {integrity: sha512-OnaZb8LdXKS7jyWRSInXFtA/u+t9KcSJAO68MxRnI1bkUdegudaj4JzXX7/ifIocgFTdG+QlG+v40PAUfXYTkQ==} + '@ckeditor/ckeditor5-media-embed@42.0.2': + resolution: {integrity: sha512-iXGcfgOm0IWa600ln5YeSssg7Sew6Lf1z9ziTxsQsmforPIqXgZQEvdLoo0tABddSRQZI+yQZnRnwrus9sZXIA==} - '@ckeditor/ckeditor5-mention@42.0.1': - resolution: {integrity: sha512-lrRSMHtbo6kuKzfoUk7D5hb7IQaFnDtTsePk7k7kkg22T0yCzxeJwmd314dAZfcNf5D49izvg1RucpquJ6XS4g==} + '@ckeditor/ckeditor5-mention@42.0.2': + resolution: {integrity: sha512-81MYULfB7bHDb5Y7saIZMkNVG1BJV/ir5BwIDuuXwGXLNVX++uMTK4ryAItYToiSFN8/NBms7JFXPrRhL/zbOw==} - '@ckeditor/ckeditor5-minimap@42.0.1': - resolution: {integrity: sha512-OGdFguNeEVUh8pUF0VCAEkbM5QIiQJW9KPWc+wLJyhSMnLV4J9abI1vBalTD/C/obD1g/gKtGu3jhxNk1YMEOg==} + '@ckeditor/ckeditor5-minimap@42.0.2': + resolution: {integrity: sha512-dOBT6bS/7tREFmpRCD4XwOEmoW4p7ZV1Pp3tA/KYQ++2BAgI/O/Yeww7nlhsKhal4r74v459hgihI/SnlfqBQA==} - '@ckeditor/ckeditor5-page-break@42.0.1': - resolution: {integrity: sha512-bCRTEh2giOIidDjjBI+xK8TJ0QvXLtahDEV7MmecAeXu1SAk2FpECl60BUMl+/DQcaK3XGHsLZCMZsSdCXGqbQ==} + '@ckeditor/ckeditor5-page-break@42.0.2': + resolution: {integrity: sha512-h6Wb0fWsl4a0MyU8W3F4Yku/1CWnR6tQrcMapn0sHB9W/HAvHLQIJGdsYh+a1W6QzMIjpVAqjT4mxQ1rU86RkQ==} - '@ckeditor/ckeditor5-paragraph@42.0.1': - resolution: {integrity: sha512-rxGX+vnrxUGpTXZQSIO5XBP2Cz8CaYyufLF8Ad4fTpT6VT++BAczI0r2ij5SZLK7iCKQfHBrzz1BvatJmxjr5Q==} + '@ckeditor/ckeditor5-paragraph@42.0.2': + resolution: {integrity: sha512-feI7Rw76uPbPmoFeVEPpKdPTOjdlccpWabhfrimgT08rECLa7ErFw2oRZVmnx5+kjX+NAUeD9kaUZUUkNNP0wg==} - '@ckeditor/ckeditor5-paste-from-office@42.0.1': - resolution: {integrity: sha512-OKeWTHPrt7Yjp+rzZomxYmhEqZRQmGy+YGkWCdnfy2CH4ypsQVLI07hZazuZ8ZNVZ+/P7gxD7m+1y6EOj3SC5w==} + '@ckeditor/ckeditor5-paste-from-office@42.0.2': + resolution: {integrity: sha512-9K54E44rEjvLqWKRRHeifOlb1bICKzzX8gOv/i90sFQfMeQphA6qEn3WJZNQY4NY9Uwhu3kF/gh3/dqlcBhsvw==} - '@ckeditor/ckeditor5-remove-format@42.0.1': - resolution: {integrity: sha512-j1VpxnMRqSEDr2nzY/JGjvd+wYFqw2VJrTLA/2hmkH40BhdmCw8+t8AFLUNUPqBE/vGTHbMVvmf4vRhy/nM2Rg==} + '@ckeditor/ckeditor5-remove-format@42.0.2': + resolution: {integrity: sha512-YIyKibU44Jt6P9qu3WGPjUUh/pb5dvexeE1XG6f5JNtVlZCy3sUI+BDytzqWI68/coOHBKYkKSDOEQdzw83PdA==} - '@ckeditor/ckeditor5-restricted-editing@42.0.1': - resolution: {integrity: sha512-lgLucIp20Z6P6sUX1sH9fQiqbGQ0t/yBNoMhi340T9ejBjIfRQ2sJyvUelInD5XICrwdU29jPBcGD0VqWBbFBw==} + '@ckeditor/ckeditor5-restricted-editing@42.0.2': + resolution: {integrity: sha512-tfnEE6ieR2UhjZ9zoDNfXIMAMy2FWoajASKffdtpTMBjkVKzM+isg8j0hEkWgiQqCsJYVWt0314nPZrm5EUIfA==} - '@ckeditor/ckeditor5-select-all@42.0.1': - resolution: {integrity: sha512-1PymHaP/0lEoTVrxrNzCY/36QsKqV/mKcXm5zwNwRdLgY8GB2tcu75YthubG8sVHNR893IMG4FYlGS/a1exwIQ==} + '@ckeditor/ckeditor5-select-all@42.0.2': + resolution: {integrity: sha512-eqLhxmsxDQ8s+Op4f0OoXbN9vwz0hekE1HxsClXIsqwhjsO2o/HYcyhIzR9lPgmi4bVf8uy8T9oyWQNRLv4S9w==} - '@ckeditor/ckeditor5-show-blocks@42.0.1': - resolution: {integrity: sha512-mdmytIO/GslWrCt8Cubt2TsHOogio+/0lTjk76LtPIJn+AUEI4xYhPIZfFOHbxqzjVx2tx9g49Sr+S/SA2Ag9A==} + '@ckeditor/ckeditor5-show-blocks@42.0.2': + resolution: {integrity: sha512-CFYJN3gyiWwJ1mDonzIktRL/A+WONZuyCptELqlU51RRCwbG7eSMtu2Eyd+Q463zYbOKZcdr5uNvlWuRpSsalw==} - '@ckeditor/ckeditor5-source-editing@42.0.1': - resolution: {integrity: sha512-6b5ujT5smdpB+2rZbGM7Isqgevs/any+PsbEtbBT7dc9NkkPI/2YH+o4a5FLf38c7fDxGCV4Ob7kwOPStkNAIA==} + '@ckeditor/ckeditor5-source-editing@42.0.2': + resolution: {integrity: sha512-lo/ZmBeAoWu9j0qfuUVIpc2QzZmcrYZ2enloz2mL22DCn3eP8IstE7gSmZlQ/DQxcPC5Sf2uC0l9IurBAP9+pg==} - '@ckeditor/ckeditor5-special-characters@42.0.1': - resolution: {integrity: sha512-irWFRCpZODtB1ui3Wm214Es6jxFNDZn/e1mbhGf5DGOGEQCLe8aAJc68FDKI3hl8cQlXxDTSch1RFvUiuNaBIA==} + '@ckeditor/ckeditor5-special-characters@42.0.2': + resolution: {integrity: sha512-B2E9thXW0Ej1istiResH6987g+REnX18aoxW4uXG+PHDrYWjsV4fClEnjWdkO/O0A3yOoNc4LYAbGSo7z0g/1g==} - '@ckeditor/ckeditor5-style@42.0.1': - resolution: {integrity: sha512-JVO8Iq9j15iABpHTt24T8KsdDf2KxVFe7gg0ooowlZB7CmmYVCqKBGnnMemqM+aQk3qfXPUgNA1G3v259MHs9g==} + '@ckeditor/ckeditor5-style@42.0.2': + resolution: {integrity: sha512-vq1GSeOtZm00W4FC6MgqukJbdDE394Sh7ID6634gKmdknbxOBvNcF0XUdAu+kWtJzTjYVrC4+oPYpS5C+odidQ==} - '@ckeditor/ckeditor5-table@42.0.1': - resolution: {integrity: sha512-xITEPFvV05h+sNbs2jqLSUu6UUat5DCoyt9WIbqIYC8hwJrGGAcuwldyfL0e+hrUAbHHkL1K9oRlMmhKuw6OEA==} + '@ckeditor/ckeditor5-table@42.0.2': + resolution: {integrity: sha512-fFMXbQCa7UR4aAmwVkKzDcRmKCd2YwE1iNLeGWJz7tz1c+hGeadej0aHgUxBw+hHu6DhS9AyvtwmNweQpc3PnQ==} - '@ckeditor/ckeditor5-theme-lark@42.0.1': - resolution: {integrity: sha512-EZfxuFpBro6VTobQytGkvMQl/H8PymANTQrnICwLEKd81ZM5yJQTeolF/VS+QFlDqx1gXUESNJt8NqFytm1cww==} + '@ckeditor/ckeditor5-theme-lark@42.0.2': + resolution: {integrity: sha512-t+/JVtK+lWzfLywsZX7eE8tfyBSnsaTsxeo84ZbSU9M1Vts5FN/5JExiY89VjsT8m84VAufbG+fDGjQpiYzsyg==} - '@ckeditor/ckeditor5-typing@42.0.1': - resolution: {integrity: sha512-gLqp27CiLZe/ycKgJotqQ5Ta1KX3aSlZMYmnHurmOmkvjXB76syM990KlPiDAkff2QyXE1qgg0uKLgT4CbrKNg==} + '@ckeditor/ckeditor5-typing@42.0.2': + resolution: {integrity: sha512-xwGazKjCJOQViGnk/Q0yVg98mc0aDJHvx6FsCFRF6e7B8WiMq8rPQjfO63TYOnUSOIkQJerbAv+hrsBS8XdxaQ==} - '@ckeditor/ckeditor5-ui@42.0.1': - resolution: {integrity: sha512-3OF/nm/pc8rwH65+GYET5Xj5qk53aVXnBi/DBVRQZBdhuAGlMQuy+7E2WU6vO7G24w1LOJUSPpeBJt/MXs6z2w==} + '@ckeditor/ckeditor5-ui@42.0.2': + resolution: {integrity: sha512-Lrej61+xTTqIJSlA9FfqwpEClVoRabM3na8MDiWjAzneQkPgFtw1WTgUKvxNaI+eMXCmT/HVNj/RCg9vqt0pug==} - '@ckeditor/ckeditor5-undo@42.0.1': - resolution: {integrity: sha512-3tIj7JLtKFMxiJrfZ7IrBXBzBe0dtP+EcztjzgQbndS1PaAldErH3g7z55avwp6R3hum0wFnqgvQRIgSUlYONQ==} + '@ckeditor/ckeditor5-undo@42.0.2': + resolution: {integrity: sha512-OpfdYnADY2MM8nWN5M13BEDDnwL15YHUYUpgMnydgJObZzSnePqgWQSFaBAY5j24eze0a8gyGgnOE5jV6VBm1Q==} - '@ckeditor/ckeditor5-upload@42.0.1': - resolution: {integrity: sha512-0tn4ltiz0cTmlMPFPpJkDzi5+jVkPbtv9R9OHGDFgDW0uyN93UvnW0xPpoXKn/R/qRJf2gnPK95QlUaeiz33+w==} + '@ckeditor/ckeditor5-upload@42.0.2': + resolution: {integrity: sha512-QD6PR1ZurGQv0gULG4hNiaFMO306qM9Gin2BbICkZuJ+IFKd7nQ+mp7ZCbgPgRYtSkeUyHjSzNR4+wIA2nPVEg==} - '@ckeditor/ckeditor5-utils@42.0.1': - resolution: {integrity: sha512-gJlP8/dCfnmcgq1E30//rd5KU3EetuFx0QQqphuaeUxuJeVhRJlMvva0H/dZOv82uMrTBgspxYsRrkjn7XnVxQ==} + '@ckeditor/ckeditor5-utils@42.0.2': + resolution: {integrity: sha512-z4lNVoVf4cyK6cugMABNgMtYDiIK+0eQwYFtr45DhPK283RWEqrU0xwbwoqhIqeXRQ6B+9+0nC7ZIFPEdQ+iDA==} - '@ckeditor/ckeditor5-watchdog@42.0.1': - resolution: {integrity: sha512-ROfjUFky3W2u9F+6sXiT1IR9pa/odYAjT9ck/wp5W2dHum5XMIAdF4A6bEwXeBtZnpMo8+tQ1b1OZv78rZ31IA==} + '@ckeditor/ckeditor5-watchdog@42.0.2': + resolution: {integrity: sha512-0z00yqbBt/JALAD8C62LNySitQ+wBw1My43Qe2xs5VAP5tUZcziFFCc4BhMy+w6ZWUmZj2hkjSLlmx7b/vid+A==} - '@ckeditor/ckeditor5-widget@42.0.1': - resolution: {integrity: sha512-hz02QxOFw4HNmDqM6369rCZgEotsmUtHcysC1Ius6XxbPiZHLraagb2wG9Dts/80DRN//1zGbxKG61sTa/5Bog==} + '@ckeditor/ckeditor5-widget@42.0.2': + resolution: {integrity: sha512-ZRI8H+Ir7YpByUO4/kKMNJJE5WUDoICl1BitSR9QKmkG7X2fBRdDG8setm4HsUU1kkPe0aYy6HK2ajZ2g5ZkaA==} - '@ckeditor/ckeditor5-word-count@42.0.1': - resolution: {integrity: sha512-hTTCMmWTORGLj4f83DeKZC0d8K4JmOJHCCzAQypPIB1qD2n1D6VbweoVsgVOUr5fPsd5QO5jOyor2T2yHyQmyg==} + '@ckeditor/ckeditor5-word-count@42.0.2': + resolution: {integrity: sha512-jtlyA6TXnnRpaTgvYG219z5p+MRZWUBz3r5oHa79lFcMDREZH6gKztiE+hYSmiL2OSAtHi0kYWUAF/oJfpHt3g==} '@coremedia/service-agent@1.1.5': resolution: {integrity: sha512-yPdNaqvpE3W1seg6uZEPgMZSs1Ov1dRbMQxluNaYLCdU736j9j7aN/XqmjZWfDVncfVTLYNCNuIFfMS3dE/I1g==} @@ -2797,9 +2506,6 @@ packages: '@jridgewell/trace-mapping@0.3.19': resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} - '@jridgewell/trace-mapping@0.3.22': - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} - '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -3475,8 +3181,8 @@ packages: cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - ckeditor5@42.0.1: - resolution: {integrity: sha512-qgsv/eP79OKunE76mMyPP1/PPjsBkLUlmb4cR/TA5C6HGsMvrCmYhryIgvdcqnZ0k8OIre1/X50+3VWvMnJ2qQ==} + ckeditor5@42.0.2: + resolution: {integrity: sha512-SHyyJ6y/+2Mas3SMlVchsq1i9LYqF7J7EMwEUKAt+sIXBW9pbBnLVncXpIpGTQ/M8fS20NVk7dfJ2P4TyEZGew==} clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} @@ -5622,10 +5328,6 @@ packages: peerDependencies: postcss: ^8.4.31 - postcss-selector-parser@6.1.0: - resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} - engines: {node: '>=4'} - postcss-selector-parser@6.1.1: resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} engines: {node: '>=4'} @@ -6634,8 +6336,8 @@ snapshots: '@ampproject/remapping@2.2.1': dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 '@ampproject/remapping@2.3.0': dependencies: @@ -6684,14 +6386,14 @@ snapshots: dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/generator': 7.25.0 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 + '@babel/parser': 7.25.3 '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -6720,41 +6422,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.22.15': - dependencies: - '@babel/types': 7.23.9 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/generator@7.23.6': - dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - jsesc: 2.5.2 - '@babel/generator@7.24.4': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/generator@7.24.7': + '@babel/generator@7.25.0': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-annotate-as-pure@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-compilation-targets@7.23.6': dependencies: @@ -6789,7 +6477,7 @@ snapshots: '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.4 + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -6797,39 +6485,26 @@ snapshots: '@babel/helper-environment-visitor@7.22.20': {} - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - '@babel/helper-function-name@7.23.0': - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.24.0 - - '@babel/helper-function-name@7.24.7': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-hoist-variables@7.22.5': dependencies: - '@babel/types': 7.22.17 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-member-expression-to-functions@7.23.0': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-module-imports@7.22.15': dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.25.2 '@babel/helper-module-imports@7.24.3': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9)': dependencies: @@ -6851,7 +6526,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-plugin-utils@7.22.5': {} @@ -6873,29 +6548,19 @@ snapshots: '@babel/helper-simple-access@7.22.5': dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.25.2 '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 '@babel/helper-split-export-declaration@7.22.6': dependencies: - '@babel/types': 7.22.17 - - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.22.5': {} - - '@babel/helper-string-parser@7.23.4': {} + '@babel/types': 7.25.2 '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-string-parser@7.24.7': {} - - '@babel/helper-validator-identifier@7.22.15': {} + '@babel/helper-string-parser@7.24.8': {} '@babel/helper-validator-identifier@7.22.20': {} @@ -6906,40 +6571,40 @@ snapshots: '@babel/helper-wrap-function@7.22.20': dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/template': 7.24.7 + '@babel/types': 7.25.2 '@babel/helpers@7.23.9': dependencies: '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helpers@7.24.4': dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/highlight@7.22.13': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 '@babel/highlight@7.23.4': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 '@babel/highlight@7.24.2': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 @@ -6951,21 +6616,13 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.22.16': - dependencies: - '@babel/types': 7.22.17 - - '@babel/parser@7.23.9': - dependencies: - '@babel/types': 7.23.9 - '@babel/parser@7.24.4': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 - '@babel/parser@7.24.7': + '@babel/parser@7.25.3': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4)': dependencies: @@ -7556,7 +7213,7 @@ snapshots: dependencies: '@babel/core': 7.24.4 '@babel/helper-plugin-utils': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.25.2 esutils: 2.0.3 '@babel/preset-typescript@7.24.1(@babel/core@7.24.4)': @@ -7574,108 +7231,66 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.22.15': - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.24.4 - '@babel/types': 7.23.6 - '@babel/template@7.23.9': dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@babel/template@7.24.0': dependencies: '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 - '@babel/traverse@7.23.9': + '@babel/template@7.25.0': dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@babel/traverse@7.24.1': dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.25.0 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/traverse@7.24.7': + '@babel/traverse@7.25.3': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.22.17': - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.15 - to-fast-properties: 2.0.0 - - '@babel/types@7.22.19': - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@babel/types@7.23.6': - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@babel/types@7.23.9': - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - '@babel/types@7.24.0': dependencies: '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - '@babel/types@7.24.7': + '@babel/types@7.25.2': dependencies: - '@babel/helper-string-parser': 7.24.7 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 @@ -7703,70 +7318,104 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@ckeditor/ckeditor5-adapter-ckfinder@42.0.1': + '@ckeditor/ckeditor5-adapter-ckfinder@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-upload': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-alignment@42.0.1': + '@ckeditor/ckeditor5-alignment@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-autoformat@42.0.1': + '@ckeditor/ckeditor5-autoformat@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-autosave@42.0.1': + '@ckeditor/ckeditor5-autosave@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-basic-styles@42.0.1': + '@ckeditor/ckeditor5-basic-styles@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-block-quote@42.0.1': + '@ckeditor/ckeditor5-block-quote@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-enter': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-ckbox@42.0.1': + '@ckeditor/ckeditor5-ckbox@42.0.2': dependencies: + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-upload': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 blurhash: 2.0.5 - ckeditor5: 42.0.1 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-ckfinder@42.0.1': + '@ckeditor/ckeditor5-ckfinder@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-clipboard@42.0.1': + '@ckeditor/ckeditor5-clipboard@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-engine': 42.0.1 - '@ckeditor/ckeditor5-ui': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 - '@ckeditor/ckeditor5-widget': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-cloud-services@42.0.1': + '@ckeditor/ckeditor5-cloud-services@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-code-block@42.0.1': + '@ckeditor/ckeditor5-code-block@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-enter': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-core@42.0.1': + '@ckeditor/ckeditor5-core@42.0.2': dependencies: - '@ckeditor/ckeditor5-engine': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 - '@ckeditor/ckeditor5-watchdog': 42.0.1 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-watchdog': 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-dev-translations@40.3.1': + '@ckeditor/ckeditor5-dev-translations@42.0.0': dependencies: - '@babel/parser': 7.24.7 - '@babel/traverse': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/traverse': 7.25.3 chalk: 4.1.2 pofile: 1.1.4 rimraf: 3.0.2 @@ -7774,9 +7423,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-dev-utils@40.3.1(webpack@5.93.0(webpack-cli@5.1.4))': + '@ckeditor/ckeditor5-dev-utils@42.0.0(webpack@5.93.0(webpack-cli@5.1.4))': dependencies: - '@ckeditor/ckeditor5-dev-translations': 40.3.1 + '@ckeditor/ckeditor5-dev-translations': 42.0.0 chalk: 3.0.0 cli-cursor: 3.1.0 cli-spinners: 2.9.2 @@ -7803,233 +7452,367 @@ snapshots: - supports-color - webpack - '@ckeditor/ckeditor5-easy-image@42.0.1': + '@ckeditor/ckeditor5-easy-image@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-upload': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-editor-balloon@42.0.1': + '@ckeditor/ckeditor5-editor-balloon@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-editor-classic@42.0.1': + '@ckeditor/ckeditor5-editor-classic@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-editor-decoupled@42.0.1': + '@ckeditor/ckeditor5-editor-decoupled@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-editor-inline@42.0.1': + '@ckeditor/ckeditor5-editor-inline@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-editor-multi-root@42.0.1': + '@ckeditor/ckeditor5-editor-multi-root@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-engine@42.0.1': + '@ckeditor/ckeditor5-engine@42.0.2': dependencies: - '@ckeditor/ckeditor5-utils': 42.0.1 + '@ckeditor/ckeditor5-utils': 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-enter@42.0.1': + '@ckeditor/ckeditor5-enter@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-engine': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 - '@ckeditor/ckeditor5-essentials@42.0.1': + '@ckeditor/ckeditor5-essentials@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-enter': 42.0.2 + '@ckeditor/ckeditor5-select-all': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-undo': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-find-and-replace@42.0.1': + '@ckeditor/ckeditor5-find-and-replace@42.0.2': dependencies: - '@ckeditor/ckeditor5-ui': 42.0.1 - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-font@42.0.1': + '@ckeditor/ckeditor5-font@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-heading@42.0.1': + '@ckeditor/ckeditor5-heading@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-paragraph': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-highlight@42.0.1': + '@ckeditor/ckeditor5-highlight@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-horizontal-line@42.0.1': + '@ckeditor/ckeditor5-horizontal-line@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-html-embed@42.0.1': + '@ckeditor/ckeditor5-html-embed@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-html-support@42.0.1': + '@ckeditor/ckeditor5-html-support@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-enter': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-image@42.0.1': - dependencies: - '@ckeditor/ckeditor5-ui': 42.0.1 - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-image@42.0.2': + dependencies: + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-undo': 42.0.2 + '@ckeditor/ckeditor5-upload': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-indent@42.0.1': + '@ckeditor/ckeditor5-indent@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 '@ckeditor/ckeditor5-inspector@4.1.0': {} - '@ckeditor/ckeditor5-language@42.0.1': + '@ckeditor/ckeditor5-language@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-link@42.0.1': + '@ckeditor/ckeditor5-link@42.0.2': dependencies: - '@ckeditor/ckeditor5-ui': 42.0.1 - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-list@42.0.1': + '@ckeditor/ckeditor5-list@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-enter': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-markdown-gfm@42.0.1': + '@ckeditor/ckeditor5-markdown-gfm@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + ckeditor5: 42.0.2 marked: 4.0.12 turndown: 7.2.0 turndown-plugin-gfm: 1.0.2 - '@ckeditor/ckeditor5-media-embed@42.0.1': - dependencies: - '@ckeditor/ckeditor5-ui': 42.0.1 - ckeditor5: 42.0.1 - - '@ckeditor/ckeditor5-mention@42.0.1': - dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-media-embed@42.0.2': + dependencies: + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-undo': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + ckeditor5: 42.0.2 + + '@ckeditor/ckeditor5-mention@42.0.2': + dependencies: + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-minimap@42.0.1': + '@ckeditor/ckeditor5-minimap@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-page-break@42.0.1': + '@ckeditor/ckeditor5-page-break@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-paragraph@42.0.1': + '@ckeditor/ckeditor5-paragraph@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-ui': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 - '@ckeditor/ckeditor5-paste-from-office@42.0.1': + '@ckeditor/ckeditor5-paste-from-office@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-remove-format@42.0.1': + '@ckeditor/ckeditor5-remove-format@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-restricted-editing@42.0.1': + '@ckeditor/ckeditor5-restricted-editing@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-select-all@42.0.1': + '@ckeditor/ckeditor5-select-all@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-ui': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 - '@ckeditor/ckeditor5-show-blocks@42.0.1': + '@ckeditor/ckeditor5-show-blocks@42.0.2': dependencies: - '@ckeditor/ckeditor5-ui': 42.0.1 - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-source-editing@42.0.1': + '@ckeditor/ckeditor5-source-editing@42.0.2': dependencies: - '@ckeditor/ckeditor5-theme-lark': 42.0.1 - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-theme-lark': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-special-characters@42.0.1': + '@ckeditor/ckeditor5-special-characters@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 - '@ckeditor/ckeditor5-style@42.0.1': + '@ckeditor/ckeditor5-style@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-table@42.0.1': + '@ckeditor/ckeditor5-table@42.0.2': dependencies: - '@ckeditor/ckeditor5-ui': 42.0.1 - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-theme-lark@42.0.1': + '@ckeditor/ckeditor5-theme-lark@42.0.2': dependencies: - '@ckeditor/ckeditor5-ui': 42.0.1 + '@ckeditor/ckeditor5-ui': 42.0.2 - '@ckeditor/ckeditor5-typing@42.0.1': + '@ckeditor/ckeditor5-typing@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-engine': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-ui@42.0.1': + '@ckeditor/ckeditor5-ui@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 color-convert: 2.0.1 color-parse: 1.4.2 lodash-es: 4.17.21 vanilla-colorful: 0.7.2 - '@ckeditor/ckeditor5-undo@42.0.1': + '@ckeditor/ckeditor5-undo@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-engine': 42.0.1 - '@ckeditor/ckeditor5-ui': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 - '@ckeditor/ckeditor5-upload@42.0.1': + '@ckeditor/ckeditor5-upload@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 - '@ckeditor/ckeditor5-utils@42.0.1': + '@ckeditor/ckeditor5-utils@42.0.2': dependencies: lodash-es: 4.17.21 - '@ckeditor/ckeditor5-watchdog@42.0.1': + '@ckeditor/ckeditor5-watchdog@42.0.2': dependencies: lodash-es: 4.17.21 - '@ckeditor/ckeditor5-widget@42.0.1': + '@ckeditor/ckeditor5-widget@42.0.2': dependencies: - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-engine': 42.0.1 - '@ckeditor/ckeditor5-enter': 42.0.1 - '@ckeditor/ckeditor5-typing': 42.0.1 - '@ckeditor/ckeditor5-ui': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-enter': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-word-count@42.0.1': + '@ckeditor/ckeditor5-word-count@42.0.2': dependencies: - ckeditor5: 42.0.1 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + ckeditor5: 42.0.2 lodash-es: 4.17.21 '@coremedia/service-agent@1.1.5': @@ -8051,9 +7834,9 @@ snapshots: semver: 7.6.2 yargs: 16.2.0 - '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.0)': + '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.1)': dependencies: - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.1 '@discoveryjs/json-ext@0.5.7': {} @@ -8344,7 +8127,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 '@types/node': 20.14.10 chalk: 4.1.2 collect-v8-coverage: 1.0.1 @@ -8423,7 +8206,7 @@ snapshots: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -8456,11 +8239,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.22': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -8531,24 +8309,24 @@ snapshots: '@types/babel__core@7.20.0': dependencies: - '@babel/parser': 7.22.16 - '@babel/types': 7.22.17 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 '@types/babel__generator@7.6.4': dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.25.2 '@types/babel__template@7.4.1': dependencies: - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 '@types/babel__traverse@7.18.3': dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.25.2 '@types/body-parser@1.19.2': dependencies: @@ -8881,7 +8659,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -9063,8 +8841,8 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.22.19 + '@babel/template': 7.24.7 + '@babel/types': 7.25.2 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 @@ -9323,65 +9101,65 @@ snapshots: cjs-module-lexer@1.2.2: {} - ckeditor5@42.0.1: - dependencies: - '@ckeditor/ckeditor5-adapter-ckfinder': 42.0.1 - '@ckeditor/ckeditor5-alignment': 42.0.1 - '@ckeditor/ckeditor5-autoformat': 42.0.1 - '@ckeditor/ckeditor5-autosave': 42.0.1 - '@ckeditor/ckeditor5-basic-styles': 42.0.1 - '@ckeditor/ckeditor5-block-quote': 42.0.1 - '@ckeditor/ckeditor5-ckbox': 42.0.1 - '@ckeditor/ckeditor5-ckfinder': 42.0.1 - '@ckeditor/ckeditor5-clipboard': 42.0.1 - '@ckeditor/ckeditor5-cloud-services': 42.0.1 - '@ckeditor/ckeditor5-code-block': 42.0.1 - '@ckeditor/ckeditor5-core': 42.0.1 - '@ckeditor/ckeditor5-easy-image': 42.0.1 - '@ckeditor/ckeditor5-editor-balloon': 42.0.1 - '@ckeditor/ckeditor5-editor-classic': 42.0.1 - '@ckeditor/ckeditor5-editor-decoupled': 42.0.1 - '@ckeditor/ckeditor5-editor-inline': 42.0.1 - '@ckeditor/ckeditor5-editor-multi-root': 42.0.1 - '@ckeditor/ckeditor5-engine': 42.0.1 - '@ckeditor/ckeditor5-enter': 42.0.1 - '@ckeditor/ckeditor5-essentials': 42.0.1 - '@ckeditor/ckeditor5-find-and-replace': 42.0.1 - '@ckeditor/ckeditor5-font': 42.0.1 - '@ckeditor/ckeditor5-heading': 42.0.1 - '@ckeditor/ckeditor5-highlight': 42.0.1 - '@ckeditor/ckeditor5-horizontal-line': 42.0.1 - '@ckeditor/ckeditor5-html-embed': 42.0.1 - '@ckeditor/ckeditor5-html-support': 42.0.1 - '@ckeditor/ckeditor5-image': 42.0.1 - '@ckeditor/ckeditor5-indent': 42.0.1 - '@ckeditor/ckeditor5-language': 42.0.1 - '@ckeditor/ckeditor5-link': 42.0.1 - '@ckeditor/ckeditor5-list': 42.0.1 - '@ckeditor/ckeditor5-markdown-gfm': 42.0.1 - '@ckeditor/ckeditor5-media-embed': 42.0.1 - '@ckeditor/ckeditor5-mention': 42.0.1 - '@ckeditor/ckeditor5-minimap': 42.0.1 - '@ckeditor/ckeditor5-page-break': 42.0.1 - '@ckeditor/ckeditor5-paragraph': 42.0.1 - '@ckeditor/ckeditor5-paste-from-office': 42.0.1 - '@ckeditor/ckeditor5-remove-format': 42.0.1 - '@ckeditor/ckeditor5-restricted-editing': 42.0.1 - '@ckeditor/ckeditor5-select-all': 42.0.1 - '@ckeditor/ckeditor5-show-blocks': 42.0.1 - '@ckeditor/ckeditor5-source-editing': 42.0.1 - '@ckeditor/ckeditor5-special-characters': 42.0.1 - '@ckeditor/ckeditor5-style': 42.0.1 - '@ckeditor/ckeditor5-table': 42.0.1 - '@ckeditor/ckeditor5-theme-lark': 42.0.1 - '@ckeditor/ckeditor5-typing': 42.0.1 - '@ckeditor/ckeditor5-ui': 42.0.1 - '@ckeditor/ckeditor5-undo': 42.0.1 - '@ckeditor/ckeditor5-upload': 42.0.1 - '@ckeditor/ckeditor5-utils': 42.0.1 - '@ckeditor/ckeditor5-watchdog': 42.0.1 - '@ckeditor/ckeditor5-widget': 42.0.1 - '@ckeditor/ckeditor5-word-count': 42.0.1 + ckeditor5@42.0.2: + dependencies: + '@ckeditor/ckeditor5-adapter-ckfinder': 42.0.2 + '@ckeditor/ckeditor5-alignment': 42.0.2 + '@ckeditor/ckeditor5-autoformat': 42.0.2 + '@ckeditor/ckeditor5-autosave': 42.0.2 + '@ckeditor/ckeditor5-basic-styles': 42.0.2 + '@ckeditor/ckeditor5-block-quote': 42.0.2 + '@ckeditor/ckeditor5-ckbox': 42.0.2 + '@ckeditor/ckeditor5-ckfinder': 42.0.2 + '@ckeditor/ckeditor5-clipboard': 42.0.2 + '@ckeditor/ckeditor5-cloud-services': 42.0.2 + '@ckeditor/ckeditor5-code-block': 42.0.2 + '@ckeditor/ckeditor5-core': 42.0.2 + '@ckeditor/ckeditor5-easy-image': 42.0.2 + '@ckeditor/ckeditor5-editor-balloon': 42.0.2 + '@ckeditor/ckeditor5-editor-classic': 42.0.2 + '@ckeditor/ckeditor5-editor-decoupled': 42.0.2 + '@ckeditor/ckeditor5-editor-inline': 42.0.2 + '@ckeditor/ckeditor5-editor-multi-root': 42.0.2 + '@ckeditor/ckeditor5-engine': 42.0.2 + '@ckeditor/ckeditor5-enter': 42.0.2 + '@ckeditor/ckeditor5-essentials': 42.0.2 + '@ckeditor/ckeditor5-find-and-replace': 42.0.2 + '@ckeditor/ckeditor5-font': 42.0.2 + '@ckeditor/ckeditor5-heading': 42.0.2 + '@ckeditor/ckeditor5-highlight': 42.0.2 + '@ckeditor/ckeditor5-horizontal-line': 42.0.2 + '@ckeditor/ckeditor5-html-embed': 42.0.2 + '@ckeditor/ckeditor5-html-support': 42.0.2 + '@ckeditor/ckeditor5-image': 42.0.2 + '@ckeditor/ckeditor5-indent': 42.0.2 + '@ckeditor/ckeditor5-language': 42.0.2 + '@ckeditor/ckeditor5-link': 42.0.2 + '@ckeditor/ckeditor5-list': 42.0.2 + '@ckeditor/ckeditor5-markdown-gfm': 42.0.2 + '@ckeditor/ckeditor5-media-embed': 42.0.2 + '@ckeditor/ckeditor5-mention': 42.0.2 + '@ckeditor/ckeditor5-minimap': 42.0.2 + '@ckeditor/ckeditor5-page-break': 42.0.2 + '@ckeditor/ckeditor5-paragraph': 42.0.2 + '@ckeditor/ckeditor5-paste-from-office': 42.0.2 + '@ckeditor/ckeditor5-remove-format': 42.0.2 + '@ckeditor/ckeditor5-restricted-editing': 42.0.2 + '@ckeditor/ckeditor5-select-all': 42.0.2 + '@ckeditor/ckeditor5-show-blocks': 42.0.2 + '@ckeditor/ckeditor5-source-editing': 42.0.2 + '@ckeditor/ckeditor5-special-characters': 42.0.2 + '@ckeditor/ckeditor5-style': 42.0.2 + '@ckeditor/ckeditor5-table': 42.0.2 + '@ckeditor/ckeditor5-theme-lark': 42.0.2 + '@ckeditor/ckeditor5-typing': 42.0.2 + '@ckeditor/ckeditor5-ui': 42.0.2 + '@ckeditor/ckeditor5-undo': 42.0.2 + '@ckeditor/ckeditor5-upload': 42.0.2 + '@ckeditor/ckeditor5-utils': 42.0.2 + '@ckeditor/ckeditor5-watchdog': 42.0.2 + '@ckeditor/ckeditor5-widget': 42.0.2 + '@ckeditor/ckeditor5-word-count': 42.0.2 clean-stack@2.2.0: {} @@ -10246,7 +10024,7 @@ snapshots: dependencies: chalk: 4.1.2 commander: 5.1.0 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -10521,7 +10299,7 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -10555,7 +10333,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color @@ -10743,7 +10521,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/parser': 7.25.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 @@ -10753,7 +10531,7 @@ snapshots: istanbul-lib-instrument@6.0.0: dependencies: '@babel/core': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/parser': 7.25.3 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.6.2 @@ -10777,7 +10555,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.5 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: @@ -11081,10 +10859,10 @@ snapshots: jest-snapshot@29.7.0: dependencies: '@babel/core': 7.24.4 - '@babel/generator': 7.22.15 + '@babel/generator': 7.25.0 '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.24.4) - '@babel/types': 7.23.9 + '@babel/types': 7.25.2 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -11678,7 +11456,7 @@ snapshots: postcss-calc@9.0.1(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.1 postcss-value-parser: 4.2.0 postcss-colormin@6.1.0(postcss@8.4.39): @@ -11756,7 +11534,7 @@ snapshots: caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.4.39) postcss: 8.4.39 - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.1 postcss-minify-font-values@6.1.0(postcss@8.4.39): dependencies: @@ -11780,7 +11558,7 @@ snapshots: postcss-minify-selectors@6.0.4(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.1 postcss-mixins@9.0.4(postcss@8.4.39): dependencies: @@ -11813,9 +11591,9 @@ snapshots: postcss-nesting@10.2.0(postcss@8.4.39): dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.0) + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.1) postcss: 8.4.39 - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.1 postcss-normalize-charset@6.0.2(postcss@8.4.39): dependencies: @@ -11879,11 +11657,6 @@ snapshots: postcss: 8.4.39 postcss-value-parser: 4.2.0 - postcss-selector-parser@6.1.0: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - postcss-selector-parser@6.1.1: dependencies: cssesc: 3.0.0 @@ -11902,7 +11675,7 @@ snapshots: postcss-unique-selectors@6.0.4(postcss@8.4.39): dependencies: postcss: 8.4.39 - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.1 postcss-value-parser@4.2.0: {} @@ -12397,7 +12170,7 @@ snapshots: dependencies: browserslist: 4.23.2 postcss: 8.4.39 - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.1 sugarss@4.0.1(postcss@8.4.39): dependencies: @@ -12703,7 +12476,7 @@ snapshots: v8-to-istanbul@9.1.0: dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 @@ -12740,7 +12513,7 @@ snapshots: dependencies: chalk: 2.4.2 commander: 3.0.2 - debug: 4.3.4 + debug: 4.3.5 transitivePeerDependencies: - supports-color From 77ac3a045e2b38809b98606a814f0413b37a8893 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Mon, 5 Aug 2024 10:49:24 +0200 Subject: [PATCH 02/43] translated imports by script --- app/src/CKEditorInstanceFactory.ts | 3 +- app/src/createCKEditorInstance.ts | 28 +-- app/src/editors/bbCode.ts | 177 +++++++++++++----- app/src/editors/richtext.ts | 144 +++++++++----- app/src/example-data.ts | 10 +- app/src/inputExampleContents.ts | 70 ++++--- itest/src/aut/BodyCollectionWrapper.ts | 7 +- itest/src/aut/ClassicEditorWrapper.ts | 5 +- itest/src/aut/CommandCollectionWrapper.ts | 2 +- itest/src/aut/CommandWrapper.ts | 2 +- itest/src/aut/EditingControllerWrapper.ts | 3 +- itest/src/aut/EditorWrapper.ts | 3 +- itest/src/aut/ViewDocumentWrapper.ts | 3 +- itest/src/aut/ViewWrapper.ts | 4 +- .../src/aut/components/ToolbarViewWrapper.ts | 3 +- itest/src/aut/components/ViewWrapper.ts | 2 +- .../components/balloon/ButtonViewWrapper.ts | 11 +- .../balloon/ContextualBalloonWrapper.ts | 4 +- .../balloon/ImageContextualBalloonToolbar.ts | 12 +- packages/ckeditor5-bbcode/src/BBCode.ts | 5 +- .../src/BBCodeDataProcessor.ts | 4 +- packages/ckeditor5-bbcode/src/augmentation.ts | 3 +- .../ckeditor5-core-common/src/Commands.ts | 3 +- packages/ckeditor5-core-common/src/Plugins.ts | 15 +- .../src/augmentation.ts | 4 +- .../src/blocklist.ts | 2 +- .../src/blocklistChangesUtils.ts | 31 ++- .../src/blocklistCommand.ts | 6 +- .../src/blocklistMarkerUtils.ts | 7 +- .../src/blocklistediting.ts | 22 ++- .../src/blocklistui.ts | 43 +---- .../src/ui/blockedWordView.ts | 26 +-- .../src/ui/blocklistActionsView.ts | 26 ++- .../src/ui/blocklistInputView.ts | 22 +-- .../src/ContentClipboard.ts | 26 +-- .../src/ContentClipboardEditing.ts | 11 +- .../src/ContentInputDataCache.ts | 5 +- .../src/ContentMarkers.ts | 45 +++-- .../src/ContentToModelRegistry.ts | 3 +- .../src/DataToModelMechanism.ts | 51 ++--- .../src/MarkerRepositionUtil.ts | 28 ++- .../src/augmentation.ts | 4 +- .../src/converters.ts | 14 +- .../src/integrations/Undo.ts | 9 +- .../src/paste/PasteContentCommand.ts | 11 +- .../src/paste/PasteContentEditing.ts | 4 +- .../src/paste/PasteContentPlugin.ts | 4 +- .../src/paste/PasteContentUI.ts | 11 +- .../src/commands/OpenInTabCommand.ts | 6 +- .../src/Differencing.ts | 19 +- .../src/PluginIntegrationHook.ts | 5 +- .../src/augmentation.ts | 3 +- .../src/integrations/HtmlSupportImage.ts | 14 +- .../src/integrations/Image.ts | 11 +- .../RichTextDataProcessorIntegration.ts | 3 +- .../src/ContentImageClipboardPlugin.ts | 10 +- .../src/ContentImageEditingPlugin.ts | 15 +- .../src/ContentImagePlugin.ts | 3 +- .../src/ModelBoundSubscriptionPlugin.ts | 28 +-- .../src/augmentation.ts | 3 +- .../ContentImageOpenInTabUI.ts | 15 +- .../OpenImageInTabCommand.ts | 4 +- .../src/converters.ts | 44 ++--- .../config/LinkDefaultTargetsConfig.test.ts | 6 +- .../config/LinkTargetConfig.test.ts | 40 +--- .../src/augmentation.ts | 7 +- .../contentlink/ContentLinkClipboardPlugin.ts | 10 +- .../src/contentlink/ContentLinkCommandHook.ts | 31 +-- .../src/contentlink/ContentLinkViewUtils.ts | 3 +- .../src/contentlink/ContentLinks.ts | 26 +-- .../src/contentlink/InternalLinkUI.ts | 6 +- .../src/contentlink/LinkBalloonConfig.ts | 16 +- .../LinkBalloonEventListenerFix.ts | 30 +-- .../src/contentlink/LinkUserActionsPlugin.ts | 82 +++++--- .../contentlink/OpenContentInTabCommand.ts | 6 +- .../contentlink/clipboard/DropCondition.ts | 2 +- .../src/contentlink/ui/AugmentedLinkUI.ts | 3 +- .../src/contentlink/ui/CancelButtonView.ts | 6 +- .../ui/ContentLinkActionsViewExtension.ts | 28 +-- .../ui/ContentLinkFormViewExtension.ts | 59 +----- .../src/contentlink/ui/ContentLinkView.ts | 27 +-- .../contentlink/ui/ContentLinkViewFactory.ts | 10 +- .../src/contentlink/ui/CoreMediaIconView.ts | 5 +- .../src/linktarget/LinkTarget.ts | 4 +- .../LinkTargetActionsViewExtension.ts | 23 +-- .../src/linktarget/LinkTargetModelView.ts | 14 +- .../linktarget/command/LinkTargetCommand.ts | 22 ++- .../src/linktarget/config/LinkTargetConfig.ts | 13 +- .../ui/CustomLinkTargetInputFormView.ts | 34 ++-- .../src/linktarget/ui/CustomLinkTargetUI.ts | 51 ++--- .../ckeditor5-coremedia-link/src/utils.ts | 12 +- .../src/CoreMediaRichTextSupportConfig.ts | 6 +- .../src/GeneralRichTextSupport.ts | 6 +- .../src/RichTextDataFilter.ts | 21 +-- .../src/augmentation.ts | 4 +- .../compatibility/v10/DataDrivenTests.ts | 17 +- .../compatibility/v10/ToDataProcessor.test.ts | 49 +---- .../__tests__/compatibility/v10/Utils.ts | 10 +- .../src/CoreMediaRichText.ts | 9 +- .../src/CoreMediaRichTextConfig.ts | 15 +- .../src/RichTextDataProcessor.ts | 56 ++---- .../src/augmentation.ts | 4 +- .../v10/V10CoreMediaRichTextConfig.ts | 8 +- .../v10/V10RichTextDataProcessor.ts | 55 ++---- .../src/compatibility/v10/rules/Schema.ts | 4 +- .../src/integrations/LinkIntegration.ts | 11 +- .../rules/MergeTableSectionsToTableBody.ts | 14 +- .../src/rules/PreferLangAttribute.ts | 5 +- .../src/rules/ReplaceByChildren.ts | 5 +- .../src/rules/ReplaceElementByElement.ts | 5 +- .../rules/ReplaceElementByElementAndClass.ts | 5 +- .../rules/ReplaceHeadingsByElementAndClass.ts | 14 +- .../src/CoreMediaStudioEssentials.ts | 3 +- .../src/augmentation.ts | 3 +- .../src/MockBlocklistService.ts | 5 +- .../src/MockStudioIntegration.ts | 17 +- .../src/content/MockContentImportService.ts | 9 +- .../src/content/MockContentPlugin.ts | 21 +-- .../content/MockContentReferenceService.ts | 12 +- .../src/content/MockExternalContentPlugin.ts | 39 ++-- .../src/content/MockInputExamplePlugin.ts | 26 +-- .../MockRichtextConfigurationService.ts | 9 +- .../src/content/MockServiceAgentPlugin.ts | 7 +- .../src/content/MockWorkAreaService.ts | 23 +-- .../ckeditor5-core/plugincollection.ts | 20 +- .../__tests__/DataFacade.test.ts | 22 +-- .../__tests__/DataFacadeController.test.ts | 149 +++++++-------- .../src/DataControllerApi.ts | 2 +- .../ckeditor5-data-facade/src/DataFacade.ts | 12 +- .../src/DataFacadeController.ts | 50 +---- .../ckeditor5-data-facade/src/augmentation.ts | 4 +- .../__tests__/ElementProxy.test.ts | 36 +--- .../__tests__/HtmlFilter.test.ts | 36 +--- .../__tests__/Rules.test.ts | 35 +--- .../__tests__/TextProxy.test.ts | 33 ++-- .../src/ElementProxy.ts | 29 +-- .../src/HtmlFilter.ts | 36 ++-- .../src/TextProxy.ts | 4 +- .../src/DialogVisibilityPlugin.ts | 13 +- packages/ckeditor5-dom-converter/src/Rule.ts | 8 +- .../ckeditor5-font-mapper/src/FontMapper.ts | 26 +-- .../ckeditor5-font-mapper/src/FontReplacer.ts | 7 +- .../ckeditor5-font-mapper/src/augmentation.ts | 4 +- .../ckeditor5-link-common/src/FocusUtils.ts | 9 +- .../src/HasFocusables.ts | 3 +- .../src/LinkAttributes.ts | 29 +-- .../src/LinkAttributesConfig.ts | 7 +- .../ckeditor5-link-common/src/LinkCleanup.ts | 19 +- .../ckeditor5-link-common/src/augmentation.ts | 6 +- 149 files changed, 988 insertions(+), 1805 deletions(-) diff --git a/app/src/CKEditorInstanceFactory.ts b/app/src/CKEditorInstanceFactory.ts index 7629a576d..8d05f944b 100644 --- a/app/src/CKEditorInstanceFactory.ts +++ b/app/src/CKEditorInstanceFactory.ts @@ -1,4 +1,3 @@ import { ApplicationState } from "./ApplicationState"; -import { ClassicEditor } from "@ckeditor/ckeditor5-editor-classic"; - +import { ClassicEditor } from "ckeditor5"; export type CKEditorInstanceFactory = (sourceElement: HTMLElement, state: ApplicationState) => Promise; diff --git a/app/src/createCKEditorInstance.ts b/app/src/createCKEditorInstance.ts index d852c8d34..5b7abc789 100644 --- a/app/src/createCKEditorInstance.ts +++ b/app/src/createCKEditorInstance.ts @@ -1,6 +1,5 @@ import { ApplicationState } from "./ApplicationState"; -import { ClassicEditor } from "@ckeditor/ckeditor5-editor-classic"; -import { Command, Editor } from "@ckeditor/ckeditor5-core"; +import { ClassicEditor, Command, Editor } from "ckeditor5"; import { CKEditorInstanceFactory } from "./CKEditorInstanceFactory"; import { Differencing } from "@coremedia/ckeditor5-coremedia-differencing"; import { initReadOnlyToggle } from "./ReadOnlySwitch"; @@ -17,21 +16,22 @@ import { initExamplesAndBindTo } from "./example-data"; // See https://github.com/ckeditor/ckeditor5-inspector/issues/173 // eslint-disable-next-line @typescript-eslint/no-extraneous-class declare class CKEditorInspector { - static attach(editorOrConfig: Editor | Record, options?: { isCollapsed?: boolean }): string[]; + static attach( + editorOrConfig: Editor | Record, + options?: { + isCollapsed?: boolean; + }, + ): string[]; } - export const editorElementId = "editor"; - export interface CKEditorInstanceFactories { bbcode: CKEditorInstanceFactory; richtext: CKEditorInstanceFactory; } - export const ckEditorInstanceFactories: CKEditorInstanceFactories = { bbcode: createBBCodeEditor, richtext: createRichTextEditor, }; - const attachInspector = (editor: Editor, { dataType, inspector }: ApplicationState): string[] => CKEditorInspector.attach( { @@ -43,7 +43,6 @@ const attachInspector = (editor: Editor, { dataType, inspector }: ApplicationSta isCollapsed: inspector === "collapsed", }, ); - const optionallyActivateDifferencing = (editor: Editor): void => { if (editor.plugins.has(Differencing)) { editor.plugins.get(Differencing).activateDifferencing(); @@ -57,7 +56,6 @@ const optionallyActivateDifferencing = (editor: Editor): void => { */ const registerResetUndo = (editor: Editor): void => { const undoCommand: Command | undefined = editor.commands.get("undo"); - if (undoCommand) { //@ts-expect-error Editor extension, no typing available. // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return @@ -98,14 +96,11 @@ const initializePreviewData = (editor: ClassicEditor, { dataType }: ApplicationS updatePreview(editor.getData(), "text"); } }; - export const createCKEditorInstance = async (state: ApplicationState): Promise => { const sourceElement = document.getElementById(editorElementId); - if (!sourceElement) { throw new Error(`Required element with id ${editorElementId} not defined in HTML.`); } - const { dataType, uiLanguage, readOnlyMode } = state; let factory: CKEditorInstanceFactory; switch (dataType) { @@ -118,29 +113,22 @@ export const createCKEditorInstance = async (state: ApplicationState): Promise { @@ -152,9 +140,7 @@ export const createCKEditorInstance = async (state: ApplicationState): Promise | V10CoreMediaRichTextConfig => { @@ -147,7 +166,6 @@ const getRichTextConfig = ( rules: richTextRuleConfigurations, }; }; - export const createRichTextEditor: CKEditorInstanceFactory = ( sourceElement: HTMLElement, state: ApplicationState, @@ -259,16 +277,49 @@ export const createRichTextEditor: CKEditorInstanceFactory = ( }, ], }, - heading: { options: [ - { model: "paragraph", title: "Paragraph", class: "ck-heading_paragraph" }, - { model: "heading1", view: "h1", title: "Heading 1", class: "ck-heading_heading1" }, - { model: "heading2", view: "h2", title: "Heading 2", class: "ck-heading_heading2" }, - { model: "heading3", view: "h3", title: "Heading 3", class: "ck-heading_heading3" }, - { model: "heading4", view: "h4", title: "Heading 4", class: "ck-heading_heading4" }, - { model: "heading5", view: "h5", title: "Heading 5", class: "ck-heading_heading5" }, - { model: "heading6", view: "h6", title: "Heading 6", class: "ck-heading_heading6" }, + { + model: "paragraph", + title: "Paragraph", + class: "ck-heading_paragraph", + }, + { + model: "heading1", + view: "h1", + title: "Heading 1", + class: "ck-heading_heading1", + }, + { + model: "heading2", + view: "h2", + title: "Heading 2", + class: "ck-heading_heading2", + }, + { + model: "heading3", + view: "h3", + title: "Heading 3", + class: "ck-heading_heading3", + }, + { + model: "heading4", + view: "h4", + title: "Heading 4", + class: "ck-heading_heading4", + }, + { + model: "heading5", + view: "h5", + title: "Heading 5", + class: "ck-heading_heading5", + }, + { + model: "heading6", + view: "h6", + title: "Heading 6", + class: "ck-heading_heading6", + }, ], }, link: { @@ -365,7 +416,10 @@ export const createRichTextEditor: CKEditorInstanceFactory = ( // that the same attributes are kept as is from CMS. For example, the // dir-attribute, which is valid for `` must not be removed just // because CKEditor is not configured to handle it. - { name: "mark", inherit: "span" }, + { + name: "mark", + inherit: "span", + }, ], }, // @ts-expect-error - TODO: Typing issues as it seems. @@ -379,7 +433,13 @@ export const createRichTextEditor: CKEditorInstanceFactory = ( }, [COREMEDIA_MOCK_CONTENT_PLUGIN]: { // Demonstrates, how you may add more contents on the fly. - contents: [{ id: 2, name: "Some Example Document", type: "document" }], + contents: [ + { + id: 2, + name: "Some Example Document", + type: "document", + }, + ], }, }).then((newEditor: ClassicEditor) => { initInputExampleContent(newEditor); diff --git a/app/src/example-data.ts b/app/src/example-data.ts index c2d64da8b..a6dd57aee 100644 --- a/app/src/example-data.ts +++ b/app/src/example-data.ts @@ -1,15 +1,13 @@ // noinspection HttpUrlsUsage import { PREDEFINED_MOCK_LINK_DATA } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/PredefinedMockContents"; -import { EditingView } from "@ckeditor/ckeditor5-engine"; import { bbCodeData, ExampleData, initExamples, richTextData, } from "@coremedia-internal/ckeditor5-coremedia-example-data"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { EditingView, Editor } from "ckeditor5"; import { DataFacade } from "@coremedia/ckeditor5-data-facade"; - const exampleData: { richtext: ExampleData; bbcode: ExampleData; @@ -20,9 +18,7 @@ const exampleData: { }, bbcode: bbCodeData, }; - export type ExampleDataType = keyof typeof exampleData; - const dumpEditingViewOnRender = (editor: Editor): void => { const { editing: { view }, @@ -45,7 +41,6 @@ const dumpEditingViewOnRender = (editor: Editor): void => { }, ); }; - const dumpDataViewOnRender = (editor: Editor): void => { const { data } = editor; data.once( @@ -54,14 +49,13 @@ const dumpDataViewOnRender = (editor: Editor): void => { console.log("CKEditor's Data-Controller received data via 'set'.", { event, // eslint-disable-next-line - data: details[0], + data: details[0] }), { priority: "lowest", }, ); }; - export const initExamplesAndBindTo = (editor: Editor, examplesType: ExampleDataType = "richtext"): void => { initExamples({ id: "examples", diff --git a/app/src/inputExampleContents.ts b/app/src/inputExampleContents.ts index dd26208e4..9f84bea60 100644 --- a/app/src/inputExampleContents.ts +++ b/app/src/inputExampleContents.ts @@ -1,11 +1,9 @@ import MockContentPlugin from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin"; -import { ClassicEditor } from "@ckeditor/ckeditor5-editor-classic"; +import { ClassicEditor } from "ckeditor5"; import MockInputExamplePlugin, { InputExampleElement, } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin"; - const INPUT_EXAMPLE_CONTENT_DIV_CLASS = "inputExampleContentDiv"; - const initInputExampleContent = (editor: ClassicEditor) => { const mockContentPlugin = editor.plugins.get(MockContentPlugin); const mockInputExamplePlugin = editor.plugins.get(MockInputExamplePlugin); @@ -21,7 +19,6 @@ const initInputExampleContent = (editor: ClassicEditor) => { name: "Not insertable Content Type", linkable: false, }); - const singleInputDocuments: InputExampleElement[] = [ { label: "Document 1", @@ -96,7 +93,6 @@ const initInputExampleContent = (editor: ClassicEditor) => { items: [requireExplicitContent(906)], }, ]; - const singleInputs = [ { label: "Root", @@ -220,53 +216,82 @@ const initInputExampleContent = (editor: ClassicEditor) => { }, { label: `Insertable Documents (incl. Slow)`, - tooltip: `${singleInputDocuments.length + slowDocuments.length} including ${ - slowDocuments.length - } documents at the start which load slowly.`, + tooltip: `${singleInputDocuments.length + slowDocuments.length} including ${slowDocuments.length} documents at the start which load slowly.`, classes: ["linkable", "type-collection"], items: slowDocuments.concat(singleInputDocuments).flatMap((item) => item.items), }, ]; - const externalContents: InputExampleElement[] = [ { label: "Insertable external content", tooltip: "Insertable External Content", classes: ["linkable"], - items: [{ externalId: 2000 }], + items: [ + { + externalId: 2000, + }, + ], }, { label: "Already imported external content", tooltip: "Already imported external Content", classes: ["linkable"], - items: [{ externalId: 2002 }], + items: [ + { + externalId: 2002, + }, + ], }, { label: "Not insertable external content", tooltip: "Not droppable external content (Unknown type)", classes: ["non-linkable"], - items: [{ externalId: 2004 }], + items: [ + { + externalId: 2004, + }, + ], }, { label: "Multiple insertable external contents", tooltip: "Multiple insertable external contents", classes: ["linkable"], - items: [{ externalId: 2000 }, { externalId: 2002 }], + items: [ + { + externalId: 2000, + }, + { + externalId: 2002, + }, + ], }, { label: "Multiple external contents (including not insertable)", tooltip: "Multiple external contents (including not insertable)", classes: ["non-linkable"], - items: [{ externalId: 2000 }, { externalId: 2002 }, { externalId: 2004 }], + items: [ + { + externalId: 2000, + }, + { + externalId: 2002, + }, + { + externalId: 2004, + }, + ], }, { label: "External content - error", tooltip: "External content - error", classes: ["linkable"], - items: [{ externalId: 2006 }], + items: [ + { + externalId: 2006, + }, + ], }, ]; - const allData: InputExampleElement[] = [ ...singleInputs, ...singleInputsNotInsertable, @@ -277,25 +302,28 @@ const initInputExampleContent = (editor: ClassicEditor) => { ...createBulkOf50Contents(), ...externalContents, ]; - const main = () => { const examplesEl = document.getElementById(INPUT_EXAMPLE_CONTENT_DIV_CLASS); if (!examplesEl) { console.error(`Required element missing: ${INPUT_EXAMPLE_CONTENT_DIV_CLASS}`); return; } - allData.forEach((data) => { const insertDiv: HTMLDivElement = mockInputExamplePlugin.createInsertElement(data); examplesEl.appendChild(insertDiv); }); console.log(`Initialized ${allData.length} insert examples.`); }; - main(); }; - -const createBulkOf50Contents = (): [{ classes: string[]; tooltip: string; label: string; items: number[] }] => { +const createBulkOf50Contents = (): [ + { + classes: string[]; + tooltip: string; + label: string; + items: number[]; + }, +] => { const ids = []; for (let i = 13000; i < 13100; i = i + 2) { ids.push(i); diff --git a/itest/src/aut/BodyCollectionWrapper.ts b/itest/src/aut/BodyCollectionWrapper.ts index 00e415ac7..be5583e77 100644 --- a/itest/src/aut/BodyCollectionWrapper.ts +++ b/itest/src/aut/BodyCollectionWrapper.ts @@ -1,5 +1,5 @@ import { JSWrapper } from "./JSWrapper"; -import type { BodyCollection } from "@ckeditor/ckeditor5-ui"; +import type { BodyCollection } from "ckeditor5"; import { EditorUIViewWrapper } from "./EditorUIViewWrapper"; import { Locatable, visible } from "./Locatable"; import { Locator } from "playwright"; @@ -11,25 +11,20 @@ import { BalloonPanelViewWrapper } from "./BalloonPanelViewWrapper"; */ export class BodyCollectionWrapper extends JSWrapper implements Locatable { readonly #parent: EditorUIViewWrapper; - constructor(parent: EditorUIViewWrapper) { super(parent.evaluateHandle((parent) => parent.body)); this.#parent = parent; } - get locator(): Locator { // Body Wrapper is at different location in DOM. No direct relation. return this.#parent.locator.page().locator(".ck-body-wrapper"); } - get visible(): Promise { return visible(this); } - get balloonPanel(): BalloonPanelViewWrapper { return BalloonPanelViewWrapper.fromParent(this); } - static fromClassicEditorUIView(wrapper: EditorUIViewWrapper) { return new BodyCollectionWrapper(wrapper); } diff --git a/itest/src/aut/ClassicEditorWrapper.ts b/itest/src/aut/ClassicEditorWrapper.ts index 8742effa4..207308176 100644 --- a/itest/src/aut/ClassicEditorWrapper.ts +++ b/itest/src/aut/ClassicEditorWrapper.ts @@ -1,6 +1,6 @@ import { JSHandle, Locator, Page } from "playwright"; import { EditorWrapper } from "./EditorWrapper"; -import { ClassicEditor } from "@ckeditor/ckeditor5-editor-classic"; +import { ClassicEditor } from "ckeditor5"; import { CommandCollectionWrapper } from "./CommandCollectionWrapper"; import { EditorUIWrapper } from "./EditorUIWrapper"; import type RichTextDataProcessor from "@coremedia/ckeditor5-coremedia-richtext/src/RichTextDataProcessor"; @@ -14,17 +14,14 @@ import ContextualBalloonWrapper from "./components/balloon/ContextualBalloonWrap export class ClassicEditorWrapper extends EditorWrapper implements Locatable { readonly #elementId: string; readonly #page: Page; - constructor(instance: Promise>, page: Page, elementId: string) { super(instance); this.#page = page; this.#elementId = elementId; } - get locator(): Locator { return this.#page.locator(`#${this.#elementId}`); } - get visible(): Promise { return visible(this); } diff --git a/itest/src/aut/CommandCollectionWrapper.ts b/itest/src/aut/CommandCollectionWrapper.ts index 5133136af..1ce75db4f 100644 --- a/itest/src/aut/CommandCollectionWrapper.ts +++ b/itest/src/aut/CommandCollectionWrapper.ts @@ -1,5 +1,5 @@ // CommandCollection: See ckeditor/ckeditor5#12027. -import type CommandCollection from "@ckeditor/ckeditor5-core/src/commandcollection"; +import type { CommandCollection } from "ckeditor5"; import { JSWrapper } from "./JSWrapper"; import { CommandWrapper } from "./CommandWrapper"; import { EditorWrapper } from "./EditorWrapper"; diff --git a/itest/src/aut/CommandWrapper.ts b/itest/src/aut/CommandWrapper.ts index 50a779a0b..7403267e3 100644 --- a/itest/src/aut/CommandWrapper.ts +++ b/itest/src/aut/CommandWrapper.ts @@ -1,5 +1,5 @@ import { JSWrapper } from "./JSWrapper"; -import { Command } from "@ckeditor/ckeditor5-core"; +import { Command } from "ckeditor5"; import { CommandCollectionWrapper } from "./CommandCollectionWrapper"; /** diff --git a/itest/src/aut/EditingControllerWrapper.ts b/itest/src/aut/EditingControllerWrapper.ts index ab4adea33..04856ee12 100644 --- a/itest/src/aut/EditingControllerWrapper.ts +++ b/itest/src/aut/EditingControllerWrapper.ts @@ -1,8 +1,7 @@ import { JSWrapper } from "./JSWrapper"; -import { EditingController } from "@ckeditor/ckeditor5-engine"; +import { EditingController } from "ckeditor5"; import { ViewWrapper } from "./ViewWrapper"; import { EditorWrapper } from "./EditorWrapper"; - export class EditingControllerWrapper extends JSWrapper { get view(): ViewWrapper { return ViewWrapper.fromEditingController(this); diff --git a/itest/src/aut/EditorWrapper.ts b/itest/src/aut/EditorWrapper.ts index 22a1fa763..b7886a1a2 100644 --- a/itest/src/aut/EditorWrapper.ts +++ b/itest/src/aut/EditorWrapper.ts @@ -1,6 +1,6 @@ import { JSWrapper } from "./JSWrapper"; import { EditingControllerWrapper } from "./EditingControllerWrapper"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { Editor } from "ckeditor5"; /** * Wrapper for CKEditor instance. @@ -12,7 +12,6 @@ export class EditorWrapper extends JSWrapper { async focus(): Promise { return this.evaluate((editor) => editor.focus()); } - get editing(): EditingControllerWrapper { return EditingControllerWrapper.fromEditor(this); } diff --git a/itest/src/aut/ViewDocumentWrapper.ts b/itest/src/aut/ViewDocumentWrapper.ts index b359e5fb4..8513c7152 100644 --- a/itest/src/aut/ViewDocumentWrapper.ts +++ b/itest/src/aut/ViewDocumentWrapper.ts @@ -1,7 +1,6 @@ import { JSWrapper } from "./JSWrapper"; -import { ViewDocument } from "@ckeditor/ckeditor5-engine"; +import { ViewDocument } from "ckeditor5"; import { ViewWrapper } from "./ViewWrapper"; - export class ViewDocumentWrapper extends JSWrapper { static fromView(wrapper: ViewWrapper): ViewDocumentWrapper { return new ViewDocumentWrapper(wrapper.evaluateHandle((view) => view.document)); diff --git a/itest/src/aut/ViewWrapper.ts b/itest/src/aut/ViewWrapper.ts index 7c0c6e810..60bfae5ba 100644 --- a/itest/src/aut/ViewWrapper.ts +++ b/itest/src/aut/ViewWrapper.ts @@ -1,8 +1,7 @@ import { JSWrapper } from "./JSWrapper"; -import { EditingView } from "@ckeditor/ckeditor5-engine"; +import { EditingView } from "ckeditor5"; import { ViewDocumentWrapper } from "./ViewDocumentWrapper"; import { EditingControllerWrapper } from "./EditingControllerWrapper"; - export class ViewWrapper extends JSWrapper { get document(): ViewDocumentWrapper { return ViewDocumentWrapper.fromView(this); @@ -16,7 +15,6 @@ export class ViewWrapper extends JSWrapper { view.focus(); }); } - static fromEditingController(wrapper: EditingControllerWrapper): ViewWrapper { return new ViewWrapper(wrapper.evaluateHandle((editingController) => editingController.view)); } diff --git a/itest/src/aut/components/ToolbarViewWrapper.ts b/itest/src/aut/components/ToolbarViewWrapper.ts index c82a6c5ba..d260e19b1 100644 --- a/itest/src/aut/components/ToolbarViewWrapper.ts +++ b/itest/src/aut/components/ToolbarViewWrapper.ts @@ -1,7 +1,6 @@ import { JSWrapper } from "../JSWrapper"; -import type { ToolbarView } from "@ckeditor/ckeditor5-ui"; +import type { ToolbarView } from "ckeditor5"; import ViewWrapper from "./ViewWrapper"; - export default class ToolbarViewWrapper extends JSWrapper { static fromView(viewWrapper: ViewWrapper): ToolbarViewWrapper { const instance = viewWrapper.evaluateHandle((view) => view as ToolbarView); diff --git a/itest/src/aut/components/ViewWrapper.ts b/itest/src/aut/components/ViewWrapper.ts index df34c62ca..02bc157c9 100644 --- a/itest/src/aut/components/ViewWrapper.ts +++ b/itest/src/aut/components/ViewWrapper.ts @@ -1,6 +1,6 @@ import { JSWrapper } from "../JSWrapper"; import ContextualBalloonWrapper from "./balloon/ContextualBalloonWrapper"; -import type { View } from "@ckeditor/ckeditor5-ui"; +import type { View } from "ckeditor5"; /** * Wraps the CKEditor 5 view. diff --git a/itest/src/aut/components/balloon/ButtonViewWrapper.ts b/itest/src/aut/components/balloon/ButtonViewWrapper.ts index 22ee482ee..90c95bc8a 100644 --- a/itest/src/aut/components/balloon/ButtonViewWrapper.ts +++ b/itest/src/aut/components/balloon/ButtonViewWrapper.ts @@ -1,16 +1,15 @@ import { JSWrapper } from "../../JSWrapper"; -import type { ButtonView } from "@ckeditor/ckeditor5-ui"; +import type { ButtonView } from "ckeditor5"; import { HasVisible } from "../../../expect/IsVisible/HasVisible"; import { HasToggleable } from "../../../expect/isToggleable/HasToggleable"; import { HasEnabled } from "../../../expect/isEnabled/HasEnabled"; import { HasAriaLabel } from "../../../aria/AriaUtils"; - export default class ButtonViewWrapper extends JSWrapper // Seems, we cannot make prettier happy here for some reason regarding // whitespace before curly brace. // eslint-disable-next-line prettier/prettier - implements HasVisible, HasToggleable, HasEnabled, HasAriaLabel { +implements HasVisible, HasToggleable, HasEnabled, HasAriaLabel { click(): Promise { return this.evaluate((buttonView) => { const element = buttonView.element; @@ -21,23 +20,18 @@ export default class ButtonViewWrapper } }); } - get visible(): Promise { return this.evaluate((buttonView) => buttonView.isVisible); } - get toggleable(): Promise { return this.evaluate((buttonView) => buttonView.isToggleable); } - get on(): Promise { return this.evaluate((buttonView) => buttonView.isOn); } - get enabled(): Promise { return this.evaluate((buttonView) => buttonView.isEnabled); } - getAriaLabel(): Promise { return this.evaluate((buttonView) => { const element = buttonView.element; @@ -51,7 +45,6 @@ export default class ButtonViewWrapper return Promise.resolve(attribute); }); } - getAriaLabelledBy(): Promise { return this.evaluate((buttonView) => { const element = buttonView.element; diff --git a/itest/src/aut/components/balloon/ContextualBalloonWrapper.ts b/itest/src/aut/components/balloon/ContextualBalloonWrapper.ts index 30fa6d3ed..275b53108 100644 --- a/itest/src/aut/components/balloon/ContextualBalloonWrapper.ts +++ b/itest/src/aut/components/balloon/ContextualBalloonWrapper.ts @@ -1,13 +1,11 @@ import { ClassicEditorWrapper } from "../../ClassicEditorWrapper"; import { JSWrapper } from "../../JSWrapper"; -import type { ContextualBalloon } from "@ckeditor/ckeditor5-ui"; +import type { ContextualBalloon } from "ckeditor5"; import ViewWrapper from "./../ViewWrapper"; - export default class ContextualBalloonWrapper extends JSWrapper { get view(): ViewWrapper { return ViewWrapper.fromContextualBalloon(this); } - static fromEditor(editor: ClassicEditorWrapper): ContextualBalloonWrapper { const instance = editor.evaluateHandle((editor) => editor.plugins.get("ContextualBalloon")); return new ContextualBalloonWrapper(instance); diff --git a/itest/src/aut/components/balloon/ImageContextualBalloonToolbar.ts b/itest/src/aut/components/balloon/ImageContextualBalloonToolbar.ts index a1e99a3da..b22f9487e 100644 --- a/itest/src/aut/components/balloon/ImageContextualBalloonToolbar.ts +++ b/itest/src/aut/components/balloon/ImageContextualBalloonToolbar.ts @@ -1,45 +1,35 @@ import ToolbarViewWrapper from "../ToolbarViewWrapper"; import ButtonViewWrapper from "./ButtonViewWrapper"; -import { type ButtonView, ToolbarView } from "@ckeditor/ckeditor5-ui"; - +import { ButtonView, ToolbarView } from "ckeditor5"; export default class ImageContextualBalloonToolbar { readonly #toolbarViewWrapper: ToolbarViewWrapper; - constructor(toolbarViewWrapper: ToolbarViewWrapper) { this.#toolbarViewWrapper = toolbarViewWrapper; } - getAlignLeftButton(): ButtonViewWrapper { return this.#getButtonViewWrapper(0); } - getAlignRightButton(): ButtonViewWrapper { return this.#getButtonViewWrapper(1); } - getAlignWithinTextButton(): ButtonViewWrapper { return this.#getButtonViewWrapper(2); } - getAlignPageDefaultButton(): ButtonViewWrapper { return this.#getButtonViewWrapper(4); } - getLinkButton(): ButtonViewWrapper { return this.#getButtonViewWrapper(6); } - getOpenInTabButton(): ButtonViewWrapper { return this.#getButtonViewWrapper(8); } - #getButtonViewWrapper(buttonIndex: number): ButtonViewWrapper { const buttonInstance = this.#toolbarViewWrapper.evaluateHandle((toolbarView, buttonIndex: number) => { const itemsView: unknown = toolbarView.children.get(0) as unknown as ToolbarView; if (!itemsView) { throw new Error("ToolbarView has no items view"); } - const buttonView = (itemsView as ToolbarView).children.get(buttonIndex) as unknown as ButtonView; if (!buttonView) { throw new Error(`No button found for button index ${buttonIndex}.`); diff --git a/packages/ckeditor5-bbcode/src/BBCode.ts b/packages/ckeditor5-bbcode/src/BBCode.ts index 99888ca78..c850b331b 100644 --- a/packages/ckeditor5-bbcode/src/BBCode.ts +++ b/packages/ckeditor5-bbcode/src/BBCode.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { BBCodeDataProcessor } from "./BBCodeDataProcessor"; @@ -7,12 +7,9 @@ import { BBCodeDataProcessor } from "./BBCodeDataProcessor"; */ export class BBCode extends Plugin { public static readonly pluginName = "BBCodeDataProcessor"; - init(): void { const initInformation = reportInitStart(this); - this.editor.data.processor = new BBCodeDataProcessor(this.editor.data.viewDocument); - reportInitEnd(initInformation); } } diff --git a/packages/ckeditor5-bbcode/src/BBCodeDataProcessor.ts b/packages/ckeditor5-bbcode/src/BBCodeDataProcessor.ts index f45d335ee..378cd1010 100644 --- a/packages/ckeditor5-bbcode/src/BBCodeDataProcessor.ts +++ b/packages/ckeditor5-bbcode/src/BBCodeDataProcessor.ts @@ -5,14 +5,12 @@ import { MatcherPattern, ViewDocument, ViewDocumentFragment, -} from "@ckeditor/ckeditor5-engine"; - +} from "ckeditor5"; import { bbcode2html } from "./bbcode2html"; import { html2bbcode } from "./html2bbcode"; import { BBCodeProcessingRule } from "./rules/BBCodeProcessingRule"; import { bbCodeDefaultRules } from "./rules/bbCodeDefaultRules"; import { bbCodeLogger } from "./BBCodeLogger"; - const fragmentToString = (domFragment: Node | DocumentFragment): string => Array.from(domFragment.childNodes) .map((cn) => (cn as Element).outerHTML || cn.nodeValue) diff --git a/packages/ckeditor5-bbcode/src/augmentation.ts b/packages/ckeditor5-bbcode/src/augmentation.ts index 0761149a7..b7e78d0aa 100644 --- a/packages/ckeditor5-bbcode/src/augmentation.ts +++ b/packages/ckeditor5-bbcode/src/augmentation.ts @@ -1,6 +1,5 @@ import { BBCode } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [BBCode.pluginName]: BBCode; } diff --git a/packages/ckeditor5-core-common/src/Commands.ts b/packages/ckeditor5-core-common/src/Commands.ts index 927efc2ed..f8ecc314c 100644 --- a/packages/ckeditor5-core-common/src/Commands.ts +++ b/packages/ckeditor5-core-common/src/Commands.ts @@ -1,6 +1,5 @@ -import { Editor, Command } from "@ckeditor/ckeditor5-core"; +import { Editor, Command } from "ckeditor5"; import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; - const commandsLogger: Logger = LoggerProvider.getLogger("Commands"); /** diff --git a/packages/ckeditor5-core-common/src/Plugins.ts b/packages/ckeditor5-core-common/src/Plugins.ts index 53b4f3904..db1a90935 100644 --- a/packages/ckeditor5-core-common/src/Plugins.ts +++ b/packages/ckeditor5-core-common/src/Plugins.ts @@ -1,11 +1,5 @@ import { type Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; -import Plugin, { - PluginClassConstructor, - PluginConstructor, - PluginInterface, -} from "@ckeditor/ckeditor5-core/src/plugin"; -import { Editor, PluginsMap } from "@ckeditor/ckeditor5-core"; - +import { Plugin, PluginClassConstructor, PluginConstructor, PluginInterface, Editor, PluginsMap } from "ckeditor5"; const pluginsLogger: Logger = LoggerProvider.getLogger("Plugins"); /** @@ -16,12 +10,10 @@ const pluginsLogger: Logger = LoggerProvider.getLogger("Plugins"); * reporting. */ export type OnMissingPlugin = (pluginName: string) => void; - export function getOptionalPlugin< TConstructor extends PluginClassConstructor, TContext extends Editor = Editor, >(editor: TContext, key: TConstructor, onMissing?: OnMissingPlugin): InstanceType | undefined; - export function getOptionalPlugin( editor: TContext, key: TName, @@ -47,7 +39,6 @@ export function getOptionalPlugin( onMissing?: OnMissingPlugin, ): PluginInterface | undefined { const { plugins } = editor; - if (plugins.has(key)) { if (typeof key === "string") { return plugins.get(key); @@ -55,21 +46,17 @@ export function getOptionalPlugin( return plugins.get(key); } } - let pluginName: string; - if (typeof key === "string") { pluginName = key; } else { pluginName = (key as PluginConstructor).pluginName ?? key.name; } - if (onMissing) { onMissing(pluginName); } else { pluginsLogger.debug(`getOptionalPlugin: Queried plugin ${pluginName} is unavailable.`); } - return undefined; } diff --git a/packages/ckeditor5-coremedia-blocklist/src/augmentation.ts b/packages/ckeditor5-coremedia-blocklist/src/augmentation.ts index 3881a148d..5decdeb1b 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/augmentation.ts @@ -1,11 +1,9 @@ import type { Blocklist } from "./index"; import BlocklistCommand, { BLOCKLIST_COMMAND_NAME } from "./blocklistCommand"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [Blocklist.pluginName]: Blocklist; } - interface CommandsMap { [BLOCKLIST_COMMAND_NAME]: BlocklistCommand; } diff --git a/packages/ckeditor5-coremedia-blocklist/src/blocklist.ts b/packages/ckeditor5-coremedia-blocklist/src/blocklist.ts index c65f333ca..9bfc46361 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/blocklist.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/blocklist.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import Blocklistui from "./blocklistui"; import BlocklistEditing from "./blocklistediting"; diff --git a/packages/ckeditor5-coremedia-blocklist/src/blocklistChangesUtils.ts b/packages/ckeditor5-coremedia-blocklist/src/blocklistChangesUtils.ts index 932ba994e..a73613a4d 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/blocklistChangesUtils.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/blocklistChangesUtils.ts @@ -1,7 +1,16 @@ -import { Collection } from "@ckeditor/ckeditor5-utils"; -import { Editor } from "@ckeditor/ckeditor5-core"; -import { DiffItem, DiffItemAttribute, Element, Item, Marker, Model, Node, Range } from "@ckeditor/ckeditor5-engine"; -import { FindAndReplaceUtils } from "@ckeditor/ckeditor5-find-and-replace"; +import { + Collection, + Editor, + DiffItem, + DiffItemAttribute, + Element, + Item, + Marker, + Model, + Node, + Range, + FindAndReplaceUtils, +} from "ckeditor5"; import { createMarkerNameAndStoreWord } from "./blocklistMarkerUtils"; // copied from @ckeditor/ckeditor5-find-and-replace/src/findandreplace.d.ts since not exported in index.js @@ -20,7 +29,6 @@ export const onDocumentChange = (results: Collection, editor: Editor const changedNodes = new Set(); const removedMarkers = new Set(); const model = editor.model; - const changes = model.document.differ.getChanges() as Exclude[]; // Get nodes in which changes happened to re-run a search callback on them. @@ -32,7 +40,6 @@ export const onDocumentChange = (results: Collection, editor: Editor } if (change.name === "$text" || (change.position.nodeAfter && model.schema.isInline(change.position.nodeAfter))) { changedNodes.add(change.position.parent as Element); - [...model.markers.getMarkersAtPosition(change.position)].forEach((markerAtChange) => { removedMarkers.add(markerAtChange.name); }); @@ -53,7 +60,6 @@ export const onDocumentChange = (results: Collection, editor: Editor // Get markers from the updated nodes and remove all (search will be re-run on these nodes). changedNodes.forEach((node) => { const markersInNode = [...model.markers.getMarkersIntersectingRange(model.createRangeIn(node as Element))]; - markersInNode.forEach((marker) => removedMarkers.add(marker.name)); }); @@ -64,7 +70,6 @@ export const onDocumentChange = (results: Collection, editor: Editor if (results.has(markerName)) { results.remove(markerName); } - writer.removeMarker(markerName); }); }); @@ -83,7 +88,6 @@ export const onDocumentChange = (results: Collection, editor: Editor }); }); }; - export const createSearchCallback = (word: string) => { const regexpMatchToFindResult = (matchResult: RegExpMatchArray): ResultType => { const lastGroupIndex = matchResult.length - 1; @@ -94,14 +98,12 @@ export const createSearchCallback = (word: string) => { if (matchResult.length === 3) { startOffset += matchResult[1].length; } - return { label: matchResult[lastGroupIndex], start: startOffset, end: startOffset + matchResult[lastGroupIndex].length, }; }; - const regExp = new RegExp(`(${word})`, "gui"); const searchCallback = ({ text }: { text: string }) => { const matches = [...text.matchAll(regExp)]; @@ -109,7 +111,6 @@ export const createSearchCallback = (word: string) => { }; return searchCallback; }; - export const updateFindResultFromRange = ( blockedWord: string, editor: Editor, @@ -120,7 +121,6 @@ export const updateFindResultFromRange = ( ): Collection => { const results = startResults ?? new Collection(); const findAndReplaceUtils = new FindAndReplaceUtils(editor); - model.change((writer) => { [...range].forEach(({ type, item }) => { if (type === "elementStart") { @@ -129,11 +129,9 @@ export const updateFindResultFromRange = ( item, text: findAndReplaceUtils.rangeToText(model.createRangeIn(item as Element)), }); - if (!foundItems) { return; } - foundItems.forEach((foundItem) => { const markerName = createMarkerNameAndStoreWord(blockedWord); const marker = writer.addMarker(markerName, { @@ -144,9 +142,7 @@ export const updateFindResultFromRange = ( writer.createPositionAt(item, foundItem.end), ), }); - const index = findInsertIndex(results, marker); - results.add( { id: markerName, @@ -160,7 +156,6 @@ export const updateFindResultFromRange = ( } }); }); - return results; }; diff --git a/packages/ckeditor5-coremedia-blocklist/src/blocklistCommand.ts b/packages/ckeditor5-coremedia-blocklist/src/blocklistCommand.ts index 9b3d0db5a..be5047da0 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/blocklistCommand.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/blocklistCommand.ts @@ -1,6 +1,4 @@ -import Command from "@ckeditor/ckeditor5-core/src/command"; -import { Editor } from "@ckeditor/ckeditor5-core"; - +import { Command, Editor } from "ckeditor5"; export const BLOCKLIST_COMMAND_NAME = "Blocklist"; /** @@ -15,14 +13,12 @@ export default class BlocklistCommand extends Command { * @readonly */ public declare value: string[]; - constructor(editor: Editor) { super(editor); this.value = []; // We don't modify any data. this.affectsData = false; } - override execute() { this.refresh(); } diff --git a/packages/ckeditor5-coremedia-blocklist/src/blocklistMarkerUtils.ts b/packages/ckeditor5-coremedia-blocklist/src/blocklistMarkerUtils.ts index 95e1709ed..f6407db22 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/blocklistMarkerUtils.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/blocklistMarkerUtils.ts @@ -1,4 +1,4 @@ -import { uid } from "@ckeditor/ckeditor5-utils"; +import { uid } from "ckeditor5"; export interface MarkerDetails { id: string; blockedWord: string | undefined; @@ -31,7 +31,10 @@ export const createMarkerNameAndStoreWord = (blockedWord: string): string => { export const getMarkerDetails = (markerName: string): MarkerDetails => { const id = getMarkerId(markerName); const blockedWord = markerIdToBlockedWordMap.get(id); - return { id, blockedWord }; + return { + id, + blockedWord, + }; }; /** diff --git a/packages/ckeditor5-coremedia-blocklist/src/blocklistediting.ts b/packages/ckeditor5-coremedia-blocklist/src/blocklistediting.ts index f324bda9c..11e94e067 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/blocklistediting.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/blocklistediting.ts @@ -1,6 +1,5 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; import BlocklistCommand, { BLOCKLIST_COMMAND_NAME } from "./blocklistCommand"; -import { Collection } from "@ckeditor/ckeditor5-utils"; +import { Plugin, Collection } from "ckeditor5"; import { createSearchCallback, onDocumentChange, ResultType, updateFindResultFromRange } from "./blocklistChangesUtils"; import { serviceAgent } from "@coremedia/service-agent"; import { Subscription } from "rxjs"; @@ -35,7 +34,6 @@ export default class BlocklistEditing extends Plugin { * @private */ #blocklistServiceSubscription: Pick | undefined = undefined; - init(): void { const editor = this.editor; editor.commands.add(BLOCKLIST_COMMAND_NAME, new BlocklistCommand(editor)); @@ -52,7 +50,6 @@ export default class BlocklistEditing extends Plugin { // Connect to the BlockList Service to retrieve the list of words to highlight this.#subscribeToBlocklistService(); } - #subscribeToBlocklistService(): void { const onServiceRegisteredFunction = (services: BlocklistService[]): void => { // No BlocklistService registered yet, no need to compute further @@ -79,7 +76,6 @@ export default class BlocklistEditing extends Plugin { .observeServices(createBlocklistServiceDescriptor()) .subscribe(onServiceRegisteredFunction); } - override destroy() { if (this.#blocklistServiceSubscription) { this.#blocklistServiceSubscription.unsubscribe(); @@ -98,11 +94,9 @@ export default class BlocklistEditing extends Plugin { next: (blockedWords: string[]) => { // Get all words that differ from blockedWords and internalBlocklist const { addedWords, removedWords } = this.#getAddedAndRemovedWords(blockedWords, this.internalBlocklist); - addedWords.forEach((word) => { this.#addMarkersForWord(word); }); - removedWords.forEach((word) => { this.#removeMarkersForWord(word); }); @@ -113,7 +107,6 @@ export default class BlocklistEditing extends Plugin { } }, }); - const initialWords = await blocklistService.getBlocklist(); initialWords.forEach((word) => { this.#addMarkersForWord(word); @@ -135,10 +128,19 @@ export default class BlocklistEditing extends Plugin { * @returns an object, holding information about changes between the lists * @private */ - #getAddedAndRemovedWords(newList: string[], oldList: string[]): { addedWords: string[]; removedWords: string[] } { + #getAddedAndRemovedWords( + newList: string[], + oldList: string[], + ): { + addedWords: string[]; + removedWords: string[]; + } { const addedWords = newList.filter((word) => !oldList.includes(word)); const removedWords = oldList.filter((word) => !newList.includes(word)); - return { addedWords, removedWords }; + return { + addedWords, + removedWords, + }; } /** diff --git a/packages/ckeditor5-coremedia-blocklist/src/blocklistui.ts b/packages/ckeditor5-coremedia-blocklist/src/blocklistui.ts index cd237ffb5..ddd29e448 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/blocklistui.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/blocklistui.ts @@ -1,22 +1,23 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; import { ifCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; import blocklistIcon from "../theme/icons/blocklist.svg"; -import { ButtonView, clickOutsideHandler, ContextualBalloon } from "@ckeditor/ckeditor5-ui"; import { + Plugin, + ButtonView, + clickOutsideHandler, + ContextualBalloon, TextProxy, ViewAttributeElement, ViewDocumentClickEvent, ViewDocumentFragment, ViewNode, ViewPosition, -} from "@ckeditor/ckeditor5-engine"; -import { PositionOptions } from "@ckeditor/ckeditor5-utils"; + PositionOptions, +} from "ckeditor5"; import BlocklistCommand, { BLOCKLIST_COMMAND_NAME } from "./blocklistCommand"; import BlocklistActionsView from "./ui/blocklistActionsView"; import "./lang/blocklist"; import { UnblockEvent } from "./ui/blockedWordView"; import BlocklistEditing from "./blocklistediting"; - const BLOCKLIST_KEYSTROKE = "Ctrl+Shift+B"; /** @@ -29,17 +30,12 @@ const BLOCKLIST_KEYSTROKE = "Ctrl+Shift+B"; export default class Blocklistui extends Plugin { static readonly pluginName: string = "BlocklistUI"; static readonly requires = [ContextualBalloon, BlocklistEditing]; - blocklistActionsView?: BlocklistActionsView; - blocklistCommand: BlocklistCommand | undefined; - #balloon: ContextualBalloon | undefined = undefined; - async init(): Promise { const editor = this.editor; this.blocklistCommand = (await ifCommand(editor, BLOCKLIST_COMMAND_NAME)) as BlocklistCommand; - this.#balloon = editor.plugins.get(ContextualBalloon); // listen to click and key events to open the blocklist balloon @@ -50,14 +46,12 @@ export default class Blocklistui extends Plugin { // listen to click and key events while the balloon is open (to navigate or close the balloon) this.#initBalloonViewListeners(); - this.blocklistActionsView = this.#createBlocklistActionsView(); this.blocklistActionsView.bind("blockedWords").to(this.blocklistCommand, "value"); // listen to changes in blocklistCommand and refresh the list in the blocklist view accordingly this.blocklistCommand.on("change:value", this.blocklistActionsView.refreshList.bind(this.blocklistActionsView)); } - #getBlocklistActionsView(): BlocklistActionsView { if (!this.blocklistActionsView) { this.blocklistActionsView = this.#createBlocklistActionsView(); @@ -73,12 +67,9 @@ export default class Blocklistui extends Plugin { */ #createBlocklistActionsView(): BlocklistActionsView { const editor = this.editor; - const blocklistActionsView = new BlocklistActionsView(editor); - this.listenTo(blocklistActionsView.blocklistInputView, "submit", () => { const blockWordInput = blocklistActionsView.blocklistInputView.getInputElement(); - if (!this.blocklistCommand) { return; } @@ -92,7 +83,6 @@ export default class Blocklistui extends Plugin { // Add markers and sync with service const editingPlugin = editor.plugins.get(BlocklistEditing); editingPlugin.addBlocklistWord(blockWordInput.value); - const newValue = [...blocklistCommandValue, blockWordInput.value]; this.blocklistCommand.set("value", newValue); @@ -109,7 +99,6 @@ export default class Blocklistui extends Plugin { // Remove markers const editingPlugin = editor.plugins.get(BlocklistEditing); editingPlugin.removeBlocklistWord(wordToUnblock); - const blocklistCommandValue = this.blocklistCommand.value; const index = blocklistCommandValue.indexOf(wordToUnblock); blocklistCommandValue.splice(index, 1); @@ -126,7 +115,6 @@ export default class Blocklistui extends Plugin { this.#hideBlocklistBalloon(); cancel(); }); - return blocklistActionsView; } @@ -139,10 +127,8 @@ export default class Blocklistui extends Plugin { #createBlocklistToolbarButton(command: BlocklistCommand) { const editor = this.editor; const t = editor.t; - editor.ui.componentFactory.add("blocklist", (locale) => { const button = new ButtonView(locale); - button.isEnabled = true; button.label = t("Manage Blocklist"); button.icon = blocklistIcon; @@ -159,7 +145,6 @@ export default class Blocklistui extends Plugin { this.listenTo(button, "execute", () => { this.#showBlocklistBalloonConsideringSelection(); }); - return button; }); } @@ -197,9 +182,7 @@ export default class Blocklistui extends Plugin { // Set the value of the input element in the blocklist balloon to the current selection // For clicks on a blocked word, no value is set since the selection is collapsed this.#getBlocklistActionsView().blocklistInputView.setInputText(this.#getSelectedText()); - this.#addBalloonView(); - if (forceFocus) { this.#getBlocklistActionsView().focus(); } @@ -213,7 +196,6 @@ export default class Blocklistui extends Plugin { */ #hideBlocklistBalloon(): void { const editor = this.editor; - this.stopListening(editor.ui, "update"); this.stopListening(this.#balloon, "change:visibleView"); @@ -245,22 +227,18 @@ export default class Blocklistui extends Plugin { if (!this.#balloon) { return; } - this.#balloon.add({ view: this.#getBlocklistActionsView(), position: this.#getBalloonPositionData(), }); } - #getBalloonPositionData(): Partial { const view = this.editor.editing.view; const viewDocument = view.document; - const selection = view.document.selection; const selectedElement = selection.getSelectedElement(); const target: PositionOptions["target"] = () => { const targetWord = selectedElement; - if (targetWord) { const targetWordViewElement = view.domConverter.mapViewToDom(targetWord); if (targetWordViewElement) { @@ -272,7 +250,9 @@ export default class Blocklistui extends Plugin { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return view.domConverter.viewRangeToDom(viewDocument.selection.getFirstRange()!); }; - return { target }; + return { + target, + }; } /** @@ -295,7 +275,6 @@ export default class Blocklistui extends Plugin { // is not to open the blocked words balloon even if blocked words are part of the selection. return; } - const blockedWords = this.#getSelectedBlocklistWords(); if (!blockedWords || blockedWords.length === 0) { return; @@ -312,7 +291,6 @@ export default class Blocklistui extends Plugin { editor.keystrokes.set(BLOCKLIST_KEYSTROKE, (keyEvtData, cancel) => { // Prevent focusing the search bar in FF, Chrome and Edge. See https://github.com/ckeditor/ckeditor5/issues/4811. cancel(); - if (editor.commands.get(BLOCKLIST_COMMAND_NAME)?.isEnabled) { this.#showBlocklistBalloonConsideringSelection(); } @@ -389,7 +367,6 @@ export default class Blocklistui extends Plugin { #getSelectedBlocklistWords(): string[] | undefined { const view = this.editor.editing.view; const selection = view.document.selection; - const firstRange = selection.getFirstRange(); if (!firstRange) { return undefined; @@ -411,11 +388,9 @@ export default class Blocklistui extends Plugin { #getSelectedText(): string { const selection = this.editor.model.document.selection; const range = selection.getFirstRange(); - const isTextProxy = (node: unknown): node is TextProxy => // eslint-disable-next-line no-null/no-null typeof node === "object" && node !== null && "data" in node; - if (range) { return Array.from(range.getItems()) .filter((item) => isTextProxy(item)) diff --git a/packages/ckeditor5-coremedia-blocklist/src/ui/blockedWordView.ts b/packages/ckeditor5-coremedia-blocklist/src/ui/blockedWordView.ts index 9d94eba29..b0d23d8b6 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/ui/blockedWordView.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/ui/blockedWordView.ts @@ -1,5 +1,4 @@ -import { ButtonView, View, ViewCollection, submitHandler } from "@ckeditor/ckeditor5-ui"; -import { KeystrokeHandler, type Locale } from "@ckeditor/ckeditor5-utils"; +import { ButtonView, View, ViewCollection, submitHandler, KeystrokeHandler, Locale } from "ckeditor5"; import { BindChain } from "@ckeditor/ckeditor5-ui/src/template"; import trashbinIcon from "../../theme/icons/trashbin.svg"; import "../../theme/blockedwordview.css"; @@ -38,20 +37,14 @@ export default class BlockedWordView extends View { * The label of the header. */ public declare label: string; - constructor(locale: Locale) { super(locale); - const bind = this.bindTemplate; - this.children = this.createCollection(); - this.#removeButtonView = this.#createRemoveButton(locale); this.#blockedWordLabel = this.#createBlockedWordLabel(locale, bind); - this.children.add(this.#blockedWordLabel); this.children.add(this.#removeButtonView); - this.setTemplate({ tag: "div", attributes: { @@ -60,14 +53,11 @@ export default class BlockedWordView extends View { children: this.children, }); } - public override render(): void { super.render(); - submitHandler({ view: this, }); - this.#focusables.add(this.#removeButtonView); // Start listening for the keystrokes coming from #element. @@ -99,41 +89,37 @@ export default class BlockedWordView extends View { */ #createRemoveButton(locale: Locale): ButtonView { const button = new ButtonView(this.locale); - button.set({ label: locale.t("Remove word from blocklist"), icon: trashbinIcon, tooltip: true, }); - button.extendTemplate({ attributes: { class: "ck-button-cancel", }, }); - button.on("execute", () => { this.fire("unblock", this.label); }); - return button; } - #createBlockedWordLabel(locale: Locale, bind: BindChain): View { const label = new View(locale); - label.setTemplate({ tag: "h2", attributes: { class: ["ck", "ck-form__header__label"], }, - children: [{ text: bind.to("label") }], + children: [ + { + text: bind.to("label"), + }, + ], }); - return label; } } - export interface UnblockEvent { name: "unblock"; args: [string]; diff --git a/packages/ckeditor5-coremedia-blocklist/src/ui/blocklistActionsView.ts b/packages/ckeditor5-coremedia-blocklist/src/ui/blocklistActionsView.ts index b6943579b..3c0fd4808 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/ui/blocklistActionsView.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/ui/blocklistActionsView.ts @@ -2,9 +2,17 @@ * @module blocklist/ui/blocklistactionsview */ -import { View, ViewCollection, FocusCycler, ListView, FocusableView } from "@ckeditor/ckeditor5-ui"; -import { FocusTracker, KeystrokeHandler, type Locale } from "@ckeditor/ckeditor5-utils"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { + View, + ViewCollection, + FocusCycler, + ListView, + FocusableView, + FocusTracker, + KeystrokeHandler, + Locale, + Editor, +} from "ckeditor5"; import BlocklistInputView from "./blocklistInputView"; import BlockedWordView from "./blockedWordView"; @@ -39,12 +47,9 @@ export default class BlocklistActionsView extends View { * Used to create a ViewList, that represents the words in the current selection. */ public declare blockedWords: string[]; - constructor(editor: Editor) { super(editor.locale); - this.editor = editor; - this.blockedWords = []; // create all views @@ -59,7 +64,6 @@ export default class BlocklistActionsView extends View { actions: { // Navigate fields backwards using the Shift + Tab keystroke. focusPrevious: "shift + tab", - // Navigate fields forwards using the Tab key. focusNext: "tab", }, @@ -75,7 +79,6 @@ export default class BlocklistActionsView extends View { children: [this.blockedWordListView, this.blocklistInputView], }); } - refreshList() { this.blockedWordListView.items.clear(); this.blockedWords.forEach((word) => { @@ -85,22 +88,17 @@ export default class BlocklistActionsView extends View { this.blockedWordListView.items.add(view); }); } - public override render(): void { super.render(); - this.#focusables.add(this.blocklistInputView.wordToBlockInputView); this.#focusables.add(this.blocklistInputView.saveButtonView); this.#focusables.add(this.blockedWordListView); - if (this.blocklistInputView.wordToBlockInputView.element) { this.focusTracker.add(this.blocklistInputView.wordToBlockInputView.element); } - if (this.blocklistInputView.saveButtonView.element) { this.focusTracker.add(this.blocklistInputView.saveButtonView.element); } - if (this.blockedWordListView.element) { this.focusTracker.add(this.blockedWordListView.element); } @@ -110,13 +108,11 @@ export default class BlocklistActionsView extends View { this.keystrokes.listenTo(this.element); } } - public override destroy(): void { super.destroy(); this.focusTracker.destroy(); this.keystrokes.destroy(); } - public focus(): void { this.#focusCycler.focusFirst(); } diff --git a/packages/ckeditor5-coremedia-blocklist/src/ui/blocklistInputView.ts b/packages/ckeditor5-coremedia-blocklist/src/ui/blocklistInputView.ts index ad0f27185..1a5bfa9ea 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/ui/blocklistInputView.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/ui/blocklistInputView.ts @@ -5,10 +5,11 @@ import { ViewCollection, createLabeledInputText, submitHandler, - type InputTextView, -} from "@ckeditor/ckeditor5-ui"; -import { KeystrokeHandler, type Locale } from "@ckeditor/ckeditor5-utils"; -import { icons } from "@ckeditor/ckeditor5-core"; + InputTextView, + KeystrokeHandler, + Locale, + icons, +} from "ckeditor5"; import "../lang/blocklist"; /** @@ -45,13 +46,10 @@ export default class BlocklistInputView extends View { */ constructor(locale: Locale) { super(locale); - this.wordToBlockInputView = this.#createWordToBlockInput(locale); this.saveButtonView = this.#createSaveButton(locale); this.children = this.#createFormChildren(); - this.#addInputEventListener(); - this.setTemplate({ tag: "form", attributes: { @@ -61,10 +59,8 @@ export default class BlocklistInputView extends View { children: this.children, }); } - public override render(): void { super.render(); - submitHandler({ view: this, }); @@ -74,12 +70,10 @@ export default class BlocklistInputView extends View { this.keystrokes.listenTo(this.element); } } - #addInputEventListener(): void { const blockWordInput = this.getInputElement(); blockWordInput.addEventListener("input", this.#validateAfterInputChange.bind(this)); } - #validateAfterInputChange(): void { const blockWordInput = this.getInputElement(); const saveButton = this.saveButtonView; @@ -100,7 +94,6 @@ export default class BlocklistInputView extends View { const labeledInput = new LabeledFieldView(locale, createLabeledInputText); labeledInput.label = locale.t("Block"); labeledInput.fieldView.placeholder = locale.t("Enter word to block"); - return labeledInput; } @@ -112,7 +105,6 @@ export default class BlocklistInputView extends View { */ #createSaveButton(locale: Locale): ButtonView { const button = new ButtonView(this.locale); - button.set({ label: locale.t("Add word to blocklist"), icon: icons.check, @@ -120,13 +112,11 @@ export default class BlocklistInputView extends View { type: "submit", tooltip: true, }); - button.extendTemplate({ attributes: { class: "ck-button-save", }, }); - return button; } @@ -137,10 +127,8 @@ export default class BlocklistInputView extends View { */ #createFormChildren(): ViewCollection { const children = this.createCollection(); - children.add(this.wordToBlockInputView); children.add(this.saveButtonView); - return children; } diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts index f39b31326..b3ff37ae5 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts @@ -1,17 +1,16 @@ /* eslint no-null/no-null: off */ -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { + Plugin, + Editor, Clipboard, ClipboardContentInsertionEvent, ClipboardInputTransformationData, ClipboardInputTransformationEvent, ClipboardPipeline, ViewDocumentClipboardInputEvent, -} from "@ckeditor/ckeditor5-clipboard"; -import { Range as ModelRange, ViewRange, DocumentFragment as ModelDocumentFragment, @@ -19,8 +18,8 @@ import { ViewDocument, StylesProcessor, DomEventData, -} from "@ckeditor/ckeditor5-engine"; -import { EventInfo } from "@ckeditor/ckeditor5-utils"; + EventInfo, +} from "ckeditor5"; import { ClipboardEventData, ClipboardInputEventData, @@ -37,7 +36,6 @@ import { IsDroppableEvaluationResult, } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext"; import { receiveDraggedItemsFromDataTransfer } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/DragDropServiceWrapper"; - const PLUGIN_NAME = "ContentClipboardPlugin"; /** @@ -62,9 +60,7 @@ const isContentEventData = (value: T): value is T export default class ContentClipboard extends Plugin { static readonly pluginName = PLUGIN_NAME; static readonly #logger: Logger = LoggerProvider.getLogger(PLUGIN_NAME); - static readonly requires = [Clipboard, ClipboardPipeline, ContentClipboardEditing, UndoSupport]; - init(): void { const initInformation: InitInformation = reportInitStart(this); this.#initEventListeners(); @@ -86,7 +82,6 @@ export default class ContentClipboard extends Plugin { this.listenTo(viewDocument, "dragover", ContentClipboard.#dragOverHandler, { priority: "low", }); - if (editor.plugins.has(ClipboardPipeline)) { const clipboardPipelinePlugin = editor.plugins.get(ClipboardPipeline); this.listenTo( @@ -96,12 +91,10 @@ export default class ContentClipboard extends Plugin { ); } } - override destroy(): void { const editor = this.editor; const view = editor.editing.view; const viewDocument = view.document; - this.stopListening(viewDocument, "clipboardInput", this.#clipboardInputHandler); this.stopListening(viewDocument, "dragover", ContentClipboard.#dragOverHandler); if (editor.plugins.has(ClipboardPipeline)) { @@ -127,15 +120,12 @@ export default class ContentClipboard extends Plugin { if (!isDroppableEvaluationResult) { return; } - data.preventDefault(); - if (isDroppableEvaluationResult === "PENDING") { ContentClipboard.#logger.debug("Drag over evaluation is currently pending", data); data.dataTransfer.dropEffect = "none"; return; } - if (isDroppableEvaluationResult.isDroppable) { data.dataTransfer.dropEffect = "link"; } else { @@ -163,12 +153,10 @@ export default class ContentClipboard extends Plugin { if (!dataTransfer) { return; } - const uris: string[] | undefined = receiveDraggedItemsFromDataTransfer(dataTransfer); if (!uris) { return; } - const isDroppableResult: IsDroppableEvaluationResult | undefined = getEvaluationResult(uris); // Return if this is no CoreMedia content drop. if (!isDroppableResult) { @@ -204,12 +192,10 @@ export default class ContentClipboard extends Plugin { if (!dataTransfer) { return; } - const uris: string[] | undefined = receiveDraggedItemsFromDataTransfer(dataTransfer); if (!uris) { return; } - const isDroppableResult: IsDroppableEvaluationResult | undefined = getEvaluationResult(uris); if (!isDroppableResult || isDroppableResult === "PENDING") { return; @@ -219,9 +205,7 @@ export default class ContentClipboard extends Plugin { if (!isDroppableResult.uris || isDroppableResult.uris.length === 0) { return; } - const droppableUris = isDroppableResult.uris; - const { editor } = this; // Return if no range has been set (usually indicated by a blue cursor @@ -247,9 +231,7 @@ export default class ContentClipboard extends Plugin { // The best solution for this seems to disable the undo command before the // input and enable it again afterward. disableUndo(editor.plugins.get(UndoSupport)); - const { model } = editor; - insertContentMarkers(editor, targetRange, droppableUris); // Fire content insertion event in a single change block to allow other // handlers to run in the same block without post-fixers called in between diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing.ts index bfb20270b..72ea3b8d2 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing.ts @@ -1,14 +1,11 @@ -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; import "../theme/loadmask.css"; - -import { DowncastDispatcher } from "@ckeditor/ckeditor5-engine"; +import { Plugin, Editor, DowncastDispatcher } from "ckeditor5"; import { ContentClipboardMarkerDataUtils, MarkerData } from "./ContentClipboardMarkerDataUtils"; import { addContentMarkerConversion, removeContentMarkerConversion } from "./converters"; import DataToModelMechanism from "./DataToModelMechanism"; import ContentToModelRegistry, { CreateModelFunctionCreator } from "./ContentToModelRegistry"; import { UndoSupport } from "./integrations/Undo"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; - const PLUGIN_NAME = "ContentClipboardEditing"; /** @@ -18,12 +15,10 @@ const PLUGIN_NAME = "ContentClipboardEditing"; */ export default class ContentClipboardEditing extends Plugin { static readonly pluginName = PLUGIN_NAME; - static readonly #CONTENT_INPUT_ADD_MARKER_EVENT = "addMarker:" + ContentClipboardMarkerDataUtils.CONTENT_INPUT_MARKER_PREFIX; static readonly #CONTENT_INPUT_REMOVE_MARKER_EVENT = "removeMarker:" + ContentClipboardMarkerDataUtils.CONTENT_INPUT_MARKER_PREFIX; - static readonly requires = [UndoSupport]; /** @@ -40,23 +35,19 @@ export default class ContentClipboardEditing extends Plugin { * @private */ readonly #pendingMarkerNames = new Array(); - init(): Promise | void { const initInformation = reportInitStart(this); this.#defineConverters(); reportInitEnd(initInformation); } - #defineConverters(): void { const editor = this.editor; const conversion = editor.conversion; - conversion.for("editingDowncast").add((dispatcher: DowncastDispatcher) => { dispatcher.on(ContentClipboardEditing.#CONTENT_INPUT_ADD_MARKER_EVENT, this.#onAddMarker(editor)); dispatcher.on(ContentClipboardEditing.#CONTENT_INPUT_REMOVE_MARKER_EVENT, removeContentMarkerConversion); }); } - #onAddMarker(editor: Editor) { return addContentMarkerConversion(this.#pendingMarkerNames, (markerData: MarkerData): void => { DataToModelMechanism.triggerLoadAndWriteToModel(editor, this.#pendingMarkerNames, markerData); diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentInputDataCache.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentInputDataCache.ts index d157f24e8..a7f1a03b9 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentInputDataCache.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentInputDataCache.ts @@ -1,4 +1,4 @@ -import { Batch } from "@ckeditor/ckeditor5-engine"; +import { Batch } from "ckeditor5"; /** * A cache to store data about content input. @@ -42,18 +42,15 @@ export default class ContentInputDataCache { ContentInputDataCache.#contentInputDataCache.delete(contentInputMarkerName); } } - export interface ContentInputData { insertionContext: InsertionContext; itemContext: ItemContext; } - export interface ItemContext { uri: string; isInline: boolean; itemIndex: number; } - export interface InsertionContext { insertionId: number; batch: Batch; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentMarkers.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentMarkers.ts index 3e6807bbe..46496e97c 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentMarkers.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentMarkers.ts @@ -1,12 +1,9 @@ -import { Editor } from "@ckeditor/ckeditor5-core"; -import { Range as ModelRange, Writer } from "@ckeditor/ckeditor5-engine"; import ContentInputDataCache, { ContentInputData, InsertionContext } from "./ContentInputDataCache"; import { ContentClipboardMarkerDataUtils } from "./ContentClipboardMarkerDataUtils"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { serviceAgent } from "@coremedia/service-agent"; import { createRichtextConfigurationServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/RichtextConfigurationServiceDescriptor"; -import type { Model } from "@ckeditor/ckeditor5-engine"; - +import type { Editor, Range as ModelRange, Writer, Model } from "ckeditor5"; const logger = LoggerProvider.getLogger("ContentMarkers"); /** @@ -25,11 +22,14 @@ const logger = LoggerProvider.getLogger("ContentMarkers"); */ export const insertContentMarkers = (editor: Editor, targetRange: ModelRange, contentUris: string[]): void => { const { model } = editor; - - model.enqueueChange({ isUndoable: false }, (writer: Writer) => { - writer.setSelection(targetRange); - }); - + model.enqueueChange( + { + isUndoable: false, + }, + (writer: Writer) => { + writer.setSelection(targetRange); + }, + ); const batch = model.createBatch(); // Save the attributes of the current selection to apply them later on the @@ -85,9 +85,14 @@ const handleExpandedRange = (model: Model, range: ModelRange): ModelRange => { if (range.isCollapsed) { return range; } - model.enqueueChange({ isUndoable: false }, (writer: Writer) => { - writer.remove(range); - }); + model.enqueueChange( + { + isUndoable: false, + }, + (writer: Writer) => { + writer.remove(range); + }, + ); return model.createRange(range.start); }; /** @@ -129,8 +134,16 @@ const addContentInputMarker = (editor: Editor, markerRange: ModelRange, contentI contentInputData.itemContext.itemIndex, ); logger.debug("Adding content-input marker", markerName, contentInputData); - editor.model.enqueueChange({ isUndoable: false }, (writer: Writer) => { - writer.addMarker(markerName, { usingOperation: true, range: markerRange }); - ContentInputDataCache.storeData(markerName, contentInputData); - }); + editor.model.enqueueChange( + { + isUndoable: false, + }, + (writer: Writer) => { + writer.addMarker(markerName, { + usingOperation: true, + range: markerRange, + }); + ContentInputDataCache.storeData(markerName, contentInputData); + }, + ); }; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentToModelRegistry.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentToModelRegistry.ts index 4fab4da29..c3f6639ef 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentToModelRegistry.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentToModelRegistry.ts @@ -1,5 +1,4 @@ -import { Writer, Node } from "@ckeditor/ckeditor5-engine"; - +import { Writer, Node } from "ckeditor5"; export type CreateModelFunction = (writer: Writer) => Node; export type CreateModelFunctionCreator = (contentUri: string) => Promise; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/DataToModelMechanism.ts b/packages/ckeditor5-coremedia-content-clipboard/src/DataToModelMechanism.ts index b74a5b114..109f75f10 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/DataToModelMechanism.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/DataToModelMechanism.ts @@ -1,8 +1,7 @@ -import { Editor } from "@ckeditor/ckeditor5-core"; import { ContentClipboardMarkerDataUtils, MarkerData } from "./ContentClipboardMarkerDataUtils"; import ContentInputDataCache, { ContentInputData } from "./ContentInputDataCache"; import { serviceAgent } from "@coremedia/service-agent"; -import { Writer, Node, Position, Range } from "@ckeditor/ckeditor5-engine"; +import { Editor, Writer, Node, Position, Range } from "ckeditor5"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import MarkerRepositionUtil from "./MarkerRepositionUtil"; @@ -15,7 +14,6 @@ import { } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; import { createContentImportServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ContentImportService"; import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common/src/Plugins"; - const UTILITY_NAME = "DataToModelMechanism"; /** @@ -68,7 +66,6 @@ export default class DataToModelMechanism { */ static triggerLoadAndWriteToModel(editor: Editor, pendingMarkerNames: string[], markerData: MarkerData): void { const logger = DataToModelMechanism.#logger; - const markerName: string = ContentClipboardMarkerDataUtils.toMarkerName( markerData.insertionId, markerData.itemIndex, @@ -102,7 +99,6 @@ export default class DataToModelMechanism { if (!response.externalUriInformation) { return Promise.reject("No content found and uri is not importable."); } - const contentImportService = await serviceAgent.fetchService(createContentImportServiceDescriptor()); if (response.externalUriInformation.contentUri) { //The external content has been imported previously. A content representation already exists. @@ -153,7 +149,6 @@ export default class DataToModelMechanism { if (fallbackFunction) { return fallbackFunction; } - return Promise.reject(new Error(`No function to create the model found for type: ${type}`)); } @@ -231,13 +226,11 @@ export default class DataToModelMechanism { ContentInputDataCache.removeData(marker.name); return; } - let insertPosition = markerPosition; // Parent Check: Required precondition for split(). if (!markerPosition.isAtStart && !contentInputData.itemContext.isInline && markerPosition.parent?.parent) { insertPosition = writer.split(markerPosition).range.end; } - const range = writer.model.insertContent(item, insertPosition); DataToModelMechanism.#applyAttributes(writer, [range], contentInputData.insertionContext.selectedAttributes); @@ -254,10 +247,14 @@ export default class DataToModelMechanism { } MarkerRepositionUtil.repositionMarkers(editor, markerData, markerPosition, finalAfterInsertPosition); }); - - editor.model.enqueueChange({ isUndoable: false }, (writer: Writer): void => { - writer.removeSelectionAttribute("linkHref"); - }); + editor.model.enqueueChange( + { + isUndoable: false, + }, + (writer: Writer): void => { + writer.removeSelectionAttribute("linkHref"); + }, + ); DataToModelMechanism.#markerCleanup(editor, pendingMarkerNames, markerData); } @@ -270,19 +267,23 @@ export default class DataToModelMechanism { * @param markerData - the markerData object */ static #markerCleanup(editor: Editor, pendingMarkerNames: string[], markerData: MarkerData): void { - editor.model.enqueueChange({ isUndoable: false }, (writer: Writer): void => { - const marker = writer.model.markers.get(ContentClipboardMarkerDataUtils.toMarkerNameFromData(markerData)); - if (!marker) { - return; - } - writer.removeMarker(marker); - const actualIndex = pendingMarkerNames.indexOf(marker.name); - if (actualIndex >= 0) { - pendingMarkerNames.splice(actualIndex, 1); - } - - ContentInputDataCache.removeData(marker.name); - }); + editor.model.enqueueChange( + { + isUndoable: false, + }, + (writer: Writer): void => { + const marker = writer.model.markers.get(ContentClipboardMarkerDataUtils.toMarkerNameFromData(markerData)); + if (!marker) { + return; + } + writer.removeMarker(marker); + const actualIndex = pendingMarkerNames.indexOf(marker.name); + if (actualIndex >= 0) { + pendingMarkerNames.splice(actualIndex, 1); + } + ContentInputDataCache.removeData(marker.name); + }, + ); } /** diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/MarkerRepositionUtil.ts b/packages/ckeditor5-coremedia-content-clipboard/src/MarkerRepositionUtil.ts index 2f3344211..90c272d0a 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/MarkerRepositionUtil.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/MarkerRepositionUtil.ts @@ -1,8 +1,6 @@ -import { Editor } from "@ckeditor/ckeditor5-core"; import { ContentClipboardMarkerDataUtils, MarkerData } from "./ContentClipboardMarkerDataUtils"; -import { Position as ModelPosition, Writer } from "@ckeditor/ckeditor5-engine"; +import { Editor, Position as ModelPosition, Writer } from "ckeditor5"; import ContentInputDataCache from "./ContentInputDataCache"; - type MarkerFilterFunction = (markerData: MarkerData, otherMarkerData: MarkerData) => boolean; // eslint-disable-next-line @typescript-eslint/no-extraneous-class @@ -16,17 +14,14 @@ export default class MarkerRepositionUtil { MarkerRepositionUtil.#moveMarkerForNextItemsToTheRight(editor, afterItemPosition, markerData); MarkerRepositionUtil.#moveMarkerForPreviousItemsToLeft(editor, beforeItemPosition, markerData); } - static #moveMarkerForPreviousItemsToLeft(editor: Editor, beforeItemPosition: ModelPosition, markerData: MarkerData) { const markers: MarkerData[] = MarkerRepositionUtil.#findMarkers( editor, markerData, MarkerRepositionUtil.#markerBeforeFilterPredicate, ); - MarkerRepositionUtil.#moveMarkersTo(editor, markers, beforeItemPosition); } - static #moveMarkerForNextItemsToTheRight(editor: Editor, afterItemPosition: ModelPosition, markerData: MarkerData) { const markers: MarkerData[] = MarkerRepositionUtil.#findMarkers( editor, @@ -35,25 +30,21 @@ export default class MarkerRepositionUtil { ); MarkerRepositionUtil.#moveMarkersTo(editor, markers, afterItemPosition); } - static #findMarkers(editor: Editor, markerData: MarkerData, filterFunction: MarkerFilterFunction): MarkerData[] { const marker = editor.model.markers.get(ContentClipboardMarkerDataUtils.toMarkerNameFromData(markerData)); if (!marker) { return []; } const markersAtSamePosition = MarkerRepositionUtil.#markersAtPosition(editor, marker.getStart()); - return markersAtSamePosition.filter((otherMarkerData: MarkerData): boolean => filterFunction(markerData, otherMarkerData), ); } - static #markersAtPosition(editor: Editor, position: ModelPosition): MarkerData[] { return Array.from(editor.model.markers.getMarkersGroup(ContentClipboardMarkerDataUtils.CONTENT_INPUT_MARKER_PREFIX)) .filter((value) => value.getStart().isEqual(position)) .map((value) => ContentClipboardMarkerDataUtils.splitMarkerName(value.name)); } - static #moveMarkersTo(editor: Editor, markerData: MarkerData[], position: ModelPosition): void { markerData.forEach((moveMarkerData: MarkerData) => { //Each Marker has its own batch, so everything is executed in one step, and in the end, everything is one undo/redo step. @@ -64,13 +55,19 @@ export default class MarkerRepositionUtil { if (!currentData) { return; } - editor.model.enqueueChange({ isUndoable: false }, (writer: Writer): void => { - const newRange = writer.createRange(position, position); - writer.updateMarker(moveMarkerName, { range: newRange }); - }); + editor.model.enqueueChange( + { + isUndoable: false, + }, + (writer: Writer): void => { + const newRange = writer.createRange(position, position); + writer.updateMarker(moveMarkerName, { + range: newRange, + }); + }, + ); }); } - static readonly #markerBeforeFilterPredicate: MarkerFilterFunction = (markerData, otherMarkerData) => { const itemIndex = markerData.itemIndex; const insertionId = markerData.insertionId; @@ -86,7 +83,6 @@ export default class MarkerRepositionUtil { // items stay on the left of the marker. return otherMarkerData.insertionId > insertionId; }; - static readonly #markerAfterFilterPredicate: MarkerFilterFunction = (markerData, otherMarkerData) => { const itemIndex = markerData.itemIndex; const insertionId = markerData.insertionId; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/augmentation.ts b/packages/ckeditor5-coremedia-content-clipboard/src/augmentation.ts index 8b84bc8a7..2c35c02cd 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/augmentation.ts @@ -9,8 +9,7 @@ import type { PasteContentUI, UndoSupport, } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [ContentClipboard.pluginName]: ContentClipboard; [ContentClipboardEditing.pluginName]: ContentClipboardEditing; @@ -19,7 +18,6 @@ declare module "@ckeditor/ckeditor5-core" { [PasteContentUI.pluginName]: ContentClipboardEditing; [UndoSupport.pluginName]: UndoSupport; } - interface CommandsMap { [PasteContentEditing.pasteContentCommand]: PasteContentCommand; } diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/converters.ts b/packages/ckeditor5-coremedia-content-clipboard/src/converters.ts index 247aa5de0..5a41c4177 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/converters.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/converters.ts @@ -1,17 +1,14 @@ /* eslint no-null/no-null: off */ -import { EventInfo } from "@ckeditor/ckeditor5-utils"; -import { DowncastConversionApi } from "@ckeditor/ckeditor5-engine/src/conversion/downcastdispatcher"; + import ContentInputDataCache from "./ContentInputDataCache"; import { ContentClipboardMarkerDataUtils, MarkerData } from "./ContentClipboardMarkerDataUtils"; -import { Item as ModelItem, Range as ModelRange } from "@ckeditor/ckeditor5-engine"; - +import { EventInfo, DowncastConversionApi, Item as ModelItem, Range as ModelRange } from "ckeditor5"; export interface AddMarkerEventData { markerName: string; range?: ModelRange; markerRange: ModelRange; item: ModelItem; } - export interface RemoveMarkerEventData { markerName: string; markerRange: ModelRange; @@ -61,12 +58,13 @@ export const addContentMarkerConversion = if (contentInputData.itemContext.isInline) { loadMaskClasses.push("cm-load-mask--inline"); } - const viewContainer = conversionApi.writer.createUIElement("div", { class: loadMaskClasses.join(" ") }); + const viewContainer = conversionApi.writer.createUIElement("div", { + class: loadMaskClasses.join(" "), + }); conversionApi.writer.insert(viewPosition, viewContainer); conversionApi.mapper.bindElementToMarker(viewContainer, data.markerName); const markerData = ContentClipboardMarkerDataUtils.splitMarkerName(data.markerName); callback(markerData); - evt.stop(); }; @@ -95,8 +93,6 @@ export const removeContentMarkerConversion = ( const range = conversionApi.writer.createRangeOn(element); conversionApi.writer.clear(range, element); }); - conversionApi.writer.clearClonedElementsGroup(data.markerName); - evt.stop(); }; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/integrations/Undo.ts b/packages/ckeditor5-coremedia-content-clipboard/src/integrations/Undo.ts index a31c2c56c..624b97d9d 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/integrations/Undo.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/integrations/Undo.ts @@ -1,5 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; -import { UndoEditing } from "@ckeditor/ckeditor5-undo"; +import { Plugin, UndoEditing } from "ckeditor5"; import { CommandHandler, disableCommand, @@ -8,7 +7,6 @@ import { optionalCommandNotFound, } from "@coremedia/ckeditor5-core-common/src/Commands"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; - const PLUGIN_NAME = "CoreMediaContentClipboardUndoSupport"; /** @@ -25,14 +23,10 @@ export class UndoSupport extends Plugin { * Flag to signal, if supported plugin is available or not. */ #enabled = false; - init(): void { const { editor } = this; - const initInformation = reportInitStart(this); - this.#enabled = editor.plugins.has(UndoEditing); - reportInitEnd(initInformation); } @@ -55,7 +49,6 @@ export class UndoSupport extends Plugin { } this.#applyToCommands(UndoSupport.#enableHandler); } - #applyToCommands(handler: CommandHandler): void { const { editor } = this; const commandNames = UndoSupport.#commandNames; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentCommand.ts b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentCommand.ts index a2f4d6d88..7f9638650 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentCommand.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentCommand.ts @@ -1,4 +1,4 @@ -import { Command, Editor } from "@ckeditor/ckeditor5-core"; +import { Command, Editor } from "ckeditor5"; import { serviceAgent } from "@coremedia/service-agent"; import { createClipboardServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ClipboardServiceDesriptor"; import ClipboardService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ClipboardService"; @@ -19,7 +19,6 @@ import { toContentUris } from "@coremedia/ckeditor5-coremedia-studio-integration export class PasteContentCommand extends Command { readonly #logger = LoggerProvider.getLogger("PasteContentCommand"); readonly #serviceRegisteredSubscription: Pick | null; - constructor(editor: Editor) { super(editor); this.isEnabled = false; @@ -39,17 +38,14 @@ export class PasteContentCommand extends Command { this.#logger.warn("Initialization of PasteContentCommand failed. ", reason); }); }; - this.#serviceRegisteredSubscription = serviceAgent .observeServices(createClipboardServiceDescriptor()) .subscribe(onServiceRegisteredFunction); } - async #initializeWithClipboardService(clipboardService: ClipboardService): Promise { const initialItems = await clipboardService.getItems(); // noinspection JSConstantReassignment bad types this.isEnabled = await PasteContentCommand.calculateEnabledState(initialItems); - clipboardService.observe_items().subscribe((itemRepresentations: ClipboardItemRepresentation[]) => { // noinspection JSConstantReassignment bad types PasteContentCommand.calculateEnabledState(itemRepresentations) @@ -66,7 +62,6 @@ export class PasteContentCommand extends Command { // Empty implementation because the overridden implementation always sets isEnabled=true // eslint-disable-next-line @typescript-eslint/no-empty-function override refresh(): void {} - override execute(): void { serviceAgent .fetchService(createClipboardServiceDescriptor()) @@ -83,7 +78,6 @@ export class PasteContentCommand extends Command { this.#logger.warn("Error occurred during insertion of markers for contents", reason); }); } - static async calculateEnabledState(itemRepresentations: ClipboardItemRepresentation[]): Promise { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call const uris: string[] = await toContentUris(itemRepresentations); @@ -94,11 +88,9 @@ export class PasteContentCommand extends Command { if (!everyUriIsValid) { return false; } - const pastableStates = await PasteContentCommand.resolvePastableStates(uris); return pastableStates.every((isPastable) => isPastable); } - static async resolvePastableStates(uris: string[]): Promise { const richtextConfigurationService = await serviceAgent.fetchService( createRichtextConfigurationServiceDescriptor(), @@ -106,7 +98,6 @@ export class PasteContentCommand extends Command { const pastableStatePromises: Promise[] = uris.map(async (uri): Promise => { const isLinkable = await richtextConfigurationService.hasLinkableType(uri); const isEmbeddable = await richtextConfigurationService.isEmbeddableType(uri); - return isLinkable || isEmbeddable; }); return Promise.all(pastableStatePromises); diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentEditing.ts b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentEditing.ts index 6e7d4cba7..b2bd8dfe4 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentEditing.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentEditing.ts @@ -1,11 +1,9 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { PasteContentCommand } from "./PasteContentCommand"; - export default class PasteContentEditing extends Plugin { static readonly pluginName = "pasteContentEditing"; static readonly pasteContentCommand = "pasteContentCommand"; - init() { const initInformation = reportInitStart(this); this.editor.commands.add(PasteContentEditing.pasteContentCommand, new PasteContentCommand(this.editor)); diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentPlugin.ts b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentPlugin.ts index 286cc8419..9deca1a05 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentPlugin.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentPlugin.ts @@ -1,5 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; - +import { Plugin } from "ckeditor5"; import PasteContentUI from "./PasteContentUI"; import PasteContentEditing from "./PasteContentEditing"; @@ -10,7 +9,6 @@ import PasteContentEditing from "./PasteContentEditing"; */ export default class PasteContentPlugin extends Plugin { static readonly pluginName = "pasteContent"; - static get requires() { return [PasteContentEditing, PasteContentUI]; } diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts index 9c7b63175..60d6f2f4e 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts @@ -1,12 +1,9 @@ -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; -import { ButtonView } from "@ckeditor/ckeditor5-ui"; +import { Plugin, Editor, ButtonView } from "ckeditor5"; import pasteIcon from "../../theme/icons/paste.svg"; import "../lang/paste"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; - export default class PasteContentUI extends Plugin { static readonly pluginName = "pasteContentUI"; - init() { const initInformation = reportInitStart(this); const editor: Editor = this.editor; @@ -15,18 +12,14 @@ export default class PasteContentUI extends Plugin { if (!pasteContentCommand) { throw new Error('The command "pasteContent" is required.'); } - const PASTE_KEYSTROKE = "Ctrl+Shift+P"; - editor.keystrokes.set(PASTE_KEYSTROKE, (keyEvtData, cancel) => { // Prevent focusing the search bar in FF, Chrome and Edge. See https://github.com/ckeditor/ckeditor5/issues/4811. cancel(); - if (pasteContentCommand.isEnabled) { pasteContentCommand.execute(); } }); - editor.ui.componentFactory.add("pasteContent", () => { const button = new ButtonView(); button.label = t("Paste Content"); @@ -35,11 +28,9 @@ export default class PasteContentUI extends Plugin { button.keystroke = PASTE_KEYSTROKE; button.class = "paste-content-button"; button.bind("isEnabled").to(pasteContentCommand, "isEnabled"); - this.listenTo(button, "execute", () => { pasteContentCommand.execute(); }); - return button; }); reportInitEnd(initInformation); diff --git a/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts b/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts index ea661cb9e..5e78fe1e4 100644 --- a/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts +++ b/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts @@ -1,4 +1,4 @@ -import { Command, Editor } from "@ckeditor/ckeditor5-core"; +import { Command, Editor } from "ckeditor5"; import { isModelUriPath, isUriPath, @@ -70,10 +70,8 @@ export class OpenInTabCommand extends Command { logger.debug(`Disabled command, as URI Path is unavailable for: ${valueFromModel}`); return; } - this.isEnabled = defaultEnabled; logger.debug(`Enabled state set to default: ${defaultEnabled}`); - void canBeOpenedInTab(uriPath).then((canBeOpened): void => { logger.debug(`Updating enabled state for ${uriPath} to: ${canBeOpened}`); this.isEnabled = canBeOpened; @@ -115,7 +113,6 @@ export class OpenInTabCommand extends Command { actualUriPaths.push(actualValue); logger.debug(`URI path used from model state: ${actualValue}`); } - return openEntitiesInTabs(...actualUriPaths); } @@ -138,7 +135,6 @@ export class OpenInTabCommand extends Command { if (!isUriPath(contentUriToParse) && !isModelUriPath(contentUriToParse)) { return undefined; } - const contentUriAndPropertiesPart = contentUriToParse.split("#"); return requireContentUriPath(contentUriAndPropertiesPart[0]); } diff --git a/packages/ckeditor5-coremedia-differencing/src/Differencing.ts b/packages/ckeditor5-coremedia-differencing/src/Differencing.ts index 4ed6abde5..e6a3b1b4f 100644 --- a/packages/ckeditor5-coremedia-differencing/src/Differencing.ts +++ b/packages/ckeditor5-coremedia-differencing/src/Differencing.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import { ImageElementSupport } from "./integrations/Image"; import { HtmlImageElementSupport } from "./integrations/HtmlSupportImage"; import { XDIFF_ATTRIBUTES, XDIFF_BREAK_ELEMENT_CONFIG, XDIFF_SPAN_ELEMENT_CONFIG } from "./Xdiff"; @@ -43,13 +43,10 @@ export default class Differencing extends Plugin { * can not be deactivated. Activation can not be executed twice. */ #isActivated = false; - init(): void { const logger = Differencing.#logger; const initInformation = reportInitStart(this); - logger.debug("Differencing plugin available. May be activated by invoking differencing.activateDifferencing()."); - reportInitEnd(initInformation); } @@ -65,37 +62,29 @@ export default class Differencing extends Plugin { */ activateDifferencing(): void { const logger = Differencing.#logger; - if (this.#isActivated) { return; } - this.#activate(); - this.#isActivated = true; - logger.debug("Differencing got activated."); } - #activate(): void { const editor = this.editor; const { model, conversion } = editor; const { schema } = model; - schema.register("xdiffSpan", { allowWhere: "$inlineObject", allowContentOf: ["$block", "$container"], allowAttributes: Object.values(XDIFF_ATTRIBUTES), isInline: true, }); - schema.register("xdiffBreak", { allowWhere: "softBreak", allowChildren: [], allowAttributes: Object.values(XDIFF_ATTRIBUTES), isInline: true, }); - conversion.for("upcast").elementToElement(XDIFF_SPAN_ELEMENT_CONFIG); conversion.for("upcast").elementToElement(XDIFF_BREAK_ELEMENT_CONFIG); @@ -107,7 +96,6 @@ export default class Differencing extends Plugin { */ conversion.for("downcast").elementToElement(XDIFF_SPAN_ELEMENT_CONFIG); - conversion.for("downcast").elementToElement({ ...XDIFF_BREAK_ELEMENT_CONFIG, // DevNote: Empty Element prevents, for example, filler elements to be @@ -122,7 +110,10 @@ export default class Differencing extends Plugin { * do not require extra clean-up on toData-processing. */ Object.entries(XDIFF_ATTRIBUTES).forEach(([view, model]) => { - const config = { view, model }; + const config = { + view, + model, + }; conversion.for("upcast").attributeToAttribute(config); conversion.for("downcast").attributeToAttribute(config); }); diff --git a/packages/ckeditor5-coremedia-differencing/src/PluginIntegrationHook.ts b/packages/ckeditor5-coremedia-differencing/src/PluginIntegrationHook.ts index a5413e9d7..4c2025e30 100644 --- a/packages/ckeditor5-coremedia-differencing/src/PluginIntegrationHook.ts +++ b/packages/ckeditor5-coremedia-differencing/src/PluginIntegrationHook.ts @@ -1,5 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; -import { priorities } from "@ckeditor/ckeditor5-utils"; +import { Plugin, priorities } from "ckeditor5"; import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; @@ -16,7 +15,6 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common export class PluginIntegrationHook extends Plugin { static readonly pluginName = "PluginIntegrationHook"; static readonly #logger: Logger = LoggerProvider.getLogger(PluginIntegrationHook.pluginName); - init(): void { const initInformation = reportInitStart(this); this.#registerElementsAfterInit(); @@ -47,7 +45,6 @@ export class PluginIntegrationHook extends Plugin { }, ); } - #firePluginRegistration(state: string) { this.fire(`plugin-integration:${state}`); } diff --git a/packages/ckeditor5-coremedia-differencing/src/augmentation.ts b/packages/ckeditor5-coremedia-differencing/src/augmentation.ts index 44a2b2878..81aacde22 100644 --- a/packages/ckeditor5-coremedia-differencing/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-differencing/src/augmentation.ts @@ -6,8 +6,7 @@ import type { PluginIntegrationHook, RichTextDataProcessorIntegration, } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [Differencing.pluginName]: Differencing; [HtmlImageElementSupport.pluginName]: HtmlImageElementSupport; diff --git a/packages/ckeditor5-coremedia-differencing/src/integrations/HtmlSupportImage.ts b/packages/ckeditor5-coremedia-differencing/src/integrations/HtmlSupportImage.ts index 0a79aed1b..6bb3f1e42 100644 --- a/packages/ckeditor5-coremedia-differencing/src/integrations/HtmlSupportImage.ts +++ b/packages/ckeditor5-coremedia-differencing/src/integrations/HtmlSupportImage.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import { XDIFF_ATTRIBUTES } from "../Xdiff"; import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; @@ -14,23 +14,17 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common export class HtmlImageElementSupport extends Plugin { static readonly pluginName = "DifferencingHtmlImageElementSupport"; static readonly requires = []; - static readonly #logger: Logger = LoggerProvider.getLogger(HtmlImageElementSupport.pluginName); - init(): void { const initInformation = reportInitStart(this); - this.#init(); - reportInitEnd(initInformation); } - #init(): void { const { editor } = this; const { model } = editor; const { schema } = model; const logger = HtmlImageElementSupport.#logger; - if (editor.plugins.has("ImageInlineEditing") || editor.plugins.has("ImageBlockEditing")) { logger.debug(`Skipping initialization, as corresponding "real" image plugins are available.`); return; @@ -39,7 +33,6 @@ export class HtmlImageElementSupport extends Plugin { logger.debug(`Skipping initialization, as GHS' DataSchema plugin is unavailable.`); return; } - logger.debug(`Registering "checkAttribute" schema handler to allow "xdiff:changetype" on "htmlImg".`); /* @@ -54,7 +47,6 @@ export class HtmlImageElementSupport extends Plugin { (evt, args: [string, string]) => { const context = args[0]; const attributeName = args[1]; - if (context.endsWith("htmlImg") && attributeName === XDIFF_ATTRIBUTES["xdiff:changetype"]) { // Prevent next listeners from being called. evt.stop(); @@ -62,7 +54,9 @@ export class HtmlImageElementSupport extends Plugin { evt.return = true; } }, - { priority: "high" }, + { + priority: "high", + }, ); } } diff --git a/packages/ckeditor5-coremedia-differencing/src/integrations/Image.ts b/packages/ckeditor5-coremedia-differencing/src/integrations/Image.ts index 6f99a7229..49be1f294 100644 --- a/packages/ckeditor5-coremedia-differencing/src/integrations/Image.ts +++ b/packages/ckeditor5-coremedia-differencing/src/integrations/Image.ts @@ -1,6 +1,5 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; import { PluginIntegrationHook } from "../PluginIntegrationHook"; -import { Model } from "@ckeditor/ckeditor5-engine"; +import { Plugin, Model } from "ckeditor5"; import { XDIFF_ATTRIBUTES } from "../Xdiff"; import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; @@ -16,17 +15,12 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common export class ImageElementSupport extends Plugin { static readonly pluginName = "DifferencingImageElementSupport"; static readonly requires = [PluginIntegrationHook]; - static readonly #logger: Logger = LoggerProvider.getLogger(ImageElementSupport.pluginName); - init(): void { const initInformation = reportInitStart(this); - this.#init(); - reportInitEnd(initInformation); } - #init(): void { const { editor } = this; const { model, plugins } = editor; @@ -38,11 +32,8 @@ export class ImageElementSupport extends Plugin { logger.debug("Skipping Image Element Integration. Corresponding plugins unavailable."); return; } - const pluginIntegrationHook = plugins.get(PluginIntegrationHook); - logger.debug("Waiting for plugin-integration hook to be ready."); - pluginIntegrationHook.on("plugin-integration:ready", () => { ["imageBlock", "imageInline"].forEach((itemName): void => { if (schema.isRegistered(itemName)) { diff --git a/packages/ckeditor5-coremedia-differencing/src/integrations/RichTextDataProcessorIntegration.ts b/packages/ckeditor5-coremedia-differencing/src/integrations/RichTextDataProcessorIntegration.ts index 03a3342cd..74dd50faa 100644 --- a/packages/ckeditor5-coremedia-differencing/src/integrations/RichTextDataProcessorIntegration.ts +++ b/packages/ckeditor5-coremedia-differencing/src/integrations/RichTextDataProcessorIntegration.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import { isRichTextDataProcessor } from "@coremedia/ckeditor5-coremedia-richtext/src/RichTextDataProcessor"; import { xDiffElements } from "./XDiffElements"; @@ -23,7 +23,6 @@ export class RichTextDataProcessorIntegration extends Plugin { afterInit(): void { const { editor } = this; const { processor } = editor.data; - if (isRichTextDataProcessor(processor)) { processor.addRule(xDiffElements); } diff --git a/packages/ckeditor5-coremedia-images/src/ContentImageClipboardPlugin.ts b/packages/ckeditor5-coremedia-images/src/ContentImageClipboardPlugin.ts index 1d3920324..22ef9fdd1 100644 --- a/packages/ckeditor5-coremedia-images/src/ContentImageClipboardPlugin.ts +++ b/packages/ckeditor5-coremedia-images/src/ContentImageClipboardPlugin.ts @@ -1,5 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; -import { Writer, Node } from "@ckeditor/ckeditor5-engine"; +import { Plugin, Writer, Node } from "ckeditor5"; import { createRichtextConfigurationServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/RichtextConfigurationServiceDescriptor"; import { serviceAgent } from "@coremedia/service-agent"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; @@ -10,9 +9,7 @@ import { } from "@coremedia/ckeditor5-coremedia-content-clipboard/src/ContentToModelRegistry"; import ContentClipboardEditing from "@coremedia/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing"; import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; - type CreateImageModelFunction = (blobUriPath: string) => CreateModelFunction; - const createImageModelFunctionCreator: CreateModelFunctionCreator = async ( contentUri: string, ): Promise => { @@ -20,7 +17,6 @@ const createImageModelFunctionCreator: CreateModelFunctionCreator = async ( const blobUriPath = await configurationService.resolveBlobPropertyReference(contentUri); return createImageModelFunction(blobUriPath); }; - const createImageModelFunction: CreateImageModelFunction = (blobUriPath: string): CreateModelFunction => (writer: Writer): Node => @@ -42,17 +38,13 @@ const createImageModelFunction: CreateImageModelFunction = export default class ContentImageClipboardPlugin extends Plugin { static readonly pluginName = "ContentImageClipboardPlugin" as const; static readonly #logger: Logger = LoggerProvider.getLogger(ContentImageClipboardPlugin.pluginName); - init(): void { const logger = ContentImageClipboardPlugin.#logger; const { editor } = this; - const initInformation = reportInitStart(this); - getOptionalPlugin(editor, ContentClipboardEditing, (pluginName) => logger.warn(`Recommended plugin ${pluginName} not found. Creating content images from clipboard not activated.`), )?.registerToModelFunction("image", createImageModelFunctionCreator); - reportInitEnd(initInformation); } } diff --git a/packages/ckeditor5-coremedia-images/src/ContentImageEditingPlugin.ts b/packages/ckeditor5-coremedia-images/src/ContentImageEditingPlugin.ts index 6a96217d6..404277c19 100644 --- a/packages/ckeditor5-coremedia-images/src/ContentImageEditingPlugin.ts +++ b/packages/ckeditor5-coremedia-images/src/ContentImageEditingPlugin.ts @@ -1,9 +1,8 @@ -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; import { editingDowncastXlinkHref, preventUpcastImageSrc } from "./converters"; // ImageUtils: See ckeditor/ckeditor5#12027. -import ImageUtils from "@ckeditor/ckeditor5-image/src/imageutils"; + // ImageInline: See ckeditor/ckeditor5#12027. -import ImageInline from "@ckeditor/ckeditor5-image/src/imageinline"; +import { Plugin, Editor, ImageUtils, ImageInline } from "ckeditor5"; import ModelBoundSubscriptionPlugin from "./ModelBoundSubscriptionPlugin"; import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; @@ -29,14 +28,11 @@ export default class ContentImageEditingPlugin extends Plugin { */ static readonly openImageInTab = openImageInTabCommandName; static readonly #logger: Logger = LoggerProvider.getLogger(ContentImageEditingPlugin.pluginName); - static readonly IMAGE_INLINE_MODEL_ELEMENT_NAME = "imageInline"; static readonly IMAGE_INLINE_VIEW_ELEMENT_NAME = "img"; static readonly XLINK_HREF_MODEL_ATTRIBUTE_NAME = "xlink-href"; static readonly XLINK_HREF_DATA_ATTRIBUTE_NAME = "data-xlink-href"; - static readonly requires = [ImageInline, ImageUtils, ModelBoundSubscriptionPlugin]; - init(): void { const editor = this.editor; const initInformation = reportInitStart(this); @@ -66,7 +62,6 @@ export default class ContentImageEditingPlugin extends Plugin { // If not prevented, the src-attribute from GRS would be written to the model. this.editor.conversion.for("upcast").add(preventUpcastImageSrc()); } - static #setupXlinkHrefConversion(editor: Editor, modelAttributeName: string, dataAttributeName: string): void { ContentImageEditingPlugin.#setupXlinkHrefConversionDowncast( editor, @@ -76,10 +71,12 @@ export default class ContentImageEditingPlugin extends Plugin { ); editor.conversion.for("upcast").attributeToAttribute({ model: modelAttributeName, - view: { name: ContentImageEditingPlugin.IMAGE_INLINE_VIEW_ELEMENT_NAME, key: dataAttributeName }, + view: { + name: ContentImageEditingPlugin.IMAGE_INLINE_VIEW_ELEMENT_NAME, + key: dataAttributeName, + }, }); } - static #setupXlinkHrefConversionDowncast( editor: Editor, modelElementName: "imageInline", diff --git a/packages/ckeditor5-coremedia-images/src/ContentImagePlugin.ts b/packages/ckeditor5-coremedia-images/src/ContentImagePlugin.ts index b256019f4..272d57568 100644 --- a/packages/ckeditor5-coremedia-images/src/ContentImagePlugin.ts +++ b/packages/ckeditor5-coremedia-images/src/ContentImagePlugin.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import ContentImageEditingPlugin from "./ContentImageEditingPlugin"; import ContentImageClipboardPlugin from "./ContentImageClipboardPlugin"; import ContentImageOpenInTabUI from "./contentImageOpenInTab/ContentImageOpenInTabUI"; @@ -9,6 +9,5 @@ import ContentImageOpenInTabUI from "./contentImageOpenInTab/ContentImageOpenInT */ export default class ContentImagePlugin extends Plugin { static readonly pluginName = "ContentImagePlugin" as const; - static readonly requires = [ContentImageOpenInTabUI, ContentImageEditingPlugin, ContentImageClipboardPlugin]; } diff --git a/packages/ckeditor5-coremedia-images/src/ModelBoundSubscriptionPlugin.ts b/packages/ckeditor5-coremedia-images/src/ModelBoundSubscriptionPlugin.ts index fa5f7f7b4..7323a350e 100644 --- a/packages/ckeditor5-coremedia-images/src/ModelBoundSubscriptionPlugin.ts +++ b/packages/ckeditor5-coremedia-images/src/ModelBoundSubscriptionPlugin.ts @@ -1,8 +1,6 @@ /* eslint no-null/no-null: off */ -import { Plugin } from "@ckeditor/ckeditor5-core"; -import { Element as ModelElement, Writer } from "@ckeditor/ckeditor5-engine"; -import { DiffItemInsert } from "@ckeditor/ckeditor5-engine/src/model/differ"; +import { Plugin, Element as ModelElement, Writer, DiffItemInsert } from "ckeditor5"; import SubscriptionCache from "./SubscriptionCache"; import { Subscription } from "rxjs"; @@ -30,7 +28,6 @@ export default class ModelBoundSubscriptionPlugin extends Plugin { static readonly ID_MODEL_ATTRIBUTE_NAME = "cmSubscriptionId"; static readonly #SUBSCRIPTION_CACHE: SubscriptionCache = new SubscriptionCache(); static readonly PLUGIN_NAME = "ModelBoundSubscriptionPlugin"; - static readonly pluginName = ModelBoundSubscriptionPlugin.PLUGIN_NAME; /** @@ -91,13 +88,14 @@ export default class ModelBoundSubscriptionPlugin extends Plugin { */ #unsubscribeOnElementRemoval(): void { this.editor.model.document.on("change:data", () => { - const changes = this.editor.model.document.differ.getChanges({ includeChangesInGraveyard: true }); + const changes = this.editor.model.document.differ.getChanges({ + includeChangesInGraveyard: true, + }); const insertsOnGraveyard = changes .filter((change) => change.type === "insert") // an insert on the graveyard means a removal on the root document .map((value) => value as DiffItemInsert) .filter(ModelBoundSubscriptionPlugin.#isOnGraveyard); const allRemovedElementsWithSubscriptions: ModelElement[] = []; - for (const entry of insertsOnGraveyard) { const nodeAfter = entry.position.nodeAfter; if (nodeAfter?.is("element")) { @@ -132,16 +130,20 @@ export default class ModelBoundSubscriptionPlugin extends Plugin { .map((diffItem) => diffItem.position.nodeAfter) .filter((value) => value?.is("element")) .map((value) => value as ModelElement); - const insertedRegisteredElements: ModelElement[] = []; for (const insertion of insertions) { insertedRegisteredElements.push(...ModelBoundSubscriptionPlugin.#findRegisteredModelElements(insertion)); } - this.editor.model.enqueueChange({ isUndoable: false }, (writer: Writer) => { - for (const insertedElement of insertedRegisteredElements) { - writer.setAttribute(ModelBoundSubscriptionPlugin.ID_MODEL_ATTRIBUTE_NAME, Math.random(), insertedElement); - } - }); + this.editor.model.enqueueChange( + { + isUndoable: false, + }, + (writer: Writer) => { + for (const insertedElement of insertedRegisteredElements) { + writer.setAttribute(ModelBoundSubscriptionPlugin.ID_MODEL_ATTRIBUTE_NAME, Math.random(), insertedElement); + } + }, + ); }); } @@ -157,7 +159,6 @@ export default class ModelBoundSubscriptionPlugin extends Plugin { } return false; } - static #recursiveSearch(element: ModelElement): ModelElement[] { if (ModelBoundSubscriptionPlugin.#isSubscribedModel(element)) { return [element]; @@ -171,7 +172,6 @@ export default class ModelBoundSubscriptionPlugin extends Plugin { } return modelElements; } - static #findRegisteredModelElements(element: ModelElement): ModelElement[] { if (ModelBoundSubscriptionPlugin.#isSubscribedModel(element)) { return [element]; diff --git a/packages/ckeditor5-coremedia-images/src/augmentation.ts b/packages/ckeditor5-coremedia-images/src/augmentation.ts index 253ccb756..6ad766452 100644 --- a/packages/ckeditor5-coremedia-images/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-images/src/augmentation.ts @@ -8,8 +8,7 @@ import type { ModelBoundSubscriptionPlugin, OpenImageInTabCommand, } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [ContentImageClipboardPlugin.pluginName]: ContentImageClipboardPlugin; [ContentImageEditingPlugin.pluginName]: ContentImageEditingPlugin; diff --git a/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/ContentImageOpenInTabUI.ts b/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/ContentImageOpenInTabUI.ts index 8e4e91d4a..c6fe860f4 100644 --- a/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/ContentImageOpenInTabUI.ts +++ b/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/ContentImageOpenInTabUI.ts @@ -1,8 +1,6 @@ -import { ButtonView } from "@ckeditor/ckeditor5-ui"; -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; +import { ButtonView, Plugin, Editor } from "ckeditor5"; import openInTabIcon from "../../theme/icons/openInTab.svg"; import "../lang/contentImageOpenInTab"; - import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import ContentImageEditingPlugin from "../ContentImageEditingPlugin"; import { executeOpenImageInTabCommand, requireOpenImageInTabCommand } from "./OpenImageInTabCommand"; @@ -18,28 +16,21 @@ import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvi */ export default class ContentImageOpenInTabUI extends Plugin { static readonly pluginName = "ContentImageOpenInTabUI" as const; - static readonly requires = [ContentImageEditingPlugin]; - static readonly #logger: Logger = LoggerProvider.getLogger(ContentImageOpenInTabUI.pluginName); - init(): void { const initInformation = reportInitStart(this); this.#createToolbarLinkImageButton(this.editor); reportInitEnd(initInformation); } - #createToolbarLinkImageButton(editor: Editor): void { const logger = ContentImageOpenInTabUI.#logger; const { ui } = editor; const t = editor.t; - const OPEN_IN_TAB_KEYSTROKE = "Ctrl+Shift+O"; - editor.keystrokes.set(OPEN_IN_TAB_KEYSTROKE, (keyEvtData, cancel) => { // Prevent focusing the search bar in FF, Chrome and Edge. See https://github.com/ckeditor/ckeditor5/issues/4811. cancel(); - void executeOpenImageInTabCommand(editor) ?.then((result) => { logger.debug("Result for OpenImageInTabCommand by keystroke:", result); @@ -48,10 +39,8 @@ export default class ContentImageOpenInTabUI extends Plugin { logger.warn("Failed executing OpenImageInTabCommand invoked by keystroke:", reason); }); }); - ui.componentFactory.add("contentImageOpenInTab", (locale) => { const button = new ButtonView(locale); - button.set({ isEnabled: true, label: t("Open in tab"), @@ -59,9 +48,7 @@ export default class ContentImageOpenInTabUI extends Plugin { keystroke: OPEN_IN_TAB_KEYSTROKE, tooltip: true, }); - button.bind("isEnabled").to(requireOpenImageInTabCommand(editor), "isEnabled"); - this.listenTo(button, "execute", () => { void executeOpenImageInTabCommand(editor) ?.then((result) => { diff --git a/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/OpenImageInTabCommand.ts b/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/OpenImageInTabCommand.ts index a0c45a143..b132380da 100644 --- a/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/OpenImageInTabCommand.ts +++ b/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/OpenImageInTabCommand.ts @@ -1,6 +1,5 @@ import { OpenInTabCommand } from "@coremedia/ckeditor5-coremedia-content/src/commands/OpenInTabCommand"; -import Editor from "@ckeditor/ckeditor5-core/src/editor/editor"; -import ImageUtils from "@ckeditor/ckeditor5-image/src/imageutils"; +import { Editor, ImageUtils } from "ckeditor5"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; @@ -15,7 +14,6 @@ export const openImageInTabCommandName = "openImageInTab"; */ export class OpenImageInTabCommand extends OpenInTabCommand { static readonly #logger = LoggerProvider.getLogger("OpenImageInTabCommand"); - override refresh() { const logger = OpenImageInTabCommand.#logger; const { editor } = this; diff --git a/packages/ckeditor5-coremedia-images/src/converters.ts b/packages/ckeditor5-coremedia-images/src/converters.ts index 46dc71319..2e1705f1e 100644 --- a/packages/ckeditor5-coremedia-images/src/converters.ts +++ b/packages/ckeditor5-coremedia-images/src/converters.ts @@ -1,13 +1,19 @@ /* eslint no-null/no-null: off */ -import UpcastDispatcher, { UpcastConversionApi } from "@ckeditor/ckeditor5-engine/src/conversion/upcastdispatcher"; -import { EventInfo } from "@ckeditor/ckeditor5-utils"; -import { DowncastDispatcher, ViewElement, DowncastWriter, Element as ModelElement } from "@ckeditor/ckeditor5-engine"; import { serviceAgent } from "@coremedia/service-agent"; import { createBlobDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/BlobDisplayServiceDescriptor"; import { InlinePreview } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/BlobDisplayService"; import { requireContentUriPath, UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { + UpcastDispatcher, + UpcastConversionApi, + EventInfo, + DowncastDispatcher, + ViewElement, + DowncastWriter, + Element as ModelElement, + Editor, +} from "ckeditor5"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { IMAGE_PLUGIN_NAME, IMAGE_SPINNER_CSS_CLASS, IMAGE_SPINNER_SVG } from "./constants"; import ModelBoundSubscriptionPlugin from "./ModelBoundSubscriptionPlugin"; @@ -15,9 +21,7 @@ import "../theme/loadmask.css"; import "./lang/contentimage"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common/src/Plugins"; - const LOGGER = LoggerProvider.getLogger(IMAGE_PLUGIN_NAME); - interface DowncastEventData { item: ModelElement; attributeOldValue: string | null; @@ -56,14 +60,18 @@ export const preventUpcastImageSrc = `element:img`, (evt: EventInfo, data, conversionApi: UpcastConversionApi) => { // eslint-disable-next-line - if (data.viewItem.hasAttribute("data-xlink-href")) { + if (data.viewItem.hasAttribute("data-xlink-href")) { // eslint-disable-next-line - conversionApi.consumable.consume(data.viewItem, { attributes: "src" }); + conversionApi.consumable.consume(data.viewItem, { + attributes: "src", + }); // eslint-disable-next-line - data.viewItem._removeAttribute("src"); + data.viewItem._removeAttribute("src"); } }, - { priority: "highest" }, + { + priority: "highest", + }, ); }; @@ -87,7 +95,6 @@ export const editingDowncastXlinkHref = onXlinkHrefEditingDowncast(editor, eventInfo, data, logger); }); }; - const onXlinkHrefEditingDowncast = ( editor: Editor, eventInfo: EventInfo, @@ -96,13 +103,10 @@ const onXlinkHrefEditingDowncast = ( ): void => { const spinnerPreviewAttributes = createSpinnerImagePreviewAttributes(editor); updateImagePreviewAttributes(editor, data.item, spinnerPreviewAttributes, true); - const xlinkHref = data.item.getAttribute("xlink-href"); - if (typeof xlinkHref !== "string") { throw new Error(`Unexpected type ${typeof xlinkHref} of attribute xlink-href (value: ${xlinkHref}).`); } - let uriPath: UriPath; try { uriPath = toUriPath(xlinkHref); @@ -113,7 +117,6 @@ const onXlinkHrefEditingDowncast = ( logger.debug("Cannot resolve valid uriPath from xlink-href attribute:", xlinkHref); return; } - const property: string = toProperty(xlinkHref); void serviceAgent .fetchService(createBlobDisplayServiceDescriptor()) @@ -122,20 +125,16 @@ const onXlinkHrefEditingDowncast = ( const subscription = inlinePreviewObservable.subscribe((inlinePreview) => { updateImagePreviewAttributes(editor, data.item, inlinePreview, false); }); - getOptionalPlugin(editor, ModelBoundSubscriptionPlugin)?.addSubscription(data.item, subscription); }); }; - const findImgTag = (editor: Editor, modelItem: ModelElement): ViewElement | null => { const toViewElement = editor.editing.mapper.toViewElement(modelItem); if (!toViewElement) { return null; } - return findViewChild(editor, toViewElement, "img"); }; - const updateImagePreviewAttributes = ( editor: Editor, modelElement: ModelElement, @@ -158,7 +157,6 @@ const updateImagePreviewAttributes = ( image.onload = () => writeImageToView(editor, inlinePreview, imgTag, withSpinnerClass); image.src = inlinePreview.thumbnailSrc; }; - const writeImageToView = ( editor: Editor, inlinePreview: InlinePreview, @@ -176,7 +174,6 @@ const writeImageToView = ( } else { writer.removeStyle("width", imgTag); } - if (withSpinnerClass) { writer.addClass(IMAGE_SPINNER_CSS_CLASS, imgTag); } else { @@ -184,21 +181,16 @@ const writeImageToView = ( } }); }; - const toUriPath = (xlinkHref: string): string => { const contentUriPart = xlinkHref.split("#")[0]; return requireContentUriPath(contentUriPart); }; - const toProperty = (xlinkHref: string): string => xlinkHref.split("#")[1]; - const findViewChild = (editor: Editor, viewElement: ViewElement, viewElementName: string): ViewElement | null => { const rangeInElement = editor.editing.view.createRangeIn(viewElement); const viewChildren = Array.from(rangeInElement.getItems()); - return viewChildren.find((item) => item.is("element", viewElementName)) as ViewElement; }; - const createSpinnerImagePreviewAttributes = (editor: Editor): InlinePreview => { const t = editor.locale.t; return { diff --git a/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkDefaultTargetsConfig.test.ts b/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkDefaultTargetsConfig.test.ts index f888a00ef..7d061fb0f 100644 --- a/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkDefaultTargetsConfig.test.ts +++ b/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkDefaultTargetsConfig.test.ts @@ -1,15 +1,12 @@ /* eslint no-null/no-null: off */ -import Config from "@ckeditor/ckeditor5-utils/src/config"; +import { Config } from "ckeditor5"; import { computeDefaultLinkTargetForUrl } from "../../../src/linktarget/config/LinkTargetConfig"; - jest.mock("@ckeditor/ckeditor5-utils/src/config"); - describe("LinkTargetDefaultsConfig", () => { describe("computeDefaultLinkTargetForUrl", () => { // @ts-expect-error - Requires generic type since CKEditor 37.x. let config: Config; - beforeEach(() => { config = new Config(); config.set("link.defaultTargets", [ @@ -27,7 +24,6 @@ describe("LinkTargetDefaultsConfig", () => { }, ]); }); - test.each` url | expectedTarget ${"content:123"} | ${"_embed"} diff --git a/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkTargetConfig.test.ts b/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkTargetConfig.test.ts index 24669d031..b7ba03e3d 100644 --- a/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkTargetConfig.test.ts +++ b/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkTargetConfig.test.ts @@ -1,43 +1,34 @@ /* eslint no-null/no-null: off */ -import Config from "@ckeditor/ckeditor5-utils/src/config"; +import { Config } from "ckeditor5"; import { parseLinkTargetConfig } from "../../../src/linktarget/config/LinkTargetConfig"; import LinkTargetOptionDefinition from "../../../src/linktarget/config/LinkTargetOptionDefinition"; - jest.mock("@ckeditor/ckeditor5-utils/src/config"); - const someFunction = () => { // irrelevant, only type required }; - describe("LinkTargetConfig", () => { describe("parseLinkTargetConfig", () => { // @ts-expect-error - Requires generic type since CKEditor 37.x. let config: Config; - beforeEach(() => { config = new Config(); }); - test.each` config ${undefined} ${null} `("[$#] should provide defaults for no/empty config: $config", ({ config: emptyConfig }) => { config.set("link.targets", emptyConfig); - const definitions = parseLinkTargetConfig(config); const names = definitions.map((definition) => definition.name); expect(names).toEqual(["_self", "_blank", "_embed", "_other"]); }); - test("should provide no definitions for empty config", () => { config.set("link.targets", []); - const definitions = parseLinkTargetConfig(config); expect(definitions).toHaveLength(0); }); - test.each` name | title ${"_self"} | ${"Open in Current Tab"} @@ -48,13 +39,11 @@ describe("LinkTargetConfig", () => { "[$#] Should resolve well-known config (referenced as string) to full object for '$name' having title '$title'", ({ name, title: expectedTitle }) => { config.set("link.targets", [name]); - const definitions = parseLinkTargetConfig(config); expect(definitions).toHaveLength(1); expect(definitions[0]?.title).toStrictEqual(expectedTitle); }, ); - test.each` name | title ${"_self"} | ${"Open in Current Tab"} @@ -69,14 +58,12 @@ describe("LinkTargetConfig", () => { name, }, ]); - const definitions = parseLinkTargetConfig(config); expect(definitions).toHaveLength(1); // This also tests for "auto-completing object". expect(definitions[0]?.title).toStrictEqual(expectedTitle); }, ); - test.each` names ${["_self", "_blank"]} @@ -84,13 +71,11 @@ describe("LinkTargetConfig", () => { ${["_other", "_embed", "_blank", "_self"]} `("[$#] Should respect order for well-known config names: $names", ({ names }) => { config.set("link.targets", [...names]); - const definitions = parseLinkTargetConfig(config); const actualNames = definitions.map((d) => d.name); expect(definitions).toHaveLength(names.length); expect(actualNames).toStrictEqual(names); }); - test.each` name | title ${"_self"} | ${"Custom: Open in Current Tab"} @@ -104,58 +89,44 @@ describe("LinkTargetConfig", () => { title, }, ]); - const definitions = parseLinkTargetConfig(config); expect(definitions).toHaveLength(1); expect(definitions[0]?.title).toStrictEqual(title); }); - test("should be able providing an only-name custom configuration with some defaults applied", () => { const customName = "custom"; - config.set("link.targets", [customName]); - const definitions = parseLinkTargetConfig(config); - expect(definitions).toHaveLength(1); expect(definitions[0]?.name).toStrictEqual(customName); expect(definitions[0]?.title).toStrictEqual(customName); }); - test("should be able providing a custom configuration with name and title", () => { const customName = "custom"; const customTitle = "My Custom Title"; - config.set("link.targets", [ { name: customName, title: customTitle, }, ]); - const definitions = parseLinkTargetConfig(config); - expect(definitions).toHaveLength(1); expect(definitions[0]?.name).toStrictEqual(customName); expect(definitions[0]?.title).toStrictEqual(customTitle); }); - test.each` mode ${"object"} ${"string"} `("[$#] should provide defaults for custom targets ($mode definition)", ({ mode }) => { const customName = "custom"; - config.set("link.targets", [createCustomNamedTarget(customName, mode)]); - const definitions = parseLinkTargetConfig(config); - expect(definitions).toHaveLength(1); expect(definitions[0]?.name).toStrictEqual(customName); expect(definitions[0]?.title).toStrictEqual(customName); }); - test.each` mode ${"object"} @@ -165,12 +136,9 @@ describe("LinkTargetConfig", () => { // any name set. But only testing empty name is fine here, as it should also // be forbidden. const customName = ""; - config.set("link.targets", [createCustomNamedTarget(customName, mode)]); - expect(() => parseLinkTargetConfig(config)).toThrow(); }); - test.each` config ${42} @@ -180,12 +148,13 @@ describe("LinkTargetConfig", () => { ${true} ${false} ${{}} - ${{ lorem: "ipsum" }} + ${{ + lorem: "ipsum", +}} `("[$#] should fail on invalid configuration type for link.targets: $config", ({ config: brokenConfig }) => { config.set("link.targets", brokenConfig); expect(() => parseLinkTargetConfig(config)).toThrow(); }); - test.each` entry ${42} @@ -201,7 +170,6 @@ describe("LinkTargetConfig", () => { ); }); }); - const createCustomNamedTarget = (name: string, mode: "object" | "string"): LinkTargetOptionDefinition | string => { switch (mode) { case "object": diff --git a/packages/ckeditor5-coremedia-link/src/augmentation.ts b/packages/ckeditor5-coremedia-link/src/augmentation.ts index 9a4ccde03..c851b0892 100644 --- a/packages/ckeditor5-coremedia-link/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-link/src/augmentation.ts @@ -15,8 +15,7 @@ import type { import DefaultTarget from "./linktarget/config/DefaultTarget"; import LinkTargetOptionDefinition from "./linktarget/config/LinkTargetOptionDefinition"; import { TargetDefaultRuleDefinition } from "./linktarget/config/LinkTargetDefaultRuleDefinition"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [ContentLinkActionsViewExtension.pluginName]: ContentLinkActionsViewExtension; [ContentLinkClipboardPlugin.pluginName]: ContentLinkClipboardPlugin; @@ -29,7 +28,6 @@ declare module "@ckeditor/ckeditor5-core" { [LinkTargetModelView.pluginName]: LinkTargetModelView; [LinkUserActionsPlugin.pluginName]: LinkUserActionsPlugin; } - interface CommandsMap { // While part of ckeditor5-coremedia-content, the command is added here // within the ContentLinks plugin. Thus, we should declare it here. @@ -37,8 +35,7 @@ declare module "@ckeditor/ckeditor5-core" { linkTarget: LinkTargetCommand; } } - -declare module "@ckeditor/ckeditor5-link" { +declare module "ckeditor5" { interface LinkConfig { targets?: (DefaultTarget | LinkTargetOptionDefinition)[]; defaultTargets?: TargetDefaultRuleDefinition[]; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkClipboardPlugin.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkClipboardPlugin.ts index 6da6563bb..5af374514 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkClipboardPlugin.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkClipboardPlugin.ts @@ -1,5 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; -import { Writer, Node } from "@ckeditor/ckeditor5-engine"; +import { Plugin, Writer, Node } from "ckeditor5"; import { createContentDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentDisplayServiceDescriptor"; import { serviceAgent } from "@coremedia/service-agent"; import { ROOT_NAME } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/Constants"; @@ -12,9 +11,7 @@ import { } from "@coremedia/ckeditor5-coremedia-content-clipboard/src/ContentToModelRegistry"; import ContentClipboardEditing from "@coremedia/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing"; import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; - type CreateLinkModelFunction = (contentUri: string, name: string) => CreateModelFunction; - const createLinkModelFunctionCreator: CreateModelFunctionCreator = async ( contentUri: string, ): Promise => { @@ -22,7 +19,6 @@ const createLinkModelFunctionCreator: CreateModelFunctionCreator = async ( const contentName = await contentDisplayService.name(contentUri); return createLinkModelFunction(contentUri, contentName); }; - const createLinkModelFunction: CreateLinkModelFunction = (contentUri: string, name: string): CreateModelFunction => { const nameToPass = name ? name : ROOT_NAME; return (writer: Writer): Node => @@ -45,17 +41,13 @@ const createLinkModelFunction: CreateLinkModelFunction = (contentUri: string, na export default class ContentLinkClipboardPlugin extends Plugin { public static readonly pluginName = "ContentLinkClipboardPlugin" as const; static readonly #logger: Logger = LoggerProvider.getLogger(ContentLinkClipboardPlugin.pluginName); - init(): void { const logger = ContentLinkClipboardPlugin.#logger; const { editor } = this; - const initInformation = reportInitStart(this); - getOptionalPlugin(editor, ContentClipboardEditing, (pluginName) => logger.warn(`Recommended plugin ${pluginName} not found. Creating content links from clipboard not activated.`), )?.registerToModelFunction("link", createLinkModelFunctionCreator); - reportInitEnd(initInformation); } } diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkCommandHook.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkCommandHook.ts index b68d86f5a..bc2fee598 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkCommandHook.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkCommandHook.ts @@ -1,5 +1,3 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; -import { TextProxy, Range, Writer, Item as ModelItem } from "@ckeditor/ckeditor5-engine"; import { ModelUri, requireContentCkeModelUri, @@ -7,8 +5,7 @@ import { } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { DiffItem, DiffItemInsert } from "@ckeditor/ckeditor5-engine/src/model/differ"; -import { LinkEditing } from "@ckeditor/ckeditor5-link"; +import { Plugin, TextProxy, Range, Writer, Item as ModelItem, DiffItem, DiffItemInsert, LinkEditing } from "ckeditor5"; import { LINK_COMMAND_NAME } from "@coremedia/ckeditor5-link-common/src/Constants"; import { ROOT_NAME } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/Constants"; import { ifCommand, optionalCommandNotFound, recommendCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; @@ -86,7 +83,11 @@ class TrackingData { * * @param range - range to get included items for */ -const getItems = (range: Range): ModelItem[] => [...range.getItems({ shallow: true })]; +const getItems = (range: Range): ModelItem[] => [ + ...range.getItems({ + shallow: true, + }), +]; /** * LinkCommand has a special handling when inserting links with a collapsed @@ -139,7 +140,6 @@ const getItems = (range: Range): ModelItem[] => [...range.getItems({ shallow: tr class ContentLinkCommandHook extends Plugin { public static readonly pluginName = "ContentLinkCommandHook" as const; static readonly #logger: Logger = LoggerProvider.getLogger(ContentLinkCommandHook.pluginName); - readonly #trackingData: TrackingData = new TrackingData(); /** @@ -162,7 +162,6 @@ class ContentLinkCommandHook extends Plugin { const { editor } = this; const { model } = editor; const { document } = model; - const initInformation = reportInitStart(this); /* @@ -180,7 +179,6 @@ class ContentLinkCommandHook extends Plugin { * won't have access to `this` anymore. */ document.registerPostFixer((writer) => this.#postFix(writer)); - reportInitEnd(initInformation); } @@ -189,11 +187,9 @@ class ContentLinkCommandHook extends Plugin { */ override destroy(): void { const { editor } = this; - ifCommand(editor, LINK_COMMAND_NAME) .then((command) => command.off("execute", this.#clearTrackingData)) .catch(optionalCommandNotFound); - this.#trackingData.clear(); } @@ -261,14 +257,11 @@ class ContentLinkCommandHook extends Plugin { */ #replaceRawLink(writer: Writer, textProxy: TextProxy, range: Range): boolean { const logger = ContentLinkCommandHook.#logger; - const replacement: Replacement | undefined = this.#trackingData.clear(); - if (!replacement) { logger.debug(`Skipped replacement as no replacement was registered.`); return false; } - const { modelUri: href } = replacement; /* @@ -298,10 +291,8 @@ class ContentLinkCommandHook extends Plugin { // the next text to add. writer.remove(textProxy); writer.insertText(name, attrs, position); - return true; } - return false; } @@ -318,23 +309,18 @@ class ContentLinkCommandHook extends Plugin { // adjust raw content-links. Nothing to do. return false; } - const isTextNodeInsertion = ContentLinkCommandHook.#isTextNodeInsertion; const asDiffItemInsert = ContentLinkCommandHook.#asDiffItemInsert; - const model = writer.model; const document = model.document; const differ = document.differ; - const changes = differ.getChanges(); const textInsertions: DiffItemInsert[] = changes.filter(isTextNodeInsertion).map(asDiffItemInsert); // For the given scenario, we expect at most one matched diff item. const matchedDiffItem = textInsertions.find((diffItem) => this.#trackingData.matches(diffItem)); - if (matchedDiffItem) { return this.#postFixMatchedItem(writer, matchedDiffItem); } - return false; } @@ -352,10 +338,8 @@ class ContentLinkCommandHook extends Plugin { const end = start.getShiftedBy(diffItem.length); return writer.createRange(start, end); }; - const range: Range = toRange(matchedDiffItem); const itemsInRange = getItems(range); - if (itemsInRange.length !== 1) { /* * As we only want to deal with one atomic `insertContent` triggered @@ -365,9 +349,7 @@ class ContentLinkCommandHook extends Plugin { */ return false; } - const onlyItem: ModelItem = itemsInRange[0]; - if (!onlyItem.is("model:$textProxy")) { /* * We only deal with text proxies, which should be the result of the insert operation @@ -379,5 +361,4 @@ class ContentLinkCommandHook extends Plugin { return this.#replaceRawLink(writer, textProxy, range); } } - export default ContentLinkCommandHook; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkViewUtils.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkViewUtils.ts index abc477b9b..24ec9d6d1 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkViewUtils.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkViewUtils.ts @@ -1,6 +1,5 @@ -import { View, ContextualBalloon } from "@ckeditor/ckeditor5-ui"; import { addClass, addClassToTemplate, removeClass, removeClassFromTemplate } from "../utils"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { View, ContextualBalloon, Editor } from "ckeditor5"; import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common/src/Plugins"; /** diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinks.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinks.ts index 9d1d14a03..2482cefb9 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinks.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinks.ts @@ -1,5 +1,3 @@ -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; -import { LinkUI, Link, LinkCommand } from "@ckeditor/ckeditor5-link"; import ContentLinkActionsViewExtension from "./ui/ContentLinkActionsViewExtension"; import ContentLinkFormViewExtension from "./ui/ContentLinkFormViewExtension"; import ContentLinkCommandHook from "./ContentLinkCommandHook"; @@ -7,19 +5,17 @@ import { createDecoratorHook } from "../utils"; import "../lang/contentlink"; import ContentLinkClipboardPlugin from "./ContentLinkClipboardPlugin"; import LinkUserActionsPlugin from "./LinkUserActionsPlugin"; -import { ContextualBalloon } from "@ckeditor/ckeditor5-ui"; import { CONTENT_CKE_MODEL_URI_REGEXP } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; import { serviceAgent } from "@coremedia/service-agent"; import { addMouseEventListenerToHideDialog, removeInitialMouseDownListener } from "./LinkBalloonEventListenerFix"; import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/WorkAreaServiceDescriptor"; import { Subscription } from "rxjs"; - import WorkAreaService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/WorkAreaService"; import { closeContextualBalloon } from "./ContentLinkViewUtils"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { parseLinkBalloonConfig } from "./LinkBalloonConfig"; import { hasRequiredInternalLinkUI } from "./InternalLinkUI"; -import { Observable } from "@ckeditor/ckeditor5-utils"; +import { Plugin, Editor, LinkUI, Link, LinkCommand, ContextualBalloon, Observable } from "ckeditor5"; import { asAugmentedLinkUI, requireNonNullsAugmentedLinkUI } from "./ui/AugmentedLinkUI"; import { openContentInTabCommandName, registerOpenContentInTabCommand } from "./OpenContentInTabCommand"; @@ -29,9 +25,7 @@ import { openContentInTabCommandName, registerOpenContentInTabCommand } from "./ */ export default class ContentLinks extends Plugin { public static readonly pluginName = "ContentLinks" as const; - static readonly openLinkInTab = openContentInTabCommandName; - readonly #logger = LoggerProvider.getLogger(ContentLinks.pluginName); #serviceRegisteredSubscription: Pick | undefined = undefined; #initialized = false; @@ -65,7 +59,6 @@ export default class ContentLinks extends Plugin { linkUI._hideUI(); } } - static readonly requires = [ Link, ContentLinkActionsViewExtension, @@ -74,11 +67,9 @@ export default class ContentLinks extends Plugin { ContentLinkClipboardPlugin, LinkUserActionsPlugin, ]; - init(): void { const editor = this.editor; const linkUI: LinkUI = editor.plugins.get(LinkUI); - const contextualBalloon: ContextualBalloon = editor.plugins.get(ContextualBalloon); contextualBalloon.on("change:visibleView", (evt, name, visibleView) => { if (visibleView && visibleView === linkUI.actionsView && !this.#initialized) { @@ -86,7 +77,6 @@ export default class ContentLinks extends Plugin { this.#initialized = true; } }); - const onServiceRegisteredFunction = (services: WorkAreaService[]): void => { if (services.length === 0) { this.#logger.debug("No WorkAreaService registered yet"); @@ -95,7 +85,6 @@ export default class ContentLinks extends Plugin { if (this.#serviceRegisteredSubscription) { this.#serviceRegisteredSubscription.unsubscribe(); } - this.#logger.debug("WorkAreaService is registered now, listening for activeEntities will be started"); const clipboardService = services[0]; this.#listenForActiveEntityChanges(clipboardService); @@ -103,22 +92,18 @@ export default class ContentLinks extends Plugin { this.#serviceRegisteredSubscription = serviceAgent .observeServices(createWorkAreaServiceDescriptor()) .subscribe(onServiceRegisteredFunction); - registerOpenContentInTabCommand(editor); } - initializeLinkBalloonListeners(linkUI: LinkUI): void { const { editor } = linkUI; removeInitialMouseDownListener(linkUI); addMouseEventListenerToHideDialog(linkUI); parseLinkBalloonConfig(editor.config); const internalLinkUI: Observable = linkUI; - if (hasRequiredInternalLinkUI(internalLinkUI)) { createDecoratorHook(internalLinkUI, "_hideUI", this.onHideUiCallback(editor), this); } } - onHideUiCallback(editor: Editor): () => void { return () => { const linkCommand = editor.commands.get("link") as LinkCommand; @@ -127,11 +112,14 @@ export default class ContentLinks extends Plugin { return; } const { formView, actionsView } = requireNonNullsAugmentedLinkUI(linkUI, "actionsView", "formView"); - const commandValue: string = linkCommand.value ?? ""; const value = CONTENT_CKE_MODEL_URI_REGEXP.test(commandValue) ? commandValue : undefined; - formView.set({ contentUriPath: value }); - actionsView.set({ contentUriPath: value }); + formView.set({ + contentUriPath: value, + }); + actionsView.set({ + contentUriPath: value, + }); }; } } diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/InternalLinkUI.ts b/packages/ckeditor5-coremedia-link/src/contentlink/InternalLinkUI.ts index 21f257501..8e68fdd4a 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/InternalLinkUI.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/InternalLinkUI.ts @@ -1,4 +1,4 @@ -import { type ContextualBalloon } from "@ckeditor/ckeditor5-ui"; +import { ContextualBalloon } from "ckeditor5"; import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; /** @@ -14,16 +14,12 @@ export interface InternalLinkUI { _hideUI(): void; get _isUIInPanel(): boolean; } - const isHasBalloon = (linkUI: object): linkUI is Pick => "_balloon" in linkUI && typeof linkUI._balloon === "object"; - const isHasHideUI = (linkUI: object): linkUI is Pick => "_hideUI" in linkUI && typeof linkUI._hideUI === "function"; - const isHasIsUIInPanel = (linkUI: object): linkUI is Pick => "_isUIInPanel" in linkUI && typeof linkUI._isUIInPanel === "boolean"; - const isInternalLinkUI = (linkUI: unknown): linkUI is InternalLinkUI => typeof linkUI === "object" && !!linkUI && isHasBalloon(linkUI) && isHasHideUI(linkUI) && isHasIsUIInPanel(linkUI); diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonConfig.ts b/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonConfig.ts index 45f700143..77cbf6de3 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonConfig.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonConfig.ts @@ -1,6 +1,4 @@ -import { Config } from "@ckeditor/ckeditor5-utils"; -import { EditorConfig } from "@ckeditor/ckeditor5-core/src/editor/editorconfig"; - +import { Config, EditorConfig } from "ckeditor5"; export const COREMEDIA_LINK_CONFIG_KEY = "coremedia:link"; /** @@ -30,11 +28,16 @@ export default interface LinkBalloonConfig { * .catch( ... ); * ``` */ - keepOpen: { ids: string[]; classes: string[] }; + keepOpen: { + ids: string[]; + classes: string[]; + }; } - const linkBalloonConfig: LinkBalloonConfig = { - keepOpen: { ids: [], classes: [] }, + keepOpen: { + ids: [], + classes: [], + }, }; /** @@ -86,7 +89,6 @@ export const keepOpen = (elementHierarchy: Element[]): boolean => { const idExistInHierarchy = linkBalloonConfig.keepOpen.ids.some((elementId) => elementHierarchyIds.includes(elementId), ); - const elementHierarchyClassLists: DOMTokenList[] = elementHierarchy .map((element) => element.classList) .filter((classList) => !!classList); diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonEventListenerFix.ts b/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonEventListenerFix.ts index 633e82cba..199f3e3a2 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonEventListenerFix.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonEventListenerFix.ts @@ -1,5 +1,4 @@ -import { LinkUI } from "@ckeditor/ckeditor5-link"; -import { Emitter } from "@ckeditor/ckeditor5-utils/src/emittermixin"; +import { LinkUI, Emitter } from "ckeditor5"; import { keepOpen } from "./LinkBalloonConfig"; import { hasRequiredInternalLinkUI } from "./InternalLinkUI"; import { requireNonNulls } from "@coremedia/ckeditor5-common/src/RequiredNonNull"; @@ -54,18 +53,15 @@ export const removeInitialMouseDownListener = (linkUI: LinkUI): void => { */ export const addMouseEventListenerToHideDialog = (linkUI: LinkUI): void => { const { formView } = requireNonNulls(linkUI, "formView"); - const internalLinkUI: unknown = linkUI; if (!hasRequiredInternalLinkUI(internalLinkUI)) { return; } - const { _balloon: { view: { element }, }, } = internalLinkUI; - addCustomClickOutsideHandler({ emitter: formView, activator: () => internalLinkUI._isUIInPanel, @@ -75,7 +71,6 @@ export const addMouseEventListenerToHideDialog = (linkUI: LinkUI): void => { }, }); }; - const addCustomClickOutsideHandler = ({ emitter, activator, @@ -91,7 +86,13 @@ const addCustomClickOutsideHandler = ({ emitter.listenTo( document as unknown as Emitter, "mousedown", - (evt: unknown, domEvt: { composedPath: () => Element[]; target: HTMLElement }) => { + ( + evt: unknown, + domEvt: { + composedPath: () => Element[]; + target: HTMLElement; + }, + ) => { if (!activator()) { return; } @@ -108,12 +109,10 @@ const addCustomClickOutsideHandler = ({ pathIncludesAnyEditor = true; } } - if (keepOpen(path)) { mouseDownOnWhiteListedElement = true; return; } - if (domEvt.target.draggable && !pathIncludesAnyEditor) { return; } @@ -124,33 +123,34 @@ const addCustomClickOutsideHandler = ({ return; } } - callback(); }, ); emitter.listenTo( document as unknown as Emitter, "click", - (evt: unknown, domEvt: { composedPath: () => Element[]; target: HTMLElement }) => { + ( + evt: unknown, + domEvt: { + composedPath: () => Element[]; + target: HTMLElement; + }, + ) => { if (mouseDownOnWhiteListedElement) { // we already checked that this click (mouseDown) occurred on an allow-listed element mouseDownOnWhiteListedElement = false; return; } - if (!activator()) { return; } - const path = typeof domEvt.composedPath === "function" ? domEvt.composedPath() : []; const editorElements = document.getElementsByClassName(EDITOR_CLASS); - for (const editorElement of editorElements) { if (editorElement.contains(domEvt.target) || path.includes(editorElement)) { return; } } - for (const contextElement of contextElements) { if (contextElement.contains(domEvt.target) || path.includes(contextElement)) { return; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts b/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts index 69d304068..79561c5ee 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts @@ -1,12 +1,3 @@ -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; -import { - EditingView, - ViewDocumentFragment, - ViewElement, - TextProxy, - Element as ModelElement, - Node as ModelNode, -} from "@ckeditor/ckeditor5-engine"; import { serviceAgent } from "@coremedia/service-agent"; import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/WorkAreaServiceDescriptor"; import { openLink } from "@ckeditor/ckeditor5-link/src/utils"; @@ -16,7 +7,18 @@ import { isModelUriPath, requireContentUriPath, } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { env, keyCodes } from "@ckeditor/ckeditor5-utils"; +import { + Plugin, + Editor, + EditingView, + ViewDocumentFragment, + ViewElement, + TextProxy, + Element as ModelElement, + Node as ModelNode, + env, + keyCodes, +} from "ckeditor5"; /** * A Plugin to override default behavior for user action on links in CKEditor. @@ -35,7 +37,6 @@ export default class LinkUserActionsPlugin extends Plugin { public static readonly pluginName = "LinkUserActionsPlugin" as const; static readonly LOG: Logger = LoggerProvider.getLogger(LinkUserActionsPlugin.pluginName); static readonly requires = []; - init(): void { this.#handleLinkClicksInReadOnly(); this.#handleContentLinkClicksInReadOnly(); @@ -52,31 +53,42 @@ export default class LinkUserActionsPlugin extends Plugin { const editor = this.editor; const view = editor.editing.view; const viewDocument = view.document; - this.listenTo( viewDocument, "click", - (evt, data: { domTarget: Element; preventDefault: () => void; view: EditingView }) => { + ( + evt, + data: { + domTarget: Element; + preventDefault: () => void; + view: EditingView; + }, + ) => { if (!editor.isReadOnly) { return; } - let clickedElement: Element | null = (data as { domTarget: Element }).domTarget; + let clickedElement: Element | null = ( + data as { + domTarget: Element; + } + ).domTarget; if (clickedElement.tagName.toLowerCase() !== "a") { clickedElement = clickedElement.closest("a"); } if (!clickedElement) { return; } - evt.stop(); data.preventDefault(); this.#onReadOnlyLinkClicked(editor, data.view, clickedElement); }, //@ts-expect-error context is not part of the types but in ckeditor5-link/src/linkediting the event is caught in capture phase - { priority: "high", context: "$capture" }, + { + priority: "high", + context: "$capture", + }, ); } - #onReadOnlyLinkClicked(editor: Editor, view: EditingView, domElement: Element): void { const modelElement: TextProxy | undefined = this.#resolveAnchorModelElement(editor, view, domElement); if (!modelElement) { @@ -100,14 +112,16 @@ export default class LinkUserActionsPlugin extends Plugin { const editor = this.editor; const view = editor.editing.view; const viewDocument = view.document; - this.listenTo( viewDocument, "click", ( evt, data: { - domEvent: { metaKey: boolean; ctrlKey: boolean }; + domEvent: { + metaKey: boolean; + ctrlKey: boolean; + }; domTarget: Element; preventDefault: () => void; view: EditingView; @@ -120,20 +134,21 @@ export default class LinkUserActionsPlugin extends Plugin { if (!shouldOpen) { return; } - - let clickedElement: Element | null = (data as { domTarget: Element }).domTarget; + let clickedElement: Element | null = ( + data as { + domTarget: Element; + } + ).domTarget; if (clickedElement.tagName.toLowerCase() !== "a") { clickedElement = clickedElement.closest("a"); } if (!clickedElement) { return; } - const anchorModelElement = this.#resolveAnchorModelElement(editor, view, clickedElement); if (!anchorModelElement) { return; } - if (anchorModelElement.hasAttribute("linkHref")) { const linkHref = anchorModelElement.getAttribute("linkHref"); if (isModelUriPath(linkHref)) { @@ -144,13 +159,21 @@ export default class LinkUserActionsPlugin extends Plugin { } }, //@ts-expect-error context is not part of the types but in ckeditor5-link/src/linkediting the event is caught in capture phase - { priority: "high", context: "$capture" }, + { + priority: "high", + context: "$capture", + }, ); - this.listenTo( viewDocument, "keydown", - (evt, data: { keyCode: number; altKey: boolean }) => { + ( + evt, + data: { + keyCode: number; + altKey: boolean; + }, + ) => { if (editor.isReadOnly) { return; } @@ -167,10 +190,11 @@ export default class LinkUserActionsPlugin extends Plugin { this.#openInWorkAreaTab(requireContentUriPath(url)); } }, - { priority: "high" }, + { + priority: "high", + }, ); } - #resolveAnchorModelElement(editor: Editor, view: EditingView, domElement: Element): TextProxy | undefined { //@ts-expect-error bad typings, mapDomToView parameter is typed as model.element, but it should be the typescript element. const viewElement: ViewElement | ViewDocumentFragment | undefined = view.domConverter.mapDomToView(domElement); @@ -191,10 +215,8 @@ export default class LinkUserActionsPlugin extends Plugin { if (textProxies.length > 1) { LinkUserActionsPlugin.LOG.debug("Found multiple clicked links, taking the first to open."); } - return textProxies[0]; } - #openInWorkAreaTab(uri: string): void { serviceAgent .fetchService(createWorkAreaServiceDescriptor()) diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/OpenContentInTabCommand.ts b/packages/ckeditor5-coremedia-link/src/contentlink/OpenContentInTabCommand.ts index a028ade72..2d4e97430 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/OpenContentInTabCommand.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/OpenContentInTabCommand.ts @@ -1,8 +1,5 @@ import { OpenInTabCommand } from "@coremedia/ckeditor5-coremedia-content"; -import first from "@ckeditor/ckeditor5-utils/src/first"; -import type Schema from "@ckeditor/ckeditor5-engine/src/model/schema"; -import type ModelElement from "@ckeditor/ckeditor5-engine/src/model/element"; -import Editor from "@ckeditor/ckeditor5-core/src/editor/editor"; +import { first, Schema, Element as ModelElement, Editor } from "ckeditor5"; import { UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; /** @@ -76,6 +73,5 @@ const isLinkableElement = (element: ModelElement | null, schema: Schema): elemen if (!element) { return false; } - return schema.checkAttribute(element.name, "linkHref"); }; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/clipboard/DropCondition.ts b/packages/ckeditor5-coremedia-link/src/contentlink/clipboard/DropCondition.ts index d08cb0673..e8c9e9a91 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/clipboard/DropCondition.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/clipboard/DropCondition.ts @@ -1,4 +1,4 @@ -import { Range } from "@ckeditor/ckeditor5-engine"; +import { Range } from "ckeditor5"; /** * Meta-data on drop. diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkUI.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkUI.ts index 730e155af..64c45ba95 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkUI.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkUI.ts @@ -1,7 +1,6 @@ import { AugmentedLinkActionsView } from "./AugmentedLinkActionsView"; import { AugmentedLinkFormView } from "./AugmentedLinkFormView"; -import { ViewWithCssTransitionDisabler } from "@ckeditor/ckeditor5-ui"; -import { LinkUI } from "@ckeditor/ckeditor5-link"; +import { ViewWithCssTransitionDisabler, LinkUI } from "ckeditor5"; import { RequiredNonNull, requireNonNulls } from "@coremedia/ckeditor5-common/src/RequiredNonNull"; /** diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/CancelButtonView.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/CancelButtonView.ts index a67ec0787..60fe4f242 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/CancelButtonView.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/CancelButtonView.ts @@ -1,5 +1,4 @@ -import { Locale } from "@ckeditor/ckeditor5-utils"; -import { ButtonView } from "@ckeditor/ckeditor5-ui"; +import { Locale, ButtonView } from "ckeditor5"; import CoreMediaIconView from "./CoreMediaIconView"; /** @@ -8,16 +7,13 @@ import CoreMediaIconView from "./CoreMediaIconView"; export default class CancelButtonView extends ButtonView { readonly #cancelIcon: CoreMediaIconView; static readonly iconId = "cancelButtonIcon"; - constructor(locale?: Locale) { super(locale); - this.extendTemplate({ attributes: { class: ["cm-ck-cancel-button"], }, }); - this.#cancelIcon = new CoreMediaIconView(); this.#cancelIcon.set({ id: CancelButtonView.iconId, diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts index 72c7c7305..bba65779e 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts @@ -1,7 +1,5 @@ /* eslint no-null/no-null: off */ -import { Command, Plugin } from "@ckeditor/ckeditor5-core"; -import { LinkUI } from "@ckeditor/ckeditor5-link"; // LinkActionsView: See ckeditor/ckeditor5#12027. import LinkActionsView from "@ckeditor/ckeditor5-link/src/ui/linkactionsview"; import ContentLinkView from "./ContentLinkView"; @@ -9,7 +7,7 @@ import { requireContentUriPath, isModelUriPath } from "@coremedia/ckeditor5-core import type { UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { handleFocusManagement } from "@coremedia/ckeditor5-link-common/src/FocusUtils"; -import { ContextualBalloon } from "@ckeditor/ckeditor5-ui"; +import { Command, Plugin, LinkUI, ContextualBalloon } from "ckeditor5"; import { LINK_COMMAND_NAME } from "@coremedia/ckeditor5-link-common/src/Constants"; import { ifCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; @@ -29,17 +27,14 @@ import { executeOpenContentInTabCommand } from "../OpenContentInTabCommand"; class ContentLinkActionsViewExtension extends Plugin { public static readonly pluginName = "ContentLinkActionsViewExtension" as const; static readonly #logger = LoggerProvider.getLogger(ContentLinkActionsViewExtension.pluginName); - static readonly requires = [LinkUI, ContextualBalloon]; contentUriPath: string | undefined | null; #initialized = false; - init(): void { const initInformation = reportInitStart(this); const editor = this.editor; const linkUI = asAugmentedLinkUI(editor.plugins.get(LinkUI)); const contextualBalloon: ContextualBalloon = editor.plugins.get(ContextualBalloon); - contextualBalloon.on("change:visibleView", (evt, name, visibleView) => { const { actionsView } = linkUI; if (actionsView && actionsView === visibleView && !this.#initialized) { @@ -47,30 +42,24 @@ class ContentLinkActionsViewExtension extends Plugin { this.#initialized = true; } }); - contextualBalloon.on("change:visibleView", (evt, name, visibleView) => { const { actionsView } = linkUI; if (actionsView && actionsView === visibleView) { ContentLinkActionsViewExtension.#addCoreMediaClassesToActionsView(actionsView); } }); - reportInitEnd(initInformation); } - #initialize(linkUI: AugmentedLinkUI, actionsView: AugmentedLinkActionsView): void { const { editor } = linkUI; - actionsView.set({ contentUriPath: undefined, }); - const bindContentUriPathTo = (command: Command): void => { actionsView .bind("contentUriPath") .to(command, "value", (value: unknown) => (isModelUriPath(value) ? value : undefined)); }; - ifCommand(editor, LINK_COMMAND_NAME) .then((command) => bindContentUriPathTo(command)) .catch((e) => { @@ -83,13 +72,11 @@ class ContentLinkActionsViewExtension extends Plugin { */ actionsView.on("change:contentUriPath", (evt) => { const { source } = evt; - if (!hasContentUriPath(source)) { // set visibility of url and content field showContentLinkField(actionsView, false); return; } - const { contentUriPath: value } = source; // set visibility of url and content field @@ -97,26 +84,20 @@ class ContentLinkActionsViewExtension extends Plugin { }); this.#extendView(linkUI, actionsView); } - #extendView(linkUI: AugmentedLinkUI, actionsView: AugmentedLinkActionsView): void { const logger = ContentLinkActionsViewExtension.#logger; const { formView } = requireNonNullsAugmentedLinkUI(linkUI, "formView"); - const contentLinkView = new ContentLinkView(this.editor, { renderTypeIcon: true, }); - contentLinkView.set({ renderAsTextLink: true, }); - if (!hasContentUriPath(linkUI.actionsView)) { logger.warn("ActionsView does not have a property contentUriPath. Is it already bound?", linkUI.actionsView); return; } - contentLinkView.bind("uriPath").to(actionsView, "contentUriPath"); - contentLinkView.on("contentClick", () => { const { uriPath } = contentLinkView; if (uriPath) { @@ -131,7 +112,6 @@ class ContentLinkActionsViewExtension extends Plugin { }); } }); - contentLinkView.on("change:contentName", () => { if (!this.editor.isReadOnly) { const contextualBalloon: ContextualBalloon = this.editor.plugins.get(ContextualBalloon); @@ -140,9 +120,7 @@ class ContentLinkActionsViewExtension extends Plugin { } } }); - ContentLinkActionsViewExtension.#render(actionsView, contentLinkView); - formView.on("cancel", () => { const initialValue: string = this.editor.commands.get("link")?.value as string; actionsView.set({ @@ -150,7 +128,6 @@ class ContentLinkActionsViewExtension extends Plugin { }); }); } - static #render(actionsView: LinkActionsView, simpleContentLinkView: ContentLinkView): void { if (!actionsView.element || !actionsView.editButtonView.element) { ContentLinkActionsViewExtension.#logger.error( @@ -170,7 +147,6 @@ class ContentLinkActionsViewExtension extends Plugin { ); return; } - actionsView.element.insertBefore(simpleContentLinkView.element, actionsView.editButtonView.element); ContentLinkActionsViewExtension.#addCoreMediaClassesToActionsView(actionsView); handleFocusManagement(actionsView, [simpleContentLinkView], actionsView.previewButtonView); @@ -190,12 +166,10 @@ class ContentLinkActionsViewExtension extends Plugin { ); return; } - const CM_FORM_VIEW_CLS = "cm-ck-link-actions-view"; const CM_PREVIEW_BUTTON_VIEW_CLS = "cm-ck-link-actions-preview"; actionsView.element?.classList.add(CM_FORM_VIEW_CLS); actionsView.previewButtonView.element?.classList.add(CM_PREVIEW_BUTTON_VIEW_CLS); } } - export default ContentLinkActionsViewExtension; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts index 3e4b98cca..46a2f340a 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts @@ -1,7 +1,5 @@ /* eslint no-null/no-null: off */ -import { Plugin, Command } from "@ckeditor/ckeditor5-core"; -import { LinkUI } from "@ckeditor/ckeditor5-link"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import createContentLinkView from "./ContentLinkViewFactory"; @@ -9,7 +7,7 @@ import { CONTENT_CKE_MODEL_URI_REGEXP, requireContentCkeModelUri, } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { LabeledFieldView, View, ContextualBalloon } from "@ckeditor/ckeditor5-ui"; +import { Plugin, Command, LinkUI, LabeledFieldView, View, ContextualBalloon } from "ckeditor5"; import { showContentLinkField } from "../ContentLinkViewUtils"; import ContentLinkCommandHook from "../ContentLinkCommandHook"; import { hasContentUriPath, hasContentUriPathAndName } from "./ViewExtensions"; @@ -40,19 +38,13 @@ import { requireNonNullsAugmentedLinkUI } from "./AugmentedLinkUI"; class ContentLinkFormViewExtension extends Plugin { public static readonly pluginName = "ContentLinkFormViewExtension" as const; static readonly #logger: Logger = LoggerProvider.getLogger(ContentLinkFormViewExtension.pluginName); - static readonly #CM_LINK_FORM_CLS = "cm-ck-link-form"; static readonly #CM_FORM_VIEW_CLS = "cm-ck-link-form-view"; - static readonly requires = [LinkUI, ContentLinkCommandHook]; - #initialized = false; - #contentLinkView: LabeledFieldView | undefined = undefined; - init(): Promise | void { const initInformation = reportInitStart(this); - const editor = this.editor; const linkUI = editor.plugins.get(LinkUI); const contextualBalloon: ContextualBalloon = editor.plugins.get(ContextualBalloon); @@ -63,50 +55,40 @@ class ContentLinkFormViewExtension extends Plugin { this.#initialized = true; } }); - contextualBalloon.on("change:visibleView", (evt, name, visibleView) => { const { formView } = linkUI; if (formView && formView === visibleView) { this.onFormViewGetsActive(linkUI); } }); - reportInitEnd(initInformation); } - initializeFormView(linkUI: LinkUI): void { const { formView } = requireNonNullsAugmentedLinkUI(linkUI, "formView"); const linkCommand = linkUI.editor.commands.get("link") as Command; - formView.set({ contentUriPath: undefined, contentName: undefined, }); - formView .bind("contentUriPath") .to(linkCommand, "value", (value: unknown) => typeof value === "string" && CONTENT_CKE_MODEL_URI_REGEXP.test(value) ? value : undefined, ); - this.#extendView(linkUI, formView); } - onFormViewGetsActive(linkUI: LinkUI): void { const { editor } = linkUI; const { formView } = requireNonNullsAugmentedLinkUI(linkUI, "formView"); const contentLinkCommandHook: ContentLinkCommandHook = editor.plugins.get(ContentLinkCommandHook); const linkCommand = editor.commands.get("link") as Command; - formView.on("change:contentUriPath", (evt) => { const { source } = evt; - if (!hasContentUriPath(source)) { // set visibility of url and content field showContentLinkField(formView, false); return; } - const { contentUriPath: value } = source; // content link value has changed. set urlInputView accordingly @@ -199,11 +181,9 @@ class ContentLinkFormViewExtension extends Plugin { .bind("isEnabled") .to(linkCommand, "isEnabled", formView, "contentName", formView, "contentUriPath", enabledHandler); } - #extendView(linkUI: LinkUI, formView: AugmentedLinkFormView): void { const contentLinkView = createContentLinkView(linkUI, this.editor); this.#contentLinkView = contentLinkView; - contentLinkView.on("change:contentName", () => { if (!this.editor.isReadOnly) { const contextualBalloon: ContextualBalloon = this.editor.plugins.get(ContextualBalloon); @@ -212,7 +192,6 @@ class ContentLinkFormViewExtension extends Plugin { } } }); - ContentLinkFormViewExtension.#render(contentLinkView, linkUI, formView); this.#adaptFormViewFields(formView); formView.on("cancel", () => { @@ -222,24 +201,19 @@ class ContentLinkFormViewExtension extends Plugin { }); }); } - static #render(contentLinkView: LabeledFieldView, linkUI: LinkUI, formView: LinkFormView): void { const logger = ContentLinkFormViewExtension.#logger; - logger.debug("Rendering ContentLinkView and registering listeners."); formView.registerChild(contentLinkView); - if (!contentLinkView.isRendered) { logger.debug(`ContentLinkView not rendered yet. Triggering render().`); contentLinkView.render(); } - const { element: formViewElement, urlInputView: { element: urlInputViewElement }, } = formView; const { element: contentLinkViewElement } = contentLinkView; - if (!formViewElement || !contentLinkViewElement || !urlInputViewElement) { logger.debug("Unexpected state on render: Required elements are missing", { formViewElement, @@ -248,15 +222,11 @@ class ContentLinkFormViewExtension extends Plugin { }); throw new Error("Unexpected state on render: Required elements are missing."); } - formViewElement.insertBefore(contentLinkViewElement, urlInputViewElement.nextSibling); - const contentLinkButtons = ContentLinkFormViewExtension.#getContentLinkButtons(contentLinkView); handleFocusManagement(formView, contentLinkButtons, formView.urlInputView); - ContentLinkFormViewExtension.#addDragAndDropListeners(contentLinkView, linkUI, formView); } - #adaptFormViewFields(formView: LinkFormView): void { const t = this.editor.locale.t; formView.urlInputView.set({ @@ -266,7 +236,6 @@ class ContentLinkFormViewExtension extends Plugin { formView.urlInputView.fieldView.set({ placeholder: t("Enter url or drag and drop content onto this area."), }); - if (!formView.element) { ContentLinkFormViewExtension.#logger.error("FormView must be rendered to provide classes"); } @@ -289,21 +258,16 @@ class ContentLinkFormViewExtension extends Plugin { } return buttons; } - static #addDragAndDropListeners(contentLinkView: LabeledFieldView, linkUI: LinkUI, formView: LinkFormView): void { const logger = ContentLinkFormViewExtension.#logger; - logger.debug("Adding drag and drop listeners to formView and contentLinkView"); - if (!contentLinkView.fieldView.element) { logger.warn("ContentLinkView not completely rendered. Drag and drop won't work.", contentLinkView); } - contentLinkView.fieldView.element?.addEventListener("drop", (dragEvent: DragEvent) => { ContentLinkFormViewExtension.#onDropOnLinkField(dragEvent, linkUI); }); contentLinkView.fieldView.element?.addEventListener("dragover", ContentLinkFormViewExtension.#onDragOverLinkField); - if (!formView.urlInputView.fieldView.element) { logger.warn("FormView.urlInputView not completely rendered. Drag and drop won't work.", formView); } @@ -316,14 +280,12 @@ class ContentLinkFormViewExtension extends Plugin { ); logger.debug("Finished adding drag and drop listeners."); } - static #onDropOnLinkField(dragEvent: DragEvent, linkUI: LinkUI): void { const logger = ContentLinkFormViewExtension.#logger; if (!dragEvent.dataTransfer) { return; } const uris = receiveDraggedItemsFromDataTransfer(dragEvent.dataTransfer); - if (!uris) { const data: string | undefined = dragEvent.dataTransfer?.getData("text/plain"); if (data) { @@ -332,28 +294,23 @@ class ContentLinkFormViewExtension extends Plugin { } return; } - dragEvent.preventDefault(); ContentLinkFormViewExtension.#toggleUrlInputLoadingState(linkUI, true); - const linkable = getEvaluationResult(uris); if (!linkable || linkable === "PENDING") { return; } - const contentUris = linkable.uris; if (!contentUris) { ContentLinkFormViewExtension.#toggleUrlInputLoadingState(linkUI, false); return; } - const uri: string | undefined = contentUris[0]; if (!uri) { logger.warn("Invalid amount of uris dropped."); ContentLinkFormViewExtension.#toggleUrlInputLoadingState(linkUI, false); return; } - ContentLinkFormViewExtension.#toContentUri(uri) .then((importedUri: string) => { const ckeModelUri = requireContentCkeModelUri(importedUri); @@ -364,20 +321,16 @@ class ContentLinkFormViewExtension extends Plugin { logger.warn(reason); }); } - static async #toContentUri(uri: string): Promise { const contentReferenceService = await serviceAgent.fetchService(createContentReferenceServiceDescriptor()); const contentReference = await contentReferenceService.getContentReference(uri); - if (contentReference.contentUri) { //The reference uri is a content uri return contentReference.contentUri; } - if (!contentReference.externalUriInformation) { return Promise.reject("No content found and uri is not importable."); } - if (contentReference.externalUriInformation.contentUri) { //The external content has been imported previously. A content representation already exists. return contentReference.externalUriInformation.contentUri; @@ -387,17 +340,14 @@ class ContentLinkFormViewExtension extends Plugin { const contentImportService = await serviceAgent.fetchService(createContentImportServiceDescriptor()); return contentImportService.import(contentReference.request); } - static #toggleUrlInputLoadingState(linkUI: LinkUI, loading: boolean) { const { formView } = requireNonNullsAugmentedLinkUI(linkUI, "formView"); - if (loading) { formView.element?.classList.add("cm-ck-form-view--loading"); } else { formView.element?.classList.remove("cm-ck-form-view--loading"); } } - static #setDataAndSwitchToExternalLink(linkUI: LinkUI, data: string): void { const { formView, actionsView } = requireNonNullsAugmentedLinkUI(linkUI, "formView", "actionsView"); formView.urlInputView.fieldView.set("value", data); @@ -406,7 +356,6 @@ class ContentLinkFormViewExtension extends Plugin { showContentLinkField(formView, false); showContentLinkField(actionsView, false); } - static #setDataAndSwitchToContentLink(linkUI: LinkUI, data: string): void { const { formView, actionsView } = requireNonNullsAugmentedLinkUI(linkUI, "formView", "actionsView"); @@ -435,10 +384,8 @@ class ContentLinkFormViewExtension extends Plugin { if (!dragEvent.dataTransfer) { return; } - const logger = ContentLinkFormViewExtension.#logger; const isLinkableEvaluationResult: IsLinkableEvaluationResult | undefined = isLinkable(); - if (!isLinkableEvaluationResult) { logger.debug( "DragOverEvent: No URI received from DragDropService. Assuming that is any text (like an url) and allow it.", @@ -446,12 +393,10 @@ class ContentLinkFormViewExtension extends Plugin { dragEvent.dataTransfer.dropEffect = "copy"; return; } - if (isLinkableEvaluationResult === "PENDING") { dragEvent.dataTransfer.dropEffect = "none"; return; } - if (isLinkableEvaluationResult.uris?.length !== 1) { logger.debug( `DragOverEvent: Received ${isLinkableEvaluationResult.uris?.length} URI-paths, while it is not allowed to drop multiple contents.`, @@ -459,9 +404,7 @@ class ContentLinkFormViewExtension extends Plugin { dragEvent.dataTransfer.dropEffect = "none"; return; } - dragEvent.dataTransfer.dropEffect = isLinkableEvaluationResult.isLinkable ? "link" : "none"; } } - export default ContentLinkFormViewExtension; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkView.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkView.ts index df3b9c108..3cd9b47c2 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkView.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkView.ts @@ -7,10 +7,9 @@ import { UriPath, } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; import ContentAsLink from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentAsLink"; -import { ButtonView } from "@ckeditor/ckeditor5-ui"; import CoreMediaIconView from "./CoreMediaIconView"; import CancelButtonView from "./CancelButtonView"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { ButtonView, Editor } from "ckeditor5"; /** * A ContentView that renders a custom template, containing of 2 different components. @@ -32,18 +31,15 @@ export default class ContentLinkView extends ButtonView { * @private */ readonly #editor: Editor; - #contentSubscription: Subscription | undefined = undefined; readonly #typeIcon: CoreMediaIconView | undefined = undefined; readonly #statusIcon: CoreMediaIconView | undefined = undefined; readonly #cancelButton: ButtonView | undefined = undefined; - declare uriPath: string | null | undefined; declare contentName: string | undefined; declare underlined: boolean; declare renderAsTextLink: boolean; declare ariaLabelText: string; - constructor( editor: Editor, renderOptions?: { @@ -53,7 +49,6 @@ export default class ContentLinkView extends ButtonView { }, ) { super(editor.locale); - const bind = this.bindTemplate; this.renderOptions = renderOptions; this.#editor = editor; @@ -96,9 +91,7 @@ export default class ContentLinkView extends ButtonView { * @default empty string */ this.set("ariaLabelText", ""); - this.withText = true; - if (renderOptions?.renderTypeIcon) { this.#typeIcon = new CoreMediaIconView(); this.children.add(this.#typeIcon); @@ -116,7 +109,6 @@ export default class ContentLinkView extends ButtonView { this.#cancelButton.delegate("execute").to(this, "executeCancel"); } this.delegate("execute").to(this, "executeContentLink"); - this.extendTemplate({ attributes: { "class": [ @@ -127,7 +119,6 @@ export default class ContentLinkView extends ButtonView { "aria-label": bind.to("ariaLabelText"), }, }); - this.listenTo(this, "executeContentLink", () => { // If cancel button is executed, this button also executes // We must not fire the contentClick event then. Therefore, check @@ -136,9 +127,7 @@ export default class ContentLinkView extends ButtonView { this.fire("contentClick"); } }); - this.bind("label").to(this, "contentName"); - this.on("change:uriPath", (evt) => { // URI changes, thus contentName, icons and tooltip are not valid anymore for the new URI this.set({ @@ -151,9 +140,7 @@ export default class ContentLinkView extends ButtonView { this.#statusIcon?.set({ iconClass: undefined, }); - this.#endContentSubscription(); - const hasUriPath = this.hasUriPathProperty(evt.source); if (!hasUriPath) { return; @@ -164,11 +151,11 @@ export default class ContentLinkView extends ButtonView { } }); } - - hasUriPathProperty(obj: object): obj is { uriPath: string } { + hasUriPathProperty(obj: object): obj is { + uriPath: string; + } { return "uriPath" in obj; } - override render(): void { super.render(); if (this.renderOptions?.renderStatusIcon) { @@ -179,7 +166,6 @@ export default class ContentLinkView extends ButtonView { } this.children.add(this.#statusIcon); } - if (this.renderOptions?.renderCancelButton) { if (!this.#cancelButton) { throw new Error( @@ -192,12 +178,10 @@ export default class ContentLinkView extends ButtonView { this.element.removeAttribute("aria-labelledby"); } } - #endContentSubscription(): void { this.#contentSubscription?.unsubscribe(); this.#contentSubscription = undefined; } - #registerSubscription(subscriptionSupplier: () => Subscription): void { if (!this.#acceptSubscriptions) { return; @@ -206,7 +190,6 @@ export default class ContentLinkView extends ButtonView { this.#endContentSubscription(); this.#contentSubscription = subscriptionSupplier(); } - #subscribeToContent(uriPath: UriPath): void { serviceAgent .fetchService(createContentDisplayServiceDescriptor()) @@ -234,11 +217,9 @@ export default class ContentLinkView extends ButtonView { console.warn("ContentDisplayService not available.", reason); }); } - get cancelButton(): ButtonView | undefined { return this.#cancelButton; } - override destroy(): void { // Prevent possible asynchronous events from re-triggering subscription. this.#acceptSubscriptions = false; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkViewFactory.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkViewFactory.ts index 2f9583123..17493a1e6 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkViewFactory.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkViewFactory.ts @@ -1,9 +1,7 @@ -import { LabeledFieldView } from "@ckeditor/ckeditor5-ui"; import "../../../theme/contentlinkview.css"; import ContentLinkView from "./ContentLinkView"; -import { Editor } from "@ckeditor/ckeditor5-core"; import { requireNonNullsAugmentedLinkUI } from "./AugmentedLinkUI"; -import { LinkUI } from "@ckeditor/ckeditor5-link"; +import { LabeledFieldView, Editor, LinkUI } from "ckeditor5"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { executeOpenContentInTabCommand } from "../OpenContentInTabCommand"; import { requireContentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; @@ -21,7 +19,6 @@ const createContentLinkView = (linkUI: LinkUI, editor: Editor): LabeledFieldView const logger = LoggerProvider.getLogger("ContentLinkView"); const { t } = editor.locale; const { actionsView, formView } = requireNonNullsAugmentedLinkUI(linkUI, "actionsView", "formView"); - const contentLinkView = new LabeledFieldView( editor.locale, () => @@ -30,7 +27,6 @@ const createContentLinkView = (linkUI: LinkUI, editor: Editor): LabeledFieldView renderCancelButton: true, }), ); - contentLinkView.set({ label: t("Link"), isEmpty: false, @@ -40,7 +36,6 @@ const createContentLinkView = (linkUI: LinkUI, editor: Editor): LabeledFieldView // Propagate URI-Path from formView (see FormViewExtension) to ContentLinkView const { fieldView } = contentLinkView; - fieldView.bind("uriPath").to(formView, "contentUriPath"); // Propagate Content Name from ContentLinkView to FormView, as we require to // knowing the name in some link insertion scenarios. @@ -59,7 +54,6 @@ const createContentLinkView = (linkUI: LinkUI, editor: Editor): LabeledFieldView }); } }); - fieldView.on("executeCancel", () => { formView.set({ contentUriPath: undefined, @@ -69,8 +63,6 @@ const createContentLinkView = (linkUI: LinkUI, editor: Editor): LabeledFieldView }); formView.urlInputView.focus(); }); - return contentLinkView; }; - export default createContentLinkView; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/CoreMediaIconView.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/CoreMediaIconView.ts index eaa4878f7..eeaa20398 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/CoreMediaIconView.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/CoreMediaIconView.ts @@ -1,4 +1,4 @@ -import { View } from "@ckeditor/ckeditor5-ui"; +import { View } from "ckeditor5"; /** * The CoreMedia icon view class. @@ -8,10 +8,8 @@ import { View } from "@ckeditor/ckeditor5-ui"; export default class CoreMediaIconView extends View { declare iconClass: string | undefined; declare id: string; - constructor() { super(); - const bind = this.bindTemplate; /* @@ -31,7 +29,6 @@ export default class CoreMediaIconView extends View { * @default "" */ this.set("id", ""); - this.setTemplate({ tag: "span", attributes: { diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTarget.ts b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTarget.ts index aad549816..9d20e13e1 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTarget.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTarget.ts @@ -1,6 +1,5 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; import LinkTargetModelView from "./LinkTargetModelView"; -import { Link } from "@ckeditor/ckeditor5-link"; +import { Plugin, Link } from "ckeditor5"; import LinkTargetActionsViewExtension from "./LinkTargetActionsViewExtension"; import "../lang/linktarget"; /** @@ -11,6 +10,5 @@ import "../lang/linktarget"; */ export default class LinkTarget extends Plugin { public static readonly pluginName = "LinkTarget" as const; - static readonly requires = [Link, LinkTargetModelView, LinkTargetActionsViewExtension]; } diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts index 4fc347fb8..c4c7676ae 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts @@ -1,14 +1,11 @@ -import { Plugin, Command } from "@ckeditor/ckeditor5-core"; -import { LinkUI } from "@ckeditor/ckeditor5-link"; // LinkActionsView: See ckeditor/ckeditor5#12027. import LinkActionsView from "@ckeditor/ckeditor5-link/src/ui/linkactionsview"; -import { ButtonView, ToolbarSeparatorView, View, ContextualBalloon } from "@ckeditor/ckeditor5-ui"; import { parseLinkTargetConfig } from "./config/LinkTargetConfig"; import LinkTargetOptionDefinition from "./config/LinkTargetOptionDefinition"; import CustomLinkTargetUI from "./ui/CustomLinkTargetUI"; import { OTHER_TARGET_NAME } from "./config/DefaultTarget"; import "../../theme/linktargetactionsviewextension.css"; -import { Locale } from "@ckeditor/ckeditor5-utils"; +import { Plugin, Command, LinkUI, ButtonView, ToolbarSeparatorView, View, ContextualBalloon, Locale } from "ckeditor5"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { handleFocusManagement } from "@coremedia/ckeditor5-link-common/src/FocusUtils"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; @@ -30,9 +27,7 @@ class LinkTargetActionsViewExtension extends Plugin { public static readonly pluginName = "LinkTargetActionsViewExtension" as const; static readonly requires = [LinkUI, CustomLinkTargetUI]; static readonly #logger = LoggerProvider.getLogger(LinkTargetActionsViewExtension.pluginName); - #initialized = false; - init(): void { const initInformation = reportInitStart(this); const editor = this.editor; @@ -44,7 +39,6 @@ class LinkTargetActionsViewExtension extends Plugin { this.#initialized = true; } }); - reportInitEnd(initInformation); } @@ -73,9 +67,12 @@ class LinkTargetActionsViewExtension extends Plugin { return this.#createTargetButton(linkUI.editor.locale, buttonConfig, linkTargetCommand); } }); - - const separatorLeft: ToolbarSeparatorView & { class?: string } = new ToolbarSeparatorView(); - separatorLeft.set({ class: "cm-ck-item-separator" }); + const separatorLeft: ToolbarSeparatorView & { + class?: string; + } = new ToolbarSeparatorView(); + separatorLeft.set({ + class: "cm-ck-item-separator", + }); separatorLeft.extendTemplate({ attributes: { class: ["cm-ck-item-separator", "cm-ck-item-separator--left"], @@ -95,10 +92,8 @@ class LinkTargetActionsViewExtension extends Plugin { // no need to render the buttons manually, just add them to the DOM this.#addButtons(actionsView, [separatorLeft, ...buttons, separatorRight]); } - LinkTargetActionsViewExtension.#render(actionsView, buttons); } - static #render(actionsView: LinkActionsView, addedButtons: View[]): void { handleFocusManagement(actionsView, addedButtons, actionsView.unlinkButtonView, "before"); } @@ -147,13 +142,10 @@ class LinkTargetActionsViewExtension extends Plugin { "value", (value: unknown) => value === buttonConfig.name || (value === undefined && buttonConfig.name === "_self"), ); - view.bind("isEnabled").to(linkTargetCommand); - view.on("execute", () => { linkTargetCommand?.execute(buttonConfig.name); }); - return view; } @@ -174,5 +166,4 @@ class LinkTargetActionsViewExtension extends Plugin { }); } } - export default LinkTargetActionsViewExtension; diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts index 6dda473d2..755982eda 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts @@ -1,13 +1,11 @@ /* eslint no-null/no-null: off */ -import { Plugin } from "@ckeditor/ckeditor5-core"; import { LINK_TARGET_MODEL, LINK_TARGET_VIEW } from "./Constants"; import LinkTargetCommand from "./command/LinkTargetCommand"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { getLinkAttributes, LinkAttributes } from "@coremedia/ckeditor5-link-common/src/LinkAttributes"; -import { DiffItemAttribute, Range, Writer } from "@ckeditor/ckeditor5-engine"; import { computeDefaultLinkTargetForUrl } from "./config/LinkTargetConfig"; -import { DiffItem, DiffItemInsert } from "@ckeditor/ckeditor5-engine/src/model/differ"; +import { Plugin, DiffItemAttribute, Range, Writer, DiffItem, DiffItemInsert } from "ckeditor5"; /** * Adds an attribute `linkTarget` to the model, which will be represented @@ -30,14 +28,11 @@ export default class LinkTargetModelView extends Plugin { */ init(): Promise | void { const initInformation = reportInitStart(this); - const { editor } = this; - getLinkAttributes(editor)?.registerAttribute({ model: LINK_TARGET_MODEL, view: LINK_TARGET_VIEW, }); - editor.commands.add("linkTarget", new LinkTargetCommand(editor)); /** @@ -53,10 +48,8 @@ export default class LinkTargetModelView extends Plugin { writer.setAttribute("linkTarget", linkTarget, range); }); }; - this.editor.model.document.registerPostFixer((writer) => { const changes = this.editor.model.document.differ.getChanges(); - for (const entry of changes) { const linkTarget = this.#computeLinkTarget(entry); if (!linkTarget) { @@ -67,7 +60,6 @@ export default class LinkTargetModelView extends Plugin { } return false; }); - reportInitEnd(initInformation); } @@ -111,7 +103,6 @@ export default class LinkTargetModelView extends Plugin { */ #computeLinkTarget(diffItem: DiffItem): string | undefined { let url: unknown; - if (this.#isDiffItemAttribute(diffItem)) { // The linkHref attribute was added/changed/deleted for this node. // @@ -123,7 +114,6 @@ export default class LinkTargetModelView extends Plugin { // value is `null` then. url = diffItem.attributeNewValue; } - if (this.#isDiffItemInsert(diffItem)) { // An entry with linkHref attribute was inserted. // @@ -131,11 +121,9 @@ export default class LinkTargetModelView extends Plugin { // dropped into the editor or into the link balloon. url = diffItem.attributes.get("linkHref"); } - if (url && typeof url === "string") { return computeDefaultLinkTargetForUrl(url, this.editor.config); } - return undefined; } } diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/command/LinkTargetCommand.ts b/packages/ckeditor5-coremedia-link/src/linktarget/command/LinkTargetCommand.ts index eee361095..f42189ebe 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/command/LinkTargetCommand.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/command/LinkTargetCommand.ts @@ -1,9 +1,17 @@ -import { Command } from "@ckeditor/ckeditor5-core"; -import { Element, Range, Schema, DocumentSelection, Position, Model, Writer } from "@ckeditor/ckeditor5-engine"; import { LINK_TARGET_MODEL } from "../Constants"; import { LINK_HREF_MODEL } from "@coremedia/ckeditor5-link-common/src/Constants"; -import { first } from "@ckeditor/ckeditor5-utils"; -import { findAttributeRange } from "@ckeditor/ckeditor5-typing"; +import { + Command, + Element, + Range, + Schema, + DocumentSelection, + Position, + Model, + Writer, + first, + findAttributeRange, +} from "ckeditor5"; /** * Signals to delete a target. @@ -119,7 +127,6 @@ class LinkTargetCommand extends Command { const model = editor.model; const findCurrentLinkHrefRanges = LinkTargetCommand.#findCurrentLinkHrefRanges; const setOrRemoveTarget = LinkTargetCommand.#setOrRemoveTarget; - model.change((writer) => { // Get ranges to unlink. const rangesToUpdate = findCurrentLinkHrefRanges(model); @@ -158,20 +165,16 @@ class LinkTargetCommand extends Command { */ static #findCurrentLinkHrefRanges(model: Model): Range[] { const selection = model.document.selection; - if (selection.isCollapsed) { const findAttributeRanges = LinkTargetCommand.#findAttributeRanges; const linkHrefModel = selection?.getAttribute(LINK_HREF_MODEL); - if (typeof linkHrefModel !== "string") { throw new Error( `Unexpected type for attribute ${LINK_HREF_MODEL}. Expected "string" but value is: ${linkHrefModel}`, ); } - return findAttributeRanges(selection.getFirstPosition(), LINK_HREF_MODEL, linkHrefModel, model); } - return [...model.schema.getValidRanges([...selection.getRanges()], LINK_HREF_MODEL)]; } @@ -196,6 +199,5 @@ class LinkTargetCommand extends Command { return [findAttributeRange(position, attributeName, value, model)]; } } - export default LinkTargetCommand; export { Target, DeletedTarget }; diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/config/LinkTargetConfig.ts b/packages/ckeditor5-coremedia-link/src/linktarget/config/LinkTargetConfig.ts index e35c9bd1b..c33ce6639 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/config/LinkTargetConfig.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/config/LinkTargetConfig.ts @@ -2,8 +2,7 @@ import LinkTargetOptionDefinition from "./LinkTargetOptionDefinition"; import DefaultTarget, { DEFAULT_TARGETS_ARRAY, getDefaultTargetDefinition } from "./DefaultTarget"; -import { Config } from "@ckeditor/ckeditor5-utils"; -import { EditorConfig } from "@ckeditor/ckeditor5-core/src/editor/editorconfig"; +import { Config, EditorConfig } from "ckeditor5"; import { isTargetDefaultRuleDefinitionWithFilter, isTargetDefaultRuleDefinitionWithType, @@ -68,7 +67,6 @@ interface LinkTargetConfig { targets?: (DefaultTarget | LinkTargetOptionDefinition)[]; defaultTargets?: TargetDefaultRuleDefinition[]; } - const logger = LoggerProvider.getLogger("LinkTargetConfig"); /** @@ -81,11 +79,9 @@ const logger = LoggerProvider.getLogger("LinkTargetConfig"); const parseDefaultLinkTargetConfig = (config: Config): TargetDefaultRuleDefinitionWithFilter[] => { const fromConfig: unknown = config.get("link.defaultTargets"); const result: TargetDefaultRuleDefinitionWithFilter[] = []; - if (fromConfig === null || fromConfig === undefined) { return []; } - if (!Array.isArray(fromConfig)) { throw new Error( `link.defaultTargets: Unexpected configuration. Array expected but is: ${JSON.stringify(fromConfig)}`, @@ -96,20 +92,17 @@ const parseDefaultLinkTargetConfig = (config: Config): TargetDefau if (isTargetDefaultRuleDefinitionWithFilter(entry)) { result.push(entry); } - if (isTargetDefaultRuleDefinitionWithType(entry)) { const filter = getFilterByType(entry.type); if (!filter) { return; } - result.push({ filter, target: entry.target, }); } }); - return result; }; @@ -150,11 +143,9 @@ export const parseLinkTargetConfig = (config: Config): Required
  • { if (typeof entry === "string") { @@ -213,8 +204,6 @@ export const parseLinkTargetConfig = (config: Config): Required
  • void; declare disableCssTransitions: () => void; - constructor(linkTargetCommand: Command, locale?: Locale) { super(locale); - const t = this.locale?.t; /** @@ -94,22 +94,17 @@ export default class CustomLinkTargetInputFormView extends View { actions: { // Navigate form fields backwards using the Shift + Tab keystroke. focusPrevious: "shift + tab", - // Navigate form fields forwards using the Tab key. focusNext: "tab", }, }); - this.setTemplate({ tag: "form", - attributes: { class: ["ck", "cm-ck-custom-link-target-form", "ck-responsive-form"], - // https://github.com/ckeditor/ckeditor5-image/issues/40 tabindex: "-1", }, - children: [this.labeledInput, this.saveButtonView, this.cancelButtonView], }); @@ -127,12 +122,11 @@ export default class CustomLinkTargetInputFormView extends View { // types expect an Emitter here, but listenTo() also works with HTMLElements. // We need to cast to unknown first because types are not overlapping sufficiently this.keystrokes.listenTo(this.element as unknown as Emitter); - - submitHandler({ view: this }); - + submitHandler({ + view: this, + }); [this.labeledInput, this.saveButtonView, this.cancelButtonView].forEach((v) => { const { element } = v; - if (!element) { console.debug("Unexpected state. Required 'element' unset.", v); throw new Error("Unexpected state. Required 'element' unset."); @@ -156,23 +150,19 @@ export default class CustomLinkTargetInputFormView extends View { */ #createButton(label: string, icon: string, className: string, eventName?: string): ButtonView { const button = new ButtonView(this.locale); - button.set({ label, icon, tooltip: true, }); - button.extendTemplate({ attributes: { class: className, }, }); - if (eventName) { button.delegate("execute").to(this, eventName); } - return button; } diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts b/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts index 85eb216a3..55faf4a96 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts @@ -1,13 +1,20 @@ -import { Plugin, Command } from "@ckeditor/ckeditor5-core"; -import { ButtonView, ContextualBalloon, clickOutsideHandler } from "@ckeditor/ckeditor5-ui"; -import { Locale, Config, PositionOptions } from "@ckeditor/ckeditor5-utils"; import CustomLinkTargetInputFormView from "./CustomLinkTargetInputFormView"; -import { LinkUI } from "@ckeditor/ckeditor5-link"; import { parseLinkTargetConfig } from "../config/LinkTargetConfig"; import { OTHER_TARGET_NAME, requireDefaultTargetDefinition } from "../config/DefaultTarget"; import LinkTargetOptionDefinition from "../config/LinkTargetOptionDefinition"; import { ifCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; -import { EditorConfig } from "@ckeditor/ckeditor5-core/src/editor/editorconfig"; +import { + Plugin, + Command, + ButtonView, + ContextualBalloon, + clickOutsideHandler, + Locale, + Config, + PositionOptions, + LinkUI, + EditorConfig, +} from "ckeditor5"; import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; /** @@ -17,14 +24,12 @@ import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/s */ export default class CustomLinkTargetUI extends Plugin { public static readonly pluginName = "CustomLinkTargetUI" as const; - static readonly customTargetButtonName: string = "customLinkTargetButton"; - #balloon: ContextualBalloon | undefined = undefined; /** * Form View to enter custom target. Initialized during `init`. */ - #form!: CustomLinkTargetInputFormView; + #form: CustomLinkTargetInputFormView; /** * Names, which are bound to other target-selection buttons, and thus, are * perceived as _reserved names_. Such names must not show up in the edit @@ -36,15 +41,12 @@ export default class CustomLinkTargetUI extends Plugin { * LinkUI Plugin. Initialized on `init`. */ linkUI!: LinkUI; - static readonly requires = [ContextualBalloon, LinkUI]; - async init(): Promise { const editor = this.editor; const { otherNames, myConfig } = this.#parseConfig(editor.config); this.linkUI = editor.plugins.get(LinkUI); const linkTargetCommand: Command = await ifCommand(editor, "linkTarget"); - this.#reservedTargetNames = new Set(otherNames); this.#createButton(linkTargetCommand, myConfig); this.#createForm(linkTargetCommand); @@ -58,20 +60,20 @@ export default class CustomLinkTargetUI extends Plugin { * @returns well-defined attribute values, which should not be handled by `_other` in `otherNames`; * button-configuration in `myConfig` */ - #parseConfig(config: Config): { otherNames: string[]; myConfig: Required } { + #parseConfig(config: Config): { + otherNames: string[]; + myConfig: Required; + } { const linkTargetDefinitions = parseLinkTargetConfig(config); - const otherNames = linkTargetDefinitions .map((definition): string => definition.name) .filter((name): boolean => name !== OTHER_TARGET_NAME); - const myConfig: Required = { // First provide some defaults, in case they don't exist in definition. ...requireDefaultTargetDefinition(OTHER_TARGET_NAME), // Now override with definition found in config. ...linkTargetDefinitions.find((definition) => definition.name === OTHER_TARGET_NAME), }; - return { otherNames, myConfig, @@ -87,10 +89,8 @@ export default class CustomLinkTargetUI extends Plugin { const reservedTargetNames = this.#reservedTargetNames; const t = editor.locale.t; const { ui } = this.editor; - ui.componentFactory.add(CustomLinkTargetUI.customTargetButtonName, (locale: Locale) => { const view = new ButtonView(locale); - view.set({ label: t(definition.title), tooltip: true, @@ -98,7 +98,6 @@ export default class CustomLinkTargetUI extends Plugin { class: "cm-ck-target-button", isToggleable: true, }); - view.bind("isOn").to(linkTargetCommand, "value", (value: unknown) => { if (typeof value !== "string") { return false; @@ -124,11 +123,9 @@ export default class CustomLinkTargetUI extends Plugin { } return true; }); - this.listenTo(view, "execute", () => { this.#showForm(); }); - return view; }); } @@ -151,13 +148,11 @@ export default class CustomLinkTargetUI extends Plugin { // Render the form so its #element is available for clickOutsideHandler. this.#form.render(); - this.listenTo(this.#form, "submit", () => { const { value } = this.#form.labeledInput.fieldView.element as HTMLInputElement; editor.execute("linkTarget", value); this.#hideForm(true); }); - this.listenTo(this.#form, "cancel", () => { this.#hideForm(true); }); @@ -167,9 +162,7 @@ export default class CustomLinkTargetUI extends Plugin { this.#hideForm(true); cancel(); }); - const { element } = this.#balloon.view; - if (!element) { throw new Error("Unexpected state. Element of balloon view is unavailable."); } @@ -190,20 +183,16 @@ export default class CustomLinkTargetUI extends Plugin { if (this.#isVisible) { return; } - const editor = this.editor; const linkTargetCommand = editor.commands.get("linkTarget"); const labeledInput = this.#form.labeledInput; - this.#form.disableCssTransitions(); - if (!this.#isInBalloon) { this.#balloon?.add({ view: this.#form, position: this.#getBalloonPositionData(), }); } - const commandValue: string = (linkTargetCommand?.value ?? "") as string; // For 'reserved targets' as current value, we still want to display an empty field. const initialValue: string = @@ -215,9 +204,7 @@ export default class CustomLinkTargetUI extends Plugin { // old value instead of the actual value of the command. // https://github.com/ckeditor/ckeditor5-image/issues/114 labeledInput.fieldView.value = (labeledInput.fieldView.element as HTMLInputElement).value = initialValue; - this.#form.labeledInput.fieldView.select(); - this.#form.enableCssTransitions(); } @@ -236,9 +223,7 @@ export default class CustomLinkTargetUI extends Plugin { if (this.#form.focusTracker.isFocused) { this.#form.saveButtonView.focus(); } - this.#balloon?.remove(this.#form); - if (focusEditable) { this.editor.editing.view.focus(); } @@ -274,13 +259,11 @@ export default class CustomLinkTargetUI extends Plugin { interface HasGetBalloonPositionData { _getBalloonPositionData(): Partial; } - const isHasGetBalloonPositionData = (value: unknown): value is HasGetBalloonPositionData => typeof value === "object" && !!value && "_getBalloonPositionData" in value && typeof value._getBalloonPositionData === "function"; - const asHasGetBalloonPositionData = (value: unknown): HasGetBalloonPositionData => { if (isHasGetBalloonPositionData(value)) { return value; diff --git a/packages/ckeditor5-coremedia-link/src/utils.ts b/packages/ckeditor5-coremedia-link/src/utils.ts index 69b165fee..b12ffaa78 100644 --- a/packages/ckeditor5-coremedia-link/src/utils.ts +++ b/packages/ckeditor5-coremedia-link/src/utils.ts @@ -1,5 +1,4 @@ -import { View } from "@ckeditor/ckeditor5-ui"; -import { Observable, PriorityString, Emitter } from "@ckeditor/ckeditor5-utils"; +import { View, Observable, PriorityString, Emitter } from "ckeditor5"; /** * Adds a CSS class, or an array of CSS classes to a view template. @@ -58,7 +57,6 @@ export const addClass = (view: View, classNames: string[] | string): void => { if (!view.element) { return; } - if (!Array.isArray(classNames)) { classNames = [classNames]; } @@ -76,7 +74,6 @@ export const removeClass = (view: View, classNames: string[] | string): void => if (!view.element) { return; } - if (!Array.isArray(classNames)) { classNames = [classNames]; } @@ -99,7 +96,9 @@ export const createDecoratorHook = ( methodName: keyof O & string, callback: () => void, listenerCmp: Emitter, - options?: { priority?: number | PriorityString }, + options?: { + priority?: number | PriorityString; + }, ): void => { if (!isDecorated(methodParentCmp, methodName)) { methodParentCmp.decorate(methodName); @@ -109,7 +108,6 @@ export const createDecoratorHook = ( ); } } - listenerCmp.listenTo(methodParentCmp, methodName, callback, options); }; @@ -120,13 +118,11 @@ export const createDecoratorHook = ( interface EmitterInternal { _events: Record; } - const isEmitterInternal = (observable: object): observable is EmitterInternal => { if ("_events" in observable) { return typeof observable._events === "object"; } return false; }; - const isDecorated = (observable: Observable, methodName: string): boolean => isEmitterInternal(observable) && observable._events.hasOwnProperty(methodName); diff --git a/packages/ckeditor5-coremedia-richtext-support/src/CoreMediaRichTextSupportConfig.ts b/packages/ckeditor5-coremedia-richtext-support/src/CoreMediaRichTextSupportConfig.ts index 95390d335..f16845671 100644 --- a/packages/ckeditor5-coremedia-richtext-support/src/CoreMediaRichTextSupportConfig.ts +++ b/packages/ckeditor5-coremedia-richtext-support/src/CoreMediaRichTextSupportConfig.ts @@ -1,7 +1,5 @@ import { InheritingMatcherPattern } from "./ReducedMatcherPattern"; -import { EditorConfig } from "@ckeditor/ckeditor5-core"; -import { Config } from "@ckeditor/ckeditor5-utils"; - +import { EditorConfig, Config } from "ckeditor5"; const COREMEDIA_RICHTEXT_SUPPORT_CONFIG_KEY = "coremedia:richtextSupport"; /** @@ -39,9 +37,7 @@ interface CoreMediaRichTextSupportConfig { */ aliases?: InheritingMatcherPattern[]; } - const getConfig = (config: Config): CoreMediaRichTextSupportConfig => config.get(COREMEDIA_RICHTEXT_SUPPORT_CONFIG_KEY) ?? {}; - export default CoreMediaRichTextSupportConfig; export { COREMEDIA_RICHTEXT_SUPPORT_CONFIG_KEY, getConfig }; diff --git a/packages/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport.ts b/packages/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport.ts index c9c7ea23c..67455a70a 100644 --- a/packages/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport.ts +++ b/packages/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport.ts @@ -1,5 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; -import { GeneralHtmlSupport } from "@ckeditor/ckeditor5-html-support"; +import { Plugin, GeneralHtmlSupport } from "ckeditor5"; import RichTextDataFilter from "./RichTextDataFilter"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; @@ -9,13 +8,10 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common */ class GeneralRichTextSupport extends Plugin { public static readonly pluginName = "GeneralRichTextSupport" as const; - static readonly requires = [GeneralHtmlSupport, RichTextDataFilter]; - init(): Promise | void { const initInformation = reportInitStart(this); reportInitEnd(initInformation); } } - export default GeneralRichTextSupport; diff --git a/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts b/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts index 25bad5d72..1e8ce95a6 100644 --- a/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts +++ b/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts @@ -1,7 +1,6 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { DataFilter } from "@ckeditor/ckeditor5-html-support"; +import { Plugin, DataFilter } from "ckeditor5"; import ReducedMatcherPattern, { InheritingMatcherPattern, resolveInheritance, @@ -26,20 +25,14 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common class RichTextDataFilter extends Plugin { public static readonly pluginName = "GeneralRichTextDataFilter" as const; static readonly #logger: Logger = LoggerProvider.getLogger(RichTextDataFilter.pluginName); - static readonly requires = [DataFilter]; - - #delegate?: DataFilter; + #delegate: DataFilter; readonly #config: ReducedMatcherPattern[] = []; - init(): Promise | void { const logger = RichTextDataFilter.#logger; - const initInformation = reportInitStart(this); - const editor = this.editor; this.#delegate = editor.plugins.get(DataFilter); - this.#loadAllowedConfig(COREMEDIA_RICHTEXT_1_0_CONFIG); // Add alias elements from default data-processing. @@ -84,17 +77,18 @@ class RichTextDataFilter extends Plugin { inherit: "td", }, ]); - const config = getConfig(editor.config); // Doing this as an extra step, allows using previously introduced aliases // (see above) as reference. Thus, you may also define an alias for // `

    ` now. this.loadAliases(config.aliases ?? []); - if (logger.isDebugEnabled()) { - logger.debug("Declared elements and attributes to GHS.", { config: { ...this.#config } }); + logger.debug("Declared elements and attributes to GHS.", { + config: { + ...this.#config, + }, + }); } - reportInitEnd(initInformation); } @@ -126,5 +120,4 @@ class RichTextDataFilter extends Plugin { this.#loadAllowedConfig(patterns); } } - export default RichTextDataFilter; diff --git a/packages/ckeditor5-coremedia-richtext-support/src/augmentation.ts b/packages/ckeditor5-coremedia-richtext-support/src/augmentation.ts index f445a3329..acc08bd6f 100644 --- a/packages/ckeditor5-coremedia-richtext-support/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-richtext-support/src/augmentation.ts @@ -4,8 +4,7 @@ import { GeneralRichTextSupport, RichTextDataFilter, } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface EditorConfig { /** * The configuration for General Rich Text Support. To be used, especially @@ -14,7 +13,6 @@ declare module "@ckeditor/ckeditor5-core" { */ [COREMEDIA_RICHTEXT_SUPPORT_CONFIG_KEY]?: CoreMediaRichTextSupportConfig; } - interface PluginsMap { [GeneralRichTextSupport.pluginName]: GeneralRichTextSupport; [RichTextDataFilter.pluginName]: RichTextDataFilter; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/DataDrivenTests.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/DataDrivenTests.ts index 3d94da135..25531a85d 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/DataDrivenTests.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/DataDrivenTests.ts @@ -1,9 +1,8 @@ import "jest-xml-matcher"; import HtmlFilter from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; -import Editor from "@ckeditor/ckeditor5-core/src/editor/editor"; +import { Editor } from "ckeditor5"; import { getV10Config, parseXml } from "./Utils"; import { silenced } from "../../Silenced"; - jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); //@ts-expect-error We should rather mock ClassicEditor or similar here. @@ -73,7 +72,6 @@ export interface DirectionRestriction { */ direction?: Direction; } - export type DocumentPostProcessor = (document: Document) => void; /** @@ -121,7 +119,6 @@ const isOnly = (data: any): data is OnlyTestCase => { } return typeof data.only === "boolean"; }; - export const ddTest = ( direction: Direction, data: T | (T & SkippableTestCase) | (T & OnlyTestCase) | (T & DirectionRestriction), @@ -131,14 +128,12 @@ export const ddTest = ( fn(data); }; const { name } = data; - if (hasDirectionRestriction(data)) { if (data.direction !== Direction.both && data.direction !== direction) { test.skip(`Not applicable for current data processing direction: ${name}`, testFn); return; } } - if (isSkippable(data)) { if (data.skip) { let skipName: string; @@ -170,23 +165,18 @@ export const ddTest = ( */ export const testData = (data: T[], generator = (d: T) => d.name): [string, T][] => data.map((d) => [generator(d), d]); - export type DataProcessingTestCase = NamedTestCase & SkippableTestCase & OnlyTestCase & SilentTestCase & DataProcessingData & DirectionRestriction; - const { toData, toView } = getV10Config(); - export const toDataFilter = new HtmlFilter(toData, MOCK_EDITOR); export const toViewFilter = new HtmlFilter(toView, MOCK_EDITOR); const serializer = new XMLSerializer(); - export const getFilter = (direction: Direction.toData | Direction.toDataView): HtmlFilter => direction === Direction.toDataView ? toViewFilter : toDataFilter; - export const applyFilter = ( filter: HtmlFilter, input: string, @@ -198,7 +188,6 @@ export const applyFilter = ( postProcessor?.(xmlDocument); return serializer.serializeToString(xmlDocument); }; - export const dataProcessingTest = ( direction: Direction.toData | Direction.toDataView, data: DataProcessingTestCase, @@ -206,7 +195,6 @@ export const dataProcessingTest = ( const filter: HtmlFilter = getFilter(direction); let input: string; let output: string; - if (direction === Direction.toDataView) { input = data.data; output = data.dataView; @@ -214,13 +202,11 @@ export const dataProcessingTest = ( input = data.dataView; output = data.data; } - ddTest(direction, data, () => { const actualXml = applyFilter(filter, input, data.silent, data.postProcessActual); expect(actualXml).toEqualXML(output); }); }; - export const eachDataProcessingTest = ( direction: Direction.toData | Direction.toDataView, testCases: DataProcessingTestCase[], @@ -231,7 +217,6 @@ export const eachDataProcessingTest = ( dataProcessingTest(direction, data); }); }; - export const allDataProcessingTests = (testCases: DataProcessingTestCase[]): void => { describe("Data → Data View", () => { eachDataProcessingTest(Direction.toDataView, testCases); diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts index 9ab1824a3..e5719929b 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts @@ -2,12 +2,10 @@ import "jest-xml-matcher"; import ToDataProcessor from "../../../src/ToDataProcessor"; -import Editor from "@ckeditor/ckeditor5-core/src/editor/editor"; +import { Editor } from "ckeditor5"; import HtmlFilter from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; import { getV10Config } from "./Utils"; - jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); - const EXECUTION_REPETITIONS = 100; const FIBONACCI_INDEX_FROM = 1; /** @@ -52,7 +50,6 @@ function fib(idx: number, memo?: Map): number { //@ts-expect-error We should rather mock ClassicEditor or similar here. const MOCK_EDITOR = new Editor(); const PARSER = new DOMParser(); - function parseAndValidate(xmlString: string): Document { const xmlDocument = PARSER.parseFromString(xmlString, "text/html"); const xPathResult: XPathResult = xmlDocument.evaluate( @@ -84,14 +81,12 @@ interface PerformanceTestData { */ gracePercentage: number; } - interface TestData extends PerformanceTestData { /** * The DOM we start from. */ from: string; } - type NamedTestData = [ /** * A name/description for the test (will be printed to output). @@ -107,15 +102,12 @@ const fxLtrText = "Lorem ipsum dolor."; const fxRtlText = "ב היא יסוד."; const fxClass = "class--fixture"; const fxLang = "ja-JP-u-ca-japanese-x-lvariant-JP"; - const { toData } = getV10Config(); const filter: HtmlFilter = new HtmlFilter(toData, MOCK_EDITOR); const dataProcessor: ToDataProcessor = new ToDataProcessor(filter); - function wrapView(xml: string): string { return `${xml}`; } - function median(sequence: number[]): number { sequence.sort(); return sequence[Math.ceil(sequence.length / 2)]; @@ -127,17 +119,14 @@ function standardDeviation(sequence: number[]): number { const mean = sequence.reduce((a, b) => a + b) / n; return Math.sqrt(sequence.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n); } - const blockquoteFixtures: string[] = [ `
    ${fxLtrText}
    `, `
    ${fxLtrText}
    `, ]; - const preFixtures: string[] = [ `
    ${fxLtrText}
    `, `
    ${fxLtrText}
    `, ]; - function generateInlineFixtures(el: string): string[] { return [ `<${el}>${fxLtrText}
    ${fxLtrText}`, @@ -158,7 +147,6 @@ function generateInlineFixtures(el: string): string[] { `<${el}>${fxLtrText}`, ]; } - function generateHeadingFixtures(el: string): string[] { return [ `<${el}>${fxLtrText}`, @@ -167,7 +155,6 @@ function generateHeadingFixtures(el: string): string[] { `<${el} class="${fxClass}" lang="${fxLang}" dir="ltr">${fxLtrText}`, ]; } - const headingFixtures: string[] = [ ...generateHeadingFixtures("h1"), ...generateHeadingFixtures("h2"), @@ -176,31 +163,25 @@ const headingFixtures: string[] = [ ...generateHeadingFixtures("h5"), ...generateHeadingFixtures("h6"), ]; - const paragraphFixtures: string[] = [ `

    ${fxLtrText}

    `, `

    ${fxRtlText}

    `, `

    ${fxLtrText}

    `, ...generateInlineFixtures("p"), ]; - function generateSimpleRows(el: string, cells: number, rows = 1): string[] { const result: string[] = []; const singleRow: string[] = []; - singleRow.push(``); for (let i = 0; i < cells; i++) { singleRow.push(`<${el}> class="${fxClass}" lang="${fxLang}" dir="ltr">`, fxLtrText, ``); } singleRow.push(``); - for (let j = 0; j < rows; j++) { result.push(...singleRow); } - return result; } - const tableFixtures: string[] = [ [ ``, @@ -219,15 +200,12 @@ const tableFixtures: string[] = [ `
    `, ].join(""), ]; - function generateListFixtures(el: string): string[] { return [ `<${el} class="${fxClass}" lang="${fxLang}" dir="ltr">
  • ${fxLtrText}
  • `, ]; } - const listFixtures: string[] = [...generateListFixtures("ol"), ...generateListFixtures("ul")]; - function generateComplexView(count: number): string[] { const result: string[] = []; const initial: string[] = [ @@ -243,7 +221,6 @@ function generateComplexView(count: number): string[] { } return result; } - function viewToDom(xml: string): DocumentFragment { const view = parseAndValidate(xml); const nodes = Array.from(view.documentElement.childNodes); @@ -251,7 +228,6 @@ function viewToDom(xml: string): DocumentFragment { fragment.append(...nodes); return fragment; } - describe("RichTextDataProcessor.toData", () => { const testData: NamedTestData[] = [ [ @@ -263,7 +239,6 @@ describe("RichTextDataProcessor.toData", () => { }, ], ]; - for (let i = FIBONACCI_INDEX_FROM; i <= FIBONACCI_INDEX_TO; i++) { const f = fib(i); testData.push([ @@ -276,12 +251,13 @@ describe("RichTextDataProcessor.toData", () => { }, ]); } - describe.each(testData)("(%#) %s", (name: string, data: TestData) => { const { optimalMilliseconds, gracePercentage } = data; const maximumMilliseconds = optimalMilliseconds + optimalMilliseconds * gracePercentage; - - function performToData(): { data: Document; elements: number } { + function performToData(): { + data: Document; + elements: number; + } { const viewData: DocumentFragment = viewToDom(data.from); const elements = viewData.querySelectorAll("*").length; return { @@ -289,33 +265,22 @@ describe("RichTextDataProcessor.toData", () => { elements, }; } - - test(`Should not have consumed more than ${ - maximumMilliseconds >= 0 ? maximumMilliseconds : "" - } ms (median).`, () => { + test(`Should not have consumed more than ${maximumMilliseconds >= 0 ? maximumMilliseconds : ""} ms (median).`, () => { const { elements } = performToData(); const measuredMilliseconds: number[] = []; - for (let i = 0; i < EXECUTION_REPETITIONS; i++) { const startMilliseconds = performance.now(); performToData(); const endMilliseconds = performance.now(); measuredMilliseconds.push(endMilliseconds - startMilliseconds); } - const actualTime = median(measuredMilliseconds); const stddev = standardDeviation(measuredMilliseconds); const minTime = Math.min(...measuredMilliseconds); const maxTime = Math.max(...measuredMilliseconds); - console.log( - `${data.from.length} characters, ${elements} elements: Actual median time: ${actualTime.toFixed( - 1, - )} ms vs. allowed ${ - maximumMilliseconds > 0 ? maximumMilliseconds.toFixed(1) : "" - } ms. (std. deviation: ${stddev.toFixed(1)} ms, min: ${minTime.toFixed(1)} ms, max: ${maxTime.toFixed(1)} ms)`, + `${data.from.length} characters, ${elements} elements: Actual median time: ${actualTime.toFixed(1)} ms vs. allowed ${maximumMilliseconds > 0 ? maximumMilliseconds.toFixed(1) : ""} ms. (std. deviation: ${stddev.toFixed(1)} ms, min: ${minTime.toFixed(1)} ms, max: ${maxTime.toFixed(1)} ms)`, ); - if (maximumMilliseconds >= 0) { // Otherwise, we just measure. expect(actualTime).toBeLessThanOrEqual(maximumMilliseconds); diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/Utils.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/Utils.ts index d7e840cc5..37005ff2b 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/Utils.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/Utils.ts @@ -1,7 +1,7 @@ /* eslint no-null/no-null: off */ import CoreMediaRichTextConfig, { COREMEDIA_RICHTEXT_CONFIG_KEY } from "../../../src/CoreMediaRichTextConfig"; -import { Config as CKEditorConfig } from "@ckeditor/ckeditor5-utils"; +import { Config as CKEditorConfig } from "ckeditor5"; import { getConfig } from "../../../src/compatibility/v10/V10CoreMediaRichTextConfig"; /** @@ -34,9 +34,7 @@ export const encodeString = (str: string): string => { const chars: string[] = [...text]; return chars.map((c) => `&#${c.codePointAt(0)};`).join(""); }; - const xmlParser = new DOMParser(); - export const parseXml = (xmlData: string): Document => { const xmlDocument: Document = xmlParser.parseFromString(xmlData, "text/xml"); if (xmlDocument.documentElement.outerHTML.includes("parsererror")) { @@ -44,14 +42,15 @@ export const parseXml = (xmlData: string): Document => { } return xmlDocument; }; - const richTextConfig: CoreMediaRichTextConfig = { compatibility: "v10", }; // Need to mock `get` as starting with v11 we cannot provide an empty // configuration anymore, as we have to set the compatibility explicitly. // @ts-expect-error - Requires Generic Type since CKEditor 5 37.x. -const v10Config: Pick & { [COREMEDIA_RICHTEXT_CONFIG_KEY]: CoreMediaRichTextConfig } = { +const v10Config: Pick & { + [COREMEDIA_RICHTEXT_CONFIG_KEY]: CoreMediaRichTextConfig; +} = { [COREMEDIA_RICHTEXT_CONFIG_KEY]: richTextConfig, // Lightweight mocking only... get(name: string): unknown | undefined { @@ -61,7 +60,6 @@ const v10Config: Pick & { [COREMEDIA_RICHTEXT_CONFIG_KEY] return this[COREMEDIA_RICHTEXT_CONFIG_KEY]; }, }; - export const getV10Config = (): ReturnType => // @ts-expect-error - no strict typing here. It is legacy anyway. getConfig(v10Config); diff --git a/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichText.ts b/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichText.ts index 2a03bc837..2e4882887 100644 --- a/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichText.ts +++ b/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichText.ts @@ -1,8 +1,7 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; import V10RichTextDataProcessor from "./compatibility/v10/V10RichTextDataProcessor"; import { COREMEDIA_RICHTEXT_PLUGIN_NAME } from "./Constants"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import { DataProcessor } from "@ckeditor/ckeditor5-engine"; +import { Plugin, DataProcessor } from "ckeditor5"; import RichTextDataProcessor from "./RichTextDataProcessor"; import { getCoreMediaRichTextConfig } from "./CoreMediaRichTextConfig"; import { LinkIntegration } from "./integrations/LinkIntegration"; @@ -12,18 +11,14 @@ import { LinkIntegration } from "./integrations/LinkIntegration"; */ export default class CoreMediaRichText extends Plugin { public static readonly pluginName = COREMEDIA_RICHTEXT_PLUGIN_NAME; - static readonly requires = [LinkIntegration]; - init(): void { const initInformation = reportInitStart(this); const { editor } = this; const { config } = editor; const parsedConfig = getCoreMediaRichTextConfig(config); const { compatibility } = parsedConfig; - let dataProcessor: DataProcessor; - switch (compatibility) { case "latest": dataProcessor = new RichTextDataProcessor(this.editor); @@ -34,9 +29,7 @@ export default class CoreMediaRichText extends Plugin { default: throw new Error(`Incompatible configuration: ${compatibility}`); } - this.editor.data.processor = dataProcessor; - reportInitEnd(initInformation); } } diff --git a/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichTextConfig.ts b/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichTextConfig.ts index 6dba2da9c..91f7be6a9 100644 --- a/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichTextConfig.ts +++ b/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichTextConfig.ts @@ -1,9 +1,7 @@ import { defaultStrictness, Strictness } from "./Strictness"; import { FilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; -import { Config as CKEditorConfig } from "@ckeditor/ckeditor5-utils"; import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { EditorConfig } from "@ckeditor/ckeditor5-core"; - +import { Config as CKEditorConfig, EditorConfig } from "ckeditor5"; export const COREMEDIA_RICHTEXT_CONFIG_KEY = "coremedia:richtext"; /** @@ -27,26 +25,22 @@ export const compatibilityKeys: readonly string[] = ["latest", "v10"]; * The type of compatibility keys. */ export type CompatibilityKey = (typeof compatibilityKeys)[number]; - export interface CompatibilityConfig { /** * Compatibility mode of data-processing. */ readonly compatibility?: CompatibilityKey; } - export interface CommonCoreMediaRichTextConfig extends CompatibilityConfig { /** * The strictness when validating against CoreMedia RichText 1.0 DTD. */ readonly strictness?: Strictness; } - export interface LatestCoreMediaRichTextConfig extends CommonCoreMediaRichTextConfig { readonly compatibility: "latest"; readonly rules?: RuleConfig[]; } - const isLatestCoreMediaRichTextConfig = (value: unknown): value is LatestCoreMediaRichTextConfig => { if (value && typeof value === "object") { if (value.hasOwnProperty("compatibility")) { @@ -56,7 +50,6 @@ const isLatestCoreMediaRichTextConfig = (value: unknown): value is LatestCoreMed } return false; }; - export interface V10CoreMediaRichTextConfig extends CommonCoreMediaRichTextConfig { readonly compatibility: "v10"; /** @@ -64,7 +57,6 @@ export interface V10CoreMediaRichTextConfig extends CommonCoreMediaRichTextConfi */ readonly rules?: FilterRuleSetConfiguration; } - const isV10CoreMediaRichTextConfig = (value: unknown): value is V10CoreMediaRichTextConfig => { if (value && typeof value === "object") { if (value.hasOwnProperty("compatibility")) { @@ -80,7 +72,6 @@ const isV10CoreMediaRichTextConfig = (value: unknown): value is V10CoreMediaRich */ type CoreMediaRichTextConfig = Partial | V10CoreMediaRichTextConfig; export default CoreMediaRichTextConfig; - export type DefaultCoreMediaRichTextConfig = Required< Pick >; @@ -88,7 +79,6 @@ export const defaultCoreMediaRichTextConfig: DefaultCoreMediaRichTextConfig = { strictness: defaultStrictness, compatibility: "latest", }; - export const getCoreMediaRichTextConfig = ( config?: CKEditorConfig, ): CoreMediaRichTextConfig & DefaultCoreMediaRichTextConfig => { @@ -98,7 +88,6 @@ export const getCoreMediaRichTextConfig = ( ...rawConfig, }; const { compatibility } = withDefaults; - if (isLatestCoreMediaRichTextConfig(withDefaults)) { return withDefaults; } @@ -107,7 +96,6 @@ export const getCoreMediaRichTextConfig = ( } throw new Error(`Incompatible configuration: ${compatibility}`); }; - export const getLatestCoreMediaRichTextConfig = ( config?: CKEditorConfig, ): LatestCoreMediaRichTextConfig & DefaultCoreMediaRichTextConfig => { @@ -117,7 +105,6 @@ export const getLatestCoreMediaRichTextConfig = ( } return withDefaults; }; - export const getV10CoreMediaRichTextConfig = ( config?: CKEditorConfig, ): V10CoreMediaRichTextConfig & DefaultCoreMediaRichTextConfig => { diff --git a/packages/ckeditor5-coremedia-richtext/src/RichTextDataProcessor.ts b/packages/ckeditor5-coremedia-richtext/src/RichTextDataProcessor.ts index 8a48ea22e..2c7fa6259 100644 --- a/packages/ckeditor5-coremedia-richtext/src/RichTextDataProcessor.ts +++ b/packages/ckeditor5-coremedia-richtext/src/RichTextDataProcessor.ts @@ -1,17 +1,17 @@ +import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; +import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import RichTextXmlWriter from "./RichTextXmlWriter"; +import { COREMEDIA_RICHTEXT_NAMESPACE_URI, COREMEDIA_RICHTEXT_PLUGIN_NAME } from "./Constants"; import { ViewDocument, ViewDocumentFragment, HtmlDataProcessor, DataProcessor, DomConverter, -} from "@ckeditor/ckeditor5-engine"; -import { MatcherPattern } from "@ckeditor/ckeditor5-engine/src/view/matcher"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import RichTextXmlWriter from "./RichTextXmlWriter"; -import { COREMEDIA_RICHTEXT_NAMESPACE_URI, COREMEDIA_RICHTEXT_PLUGIN_NAME } from "./Constants"; -import { Editor } from "@ckeditor/ckeditor5-core"; -import { ObservableMixin } from "@ckeditor/ckeditor5-utils"; + MatcherPattern, + Editor, + ObservableMixin, +} from "ckeditor5"; import { parseRule, RuleConfig, RuleSection } from "@coremedia/ckeditor5-dom-converter/src/Rule"; import { declareCoreMediaRichText10Entities } from "./Entities"; import { defaultRules } from "./rules/DefaultRules"; @@ -98,21 +98,15 @@ export default class RichTextDataProcessor extends ObservableMixin() implements */ constructor(editor: Editor) { super(); - const document: ViewDocument = editor.data.viewDocument; - this.#delegate = new HtmlDataProcessor(document); // Remember and re-use DOM converter. this.#domConverter = this.#delegate.domConverter; this.#richTextXmlWriter = new RichTextXmlWriter(); this.#domParser = new DOMParser(); - this.#noParserErrorNamespace = this.#isNoParserErrorNamespace(this.#domParser); - const config = getLatestCoreMediaRichTextConfig(editor.config); - this.#strictness = config.strictness; - this.addRules([...defaultRules, ...(config.rules ?? [])]); /* @@ -130,11 +124,9 @@ export default class RichTextDataProcessor extends ObservableMixin() implements */ this.#delegate.domConverter.preElements.push("xdiff:span"); } - registerRawContentMatcher(pattern: MatcherPattern): void { this.#delegate.registerRawContentMatcher(pattern); } - useFillerType(type: "default" | "marked"): void { this.#delegate.useFillerType(type); } @@ -175,11 +167,8 @@ export default class RichTextDataProcessor extends ObservableMixin() implements */ addRules(configs: RuleConfig[]): void { const logger = RichTextDataProcessor.#logger; - configs.forEach((config) => this.#addRule(config)); - this.#modifiedRules(); - if (logger.isDebugEnabled()) { logger.debug(`${configs.length} rule configurations added.`); this.dumpRules(); @@ -216,22 +205,15 @@ export default class RichTextDataProcessor extends ObservableMixin() implements toView(data: string): ViewDocumentFragment { const logger = RichTextDataProcessor.#logger; const startTimestamp = performance.now(); - const dataDocument = this.#parseData(data); const htmlDocument = createHtmlDocument(); - const converter = new HtmlDomConverter(htmlDocument, this.#toViewConversionListener); - const range = dataDocument.createRange(); range.selectNodeContents(dataDocument.documentElement); const dataFragment = range.extractContents(); - converter.convertAndAppend(dataFragment, htmlDocument.body); - const { innerHTML: dataView } = htmlDocument.body; - const viewFragment = this.#delegate.toView(dataView); - if (logger.isDebugEnabled()) { logger.debug(`Transformed RichText to HTML within ${performance.now() - startTimestamp} ms:`, { in: data, @@ -247,7 +229,6 @@ export default class RichTextDataProcessor extends ObservableMixin() implements data, dataView, }); - return viewFragment; } @@ -262,27 +243,21 @@ export default class RichTextDataProcessor extends ObservableMixin() implements toData(viewFragment: ViewDocumentFragment): string { const logger = RichTextDataProcessor.#logger; const startTimestamp = performance.now(); - const dataDocument = createCoreMediaRichTextDocument(); const { htmlDomFragment, fragmentAsStringForDebugging } = this.initToData(viewFragment); - const converter = new HtmlDomConverter(dataDocument, this.#toDataConversionListener); - converter.convertAndAppend(htmlDomFragment, dataDocument.documentElement); - new RichTextSanitizer(this.#strictness, new TrackingSanitationListener(logger)).sanitize(dataDocument); // We have to do this late, as sanitation may have removed // elements/attributes, whose namespace prefixes may otherwise be registered // although unused in the end. registerNamespacePrefixes(dataDocument); - const xml = this.#richTextXmlWriter.getXml(dataDocument); logger.debug(`Transformed HTML to RichText within ${performance.now() - startTimestamp} ms:`, { in: fragmentAsStringForDebugging, out: xml, }); - return xml; } @@ -300,10 +275,8 @@ export default class RichTextDataProcessor extends ObservableMixin() implements } { const htmlDomFragment: Node | DocumentFragment = this.#domConverter.viewToDom(viewFragment); let fragmentAsStringForDebugging = "uninitialized"; - if (RichTextDataProcessor.#logger.isDebugEnabled()) { fragmentAsStringForDebugging = this.#fragmentToString(htmlDomFragment); - RichTextDataProcessor.#logger.debug("toData: ViewFragment converted to DOM.", { view: viewFragment, dom: htmlDomFragment, @@ -337,23 +310,23 @@ export default class RichTextDataProcessor extends ObservableMixin() implements */ #parseData(data: string): Document { const logger = RichTextDataProcessor.#logger; - if (!data) { return createCoreMediaRichTextDocument(); } - const dataDocument = this.#domParser.parseFromString(declareCoreMediaRichText10Entities(data), "text/xml"); - if (this.#isParserError(dataDocument)) { - logger.error("Failed parsing data. See debug messages for details.", { data }); + logger.error("Failed parsing data. See debug messages for details.", { + data, + }); if (logger.isDebugEnabled()) { // noinspection InnerHTMLJS const parsererror = dataDocument.documentElement.innerHTML; - logger.debug("Failed parsing data.", { parsererror }); + logger.debug("Failed parsing data.", { + parsererror, + }); } return createCoreMediaRichTextDocument(); } - return dataDocument; } @@ -386,7 +359,6 @@ export default class RichTextDataProcessor extends ObservableMixin() implements // In PhantomJS the parseerror element doesn't seem to have a special namespace, so we are just guessing here :( return parsedDocument.getElementsByTagName("parsererror").length > 0; } - return parsedDocument.getElementsByTagNameNS(namespace, "parsererror").length > 0; } } diff --git a/packages/ckeditor5-coremedia-richtext/src/augmentation.ts b/packages/ckeditor5-coremedia-richtext/src/augmentation.ts index f1b27bd60..5e7094390 100644 --- a/packages/ckeditor5-coremedia-richtext/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-richtext/src/augmentation.ts @@ -1,6 +1,5 @@ import { CoreMediaRichTextConfig, COREMEDIA_RICHTEXT_CONFIG_KEY, CoreMediaRichText, LinkIntegration } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface EditorConfig { /** * The configuration for General Rich Text Support. To be used, especially @@ -9,7 +8,6 @@ declare module "@ckeditor/ckeditor5-core" { */ [COREMEDIA_RICHTEXT_CONFIG_KEY]?: CoreMediaRichTextConfig; } - interface PluginsMap { [CoreMediaRichText.pluginName]: CoreMediaRichText; [LinkIntegration.pluginName]: LinkIntegration; diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10CoreMediaRichTextConfig.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10CoreMediaRichTextConfig.ts index 368d8408b..79cd82565 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10CoreMediaRichTextConfig.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10CoreMediaRichTextConfig.ts @@ -1,5 +1,4 @@ import RichTextSchema, { V10Strictness } from "./RichTextSchema"; - import { allFilterRules } from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; import { FilterRuleSet } from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; import { @@ -7,7 +6,6 @@ import { parseFilterRuleSetConfigurations, ToDataAndViewElementConfiguration, } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; - import { replaceBy, replaceByElementAndClassBackAndForth, replaceElementAndClassBy } from "./rules/ReplaceBy"; import { headingRules, paragraphToHeading } from "./rules/Heading"; import { handleAnchor } from "./rules/Anchor"; @@ -18,8 +16,7 @@ import { handleImage } from "./rules/Image"; import { listRules } from "./rules/List"; import { defaultStrictness, Strictness } from "../../Strictness"; import { getV10CoreMediaRichTextConfig } from "../../CoreMediaRichTextConfig"; -import { EditorConfig } from "@ckeditor/ckeditor5-core"; -import { Config as CKEditorConfig } from "@ckeditor/ckeditor5-utils"; +import { EditorConfig, Config as CKEditorConfig } from "ckeditor5"; /** * Configuration options for CoreMedia RichText Data Processing. @@ -152,9 +149,7 @@ const defaultRules: FilterRuleSetConfiguration = { */ export const getConfig = (config?: CKEditorConfig): ParsedConfig => { const customConfig = getV10CoreMediaRichTextConfig(config); - const { toData, toView } = parseFilterRuleSetConfigurations(customConfig.rules, defaultRules); - const { strictness } = customConfig; let compatStrictness: V10Strictness; if (strictness === undefined) { @@ -174,7 +169,6 @@ export const getConfig = (config?: CKEditorConfig): ParsedConfig = } } const schema = new RichTextSchema(compatStrictness); - return { toData, toView, diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts index 127e11d92..7e7931ef0 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts @@ -1,23 +1,23 @@ -import { - ViewDocument, - ViewDocumentFragment, - HtmlDataProcessor, - DataProcessor, - DomConverter, -} from "@ckeditor/ckeditor5-engine"; -import { MatcherPattern } from "@ckeditor/ckeditor5-engine/src/view/matcher"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import RichTextXmlWriter from "../../RichTextXmlWriter"; import HtmlFilter from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; import RichTextSchema from "./RichTextSchema"; import { COREMEDIA_RICHTEXT_PLUGIN_NAME } from "../../Constants"; -import { Editor } from "@ckeditor/ckeditor5-core"; import { getConfig } from "./V10CoreMediaRichTextConfig"; import HtmlWriter from "@ckeditor/ckeditor5-engine/src/dataprocessor/htmlwriter"; import BasicHtmlWriter from "@ckeditor/ckeditor5-engine/src/dataprocessor/basichtmlwriter"; import ToDataProcessor from "../../ToDataProcessor"; -import { ObservableMixin } from "@ckeditor/ckeditor5-utils"; +import { + ViewDocument, + ViewDocumentFragment, + HtmlDataProcessor, + DataProcessor, + DomConverter, + MatcherPattern, + Editor, + ObservableMixin, +} from "ckeditor5"; import { declareCoreMediaRichText10Entities } from "../../Entities"; /** @@ -30,29 +30,23 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen readonly #domConverter: DomConverter; readonly #richTextXmlWriter: RichTextXmlWriter; readonly #htmlWriter: HtmlWriter; - readonly #toDataProcessor: ToDataProcessor; readonly #toViewFilter: HtmlFilter; - readonly #richTextSchema: RichTextSchema; - readonly #domParser: DOMParser; readonly #noParserErrorNamespace: boolean; - constructor(editor: Editor) { super(); - const document: ViewDocument = editor.data.viewDocument; - const { schema, toData, toView } = getConfig(editor.config); - this.#delegate = new HtmlDataProcessor(document); // renderingMode: "data" - Fixes observed issue ckeditor/ckeditor5#11786 - this.#domConverter = new DomConverter(document, { renderingMode: "data" }); + this.#domConverter = new DomConverter(document, { + renderingMode: "data", + }); this.#richTextXmlWriter = new RichTextXmlWriter(); this.#htmlWriter = new BasicHtmlWriter(); this.#domParser = new DOMParser(); - this.#richTextSchema = schema; /* @@ -89,18 +83,15 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen */ this.#toViewFilter = new HtmlFilter(toView, editor); this.#toDataProcessor = new ToDataProcessor(new HtmlFilter(toData, editor)); - const parserErrorDocument = this.#domParser.parseFromString("<", "text/xml"); this.#noParserErrorNamespace = V10RichTextDataProcessor.#PARSER_ERROR_NAMESPACE !== parserErrorDocument.getElementsByTagName("parsererror")[0].namespaceURI; } - registerRawContentMatcher(pattern: MatcherPattern): void { this.#delegate.registerRawContentMatcher(pattern); this.#domConverter.registerRawContentMatcher(pattern); } - useFillerType(type: "default" | "marked"): void { this.#domConverter.blockFillerMode = type === "marked" ? "markedNbsp" : "nbsp"; } @@ -128,14 +119,12 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen toData(viewFragment: ViewDocumentFragment): string { const logger = V10RichTextDataProcessor.#logger; const startTimestamp = performance.now(); - const { richTextDocument, domFragment, fragmentAsStringForDebugging } = this.initToData(viewFragment); const xml = this.toDataInternal(domFragment, richTextDocument); logger.debug(`Transformed HTML to RichText within ${performance.now() - startTimestamp} ms:`, { in: fragmentAsStringForDebugging, out: xml, }); - return xml; } @@ -156,10 +145,8 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen const richTextDocument = ToDataProcessor.createCoreMediaRichTextDocument(); const domFragment: Node | DocumentFragment = this.#domConverter.viewToDom(viewFragment); let fragmentAsStringForDebugging = "uninitialized"; - if (V10RichTextDataProcessor.#logger.isDebugEnabled()) { fragmentAsStringForDebugging = this.#fragmentToString(domFragment); - V10RichTextDataProcessor.#logger.debug("toData: ViewFragment converted to DOM.", { view: viewFragment, dom: domFragment, @@ -206,14 +193,11 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen // In PhantomJS the parseerror element doesn't seem to have a special namespace, so we are just guessing here :( return parsedDocument.getElementsByTagName("parsererror").length > 0; } - return parsedDocument.getElementsByTagNameNS(namespace, "parsererror").length > 0; } - toView(data: string): ViewDocumentFragment { const logger = V10RichTextDataProcessor.#logger; const startTimestamp = performance.now(); - let dataView = ""; // If data are empty, we expect empty RichText by default, thus, we don't @@ -222,21 +206,23 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen if (data) { const dataDocument = this.#domParser.parseFromString(declareCoreMediaRichText10Entities(data), "text/xml"); if (this.#isParserError(dataDocument)) { - logger.error("Failed parsing data. See debug messages for details.", { data }); + logger.error("Failed parsing data. See debug messages for details.", { + data, + }); if (logger.isDebugEnabled()) { // noinspection InnerHTMLJS const parsererror = dataDocument.documentElement.innerHTML; - logger.debug("Failed parsing data.", { parsererror }); + logger.debug("Failed parsing data.", { + parsererror, + }); } } else { // Only apply filters, if we received valid data. this.#toViewFilter.applyTo(dataDocument.documentElement); } - const documentFragment = dataDocument.createDocumentFragment(); const nodes: Node[] = Array.from(dataDocument.documentElement.childNodes); documentFragment.append(...nodes); - const html: string = this.#htmlWriter.getHtml(documentFragment); // Workaround for CoreMedia/ckeditor-plugins#40: Remove wrong closing tags @@ -246,9 +232,7 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen // for the affected elements. dataView = html.replaceAll(/<\/(?:img|br)>/g, ""); } - const viewFragment = this.#delegate.toView(dataView); - if (logger.isDebugEnabled()) { logger.debug(`Transformed RichText to HTML within ${performance.now() - startTimestamp} ms:`, { in: data, @@ -264,7 +248,6 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen data, dataView, }); - return viewFragment; } } diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Schema.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Schema.ts index 63b47a9aa..1f4e457c5 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Schema.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Schema.ts @@ -4,10 +4,9 @@ import { ElementFilterParams } from "@coremedia/ckeditor5-dataprocessor-support/ import { TextFilterParams } from "@coremedia/ckeditor5-dataprocessor-support/src/TextProxy"; import RichTextSchema from "../RichTextSchema"; import { ElementsFilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; -import { DataProcessor } from "@ckeditor/ckeditor5-engine"; +import { DataProcessor } from "ckeditor5"; import V10RichTextDataProcessor from "../V10RichTextDataProcessor"; import { Strictness } from "../../../Strictness"; - export const defaultSchema = new RichTextSchema(Strictness.STRICT); /** @@ -25,7 +24,6 @@ export const getSchema = ({ editor }: ElementFilterParams | TextFilterParams): R if (!richTextDataProcessor) { return defaultSchema; } - return richTextDataProcessor.richTextSchema ?? defaultSchema; }; diff --git a/packages/ckeditor5-coremedia-richtext/src/integrations/LinkIntegration.ts b/packages/ckeditor5-coremedia-richtext/src/integrations/LinkIntegration.ts index 33e911e33..645b61ecc 100644 --- a/packages/ckeditor5-coremedia-richtext/src/integrations/LinkIntegration.ts +++ b/packages/ckeditor5-coremedia-richtext/src/integrations/LinkIntegration.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import { getLinkAttributes, LinkAttributes } from "@coremedia/ckeditor5-link-common/src/LinkAttributes"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; @@ -7,12 +7,9 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common */ export class LinkIntegration extends Plugin { public static readonly pluginName = "LinkIntegration" as const; - static readonly requires = [LinkAttributes]; - init(): void { const initInformation = reportInitStart(this); - const { editor } = this; // Using String reference here, as we spare one @@ -22,9 +19,11 @@ export class LinkIntegration extends Plugin { // attribute in CoreMedia Rich Text 1.0 DTD. Thus, it does not // make sense to ever provide editing features for this attribute. // Nevertheless, we need to ensure proper cleanup. - getLinkAttributes(editor)?.registerAttribute({ view: "data-xlink-type", model: "linkType" }); + getLinkAttributes(editor)?.registerAttribute({ + view: "data-xlink-type", + model: "linkType", + }); } - reportInitEnd(initInformation); } } diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/MergeTableSectionsToTableBody.ts b/packages/ckeditor5-coremedia-richtext/src/rules/MergeTableSectionsToTableBody.ts index b5ba35c43..9c5ddb0d7 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/MergeTableSectionsToTableBody.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/MergeTableSectionsToTableBody.ts @@ -1,24 +1,21 @@ import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { PriorityString } from "@ckeditor/ckeditor5-utils/src/priorities"; +import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; import { isHTMLTableElement } from "@coremedia/ckeditor5-dom-support/src/HTMLTableElements"; import { removeClass } from "@coremedia/ckeditor5-dom-support/src/Elements"; import { copyAttributesFrom } from "@coremedia/ckeditor5-dom-support/src/Attrs"; - export interface MergeTableSectionsToTableBodyConfig { headerRowClass?: string; footerRowClass?: string; direction?: Direction; priority?: PriorityString; } - export const defaultMergeTableSectionsToTableBodyConfig: Required = { headerRowClass: "tr--header", footerRowClass: "tr--footer", direction: "bijective", priority: "normal", }; - export const mergeTableSectionsToTableBody = (config?: MergeTableSectionsToTableBodyConfig): RuleConfig => { const { headerRowClass, footerRowClass, direction, priority } = { ...defaultMergeTableSectionsToTableBodyConfig, @@ -33,12 +30,10 @@ export const mergeTableSectionsToTableBody = (config?: MergeTableSectionsToTable if (!isHTMLTableElement(node)) { return; } - const { tHead, tFoot, ownerDocument } = node; // Create a snapshot of tBodies before creating a new one. const tBodies = [...node.tBodies]; const targetBody = node.createTBody(); - const transferAttributesToTargetBody = (section: HTMLTableSectionElement): void => { // We risk overriding here for now, not expecting any collisions. // If collisions exist, we may want to prefer those of tbody. @@ -53,7 +48,6 @@ export const mergeTableSectionsToTableBody = (config?: MergeTableSectionsToTable if (tFoot) { transferAttributesToTargetBody(tFoot); } - if (tHead) { transferAttributesToTargetBody(tHead); } @@ -63,18 +57,15 @@ export const mergeTableSectionsToTableBody = (config?: MergeTableSectionsToTable [...tBodies].reverse().forEach((tBody) => { transferAttributesToTargetBody(tBody); }); - if (tHead) { [...tHead.rows].forEach((row) => { row.classList.add(headerRowClass); }); - const range = ownerDocument.createRange(); range.selectNodeContents(tHead); targetBody.append(range.extractContents()); node.deleteTHead(); } - tBodies.forEach((tBody) => { // We don't mark the origin of `` here, thus, we only support // ony ``. To change this behavior, we would have to remember @@ -84,7 +75,6 @@ export const mergeTableSectionsToTableBody = (config?: MergeTableSectionsToTable targetBody.append(range.extractContents()); tBody.remove(); }); - if (tFoot) { [...tFoot.rows].forEach((row) => { row.classList.add(footerRowClass); @@ -111,7 +101,6 @@ export const mergeTableSectionsToTableBody = (config?: MergeTableSectionsToTable const tHead = node.createTHead(); const tFoot = node.createTFoot(); const tBody = node.createTBody(); - rows.forEach((row) => { if (row.classList.contains(headerRowClass)) { tHead.append(row); @@ -124,7 +113,6 @@ export const mergeTableSectionsToTableBody = (config?: MergeTableSectionsToTable tBody.append(row); } }); - previousBodies.forEach((previousBody) => { for (const attribute of previousBody.attributes) { tHead.setAttributeNode(attribute.cloneNode(true) as Attr); diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/PreferLangAttribute.ts b/packages/ckeditor5-coremedia-richtext/src/rules/PreferLangAttribute.ts index 44dffa87b..d04bd77ff 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/PreferLangAttribute.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/PreferLangAttribute.ts @@ -1,9 +1,8 @@ /* eslint-disable no-null/no-null */ import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { PriorityString } from "@ckeditor/ckeditor5-utils/src/priorities"; +import { PriorityString } from "ckeditor5"; import { isElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; import { namespaces } from "../Namespaces"; - const nsXml = namespaces.xml; /** @@ -84,7 +83,6 @@ export const preferLangAttribute = (config?: PreferLangAttributeConfig): RuleCon ...defaultPreferLangAttributeConfig, ...config, }; - const preferAttribute = (el: Element, key: string): void => { const value = extractLangAttributes(el)?.trim(); if (value) { @@ -95,7 +93,6 @@ export const preferLangAttribute = (config?: PreferLangAttributeConfig): RuleCon el.setAttributeNS(namespace, key, value); } }; - return { id: "prefer-lang-attribute", toData: { diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceByChildren.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceByChildren.ts index c3d30219f..1f699b410 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceByChildren.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceByChildren.ts @@ -1,8 +1,7 @@ import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { PriorityString } from "@ckeditor/ckeditor5-utils/src/priorities"; +import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; import { isElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; - export interface ReplaceByChildrenConfig { localName: string; /** @@ -12,14 +11,12 @@ export interface ReplaceByChildrenConfig { direction?: Exclude; priority?: PriorityString; } - export const defaultReplaceByChildrenConfig: Required> = { // toData is the typical transformation direction, as it provides less // valid elements than the data view. direction: "toData", priority: "normal", }; - export const replaceByChildren = (config: ReplaceByChildrenConfig): RuleConfig => { const { localName, direction, priority } = { ...defaultReplaceByChildrenConfig, diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElement.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElement.ts index b054590e7..56b99cad1 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElement.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElement.ts @@ -1,22 +1,19 @@ import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { PriorityString } from "@ckeditor/ckeditor5-utils/src/priorities"; +import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; import { isElement, renameElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; - export interface ReplaceElementByElementConfig { viewLocalName: string; dataLocalName: string; direction?: Direction; priority?: PriorityString; } - export const defaultReplaceElementByElementConfig: Required< Omit > = { direction: "bijective", priority: "normal", }; - export const replaceElementByElement = (config: ReplaceElementByElementConfig): RuleConfig => { const { viewLocalName, dataLocalName, direction, priority } = { ...defaultReplaceElementByElementConfig, diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass.ts index c7d784e9e..0b31fc352 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass.ts @@ -1,8 +1,7 @@ import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { PriorityString } from "@ckeditor/ckeditor5-utils/src/priorities"; +import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; import { isElement, removeClass, renameElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; - export interface ReplaceElementByElementAndClassConfig { viewLocalName: string; dataLocalName: string; @@ -10,7 +9,6 @@ export interface ReplaceElementByElementAndClassConfig { direction?: Direction; priority?: PriorityString; } - export const applyDefaultReplaceElementByElementAndClassConfig = ( config: ReplaceElementByElementAndClassConfig, ): Required => ({ @@ -19,7 +17,6 @@ export const applyDefaultReplaceElementByElementAndClassConfig = ( priority: "normal", ...config, }); - export const replaceElementByElementAndClass = (config: ReplaceElementByElementAndClassConfig): RuleConfig => { const { viewLocalName, dataLocalName, dataReservedClass, direction, priority } = applyDefaultReplaceElementByElementAndClassConfig(config); diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceHeadingsByElementAndClass.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceHeadingsByElementAndClass.ts index 95d2c0c6c..6c6e6967a 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceHeadingsByElementAndClass.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceHeadingsByElementAndClass.ts @@ -1,8 +1,7 @@ import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { PriorityString } from "@ckeditor/ckeditor5-utils/src/priorities"; +import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; import { isElement, renameElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; - const headingRegEx = /^h(?\d)$/; /** @@ -35,7 +34,6 @@ export const defaultReplaceHeadingsByElementAndClassConfig: Required { const { dataLocalName, dataReservedClassPrefix, direction, priority } = { ...defaultReplaceHeadingsByElementAndClassConfig, @@ -49,17 +47,19 @@ export const replaceHeadingsByElementAndClass = (config?: ReplaceHeadingsByEleme if (!isElement(node)) { return node; } - const match = node.localName.match(headingRegEx); if (match) { // @ts-expect-error: https://github.com/microsoft/TypeScript/issues/32098 - const { level }: { level: string } = match.groups; + const { + level, + }: { + level: string; + } = match.groups; const dataReservedClass = `${dataReservedClassPrefix}${level}`; const result = renameElement(node, dataLocalName); result.classList.add(dataReservedClass); return result; } - return node; }, priority, @@ -70,12 +70,10 @@ export const replaceHeadingsByElementAndClass = (config?: ReplaceHeadingsByEleme if (!isElement(node) || node.localName !== dataLocalName) { return node; } - const match = [...node.classList].find((value) => value.startsWith(dataReservedClassPrefix)); if (!match) { return node; } - const levelClassifier = match.substring(dataReservedClassPrefix.length); const level = Number(levelClassifier); if (isNaN(level) || level < 1 || level > 6) { diff --git a/packages/ckeditor5-coremedia-studio-essentials/src/CoreMediaStudioEssentials.ts b/packages/ckeditor5-coremedia-studio-essentials/src/CoreMediaStudioEssentials.ts index 96c1b310a..215e128f7 100644 --- a/packages/ckeditor5-coremedia-studio-essentials/src/CoreMediaStudioEssentials.ts +++ b/packages/ckeditor5-coremedia-studio-essentials/src/CoreMediaStudioEssentials.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import CoreMediaRichText from "@coremedia/ckeditor5-coremedia-richtext/src/CoreMediaRichText"; import GeneralRichTextSupport from "@coremedia/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport"; @@ -12,7 +12,6 @@ import GeneralRichTextSupport from "@coremedia/ckeditor5-coremedia-richtext-supp */ export default class CoreMediaStudioEssentials extends Plugin { public static readonly pluginName = "CoreMediaStudioEssentials" as const; - static readonly requires = [CoreMediaRichText, GeneralRichTextSupport]; } diff --git a/packages/ckeditor5-coremedia-studio-essentials/src/augmentation.ts b/packages/ckeditor5-coremedia-studio-essentials/src/augmentation.ts index 57fed2948..9c8e8d744 100644 --- a/packages/ckeditor5-coremedia-studio-essentials/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-studio-essentials/src/augmentation.ts @@ -1,6 +1,5 @@ import { CoreMediaStudioEssentials } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [CoreMediaStudioEssentials.pluginName]: CoreMediaStudioEssentials; } diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService.ts index cfd66456e..c457e6b5e 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService.ts @@ -1,7 +1,7 @@ import { Observable, Subject } from "rxjs"; import BlocklistService from "@coremedia/ckeditor5-coremedia-studio-integration/src/BlocklistService"; import { createBlocklistServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/BlocklistServiceDescriptor"; -import { Editor, Plugin } from "@ckeditor/ckeditor5-core"; +import { Editor, Plugin } from "ckeditor5"; import MockServiceAgentPlugin from "./content/MockServiceAgentPlugin"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { serviceAgent } from "@coremedia/service-agent"; @@ -16,7 +16,6 @@ import { serviceAgent } from "@coremedia/service-agent"; export class MockBlocklistService extends Plugin implements BlocklistService { static readonly pluginName = "MockBlocklistService" as const; static readonly requires = [MockServiceAgentPlugin]; - #blocklist: string[]; readonly #blocklistSubject: Subject; @@ -25,12 +24,10 @@ export class MockBlocklistService extends Plugin implements BlocklistService { */ constructor(editor: Editor) { super(editor); - this.#blocklist = ["studio", "provided"]; this.#blocklistSubject = new Subject(); this.#addExamples(); } - init(): void { const initInformation = reportInitStart(this); serviceAgent.registerService(this, createBlocklistServiceDescriptor()); diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration.ts index a9b3a6aea..e7ce465c5 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration.ts @@ -1,7 +1,6 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import MockContentDisplayService from "./content/MockContentDisplayService"; import MockRichtextConfigurationService from "./content/MockRichtextConfigurationService"; - import { serviceAgent } from "@coremedia/service-agent"; import MockDragDropService from "./content/MockDragDropService"; import MockWorkAreaService from "./content/MockWorkAreaService"; @@ -17,7 +16,6 @@ import MockExternalContentPlugin from "./content/MockExternalContentPlugin"; import { MockContentImportService } from "./content/MockContentImportService"; import { createContentImportServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ContentImportService"; import { MockBlocklistService } from "./MockBlocklistService"; - const PLUGIN_NAME = "MockStudioIntegration"; /** @@ -25,37 +23,27 @@ const PLUGIN_NAME = "MockStudioIntegration"; */ class MockStudioIntegration extends Plugin { static readonly pluginName: string = PLUGIN_NAME; - static readonly requires = [ MockBlocklistService, MockContentPlugin, MockExternalContentPlugin, MockServiceAgentPlugin, ]; - init(): Promise | void { const initInformation = reportInitStart(this); - const contentProvider = this.#initContents(); - const contentDisplayService = new MockContentDisplayService(contentProvider); serviceAgent.registerService(contentDisplayService); - const richtextConfigurationService = new MockRichtextConfigurationService(this.editor, contentProvider); serviceAgent.registerService(richtextConfigurationService); - const dragDropService = new MockDragDropService(); serviceAgent.registerService(dragDropService); - const workAreaService = new MockWorkAreaService(this.editor); serviceAgent.registerService(workAreaService); - const blobDisplayService = new MockBlobDisplayService(contentProvider); serviceAgent.registerService(blobDisplayService); - const clipboardService = new MockClipboardService(); serviceAgent.registerService(clipboardService, createClipboardServiceDescriptor()); - const contentReferenceService = new MockContentReferenceService(this.editor); serviceAgent.registerService( contentReferenceService, @@ -66,15 +54,12 @@ class MockStudioIntegration extends Plugin { contentImportService, createContentImportServiceDescriptor(), ); - reportInitEnd(initInformation); } - #initContents(): MockContentProvider { const editor = this.editor; const contentPlugin = editor.plugins.get(MockContentPlugin); return contentPlugin.getContent; } } - export default MockStudioIntegration; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentImportService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentImportService.ts index 3c6a8b07b..e8925441e 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentImportService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentImportService.ts @@ -1,36 +1,29 @@ import { ContentImportService } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ContentImportService"; import { createContentReferenceServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { Editor } from "ckeditor5"; import MockContentPlugin from "./MockContentPlugin"; import MockExternalContentPlugin from "./MockExternalContentPlugin"; import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; - export class MockContentImportService implements ContentImportService { readonly #editor: Editor; - constructor(editor: Editor) { this.#editor = editor; } - getName(): string { return createContentReferenceServiceDescriptor().name; } - import(uri: string): Promise { const mockExternalContentPlugin = this.#editor.plugins.get(MockExternalContentPlugin); const externalContent = mockExternalContentPlugin.getExternalContent(uri); if (!externalContent) { return Promise.reject("No external content found, has it been defined in the MockExternalContentPlugin?"); } - if (!externalContent.contentAfterImport) { return Promise.reject("A content that would have been created has not been provided."); } - if (externalContent.errorWhileImporting) { return Promise.reject("An error occurred and is hopefully handled"); } - const mockContentPlugin = this.#editor.plugins.get(MockContentPlugin); mockContentPlugin.addContents(externalContent.contentAfterImport); return Promise.resolve(contentUriPath(externalContent.contentAfterImport.id)); diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin.ts index 95576f1f8..b21b51f56 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin.ts @@ -1,4 +1,4 @@ -import Plugin from "@ckeditor/ckeditor5-core/src/plugin"; +import { Plugin } from "ckeditor5"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import MockContent, { @@ -18,14 +18,12 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common * interval (in milliseconds). */ const DEFAULT_CHANGE_DELAY_MS = 10000; - const PLUGIN_NAME = "MockContent"; const CONFIG_KEY = "coremedia:mock-content"; const DEFAULTS_CONFIG_KEY = "defaults"; const DEFAULTS_CONFIG_PATH = `${CONFIG_KEY}.${DEFAULTS_CONFIG_KEY}`; const CONTENTS_CONFIG_KEY = "contents"; const CONTENTS_CONFIG_PATH = `${CONFIG_KEY}.${CONTENTS_CONFIG_KEY}`; - type ContentsById = Map; /** @@ -131,10 +129,8 @@ class MockContentPlugin extends Plugin { */ init(): Promise | void { const initInformation = reportInitStart(this); - this.#initContents(); this.#initDefaults(); - reportInitEnd(initInformation); } @@ -146,7 +142,6 @@ class MockContentPlugin extends Plugin { const { editor } = this; const config: unknown = editor.config.get(CONTENTS_CONFIG_PATH); let combinedConfigs: MockContentConfig[]; - if (isMockContentConfigs(config)) { // The order is important, as we want to allow overriding default contents by config. combinedConfigs = [...MockContentPlugin.#defaultContents, ...config]; @@ -154,14 +149,11 @@ class MockContentPlugin extends Plugin { logger.error(`Ignoring invalid configuration at ${CONTENTS_CONFIG_PATH}.`, config); combinedConfigs = MockContentPlugin.#defaultContents; } - combinedConfigs.forEach((contentConfig: MockContentConfig): void => { const { id } = contentConfig; this.#registeredContents.set(id, contentConfig); }); - const pluralize = (term: string, count: number): string => `${term}${count === 1 ? "" : "s"}`; - if (logger.isDebugEnabled()) { // Sorted by ID is more convenient to lookup possible IDs to use. const sortedMocks = new Map( @@ -186,7 +178,10 @@ class MockContentPlugin extends Plugin { if (!isObject(config)) { return; } - this.#defaults = { ...this.#defaults, ...config }; + this.#defaults = { + ...this.#defaults, + ...config, + }; } /** @@ -199,7 +194,10 @@ class MockContentPlugin extends Plugin { if (!config) { return undefined; } - return withContentDefaults({ ...this.#defaults, ...config }); + return withContentDefaults({ + ...this.#defaults, + ...config, + }); } /** @@ -253,6 +251,5 @@ class MockContentPlugin extends Plugin { return this.#addDefaults(registeredContents.get(id)) ?? asStaticContent(id); }; } - export default MockContentPlugin; export { CONFIG_KEY as COREMEDIA_MOCK_CONTENT_PLUGIN, MockContentProvider, defaultMockContentProvider }; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentReferenceService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentReferenceService.ts index f18276469..a40c04eca 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentReferenceService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentReferenceService.ts @@ -3,26 +3,21 @@ import { createContentReferenceServiceDescriptor, IContentReferenceService, } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { Editor } from "ckeditor5"; import MockExternalContentPlugin from "./MockExternalContentPlugin"; import MockContentPlugin from "./MockContentPlugin"; import { isUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; - export class MockContentReferenceService implements IContentReferenceService { readonly #editor: Editor; - constructor(editor: Editor) { this.#editor = editor; } - getName(): string { return createContentReferenceServiceDescriptor().name; } - getContentReferences(requests: string[]): Promise { return Promise.all(requests.map((request) => this.getContentReference(request))); } - getContentReference(request: string): Promise { const mockContentPlugin: MockContentPlugin = this.#editor.plugins.get( MockContentPlugin.pluginName, @@ -33,7 +28,6 @@ export class MockContentReferenceService implements IContentReferenceService { const response = this.#evaluateResponse(mockContentPlugin, mockExternalContentPlugin, request); return response ? Promise.resolve(response) : Promise.reject(); } - #evaluateResponse( mockContentPlugin: MockContentPlugin, mockExternalContentPlugin: MockExternalContentPlugin, @@ -42,7 +36,6 @@ export class MockContentReferenceService implements IContentReferenceService { if (!request) { return undefined; } - const externalContent = mockExternalContentPlugin.getExternalContent(request); if (externalContent) { if (externalContent.isAlreadyImported && externalContent.contentAfterImport) { @@ -57,7 +50,6 @@ export class MockContentReferenceService implements IContentReferenceService { }; } } - if (externalContent.contentAfterImport?.type) { return { request, @@ -69,7 +61,6 @@ export class MockContentReferenceService implements IContentReferenceService { }; } } - const contentExist = mockContentPlugin.hasExplicitContent(request); if (contentExist || isUriPath(request)) { return { @@ -78,7 +69,6 @@ export class MockContentReferenceService implements IContentReferenceService { externalUriInformation: undefined, }; } - return { request, contentUri: undefined, diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin.ts index 6336b4233..dd9bdd46e 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin.ts @@ -1,12 +1,10 @@ -import Plugin from "@ckeditor/ckeditor5-core/src/plugin"; +import { Plugin } from "ckeditor5"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { MockContentConfig } from "./MockContent"; import MockContentPlugin from "./MockContentPlugin"; - const PLUGIN_NAME = "MockExternalContent"; - export interface MockExternalContent { /** * ID of the external content @@ -28,36 +26,49 @@ export interface MockExternalContent { */ errorWhileImporting: boolean; } - type ExternalContentsByUri = Map; - const EXTERNAL_CONTENTS: MockExternalContent[] = [ { id: 2000, isAlreadyImported: false, - contentAfterImport: { id: 2000, type: "linkable", name: "External Content #2000" }, + contentAfterImport: { + id: 2000, + type: "linkable", + name: "External Content #2000", + }, errorWhileImporting: false, }, { id: 2002, isAlreadyImported: true, - contentAfterImport: { id: 2002, type: "linkable", name: "External Content #2002" }, + contentAfterImport: { + id: 2002, + type: "linkable", + name: "External Content #2002", + }, errorWhileImporting: false, }, { id: 2004, isAlreadyImported: false, - contentAfterImport: { id: 2004, type: "unknown", name: "Must not appear as link, if you see this, it is an error" }, + contentAfterImport: { + id: 2004, + type: "unknown", + name: "Must not appear as link, if you see this, it is an error", + }, errorWhileImporting: false, }, { id: 2006, isAlreadyImported: false, - contentAfterImport: { id: 2006, type: "linkable", name: "External Content #2006" }, + contentAfterImport: { + id: 2006, + type: "linkable", + name: "External Content #2006", + }, errorWhileImporting: true, }, ]; - export default class MockExternalContentPlugin extends Plugin { static readonly pluginName: string = PLUGIN_NAME; static readonly #logger: Logger = LoggerProvider.getLogger(PLUGIN_NAME); @@ -69,32 +80,24 @@ export default class MockExternalContentPlugin extends Plugin { */ init(): Promise | void { const initInformation = reportInitStart(this); - this.#initExternalContents(); - reportInitEnd(initInformation); } - addExternalContent(externalContent: MockExternalContent): void { this.#registeredExternalContents.set(`externalUri/${externalContent.id}`, externalContent); } - addExternalContents(externalContents: MockExternalContent[]): void { externalContents.forEach((externalContent) => this.addExternalContent(externalContent)); } - externalContentExist(uri: string): boolean { return this.#registeredExternalContents.has(uri); } - getExternalContent(uri: string): MockExternalContent | undefined { return this.#registeredExternalContents.get(uri); } - #initExternalContents() { const plugins = this.editor.plugins; const mockContentPlugin: MockContentPlugin = plugins.get(MockContentPlugin.pluginName) as MockContentPlugin; - EXTERNAL_CONTENTS.forEach((config) => { if (config.isAlreadyImported && config.contentAfterImport) { mockContentPlugin.addContents(config.contentAfterImport); diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin.ts index bae462a11..4c1f90f7e 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { serviceAgent } from "@coremedia/service-agent"; import MockDragDropService from "./MockDragDropService"; @@ -45,14 +45,12 @@ export interface InputExampleElement { export interface ExternalContent { externalId: number; } - export const isAnExternalContent = (obj: number | object): boolean => { if (typeof obj === "number") { return false; } return "externalId" in obj; }; - const PLUGIN_NAME = "MockInputExamplePlugin"; /** @@ -61,12 +59,10 @@ const PLUGIN_NAME = "MockInputExamplePlugin"; class MockInputExamplePlugin extends Plugin { static readonly pluginName: string = PLUGIN_NAME; static readonly #logger: Logger = LoggerProvider.getLogger(this.pluginName); - init(): void { const initInformation = reportInitStart(this); reportInitEnd(initInformation); } - createInsertElement(data: InputExampleElement): HTMLDivElement { const insertDiv = document.createElement("div"); insertDiv.classList.add("input-example", ...(data.classes || [])); @@ -119,7 +115,6 @@ class MockInputExamplePlugin extends Plugin { ensureIsDroppableInLinkBalloon(uris: string[]): IsLinkableEvaluationResult | undefined { return isLinkableUris(uris); } - static async #setClipboardData(event: MouseEvent): Promise { const target = event.target as HTMLElement; const contentIdCommaSeparated = target.getAttribute("data-uripath"); @@ -128,13 +123,21 @@ class MockInputExamplePlugin extends Plugin { } const contentIds: string[] = contentIdCommaSeparated.split(","); const urilistJSON = JSON.stringify(contentIds); - const blob = new Blob([urilistJSON], { type: "cm-studio-rest/uri-list" }); + const blob = new Blob([urilistJSON], { + type: "cm-studio-rest/uri-list", + }); const data: Record = {}; data[blob.type] = blob; - const clipboardService = await serviceAgent.fetchService(createClipboardServiceDescriptor()); - - await clipboardService.setItems([{ data, options: "copy" }], new Date().getTime()); + await clipboardService.setItems( + [ + { + data, + options: "copy", + }, + ], + new Date().getTime(), + ); } /** @@ -170,16 +173,13 @@ class MockInputExamplePlugin extends Plugin { static #removeDropData(): void { serviceAgent.unregisterServices("dragDropService"); } - static #generateUriPath(item: number | ExternalContent): string { const prefix: string = isAnExternalContent(item) ? "externalUri" : "content"; const id: number = isAnExternalContent(item) ? (item as ExternalContent).externalId : (item as number); return `${prefix}/${id}`; } - static #generateUriPathCsv(items: (number | ExternalContent)[]): string { return items.map((item) => MockInputExamplePlugin.#generateUriPath(item)).join(","); } } - export default MockInputExamplePlugin; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockRichtextConfigurationService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockRichtextConfigurationService.ts index 49cd849d8..72efe361f 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockRichtextConfigurationService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockRichtextConfigurationService.ts @@ -5,9 +5,8 @@ import { defaultMockContentProvider, MockContentProvider } from "./MockContentPl import { isUriPath, UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; import { serviceAgent } from "@coremedia/service-agent"; import { createContentReferenceServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { Editor } from "ckeditor5"; import MockExternalContentPlugin from "./MockExternalContentPlugin"; - class MockRichtextConfigurationService implements RichtextConfigurationService { readonly #contentProvider: MockContentProvider; readonly #editor: Editor; @@ -19,13 +18,11 @@ class MockRichtextConfigurationService implements RichtextConfigurationService { this.#contentProvider = contentProvider; this.#editor = editor; } - async hasLinkableType(uriPath: UriPath): Promise { const contentReferenceService = serviceAgent.getService(createContentReferenceServiceDescriptor()); if (!contentReferenceService) { return Promise.reject("ContentReferenceService unavailable"); } - const contentReference = await contentReferenceService.getContentReference(uriPath); if (contentReference.contentUri) { return this.#contentProvider(contentReference.contentUri).linkable; @@ -43,7 +40,6 @@ class MockRichtextConfigurationService implements RichtextConfigurationService { } return false; } - async isEmbeddableType(uriPath: UriPath): Promise { if (isUriPath(uriPath)) { const mockContent = this.#contentProvider(uriPath); @@ -51,7 +47,6 @@ class MockRichtextConfigurationService implements RichtextConfigurationService { } return false; } - async resolveBlobPropertyReference(uriPath: UriPath): Promise { if (isUriPath(uriPath)) { const mockContent = this.#contentProvider(uriPath); @@ -64,10 +59,8 @@ class MockRichtextConfigurationService implements RichtextConfigurationService { } throw new Error(`'${uriPath}' is not a valid URI-path.`); } - getName(): string { return "richtextConfigurationService"; } } - export default MockRichtextConfigurationService; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin.ts index 2a14ab993..dea6c2f39 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin.ts @@ -1,24 +1,19 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; +import { Plugin } from "ckeditor5"; import { serviceAgent } from "@coremedia/service-agent"; import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/WorkAreaServiceDescriptor"; import MockWorkAreaService from "./MockWorkAreaService"; import { MockBlocklistService } from "../MockBlocklistService"; import { createBlocklistServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; - const PLUGIN_NAME = "MockServiceAgent"; - class MockServiceAgentPlugin extends Plugin { static readonly pluginName: string = PLUGIN_NAME; - async getMockWorkAreaService(): Promise { const workAreaService = await serviceAgent.fetchService(createWorkAreaServiceDescriptor()); return workAreaService as MockWorkAreaService; } - async getMockBlocklistService(): Promise { const blocklistService = await serviceAgent.fetchService(createBlocklistServiceDescriptor()); return blocklistService as MockBlocklistService; } } - export default MockServiceAgentPlugin; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService.ts index 11403d23a..6d8457799 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService.ts @@ -3,14 +3,12 @@ /* eslint no-restricted-globals: off */ import WorkAreaService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/WorkAreaService"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { Editor } from "ckeditor5"; import MockContentPlugin from "./MockContentPlugin"; import MockContent from "./MockContent"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { Observable, Subject } from "rxjs"; - const isString = (value: unknown): value is string => typeof value === "string"; - class MockWorkAreaService implements WorkAreaService { static readonly #LOGGER = LoggerProvider.getLogger("WorkAreaService"); readonly #editor: Editor; @@ -19,15 +17,15 @@ class MockWorkAreaService implements WorkAreaService { * Used for testing purposes to verify if the openEntitiesInTab has been triggered. */ lastOpenedEntities: unknown[] = []; - readonly #activeEntitySubject: Subject; - constructor(editor: Editor) { this.#editor = editor; this.#activeEntitySubject = new Subject(); } - - async openEntitiesInTabs(entities: unknown[]): Promise<{ accepted: string[]; rejected: string[] }> { + async openEntitiesInTabs(entities: unknown[]): Promise<{ + accepted: string[]; + rejected: string[]; + }> { const accepted: string[] = []; entities.filter(isString).forEach((entity: string): void => { accepted.push(entity); @@ -41,15 +39,15 @@ class MockWorkAreaService implements WorkAreaService { document.getElementById("notifications")?.removeChild(node); }, 4000); }); - this.lastOpenedEntities = entities; - return { accepted, rejected: [] }; + return { + accepted, + rejected: [], + }; } - getLastOpenedEntities(): unknown[] { return this.lastOpenedEntities; } - async canBeOpenedInTab(entityUris: unknown[]): Promise { const mockContentPlugin = this.#editor.plugins.get(MockContentPlugin.pluginName) as MockContentPlugin; const uris = entityUris as string[]; @@ -63,14 +61,11 @@ class MockWorkAreaService implements WorkAreaService { return allReadable; }); } - getName(): string { return "workAreaService"; } - observe_activeEntity(): Observable { return this.#activeEntitySubject; } } - export default MockWorkAreaService; diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugincollection.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugincollection.ts index 712590ef1..6f18c28b5 100644 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugincollection.ts +++ b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugincollection.ts @@ -1,7 +1,6 @@ import { DataFacade } from "../../../src"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { Editor } from "ckeditor5"; import { Autosave } from "../ckeditor5-autosave"; - const byStringKey = (key: string, plugin: unknown): boolean => { if (typeof plugin === "function") { return plugin.name === key; @@ -9,7 +8,6 @@ const byStringKey = (key: string, plugin: unknown): boolean => { console.debug(`Signal not found searching for ${key} for entry: ${plugin} (${typeof plugin})`); return false; }; - const byConstructor = (key: unknown, plugin: unknown): boolean => { if (typeof plugin === "function") { return key === plugin; @@ -17,7 +15,6 @@ const byConstructor = (key: unknown, plugin: unknown): boolean => { console.debug(`Signal not found searching for ${key} for entry: ${plugin} (${typeof plugin})`); return false; }; - const pluginPredicate = (key: unknown) => (plugin: unknown): boolean => { @@ -30,36 +27,31 @@ const pluginPredicate = console.debug(`Unsupported key ${key} of type ${typeof key}. Will signal: Not found.`); return false; }; - export class PluginCollection { readonly #context: unknown; readonly #plugins: unknown[]; - #dataFacade?: DataFacade; - #autosave?: Autosave; - + #dataFacade: DataFacade; + #autosave: Autosave; constructor(context: unknown, availablePlugins: unknown[] = []) { this.#context = context; this.#plugins = availablePlugins; } - mockInitAll() { for (const pluginKey of this.#plugins) { - const plugin = this.get(pluginKey) as { init?: () => void }; + const plugin = this.get(pluginKey) as { + init?: () => void; + }; plugin.init?.(); } } - has(key: unknown): boolean { return this.#plugins.some(pluginPredicate(key)); } - get(key: unknown): unknown { const plugin = this.#plugins.find(pluginPredicate(key)); - if (!plugin) { throw new Error(`get: No Plugin registered for key "${key}" (${typeof key}).`); } - if (typeof plugin === "function") { // Lazy initialization required, as at construction time, relevant // setup in the editor (here: config) may not be available, yet. diff --git a/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts b/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts index ead6ae63d..3015e0126 100644 --- a/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts +++ b/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts @@ -1,10 +1,6 @@ -import { Editor } from "@ckeditor/ckeditor5-core"; -import type { EditorUI } from "@ckeditor/ckeditor5-ui"; -import { Autosave } from "@ckeditor/ckeditor5-autosave"; +import { Editor, EditorUI, Autosave } from "ckeditor5"; import { DataFacade, SetDataData } from "../src"; - jest.mock("@ckeditor/ckeditor5-core"); - class DummyEditor extends Editor { readonly ui: EditorUI = {} as EditorUI; @@ -28,16 +24,13 @@ class DummyEditor extends Editor { this.data.set(data); } } - describe("DataFacade", () => { beforeEach(() => { jest.clearAllMocks(); }); - it("should forward previously set data once initialized", async () => { const dataFixture = "DATA"; const initDelay = new Promise((resolve) => window.setTimeout(resolve, 1)); - const editor = new DummyEditor({ plugins: [DataFacade, Autosave], // @ts-expect-error – Just some mock configuration. @@ -45,17 +38,13 @@ describe("DataFacade", () => { initDelay, }, }); - const dataFacade = editor.plugins.get(DataFacade); // This will also forward the data to the editor, but we will not know // if the editor itself does not override these afterward, e.g., when // reading the `initialData` property. dataFacade.setData(dataFixture); - editor.data.set("mocking data set from initialData"); - expect.assertions(2); - await initDelay.then(() => { // After init is done, data should have been forwarded. expect(editor.data.get()).toEqual(dataFixture); @@ -65,14 +54,12 @@ describe("DataFacade", () => { expect(dataFacade.getData()).toEqual(dataFixture); }); }); - describe("Autosave integration", () => { const dataFixture = "DATA"; let savedData = ""; let editor: DummyEditor; let autosave: Autosave; let dataFacade: DataFacade; - beforeEach(() => { editor = new DummyEditor({ plugins: [DataFacade, Autosave], @@ -83,16 +70,12 @@ describe("DataFacade", () => { }, }, }); - autosave = editor.plugins.get(Autosave); dataFacade = editor.plugins.get(DataFacade); }); - it("should hook into autosave and use custom configuration for saving cached data", async () => { dataFacade.setData(dataFixture); - editor.simulateDataReformat(dataFixture.toLowerCase()); - expect.assertions(1); // We do not mock auto-forwarding set data to Autosave. Thus, invoking @@ -101,12 +84,9 @@ describe("DataFacade", () => { expect(savedData).toEqual(dataFixture); }); }); - it("should hook into autosave but prefer editorial changes on data facade's save", async () => { dataFacade.setData(dataFixture); - editor.simulateEditorialUpdate(dataFixture.toLowerCase()); - expect.assertions(1); // We do not mock auto-forwarding set data to Autosave. Thus, invoking diff --git a/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts b/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts index 3e92f3eda..0dc57baec 100644 --- a/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts +++ b/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts @@ -1,11 +1,6 @@ import { ContextMismatchError, DataFacade, DataFacadeController, SetDataData } from "../src"; -import { Editor } from "@ckeditor/ckeditor5-core"; -import type { EditorUI } from "@ckeditor/ckeditor5-ui"; -import { CKEditorError } from "@ckeditor/ckeditor5-utils"; -import { Autosave } from "@ckeditor/ckeditor5-autosave"; - +import { Editor, EditorUI, CKEditorError, Autosave } from "ckeditor5"; jest.mock("@ckeditor/ckeditor5-core"); - class DummyEditor extends Editor { readonly ui: EditorUI = {} as EditorUI; @@ -29,7 +24,6 @@ class DummyEditor extends Editor { this.data.set(data); } } - describe("DataFacadeController", () => { beforeEach(() => { jest.clearAllMocks(); @@ -47,11 +41,8 @@ describe("DataFacadeController", () => { plugins: [DataFacade, Autosave], }); const dataFacade = editor.plugins.get(DataFacade); - controller.init(editor); - expect(controller).toHaveProperty("delegating", true); - dataFacade.setData(dataFixture); editor.simulateDataReformat(dataFixture.toLowerCase()); @@ -63,7 +54,6 @@ describe("DataFacadeController", () => { // the data-controller we delegate to. expect(controller.getData()).toEqual(dataFixture); }); - it("should propagate data to delegate and editor subsequently when delegation gets initialized", () => { const dataFixture = "DATA"; const controller = new DataFacadeController(); @@ -73,11 +63,8 @@ describe("DataFacadeController", () => { plugins: [DataFacade, Autosave], }); const dataFacade = editor.plugins.get(DataFacade); - controller.setData(dataFixture); - controller.init(editor); - expect(controller).toHaveProperty("delegating", true); // Should have propagated on init to delegate data-facade-controller and @@ -89,7 +76,6 @@ describe("DataFacadeController", () => { editor.simulateDataReformat(dataFixture.toLowerCase()); expect(dataFacade.getData()).toEqual(dataFixture); }); - it("should forward data set to delegate directly", () => { const dataFixture = "DATA"; const controller = new DataFacadeController(); @@ -99,9 +85,7 @@ describe("DataFacadeController", () => { plugins: [DataFacade, Autosave], }); const dataFacade = editor.plugins.get(DataFacade); - controller.init(editor); - expect(controller).toHaveProperty("delegating", true); // Should be forwarded to delegate. @@ -135,14 +119,11 @@ describe("DataFacadeController", () => { controller.init(editor); expect(controller).toHaveProperty("editor", editor); }); - it("should propagate any already set data", () => { const dataFixture = "DATA"; const controller = new DataFacadeController(); const editor = new DummyEditor(); - controller.setData(dataFixture); - controller.init(editor); expect(editor.data.get()).toEqual(dataFixture); }); @@ -155,23 +136,17 @@ describe("DataFacadeController", () => { it("should cache data if not bound to editor instance already", () => { const dataFixture = "DATA"; const controller = new DataFacadeController(); - controller.setData(dataFixture); - expect(controller.getData()).toEqual(dataFixture); }); - it("should propagate data set if bound to editor instance", () => { const dataFixture = "DATA"; const editor = new DummyEditor(); const controller = new DataFacadeController(editor); - controller.setData(dataFixture); - expect(controller.getData()).toEqual(dataFixture); expect(editor.data.get()).toEqual(dataFixture); }); - it("should read data directly, if none cached", () => { const dataFixture = "DATA"; const editor = new DummyEditor(); @@ -179,11 +154,9 @@ describe("DataFacadeController", () => { // Similar to: There was some other way, that provided the initial data. editor.simulateEditorialUpdate(dataFixture); - expect(controller.getData()).toEqual(dataFixture); expect(editor.data.get()).toEqual(dataFixture); }); - describe("Options on get support", () => { it.each` trim | data | expected @@ -194,13 +167,14 @@ describe("DataFacadeController", () => { ({ trim, data, expected }: { trim: "empty" | "none"; data: string; expected: string }) => { const editor = new DummyEditor(); const controller = new DataFacadeController(editor); - controller.setData(data); - - expect(controller.getData({ trim })).toEqual(expected); + expect( + controller.getData({ + trim, + }), + ).toEqual(expected); }, ); - it.each` trim | data | expected ${"empty"} | ${" DATA "} | ${"DATA"} @@ -211,24 +185,29 @@ describe("DataFacadeController", () => { const dataSet = "originalData"; const editor = new DummyEditor(); const controller = new DataFacadeController(editor); - controller.setData(dataSet); - editor.simulateEditorialUpdate(data); - - expect(controller.getData({ trim })).toEqual(expected); + expect( + controller.getData({ + trim, + }), + ).toEqual(expected); }, ); }); - describe("Multi-Root Support", () => { it("should respect available rootName in unbound mode", () => { const dataFixture = "DATA"; const rootName = "ROOT"; const controller = new DataFacadeController(); - - controller.setData({ [rootName]: dataFixture }); - expect(controller.getData({ rootName })).toEqual(dataFixture); + controller.setData({ + [rootName]: dataFixture, + }); + expect( + controller.getData({ + rootName, + }), + ).toEqual(dataFixture); }); /** @@ -253,11 +232,13 @@ describe("DataFacadeController", () => { const dataFixture = "DATA"; const rootName = "ROOT"; const controller = new DataFacadeController(); - const callToFail = () => controller.getData({ rootName }); + const callToFail = () => + controller.getData({ + rootName, + }); // Will set data for rootName = main. controller.setData(dataFixture); - expect(callToFail).toThrow(CKEditorError); }); @@ -280,22 +261,21 @@ describe("DataFacadeController", () => { it("should not fail on unavailable rootName but empty cache", () => { const rootName = "ROOT"; const controller = new DataFacadeController(); - const callToFail = () => controller.getData({ rootName }); - + const callToFail = () => + controller.getData({ + rootName, + }); expect(callToFail).not.toThrow(CKEditorError); }); }); }); - describe("Main Use Cases", () => { it("should prefer original data on no editorial change (main use case)", () => { const dataFixture = "DATA"; const internallyNormalizedData = dataFixture.toLowerCase(); const editor = new DummyEditor(); const controller = new DataFacadeController(editor); - controller.setData(dataFixture); - editor.simulateDataReformat(internallyNormalizedData); // Precondition check that our simulated change works. @@ -304,15 +284,12 @@ describe("DataFacadeController", () => { // No version change? Provide the original data. expect(controller.getData()).toEqual(dataFixture); }); - it("should prefer data as result from editing (main use case)", () => { const dataFixture = "DATA"; const editorialData = dataFixture.toLowerCase(); const editor = new DummyEditor(); const controller = new DataFacadeController(editor); - controller.setData(dataFixture); - editor.simulateEditorialUpdate(editorialData); // Precondition check that our simulated change works. @@ -323,7 +300,6 @@ describe("DataFacadeController", () => { expect(controller.getData()).toEqual(editorialData); }); }); - describe("Feature: Context Awareness", () => { describe.each` editorBinding @@ -331,55 +307,59 @@ describe("DataFacadeController", () => { ${"bound"} `("[$#] Editor Binding: $editorBinding", ({ editorBinding }: { editorBinding: "unbound" | "bound" }) => { let editor: DummyEditor | undefined; - beforeEach(() => { if (editorBinding === "bound") { editor = new DummyEditor(); } }); - it("should provide data on context match", () => { const dataFixture = "DATA"; const contextOnSet = "document/1"; const contextOnGet = contextOnSet; const controller = new DataFacadeController(editor); - - controller.setData(dataFixture, { context: contextOnSet }); - - expect(controller.getData({ context: contextOnGet })).toEqual(dataFixture); + controller.setData(dataFixture, { + context: contextOnSet, + }); + expect( + controller.getData({ + context: contextOnGet, + }), + ).toEqual(dataFixture); }); - it("should fail providing data if not specified when setting data", () => { const dataFixture = "DATA"; const contextOnGet = "document/1"; const controller = new DataFacadeController(editor); - controller.setData(dataFixture); - - expect(() => controller.getData({ context: contextOnGet })).toThrow(ContextMismatchError); + expect(() => + controller.getData({ + context: contextOnGet, + }), + ).toThrow(ContextMismatchError); }); - it("should fail providing data if not specified when getting data", () => { const dataFixture = "DATA"; const contextOnSet = "document/1"; const controller = new DataFacadeController(editor); - - controller.setData(dataFixture, { context: contextOnSet }); - + controller.setData(dataFixture, { + context: contextOnSet, + }); expect(() => controller.getData()).toThrow(ContextMismatchError); }); - it("should fail providing data if contexts on set and get do not match", () => { const dataFixture = "DATA"; const contextOnSet = "document/1"; const contextOnGet = "document/2"; const controller = new DataFacadeController(editor); - - controller.setData(dataFixture, { context: contextOnSet }); - - expect(() => controller.getData({ context: contextOnGet })).toThrow(ContextMismatchError); + controller.setData(dataFixture, { + context: contextOnSet, + }); + expect(() => + controller.getData({ + context: contextOnGet, + }), + ).toThrow(ContextMismatchError); }); - (editorBinding === "bound" ? describe : describe.skip)("Bound Mode", () => { it("should respect context also when getting data as result of editorial changes (same context scenario)", () => { const dataFixture = "DATA"; @@ -387,26 +367,31 @@ describe("DataFacadeController", () => { const contextOnSet = "document/1"; const contextOnGet = contextOnSet; const controller = new DataFacadeController(editor); - - controller.setData(dataFixture, { context: contextOnSet }); - + controller.setData(dataFixture, { + context: contextOnSet, + }); editor?.simulateEditorialUpdate(editedDataFixture); - - expect(controller.getData({ context: contextOnGet })).toEqual(editedDataFixture); + expect( + controller.getData({ + context: contextOnGet, + }), + ).toEqual(editedDataFixture); }); - it("should respect context also when getting data as result of editorial changes (expected failure due to different context)", () => { const dataFixture = "DATA"; const editedDataFixture = dataFixture.toLowerCase(); const contextOnSet = "document/1"; const contextOnGet = "document/2"; const controller = new DataFacadeController(editor); - - controller.setData(dataFixture, { context: contextOnSet }); - + controller.setData(dataFixture, { + context: contextOnSet, + }); editor?.simulateEditorialUpdate(editedDataFixture); - - expect(() => controller.getData({ context: contextOnGet })).toThrow(ContextMismatchError); + expect(() => + controller.getData({ + context: contextOnGet, + }), + ).toThrow(ContextMismatchError); }); }); }); diff --git a/packages/ckeditor5-data-facade/src/DataControllerApi.ts b/packages/ckeditor5-data-facade/src/DataControllerApi.ts index af7a0c523..45101958a 100644 --- a/packages/ckeditor5-data-facade/src/DataControllerApi.ts +++ b/packages/ckeditor5-data-facade/src/DataControllerApi.ts @@ -1,4 +1,4 @@ -import type { DataController } from "@ckeditor/ckeditor5-engine"; +import type { DataController } from "ckeditor5"; /** * Instance type of the DataController. diff --git a/packages/ckeditor5-data-facade/src/DataFacade.ts b/packages/ckeditor5-data-facade/src/DataFacade.ts index b85fa8acc..e2834a12b 100644 --- a/packages/ckeditor5-data-facade/src/DataFacade.ts +++ b/packages/ckeditor5-data-facade/src/DataFacade.ts @@ -1,10 +1,9 @@ -import { type Editor, type EditorReadyEvent, Plugin } from "@ckeditor/ckeditor5-core"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import type { GetDataOptions, SetDataData, SetDataOptions } from "./DataControllerApi"; import type { DataContextOptions } from "./DataContextOptions"; import { DataFacadeController } from "./DataFacadeController"; import type { DataApi } from "./DataApi"; -import { Autosave } from "@ckeditor/ckeditor5-autosave"; +import { Editor, EditorReadyEvent, Plugin, Autosave } from "ckeditor5"; import type { DataFacadeConfig, Save } from "./DataFacadeConfig"; /** @@ -46,13 +45,10 @@ export class DataFacade extends Plugin implements DataApi { public static get requires() { return [Autosave] as const; } - constructor(editor: Editor) { super(editor); - this.#config = editor.config.get("dataFacade") ?? {}; this.#saveFn = this.#config.save; - this.#dataController = new DataFacadeController(editor); } @@ -62,9 +58,7 @@ export class DataFacade extends Plugin implements DataApi { init(): void { const initInformation = reportInitStart(this); const { editor } = this; - const saveCallback = () => this.#saveFn?.(this) ?? Promise.resolve(); - if (saveCallback) { // Register as save adapter for `Autosave`. editor.plugins.get(Autosave).adapter = { @@ -80,7 +74,9 @@ export class DataFacade extends Plugin implements DataApi { this.#dataController.init(); }, // Propagate the state late. - { priority: "lowest" }, + { + priority: "lowest", + }, ); reportInitEnd(initInformation); } diff --git a/packages/ckeditor5-data-facade/src/DataFacadeController.ts b/packages/ckeditor5-data-facade/src/DataFacadeController.ts index 3c1da8b69..5912259f5 100644 --- a/packages/ckeditor5-data-facade/src/DataFacadeController.ts +++ b/packages/ckeditor5-data-facade/src/DataFacadeController.ts @@ -1,11 +1,10 @@ import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import type { GetDataOptions, SetDataData, SetDataOptions } from "./DataControllerApi"; import type { DataContextOptions } from "./DataContextOptions"; -import type { Editor } from "@ckeditor/ckeditor5-core"; import { DataApi } from "./DataApi"; import { CachedData } from "./CachedData"; import { ContextMismatchError } from "./ContextMismatchError"; -import { CKEditorError } from "@ckeditor/ckeditor5-utils"; +import { Editor, CKEditorError } from "ckeditor5"; /** * Controller for getting and setting data. It prefers providing data on get @@ -82,14 +81,14 @@ import { CKEditorError } from "@ckeditor/ckeditor5-utils"; */ export class DataFacadeController implements DataApi { static readonly #logger = LoggerProvider.getLogger("DataFacadeController"); - #editor?: Editor; - #cachedData?: CachedData; + #editor: Editor; + #cachedData: CachedData; /** * Possible delegate to controller directly bound to CKEditor 5 via * `DataFacade` plugin. Only expect to be set for a `DataFacadeController` * used in the standalone mode. */ - #delegate?: DataFacadeController; + #delegate: DataFacadeController; /** * Creates a data controller instance. Outside a plugin context, it is not @@ -126,7 +125,6 @@ export class DataFacadeController implements DataApi { } else { this.#editor = editor; } - if (this.editor) { this.#initDelegation(); this.#propagateData(); @@ -144,28 +142,21 @@ export class DataFacadeController implements DataApi { #initDelegation(): void { const logger = DataFacadeController.#logger; const editor = this.#editor; - if (!editor) { return; } - const { plugins } = editor; - if (!plugins.has("DataFacade")) { logger.debug("Running in standalone mode only. No DataFacade available for given at instance."); return; } - const dataFacade = plugins.get("DataFacade"); - const { data: boundDataFacadeController } = dataFacade; - if (boundDataFacadeController === this) { // No need to set up the delegation. This instance is already directly // bound to the `DataFacade`. return; } - if (this.delegating) { if (this.#delegate !== boundDataFacadeController) { throw new Error("Cannot switch delegation."); @@ -173,7 +164,6 @@ export class DataFacadeController implements DataApi { logger.debug("Skipping re-initialization of delegation."); return; } - this.#delegate = boundDataFacadeController; /* @@ -187,19 +177,14 @@ export class DataFacadeController implements DataApi { this.#initiallyPropagateDataToDelegate(boundDataFacadeController); } - #initiallyPropagateDataToDelegate(delegate: DataFacadeController): void { const cachedData = this.#cachedData; - if (!cachedData) { // Nothing to propagate. return; } - const { data, options } = cachedData; - delegate.setData(data, options); - this.#cachedData = undefined; } @@ -220,7 +205,6 @@ export class DataFacadeController implements DataApi { const logger = DataFacadeController.#logger; const { editor } = this; const cachedData = this.#cachedData; - if (!editor || !cachedData || this.delegating) { /* * Do not propagate: @@ -231,11 +215,8 @@ export class DataFacadeController implements DataApi { */ return; } - editor.data.set(cachedData.data, cachedData.options); - cachedData.version = editor.model.document.version; - logger.debug(`Propagated data of length ${cachedData.data.length} as document version ${cachedData.version}:`, { data: cachedData, }); @@ -254,12 +235,10 @@ export class DataFacadeController implements DataApi { this.#delegate.setData(data, options); return; } - this.#cachedData = { data, options, }; - this.#propagateData(); } @@ -272,59 +251,51 @@ export class DataFacadeController implements DataApi { */ getData(options: GetDataOptions & DataContextOptions = {}): string { const logger = DataFacadeController.#logger; - if (this.#delegate) { return this.#delegate.getData(options); } - const { editor } = this; const cachedData = this.#cachedData; - if (!cachedData) { logger.debug("getData: No cached data. Retrieving data directly from editor."); return editor?.data.get(options) ?? ""; } - const { data, options: { context: expectedContext }, version: cachedVersion, } = cachedData; const { context: actualContext } = options; - if (expectedContext !== actualContext) { throw new ContextMismatchError(`Data Context Mismatch: actual: ${actualContext}, expected: ${expectedContext}`, { actual: actualContext, expected: expectedContext, }); } - const currentVersion = editor?.model?.document?.version; - if (!editor || cachedVersion === currentVersion) { const dataFromCache = this.#pickData(data, options); - if (logger.isDebugEnabled()) { if (editor) { logger.debug( `getData: No editorial updates since last set data for version ${cachedVersion}. Serving data from cache:`, - { data: dataFromCache }, + { + data: dataFromCache, + }, ); } else { - logger.debug(`getData: Editor unavailable, yet. Serving data from cache:`, { data: dataFromCache }); + logger.debug(`getData: Editor unavailable, yet. Serving data from cache:`, { + data: dataFromCache, + }); } } - return dataFromCache; } - logger.debug( `getData: Editorial changes applied (last version on set: ${cachedVersion}, current version: ${currentVersion}). Providing data directly from editor.`, ); - return editor.data.get(options); } - #pickData(data: SetDataData, options: Pick, "rootName">): string { const { rootName = "main" } = options; if (typeof data === "string") { @@ -339,7 +310,6 @@ export class DataFacadeController implements DataApi { // does not exist. throw new CKEditorError("datacontroller-get-non-existent-root", this.editor?.data); } - toString(): string { return `DataFacadeController{delegating=${this.delegating}, cache=${this.#cachedData ? "" : ""}}`; } diff --git a/packages/ckeditor5-data-facade/src/augmentation.ts b/packages/ckeditor5-data-facade/src/augmentation.ts index 07d46d047..61ab21911 100644 --- a/packages/ckeditor5-data-facade/src/augmentation.ts +++ b/packages/ckeditor5-data-facade/src/augmentation.ts @@ -1,10 +1,8 @@ import type { DataFacade, DataFacadeConfig } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [DataFacade.pluginName]: DataFacade; } - interface EditorConfig { /** * The configuration of the `DataFacade`. diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/ElementProxy.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/ElementProxy.test.ts index e37b01988..38297bc68 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/ElementProxy.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/ElementProxy.test.ts @@ -1,10 +1,8 @@ /* eslint no-null/no-null: off */ import ElementProxy, { ElementFilterRule, ElementFilterParams } from "../src/ElementProxy"; - import "jest-xml-matcher"; -import Editor from "@ckeditor/ckeditor5-core/src/editor/editor"; - +import { Editor } from "ckeditor5"; jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); //@ts-expect-error We should rather mock ClassicEditor or similar here. @@ -58,43 +56,36 @@ describe("Should Respecting (Im-)Mutable State", () => { const htmlDivElement = window.document.createElement("div"); htmlDivElement.setAttribute("class", "testClass"); const immutableElement = new ElementProxy(htmlDivElement, MOCK_EDITOR, {}, false); - test("should not be able to delete element", () => { expect(() => (immutableElement.remove = true)).toThrowError(); }); - test("should not be able to replace element by children", () => { expect(() => (immutableElement.replaceByChildren = true)).toThrowError(); }); - test("should not be able to change name", () => { const getValue = () => immutableElement.name; const previousValue = getValue(); expect(() => (immutableElement.name = "test")).toThrowError(); expect(getValue()).toStrictEqual(previousValue); }); - test("should not be able to change attribute value", () => { const getValue = () => immutableElement.attributes.class; const previousValue = getValue(); expect(() => (immutableElement.attributes.class = "test")).toThrowError(); expect(getValue()).toStrictEqual(previousValue); }); - test("should not be able to add additional class", () => { const getValue = () => immutableElement.classList; const previousValue = getValue(); expect(() => immutableElement.classList.add("test")).toThrowError(); expect(getValue()).toStrictEqual(previousValue); }); - test("should not be able to add attribute", () => { const getValue = () => immutableElement.attributes.id; const previousValue = getValue(); expect(() => (immutableElement.attributes.id = "test")).toThrowError(); expect(getValue()).toStrictEqual(previousValue); }); - test("should not be able to delete attribute", () => { const getValue = () => immutableElement.attributes.id; const previousValue = getValue(); @@ -156,12 +147,10 @@ describe("ElementProxy.classList", () => { // Proxy: Don't change proxied element (yet, will be done on `persist`). expect(domElement.getAttribute("class")).toStrictEqual(valueBefore); }; - beforeEach(() => { domElement = window.document.createElement("div"); proxy = new ElementProxy(domElement, MOCK_EDITOR); }); - describe("classList.value", () => { // noinspection ES6DestructuringVariablesMerge describe.each` @@ -176,7 +165,6 @@ describe("ElementProxy.classList", () => { setClass(domClass); expect(proxy.classList.value).toStrictEqual(expectedClass); }); - test("Should not normalize on plain set", () => { proxy.classList.value = domClass; cmpElement.classList.value = domClass; @@ -185,7 +173,6 @@ describe("ElementProxy.classList", () => { }); }); }); - describe("classList.add", () => { test.each` before | add | after | count | comment @@ -202,10 +189,8 @@ describe("ElementProxy.classList", () => { proxy.classList.add(...add); cmpElement.classList.add(...add); } - validate(before, after, count); }); - test.each` add ${"new value"} @@ -228,12 +213,10 @@ describe("ElementProxy.classList", () => { proxyFunc = () => proxy.classList.add(...add); cmpFunc = () => cmpElement.classList.add(...add); } - expect(proxyFunc).toThrow(); expect(cmpFunc).toThrow(); }); }); - describe("classList.remove", () => { test.each` before | remove | after | count | comment @@ -255,11 +238,9 @@ describe("ElementProxy.classList", () => { proxy.classList.remove(...remove); cmpElement.classList.remove(...remove); } - validate(before, after, count); }, ); - test.each` remove ${"new value"} @@ -282,12 +263,10 @@ describe("ElementProxy.classList", () => { proxyFunc = () => proxy.classList.remove(...remove); cmpFunc = () => cmpElement.classList.remove(...remove); } - expect(proxyFunc).toThrow(); expect(cmpFunc).toThrow(); }); }); - describe("classList.replace", () => { test.each` before | replace | replaceBy | after | count | comment @@ -306,11 +285,9 @@ describe("ElementProxy.classList", () => { setClass(before); proxy.classList.replace(replace, replaceBy); cmpElement.classList.replace(replace, replaceBy); - validate(before, after, count); }, ); - test.each` replace | replaceBy ${` \told \t`} | ${"new"} @@ -321,13 +298,11 @@ describe("ElementProxy.classList", () => { setClass("some"); const proxyFunc = () => proxy.classList.replace(replace, replaceBy); const cmpFunc = () => cmpElement.classList.replace(replace, replaceBy); - expect(proxyFunc).toThrow(); expect(cmpFunc).toThrow(); }, ); }); - describe("classList.toggle", () => { test.each` before | toggle | force | after | count | comment @@ -349,11 +324,9 @@ describe("ElementProxy.classList", () => { setClass(before); proxy.classList.toggle(toggle, force); cmpElement.classList.toggle(toggle, force); - validate(before, after, count); }, ); - test.each` toggle | force ${" \ttoggling \t"} | ${undefined} @@ -365,7 +338,6 @@ describe("ElementProxy.classList", () => { setClass("some"); const proxyFunc = () => proxy.classList.toggle(toggle, force); const cmpFunc = () => cmpElement.classList.toggle(toggle, force); - expect(proxyFunc).toThrow(); expect(cmpFunc).toThrow(); }, @@ -391,7 +363,6 @@ type ApplyRulesData = [ restart?: string; }, ]; - describe("ElementProxy.applyRules()", () => { // noinspection XmlUnusedNamespaceDeclaration test.each([ @@ -854,13 +825,10 @@ describe("ElementProxy.applyRules()", () => { ])("(%#) %s", (name, testData) => { const serializer = new XMLSerializer(); const xpath = "//el"; - const xmlDocument: Document = requireValidXml(testData.from); const xmlExpectedDocument: Document = requireValidXml(testData.to); - const xmlElement: Element = xmlDocument.evaluate(xpath, xmlDocument, null, XPathResult.FIRST_ORDERED_NODE_TYPE) .singleNodeValue as Element; - if (!xmlElement) { throw new Error(`Test Setup Issue: Unable resolving XPath '${xpath}' to element under test in: ${testData.from}`); } @@ -873,11 +841,9 @@ describe("ElementProxy.applyRules()", () => { `Test Setup Issue: Unable resolving XPATH '${testData.restart}' to expected restart node in: ${testData.to}`, ); } - const me = new ElementProxy(xmlElement, MOCK_EDITOR); const appliedRulesResult = me.applyRules(...testData.rules); expect(serializer.serializeToString(xmlDocument)).toEqualXML(testData.to); - if (testData.restart) { const expectedRestart = xmlDocument.evaluate( testData.restart, diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/HtmlFilter.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/HtmlFilter.test.ts index 0b23f4126..d9679455b 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/HtmlFilter.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/HtmlFilter.test.ts @@ -3,8 +3,7 @@ import "jest-xml-matcher"; import HtmlFilter, { FilterRuleSet } from "../src/HtmlFilter"; -import Editor from "@ckeditor/ckeditor5-core/src/editor/editor"; - +import { Editor } from "ckeditor5"; jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); //@ts-expect-error We should rather mock ClassicEditor or similar here. @@ -17,7 +16,6 @@ const MOCK_EDITOR = new Editor(); * `TEST_SELECTOR = "APPLY#3"` */ const TEST_SELECTOR = ""; - type ApplyToData = [ string, { @@ -27,7 +25,6 @@ type ApplyToData = [ to: string; }, ]; - describe("HtmlFilter.applyTo()", () => { describe.each([ [ @@ -132,9 +129,7 @@ describe("HtmlFilter.applyTo()", () => { rules: { elements: { "^": (params) => { - params.node.attributes.name = `${ - params.node.attributes.name ? params.node.attributes.name + "-" : "" - }before`; + params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}before`; }, "el": (params) => { params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}el`; @@ -151,9 +146,7 @@ describe("HtmlFilter.applyTo()", () => { rules: { elements: { $: (params) => { - params.node.attributes.name = `${ - params.node.attributes.name ? params.node.attributes.name + "-" : "" - }after`; + params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}after`; }, el: (params) => { params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}el`; @@ -170,14 +163,10 @@ describe("HtmlFilter.applyTo()", () => { rules: { elements: { "^": (params) => { - params.node.attributes.name = `${ - params.node.attributes.name ? params.node.attributes.name + "-" : "" - }before`; + params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}before`; }, "$": (params) => { - params.node.attributes.name = `${ - params.node.attributes.name ? params.node.attributes.name + "-" : "" - }after`; + params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}after`; }, "el": (params) => { params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}el`; @@ -194,14 +183,10 @@ describe("HtmlFilter.applyTo()", () => { rules: { elements: { "^": (params) => { - params.node.attributes.name = `${ - params.node.attributes.name ? params.node.attributes.name + "-" : "" - }before`; + params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}before`; }, "$": (params) => { - params.node.attributes.name = `${ - params.node.attributes.name ? params.node.attributes.name + "-" : "" - }after`; + params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}after`; }, "el": (params) => { params.node.name = "replacement"; @@ -209,9 +194,7 @@ describe("HtmlFilter.applyTo()", () => { }, "replacement": (params) => { // This should not be triggered. - params.node.attributes.name = `${ - params.node.attributes.name ? params.node.attributes.name + "-" : "" - }replacement`; + params.node.attributes.name = `${params.node.attributes.name ? params.node.attributes.name + "-" : ""}replacement`; }, }, }, @@ -234,14 +217,11 @@ describe("HtmlFilter.applyTo()", () => { test.todo(`${name} (disabled by test selector for debugging purpose)`); return; } - test(name, () => { document.body.innerHTML = testData.from.trim(); const root: Node = document.body.firstChild as Node; const filter = new HtmlFilter(testData.rules, MOCK_EDITOR); - filter.applyTo(root); - expect(document.body.innerHTML).toEqualXML(testData.to); }); }); diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/Rules.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/Rules.test.ts index 9b5391c54..7068e8ea3 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/Rules.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/Rules.test.ts @@ -2,9 +2,8 @@ import "jest-xml-matcher"; import { parseFilterRuleSetConfigurations, FilterRuleSetConfiguration } from "../src/Rules"; import HtmlFilter from "../src/HtmlFilter"; import { ElementFilterRule } from "../src/ElementProxy"; -import Editor from "@ckeditor/ckeditor5-core/src/editor/editor"; +import { Editor } from "ckeditor5"; import { TextFilterRule } from "../src/TextProxy"; - jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); /** @@ -17,17 +16,14 @@ const TEST_SELECTOR = ""; //@ts-expect-error We should rather mock ClassicEditor or similar here. const MOCK_EDITOR = new Editor(); - const parser = new DOMParser(); const serializer = new XMLSerializer(); - interface CommentableTestData { /** * Some comment, which may help to understand the test case better. */ comment?: string; } - interface DisablableTestCase { /** * If set to `true` or non-empty string this test will be ignored. @@ -35,7 +31,6 @@ interface DisablableTestCase { */ disabled?: boolean | string; } - interface ParseFilterRuleSetConfigurationTestData { config: FilterRuleSetConfiguration; // The original 'view' @@ -45,33 +40,27 @@ interface ParseFilterRuleSetConfigurationTestData { // The view after re-transforming the previously generated data. view: string; } - interface WithDefaultsTestData { default: FilterRuleSetConfiguration; } - const replaceElementByChildren: ElementFilterRule = (p) => { p.node.replaceByChildren = true; }; - const reverseText: TextFilterRule = (p) => { p.node.textContent = p.node.textContent.split("").reverse().join(""); }; - describe("Rules.parseFilterRuleSetConfiguration, All Empty Handling", () => { test("Should accept empty configuration.", () => { const toDataAndView = parseFilterRuleSetConfigurations({}); expect(toDataAndView).toHaveProperty("toData", {}); expect(toDataAndView).toHaveProperty("toView", {}); }); - test("Invariant: Should accept empty custom configuration and empty default.", () => { const toDataAndView = parseFilterRuleSetConfigurations({}, {}); expect(toDataAndView).toHaveProperty("toData", {}); expect(toDataAndView).toHaveProperty("toView", {}); }); }); - describe("Rules.parseFilterRuleSetConfiguration, Parsing Main Configuration (No Defaults)", () => { type TestData = CommentableTestData & DisablableTestCase & ParseFilterRuleSetConfigurationTestData; type TestFixture = [string, TestData]; @@ -307,41 +296,29 @@ describe("Rules.parseFilterRuleSetConfiguration, Parsing Main Configuration (No }, ], ]; - describe.each(testFixtures)("(%#) %s", (name, testData) => { if (!!TEST_SELECTOR && !name.startsWith(TEST_SELECTOR)) { test.todo(`${name} (disabled by test selector for debugging purpose)`); return; } - const from: Document = parser.parseFromString(testData.from, "text/xml"); const config: FilterRuleSetConfiguration = testData.config; - const { toData, toView } = parseFilterRuleSetConfigurations(config); - const toDataFilter = new HtmlFilter(toData, MOCK_EDITOR); const toViewFilter = new HtmlFilter(toView, MOCK_EDITOR); - toDataFilter.applyTo(from.documentElement); - const dataXml: string = serializer.serializeToString(from.documentElement); - test(`toData: Should have transformed as expected: ${testData.from} -> ${testData.data}.`, () => { expect(dataXml).toEqualXML(testData.data); }); - const data: Document = parser.parseFromString(dataXml, "text/xml"); - toViewFilter.applyTo(data.documentElement); - const viewXml: string = serializer.serializeToString(data.documentElement); - test(`toView: Should have transformed as expected: ${dataXml} -> ${testData.view}`, () => { expect(viewXml).toEqualXML(testData.view); }); }); }); - describe("Rules.parseFilterRuleSetConfiguration, Parsing Configuration (Having Defaults)", () => { type TestData = CommentableTestData & DisablableTestCase & @@ -517,39 +494,29 @@ describe("Rules.parseFilterRuleSetConfiguration, Parsing Configuration (Having D }, ], ]; - describe.each(testFixtures)("(%#) %s", (name, testData) => { if (!!TEST_SELECTOR && !name.startsWith(TEST_SELECTOR)) { test.todo(`${name} (disabled by test selector for debugging purpose)`); return; } - const from: Document = parser.parseFromString(testData.from, "text/xml"); const defaultConfig: FilterRuleSetConfiguration = testData.default; const config: FilterRuleSetConfiguration = testData.config; - const { toData, toView } = parseFilterRuleSetConfigurations(config, defaultConfig); - const toDataFilter = new HtmlFilter(toData, MOCK_EDITOR); const toViewFilter = new HtmlFilter(toView, MOCK_EDITOR); - currentStepIdx = 0; toDataFilter.applyTo(from.documentElement); - const dataXml: string = serializer.serializeToString(from.documentElement); - test(`toData: Should have transformed as expected: ${testData.from} -> ${testData.data}.`, () => { expect(dataXml).toEqualXML(testData.data); }); - const data: Document = parser.parseFromString(dataXml, "text/xml"); // We continue using currentStepIdx also for view filter, so that we may get // a complete overview on processing (when used in test-data). toViewFilter.applyTo(data.documentElement); - const viewXml: string = serializer.serializeToString(data.documentElement); - test(`toView: Should have transformed as expected: ${dataXml} -> ${testData.view}`, () => { expect(viewXml).toEqualXML(testData.view); }); diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/TextProxy.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/TextProxy.test.ts index 0acbbed42..99e88942c 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/TextProxy.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/TextProxy.test.ts @@ -1,16 +1,14 @@ /* eslint no-null/no-null: off */ import "jest-xml-matcher"; -import Editor from "@ckeditor/ckeditor5-core/src/editor/editor"; +import { Editor } from "ckeditor5"; import TextProxy, { TextFilterRule } from "../src/TextProxy"; - jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); //@ts-expect-error We should rather mock ClassicEditor or similar here. const MOCK_EDITOR = new Editor(); const SERIALIZER = new XMLSerializer(); const PARSER = new DOMParser(); - function parseAndValidate(xmlString: string): Document { const xmlDocument = PARSER.parseFromString(xmlString, "text/xml"); const xPathResult: XPathResult = xmlDocument.evaluate( @@ -50,7 +48,6 @@ interface DisablableTestData { */ disabled?: boolean | string | (() => boolean | string); } - interface TextFilterTestData extends CommentableTestData, DisablableTestData { /** * The rules to apply. @@ -74,7 +71,6 @@ interface TextFilterTestData extends CommentableTestData, DisablableTestData { */ restartPath?: string; } - describe("TextProxy.applyRules()", () => { type ApplyRulesData = [ /** @@ -83,10 +79,8 @@ describe("TextProxy.applyRules()", () => { string, TextFilterTestData, ]; - const asciiText = "Lorem ipsum dolor sit amet."; const otherAsciiText = "Hinter den Wortbergen."; - const testData: ApplyRulesData[] = [ [ "NOOP#01: Should do nothing on empty rule set", @@ -146,7 +140,6 @@ describe("TextProxy.applyRules()", () => { }, ], ]; - describe.each(testData)("(%#) %s", (name, testData) => { function getTextNode(): Text { const textNode: Text | null = inputDocument.evaluate( @@ -155,7 +148,6 @@ describe("TextProxy.applyRules()", () => { null, XPathResult.FIRST_ORDERED_NODE_TYPE, ).singleNodeValue as Text; - if (!textNode) { throw new Error( `Test Setup Issue: Unable resolving XPath '${testData.nodePath}' to element under test in: ${testData.from}`, @@ -163,7 +155,6 @@ describe("TextProxy.applyRules()", () => { } return textNode; } - function getRestartNode(): Node | null { if (!testData.restartPath) { return null; @@ -181,10 +172,15 @@ describe("TextProxy.applyRules()", () => { } return restartNode; } - - function parseDisabled(): { disabled: boolean; namePostfix: string } { + function parseDisabled(): { + disabled: boolean; + namePostfix: string; + } { if (!testData.disabled) { - return { disabled: false, namePostfix: "" }; + return { + disabled: false, + namePostfix: "", + }; } let state: string | boolean; if (typeof testData.disabled === "function") { @@ -193,28 +189,25 @@ describe("TextProxy.applyRules()", () => { state = testData.disabled; } if (!state) { - return { disabled: false, namePostfix: "" }; + return { + disabled: false, + namePostfix: "", + }; } return { disabled: true, namePostfix: ` (${typeof state === "string" ? state : "disabled"})`, }; } - const inputDocument: Document = parseAndValidate(testData.from); const expectedDocument: Document = parseAndValidate(testData.to); - const proxy = new TextProxy(getTextNode(), MOCK_EDITOR, true); - const { disabled, namePostfix } = parseDisabled(); const testStrategy = !disabled ? test : test.skip; - const result = proxy.applyRules(...testData.rules); - testStrategy(`Should result in expected DOM.${namePostfix}`, () => { expect(SERIALIZER.serializeToString(inputDocument)).toEqualXML(testData.to); }); - testStrategy(`Should provide expected restartFrom-result.${namePostfix}`, () => { expect(result).toStrictEqual(getRestartNode()); }); diff --git a/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts b/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts index 265340399..27f8bdfdf 100644 --- a/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts +++ b/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts @@ -1,7 +1,7 @@ /* eslint no-null/no-null: off */ import { DEFAULT_NAMESPACES, Namespaces } from "./Namespace"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { Editor } from "ckeditor5"; import NodeProxy, { PersistResponse, RESPONSE_CONTINUE } from "./NodeProxy"; /** @@ -132,9 +132,7 @@ class ClassList implements DOMTokenList { this.#validate(...values); const raw: Set = new Set(this.#classes); const addValue = (v: string): unknown => !!v && raw.add(v); - values.forEach(addValue); - this.#classes = [...raw]; } @@ -150,9 +148,7 @@ class ClassList implements DOMTokenList { this.#validate(...values); const raw: Set = new Set(this.#classes); const deleteValue = (v: string): boolean => raw.delete(v); - values.forEach(deleteValue); - this.#classes = [...raw]; } @@ -193,7 +189,6 @@ class ClassList implements DOMTokenList { const valuePosition = raw.indexOf(value); const doAdd = force === undefined || force; const doRemove = force === undefined || !force; - if (valuePosition < 0) { if (doAdd) { this.add(value); @@ -201,14 +196,12 @@ class ClassList implements DOMTokenList { } return false; } - if (doRemove) { this.remove(value); return false; } return true; } - [Symbol.iterator](): IterableIterator { return this.#classes[Symbol.iterator](); } @@ -275,11 +268,9 @@ class ClassList implements DOMTokenList { values(): IterableIterator { return this.#classes.values(); } - toString(): string { return this.value; } - [index: number]: string; } @@ -292,7 +283,7 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { * During processing, we may change our identity. This overrides the previous * delegate. */ - #replacement?: Element; + #replacement: Element; /** * Signals either a possibly new name for this element, or that the name @@ -409,7 +400,6 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { for (const rule of rules) { if (rule) { rule(this); - const response = this.persistToDom(); if (response.continueWith) { result = response.continueWith || result; @@ -491,7 +481,6 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { #applyAttributes(targetElement: Element, attributes: AttributeMap): void { const ownerDocument = targetElement.ownerDocument; const attributeNames = Object.keys(attributes); - const handleAttributeWithoutNamespacePrefix = (key: string, value: string | null) => { if (value === null) { targetElement.removeAttributeNS(null, key); @@ -499,7 +488,6 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { targetElement.setAttributeNS(null, key, value); } }; - const handleAttributeWithNamespacePrefix = ( uri: string | undefined, prefix: string, @@ -524,7 +512,6 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { } } }; - attributeNames // Must not set namespace as attribute. .filter((key) => key !== "xmlns") @@ -562,11 +549,8 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { } else { newElement = ownerDocument.createElementNS(ownerDocument.documentElement.namespaceURI, newName); } - const isRenamed = this.realName !== newName; - this.#replaceByElement(newElement); - if (isRenamed) { /* * Re-Processing recommended as we have a new element name @@ -600,16 +584,13 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { // processing again for this element. return this.continueFrom(newElement.nextSibling); } - #replaceByElement(newElement: Element): void { this.#applyAttributes(newElement, this.attributes); - const childrenToMove = this.delegate.childNodes; while (childrenToMove.length > 0) { // Will also remove it from original parent. newElement.append(childrenToMove[0]); } - const parentNode = this.delegate.parentNode; if (parentNode) { parentNode.replaceChild(newElement, this.delegate); @@ -689,11 +670,9 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { return { configurable: true, enumerable: true, - get(): unknown { return value; }, - set(v: unknown): void { self.requireMutable(); Reflect.set(target, attrName, v); @@ -705,11 +684,9 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { return { configurable: true, enumerable: true, - get(): string | null { return self.delegate.getAttribute(attrName); }, - set(v: unknown): void { self.requireMutable(); Reflect.set(target, attrName, v); @@ -763,7 +740,6 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { }); } } - type OwnPropertyKey = string | symbol; /** @@ -818,6 +794,5 @@ const allFilterRules = (...rules: ElementFilterRule[]): ElementFilterRule => (params) => rules.forEach((r) => r(params)); - export default ElementProxy; export { AttributeValue, AttributeMap, ElementFilterParams, ElementFilterRule, allFilterRules }; diff --git a/packages/ckeditor5-dataprocessor-support/src/HtmlFilter.ts b/packages/ckeditor5-dataprocessor-support/src/HtmlFilter.ts index aa2809723..385e927a3 100644 --- a/packages/ckeditor5-dataprocessor-support/src/HtmlFilter.ts +++ b/packages/ckeditor5-dataprocessor-support/src/HtmlFilter.ts @@ -4,23 +4,18 @@ import ElementProxy, { ElementFilterRule } from "./ElementProxy"; import TextProxy, { TextFilterRule } from "./TextProxy"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { Editor } from "@ckeditor/ckeditor5-core"; - +import { Editor } from "ckeditor5"; enum FilterMode { toData, toView, } - type ElementFilterRulesByName = Record; - interface ElementFilterRuleSet { elements?: ElementFilterRulesByName; } - interface TextFilterRuleSet { text?: TextFilterRule; } - type FilterRuleSet = ElementFilterRuleSet & TextFilterRuleSet; /** @@ -64,28 +59,26 @@ const AFTER_ELEMENT_AND_CHILDREN = "$$"; */ class HtmlFilter { static readonly #logger: Logger = LoggerProvider.getLogger("HtmlFilter"); - readonly #ruleSet: FilterRuleSet; readonly #editor: Editor; - constructor(ruleSet: FilterRuleSet, editor: Editor) { this.#ruleSet = ruleSet; this.#editor = editor; } - public applyTo(root: Node): void { const logger = HtmlFilter.#logger; - - logger.debug(`Applying filter to root node ${root.nodeName}.`, { root }); + logger.debug(`Applying filter to root node ${root.nodeName}.`, { + root, + }); // In CKEditor 4 we had an extra filter for the root node. If we want to introduce // this again, we should do it here. this.#applyToChildNodes(root); } - #applyToChildNodes(parent: Node): void { const logger = HtmlFilter.#logger; - - logger.debug(`Applying filter to child nodes of ${parent.nodeName}.`, { parent }); + logger.debug(`Applying filter to child nodes of ${parent.nodeName}.`, { + parent, + }); let next: Node | null = parent.firstChild; while (next) { next = this.#applyToCurrent(parent, next); @@ -101,12 +94,12 @@ class HtmlFilter { */ #applyToCurrent(parent: Node, currentNode: Node): Node | null { const logger = HtmlFilter.#logger; - - logger.debug(`Applying filter to ${currentNode.nodeName}.`, { parent, currentNode }); - + logger.debug(`Applying filter to ${currentNode.nodeName}.`, { + parent, + currentNode, + }); const next = currentNode.nextSibling; let newCurrentSupplier: () => Node | null = () => null; - if (currentNode instanceof Element) { const proxy = new ElementProxy(currentNode, this.#editor); /* @@ -119,13 +112,11 @@ class HtmlFilter { const handleChildrenRule: ElementFilterRule = (p) => { this.#applyToChildNodes(p.node.delegate); }; - if (this.#ruleSet.elements) { const beforeRule: ElementFilterRule | undefined = this.#ruleSet.elements[BEFORE_ELEMENT]; const filterRule: ElementFilterRule | undefined = this.#ruleSet.elements[currentNode.nodeName.toLowerCase()]; const afterRule: ElementFilterRule | undefined = this.#ruleSet.elements[AFTER_ELEMENT]; const afterChildrenRule: ElementFilterRule | undefined = this.#ruleSet.elements[AFTER_ELEMENT_AND_CHILDREN]; - newCurrentSupplier = () => proxy.applyRules(beforeRule, filterRule, afterRule, handleChildrenRule, afterChildrenRule); } else { @@ -138,9 +129,7 @@ class HtmlFilter { newCurrentSupplier = () => proxy.applyRules(this.#ruleSet.text); } } - const newCurrent = newCurrentSupplier(); - if (logger.isDebugEnabled()) { if (newCurrent) { logger.debug(`Will restart with new node ${newCurrent.nodeName}.`, { @@ -156,13 +145,10 @@ class HtmlFilter { }); } } - return newCurrent ?? next; } } - export default HtmlFilter; - export { AFTER_ELEMENT, AFTER_ELEMENT_AND_CHILDREN, diff --git a/packages/ckeditor5-dataprocessor-support/src/TextProxy.ts b/packages/ckeditor5-dataprocessor-support/src/TextProxy.ts index 1dd4b81d2..6a512c509 100644 --- a/packages/ckeditor5-dataprocessor-support/src/TextProxy.ts +++ b/packages/ckeditor5-dataprocessor-support/src/TextProxy.ts @@ -1,7 +1,7 @@ /* eslint no-null/no-null: off */ import NodeProxy, { PersistResponse } from "./NodeProxy"; -import { Editor } from "@ckeditor/ckeditor5-core"; +import { Editor } from "ckeditor5"; /** * Proxy to manipulate text nodes. General contract is, that all modifications @@ -61,7 +61,6 @@ class TextProxy extends NodeProxy implements TextFilterParams { if (rule) { rule(this); } - const response = this.persistToDom(); if (response.continueWith) { // Implies (or should imply) response.abort === true @@ -143,6 +142,5 @@ interface TextFilterParams { * Function interface: `(params: TextFilterParams) => void`. */ type TextFilterRule = (params: TextFilterParams) => void; - export default TextProxy; export { TextFilterParams, TextFilterRule }; diff --git a/packages/ckeditor5-dialog-visibility/src/DialogVisibilityPlugin.ts b/packages/ckeditor5-dialog-visibility/src/DialogVisibilityPlugin.ts index 67a22364e..72fc84924 100644 --- a/packages/ckeditor5-dialog-visibility/src/DialogVisibilityPlugin.ts +++ b/packages/ckeditor5-dialog-visibility/src/DialogVisibilityPlugin.ts @@ -1,14 +1,9 @@ -import { Editor, Plugin } from "@ckeditor/ckeditor5-core"; -import { Dialog } from "@ckeditor/ckeditor5-ui"; - +import { Editor, Plugin, Dialog } from "ckeditor5"; export default class DialogVisibility extends Plugin { public static readonly pluginName = "DialogVisibility" as const; static readonly requires = [Dialog]; - intersectionObserver?: IntersectionObserver = undefined; - isOpen = false; - init(): void { const editorElement = this.editor.ui.element; if (editorElement) { @@ -17,7 +12,6 @@ export default class DialogVisibility extends Plugin { this.waitForEditorReadyEvent(); } } - waitForEditorReadyEvent() { this.editor.on("ready", () => { const editorElement = this.editor.ui.element; @@ -26,7 +20,6 @@ export default class DialogVisibility extends Plugin { } }); } - observeEditorVisibility(editorElement: Element) { this.observeDialogState(); this.intersectionObserver = new IntersectionObserver((entries) => { @@ -37,10 +30,8 @@ export default class DialogVisibility extends Plugin { } }); }, {}); - this.intersectionObserver.observe(editorElement); } - observeDialogState() { const editor: Editor = this.editor; const dialogPlugin: Dialog = editor.plugins.get("Dialog"); @@ -53,7 +44,6 @@ export default class DialogVisibility extends Plugin { }); } } - closeDialog() { const editor: Editor = this.editor; const dialogPlugin: Dialog = editor.plugins.get("Dialog"); @@ -61,7 +51,6 @@ export default class DialogVisibility extends Plugin { dialogPlugin.hide(); } } - override destroy() { this.intersectionObserver?.disconnect(); super.destroy(); diff --git a/packages/ckeditor5-dom-converter/src/Rule.ts b/packages/ckeditor5-dom-converter/src/Rule.ts index e2bafc1cd..384e35935 100644 --- a/packages/ckeditor5-dom-converter/src/Rule.ts +++ b/packages/ckeditor5-dom-converter/src/Rule.ts @@ -1,5 +1,4 @@ -import { PriorityString } from "@ckeditor/ckeditor5-utils/src/priorities"; -import { priorities } from "@ckeditor/ckeditor5-utils"; +import { PriorityString, priorities } from "ckeditor5"; import { AppendedFunction, ImportedFunction, @@ -7,7 +6,6 @@ import { PrepareFunction, } from "./DomConverterStages"; import { RequireSelected } from "@coremedia/ckeditor5-common"; - export interface RuleConfigBase { /** * Optional ID for rule. Possibly useful for debugging purpose. Propagated @@ -140,9 +138,7 @@ export type RuleSectionConfig = export type TransformPropertyType = Pick< Type, keyof Omit -> & { - [P in Key]: ValueType; -}; +> & { [P in Key]: ValueType }; /** * Parsed Rule Section. diff --git a/packages/ckeditor5-font-mapper/src/FontMapper.ts b/packages/ckeditor5-font-mapper/src/FontMapper.ts index 97db2939c..52e3304a4 100644 --- a/packages/ckeditor5-font-mapper/src/FontMapper.ts +++ b/packages/ckeditor5-font-mapper/src/FontMapper.ts @@ -1,9 +1,13 @@ -import { Plugin } from "@ckeditor/ckeditor5-core"; -import { ClipboardEventData, ClipboardPipeline } from "@ckeditor/ckeditor5-clipboard"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { DataTransfer as ViewDataTransfer, ViewDocumentFragment } from "@ckeditor/ckeditor5-engine"; -import { EventInfo } from "@ckeditor/ckeditor5-utils"; +import { + Plugin, + ClipboardEventData, + ClipboardPipeline, + DataTransfer as ViewDataTransfer, + ViewDocumentFragment, + EventInfo, +} from "ckeditor5"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { fontMappingRegistry } from "./FontMappingRegistry"; import { replaceFontInDocumentFragment } from "./FontReplacer"; @@ -45,20 +49,14 @@ import { COREMEDIA_FONT_MAPPER_CONFIG_KEY, FontMapperConfig, FontMapperConfigEnt */ export default class FontMapper extends Plugin { public static readonly pluginName = "FontMapper" as const; - static readonly #logger: Logger = LoggerProvider.getLogger(FontMapper.pluginName); - - static readonly #supportedDataFormat: string = "text/html"; - static readonly #clipboardEventName: string = "inputTransformation"; - + static readonly #supportedDataFormat = "text/html"; + static readonly #clipboardEventName = "inputTransformation"; static readonly requires = [ClipboardPipeline]; - init(): void { const initInformation = reportInitStart(this); - const { editor } = this; const { config } = editor; - const customFontMapperConfig = config.get(COREMEDIA_FONT_MAPPER_CONFIG_KEY); FontMapper.#applyPluginConfig(customFontMapperConfig); @@ -76,7 +74,6 @@ export default class FontMapper extends Plugin { priority: "normal", }, ); - reportInitEnd(initInformation); } @@ -87,12 +84,10 @@ export default class FontMapper extends Plugin { */ static #applyPluginConfig(config: FontMapperConfig | undefined): void { const logger = FontMapper.#logger; - if (!config) { logger.debug("Configuration: No additional configuration found"); return; } - config.forEach((configEntry: FontMapperConfigEntry) => { logger.debug(`Configuration: Register Mapping for ${configEntry.font}`); fontMappingRegistry.registerFontMapping(configEntry); @@ -108,7 +103,6 @@ export default class FontMapper extends Plugin { FontMapper.#logger.debug(`No data for supported data Format ${FontMapper.#supportedDataFormat} found.`); return; } - FontMapper.#logger.debug("Starting to replace fonts."); replaceFontInDocumentFragment(eventContent); data.content = eventContent; diff --git a/packages/ckeditor5-font-mapper/src/FontReplacer.ts b/packages/ckeditor5-font-mapper/src/FontReplacer.ts index e47cd7b81..0eba0f10c 100644 --- a/packages/ckeditor5-font-mapper/src/FontReplacer.ts +++ b/packages/ckeditor5-font-mapper/src/FontReplacer.ts @@ -1,10 +1,9 @@ -import { ViewNode, ViewElement, ViewText, UpcastWriter, ViewDocumentFragment } from "@ckeditor/ckeditor5-engine"; +import { ViewNode, ViewElement, ViewText, UpcastWriter, ViewDocumentFragment } from "ckeditor5"; import { FontMapping } from "./FontMapping"; import { fontMappingRegistry } from "./FontMappingRegistry"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; - const FONT_FAMILY_PROPERTY_NAME = "font-family"; const logger: Logger = LoggerProvider.getLogger("FontMapper"); /** @@ -49,7 +48,6 @@ export const replaceFontInDocumentFragment = ( replaceFontInDocumentFragment(alteredChildElement, fontMapping); continue; } - replaceFontInDocumentFragment(child, fontMapping); } }; @@ -155,7 +153,6 @@ const getFontMappingForFontFamily = (fontFamily: string): FontMapping | undefine * "Symbol" is converted to ["Symbol"] */ const fontFamilyArray = fontFamily.split(",").map(escapeFontFamily); - return fontMappingRegistry.getFontMapping(fontFamilyArray[0]); }; @@ -226,10 +223,8 @@ const findTextNodeChildren = (element: ViewElement): ViewText[] => interface HasTextData { _textData: string; } - const isHasTextData = (value: unknown): value is HasTextData => typeof value === "object" && !!value && "_textData" in value && typeof value._textData === "string"; - const asHasTextData = (value: unknown): HasTextData => { if (isHasTextData(value)) { return value; diff --git a/packages/ckeditor5-font-mapper/src/augmentation.ts b/packages/ckeditor5-font-mapper/src/augmentation.ts index 089524f4e..80edba501 100644 --- a/packages/ckeditor5-font-mapper/src/augmentation.ts +++ b/packages/ckeditor5-font-mapper/src/augmentation.ts @@ -1,10 +1,8 @@ import { type FontMapper, type FontMapperConfig, COREMEDIA_FONT_MAPPER_CONFIG_KEY } from "./index"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface EditorConfig { [COREMEDIA_FONT_MAPPER_CONFIG_KEY]?: FontMapperConfig; } - interface PluginsMap { [FontMapper.pluginName]: FontMapper; } diff --git a/packages/ckeditor5-link-common/src/FocusUtils.ts b/packages/ckeditor5-link-common/src/FocusUtils.ts index 0600b1fb5..7ed900745 100644 --- a/packages/ckeditor5-link-common/src/FocusUtils.ts +++ b/packages/ckeditor5-link-common/src/FocusUtils.ts @@ -1,4 +1,4 @@ -import { View } from "@ckeditor/ckeditor5-ui"; +import { View } from "ckeditor5"; // LinkActionsView: See ckeditor/ckeditor5#12027. import LinkActionsView from "@ckeditor/ckeditor5-link/src/ui/linkactionsview"; // LinkFormView: See ckeditor/ckeditor5#12027. @@ -32,15 +32,12 @@ export const handleFocusManagement = ( if (existingView === anchorView && positionRelativeToAnchorView === "before") { addViewsToFocusables(parentView, childViews); } - addViewsToFocusables(parentView, [existingView]); - if (existingView === anchorView && positionRelativeToAnchorView === "after") { addViewsToFocusables(parentView, childViews); } }); }; - const addViewsToFocusables = (parentView: LinkActionsView | LinkFormView, childViews: View[]): void => { const internalParentView: unknown = parentView; if (!hasRequiredInternalFocusablesProperty(internalParentView)) { @@ -52,7 +49,6 @@ const addViewsToFocusables = (parentView: LinkActionsView | LinkFormView, childV } }); }; - const addViewsToFocusTracker = (parentView: LinkActionsView | LinkFormView, childViews: View[]): void => { childViews.forEach((view: View) => { if (view.element) { @@ -60,14 +56,11 @@ const addViewsToFocusTracker = (parentView: LinkActionsView | LinkFormView, chil } }); }; - const removeExistingFocusables = (view: LinkActionsView | LinkFormView): View[] => { const internalView: unknown = view; - if (!hasRequiredInternalFocusablesProperty(internalView)) { return []; } - const removedViews: View[] = []; const viewArray = Array.from(internalView._focusables); viewArray.forEach((childView) => { diff --git a/packages/ckeditor5-link-common/src/HasFocusables.ts b/packages/ckeditor5-link-common/src/HasFocusables.ts index f92bb324c..1dc7b25e7 100644 --- a/packages/ckeditor5-link-common/src/HasFocusables.ts +++ b/packages/ckeditor5-link-common/src/HasFocusables.ts @@ -1,4 +1,4 @@ -import { ViewCollection } from "@ckeditor/ckeditor5-ui"; +import { ViewCollection } from "ckeditor5"; import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; /** @@ -8,7 +8,6 @@ import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/s interface HasFocusables { readonly _focusables: ViewCollection; } - const isHasFocusables = (value: unknown): value is HasFocusables => typeof value === "object" && !!value && "_focusables" in value && value._focusables instanceof ViewCollection; diff --git a/packages/ckeditor5-link-common/src/LinkAttributes.ts b/packages/ckeditor5-link-common/src/LinkAttributes.ts index c4397b19f..c97be89fe 100644 --- a/packages/ckeditor5-link-common/src/LinkAttributes.ts +++ b/packages/ckeditor5-link-common/src/LinkAttributes.ts @@ -1,15 +1,19 @@ /* eslint no-null/no-null: off */ -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; import LinkCleanup, { getLinkCleanup } from "./LinkCleanup"; -import { DowncastConversionApi } from "@ckeditor/ckeditor5-engine/src/conversion/downcastdispatcher"; -import { AttributeElement, ViewElement } from "@ckeditor/ckeditor5-engine"; import { RegisterAttributeConfig } from "./RegisterAttributeConfig"; import { parseAttributesConfig } from "./LinkAttributesConfig"; -import { TwoStepCaretMovement } from "@ckeditor/ckeditor5-typing"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { LinkEditing } from "@ckeditor/ckeditor5-link"; +import { + Plugin, + Editor, + DowncastConversionApi, + AttributeElement, + ViewElement, + TwoStepCaretMovement, + LinkEditing, +} from "ckeditor5"; /** * Same priority as used for link-downcasting (href and decorators). @@ -92,15 +96,11 @@ export class LinkAttributes extends Plugin { static readonly #TEXT_NAME = "$text"; public static readonly pluginName = "LinkAttributes" as const; static readonly #logger = LoggerProvider.getLogger(LinkAttributes.pluginName); - static readonly requires = [LinkCleanup, TwoStepCaretMovement]; - init(): void { const initInformation = reportInitStart(this); - const { editor } = this; const { config } = editor; - if (!editor.plugins.has(LinkEditing)) { // This plugin will continue to work. // It is just that other means should provide some clean-up actions. @@ -117,7 +117,6 @@ export class LinkAttributes extends Plugin { for (const attribute of attributes) { this.registerAttribute(attribute); } - reportInitEnd(initInformation); } @@ -138,8 +137,9 @@ export class LinkAttributes extends Plugin { const { model: modelName, view: viewName } = config; // Allow link attribute on all inline nodes. - model.schema.extend(LinkAttributes.#TEXT_NAME, { allowAttributes: modelName }); - + model.schema.extend(LinkAttributes.#TEXT_NAME, { + allowAttributes: modelName, + }); editor.conversion.for("downcast").attributeToElement({ model: modelName, view: provideDowncastFunction(viewName), @@ -162,7 +162,6 @@ export class LinkAttributes extends Plugin { }, converterPriority: "low", }); - getLinkCleanup(editor)?.registerDependentAttribute(modelName); this.#registerForTwoStepCaretMovement(modelName); } @@ -203,7 +202,9 @@ const provideDowncastFunction = { [view]: modelAttributeValue, }, - { priority: LINK_ATTRIBUTE_PRIORITY }, + { + priority: LINK_ATTRIBUTE_PRIORITY, + }, ); // Signal Link-Plugin, that this is a link, too. writer.setCustomProperty(LINK_CUSTOM_PROPERTY, true, element); diff --git a/packages/ckeditor5-link-common/src/LinkAttributesConfig.ts b/packages/ckeditor5-link-common/src/LinkAttributesConfig.ts index da1a2af1e..bde697d19 100644 --- a/packages/ckeditor5-link-common/src/LinkAttributesConfig.ts +++ b/packages/ckeditor5-link-common/src/LinkAttributesConfig.ts @@ -1,6 +1,5 @@ import { isRegisterAttributeConfig, RegisterAttributeConfig } from "./RegisterAttributeConfig"; -import { Config } from "@ckeditor/ckeditor5-utils"; -import { EditorConfig } from "@ckeditor/ckeditor5-core/src/editor/editorconfig"; +import { Config, EditorConfig } from "ckeditor5"; /** * Configuration, that is expected as part of the CKEditor 5 @@ -63,5 +62,7 @@ export const parseAttributesConfig = (config: Config): LinkAttribu attributes.push(entry); } }); - return { attributes }; + return { + attributes, + }; }; diff --git a/packages/ckeditor5-link-common/src/LinkCleanup.ts b/packages/ckeditor5-link-common/src/LinkCleanup.ts index 702f8520a..b12b0544b 100644 --- a/packages/ckeditor5-link-common/src/LinkCleanup.ts +++ b/packages/ckeditor5-link-common/src/LinkCleanup.ts @@ -1,12 +1,9 @@ /* eslint no-null/no-null: off */ -import { Plugin, Editor } from "@ckeditor/ckeditor5-core"; -import { DiffItem, DiffItemAttribute } from "@ckeditor/ckeditor5-engine/src/model/differ"; -import { Writer, Range } from "@ckeditor/ckeditor5-engine"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { LINK_HREF_MODEL } from "./Constants"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import { LinkEditing } from "@ckeditor/ckeditor5-link"; +import { Plugin, Editor, DiffItem, DiffItemAttribute, Writer, Range, LinkEditing } from "ckeditor5"; /** * Provides configuration options for attributes, which must not exist without @@ -45,37 +42,28 @@ class LinkCleanup extends Plugin implements LinkCleanupRegistry { static readonly pluginName: string = "LinkCleanup"; static readonly #logger = LoggerProvider.getLogger(LinkCleanup.pluginName); readonly #watchedAttributes: Set = new Set(); - static readonly requires = []; - init(): void { const initInformation = reportInitStart(this); - const { editor } = this; const { model } = editor; const { document } = model; - if (!editor.plugins.has(LinkEditing)) { // We are implicitly bound to the UnlinkCommand defined by the // LinkEditing plugin. const logger = LinkCleanup.#logger; logger.info("LinkEditing unavailable. Registered link attributes may not be handled as possibly expected."); } - document.registerPostFixer(this.#fixOrphanedAttributes); - reportInitEnd(initInformation); } - override destroy(): void { // Implicitly disabled post-fixer, as it cannot be disabled explicitly. this.#watchedAttributes.clear(); } - registerDependentAttribute(modelAttributeName: string): void { this.#watchedAttributes.add(modelAttributeName); } - unregisterDependentAttribute(modelAttributeName: string): boolean { return this.#watchedAttributes.delete(modelAttributeName); } @@ -92,11 +80,9 @@ class LinkCleanup extends Plugin implements LinkCleanupRegistry { const todoAttributes = [...this.#watchedAttributes]; const getLinkHrefRemovalRanges = LinkCleanup.#getLinkHrefRemovalRanges; const fixOrphanedAttribute = LinkCleanup.#fixOrphanedAttribute; - if (todoAttributes.length === 0) { return false; } - const ranges = getLinkHrefRemovalRanges(writer); // Workaround for missing feature ckeditor/ckeditor5#9627 const operationsBefore = writer.batch.operations.length; @@ -123,7 +109,6 @@ class LinkCleanup extends Plugin implements LinkCleanupRegistry { const changes = differ.getChanges(); return changes.filter(isRemoveLinkHrefAttribute).map((c) => (c as DiffItemAttribute).range); }; - static readonly #fixOrphanedAttribute = ( writer: Writer, relevantRanges: Iterable, @@ -162,7 +147,6 @@ const isRemoveLinkHrefAttribute = (diffItem: DiffItem): boolean => { if (diffItem.type !== "attribute") { return false; } - const { attributeKey, attributeNewValue } = diffItem; // We must not simply check for 'falsy' here, as an empty string does not @@ -171,6 +155,5 @@ const isRemoveLinkHrefAttribute = (diffItem: DiffItem): boolean => { const isDeleteAttribute = attributeNewValue === null || attributeNewValue === undefined; return isDeleteAttribute && attributeKey === LINK_HREF_MODEL; }; - export { getLinkCleanup, LinkCleanupRegistry }; export default LinkCleanup; diff --git a/packages/ckeditor5-link-common/src/augmentation.ts b/packages/ckeditor5-link-common/src/augmentation.ts index 04e458d32..db2088eae 100644 --- a/packages/ckeditor5-link-common/src/augmentation.ts +++ b/packages/ckeditor5-link-common/src/augmentation.ts @@ -1,13 +1,11 @@ import { LinkAttributes } from "./LinkAttributes"; import { RegisterAttributeConfig } from "./RegisterAttributeConfig"; - -declare module "@ckeditor/ckeditor5-core" { +declare module "ckeditor5" { interface PluginsMap { [LinkAttributes.pluginName]: LinkAttributes; } } - -declare module "@ckeditor/ckeditor5-link" { +declare module "ckeditor5" { interface LinkConfig { /** * Configuration of attributes, that should be handled as belonging to From dfa98b18a113a3e0e60ca81c347ce9b4bca06f56 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Mon, 5 Aug 2024 11:07:12 +0200 Subject: [PATCH 03/43] manual type fixes + adding "addTranslations" and "openLink" --- itest/src/aut/CommandCollectionWrapper.ts | 4 +- itest/src/aut/EditorUIViewWrapper.ts | 4 +- itest/src/aut/EditorUIWrapper.ts | 4 +- .../balloon/LinkActionsViewWrapper.ts | 4 +- packages/ckeditor5-core-common/src/Plugins.ts | 27 ++++++------ packages/ckeditor5-core-common/src/index.ts | 1 + packages/ckeditor5-core-common/src/utils.ts | 28 +++++++++++++ .../src/lang/blocklist.ts | 4 +- .../src/ui/blockedWordView.ts | 37 +++++++++-------- .../src/ContentClipboard.ts | 41 +++++++++---------- .../src/lang/paste.ts | 4 +- .../src/paste/PasteContentUI.ts | 5 ++- .../src/lang/contentImageOpenInTab.ts | 4 +- .../src/lang/contentimage.ts | 4 +- .../src/contentlink/LinkUserActionsPlugin.ts | 2 +- .../ui/AugmentedLinkActionsView.ts | 4 +- .../contentlink/ui/AugmentedLinkFormView.ts | 6 ++- .../ui/ContentLinkActionsViewExtension.ts | 22 +++++++--- .../ui/ContentLinkFormViewExtension.ts | 23 +++++++++-- .../src/lang/contentlink.ts | 4 +- .../src/lang/linktarget.ts | 4 +- .../LinkTargetActionsViewExtension.ts | 11 +++-- .../src/linktarget/ui/CustomLinkTargetUI.ts | 17 +++++--- .../src/RichTextDataFilter.ts | 4 +- .../v10/V10RichTextDataProcessor.ts | 35 ++++++++++++---- .../src/DataFacadeController.ts | 9 ++-- .../src/ElementProxy.ts | 7 +++- .../ckeditor5-link-common/src/FocusUtils.ts | 14 +++---- .../src/HasFocusables.ts | 9 +++- 29 files changed, 223 insertions(+), 119 deletions(-) create mode 100644 packages/ckeditor5-core-common/src/utils.ts diff --git a/itest/src/aut/CommandCollectionWrapper.ts b/itest/src/aut/CommandCollectionWrapper.ts index 1ce75db4f..71380f8fe 100644 --- a/itest/src/aut/CommandCollectionWrapper.ts +++ b/itest/src/aut/CommandCollectionWrapper.ts @@ -1,5 +1,5 @@ // CommandCollection: See ckeditor/ckeditor5#12027. -import type { CommandCollection } from "ckeditor5"; +import { Editor } from "ckeditor5"; import { JSWrapper } from "./JSWrapper"; import { CommandWrapper } from "./CommandWrapper"; import { EditorWrapper } from "./EditorWrapper"; @@ -7,7 +7,7 @@ import { EditorWrapper } from "./EditorWrapper"; /** * Wrapper for the command collection. */ -export class CommandCollectionWrapper extends JSWrapper { +export class CommandCollectionWrapper extends JSWrapper { /** * Get a wrapper for the given command name. * diff --git a/itest/src/aut/EditorUIViewWrapper.ts b/itest/src/aut/EditorUIViewWrapper.ts index f35511e97..e26a03de8 100644 --- a/itest/src/aut/EditorUIViewWrapper.ts +++ b/itest/src/aut/EditorUIViewWrapper.ts @@ -1,12 +1,12 @@ import { JSWrapper } from "./JSWrapper"; import { EditorUIWrapper } from "./EditorUIWrapper"; // ClassicEditorUIView: See ckeditor/ckeditor5#12027. -import type ClassicEditorUIView from "@ckeditor/ckeditor5-editor-classic/src/classiceditoruiview"; +import { ClassicEditor } from "ckeditor5"; import { BodyCollectionWrapper } from "./BodyCollectionWrapper"; import { Locator } from "playwright"; import { Locatable, visible } from "./Locatable"; -export class EditorUIViewWrapper extends JSWrapper implements Locatable { +export class EditorUIViewWrapper extends JSWrapper implements Locatable { readonly #parent: EditorUIWrapper; constructor(parent: EditorUIWrapper) { diff --git a/itest/src/aut/EditorUIWrapper.ts b/itest/src/aut/EditorUIWrapper.ts index c3583d149..83798b46b 100644 --- a/itest/src/aut/EditorUIWrapper.ts +++ b/itest/src/aut/EditorUIWrapper.ts @@ -2,7 +2,7 @@ import { JSWrapper } from "./JSWrapper"; import { ClassicEditorWrapper } from "./ClassicEditorWrapper"; import { ElementHandle } from "playwright-core"; // ClassicEditorUI: See ckeditor/ckeditor5#12027. -import type ClassicEditorUI from "@ckeditor/ckeditor5-editor-classic/src/classiceditorui"; +import { ClassicEditor } from "ckeditor5"; import { EditorUIViewWrapper } from "./EditorUIViewWrapper"; import { Locatable, visible } from "./Locatable"; import { Locator } from "playwright"; @@ -10,7 +10,7 @@ import { Locator } from "playwright"; /** * Wrapper for `EditorUI`. */ -export class EditorUIWrapper extends JSWrapper implements Locatable { +export class EditorUIWrapper extends JSWrapper implements Locatable { readonly #parent: ClassicEditorWrapper; constructor(parent: ClassicEditorWrapper) { diff --git a/itest/src/aut/components/balloon/LinkActionsViewWrapper.ts b/itest/src/aut/components/balloon/LinkActionsViewWrapper.ts index a07a77e1e..301f58967 100644 --- a/itest/src/aut/components/balloon/LinkActionsViewWrapper.ts +++ b/itest/src/aut/components/balloon/LinkActionsViewWrapper.ts @@ -1,8 +1,8 @@ import ViewWrapper from "../ViewWrapper"; import { JSWrapper } from "../../JSWrapper"; -// LinkActionsView: See ckeditor/ckeditor5#12027. -import type LinkActionsView from "@ckeditor/ckeditor5-link/src/ui/linkactionsview"; + import ContentLinkViewWrapper from "./ContentLinkViewWrapper"; +import { LinkActionsView } from "@coremedia/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkActionsView"; export default class LinkActionsViewWrapper extends JSWrapper { getContentLinkView(): ContentLinkViewWrapper { diff --git a/packages/ckeditor5-core-common/src/Plugins.ts b/packages/ckeditor5-core-common/src/Plugins.ts index db1a90935..d92db03f1 100644 --- a/packages/ckeditor5-core-common/src/Plugins.ts +++ b/packages/ckeditor5-core-common/src/Plugins.ts @@ -1,5 +1,6 @@ import { type Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; -import { Plugin, PluginClassConstructor, PluginConstructor, PluginInterface, Editor, PluginsMap } from "ckeditor5"; +import { Editor, Plugin, PluginConstructor, PluginsMap } from "ckeditor5"; + const pluginsLogger: Logger = LoggerProvider.getLogger("Plugins"); /** @@ -10,16 +11,20 @@ const pluginsLogger: Logger = LoggerProvider.getLogger("Plugins"); * reporting. */ export type OnMissingPlugin = (pluginName: string) => void; -export function getOptionalPlugin< - TConstructor extends PluginClassConstructor, - TContext extends Editor = Editor, ->(editor: TContext, key: TConstructor, onMissing?: OnMissingPlugin): InstanceType | undefined; + +type PluginClassConstructor = typeof Plugin; + +export function getOptionalPlugin( + editor: TContext, + key: TConstructor, + onMissing?: OnMissingPlugin, +): InstanceType | undefined; + export function getOptionalPlugin( editor: TContext, key: TName, onMissing?: OnMissingPlugin, ): PluginsMap[TName] | undefined; - /** * Tries to get the recommended plugin (invokes `has` prior to getting it) and * returns it, if available. @@ -33,15 +38,13 @@ export function getOptionalPlugin>, + getPluralForm?: (n: number) => number, +) => { + if (!global.window.CKEDITOR_TRANSLATIONS[language]) { + global.window.CKEDITOR_TRANSLATIONS[language] = { dictionary: {} }; + } + const languageTranslations = global.window.CKEDITOR_TRANSLATIONS[language]; + languageTranslations.dictionary = languageTranslations.dictionary || {}; + languageTranslations.getPluralForm = getPluralForm ?? languageTranslations.getPluralForm; + Object.assign(languageTranslations.dictionary, translations); +}; + +/** + * Opens the link in a new browser tab. + */ +export function openLink(link: string) { + window.open(link, "_blank", "noopener"); +} diff --git a/packages/ckeditor5-coremedia-blocklist/src/lang/blocklist.ts b/packages/ckeditor5-coremedia-blocklist/src/lang/blocklist.ts index 4e1936e6d..e3b04b92e 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/lang/blocklist.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/lang/blocklist.ts @@ -3,9 +3,9 @@ * * @packageDocumentation */ -import { add } from "@ckeditor/ckeditor5-utils/src/translation-service"; +import { addTranslations } from "@coremedia/ckeditor5-core-common"; -add("de", { +addTranslations("de", { "Edit blocklist": "Blockliste bearbeiten", "Block": "Sperren", "Add word to blocklist": "Begriff zur Blockliste hinzufügen", diff --git a/packages/ckeditor5-coremedia-blocklist/src/ui/blockedWordView.ts b/packages/ckeditor5-coremedia-blocklist/src/ui/blockedWordView.ts index b0d23d8b6..9fc7b6b4e 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/ui/blockedWordView.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/ui/blockedWordView.ts @@ -1,5 +1,4 @@ -import { ButtonView, View, ViewCollection, submitHandler, KeystrokeHandler, Locale } from "ckeditor5"; -import { BindChain } from "@ckeditor/ckeditor5-ui/src/template"; +import { ButtonView, KeystrokeHandler, Locale, submitHandler, View, ViewCollection } from "ckeditor5"; import trashbinIcon from "../../theme/icons/trashbin.svg"; import "../../theme/blockedwordview.css"; import "../lang/blocklist"; @@ -37,12 +36,27 @@ export default class BlockedWordView extends View { * The label of the header. */ public declare label: string; + constructor(locale: Locale) { super(locale); const bind = this.bindTemplate; this.children = this.createCollection(); this.#removeButtonView = this.#createRemoveButton(locale); - this.#blockedWordLabel = this.#createBlockedWordLabel(locale, bind); + this.#blockedWordLabel = (() => { + const label = new View(locale); + label.setTemplate({ + tag: "h2", + attributes: { + class: ["ck", "ck-form__header__label"], + }, + children: [ + { + text: bind.to("label"), + }, + ], + }); + return label; + })(); this.children.add(this.#blockedWordLabel); this.children.add(this.#removeButtonView); this.setTemplate({ @@ -53,6 +67,7 @@ export default class BlockedWordView extends View { children: this.children, }); } + public override render(): void { super.render(); submitHandler({ @@ -104,22 +119,8 @@ export default class BlockedWordView extends View { }); return button; } - #createBlockedWordLabel(locale: Locale, bind: BindChain): View { - const label = new View(locale); - label.setTemplate({ - tag: "h2", - attributes: { - class: ["ck", "ck-form__header__label"], - }, - children: [ - { - text: bind.to("label"), - }, - ], - }); - return label; - } } + export interface UnblockEvent { name: "unblock"; args: [string]; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts index b3ff37ae5..0cbf9dd77 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts @@ -3,28 +3,25 @@ import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { - Plugin, - Editor, Clipboard, ClipboardContentInsertionEvent, + ClipboardEventData, ClipboardInputTransformationData, ClipboardInputTransformationEvent, ClipboardPipeline, - ViewDocumentClipboardInputEvent, - Range as ModelRange, - ViewRange, DocumentFragment as ModelDocumentFragment, - ViewDocumentFragment, - ViewDocument, - StylesProcessor, DomEventData, + Editor, EventInfo, + GetCallback, + Plugin, + Range as ModelRange, + StylesProcessor, + ViewDocument, + ViewDocumentClipboardInputEvent, + ViewDocumentFragment, + ViewRange, } from "ckeditor5"; -import { - ClipboardEventData, - ClipboardInputEventData, - ViewDocumentDragOverEvent, -} from "@ckeditor/ckeditor5-clipboard/src/clipboardobserver"; import ContentClipboardEditing from "./ContentClipboardEditing"; import { InitInformation, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { disableUndo, UndoSupport } from "./integrations/Undo"; @@ -36,6 +33,7 @@ import { IsDroppableEvaluationResult, } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext"; import { receiveDraggedItemsFromDataTransfer } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/DragDropServiceWrapper"; + const PLUGIN_NAME = "ContentClipboardPlugin"; /** @@ -61,6 +59,7 @@ export default class ContentClipboard extends Plugin { static readonly pluginName = PLUGIN_NAME; static readonly #logger: Logger = LoggerProvider.getLogger(PLUGIN_NAME); static readonly requires = [Clipboard, ClipboardPipeline, ContentClipboardEditing, UndoSupport]; + init(): void { const initInformation: InitInformation = reportInitStart(this); this.#initEventListeners(); @@ -77,9 +76,9 @@ export default class ContentClipboard extends Plugin { const viewDocument = view.document; // Processing pasted or dropped content. - this.listenTo(viewDocument, "clipboardInput", this.#clipboardInputHandler); + this.listenTo(viewDocument, "clipboardInput", this.#clipboardInputHandler); // Priority `low` required, so that we can control the `dropEffect`. - this.listenTo(viewDocument, "dragover", ContentClipboard.#dragOverHandler, { + this.listenTo(viewDocument, "dragover", ContentClipboard.#dragOverHandler, { priority: "low", }); if (editor.plugins.has(ClipboardPipeline)) { @@ -91,6 +90,7 @@ export default class ContentClipboard extends Plugin { ); } } + override destroy(): void { const editor = this.editor; const view = editor.editing.view; @@ -107,10 +107,10 @@ export default class ContentClipboard extends Plugin { * Drag-over handler to control drop-effect icons, which is, to forbid for * any content-sets containing types, which are not allowed to be linked. * - * @param evt - event information + * @param _evt - event information * @param data - clipboard data */ - static #dragOverHandler(evt: EventInfo<"dragover">, data: DomEventData & ClipboardEventData): void { + static readonly #dragOverHandler = (_evt: unknown, data: DomEventData & ClipboardEventData) => { // The listener already processed the clipboard content on the // higher priority (for example, while pasting into the code block). if (isContentEventData(data) && !!data.content) { @@ -131,7 +131,7 @@ export default class ContentClipboard extends Plugin { } else { data.dataTransfer.dropEffect = "none"; } - } + }; // noinspection JSUnusedLocalSymbols /** @@ -145,10 +145,7 @@ export default class ContentClipboard extends Plugin { * @param evt - event information * @param data - clipboard data */ - readonly #clipboardInputHandler = ( - evt: EventInfo<"clipboardInput">, - data: DomEventData & ClipboardInputEventData, - ): void => { + readonly #clipboardInputHandler: GetCallback = (evt, data): void => { const dataTransfer: DataTransfer = data.dataTransfer as unknown as DataTransfer; if (!dataTransfer) { return; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/lang/paste.ts b/packages/ckeditor5-coremedia-content-clipboard/src/lang/paste.ts index 66310c784..30512dc26 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/lang/paste.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/lang/paste.ts @@ -3,8 +3,8 @@ * * @packageDocumentation */ -import { add } from "@ckeditor/ckeditor5-utils/src/translation-service"; +import { addTranslations } from "@coremedia/ckeditor5-core-common"; -add("de", { +addTranslations("de", { "Paste Content": "Inhalte einfügen", }); diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts index 60d6f2f4e..3d836d710 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts @@ -1,9 +1,11 @@ -import { Plugin, Editor, ButtonView } from "ckeditor5"; +import { ButtonView, Editor, Plugin } from "ckeditor5"; import pasteIcon from "../../theme/icons/paste.svg"; import "../lang/paste"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; + export default class PasteContentUI extends Plugin { static readonly pluginName = "pasteContentUI"; + init() { const initInformation = reportInitStart(this); const editor: Editor = this.editor; @@ -20,6 +22,7 @@ export default class PasteContentUI extends Plugin { pasteContentCommand.execute(); } }); + editor.ui.componentFactory.add("pasteContent", () => { const button = new ButtonView(); button.label = t("Paste Content"); diff --git a/packages/ckeditor5-coremedia-images/src/lang/contentImageOpenInTab.ts b/packages/ckeditor5-coremedia-images/src/lang/contentImageOpenInTab.ts index 3b75c995f..3de4889ea 100644 --- a/packages/ckeditor5-coremedia-images/src/lang/contentImageOpenInTab.ts +++ b/packages/ckeditor5-coremedia-images/src/lang/contentImageOpenInTab.ts @@ -3,8 +3,8 @@ * * @packageDocumentation */ -import { add } from "@ckeditor/ckeditor5-utils/src/translation-service"; +import { addTranslations } from "@coremedia/ckeditor5-core-common"; -add("de", { +addTranslations("de", { "Open in tab": "Im Tab öffnen", }); diff --git a/packages/ckeditor5-coremedia-images/src/lang/contentimage.ts b/packages/ckeditor5-coremedia-images/src/lang/contentimage.ts index c941446c4..6e1cbf5d8 100644 --- a/packages/ckeditor5-coremedia-images/src/lang/contentimage.ts +++ b/packages/ckeditor5-coremedia-images/src/lang/contentimage.ts @@ -3,8 +3,8 @@ * * @packageDocumentation */ -import { add } from "@ckeditor/ckeditor5-utils/src/translation-service"; +import { addTranslations } from "@coremedia/ckeditor5-core-common"; -add("de", { +addTranslations("de", { "loading...": "Inhalt wird geladen...", }); diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts b/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts index 79561c5ee..0a02041af 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts @@ -1,6 +1,6 @@ import { serviceAgent } from "@coremedia/service-agent"; import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/WorkAreaServiceDescriptor"; -import { openLink } from "@ckeditor/ckeditor5-link/src/utils"; +import { openLink } from "@coremedia/ckeditor5-core-common"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import { diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkActionsView.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkActionsView.ts index ec91893dc..65f3c4093 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkActionsView.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkActionsView.ts @@ -1,6 +1,6 @@ /* eslint no-null/no-null: off */ -import LinkActionsView from "@ckeditor/ckeditor5-link/src/ui/linkactionsview"; +import { LinkUI } from "ckeditor5"; /* * DevNote: @@ -24,6 +24,8 @@ export interface LinkActionsViewAugmentation { contentUriPath: string | null | undefined; } +export type LinkActionsView = NonNullable; + /** * Combined type for augmented `LinkActionsView`. */ diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkFormView.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkFormView.ts index b1490b30e..6f4986e31 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkFormView.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkFormView.ts @@ -1,7 +1,5 @@ /* eslint no-null/no-null: off */ -import LinkFormView from "@ckeditor/ckeditor5-link/src/ui/linkformview"; - /* * DevNote: * @@ -13,6 +11,8 @@ import LinkFormView from "@ckeditor/ckeditor5-link/src/ui/linkformview"; * casting. */ +import { LinkUI } from "ckeditor5"; + /** * Augmented properties for `LinkFormView`. */ @@ -29,6 +29,8 @@ export interface LinkFormViewAugmentation { contentUriPath: string | null | undefined; } +export type LinkFormView = NonNullable; + /** * Combined type for augmented `LinkFormView`. */ diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts index bba65779e..d912cc23f 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts @@ -1,21 +1,20 @@ /* eslint no-null/no-null: off */ -// LinkActionsView: See ckeditor/ckeditor5#12027. -import LinkActionsView from "@ckeditor/ckeditor5-link/src/ui/linkactionsview"; import ContentLinkView from "./ContentLinkView"; -import { requireContentUriPath, isModelUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; import type { UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { isModelUriPath, requireContentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; import { handleFocusManagement } from "@coremedia/ckeditor5-link-common/src/FocusUtils"; -import { Command, Plugin, LinkUI, ContextualBalloon } from "ckeditor5"; +import { Command, ContextualBalloon, LinkUI, Plugin } from "ckeditor5"; import { LINK_COMMAND_NAME } from "@coremedia/ckeditor5-link-common/src/Constants"; import { ifCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { hasContentUriPath } from "./ViewExtensions"; import { showContentLinkField } from "../ContentLinkViewUtils"; import { asAugmentedLinkUI, AugmentedLinkUI, requireNonNullsAugmentedLinkUI } from "./AugmentedLinkUI"; -import { AugmentedLinkActionsView } from "./AugmentedLinkActionsView"; +import { AugmentedLinkActionsView, LinkActionsView } from "./AugmentedLinkActionsView"; import { executeOpenContentInTabCommand } from "../OpenContentInTabCommand"; +import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link-common/src/HasFocusables"; /** * Extends the action view for Content link display. This includes: @@ -30,11 +29,13 @@ class ContentLinkActionsViewExtension extends Plugin { static readonly requires = [LinkUI, ContextualBalloon]; contentUriPath: string | undefined | null; #initialized = false; + init(): void { const initInformation = reportInitStart(this); const editor = this.editor; const linkUI = asAugmentedLinkUI(editor.plugins.get(LinkUI)); const contextualBalloon: ContextualBalloon = editor.plugins.get(ContextualBalloon); + contextualBalloon.on("change:visibleView", (evt, name, visibleView) => { const { actionsView } = linkUI; if (actionsView && actionsView === visibleView && !this.#initialized) { @@ -42,16 +43,20 @@ class ContentLinkActionsViewExtension extends Plugin { this.#initialized = true; } }); + contextualBalloon.on("change:visibleView", (evt, name, visibleView) => { const { actionsView } = linkUI; if (actionsView && actionsView === visibleView) { ContentLinkActionsViewExtension.#addCoreMediaClassesToActionsView(actionsView); } }); + reportInitEnd(initInformation); } + #initialize(linkUI: AugmentedLinkUI, actionsView: AugmentedLinkActionsView): void { const { editor } = linkUI; + actionsView.set({ contentUriPath: undefined, }); @@ -84,6 +89,7 @@ class ContentLinkActionsViewExtension extends Plugin { }); this.#extendView(linkUI, actionsView); } + #extendView(linkUI: AugmentedLinkUI, actionsView: AugmentedLinkActionsView): void { const logger = ContentLinkActionsViewExtension.#logger; const { formView } = requireNonNullsAugmentedLinkUI(linkUI, "formView"); @@ -128,6 +134,7 @@ class ContentLinkActionsViewExtension extends Plugin { }); }); } + static #render(actionsView: LinkActionsView, simpleContentLinkView: ContentLinkView): void { if (!actionsView.element || !actionsView.editButtonView.element) { ContentLinkActionsViewExtension.#logger.error( @@ -149,7 +156,9 @@ class ContentLinkActionsViewExtension extends Plugin { } actionsView.element.insertBefore(simpleContentLinkView.element, actionsView.editButtonView.element); ContentLinkActionsViewExtension.#addCoreMediaClassesToActionsView(actionsView); - handleFocusManagement(actionsView, [simpleContentLinkView], actionsView.previewButtonView); + const buttonView = actionsView.previewButtonView; + hasRequiredInternalFocusablesProperty(actionsView) && + handleFocusManagement(actionsView, [simpleContentLinkView], buttonView); } /** @@ -172,4 +181,5 @@ class ContentLinkActionsViewExtension extends Plugin { actionsView.previewButtonView.element?.classList.add(CM_PREVIEW_BUTTON_VIEW_CLS); } } + export default ContentLinkActionsViewExtension; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts index 46a2f340a..079b85a4b 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts @@ -7,7 +7,7 @@ import { CONTENT_CKE_MODEL_URI_REGEXP, requireContentCkeModelUri, } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { Plugin, Command, LinkUI, LabeledFieldView, View, ContextualBalloon } from "ckeditor5"; +import { Command, ContextualBalloon, LabeledFieldView, LinkUI, Plugin, View } from "ckeditor5"; import { showContentLinkField } from "../ContentLinkViewUtils"; import ContentLinkCommandHook from "../ContentLinkCommandHook"; import { hasContentUriPath, hasContentUriPathAndName } from "./ViewExtensions"; @@ -24,9 +24,9 @@ import { import { handleFocusManagement } from "@coremedia/ckeditor5-link-common/src/FocusUtils"; import ContentLinkView from "./ContentLinkView"; import { addClassToTemplate } from "../../utils"; -import { AugmentedLinkFormView } from "./AugmentedLinkFormView"; -import LinkFormView from "@ckeditor/ckeditor5-link/src/ui/linkformview"; +import { AugmentedLinkFormView, LinkFormView } from "./AugmentedLinkFormView"; import { requireNonNullsAugmentedLinkUI } from "./AugmentedLinkUI"; +import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link-common/src/HasFocusables"; /** * Extends the form view for Content link display. This includes: @@ -43,6 +43,7 @@ class ContentLinkFormViewExtension extends Plugin { static readonly requires = [LinkUI, ContentLinkCommandHook]; #initialized = false; #contentLinkView: LabeledFieldView | undefined = undefined; + init(): Promise | void { const initInformation = reportInitStart(this); const editor = this.editor; @@ -63,6 +64,7 @@ class ContentLinkFormViewExtension extends Plugin { }); reportInitEnd(initInformation); } + initializeFormView(linkUI: LinkUI): void { const { formView } = requireNonNullsAugmentedLinkUI(linkUI, "formView"); const linkCommand = linkUI.editor.commands.get("link") as Command; @@ -77,6 +79,7 @@ class ContentLinkFormViewExtension extends Plugin { ); this.#extendView(linkUI, formView); } + onFormViewGetsActive(linkUI: LinkUI): void { const { editor } = linkUI; const { formView } = requireNonNullsAugmentedLinkUI(linkUI, "formView"); @@ -181,6 +184,7 @@ class ContentLinkFormViewExtension extends Plugin { .bind("isEnabled") .to(linkCommand, "isEnabled", formView, "contentName", formView, "contentUriPath", enabledHandler); } + #extendView(linkUI: LinkUI, formView: AugmentedLinkFormView): void { const contentLinkView = createContentLinkView(linkUI, this.editor); this.#contentLinkView = contentLinkView; @@ -201,6 +205,7 @@ class ContentLinkFormViewExtension extends Plugin { }); }); } + static #render(contentLinkView: LabeledFieldView, linkUI: LinkUI, formView: LinkFormView): void { const logger = ContentLinkFormViewExtension.#logger; logger.debug("Rendering ContentLinkView and registering listeners."); @@ -224,9 +229,12 @@ class ContentLinkFormViewExtension extends Plugin { } formViewElement.insertBefore(contentLinkViewElement, urlInputViewElement.nextSibling); const contentLinkButtons = ContentLinkFormViewExtension.#getContentLinkButtons(contentLinkView); - handleFocusManagement(formView, contentLinkButtons, formView.urlInputView); + const { urlInputView } = formView; + hasRequiredInternalFocusablesProperty(formView) && + handleFocusManagement(formView, contentLinkButtons, urlInputView); ContentLinkFormViewExtension.#addDragAndDropListeners(contentLinkView, linkUI, formView); } + #adaptFormViewFields(formView: LinkFormView): void { const t = this.editor.locale.t; formView.urlInputView.set({ @@ -258,6 +266,7 @@ class ContentLinkFormViewExtension extends Plugin { } return buttons; } + static #addDragAndDropListeners(contentLinkView: LabeledFieldView, linkUI: LinkUI, formView: LinkFormView): void { const logger = ContentLinkFormViewExtension.#logger; logger.debug("Adding drag and drop listeners to formView and contentLinkView"); @@ -280,6 +289,7 @@ class ContentLinkFormViewExtension extends Plugin { ); logger.debug("Finished adding drag and drop listeners."); } + static #onDropOnLinkField(dragEvent: DragEvent, linkUI: LinkUI): void { const logger = ContentLinkFormViewExtension.#logger; if (!dragEvent.dataTransfer) { @@ -321,6 +331,7 @@ class ContentLinkFormViewExtension extends Plugin { logger.warn(reason); }); } + static async #toContentUri(uri: string): Promise { const contentReferenceService = await serviceAgent.fetchService(createContentReferenceServiceDescriptor()); const contentReference = await contentReferenceService.getContentReference(uri); @@ -340,6 +351,7 @@ class ContentLinkFormViewExtension extends Plugin { const contentImportService = await serviceAgent.fetchService(createContentImportServiceDescriptor()); return contentImportService.import(contentReference.request); } + static #toggleUrlInputLoadingState(linkUI: LinkUI, loading: boolean) { const { formView } = requireNonNullsAugmentedLinkUI(linkUI, "formView"); if (loading) { @@ -348,6 +360,7 @@ class ContentLinkFormViewExtension extends Plugin { formView.element?.classList.remove("cm-ck-form-view--loading"); } } + static #setDataAndSwitchToExternalLink(linkUI: LinkUI, data: string): void { const { formView, actionsView } = requireNonNullsAugmentedLinkUI(linkUI, "formView", "actionsView"); formView.urlInputView.fieldView.set("value", data); @@ -356,6 +369,7 @@ class ContentLinkFormViewExtension extends Plugin { showContentLinkField(formView, false); showContentLinkField(actionsView, false); } + static #setDataAndSwitchToContentLink(linkUI: LinkUI, data: string): void { const { formView, actionsView } = requireNonNullsAugmentedLinkUI(linkUI, "formView", "actionsView"); @@ -407,4 +421,5 @@ class ContentLinkFormViewExtension extends Plugin { dragEvent.dataTransfer.dropEffect = isLinkableEvaluationResult.isLinkable ? "link" : "none"; } } + export default ContentLinkFormViewExtension; diff --git a/packages/ckeditor5-coremedia-link/src/lang/contentlink.ts b/packages/ckeditor5-coremedia-link/src/lang/contentlink.ts index 6b536aba2..4bf962f77 100644 --- a/packages/ckeditor5-coremedia-link/src/lang/contentlink.ts +++ b/packages/ckeditor5-coremedia-link/src/lang/contentlink.ts @@ -3,9 +3,9 @@ * * @packageDocumentation */ -import { add } from "@ckeditor/ckeditor5-utils/src/translation-service"; +import { addTranslations } from "@coremedia/ckeditor5-core-common"; -add("de", { +addTranslations("de", { "Link": "Verknüpfung", "Enter url or drag and drop content onto this area.": "URL angeben oder Inhalt hierher ziehen", }); diff --git a/packages/ckeditor5-coremedia-link/src/lang/linktarget.ts b/packages/ckeditor5-coremedia-link/src/lang/linktarget.ts index e4d491ad6..8dfb386a3 100644 --- a/packages/ckeditor5-coremedia-link/src/lang/linktarget.ts +++ b/packages/ckeditor5-coremedia-link/src/lang/linktarget.ts @@ -3,9 +3,9 @@ * * @packageDocumentation */ -import { add } from "@ckeditor/ckeditor5-utils/src/translation-service"; +import { addTranslations } from "@coremedia/ckeditor5-core-common"; -add("de", { +addTranslations("de", { "Target": "Ziel", "Open in Current Tab": "Im aktuellen Tab öffnen", "Open in New Tab": "In neuem Tab öffnen", diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts index c4c7676ae..1180a7f7d 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts @@ -1,5 +1,3 @@ -// LinkActionsView: See ckeditor/ckeditor5#12027. -import LinkActionsView from "@ckeditor/ckeditor5-link/src/ui/linkactionsview"; import { parseLinkTargetConfig } from "./config/LinkTargetConfig"; import LinkTargetOptionDefinition from "./config/LinkTargetOptionDefinition"; import CustomLinkTargetUI from "./ui/CustomLinkTargetUI"; @@ -10,6 +8,8 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common import { handleFocusManagement } from "@coremedia/ckeditor5-link-common/src/FocusUtils"; import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; import { requireNonNulls } from "@coremedia/ckeditor5-common/src/RequiredNonNull"; +import { LinkActionsView } from "../contentlink/ui/AugmentedLinkActionsView"; +import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link-common/src/HasFocusables"; /** * Extends the action view of the linkUI plugin for link target display. This includes: @@ -28,6 +28,7 @@ class LinkTargetActionsViewExtension extends Plugin { static readonly requires = [LinkUI, CustomLinkTargetUI]; static readonly #logger = LoggerProvider.getLogger(LinkTargetActionsViewExtension.pluginName); #initialized = false; + init(): void { const initInformation = reportInitStart(this); const editor = this.editor; @@ -94,8 +95,11 @@ class LinkTargetActionsViewExtension extends Plugin { } LinkTargetActionsViewExtension.#render(actionsView, buttons); } + static #render(actionsView: LinkActionsView, addedButtons: View[]): void { - handleFocusManagement(actionsView, addedButtons, actionsView.unlinkButtonView, "before"); + const { unlinkButtonView } = actionsView; + hasRequiredInternalFocusablesProperty(actionsView) && + handleFocusManagement(actionsView, addedButtons, unlinkButtonView, "before"); } /** @@ -166,4 +170,5 @@ class LinkTargetActionsViewExtension extends Plugin { }); } } + export default LinkTargetActionsViewExtension; diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts b/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts index 55faf4a96..4431b83b9 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts @@ -29,7 +29,7 @@ export default class CustomLinkTargetUI extends Plugin { /** * Form View to enter custom target. Initialized during `init`. */ - #form: CustomLinkTargetInputFormView; + #form: CustomLinkTargetInputFormView | undefined = undefined; /** * Names, which are bound to other target-selection buttons, and thus, are * perceived as _reserved names_. Such names must not show up in the edit @@ -42,6 +42,7 @@ export default class CustomLinkTargetUI extends Plugin { */ linkUI!: LinkUI; static readonly requires = [ContextualBalloon, LinkUI]; + async init(): Promise { const editor = this.editor; const { otherNames, myConfig } = this.#parseConfig(editor.config); @@ -149,7 +150,7 @@ export default class CustomLinkTargetUI extends Plugin { // Render the form so its #element is available for clickOutsideHandler. this.#form.render(); this.listenTo(this.#form, "submit", () => { - const { value } = this.#form.labeledInput.fieldView.element as HTMLInputElement; + const { value } = this.#form?.labeledInput.fieldView.element ?? {}; editor.execute("linkTarget", value); this.#hideForm(true); }); @@ -158,7 +159,7 @@ export default class CustomLinkTargetUI extends Plugin { }); // Close the form on Esc key press. - this.#form.keystrokes.set("Esc", (data: unknown, cancel: () => void) => { + this.#form.keystrokes.set("Esc", (_data: unknown, cancel: () => void) => { this.#hideForm(true); cancel(); }); @@ -183,6 +184,9 @@ export default class CustomLinkTargetUI extends Plugin { if (this.#isVisible) { return; } + if (!this.#form) { + return; + } const editor = this.editor; const linkTargetCommand = editor.commands.get("linkTarget"); const labeledInput = this.#form.labeledInput; @@ -220,10 +224,10 @@ export default class CustomLinkTargetUI extends Plugin { // Blur the input element before removing it from DOM to prevent issues in some browsers. // See https://github.com/ckeditor/ckeditor5/issues/1501. - if (this.#form.focusTracker.isFocused) { + if (this.#form?.focusTracker.isFocused) { this.#form.saveButtonView.focus(); } - this.#balloon?.remove(this.#form); + this.#form && this.#balloon?.remove(this.#form); if (focusEditable) { this.editor.editing.view.focus(); } @@ -242,7 +246,7 @@ export default class CustomLinkTargetUI extends Plugin { * @returns true if the {@link CustomLinkTargetUI.#form} is in the {@link CustomLinkTargetUI.#balloon} */ get #isInBalloon(): boolean { - return this.#balloon?.hasView(this.#form) ?? false; + return !!this.#form && (this.#balloon?.hasView(this.#form) ?? false); } // we are relying on internal API here, this is kind of error-prone, but also the best shot we have @@ -259,6 +263,7 @@ export default class CustomLinkTargetUI extends Plugin { interface HasGetBalloonPositionData { _getBalloonPositionData(): Partial; } + const isHasGetBalloonPositionData = (value: unknown): value is HasGetBalloonPositionData => typeof value === "object" && !!value && diff --git a/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts b/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts index 1e8ce95a6..849ba5dc4 100644 --- a/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts +++ b/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts @@ -26,8 +26,9 @@ class RichTextDataFilter extends Plugin { public static readonly pluginName = "GeneralRichTextDataFilter" as const; static readonly #logger: Logger = LoggerProvider.getLogger(RichTextDataFilter.pluginName); static readonly requires = [DataFilter]; - #delegate: DataFilter; + #delegate: DataFilter | undefined = undefined; readonly #config: ReducedMatcherPattern[] = []; + init(): Promise | void { const logger = RichTextDataFilter.#logger; const initInformation = reportInitStart(this); @@ -120,4 +121,5 @@ class RichTextDataFilter extends Plugin { this.#loadAllowedConfig(patterns); } } + export default RichTextDataFilter; diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts index 7e7931ef0..532ea928e 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts @@ -5,21 +5,38 @@ import HtmlFilter from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilte import RichTextSchema from "./RichTextSchema"; import { COREMEDIA_RICHTEXT_PLUGIN_NAME } from "../../Constants"; import { getConfig } from "./V10CoreMediaRichTextConfig"; -import HtmlWriter from "@ckeditor/ckeditor5-engine/src/dataprocessor/htmlwriter"; -import BasicHtmlWriter from "@ckeditor/ckeditor5-engine/src/dataprocessor/basichtmlwriter"; -import ToDataProcessor from "../../ToDataProcessor"; import { - ViewDocument, - ViewDocumentFragment, - HtmlDataProcessor, DataProcessor, DomConverter, - MatcherPattern, Editor, + global, + HtmlDataProcessor, + MatcherPattern, ObservableMixin, + ViewDocument, + ViewDocumentFragment, } from "ckeditor5"; +import ToDataProcessor from "../../ToDataProcessor"; import { declareCoreMediaRichText10Entities } from "../../Entities"; +interface HtmlWriter { + getHtml(fragment: DocumentFragment): string; +} + +class BasicHtmlWriter implements HtmlWriter { + /** + * Returns an HTML string created from the document fragment. + * Just copied from ckeditor5-engine/src/dataprocessor/basichtmlwriter.js + * The BasicHtmlWriter and HtmlWriter are not exposed anymore. + */ + getHtml(fragment: DocumentFragment) { + const doc = global.document.implementation.createHTMLDocument(""); + const container = doc.createElement("div"); + container.appendChild(fragment); + return container.innerHTML; + } +} + /** * Data-Processor for CoreMedia RichText 1.0. */ @@ -35,6 +52,7 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen readonly #richTextSchema: RichTextSchema; readonly #domParser: DOMParser; readonly #noParserErrorNamespace: boolean; + constructor(editor: Editor) { super(); const document: ViewDocument = editor.data.viewDocument; @@ -88,10 +106,12 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen V10RichTextDataProcessor.#PARSER_ERROR_NAMESPACE !== parserErrorDocument.getElementsByTagName("parsererror")[0].namespaceURI; } + registerRawContentMatcher(pattern: MatcherPattern): void { this.#delegate.registerRawContentMatcher(pattern); this.#domConverter.registerRawContentMatcher(pattern); } + useFillerType(type: "default" | "marked"): void { this.#domConverter.blockFillerMode = type === "marked" ? "markedNbsp" : "nbsp"; } @@ -195,6 +215,7 @@ export default class V10RichTextDataProcessor extends ObservableMixin() implemen } return parsedDocument.getElementsByTagNameNS(namespace, "parsererror").length > 0; } + toView(data: string): ViewDocumentFragment { const logger = V10RichTextDataProcessor.#logger; const startTimestamp = performance.now(); diff --git a/packages/ckeditor5-data-facade/src/DataFacadeController.ts b/packages/ckeditor5-data-facade/src/DataFacadeController.ts index 5912259f5..8d347b699 100644 --- a/packages/ckeditor5-data-facade/src/DataFacadeController.ts +++ b/packages/ckeditor5-data-facade/src/DataFacadeController.ts @@ -81,14 +81,14 @@ import { Editor, CKEditorError } from "ckeditor5"; */ export class DataFacadeController implements DataApi { static readonly #logger = LoggerProvider.getLogger("DataFacadeController"); - #editor: Editor; - #cachedData: CachedData; + #editor: Editor | undefined = undefined; + #cachedData: CachedData | undefined = undefined; /** * Possible delegate to controller directly bound to CKEditor 5 via * `DataFacade` plugin. Only expect to be set for a `DataFacadeController` * used in the standalone mode. */ - #delegate: DataFacadeController; + #delegate: DataFacadeController | undefined = undefined; /** * Creates a data controller instance. Outside a plugin context, it is not @@ -177,6 +177,7 @@ export class DataFacadeController implements DataApi { this.#initiallyPropagateDataToDelegate(boundDataFacadeController); } + #initiallyPropagateDataToDelegate(delegate: DataFacadeController): void { const cachedData = this.#cachedData; if (!cachedData) { @@ -296,6 +297,7 @@ export class DataFacadeController implements DataApi { ); return editor.data.get(options); } + #pickData(data: SetDataData, options: Pick, "rootName">): string { const { rootName = "main" } = options; if (typeof data === "string") { @@ -310,6 +312,7 @@ export class DataFacadeController implements DataApi { // does not exist. throw new CKEditorError("datacontroller-get-non-existent-root", this.editor?.data); } + toString(): string { return `DataFacadeController{delegating=${this.delegating}, cache=${this.#cachedData ? "" : ""}}`; } diff --git a/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts b/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts index 27f8bdfdf..48d0c3975 100644 --- a/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts +++ b/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts @@ -202,6 +202,7 @@ class ClassList implements DOMTokenList { } return true; } + [Symbol.iterator](): IterableIterator { return this.#classes[Symbol.iterator](); } @@ -268,9 +269,11 @@ class ClassList implements DOMTokenList { values(): IterableIterator { return this.#classes.values(); } + toString(): string { return this.value; } + [index: number]: string; } @@ -283,7 +286,7 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { * During processing, we may change our identity. This overrides the previous * delegate. */ - #replacement: Element; + #replacement: Element | undefined = undefined; /** * Signals either a possibly new name for this element, or that the name @@ -584,6 +587,7 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { // processing again for this element. return this.continueFrom(newElement.nextSibling); } + #replaceByElement(newElement: Element): void { this.#applyAttributes(newElement, this.attributes); const childrenToMove = this.delegate.childNodes; @@ -740,6 +744,7 @@ class ElementProxy extends NodeProxy implements ElementFilterParams { }); } } + type OwnPropertyKey = string | symbol; /** diff --git a/packages/ckeditor5-link-common/src/FocusUtils.ts b/packages/ckeditor5-link-common/src/FocusUtils.ts index 7ed900745..32830670b 100644 --- a/packages/ckeditor5-link-common/src/FocusUtils.ts +++ b/packages/ckeditor5-link-common/src/FocusUtils.ts @@ -1,9 +1,5 @@ import { View } from "ckeditor5"; -// LinkActionsView: See ckeditor/ckeditor5#12027. -import LinkActionsView from "@ckeditor/ckeditor5-link/src/ui/linkactionsview"; -// LinkFormView: See ckeditor/ckeditor5#12027. -import LinkFormView from "@ckeditor/ckeditor5-link/src/ui/linkformview"; -import { hasRequiredInternalFocusablesProperty } from "./HasFocusables"; +import { HasFocusables, HasFocusTracker, hasRequiredInternalFocusablesProperty } from "./HasFocusables"; /** * Utility function to handle focus tracking for extended linkViews. @@ -21,7 +17,7 @@ import { hasRequiredInternalFocusablesProperty } from "./HasFocusables"; * @param positionRelativeToAnchorView - defines whether to add the childViews before or after the anchorView in focus order */ export const handleFocusManagement = ( - parentView: LinkActionsView | LinkFormView, + parentView: HasFocusTracker & HasFocusables, childViews: View[], anchorView: View, positionRelativeToAnchorView: "before" | "after" = "after", @@ -38,7 +34,7 @@ export const handleFocusManagement = ( } }); }; -const addViewsToFocusables = (parentView: LinkActionsView | LinkFormView, childViews: View[]): void => { +const addViewsToFocusables = (parentView: HasFocusTracker & HasFocusables, childViews: View[]): void => { const internalParentView: unknown = parentView; if (!hasRequiredInternalFocusablesProperty(internalParentView)) { return; @@ -49,14 +45,14 @@ const addViewsToFocusables = (parentView: LinkActionsView | LinkFormView, childV } }); }; -const addViewsToFocusTracker = (parentView: LinkActionsView | LinkFormView, childViews: View[]): void => { +const addViewsToFocusTracker = (parentView: HasFocusTracker & HasFocusables, childViews: View[]): void => { childViews.forEach((view: View) => { if (view.element) { parentView.focusTracker.add(view.element); } }); }; -const removeExistingFocusables = (view: LinkActionsView | LinkFormView): View[] => { +const removeExistingFocusables = (view: HasFocusTracker & HasFocusables): View[] => { const internalView: unknown = view; if (!hasRequiredInternalFocusablesProperty(internalView)) { return []; diff --git a/packages/ckeditor5-link-common/src/HasFocusables.ts b/packages/ckeditor5-link-common/src/HasFocusables.ts index 1dc7b25e7..e08e0e808 100644 --- a/packages/ckeditor5-link-common/src/HasFocusables.ts +++ b/packages/ckeditor5-link-common/src/HasFocusables.ts @@ -1,13 +1,18 @@ -import { ViewCollection } from "ckeditor5"; +import { FocusTracker, ViewCollection } from "ckeditor5"; import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; /** * Internal API of `LinkFormView` and `LinkActionsView` we need to expose * in some contexts. */ -interface HasFocusables { +export interface HasFocusables { readonly _focusables: ViewCollection; } + +export interface HasFocusTracker { + readonly focusTracker: FocusTracker; +} + const isHasFocusables = (value: unknown): value is HasFocusables => typeof value === "object" && !!value && "_focusables" in value && value._focusables instanceof ViewCollection; From 33c38609afe4db60cc1eac9d1f47a61e69f1d5e5 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Mon, 5 Aug 2024 11:18:09 +0200 Subject: [PATCH 04/43] fix position of //@ts-expect-error after different formatting --- .../src/contentlink/LinkUserActionsPlugin.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts b/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts index 0a02041af..b38fdf9ad 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts @@ -37,6 +37,7 @@ export default class LinkUserActionsPlugin extends Plugin { public static readonly pluginName = "LinkUserActionsPlugin" as const; static readonly LOG: Logger = LoggerProvider.getLogger(LinkUserActionsPlugin.pluginName); static readonly requires = []; + init(): void { this.#handleLinkClicksInReadOnly(); this.#handleContentLinkClicksInReadOnly(); @@ -82,13 +83,14 @@ export default class LinkUserActionsPlugin extends Plugin { data.preventDefault(); this.#onReadOnlyLinkClicked(editor, data.view, clickedElement); }, - //@ts-expect-error context is not part of the types but in ckeditor5-link/src/linkediting the event is caught in capture phase { priority: "high", + //@ts-expect-error context is not part of the types but in ckeditor5-link/src/linkediting the event is caught in capture phase context: "$capture", }, ); } + #onReadOnlyLinkClicked(editor: Editor, view: EditingView, domElement: Element): void { const modelElement: TextProxy | undefined = this.#resolveAnchorModelElement(editor, view, domElement); if (!modelElement) { @@ -158,9 +160,9 @@ export default class LinkUserActionsPlugin extends Plugin { } } }, - //@ts-expect-error context is not part of the types but in ckeditor5-link/src/linkediting the event is caught in capture phase { priority: "high", + //@ts-expect-error context is not part of the types but in ckeditor5-link/src/linkediting the event is caught in capture phase context: "$capture", }, ); @@ -195,6 +197,7 @@ export default class LinkUserActionsPlugin extends Plugin { }, ); } + #resolveAnchorModelElement(editor: Editor, view: EditingView, domElement: Element): TextProxy | undefined { //@ts-expect-error bad typings, mapDomToView parameter is typed as model.element, but it should be the typescript element. const viewElement: ViewElement | ViewDocumentFragment | undefined = view.domConverter.mapDomToView(domElement); @@ -217,6 +220,7 @@ export default class LinkUserActionsPlugin extends Plugin { } return textProxies[0]; } + #openInWorkAreaTab(uri: string): void { serviceAgent .fetchService(createWorkAreaServiceDescriptor()) From 53217408e20c9aa383486729f36e3255cf035168 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Thu, 22 Aug 2024 14:19:35 +0200 Subject: [PATCH 05/43] first iteration to get jest running with esm --- .eslintrc.cjs | 68 ++--- app/src/index.ts | 1 + app/webpack.config.cjs | 30 +-- packages/ckeditor5-core-common/package.json | 1 + packages/ckeditor5-data-facade/package.json | 15 +- .../shared-jest.config.js | 18 +- pnpm-lock.yaml | 255 ++++++++++++++++++ tsconfig.json | 4 +- 8 files changed, 328 insertions(+), 64 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 0f2ac1d49..a88fba6e0 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -13,7 +13,7 @@ module.exports = { // Ignore compiled JavaScript files, as they are generated automatically. "**/src/**/*.js", // Also, do not check typing declarations, too. - "**/src/**/*.d.ts", + "**/src/**/*.d.ts" ], overrides: [ { @@ -21,22 +21,22 @@ module.exports = { extends: [ // Prettier recommended for formatting rules: https://typescript-eslint.io/docs/linting/configs/#prettier "prettier", - "plugin:prettier/recommended", // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. + "plugin:prettier/recommended" // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. ], rules: { - "prettier/prettier": "error", - }, + "prettier/prettier": "error" + } }, { files: ["**/*.js"], - extends: ["eslint:recommended"], + extends: ["eslint:recommended"] }, { files: ["**/*.config.{js,cjs,mjs}", "**/*.local.{js,cjs,mjs}", "**/*rc.{js,cjs,mjs}"], rules: { "no-undef": "off", - "no-unused-vars": "off", - }, + "no-unused-vars": "off" + } }, { files: ["**/*.{ts,tsx}"], @@ -45,7 +45,7 @@ module.exports = { "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/recommended-requiring-type-checking", "plugin:@typescript-eslint/strict", - "plugin:jsdoc/recommended", + "plugin:jsdoc/recommended" ], rules: { /* @@ -126,16 +126,16 @@ module.exports = { { name: "setInterval" }, { name: "clearInterval" }, { name: "setImmediate" }, - { name: "clearImmediate" }, + { name: "clearImmediate" } ], // https://github.com/typescript-eslint/typescript-eslint/issues/1391#issuecomment-1124154589 "no-restricted-syntax": [ "error", { // kind="method": Don't apply on constructors. - selector: ':matches(PropertyDefinition, MethodDefinition[kind="method"])[accessibility="private"]', - message: "Use #private instead", - }, + selector: ":matches(PropertyDefinition, MethodDefinition[kind=\"method\"])[accessibility=\"private\"]", + message: "Use #private instead" + } ], "no-sparse-arrays": "error", "no-template-curly-in-string": "error", @@ -160,7 +160,7 @@ module.exports = { * ESLint Plugin: Import * ===================================================================== */ - "import/no-extraneous-dependencies": ["error", { optionalDependencies: false }], + "import/no-extraneous-dependencies": ["error", { optionalDependencies: false, devDependencies: true }], /* * ===================================================================== * ESLint Plugin: JSDoc @@ -171,8 +171,8 @@ module.exports = { "jsdoc/check-tag-names": [ "error", { - definedTags: ["category", "packageDocumentation", "typeParam"], - }, + definedTags: ["category", "packageDocumentation", "typeParam"] + } ], // allowWhitespace: Must be true not to collide with Markdown. "jsdoc/no-multi-asterisks": ["error", { allowWhitespace: true }], @@ -217,51 +217,51 @@ module.exports = { { selector: "typeLike", format: ["PascalCase"], - filter: { regex: "^(__String|[A-Za-z]+_[A-Za-z]+)$", match: false }, + filter: { regex: "^(__String|[A-Za-z]+_[A-Za-z]+)$", match: false } }, { selector: "interface", format: ["PascalCase"], custom: { regex: "^I[A-Z]", match: false }, - filter: { regex: "^I(Arguments|TextWriter|O([A-Z][a-z]+[A-Za-z]*)?)$", match: false }, + filter: { regex: "^I(Arguments|TextWriter|O([A-Z][a-z]+[A-Za-z]*)?)$", match: false } }, { selector: "variable", format: ["camelCase", "PascalCase", "UPPER_CASE"], leadingUnderscore: "allow", - filter: { regex: "^(_{1,2}filename|_{1,2}dirname|_+|[A-Za-z]+_[A-Za-z]+)$", match: false }, + filter: { regex: "^(_{1,2}filename|_{1,2}dirname|_+|[A-Za-z]+_[A-Za-z]+)$", match: false } }, { selector: "function", format: ["camelCase", "PascalCase"], leadingUnderscore: "allow", - filter: { regex: "^[A-Za-z]+_[A-Za-z]+$", match: false }, + filter: { regex: "^[A-Za-z]+_[A-Za-z]+$", match: false } }, { selector: "parameter", format: ["camelCase"], leadingUnderscore: "allow", - filter: { regex: "^(_+|[A-Za-z]+_[A-Z][a-z]+)$", match: false }, + filter: { regex: "^(_+|[A-Za-z]+_[A-Z][a-z]+)$", match: false } }, { selector: "method", format: ["camelCase", "PascalCase"], leadingUnderscore: "allow", - filter: { regex: "^([0-9]+|[A-Za-z]+_[A-Za-z]+)$", match: false }, + filter: { regex: "^([0-9]+|[A-Za-z]+_[A-Za-z]+)$", match: false } }, { selector: "memberLike", format: ["camelCase"], leadingUnderscore: "allow", - filter: { regex: "^([0-9]+|[A-Za-z]+_[A-Za-z]+)$", match: false }, + filter: { regex: "^([0-9]+|[A-Za-z]+_[A-Za-z]+)$", match: false } }, { selector: "enumMember", format: ["camelCase", "PascalCase", "UPPER_CASE"], leadingUnderscore: "allow", - filter: { regex: "^[A-Za-z]+_[A-Za-z]+$", match: false }, + filter: { regex: "^[A-Za-z]+_[A-Za-z]+$", match: false } }, - { selector: "property", format: null }, + { selector: "property", format: null } ], "@typescript-eslint/no-base-to-string": "error", @@ -314,14 +314,14 @@ module.exports = { { asyncArrow: "always", anonymous: "always", - named: "never", - }, + named: "never" + } ], "@typescript-eslint/triple-slash-reference": "error", "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/unified-signatures": "error", - }, + "@typescript-eslint/unified-signatures": "error" + } }, /* * Test-specific overrides. @@ -338,8 +338,8 @@ module.exports = { "@typescript-eslint/no-unsafe-assignment": "off", "@typescript-eslint/no-unsafe-call": "off", "@typescript-eslint/no-unsafe-member-access": "off", - "jsdoc/require-jsdoc": "off", - }, + "jsdoc/require-jsdoc": "off" + } }, /* * Overrides for example application. @@ -347,8 +347,8 @@ module.exports = { { files: ["app/**/*.{ts,tsx}"], rules: { - "jsdoc/require-jsdoc": "off", - }, - }, - ], + "jsdoc/require-jsdoc": "off" + } + } + ] }; diff --git a/app/src/index.ts b/app/src/index.ts index 21002cc99..e4a153533 100644 --- a/app/src/index.ts +++ b/app/src/index.ts @@ -1,6 +1,7 @@ import { createCKEditorInstance } from "./createCKEditorInstance"; import { ApplicationState } from "./ApplicationState"; import { getHashParams } from "./HashParams"; +import "ckeditor5/ckeditor5.css"; // setup input example content IFrame const showHideExampleContentButton = document.querySelector("#inputExampleContentButton"); diff --git a/app/webpack.config.cjs b/app/webpack.config.cjs index 214382ed4..24ed649ff 100644 --- a/app/webpack.config.cjs +++ b/app/webpack.config.cjs @@ -22,18 +22,18 @@ module.exports = { path: path.resolve(__dirname, "dist"), filename: "ckeditor.js", libraryTarget: "umd", - libraryExport: "default", + libraryExport: "default" }, optimization: { minimizer: [ new TerserPlugin({ terserOptions: { - sourceMap: true, + sourceMap: true }, - extractComments: false, - }), - ], + extractComments: false + }) + ] }, plugins: [ @@ -41,30 +41,30 @@ module.exports = { // UI language. Language codes follow the https://en.wikipedia.org/wiki/ISO_639-1 format. // When changing the built-in language, remember to also change it in the editor's configuration (src/ckeditor.js). language: "en", - additionalLanguages: ["de"], + additionalLanguages: ["de"] }), new webpack.BannerPlugin({ banner: bundler.getLicenseBanner(), - raw: true, + raw: true }), new CircularDependencyPlugin({ exclude: /node_modules/, - failOnError: true, - }), + failOnError: true + }) ], module: { rules: [ loaders.getIconsLoader({ matchExtensionOnly: true }), loaders.getStylesLoader({ - themePath: require.resolve("@ckeditor/ckeditor5-theme-lark"), - minify: true, + themePath: require.resolve("@ckeditor/ckeditor5-theme-lark/dist/index.css"), + minify: true }), - loaders.getTypeScriptLoader(), - ], + loaders.getTypeScriptLoader() + ] }, resolve: { - extensions: [".ts", ".js", ".json"], - }, + extensions: [".ts", ".js", ".json"] + } }; diff --git a/packages/ckeditor5-core-common/package.json b/packages/ckeditor5-core-common/package.json index 855892cc8..537534102 100644 --- a/packages/ckeditor5-core-common/package.json +++ b/packages/ckeditor5-core-common/package.json @@ -14,6 +14,7 @@ "ckeditor5", "ckeditor5-core" ], + "type": "module", "main": "./src/index.ts", "publishConfig": { "main": "./src/index.js", diff --git a/packages/ckeditor5-data-facade/package.json b/packages/ckeditor5-data-facade/package.json index 5544228f6..aa0bb5d83 100644 --- a/packages/ckeditor5-data-facade/package.json +++ b/packages/ckeditor5-data-facade/package.json @@ -20,14 +20,23 @@ "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", - "jest": "jest --passWithNoTests", + "jest": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" npx jest --passWithNoTests", "jest:coverage": "jest --collect-coverage --passWithNoTests", "npm-check-updates": "npm-check-updates --upgrade" }, + "type": "module", "main": "./src/index.ts", "publishConfig": { "main": "./src/index.js", - "types": "./src/index.d.ts" + "types": "./src/index.ts" + }, + "types": "./src/index.d.ts", + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.js", + "import": "./src/index.js" + } }, "files": [ "/src" @@ -35,10 +44,12 @@ "devDependencies": { "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^27.4.6", "@types/jest": "^29.5.12", "jest": "^29.7.0", "jest-each": "^29.7.0", "rimraf": "^6.0.1", + "ts-jest": "^29.2.4", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/packages/ckeditor5-jest-test-helpers/shared-jest.config.js b/packages/ckeditor5-jest-test-helpers/shared-jest.config.js index e49643f33..f9b0e2b54 100644 --- a/packages/ckeditor5-jest-test-helpers/shared-jest.config.js +++ b/packages/ckeditor5-jest-test-helpers/shared-jest.config.js @@ -1,5 +1,3 @@ -const babelConfig = require("@coremedia-internal/ckeditor5-babel-config"); - module.exports = { testEnvironment: require.resolve("jest-environment-jsdom"), // Don't detect utility files as tests, i.e. require `test` in name. @@ -8,20 +6,18 @@ module.exports = { moduleNameMapper: { // https://www.npmjs.com/package/jest-transform-stub "^.+\\.(css|less|sass|scss|gif|png|jpg|ttf|eot|woff|woff2|svg)$": require.resolve("jest-transform-stub"), + // https://stackoverflow.com/questions/76608600/jest-tests-are-failing-because-of-an-unknown-unexpected-token-export + "^blurhash": require.resolve("blurhash"), }, + preset: "ts-jest/presets/default-esm", transform: { - // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` - // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` - "^.+\\.tsx?$": [ + "^.+.tsx?$": [ "ts-jest", { - // ts-jest configuration goes here + useESM: true, }, ], - // Required, e.g., for CKEditor 5 Dependencies. - "^.+\\.jsx?$": [require.resolve("babel-jest"), babelConfig], - // https://www.npmjs.com/package/jest-transform-stub - "^.+\\.(css|less|sass|scss|gif|png|jpg|ttf|eot|woff|woff2|svg)$": require.resolve("jest-transform-stub"), }, - transformIgnorePatterns: ["node_modules/.pnpm/(?!@ckeditor|@bbob|lodash-es|ckeditor5|rxjs|vanilla-colorful)"], + extensionsToTreatAsEsm: [".ts"], + transformIgnorePatterns: ["node_modules/.pnpm/(?!@bbob|lodash-es|rxjs|vanilla-colorful)"], }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ceba2d6d4..ddb073158 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -917,6 +917,9 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^27.4.6 + version: 27.5.1 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -932,6 +935,9 @@ importers: rimraf: specifier: ^6.0.1 version: 6.0.1 + ts-jest: + specifier: ^29.2.4 + version: 29.2.4(@babel/core@7.24.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0)(typescript@5.4.5) typescript: specifier: ^5.4.5 version: 5.4.5 @@ -2417,6 +2423,10 @@ packages: node-notifier: optional: true + '@jest/environment@27.5.1': + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@jest/environment@29.7.0': resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2429,10 +2439,18 @@ packages: resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/fake-timers@27.5.1': + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@jest/fake-timers@29.7.0': resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/globals@27.5.1': + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@jest/globals@29.7.0': resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2466,6 +2484,10 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@27.5.1': + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2561,12 +2583,18 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sinonjs/commons@1.8.6': + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + '@sinonjs/commons@2.0.0': resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} '@sinonjs/fake-timers@10.0.2': resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} + '@sinonjs/fake-timers@8.1.0': + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -2680,6 +2708,9 @@ packages: '@types/yargs-parser@21.0.0': resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + '@types/yargs@16.0.9': + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + '@types/yargs@17.0.24': resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} @@ -2976,6 +3007,9 @@ packages: async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -3505,6 +3539,10 @@ packages: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} + diff-sequences@27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3548,6 +3586,11 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + electron-to-chromium@1.4.661: resolution: {integrity: sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw==} @@ -3835,6 +3878,10 @@ packages: expect-playwright@0.8.0: resolution: {integrity: sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg==} + expect@27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3873,6 +3920,9 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -4417,6 +4467,11 @@ packages: resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} engines: {node: 20 || >=22} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + javascript-stringify@1.6.0: resolution: {integrity: sha512-fnjC0up+0SjEJtgmmG+teeel68kutkvzfctO/KxE3qJlbunkJYAshgH3boU++gSBHP8z5/r0ts0qRIrHf0RTQQ==} @@ -4450,6 +4505,10 @@ packages: ts-node: optional: true + jest-diff@27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-diff@29.7.0: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4475,6 +4534,10 @@ packages: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-get-type@27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4487,14 +4550,26 @@ packages: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-matcher-utils@29.7.0: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-mock@29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4546,6 +4621,10 @@ packages: jest-transform-stub@2.0.0: resolution: {integrity: sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==} + jest-util@27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4827,6 +4906,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -5377,6 +5460,10 @@ packages: pretty-data@0.40.0: resolution: {integrity: sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==} + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5445,6 +5532,9 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} @@ -5956,6 +6046,30 @@ packages: esbuild: optional: true + ts-jest@29.2.4: + resolution: {integrity: sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -8084,6 +8198,13 @@ snapshots: - supports-color - ts-node + '@jest/environment@27.5.1': + dependencies: + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 20.14.10 + jest-mock: 27.5.1 + '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 @@ -8102,6 +8223,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/fake-timers@27.5.1': + dependencies: + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 20.14.10 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 + '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 @@ -8111,6 +8241,12 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 + '@jest/globals@27.5.1': + dependencies: + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 + '@jest/globals@29.7.0': dependencies: '@jest/environment': 29.7.0 @@ -8193,6 +8329,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/types@27.5.1': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 20.14.10 + '@types/yargs': 16.0.9 + chalk: 4.1.2 + '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 @@ -8295,6 +8439,10 @@ snapshots: '@sinclair/typebox@0.27.8': {} + '@sinonjs/commons@1.8.6': + dependencies: + type-detect: 4.0.8 + '@sinonjs/commons@2.0.0': dependencies: type-detect: 4.0.8 @@ -8303,6 +8451,10 @@ snapshots: dependencies: '@sinonjs/commons': 2.0.0 + '@sinonjs/fake-timers@8.1.0': + dependencies: + '@sinonjs/commons': 1.8.6 + '@tootallnate/once@2.0.0': {} '@trysound/sax@0.2.0': {} @@ -8442,6 +8594,10 @@ snapshots: '@types/yargs-parser@21.0.0': {} + '@types/yargs@16.0.9': + dependencies: + '@types/yargs-parser': 21.0.0 + '@types/yargs@17.0.24': dependencies: '@types/yargs-parser': 21.0.0 @@ -8789,6 +8945,8 @@ snapshots: dependencies: lodash: 4.17.21 + async@3.2.6: {} + asynckit@0.4.0: {} at-least-node@1.0.0: {} @@ -9485,6 +9643,8 @@ snapshots: detect-newline@3.1.0: {} + diff-sequences@27.5.1: {} + diff-sequences@29.6.3: {} diff@3.5.0: {} @@ -9527,6 +9687,10 @@ snapshots: ee-first@1.1.1: {} + ejs@3.1.10: + dependencies: + jake: 10.9.2 + electron-to-chromium@1.4.661: {} electron-to-chromium@1.4.744: {} @@ -9915,6 +10079,13 @@ snapshots: expect-playwright@0.8.0: {} + expect@27.5.1: + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 @@ -9989,6 +10160,10 @@ snapshots: dependencies: flat-cache: 3.2.0 + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 @@ -10572,6 +10747,13 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + javascript-stringify@1.6.0: {} jest-changed-files@29.7.0: @@ -10655,6 +10837,13 @@ snapshots: - babel-plugin-macros - supports-color + jest-diff@27.5.1: + dependencies: + chalk: 4.1.2 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -10698,6 +10887,8 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 + jest-get-type@27.5.1: {} + jest-get-type@29.6.3: {} jest-haste-map@29.7.0: @@ -10721,6 +10912,13 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 + jest-matcher-utils@27.5.1: + dependencies: + chalk: 4.1.2 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + jest-matcher-utils@29.7.0: dependencies: chalk: 4.1.2 @@ -10728,6 +10926,18 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 + jest-message-util@27.5.1: + dependencies: + '@babel/code-frame': 7.24.7 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + jest-message-util@29.7.0: dependencies: '@babel/code-frame': 7.22.13 @@ -10740,6 +10950,11 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 + jest-mock@27.5.1: + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.14.10 + jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -10883,6 +11098,15 @@ snapshots: jest-transform-stub@2.0.0: {} + jest-util@27.5.1: + dependencies: + '@jest/types': 27.5.1 + '@types/node': 20.14.10 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -11171,6 +11395,10 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 @@ -11697,6 +11925,12 @@ snapshots: pretty-data@0.40.0: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 @@ -11758,6 +11992,8 @@ snapshots: schema-utils: 3.1.1 webpack: 5.93.0(webpack-cli@5.1.4) + react-is@17.0.2: {} + react-is@18.2.0: {} read-cache@1.0.0: @@ -12322,6 +12558,25 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.24.4) + ts-jest@29.2.4(@babel/core@7.24.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0)(typescript@5.4.5): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.14.10) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.2 + typescript: 5.4.5 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.24.4 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.24.4) + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 diff --git a/tsconfig.json b/tsconfig.json index 573025577..ad767a34e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,8 +13,8 @@ "ES5", "ESNext" ], - "module": "ES6", - "moduleResolution": "Node", + "module": "es2022", + "moduleResolution": "Bundler", "newLine": "LF", "noImplicitAny": true, "noImplicitOverride": true, From 3cec951c442b41bf5da63940e2b5122bedeae1d9 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Wed, 23 Oct 2024 17:06:12 +0200 Subject: [PATCH 06/43] next iteration to get jest tests run --- app/package.json | 7 +- app/src/editors/richtext.ts | 28 +- app/src/example-data.ts | 5 +- app/src/inputExampleContents.ts | 10 +- app/tsconfig.json | 14 +- itest/package.json | 3 +- itest/src/Blocklist.test.ts | 2 +- itest/src/BlocklistCollapsed.test.ts | 2 +- itest/src/BlocklistExpandedKeyboard.test.ts | 3 +- itest/src/BlocklistExpandedToolbar.test.ts | 2 +- itest/src/ContentLink.test.ts | 4 +- itest/src/Differencing.test.ts | 16 +- itest/src/DocumentLists.test.ts | 4 +- itest/src/DragDrop.test.ts | 15 +- itest/src/HelloEditor.test.ts | 4 +- itest/src/Images.test.ts | 14 +- itest/src/LinkBalloon.test.ts | 4 +- itest/src/LinkUserInteraction.test.ts | 4 +- itest/src/PasteButton.test.ts | 10 +- itest/src/aut/ClassicEditorWrapper.ts | 5 +- itest/src/aut/MockContentPluginWrapper.ts | 3 +- .../aut/MockExternalContentPluginWrapper.ts | 4 +- .../src/aut/MockInputExamplePluginWrapper.ts | 12 +- .../balloon/LinkActionsViewWrapper.ts | 2 +- .../aut/services/BlocklistServiceWrapper.ts | 2 +- .../services/MockServiceAgentPluginWrapper.ts | 2 +- .../aut/services/WorkAreaServiceWrapper.ts | 2 +- package.json | 2 +- packages/ckeditor5-bbcode/package.json | 42 +- packages/ckeditor5-bbcode/src/augmentation.ts | 3 +- packages/ckeditor5-bbcode/tsconfig.json | 23 +- packages/ckeditor5-common/package.json | 27 +- packages/ckeditor5-common/src/index.ts | 1 + packages/ckeditor5-common/tsconfig.json | 5 +- packages/ckeditor5-core-common/package.json | 22 +- packages/ckeditor5-core-common/src/index.ts | 10 +- packages/ckeditor5-core-common/tsconfig.json | 5 +- .../package.json | 28 +- .../src/blocklistediting.ts | 11 +- .../src/blocklistui.ts | 6 +- .../tsconfig.json | 3 + .../package.json | 28 +- .../src/ContentClipboard.ts | 11 +- .../src/ContentClipboardEditing.ts | 6 +- .../src/ContentMarkers.ts | 12 +- .../src/DataToModelMechanism.ts | 31 +- .../src/converters.ts | 80 +- .../src/index.ts | 4 + .../src/integrations/Undo.ts | 8 +- .../src/paste/PasteContentCommand.ts | 20 +- .../src/paste/PasteContentEditing.ts | 4 +- .../src/paste/PasteContentUI.ts | 4 +- .../tsconfig.json | 3 + .../ckeditor5-coremedia-content/package.json | 19 +- .../src/OpenInTab.ts | 14 +- .../src/commands/OpenInTabCommand.ts | 6 +- .../ckeditor5-coremedia-content/tsconfig.json | 5 +- .../RuleBasedHtmlDomConverters.ts | 11 +- .../__tests__/integrations/RulesTester.ts | 3 +- .../integrations/XDiffElements.test.ts | 5 +- .../package.json | 25 +- .../src/Differencing.ts | 9 +- .../src/PluginIntegrationHook.ts | 4 +- .../src/integrations/HtmlSupportImage.ts | 4 +- .../src/integrations/Image.ts | 4 +- .../RichTextDataProcessorIntegration.ts | 2 +- .../src/integrations/XDiffElements.ts | 7 +- .../tsconfig.json | 5 +- .../package.json | 22 +- .../src/index.ts | 24 + .../tsconfig.json | 5 +- .../ckeditor5-coremedia-images/package.json | 28 +- .../src/ContentImageClipboardPlugin.ts | 17 +- .../src/ContentImageEditingPlugin.ts | 13 +- .../src/ModelBoundSubscriptionPlugin.ts | 4 +- .../ContentImageOpenInTabUI.ts | 11 +- .../OpenImageInTabCommand.ts | 9 +- .../src/converters.ts | 91 +- .../ckeditor5-coremedia-images/tsconfig.json | 3 + .../config/LinkDefaultTargetsConfig.test.ts | 2 +- .../config/LinkTargetConfig.test.ts | 2 +- .../ckeditor5-coremedia-link/package.json | 29 +- .../contentlink/ContentLinkClipboardPlugin.ts | 23 +- .../src/contentlink/ContentLinkCommandHook.ts | 23 +- .../src/contentlink/ContentLinkViewUtils.ts | 2 +- .../src/contentlink/ContentLinks.ts | 18 +- .../src/contentlink/InternalLinkUI.ts | 7 +- .../LinkBalloonEventListenerFix.ts | 20 +- .../src/contentlink/LinkUserActionsPlugin.ts | 23 +- .../src/contentlink/ui/AugmentedLinkUI.ts | 2 +- .../ui/ContentLinkActionsViewExtension.ts | 15 +- .../ui/ContentLinkFormViewExtension.ts | 26 +- .../src/contentlink/ui/ContentLinkView.ts | 44 +- .../contentlink/ui/ContentLinkViewFactory.ts | 2 +- .../src/contentlink/ui/ViewExtensions.ts | 2 +- .../LinkTargetActionsViewExtension.ts | 11 +- .../src/linktarget/LinkTargetModelView.ts | 6 +- .../linktarget/command/LinkTargetCommand.ts | 9 +- .../ui/CustomLinkTargetInputFormView.ts | 1 + .../src/linktarget/ui/CustomLinkTargetUI.ts | 16 +- .../ckeditor5-coremedia-link/tsconfig.json | 3 + .../package.json | 21 +- .../src/GeneralRichTextSupport.ts | 4 +- .../src/RichTextDataFilter.ts | 9 +- .../src/augmentation.ts | 11 +- .../tsconfig.json | 5 +- .../__tests__/Silenced.ts | 6 +- .../compatibility/v10/DataDrivenTests.ts | 4 +- .../compatibility/v10/RichTextSchema.test.ts | 2 +- .../compatibility/v10/ToDataProcessor.test.ts | 9 +- .../compatibility/v10/rules/Anchor.test.ts | 4 + .../compatibility/v10/rules/Block.test.ts | 3 + .../compatibility/v10/rules/Heading.test.ts | 3 + .../__tests__/rules/AnchorElements.test.ts | 2 +- .../rules/BasicInlineElements.test.ts | 2 +- .../__tests__/rules/CodeElements.test.ts | 2 +- .../__tests__/rules/DefaultRules.test.ts | 2 +- .../__tests__/rules/DivElements.test.ts | 2 +- .../__tests__/rules/HeadingElements.test.ts | 2 +- .../__tests__/rules/ImageElements.test.ts | 2 +- .../rules/LanguageAttributes.test.ts | 2 +- .../rules/RuleBasedHtmlDomConverters.ts | 11 +- .../__tests__/rules/RulesTester.ts | 3 +- .../rules/SuppressedElements.test.ts | 2 +- .../__tests__/rules/TableElements.test.ts | 2 +- .../sanitation/RichTextSanitizer.test.ts | 5 +- .../ckeditor5-coremedia-richtext/package.json | 25 +- .../src/CoreMediaRichText.ts | 3 +- .../src/CoreMediaRichTextConfig.ts | 11 +- .../src/RichTextDataProcessor.ts | 25 +- .../src/RichTextXmlWriter.ts | 1 + .../src/ToDataProcessor.ts | 2 +- .../src/augmentation.ts | 6 +- .../src/compatibility/v10/RichTextSchema.ts | 6 +- .../v10/V10CoreMediaRichTextConfig.ts | 6 +- .../v10/V10RichTextDataProcessor.ts | 5 +- .../src/compatibility/v10/rules/Anchor.ts | 3 +- .../src/compatibility/v10/rules/Heading.ts | 8 +- .../src/compatibility/v10/rules/Image.ts | 3 +- .../src/compatibility/v10/rules/Lang.ts | 6 +- .../src/compatibility/v10/rules/List.ts | 7 +- .../src/compatibility/v10/rules/ReplaceBy.ts | 14 +- .../src/compatibility/v10/rules/Schema.ts | 9 +- .../src/compatibility/v10/rules/Table.ts | 3 +- .../src/compatibility/v10/rules/XLink.ts | 4 +- .../ckeditor5-coremedia-richtext/src/index.ts | 4 +- .../src/integrations/LinkIntegration.ts | 5 +- .../src/rules/AnchorElements.ts | 5 +- .../src/rules/DefaultRules.ts | 2 +- .../src/rules/Direction.ts | 2 +- .../src/rules/ImageElements.ts | 5 +- .../rules/MergeTableSectionsToTableBody.ts | 8 +- .../src/rules/PreferLangAttribute.ts | 5 +- .../src/rules/ReplaceByChildren.ts | 6 +- .../src/rules/ReplaceElementByElement.ts | 6 +- .../rules/ReplaceElementByElementAndClass.ts | 6 +- .../rules/ReplaceHeadingsByElementAndClass.ts | 5 +- .../src/rules/TableElements.ts | 2 +- .../src/rules/XLink.ts | 2 +- .../src/sanitation/ElementConfig.ts | 12 +- .../src/sanitation/RichTextSanitizer.ts | 2 +- .../sanitation/TrackingSanitationListener.ts | 2 +- .../tsconfig.json | 5 +- .../package.json | 2 +- .../src/CoreMediaStudioEssentials.ts | 4 +- .../tsconfig.json | 5 +- .../__tests__/content/DisplayHints.test.ts | 4 +- .../content/MockContentDisplayService.test.ts | 5 +- .../package.json | 26 +- .../src/MockBlocklistService.ts | 14 +- .../src/MockStudioIntegration.ts | 20 +- .../src/content/DisplayHints.ts | 2 +- .../src/content/MockBlobDisplayService.ts | 17 +- .../src/content/MockClipboardService.ts | 13 +- .../src/content/MockContentDisplayService.ts | 13 +- .../src/content/MockContentImportService.ts | 10 +- .../src/content/MockContentPlugin.ts | 10 +- .../content/MockContentReferenceService.ts | 28 +- .../src/content/MockDragDropService.ts | 2 +- .../src/content/MockExternalContentPlugin.ts | 31 +- .../src/content/MockInputExamplePlugin.ts | 31 +- .../MockRichtextConfigurationService.ts | 15 +- .../src/content/MockServiceAgentPlugin.ts | 7 +- .../src/content/MockWorkAreaService.ts | 17 +- .../src/content/PredefinedMockContents.ts | 2 +- .../src/index-doc.ts | 2 +- .../src/index.ts | 15 + .../tsconfig.json | 5 +- .../package.json | 27 +- .../src/BlocklistService.ts | 4 +- .../src/content/IsDroppableInRichtext.ts | 6 +- .../src/content/IsLinkableDragAndDrop.ts | 4 +- .../src/index.ts | 41 +- .../tsconfig.json | 3 + .../__tests__/DataFacade.test.ts | 15 +- .../__tests__/DataFacadeController.test.ts | 6 +- .../__tests__/toDelete1.test.ts | 11 + .../__tests__/toDelete2.test.ts | 6 + .../__tests__/toDelete3.test.ts | 4 + packages/ckeditor5-data-facade/package.json | 30 +- packages/ckeditor5-data-facade/tsconfig.json | 3 + .../__tests__/ElementProxy.test.ts | 3 +- .../__tests__/HtmlFilter.test.ts | 3 +- .../__tests__/NodeProxy.test.ts | 3 +- .../__tests__/Rules.test.ts | 8 +- .../__tests__/TextProxy.test.ts | 5 +- .../package.json | 22 +- .../src/ElementProxy.ts | 6 +- .../src/HtmlFilter.ts | 18 +- .../src/Namespace.ts | 3 +- .../src/NodeProxy.ts | 3 +- .../src/RulesLogger.ts | 3 +- .../src/TextProxy.ts | 6 +- .../src/index-doc.ts | 23 - .../src/index.ts | 57 + .../tsconfig.json | 5 +- .../ckeditor5-dialog-visibility/package.json | 21 +- .../ckeditor5-dialog-visibility/tsconfig.json | 5 +- .../__tests__/DataProcessorSimulation.ts | 2 +- .../__tests__/HtmlDomConverter.test.ts | 17 +- packages/ckeditor5-dom-converter/package.json | 22 +- packages/ckeditor5-dom-converter/src/index.ts | 2 +- .../ckeditor5-dom-converter/tsconfig.json | 5 +- packages/ckeditor5-dom-support/package.json | 24 +- packages/ckeditor5-dom-support/tsconfig.json | 5 +- .../__tests__/FontMappingRegistry.test.ts | 1 + packages/ckeditor5-font-mapper/package.json | 24 +- .../ckeditor5-font-mapper/src/FontMapper.ts | 12 +- .../ckeditor5-font-mapper/src/FontMapping.ts | 2 +- .../ckeditor5-font-mapper/src/FontReplacer.ts | 7 +- .../ckeditor5-font-mapper/src/augmentation.ts | 5 +- packages/ckeditor5-font-mapper/tsconfig.json | 5 +- packages/ckeditor5-link-common/package.json | 11 +- .../src/HasFocusables.ts | 6 +- .../src/LinkAttributes.ts | 7 +- .../ckeditor5-link-common/src/LinkCleanup.ts | 12 +- packages/ckeditor5-link-common/src/index.ts | 3 + packages/ckeditor5-link-common/tsconfig.json | 5 +- packages/ckeditor5-logging/package.json | 21 +- packages/ckeditor5-logging/tsconfig.json | 5 +- pnpm-lock.yaml | 5500 ++++++++--------- tsconfig.json | 2 + 242 files changed, 4108 insertions(+), 3820 deletions(-) create mode 100644 packages/ckeditor5-data-facade/__tests__/toDelete1.test.ts create mode 100644 packages/ckeditor5-data-facade/__tests__/toDelete2.test.ts create mode 100644 packages/ckeditor5-data-facade/__tests__/toDelete3.test.ts delete mode 100644 packages/ckeditor5-dataprocessor-support/src/index-doc.ts create mode 100644 packages/ckeditor5-dataprocessor-support/src/index.ts diff --git a/app/package.json b/app/package.json index 821d1edce..b5f30160b 100644 --- a/app/package.json +++ b/app/package.json @@ -32,15 +32,18 @@ "@coremedia/ckeditor5-dom-converter": "^20.1.0", "@coremedia/ckeditor5-font-mapper": "^20.1.0", "@coremedia/ckeditor5-link-common": "^20.1.0", - "@coremedia/service-agent": "^2.0.1", + "@coremedia/service-agent": "^1.1.5", "xml-formatter": "^3.6.2" }, "devDependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-runtime": "^7.25.4", "@ckeditor/ckeditor5-dev-translations": "^42.0.0", "@ckeditor/ckeditor5-dev-utils": "^42.0.0", "@ckeditor/ckeditor5-inspector": "^4.1.0", "@ckeditor/ckeditor5-theme-lark": "42.0.2", "@types/node": "^20.14.10", + "babel-loader": "^8.3.0", "circular-dependency-plugin": "^5.2.2", "css-loader": "^7.1.2", "esbuild-loader": "^3.2.0", @@ -51,7 +54,7 @@ "rimraf": "^6.0.1", "style-loader": "^4.0.0", "terser-webpack-plugin": "^5.3.10", - "typescript": "^5.4.5", + "typescript": "5.4.5", "webpack": "^5.93.0", "webpack-cli": "^5.1.4" }, diff --git a/app/src/editors/richtext.ts b/app/src/editors/richtext.ts index 8c02d6924..f89dc78cf 100644 --- a/app/src/editors/richtext.ts +++ b/app/src/editors/richtext.ts @@ -5,11 +5,15 @@ // ImageBlockEditing: See ckeditor/ckeditor5#12027. import { DialogVisibility } from "@coremedia/ckeditor5-dialog-visibility"; -import { LinkTarget, ContentLinks } from "@coremedia/ckeditor5-coremedia-link"; -import { ContentClipboard } from "@coremedia/ckeditor5-coremedia-content-clipboard"; +import { LinkTarget, ContentLinks, COREMEDIA_LINK_CONFIG_KEY } from "@coremedia/ckeditor5-coremedia-link"; +import { ContentClipboard, PasteContentPlugin } from "@coremedia/ckeditor5-coremedia-content-clipboard"; import { ContentImagePlugin } from "@coremedia/ckeditor5-coremedia-images"; import { FontMapper as CoreMediaFontMapper } from "@coremedia/ckeditor5-font-mapper"; -import MockStudioIntegration from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration"; +import { + MockStudioIntegration, + COREMEDIA_MOCK_CONTENT_PLUGIN, + MockInputExamplePlugin, +} from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; import { CoreMediaStudioEssentials, COREMEDIA_RICHTEXT_CONFIG_KEY, @@ -17,7 +21,6 @@ import { Strictness, } from "@coremedia/ckeditor5-coremedia-studio-essentials"; import { initInputExampleContent } from "../inputExampleContents"; -import { COREMEDIA_MOCK_CONTENT_PLUGIN } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin"; import { Alignment, AutoLink, @@ -55,16 +58,14 @@ import { icons, PluginConstructor, } from "ckeditor5"; -import MockInputExamplePlugin from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin"; -import PasteContentPlugin from "@coremedia/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentPlugin"; -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { replaceElementByElementAndClass } from "@coremedia/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass"; -import { FilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; -import { replaceByElementAndClassBackAndForth } from "@coremedia/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/ReplaceBy"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; +import { + replaceElementByElementAndClass, + replaceByElementAndClassBackAndForth, +} from "@coremedia/ckeditor5-coremedia-richtext"; +import { FilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support"; import { getHashParam } from "../HashParams"; -import { COREMEDIA_LINK_CONFIG_KEY } from "@coremedia/ckeditor5-coremedia-link/src/contentlink/LinkBalloonConfig"; -import { LinkAttributesConfig } from "@coremedia/ckeditor5-link-common/src/LinkAttributesConfig"; -import { LinkAttributes } from "@coremedia/ckeditor5-link-common/src/LinkAttributes"; +import { LinkAttributesConfig, LinkAttributes } from "@coremedia/ckeditor5-link-common"; import { Differencing } from "@coremedia/ckeditor5-coremedia-differencing"; import type { LatestCoreMediaRichTextConfig, @@ -75,6 +76,7 @@ import { ApplicationState } from "../ApplicationState"; import { Blocklist } from "@coremedia/ckeditor5-coremedia-blocklist"; import { DataFacade } from "@coremedia/ckeditor5-data-facade"; import { updatePreview } from "../preview"; + const { objectInline: withinTextIcon, objectLeft: alignLeftIcon, diff --git a/app/src/example-data.ts b/app/src/example-data.ts index a6dd57aee..1ae9e0557 100644 --- a/app/src/example-data.ts +++ b/app/src/example-data.ts @@ -1,5 +1,5 @@ // noinspection HttpUrlsUsage -import { PREDEFINED_MOCK_LINK_DATA } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/PredefinedMockContents"; +import { PREDEFINED_MOCK_LINK_DATA } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; import { bbCodeData, ExampleData, @@ -8,6 +8,7 @@ import { } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { EditingView, Editor } from "ckeditor5"; import { DataFacade } from "@coremedia/ckeditor5-data-facade"; + const exampleData: { richtext: ExampleData; bbcode: ExampleData; @@ -49,7 +50,7 @@ const dumpDataViewOnRender = (editor: Editor): void => { console.log("CKEditor's Data-Controller received data via 'set'.", { event, // eslint-disable-next-line - data: details[0] + data: details[0] }), { priority: "lowest", diff --git a/app/src/inputExampleContents.ts b/app/src/inputExampleContents.ts index 9f84bea60..40c2635f1 100644 --- a/app/src/inputExampleContents.ts +++ b/app/src/inputExampleContents.ts @@ -1,8 +1,10 @@ -import MockContentPlugin from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin"; -import { ClassicEditor } from "ckeditor5"; -import MockInputExamplePlugin, { +import { + MockContentPlugin, + MockInputExamplePlugin, InputExampleElement, -} from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin"; +} from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import { ClassicEditor } from "ckeditor5"; + const INPUT_EXAMPLE_CONTENT_DIV_CLASS = "inputExampleContentDiv"; const initInputExampleContent = (editor: ClassicEditor) => { const mockContentPlugin = editor.plugins.get(MockContentPlugin); diff --git a/app/tsconfig.json b/app/tsconfig.json index 36aefa2d3..96b2a467a 100644 --- a/app/tsconfig.json +++ b/app/tsconfig.json @@ -1,7 +1,19 @@ { "extends": "../tsconfig.json", + "compilerOptions": { + "target": "ES6", + "module": "ES6", + "moduleResolution": "Bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, "include": [ "./sample", - "./src", + "./src" + ], + "exclude": [ + "node_modules" ] } diff --git a/itest/package.json b/itest/package.json index 83f372dbc..91b7e5b28 100644 --- a/itest/package.json +++ b/itest/package.json @@ -24,6 +24,7 @@ "@coremedia/ckeditor5-coremedia-richtext": "^20.1.0", "@coremedia/ckeditor5-coremedia-studio-integration": "^20.1.0", "@coremedia/ckeditor5-coremedia-studio-integration-mock": "^20.1.0", + "@jest/globals": "^29.7.0", "@types/express": "^4.17.21", "@types/jest": "^29.5.12", "@types/node": "^20.14.10", @@ -40,7 +41,7 @@ "playwright-core": "^1.45.1", "rimraf": "^6.0.1", "tslib": "^2.6.3", - "typescript": "^5.4.5", + "typescript": "5.4.5", "wait-for-expect": "^3.0.2" }, "scripts": { diff --git a/itest/src/Blocklist.test.ts b/itest/src/Blocklist.test.ts index 2a5c64ed9..b6c1492d5 100644 --- a/itest/src/Blocklist.test.ts +++ b/itest/src/Blocklist.test.ts @@ -1,5 +1,5 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; -import { richtext, p } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { richtext, p } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import "./expect/Expectations"; import { ctrlOrMeta } from "./browser/UserAgent"; import { clickModifiers } from "./aria/KeyboardUtils"; diff --git a/itest/src/BlocklistCollapsed.test.ts b/itest/src/BlocklistCollapsed.test.ts index 1e44f991e..72e15210e 100644 --- a/itest/src/BlocklistCollapsed.test.ts +++ b/itest/src/BlocklistCollapsed.test.ts @@ -1,5 +1,5 @@ import { MockServiceAgentPluginWrapper } from "./aut/services/MockServiceAgentPluginWrapper"; -import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { ApplicationWrapper } from "./aut/ApplicationWrapper"; import { clickModifiers } from "./aria/KeyboardUtils"; import "./expect/Expectations"; diff --git a/itest/src/BlocklistExpandedKeyboard.test.ts b/itest/src/BlocklistExpandedKeyboard.test.ts index 4468bf9df..0e03d1357 100644 --- a/itest/src/BlocklistExpandedKeyboard.test.ts +++ b/itest/src/BlocklistExpandedKeyboard.test.ts @@ -1,8 +1,9 @@ import "./expect/Expectations"; import { ApplicationWrapper } from "./aut/ApplicationWrapper"; import { MockServiceAgentPluginWrapper } from "./aut/services/MockServiceAgentPluginWrapper"; -import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { ctrlOrMeta } from "./browser/UserAgent"; + describe("Blocklist", () => { let application: ApplicationWrapper; diff --git a/itest/src/BlocklistExpandedToolbar.test.ts b/itest/src/BlocklistExpandedToolbar.test.ts index 88189317a..4868a32f4 100644 --- a/itest/src/BlocklistExpandedToolbar.test.ts +++ b/itest/src/BlocklistExpandedToolbar.test.ts @@ -1,6 +1,6 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; import { MockServiceAgentPluginWrapper } from "./aut/services/MockServiceAgentPluginWrapper"; -import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { ctrlOrMeta } from "./browser/UserAgent"; import "./expect/Expectations"; diff --git a/itest/src/ContentLink.test.ts b/itest/src/ContentLink.test.ts index 48ee83dc3..5d42b713d 100644 --- a/itest/src/ContentLink.test.ts +++ b/itest/src/ContentLink.test.ts @@ -1,7 +1,7 @@ import "./expect/Expectations"; import { ApplicationWrapper } from "./aut/ApplicationWrapper"; -import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { a, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { a, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { ctrlOrMeta } from "./browser/UserAgent"; import { expectFocusedElementHasAriaText, tabToAriaLabel } from "./aria/AriaUtils"; diff --git a/itest/src/Differencing.test.ts b/itest/src/Differencing.test.ts index 3778d8593..86d9d17f3 100644 --- a/itest/src/Differencing.test.ts +++ b/itest/src/Differencing.test.ts @@ -1,9 +1,17 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; -import { richtext, p, strong } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichText"; -import { Differencing, EOD } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/Differencing"; +import { + richtext, + p, + strong, + Differencing, + EOD, + blobReference, +} from "@coremedia-internal/ckeditor5-coremedia-example-data"; import "./expect/Expectations"; -import { PNG_BLUE_240x135 } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockFixtures"; -import { blobReference } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/Images"; +import { PNG_BLUE_240x135 } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); const xdiff = new Differencing(); diff --git a/itest/src/DocumentLists.test.ts b/itest/src/DocumentLists.test.ts index 3bacf0742..72072f53b 100644 --- a/itest/src/DocumentLists.test.ts +++ b/itest/src/DocumentLists.test.ts @@ -17,9 +17,9 @@ import { td, tr, ul, -} from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichText"; + blobReference, +} from "@coremedia-internal/ckeditor5-coremedia-example-data"; import "./expect/Expectations"; -import { blobReference } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/Images"; const olString = "ol"; const ulString = "ul"; diff --git a/itest/src/DragDrop.test.ts b/itest/src/DragDrop.test.ts index f17a737f6..e711bb816 100644 --- a/itest/src/DragDrop.test.ts +++ b/itest/src/DragDrop.test.ts @@ -1,18 +1,17 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichText"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import "./expect/Expectations"; -import { InputExampleElement } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin"; -import waitForExpect from "wait-for-expect"; -import { MockContentConfig } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockContent"; import { + InputExampleElement, + MockContentConfig, PNG_BLUE_240x135, PNG_GREEN_240x135, PNG_RED_240x135, -} from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockFixtures"; -import { IsDroppableEvaluationResult } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext"; -import { MockExternalContent } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin"; +, MockExternalContent } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import waitForExpect from "wait-for-expect"; +import { IsDroppableEvaluationResult } from "@coremedia/ckeditor5-coremedia-studio-integration"; import WindowBrowserAccessor from "./browser/WindowBrowserAccessor"; -import { IsLinkableEvaluationResult } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsLinkableDragAndDrop"; +import { IsLinkableEvaluationResult } from "@coremedia/ckeditor5-coremedia-studio-integration"; const oneLink: MockContentConfig[] = [ { diff --git a/itest/src/HelloEditor.test.ts b/itest/src/HelloEditor.test.ts index 662e31b01..9a7d63d9a 100644 --- a/itest/src/HelloEditor.test.ts +++ b/itest/src/HelloEditor.test.ts @@ -1,7 +1,7 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; import "./expect/Expectations"; -import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { a, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichText"; +import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { a, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; /** * Provides some first test mainly for demonstration purpose of the test API. diff --git a/itest/src/Images.test.ts b/itest/src/Images.test.ts index 4eea8f76e..e04e2cbc0 100644 --- a/itest/src/Images.test.ts +++ b/itest/src/Images.test.ts @@ -3,20 +3,24 @@ import { PNG_EMPTY_24x24, PNG_LOCK_24x24, PNG_RED_240x135, -} from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockFixtures"; +, MockContentConfig } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; import "./expect/Expectations"; import { ElementHandle } from "playwright-core"; -import { blobReference } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/Images"; -import { a, img, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichText"; +import { + blobReference, + a, + img, + p, + richtext, + linkReference +} from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { MockServiceAgentPluginWrapper } from "./aut/services/MockServiceAgentPluginWrapper"; -import { linkReference } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/Links"; import { ClassicEditorWrapper } from "./aut/ClassicEditorWrapper"; import ToolbarViewWrapper from "./aut/components/ToolbarViewWrapper"; import ImageContextualBalloonToolbar from "./aut/components/balloon/ImageContextualBalloonToolbar"; import LinkActionsViewWrapper from "./aut/components/balloon/LinkActionsViewWrapper"; import ContentLinkViewWrapper from "./aut/components/balloon/ContentLinkViewWrapper"; import waitForExpect from "wait-for-expect"; -import { MockContentConfig } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockContent"; describe("Image Features", () => { let application: ApplicationWrapper; diff --git a/itest/src/LinkBalloon.test.ts b/itest/src/LinkBalloon.test.ts index 56f04ad30..5ede6728d 100644 --- a/itest/src/LinkBalloon.test.ts +++ b/itest/src/LinkBalloon.test.ts @@ -1,7 +1,7 @@ import "./expect/Expectations"; import { ApplicationWrapper } from "./aut/ApplicationWrapper"; -import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { a, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { a, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; describe("Link Balloon", () => { let application: ApplicationWrapper; diff --git a/itest/src/LinkUserInteraction.test.ts b/itest/src/LinkUserInteraction.test.ts index b9a09c0da..fbd07c29a 100644 --- a/itest/src/LinkUserInteraction.test.ts +++ b/itest/src/LinkUserInteraction.test.ts @@ -1,6 +1,6 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; -import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { a, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { a, p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { MockServiceAgentPluginWrapper } from "./aut/services/MockServiceAgentPluginWrapper"; import "./expect/Expectations"; import { Page } from "playwright"; diff --git a/itest/src/PasteButton.test.ts b/itest/src/PasteButton.test.ts index 860a001e4..f521fa39a 100644 --- a/itest/src/PasteButton.test.ts +++ b/itest/src/PasteButton.test.ts @@ -1,14 +1,14 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichText"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import "./expect/Expectations"; -import { InputExampleElement } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin"; -import waitForExpect from "wait-for-expect"; -import { MockContentConfig } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockContent"; import { + InputExampleElement, + MockContentConfig, PNG_BLUE_240x135, PNG_GREEN_240x135, PNG_RED_240x135, -} from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockFixtures"; +} from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import waitForExpect from "wait-for-expect"; import { ctrlOrMeta } from "./browser/UserAgent"; const oneLink: MockContentConfig[] = [ diff --git a/itest/src/aut/ClassicEditorWrapper.ts b/itest/src/aut/ClassicEditorWrapper.ts index 207308176..db77e773b 100644 --- a/itest/src/aut/ClassicEditorWrapper.ts +++ b/itest/src/aut/ClassicEditorWrapper.ts @@ -3,7 +3,7 @@ import { EditorWrapper } from "./EditorWrapper"; import { ClassicEditor } from "ckeditor5"; import { CommandCollectionWrapper } from "./CommandCollectionWrapper"; import { EditorUIWrapper } from "./EditorUIWrapper"; -import type RichTextDataProcessor from "@coremedia/ckeditor5-coremedia-richtext/src/RichTextDataProcessor"; +import type { RichTextDataProcessor } from "@coremedia/ckeditor5-coremedia-richtext"; import { Locatable, visible } from "./Locatable"; import ContextualBalloonWrapper from "./components/balloon/ContextualBalloonWrapper"; @@ -14,14 +14,17 @@ import ContextualBalloonWrapper from "./components/balloon/ContextualBalloonWrap export class ClassicEditorWrapper extends EditorWrapper implements Locatable { readonly #elementId: string; readonly #page: Page; + constructor(instance: Promise>, page: Page, elementId: string) { super(instance); this.#page = page; this.#elementId = elementId; } + get locator(): Locator { return this.#page.locator(`#${this.#elementId}`); } + get visible(): Promise { return visible(this); } diff --git a/itest/src/aut/MockContentPluginWrapper.ts b/itest/src/aut/MockContentPluginWrapper.ts index f4abea1f7..e98566584 100644 --- a/itest/src/aut/MockContentPluginWrapper.ts +++ b/itest/src/aut/MockContentPluginWrapper.ts @@ -1,7 +1,6 @@ import { JSWrapper } from "./JSWrapper"; import { ClassicEditorWrapper } from "./ClassicEditorWrapper"; -import MockContentPlugin from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin"; -import { MockContentConfig } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockContent"; +import { MockContentPlugin, MockContentConfig } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; /** * Provides access to the `MockContentPlugin`. diff --git a/itest/src/aut/MockExternalContentPluginWrapper.ts b/itest/src/aut/MockExternalContentPluginWrapper.ts index b58a736ea..a8cc44281 100644 --- a/itest/src/aut/MockExternalContentPluginWrapper.ts +++ b/itest/src/aut/MockExternalContentPluginWrapper.ts @@ -1,8 +1,6 @@ import { JSWrapper } from "./JSWrapper"; import { ClassicEditorWrapper } from "./ClassicEditorWrapper"; -import MockExternalContentPlugin, { - MockExternalContent, -} from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin"; +import { MockExternalContentPlugin, MockExternalContent } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; /** * Provides access to the `MockExternalContentPlugin`. diff --git a/itest/src/aut/MockInputExamplePluginWrapper.ts b/itest/src/aut/MockInputExamplePluginWrapper.ts index d23d738ac..e4c55f97e 100644 --- a/itest/src/aut/MockInputExamplePluginWrapper.ts +++ b/itest/src/aut/MockInputExamplePluginWrapper.ts @@ -1,9 +1,13 @@ import { JSWrapper } from "./JSWrapper"; import { ClassicEditorWrapper } from "./ClassicEditorWrapper"; -import type MockInputExamplePlugin from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin"; -import type { InputExampleElement } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin"; -import type { IsDroppableEvaluationResult } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext"; -import type { IsLinkableEvaluationResult } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsLinkableDragAndDrop"; +import type { + InputExampleElement, + MockInputExamplePlugin, +} from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import type { + IsDroppableEvaluationResult, + IsLinkableEvaluationResult, +} from "@coremedia/ckeditor5-coremedia-studio-integration"; /** * Provides access to the `MockInputExamplePlugin`. diff --git a/itest/src/aut/components/balloon/LinkActionsViewWrapper.ts b/itest/src/aut/components/balloon/LinkActionsViewWrapper.ts index 301f58967..4dbc578a6 100644 --- a/itest/src/aut/components/balloon/LinkActionsViewWrapper.ts +++ b/itest/src/aut/components/balloon/LinkActionsViewWrapper.ts @@ -2,7 +2,7 @@ import ViewWrapper from "../ViewWrapper"; import { JSWrapper } from "../../JSWrapper"; import ContentLinkViewWrapper from "./ContentLinkViewWrapper"; -import { LinkActionsView } from "@coremedia/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkActionsView"; +import { LinkActionsView } from "@coremedia/ckeditor5-coremedia-link"; export default class LinkActionsViewWrapper extends JSWrapper { getContentLinkView(): ContentLinkViewWrapper { diff --git a/itest/src/aut/services/BlocklistServiceWrapper.ts b/itest/src/aut/services/BlocklistServiceWrapper.ts index 39840d8e3..9d8d397a9 100644 --- a/itest/src/aut/services/BlocklistServiceWrapper.ts +++ b/itest/src/aut/services/BlocklistServiceWrapper.ts @@ -1,5 +1,5 @@ import { JSWrapper } from "../JSWrapper"; -import { MockBlocklistService } from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService"; +import { MockBlocklistService } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; import { MockServiceAgentPluginWrapper } from "./MockServiceAgentPluginWrapper"; export class BlocklistServiceWrapper extends JSWrapper { diff --git a/itest/src/aut/services/MockServiceAgentPluginWrapper.ts b/itest/src/aut/services/MockServiceAgentPluginWrapper.ts index fa2b837cb..a777eee3c 100644 --- a/itest/src/aut/services/MockServiceAgentPluginWrapper.ts +++ b/itest/src/aut/services/MockServiceAgentPluginWrapper.ts @@ -1,6 +1,6 @@ import { JSWrapper } from "../JSWrapper"; import { ClassicEditorWrapper } from "../ClassicEditorWrapper"; -import type MockServiceAgentPlugin from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin"; +import type { MockServiceAgentPlugin } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; import { WorkAreaServiceWrapper } from "./WorkAreaServiceWrapper"; import { BlocklistServiceWrapper } from "./BlocklistServiceWrapper"; diff --git a/itest/src/aut/services/WorkAreaServiceWrapper.ts b/itest/src/aut/services/WorkAreaServiceWrapper.ts index 9ac5939dc..ff924db4f 100644 --- a/itest/src/aut/services/WorkAreaServiceWrapper.ts +++ b/itest/src/aut/services/WorkAreaServiceWrapper.ts @@ -1,5 +1,5 @@ import { JSWrapper } from "../JSWrapper"; -import MockWorkAreaService from "@coremedia/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService"; +import { MockWorkAreaService } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; import { MockServiceAgentPluginWrapper } from "./MockServiceAgentPluginWrapper"; export class WorkAreaServiceWrapper extends JSWrapper { diff --git a/package.json b/package.json index 6eda15ff1..6fd25c05f 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "rimraf": "^6.0.1", "semver": "^7.6.2", "typedoc": "^0.25.13", - "typescript": "^5.4.5", + "typescript": "5.4.5", "validate-peer-dependencies": "^2.2.0" } } diff --git a/packages/ckeditor5-bbcode/package.json b/packages/ckeditor5-bbcode/package.json index c25701408..96fd80af2 100644 --- a/packages/ckeditor5-bbcode/package.json +++ b/packages/ckeditor5-bbcode/package.json @@ -21,25 +21,27 @@ "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", - "jest": "jest", + "jest": "jest --passWithNoTests", "jest:coverage": "jest --collect-coverage", "npm-check-updates": "npm-check-updates --upgrade" }, - "devDependencies": { - "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@coremedia/ckeditor5-dom-support": "^20.1.0", - "@types/jest": "^29.5.12", - "ckeditor5": "^42.0.2", - "jest": "^29.7.0", - "jest-each": "^29.7.0", - "jest-xml-matcher": "^1.2.0", - "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } }, - "main": "./src/index.ts", + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src", @@ -56,6 +58,18 @@ "@bbob/preset-html5": "^3.0.2", "@coremedia/ckeditor5-common": "^20.1.0", "@coremedia/ckeditor5-core-common": "^20.1.0", + "@coremedia/ckeditor5-dom-support": "^20.1.0", "@coremedia/ckeditor5-logging": "^20.1.0" + }, + "devDependencies": { + "ckeditor5": "^42.0.2", + "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", + "@types/jest": "^29.5.12", + "jest": "^29.7.0", + "jest-each": "^29.7.0", + "rimraf": "^6.0.1", + "ts-jest": "^29.2.4", + "typescript": "5.4.5" } } diff --git a/packages/ckeditor5-bbcode/src/augmentation.ts b/packages/ckeditor5-bbcode/src/augmentation.ts index b7e78d0aa..7b134a4b5 100644 --- a/packages/ckeditor5-bbcode/src/augmentation.ts +++ b/packages/ckeditor5-bbcode/src/augmentation.ts @@ -1,4 +1,5 @@ -import { BBCode } from "./index"; +import { BBCode } from "./BBCode"; + declare module "ckeditor5" { interface PluginsMap { [BBCode.pluginName]: BBCode; diff --git a/packages/ckeditor5-bbcode/tsconfig.json b/packages/ckeditor5-bbcode/tsconfig.json index 6e178d022..855987a19 100644 --- a/packages/ckeditor5-bbcode/tsconfig.json +++ b/packages/ckeditor5-bbcode/tsconfig.json @@ -3,15 +3,26 @@ "include": [ "./__tests__", "./src", - "./types", + "./types" ], "compilerOptions": { + "outDir": "./dist/src", "paths": { - "@bbob/core/*": ["./types/@bbob/core/*"], - "@bbob/html/*": ["./types/@bbob/html/*"], - "@bbob/plugin-helper/*": ["./types/@bbob/plugin-helper/*"], - "@bbob/preset/*": ["./types/@bbob/preset/*"], - "@bbob/preset-html5/*": ["./types/@bbob/preset-html5/*"], + "@bbob/core/*": [ + "./types/@bbob/core/*" + ], + "@bbob/html/*": [ + "./types/@bbob/html/*" + ], + "@bbob/plugin-helper/*": [ + "./types/@bbob/plugin-helper/*" + ], + "@bbob/preset/*": [ + "./types/@bbob/preset/*" + ], + "@bbob/preset-html5/*": [ + "./types/@bbob/preset-html5/*" + ] } } } diff --git a/packages/ckeditor5-common/package.json b/packages/ckeditor5-common/package.json index 6d431778c..eac377966 100644 --- a/packages/ckeditor5-common/package.json +++ b/packages/ckeditor5-common/package.json @@ -11,23 +11,38 @@ "keywords": [ "coremedia" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" ], "license": "Apache-2.0", "devDependencies": { + "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", - "ckeditor5": "^42.0.2", "jest": "^29.7.0", - "jest-config": "^29.7.0", + "jest-each": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "ts-jest": "^29.2.4", + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" diff --git a/packages/ckeditor5-common/src/index.ts b/packages/ckeditor5-common/src/index.ts index d0d1691dd..ef2fcf5cf 100644 --- a/packages/ckeditor5-common/src/index.ts +++ b/packages/ckeditor5-common/src/index.ts @@ -8,3 +8,4 @@ export { type Raw, isRaw } from "./AdvancedTypes"; export { type RequireSelected } from "./RequireSelected"; export { type RequiredNonNull, requireNonNulls, type RequiredNonNullPropertiesMissingError } from "./RequiredNonNull"; export { capitalize } from "./Strings"; +export { IncompatibleInternalApiUsageError } from "./IncompatibleInternalApiUsageError"; diff --git a/packages/ckeditor5-common/tsconfig.json b/packages/ckeditor5-common/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-common/tsconfig.json +++ b/packages/ckeditor5-common/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-core-common/package.json b/packages/ckeditor5-core-common/package.json index 537534102..8a0485d90 100644 --- a/packages/ckeditor5-core-common/package.json +++ b/packages/ckeditor5-core-common/package.json @@ -14,11 +14,23 @@ "ckeditor5", "ckeditor5-core" ], - "type": "module", - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" @@ -31,7 +43,7 @@ "jest": "^29.7.0", "jest-config": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" diff --git a/packages/ckeditor5-core-common/src/index.ts b/packages/ckeditor5-core-common/src/index.ts index eb495374b..43c6916ff 100644 --- a/packages/ckeditor5-core-common/src/index.ts +++ b/packages/ckeditor5-core-common/src/index.ts @@ -10,4 +10,12 @@ export { type InitInformation, type OnMissingPlugin, } from "./Plugins"; -export { addTranslations, openLink } from "../../ckeditor5-core-common/src/utils"; +export { addTranslations, openLink } from "./utils"; +export { + CommandHandler, + disableCommand, + enableCommand, + ifCommand, + optionalCommandNotFound, + recommendCommand, +} from "./Commands"; diff --git a/packages/ckeditor5-core-common/tsconfig.json b/packages/ckeditor5-core-common/tsconfig.json index 92989e37d..baaaaf99b 100644 --- a/packages/ckeditor5-core-common/tsconfig.json +++ b/packages/ckeditor5-core-common/tsconfig.json @@ -1,6 +1,9 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ - "./src", + "./src" ] } diff --git a/packages/ckeditor5-coremedia-blocklist/package.json b/packages/ckeditor5-coremedia-blocklist/package.json index ff47fb04c..455419cc3 100644 --- a/packages/ckeditor5-coremedia-blocklist/package.json +++ b/packages/ckeditor5-coremedia-blocklist/package.json @@ -17,7 +17,7 @@ ], "license": "Apache-2.0", "scripts": { - "build": "tsc --project ./tsconfig.release.json", + "build": "tsc --project ./tsconfig.release.json && copyfiles -u 1 theme/* theme/**/* dist/theme", "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", @@ -25,10 +25,23 @@ "jest:coverage": "jest --collect-coverage --passWithNoTests", "npm-check-updates": "npm-check-updates --upgrade" }, - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src", @@ -36,17 +49,18 @@ ], "devDependencies": { "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "@coremedia/service-agent": "^1.1.5", "@types/jest": "^29.5.12", "ckeditor5": "^42.0.2", + "copyfiles": "^2.4.1", "jest": "^29.7.0", "rimraf": "^6.0.1", "rxjs": "^7.8.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1" + "@coremedia/service-agent": "^1.1.5" }, "dependencies": { "@coremedia/ckeditor5-core-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-blocklist/src/blocklistediting.ts b/packages/ckeditor5-coremedia-blocklist/src/blocklistediting.ts index 11e94e067..f5a08ef26 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/blocklistediting.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/blocklistediting.ts @@ -1,15 +1,15 @@ import BlocklistCommand, { BLOCKLIST_COMMAND_NAME } from "./blocklistCommand"; -import { Plugin, Collection } from "ckeditor5"; +import { Collection, Plugin } from "ckeditor5"; import { createSearchCallback, onDocumentChange, ResultType, updateFindResultFromRange } from "./blocklistChangesUtils"; import { serviceAgent } from "@coremedia/service-agent"; import { Subscription } from "rxjs"; import { BlocklistService, createBlocklistServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { getMarkerDetails, removeMarkerDetails } from "./blocklistMarkerUtils"; + export default class BlocklistEditing extends Plugin { static readonly pluginName: string = "BlocklistEditing"; - static readonly #logger: Logger = LoggerProvider.getLogger(BlocklistEditing.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("BlocklistEditing"); /** * A list of markers, used to highlight blocked words in the editor. @@ -34,6 +34,7 @@ export default class BlocklistEditing extends Plugin { * @private */ #blocklistServiceSubscription: Pick | undefined = undefined; + init(): void { const editor = this.editor; editor.commands.add(BLOCKLIST_COMMAND_NAME, new BlocklistCommand(editor)); @@ -50,6 +51,7 @@ export default class BlocklistEditing extends Plugin { // Connect to the BlockList Service to retrieve the list of words to highlight this.#subscribeToBlocklistService(); } + #subscribeToBlocklistService(): void { const onServiceRegisteredFunction = (services: BlocklistService[]): void => { // No BlocklistService registered yet, no need to compute further @@ -76,6 +78,7 @@ export default class BlocklistEditing extends Plugin { .observeServices(createBlocklistServiceDescriptor()) .subscribe(onServiceRegisteredFunction); } + override destroy() { if (this.#blocklistServiceSubscription) { this.#blocklistServiceSubscription.unsubscribe(); diff --git a/packages/ckeditor5-coremedia-blocklist/src/blocklistui.ts b/packages/ckeditor5-coremedia-blocklist/src/blocklistui.ts index ddd29e448..a7b4eadc5 100644 --- a/packages/ckeditor5-coremedia-blocklist/src/blocklistui.ts +++ b/packages/ckeditor5-coremedia-blocklist/src/blocklistui.ts @@ -1,4 +1,4 @@ -import { ifCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; +import { ifCommand } from "@coremedia/ckeditor5-core-common"; import blocklistIcon from "../theme/icons/blocklist.svg"; import { Plugin, @@ -18,6 +18,7 @@ import BlocklistActionsView from "./ui/blocklistActionsView"; import "./lang/blocklist"; import { UnblockEvent } from "./ui/blockedWordView"; import BlocklistEditing from "./blocklistediting"; + const BLOCKLIST_KEYSTROKE = "Ctrl+Shift+B"; /** @@ -33,6 +34,7 @@ export default class Blocklistui extends Plugin { blocklistActionsView?: BlocklistActionsView; blocklistCommand: BlocklistCommand | undefined; #balloon: ContextualBalloon | undefined = undefined; + async init(): Promise { const editor = this.editor; this.blocklistCommand = (await ifCommand(editor, BLOCKLIST_COMMAND_NAME)) as BlocklistCommand; @@ -52,6 +54,7 @@ export default class Blocklistui extends Plugin { // listen to changes in blocklistCommand and refresh the list in the blocklist view accordingly this.blocklistCommand.on("change:value", this.blocklistActionsView.refreshList.bind(this.blocklistActionsView)); } + #getBlocklistActionsView(): BlocklistActionsView { if (!this.blocklistActionsView) { this.blocklistActionsView = this.#createBlocklistActionsView(); @@ -232,6 +235,7 @@ export default class Blocklistui extends Plugin { position: this.#getBalloonPositionData(), }); } + #getBalloonPositionData(): Partial { const view = this.editor.editing.view; const viewDocument = view.document; diff --git a/packages/ckeditor5-coremedia-blocklist/tsconfig.json b/packages/ckeditor5-coremedia-blocklist/tsconfig.json index 3c84dda6c..fd7844f29 100644 --- a/packages/ckeditor5-coremedia-blocklist/tsconfig.json +++ b/packages/ckeditor5-coremedia-blocklist/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__mocks__", "./__tests__", diff --git a/packages/ckeditor5-coremedia-content-clipboard/package.json b/packages/ckeditor5-coremedia-content-clipboard/package.json index 1a7863817..aa2f243f9 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/package.json +++ b/packages/ckeditor5-coremedia-content-clipboard/package.json @@ -16,7 +16,7 @@ "version": "20.1.0", "license": "Apache-2.0", "scripts": { - "build": "tsc --project ./tsconfig.release.json", + "build": "tsc --project ./tsconfig.release.json && copyfiles -u 1 theme/* theme/**/* dist/theme", "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", @@ -27,19 +27,33 @@ "devDependencies": { "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "@coremedia/service-agent": "^1.1.5", "@types/jest": "^29.5.12", + "copyfiles": "^2.4.1", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", "rxjs": "^7.8.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" + }, + "main": "./dist/src/index.js", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } }, - "main": "./src/index.ts", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src", @@ -47,7 +61,7 @@ ], "peerDependencies": { "ckeditor5": "^42.0.2", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1" + "@coremedia/service-agent": "^1.1.5" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts index 0cbf9dd77..d4cabb44d 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboard.ts @@ -1,7 +1,6 @@ /* eslint no-null/no-null: off */ -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { Clipboard, ClipboardContentInsertionEvent, @@ -23,16 +22,16 @@ import { ViewRange, } from "ckeditor5"; import ContentClipboardEditing from "./ContentClipboardEditing"; -import { InitInformation, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { InitInformation, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { disableUndo, UndoSupport } from "./integrations/Undo"; -import { isRaw } from "@coremedia/ckeditor5-common/src/AdvancedTypes"; +import { isRaw } from "@coremedia/ckeditor5-common"; import { insertContentMarkers } from "./ContentMarkers"; import { getEvaluationResult, isDroppable, IsDroppableEvaluationResult, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext"; -import { receiveDraggedItemsFromDataTransfer } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/DragDropServiceWrapper"; + receiveDraggedItemsFromDataTransfer, +} from "@coremedia/ckeditor5-coremedia-studio-integration"; const PLUGIN_NAME = "ContentClipboardPlugin"; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing.ts index 72ea3b8d2..35d15637a 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing.ts @@ -5,7 +5,8 @@ import { addContentMarkerConversion, removeContentMarkerConversion } from "./con import DataToModelMechanism from "./DataToModelMechanism"; import ContentToModelRegistry, { CreateModelFunctionCreator } from "./ContentToModelRegistry"; import { UndoSupport } from "./integrations/Undo"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; + const PLUGIN_NAME = "ContentClipboardEditing"; /** @@ -35,11 +36,13 @@ export default class ContentClipboardEditing extends Plugin { * @private */ readonly #pendingMarkerNames = new Array(); + init(): Promise | void { const initInformation = reportInitStart(this); this.#defineConverters(); reportInitEnd(initInformation); } + #defineConverters(): void { const editor = this.editor; const conversion = editor.conversion; @@ -48,6 +51,7 @@ export default class ContentClipboardEditing extends Plugin { dispatcher.on(ContentClipboardEditing.#CONTENT_INPUT_REMOVE_MARKER_EVENT, removeContentMarkerConversion); }); } + #onAddMarker(editor: Editor) { return addContentMarkerConversion(this.#pendingMarkerNames, (markerData: MarkerData): void => { DataToModelMechanism.triggerLoadAndWriteToModel(editor, this.#pendingMarkerNames, markerData); diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/ContentMarkers.ts b/packages/ckeditor5-coremedia-content-clipboard/src/ContentMarkers.ts index 46496e97c..6ac22d060 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/ContentMarkers.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/ContentMarkers.ts @@ -1,9 +1,13 @@ import ContentInputDataCache, { ContentInputData, InsertionContext } from "./ContentInputDataCache"; import { ContentClipboardMarkerDataUtils } from "./ContentClipboardMarkerDataUtils"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { serviceAgent } from "@coremedia/service-agent"; -import { createRichtextConfigurationServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/RichtextConfigurationServiceDescriptor"; -import type { Editor, Range as ModelRange, Writer, Model } from "ckeditor5"; +import { + createRichtextConfigurationServiceDescriptor, + RichtextConfigurationService, +} from "@coremedia/ckeditor5-coremedia-studio-integration"; +import type { Editor, Model, Range as ModelRange, Writer } from "ckeditor5"; + const logger = LoggerProvider.getLogger("ContentMarkers"); /** @@ -54,7 +58,7 @@ export const insertContentMarkers = (editor: Editor, targetRange: ModelRange, co // Add a content marker for each item. contentUris.forEach((contentUri: string, index: number): void => { serviceAgent - .fetchService(createRichtextConfigurationServiceDescriptor()) + .fetchService(createRichtextConfigurationServiceDescriptor()) .then(async (value) => { const embeddableType = await value.isEmbeddableType(contentUri); const contentInputData = createContentInputData( diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/DataToModelMechanism.ts b/packages/ckeditor5-coremedia-content-clipboard/src/DataToModelMechanism.ts index 109f75f10..fe0052d25 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/DataToModelMechanism.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/DataToModelMechanism.ts @@ -1,19 +1,22 @@ import { ContentClipboardMarkerDataUtils, MarkerData } from "./ContentClipboardMarkerDataUtils"; import ContentInputDataCache, { ContentInputData } from "./ContentInputDataCache"; import { serviceAgent } from "@coremedia/service-agent"; -import { Editor, Writer, Node, Position, Range } from "ckeditor5"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Editor, Node, Position, Range, Writer } from "ckeditor5"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import MarkerRepositionUtil from "./MarkerRepositionUtil"; -import { createRichtextConfigurationServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/RichtextConfigurationServiceDescriptor"; -import ContentToModelRegistry, { CreateModelFunction } from "./ContentToModelRegistry"; -import { enableUndo, UndoSupport } from "./integrations/Undo"; import { + ContentImportService, ContentReferenceResponse, + createContentImportServiceDescriptor, createContentReferenceServiceDescriptor, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; -import { createContentImportServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ContentImportService"; -import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common/src/Plugins"; + createRichtextConfigurationServiceDescriptor, + IContentReferenceService, + RichtextConfigurationService, +} from "@coremedia/ckeditor5-coremedia-studio-integration"; +import ContentToModelRegistry, { CreateModelFunction } from "./ContentToModelRegistry"; +import { enableUndo, UndoSupport } from "./integrations/Undo"; +import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common"; + const UTILITY_NAME = "DataToModelMechanism"; /** @@ -89,7 +92,7 @@ export default class DataToModelMechanism { // model stuff. Take a promise and execute writeItemToModel. const uri = contentInputData.itemContext.uri; serviceAgent - .fetchService(createContentReferenceServiceDescriptor()) + .fetchService(createContentReferenceServiceDescriptor()) .then((service) => service.getContentReference(uri)) .then(async (response: ContentReferenceResponse) => { if (response.contentUri) { @@ -99,7 +102,9 @@ export default class DataToModelMechanism { if (!response.externalUriInformation) { return Promise.reject("No content found and uri is not importable."); } - const contentImportService = await serviceAgent.fetchService(createContentImportServiceDescriptor()); + const contentImportService = await serviceAgent.fetchService( + createContentImportServiceDescriptor(), + ); if (response.externalUriInformation.contentUri) { //The external content has been imported previously. A content representation already exists. return Promise.resolve(response.externalUriInformation.contentUri); @@ -171,7 +176,7 @@ export default class DataToModelMechanism { // If the studio response delivers another type, then link or image, // it would be possible to provide another model rendering. return serviceAgent - .fetchService(createRichtextConfigurationServiceDescriptor()) + .fetchService(createRichtextConfigurationServiceDescriptor()) .then((service) => service.isEmbeddableType(contentUri)) .then((isEmbeddable) => (isEmbeddable ? "image" : "link")); } @@ -188,7 +193,7 @@ export default class DataToModelMechanism { editor.model.markers.getMarkersGroup(ContentClipboardMarkerDataUtils.CONTENT_INPUT_MARKER_PREFIX), ); if (markers.length === 0) { - const undoSupport = getOptionalPlugin(editor, UndoSupport, (pluginName) => + const undoSupport = getOptionalPlugin(editor, UndoSupport, (pluginName: string) => this.#logger.warn(`Unable to re-enable UndoCommand because plugin ${pluginName} does not exist`), ); if (undoSupport) { diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/converters.ts b/packages/ckeditor5-coremedia-content-clipboard/src/converters.ts index 5a41c4177..6b89f10e0 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/converters.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/converters.ts @@ -3,12 +3,14 @@ import ContentInputDataCache from "./ContentInputDataCache"; import { ContentClipboardMarkerDataUtils, MarkerData } from "./ContentClipboardMarkerDataUtils"; import { EventInfo, DowncastConversionApi, Item as ModelItem, Range as ModelRange } from "ckeditor5"; + export interface AddMarkerEventData { markerName: string; range?: ModelRange; markerRange: ModelRange; item: ModelItem; } + export interface RemoveMarkerEventData { markerName: string; markerRange: ModelRange; @@ -30,43 +32,43 @@ export interface RemoveMarkerEventData { */ export const addContentMarkerConversion = (pendingMarkerNames: string[], callback: (markerData: MarkerData) => void) => - (evt: EventInfo, data: AddMarkerEventData, conversionApi: DowncastConversionApi): void => { - if (pendingMarkerNames.includes(data.markerName)) { + (evt: EventInfo, data: AddMarkerEventData, conversionApi: DowncastConversionApi): void => { + if (pendingMarkerNames.includes(data.markerName)) { + evt.stop(); + return; + } + pendingMarkerNames.push(data.markerName); + const viewPosition = conversionApi.mapper.toViewPosition(data.markerRange.start); + const contentInputData = ContentInputDataCache.lookupData(data.markerName); + if (!contentInputData) { + return; + } + /* + * Possible extension point. Do we want to fetch the object type here to + * render something more specific? + * + * The problem might be that we are asynchronous and that the spinner has to + * be shown before all requests are done. It might be possible to show a + * spinner until the first request is done and then render something more + * specific + * + * What would be the allowed specific thing? CSS-Class or a whole view? + * I guess we are not that flexible and a css class might be enough. We can + * simply add classes to the view container. + */ + const loadMaskClasses = ["cm-load-mask"]; + if (contentInputData.itemContext.isInline) { + loadMaskClasses.push("cm-load-mask--inline"); + } + const viewContainer = conversionApi.writer.createUIElement("div", { + class: loadMaskClasses.join(" ") + }); + conversionApi.writer.insert(viewPosition, viewContainer); + conversionApi.mapper.bindElementToMarker(viewContainer, data.markerName); + const markerData = ContentClipboardMarkerDataUtils.splitMarkerName(data.markerName); + callback(markerData); evt.stop(); - return; - } - pendingMarkerNames.push(data.markerName); - const viewPosition = conversionApi.mapper.toViewPosition(data.markerRange.start); - const contentInputData = ContentInputDataCache.lookupData(data.markerName); - if (!contentInputData) { - return; - } - /* - * Possible extension point. Do we want to fetch the object type here to - * render something more specific? - * - * The problem might be that we are asynchronous and that the spinner has to - * be shown before all requests are done. It might be possible to show a - * spinner until the first request is done and then render something more - * specific - * - * What would be the allowed specific thing? CSS-Class or a whole view? - * I guess we are not that flexible and a css class might be enough. We can - * simply add classes to the view container. - */ - const loadMaskClasses = ["cm-load-mask"]; - if (contentInputData.itemContext.isInline) { - loadMaskClasses.push("cm-load-mask--inline"); - } - const viewContainer = conversionApi.writer.createUIElement("div", { - class: loadMaskClasses.join(" "), - }); - conversionApi.writer.insert(viewPosition, viewContainer); - conversionApi.mapper.bindElementToMarker(viewContainer, data.markerName); - const markerData = ContentClipboardMarkerDataUtils.splitMarkerName(data.markerName); - callback(markerData); - evt.stop(); - }; + }; /** * Conversion function used in DowncastDispatcher event listeners. @@ -82,17 +84,17 @@ export const addContentMarkerConversion = export const removeContentMarkerConversion = ( evt: EventInfo, data: RemoveMarkerEventData, - conversionApi: DowncastConversionApi, + conversionApi: DowncastConversionApi ): void => { const elements = conversionApi.mapper.markerNameToElements(data.markerName); if (!elements) { return; } - elements.forEach((element) => { + for (const element of elements) { conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName); const range = conversionApi.writer.createRangeOn(element); conversionApi.writer.clear(range, element); - }); + } conversionApi.writer.clearClonedElementsGroup(data.markerName); evt.stop(); }; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/index.ts b/packages/ckeditor5-coremedia-content-clipboard/src/index.ts index d5e5910ed..8a2532d83 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/index.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/index.ts @@ -9,5 +9,9 @@ export { default as PasteContentEditing } from "./paste/PasteContentEditing"; export { default as PasteContentPlugin } from "./paste/PasteContentPlugin"; export { default as PasteContentUI } from "./paste/PasteContentUI"; export { PasteContentCommand } from "./paste/PasteContentCommand"; +export { + CreateModelFunction, + CreateModelFunctionCreator +} from "./ContentToModelRegistry"; import "./augmentation"; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/integrations/Undo.ts b/packages/ckeditor5-coremedia-content-clipboard/src/integrations/Undo.ts index 624b97d9d..c5cc83fc5 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/integrations/Undo.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/integrations/Undo.ts @@ -5,8 +5,10 @@ import { enableCommand, ifCommand, optionalCommandNotFound, -} from "@coremedia/ckeditor5-core-common/src/Commands"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; + reportInitEnd, + reportInitStart, +} from "@coremedia/ckeditor5-core-common"; + const PLUGIN_NAME = "CoreMediaContentClipboardUndoSupport"; /** @@ -23,6 +25,7 @@ export class UndoSupport extends Plugin { * Flag to signal, if supported plugin is available or not. */ #enabled = false; + init(): void { const { editor } = this; const initInformation = reportInitStart(this); @@ -49,6 +52,7 @@ export class UndoSupport extends Plugin { } this.#applyToCommands(UndoSupport.#enableHandler); } + #applyToCommands(handler: CommandHandler): void { const { editor } = this; const commandNames = UndoSupport.#commandNames; diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentCommand.ts b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentCommand.ts index 7f9638650..3da9b8477 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentCommand.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentCommand.ts @@ -1,14 +1,13 @@ import { Command, Editor } from "ckeditor5"; import { serviceAgent } from "@coremedia/service-agent"; -import { createClipboardServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ClipboardServiceDesriptor"; -import ClipboardService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ClipboardService"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import ClipboardItemRepresentation from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ClipboardItemRepresentation"; +import { ClipboardService, createClipboardServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; +import { ClipboardItemRepresentation } from "@coremedia/ckeditor5-coremedia-studio-integration"; import type { Subscription } from "rxjs"; -import { isUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { createRichtextConfigurationServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/RichtextConfigurationServiceDescriptor"; +import { isUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { createRichtextConfigurationServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { insertContentMarkers } from "../ContentMarkers"; -import { toContentUris } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ClipboardServiceUtil"; +import { toContentUris } from "@coremedia/ckeditor5-coremedia-studio-integration"; /** * Command to insert Content from the ClipboardService into the document at the actual selection. @@ -19,6 +18,7 @@ import { toContentUris } from "@coremedia/ckeditor5-coremedia-studio-integration export class PasteContentCommand extends Command { readonly #logger = LoggerProvider.getLogger("PasteContentCommand"); readonly #serviceRegisteredSubscription: Pick | null; + constructor(editor: Editor) { super(editor); this.isEnabled = false; @@ -42,6 +42,7 @@ export class PasteContentCommand extends Command { .observeServices(createClipboardServiceDescriptor()) .subscribe(onServiceRegisteredFunction); } + async #initializeWithClipboardService(clipboardService: ClipboardService): Promise { const initialItems = await clipboardService.getItems(); // noinspection JSConstantReassignment bad types @@ -62,6 +63,7 @@ export class PasteContentCommand extends Command { // Empty implementation because the overridden implementation always sets isEnabled=true // eslint-disable-next-line @typescript-eslint/no-empty-function override refresh(): void {} + override execute(): void { serviceAgent .fetchService(createClipboardServiceDescriptor()) @@ -78,6 +80,7 @@ export class PasteContentCommand extends Command { this.#logger.warn("Error occurred during insertion of markers for contents", reason); }); } + static async calculateEnabledState(itemRepresentations: ClipboardItemRepresentation[]): Promise { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call const uris: string[] = await toContentUris(itemRepresentations); @@ -91,9 +94,10 @@ export class PasteContentCommand extends Command { const pastableStates = await PasteContentCommand.resolvePastableStates(uris); return pastableStates.every((isPastable) => isPastable); } + static async resolvePastableStates(uris: string[]): Promise { const richtextConfigurationService = await serviceAgent.fetchService( - createRichtextConfigurationServiceDescriptor(), + createRichtextConfigurationServiceDescriptor() ); const pastableStatePromises: Promise[] = uris.map(async (uri): Promise => { const isLinkable = await richtextConfigurationService.hasLinkableType(uri); diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentEditing.ts b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentEditing.ts index b2bd8dfe4..b37371e83 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentEditing.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentEditing.ts @@ -1,9 +1,11 @@ import { Plugin } from "ckeditor5"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { PasteContentCommand } from "./PasteContentCommand"; + export default class PasteContentEditing extends Plugin { static readonly pluginName = "pasteContentEditing"; static readonly pasteContentCommand = "pasteContentCommand"; + init() { const initInformation = reportInitStart(this); this.editor.commands.add(PasteContentEditing.pasteContentCommand, new PasteContentCommand(this.editor)); diff --git a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts index 3d836d710..859930ad4 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts +++ b/packages/ckeditor5-coremedia-content-clipboard/src/paste/PasteContentUI.ts @@ -1,7 +1,7 @@ import { ButtonView, Editor, Plugin } from "ckeditor5"; import pasteIcon from "../../theme/icons/paste.svg"; import "../lang/paste"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; export default class PasteContentUI extends Plugin { static readonly pluginName = "pasteContentUI"; @@ -12,7 +12,7 @@ export default class PasteContentUI extends Plugin { const t = editor.t; const pasteContentCommand = editor.commands.get("pasteContentCommand"); if (!pasteContentCommand) { - throw new Error('The command "pasteContent" is required.'); + throw new Error("The command \"pasteContent\" is required."); } const PASTE_KEYSTROKE = "Ctrl+Shift+P"; editor.keystrokes.set(PASTE_KEYSTROKE, (keyEvtData, cancel) => { diff --git a/packages/ckeditor5-coremedia-content-clipboard/tsconfig.json b/packages/ckeditor5-coremedia-content-clipboard/tsconfig.json index b3fab7184..cce9759ee 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/tsconfig.json +++ b/packages/ckeditor5-coremedia-content-clipboard/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./src", "./theme", diff --git a/packages/ckeditor5-coremedia-content/package.json b/packages/ckeditor5-coremedia-content/package.json index 6be2d5d9e..9bae52698 100644 --- a/packages/ckeditor5-coremedia-content/package.json +++ b/packages/ckeditor5-coremedia-content/package.json @@ -13,10 +13,17 @@ "ckeditor", "ckeditor5" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "main": "./dist/src/index.js", + "types": "./dist/src/index.d.ts" }, "files": [ "/src" @@ -25,12 +32,12 @@ "devDependencies": { "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "@coremedia/service-agent": "^1.1.5", "@types/jest": "^29.5.12", "jest": "^29.7.0", "jest-config": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "dependencies": { "@coremedia/ckeditor5-coremedia-studio-integration": "^20.1.0", @@ -38,7 +45,7 @@ }, "peerDependencies": { "ckeditor5": "^42.0.2", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1" + "@coremedia/service-agent": "^1.1.5" }, "scripts": { "clean": "pnpm clean:src && pnpm clean:dist", diff --git a/packages/ckeditor5-coremedia-content/src/OpenInTab.ts b/packages/ckeditor5-coremedia-content/src/OpenInTab.ts index 7ab9a79fb..0666da21c 100644 --- a/packages/ckeditor5-coremedia-content/src/OpenInTab.ts +++ b/packages/ckeditor5-coremedia-content/src/OpenInTab.ts @@ -1,6 +1,6 @@ -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { serviceAgent } from "@coremedia/service-agent"; -import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/WorkAreaServiceDescriptor"; +import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; const logger = LoggerProvider.getLogger("OpenInTab"); @@ -22,7 +22,7 @@ export interface OpenEntitiesInTabsResult { */ export const emptyOpenEntitiesInTabsResult: OpenEntitiesInTabsResult = { accepted: [], - rejected: [], + rejected: [] }; /** @@ -40,7 +40,7 @@ export const canAllBeOpenedInTab = async (...uriPaths: string[]): Promise { logger.debug(`Failed to query "canBeOpenedInTab" for ${uriPaths}. Default to false.`, error); return false; - }), + }) ); }; @@ -65,8 +65,8 @@ export const openEntitiesInTabs = async (...uriPaths: string[]): Promise => workAreaService.openEntitiesInTabs(uriPaths, false, { additionalOptions: { - focusTab: true, - }, - }), + focusTab: true + } + }) ); }; diff --git a/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts b/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts index 5e78fe1e4..90a639099 100644 --- a/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts +++ b/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts @@ -3,9 +3,9 @@ import { isModelUriPath, isUriPath, requireContentUriPath, - UriPath, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; + UriPath +} from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { canBeOpenedInTab, openEntitiesInTabs, OpenEntitiesInTabsResult } from "../OpenInTab"; // noinspection JSConstantReassignment diff --git a/packages/ckeditor5-coremedia-content/tsconfig.json b/packages/ckeditor5-coremedia-content/tsconfig.json index 92989e37d..baaaaf99b 100644 --- a/packages/ckeditor5-coremedia-content/tsconfig.json +++ b/packages/ckeditor5-coremedia-content/tsconfig.json @@ -1,6 +1,9 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ - "./src", + "./src" ] } diff --git a/packages/ckeditor5-coremedia-differencing/__tests__/integrations/RuleBasedHtmlDomConverters.ts b/packages/ckeditor5-coremedia-differencing/__tests__/integrations/RuleBasedHtmlDomConverters.ts index d1d530cad..7d2895003 100644 --- a/packages/ckeditor5-coremedia-differencing/__tests__/integrations/RuleBasedHtmlDomConverters.ts +++ b/packages/ckeditor5-coremedia-differencing/__tests__/integrations/RuleBasedHtmlDomConverters.ts @@ -1,6 +1,11 @@ -import { byPriority, parseRule, RuleConfig, RuleSection } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { RuleBasedConversionListener } from "@coremedia/ckeditor5-dom-converter/src/RuleBasedConversionListener"; -import { HtmlDomConverter } from "@coremedia/ckeditor5-dom-converter/src/HtmlDomConverter"; +import { + byPriority, + parseRule, + RuleConfig, + RuleSection, + RuleBasedConversionListener, + HtmlDomConverter, +} from "@coremedia/ckeditor5-dom-converter"; /** * Lightweight "data processor" just providing access to the DOM Converter API. diff --git a/packages/ckeditor5-coremedia-differencing/__tests__/integrations/RulesTester.ts b/packages/ckeditor5-coremedia-differencing/__tests__/integrations/RulesTester.ts index d0abcf3ef..b89095c73 100644 --- a/packages/ckeditor5-coremedia-differencing/__tests__/integrations/RulesTester.ts +++ b/packages/ckeditor5-coremedia-differencing/__tests__/integrations/RulesTester.ts @@ -1,6 +1,6 @@ import { RuleBasedHtmlDomConverterFactory } from "./RuleBasedHtmlDomConverters"; import { isToData, isToView, TestDirection } from "./TestDirection"; -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import "jest-xml-matcher"; @@ -11,6 +11,7 @@ export class RulesTester { readonly factory = new RuleBasedHtmlDomConverterFactory(); readonly xmlSerializer = new XMLSerializer(); readonly domParser = new DOMParser(); + constructor( public readonly rules: RuleConfig[], public readonly xmlElementSelector: string, diff --git a/packages/ckeditor5-coremedia-differencing/__tests__/integrations/XDiffElements.test.ts b/packages/ckeditor5-coremedia-differencing/__tests__/integrations/XDiffElements.test.ts index 115d4d0cc..0296abca5 100644 --- a/packages/ckeditor5-coremedia-differencing/__tests__/integrations/XDiffElements.test.ts +++ b/packages/ckeditor5-coremedia-differencing/__tests__/integrations/XDiffElements.test.ts @@ -1,7 +1,10 @@ import * as aut from "../../src/integrations/XDiffElements"; -import { blockquote, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { blockquote, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { TestDirection, toData, toView } from "./TestDirection"; import { RulesTester } from "./RulesTester"; +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); describe("XDiffElements", () => { const ruleConfigurations = [aut.xDiffElements]; diff --git a/packages/ckeditor5-coremedia-differencing/package.json b/packages/ckeditor5-coremedia-differencing/package.json index 67e50063f..4cc4c3401 100644 --- a/packages/ckeditor5-coremedia-differencing/package.json +++ b/packages/ckeditor5-coremedia-differencing/package.json @@ -14,10 +14,23 @@ "ckeditor5", "differencing" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" @@ -27,12 +40,14 @@ "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-coremedia-example-data": "^1.0.0", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", "jest-config": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "ts-jest": "^29.2.4", + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" @@ -50,7 +65,7 @@ "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", "build": "tsc --project ./tsconfig.release.json", - "jest": "jest", + "jest": "jest --passWithNoTests", "jest:coverage": "jest --collect-coverage", "npm-check-updates": "npm-check-updates --upgrade" } diff --git a/packages/ckeditor5-coremedia-differencing/src/Differencing.ts b/packages/ckeditor5-coremedia-differencing/src/Differencing.ts index e6a3b1b4f..351d480ec 100644 --- a/packages/ckeditor5-coremedia-differencing/src/Differencing.ts +++ b/packages/ckeditor5-coremedia-differencing/src/Differencing.ts @@ -2,9 +2,8 @@ import { Plugin } from "ckeditor5"; import { ImageElementSupport } from "./integrations/Image"; import { HtmlImageElementSupport } from "./integrations/HtmlSupportImage"; import { XDIFF_ATTRIBUTES, XDIFF_BREAK_ELEMENT_CONFIG, XDIFF_SPAN_ELEMENT_CONFIG } from "./Xdiff"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { RichTextDataProcessorIntegration } from "./integrations/RichTextDataProcessorIntegration"; /** @@ -36,13 +35,14 @@ import { RichTextDataProcessorIntegration } from "./integrations/RichTextDataPro export default class Differencing extends Plugin { static readonly pluginName = "Differencing"; static readonly requires = [HtmlImageElementSupport, ImageElementSupport, RichTextDataProcessorIntegration]; - static readonly #logger: Logger = LoggerProvider.getLogger(Differencing.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("Differencing"); /** * Provides information about the current activation state. Once activated it * can not be deactivated. Activation can not be executed twice. */ #isActivated = false; + init(): void { const logger = Differencing.#logger; const initInformation = reportInitStart(this); @@ -69,6 +69,7 @@ export default class Differencing extends Plugin { this.#isActivated = true; logger.debug("Differencing got activated."); } + #activate(): void { const editor = this.editor; const { model, conversion } = editor; diff --git a/packages/ckeditor5-coremedia-differencing/src/PluginIntegrationHook.ts b/packages/ckeditor5-coremedia-differencing/src/PluginIntegrationHook.ts index 4c2025e30..30e9cee24 100644 --- a/packages/ckeditor5-coremedia-differencing/src/PluginIntegrationHook.ts +++ b/packages/ckeditor5-coremedia-differencing/src/PluginIntegrationHook.ts @@ -14,7 +14,8 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common */ export class PluginIntegrationHook extends Plugin { static readonly pluginName = "PluginIntegrationHook"; - static readonly #logger: Logger = LoggerProvider.getLogger(PluginIntegrationHook.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("PluginIntegrationHook"); + init(): void { const initInformation = reportInitStart(this); this.#registerElementsAfterInit(); @@ -45,6 +46,7 @@ export class PluginIntegrationHook extends Plugin { }, ); } + #firePluginRegistration(state: string) { this.fire(`plugin-integration:${state}`); } diff --git a/packages/ckeditor5-coremedia-differencing/src/integrations/HtmlSupportImage.ts b/packages/ckeditor5-coremedia-differencing/src/integrations/HtmlSupportImage.ts index 6bb3f1e42..e254524ed 100644 --- a/packages/ckeditor5-coremedia-differencing/src/integrations/HtmlSupportImage.ts +++ b/packages/ckeditor5-coremedia-differencing/src/integrations/HtmlSupportImage.ts @@ -14,12 +14,14 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common export class HtmlImageElementSupport extends Plugin { static readonly pluginName = "DifferencingHtmlImageElementSupport"; static readonly requires = []; - static readonly #logger: Logger = LoggerProvider.getLogger(HtmlImageElementSupport.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("DifferencingHtmlImageElementSupport"); + init(): void { const initInformation = reportInitStart(this); this.#init(); reportInitEnd(initInformation); } + #init(): void { const { editor } = this; const { model } = editor; diff --git a/packages/ckeditor5-coremedia-differencing/src/integrations/Image.ts b/packages/ckeditor5-coremedia-differencing/src/integrations/Image.ts index 49be1f294..20cf67ad6 100644 --- a/packages/ckeditor5-coremedia-differencing/src/integrations/Image.ts +++ b/packages/ckeditor5-coremedia-differencing/src/integrations/Image.ts @@ -15,12 +15,14 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common export class ImageElementSupport extends Plugin { static readonly pluginName = "DifferencingImageElementSupport"; static readonly requires = [PluginIntegrationHook]; - static readonly #logger: Logger = LoggerProvider.getLogger(ImageElementSupport.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("DifferencingImageElementSupport"); + init(): void { const initInformation = reportInitStart(this); this.#init(); reportInitEnd(initInformation); } + #init(): void { const { editor } = this; const { model, plugins } = editor; diff --git a/packages/ckeditor5-coremedia-differencing/src/integrations/RichTextDataProcessorIntegration.ts b/packages/ckeditor5-coremedia-differencing/src/integrations/RichTextDataProcessorIntegration.ts index 74dd50faa..c28735f03 100644 --- a/packages/ckeditor5-coremedia-differencing/src/integrations/RichTextDataProcessorIntegration.ts +++ b/packages/ckeditor5-coremedia-differencing/src/integrations/RichTextDataProcessorIntegration.ts @@ -1,5 +1,5 @@ import { Plugin } from "ckeditor5"; -import { isRichTextDataProcessor } from "@coremedia/ckeditor5-coremedia-richtext/src/RichTextDataProcessor"; +import { isRichTextDataProcessor } from "@coremedia/ckeditor5-coremedia-richtext"; import { xDiffElements } from "./XDiffElements"; /** diff --git a/packages/ckeditor5-coremedia-differencing/src/integrations/XDiffElements.ts b/packages/ckeditor5-coremedia-differencing/src/integrations/XDiffElements.ts index a5abd1f0f..839ad2fd7 100644 --- a/packages/ckeditor5-coremedia-differencing/src/integrations/XDiffElements.ts +++ b/packages/ckeditor5-coremedia-differencing/src/integrations/XDiffElements.ts @@ -1,7 +1,6 @@ -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { isElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; -import { copyAttributesFrom } from "@coremedia/ckeditor5-dom-support/src/Attrs"; -import { namespaces } from "@coremedia/ckeditor5-coremedia-richtext/src/Namespaces"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; +import { isElement, copyAttributesFrom } from "@coremedia/ckeditor5-dom-support"; +import { namespaces } from "@coremedia/ckeditor5-coremedia-richtext"; /** * Elements of `xdiff` namespace should not make it into data. Thus, on data diff --git a/packages/ckeditor5-coremedia-differencing/tsconfig.json b/packages/ckeditor5-coremedia-differencing/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-coremedia-differencing/tsconfig.json +++ b/packages/ckeditor5-coremedia-differencing/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-coremedia-example-data/package.json b/packages/ckeditor5-coremedia-example-data/package.json index 20aaabaed..b2be86256 100644 --- a/packages/ckeditor5-coremedia-example-data/package.json +++ b/packages/ckeditor5-coremedia-example-data/package.json @@ -16,10 +16,23 @@ "testing", "private" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" @@ -27,11 +40,12 @@ "license": "Apache-2.0", "devDependencies": { "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "@types/webpack": "^5.28.5", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0" diff --git a/packages/ckeditor5-coremedia-example-data/src/index.ts b/packages/ckeditor5-coremedia-example-data/src/index.ts index d93443532..51cddb7dc 100644 --- a/packages/ckeditor5-coremedia-example-data/src/index.ts +++ b/packages/ckeditor5-coremedia-example-data/src/index.ts @@ -6,3 +6,27 @@ export { ExampleData } from "./ExampleData"; export { initExamples, type ExamplesConfig } from "./InitExamples"; export { richTextData } from "./richtext/RichTextData"; export { bbCodeData } from "./bbcode/BBCodeData"; +export { Differencing, EOD } from "./Differencing"; +export { blobReference } from "./Images"; +export { linkReference } from "./Links"; +export { + a, + blockquote, + br, + em, + img, + li, + ol, + p, + pre, + richtext, + span, + strong, + sub, + sup, + table, + tbody, + td, + tr, + ul, +} from "./RichTextBase"; diff --git a/packages/ckeditor5-coremedia-example-data/tsconfig.json b/packages/ckeditor5-coremedia-example-data/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-coremedia-example-data/tsconfig.json +++ b/packages/ckeditor5-coremedia-example-data/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-coremedia-images/package.json b/packages/ckeditor5-coremedia-images/package.json index 686aae22f..27741c9bf 100644 --- a/packages/ckeditor5-coremedia-images/package.json +++ b/packages/ckeditor5-coremedia-images/package.json @@ -16,7 +16,7 @@ ], "license": "Apache-2.0", "scripts": { - "build": "tsc --project ./tsconfig.release.json", + "build": "tsc --project ./tsconfig.release.json && copyfiles -u 1 theme/* theme/**/* dist/theme", "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", @@ -24,10 +24,23 @@ "jest:coverage": "jest --collect-coverage --passWithNoTests", "npm-check-updates": "npm-check-updates --upgrade" }, - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src", @@ -36,17 +49,18 @@ "devDependencies": { "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "@coremedia/service-agent": "^1.1.5", "@types/jest": "^29.5.12", + "copyfiles": "^2.4.1", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1" + "@coremedia/service-agent": "^1.1.5" }, "dependencies": { "@coremedia/ckeditor5-core-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-images/src/ContentImageClipboardPlugin.ts b/packages/ckeditor5-coremedia-images/src/ContentImageClipboardPlugin.ts index 22ef9fdd1..85c8685cc 100644 --- a/packages/ckeditor5-coremedia-images/src/ContentImageClipboardPlugin.ts +++ b/packages/ckeditor5-coremedia-images/src/ContentImageClipboardPlugin.ts @@ -1,14 +1,14 @@ -import { Plugin, Writer, Node } from "ckeditor5"; -import { createRichtextConfigurationServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/RichtextConfigurationServiceDescriptor"; +import { Node, Plugin, Writer } from "ckeditor5"; +import { createRichtextConfigurationServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { serviceAgent } from "@coremedia/service-agent"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { + ContentClipboardEditing, CreateModelFunction, CreateModelFunctionCreator, -} from "@coremedia/ckeditor5-coremedia-content-clipboard/src/ContentToModelRegistry"; -import ContentClipboardEditing from "@coremedia/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing"; -import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +} from "@coremedia/ckeditor5-coremedia-content-clipboard"; +import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; + type CreateImageModelFunction = (blobUriPath: string) => CreateModelFunction; const createImageModelFunctionCreator: CreateModelFunctionCreator = async ( contentUri: string, @@ -37,7 +37,8 @@ const createImageModelFunction: CreateImageModelFunction = */ export default class ContentImageClipboardPlugin extends Plugin { static readonly pluginName = "ContentImageClipboardPlugin" as const; - static readonly #logger: Logger = LoggerProvider.getLogger(ContentImageClipboardPlugin.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("ContentImageClipboardPlugin"); + init(): void { const logger = ContentImageClipboardPlugin.#logger; const { editor } = this; diff --git a/packages/ckeditor5-coremedia-images/src/ContentImageEditingPlugin.ts b/packages/ckeditor5-coremedia-images/src/ContentImageEditingPlugin.ts index 404277c19..0424e78bd 100644 --- a/packages/ckeditor5-coremedia-images/src/ContentImageEditingPlugin.ts +++ b/packages/ckeditor5-coremedia-images/src/ContentImageEditingPlugin.ts @@ -1,12 +1,10 @@ import { editingDowncastXlinkHref, preventUpcastImageSrc } from "./converters"; // ImageUtils: See ckeditor/ckeditor5#12027. - // ImageInline: See ckeditor/ckeditor5#12027. -import { Plugin, Editor, ImageUtils, ImageInline } from "ckeditor5"; +import { Editor, ImageInline, ImageUtils, Plugin } from "ckeditor5"; import ModelBoundSubscriptionPlugin from "./ModelBoundSubscriptionPlugin"; -import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { openImageInTabCommandName, registerOpenImageInTabCommand, @@ -27,12 +25,13 @@ export default class ContentImageEditingPlugin extends Plugin { * Command name for bound `openImageInTab`. */ static readonly openImageInTab = openImageInTabCommandName; - static readonly #logger: Logger = LoggerProvider.getLogger(ContentImageEditingPlugin.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("ContentImageEditingPlugin"); static readonly IMAGE_INLINE_MODEL_ELEMENT_NAME = "imageInline"; static readonly IMAGE_INLINE_VIEW_ELEMENT_NAME = "img"; static readonly XLINK_HREF_MODEL_ATTRIBUTE_NAME = "xlink-href"; static readonly XLINK_HREF_DATA_ATTRIBUTE_NAME = "data-xlink-href"; static readonly requires = [ImageInline, ImageUtils, ModelBoundSubscriptionPlugin]; + init(): void { const editor = this.editor; const initInformation = reportInitStart(this); @@ -62,6 +61,7 @@ export default class ContentImageEditingPlugin extends Plugin { // If not prevented, the src-attribute from GRS would be written to the model. this.editor.conversion.for("upcast").add(preventUpcastImageSrc()); } + static #setupXlinkHrefConversion(editor: Editor, modelAttributeName: string, dataAttributeName: string): void { ContentImageEditingPlugin.#setupXlinkHrefConversionDowncast( editor, @@ -77,6 +77,7 @@ export default class ContentImageEditingPlugin extends Plugin { }, }); } + static #setupXlinkHrefConversionDowncast( editor: Editor, modelElementName: "imageInline", diff --git a/packages/ckeditor5-coremedia-images/src/ModelBoundSubscriptionPlugin.ts b/packages/ckeditor5-coremedia-images/src/ModelBoundSubscriptionPlugin.ts index 7323a350e..0d47ab269 100644 --- a/packages/ckeditor5-coremedia-images/src/ModelBoundSubscriptionPlugin.ts +++ b/packages/ckeditor5-coremedia-images/src/ModelBoundSubscriptionPlugin.ts @@ -28,7 +28,7 @@ export default class ModelBoundSubscriptionPlugin extends Plugin { static readonly ID_MODEL_ATTRIBUTE_NAME = "cmSubscriptionId"; static readonly #SUBSCRIPTION_CACHE: SubscriptionCache = new SubscriptionCache(); static readonly PLUGIN_NAME = "ModelBoundSubscriptionPlugin"; - static readonly pluginName = ModelBoundSubscriptionPlugin.PLUGIN_NAME; + static readonly pluginName = "ModelBoundSubscriptionPlugin"; /** * Registers `change:data` listeners. @@ -159,6 +159,7 @@ export default class ModelBoundSubscriptionPlugin extends Plugin { } return false; } + static #recursiveSearch(element: ModelElement): ModelElement[] { if (ModelBoundSubscriptionPlugin.#isSubscribedModel(element)) { return [element]; @@ -172,6 +173,7 @@ export default class ModelBoundSubscriptionPlugin extends Plugin { } return modelElements; } + static #findRegisteredModelElements(element: ModelElement): ModelElement[] { if (ModelBoundSubscriptionPlugin.#isSubscribedModel(element)) { return [element]; diff --git a/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/ContentImageOpenInTabUI.ts b/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/ContentImageOpenInTabUI.ts index c6fe860f4..fa4967651 100644 --- a/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/ContentImageOpenInTabUI.ts +++ b/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/ContentImageOpenInTabUI.ts @@ -1,11 +1,10 @@ -import { ButtonView, Plugin, Editor } from "ckeditor5"; +import { ButtonView, Editor, Plugin } from "ckeditor5"; import openInTabIcon from "../../theme/icons/openInTab.svg"; import "../lang/contentImageOpenInTab"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import ContentImageEditingPlugin from "../ContentImageEditingPlugin"; import { executeOpenImageInTabCommand, requireOpenImageInTabCommand } from "./OpenImageInTabCommand"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; /** * Plugin that registers a 'contentImageOpenInTab' button in @@ -17,12 +16,14 @@ import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvi export default class ContentImageOpenInTabUI extends Plugin { static readonly pluginName = "ContentImageOpenInTabUI" as const; static readonly requires = [ContentImageEditingPlugin]; - static readonly #logger: Logger = LoggerProvider.getLogger(ContentImageOpenInTabUI.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("ContentImageOpenInTabUI"); + init(): void { const initInformation = reportInitStart(this); this.#createToolbarLinkImageButton(this.editor); reportInitEnd(initInformation); } + #createToolbarLinkImageButton(editor: Editor): void { const logger = ContentImageOpenInTabUI.#logger; const { ui } = editor; diff --git a/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/OpenImageInTabCommand.ts b/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/OpenImageInTabCommand.ts index b132380da..2651bea63 100644 --- a/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/OpenImageInTabCommand.ts +++ b/packages/ckeditor5-coremedia-images/src/contentImageOpenInTab/OpenImageInTabCommand.ts @@ -1,6 +1,6 @@ -import { OpenInTabCommand } from "@coremedia/ckeditor5-coremedia-content/src/commands/OpenInTabCommand"; +import { OpenInTabCommand } from "@coremedia/ckeditor5-coremedia-content"; import { Editor, ImageUtils } from "ckeditor5"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; /** @@ -14,6 +14,7 @@ export const openImageInTabCommandName = "openImageInTab"; */ export class OpenImageInTabCommand extends OpenInTabCommand { static readonly #logger = LoggerProvider.getLogger("OpenImageInTabCommand"); + override refresh() { const logger = OpenImageInTabCommand.#logger; const { editor } = this; @@ -52,7 +53,7 @@ export const registerOpenImageInTabCommand = (editor: Editor, name = openImageIn */ export const requireOpenImageInTabCommand = ( editor: Editor, - name: typeof openImageInTabCommandName = openImageInTabCommandName, + name: typeof openImageInTabCommandName = openImageInTabCommandName ): OpenImageInTabCommand => { const command = editor.commands.get(name); if (!command) { @@ -73,5 +74,5 @@ export const requireOpenImageInTabCommand = ( export const executeOpenImageInTabCommand = ( editor: Editor, uriPaths: UriPath[] = [], - name: typeof openImageInTabCommandName = openImageInTabCommandName, + name: typeof openImageInTabCommandName = openImageInTabCommandName ) => editor.commands.get(name)?.execute(...uriPaths); diff --git a/packages/ckeditor5-coremedia-images/src/converters.ts b/packages/ckeditor5-coremedia-images/src/converters.ts index 2e1705f1e..8d876aa91 100644 --- a/packages/ckeditor5-coremedia-images/src/converters.ts +++ b/packages/ckeditor5-coremedia-images/src/converters.ts @@ -1,32 +1,37 @@ /* eslint no-null/no-null: off */ import { serviceAgent } from "@coremedia/service-agent"; -import { createBlobDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/BlobDisplayServiceDescriptor"; -import { InlinePreview } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/BlobDisplayService"; -import { requireContentUriPath, UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; import { - UpcastDispatcher, - UpcastConversionApi, - EventInfo, + createBlobDisplayServiceDescriptor, + InlinePreview, + requireContentUriPath, + UriPath +} from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { DowncastDispatcher, - ViewElement, DowncastWriter, - Element as ModelElement, Editor, + Element as ModelElement, + EventInfo, + UpcastConversionApi, + UpcastDispatcher, + ViewElement } from "ckeditor5"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { IMAGE_PLUGIN_NAME, IMAGE_SPINNER_CSS_CLASS, IMAGE_SPINNER_SVG } from "./constants"; import ModelBoundSubscriptionPlugin from "./ModelBoundSubscriptionPlugin"; import "../theme/loadmask.css"; import "./lang/contentimage"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common"; + const LOGGER = LoggerProvider.getLogger(IMAGE_PLUGIN_NAME); + interface DowncastEventData { item: ModelElement; attributeOldValue: string | null; attributeNewValue: string | null; } + export type DowncastConversionHelperFunction = (dispatcher: DowncastDispatcher) => void; /** @@ -55,25 +60,25 @@ export type DowncastConversionHelperFunction = (dispatcher: DowncastDispatcher) */ export const preventUpcastImageSrc = () => - (dispatcher: UpcastDispatcher): void => { - dispatcher.on( - `element:img`, - (evt: EventInfo, data, conversionApi: UpcastConversionApi) => { - // eslint-disable-next-line - if (data.viewItem.hasAttribute("data-xlink-href")) { + (dispatcher: UpcastDispatcher): void => { + dispatcher.on( + `element:img`, + (evt: EventInfo, data, conversionApi: UpcastConversionApi) => { // eslint-disable-next-line - conversionApi.consumable.consume(data.viewItem, { - attributes: "src", - }); - // eslint-disable-next-line - data.viewItem._removeAttribute("src"); + if (data.viewItem.hasAttribute("data-xlink-href")) { + // eslint-disable-next-line + conversionApi.consumable.consume(data.viewItem, { + attributes: "src" + }); + // eslint-disable-next-line + data.viewItem._removeAttribute("src"); + } + }, + { + priority: "highest" } - }, - { - priority: "highest", - }, - ); - }; + ); + }; /** * Conversion for `modelElementName:xlink-href` to `img:src`. @@ -84,22 +89,22 @@ export const preventUpcastImageSrc = */ export const editingDowncastXlinkHref = (editor: Editor, modelElementName: string, logger: Logger): DowncastConversionHelperFunction => - (dispatcher: DowncastDispatcher) => { - dispatcher.on(`attribute:xlink-href:${modelElementName}`, (eventInfo: EventInfo, data: DowncastEventData): void => { - if (!data.attributeNewValue) { - // There was no xlink-href set for this image, therefore, we can skip - // applying the loading spinner and resolving the image src - return; - } - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - onXlinkHrefEditingDowncast(editor, eventInfo, data, logger); - }); - }; + (dispatcher: DowncastDispatcher) => { + dispatcher.on(`attribute:xlink-href:${modelElementName}`, (eventInfo: EventInfo, data: DowncastEventData): void => { + if (!data.attributeNewValue) { + // There was no xlink-href set for this image, therefore, we can skip + // applying the loading spinner and resolving the image src + return; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + onXlinkHrefEditingDowncast(editor, eventInfo, data, logger); + }); + }; const onXlinkHrefEditingDowncast = ( editor: Editor, eventInfo: EventInfo, data: DowncastEventData, - logger: Logger, + logger: Logger ): void => { const spinnerPreviewAttributes = createSpinnerImagePreviewAttributes(editor); updateImagePreviewAttributes(editor, data.item, spinnerPreviewAttributes, true); @@ -139,7 +144,7 @@ const updateImagePreviewAttributes = ( editor: Editor, modelElement: ModelElement, inlinePreview: InlinePreview, - withSpinnerClass: boolean, + withSpinnerClass: boolean ): void => { const imgTag = findImgTag(editor, modelElement); if (!imgTag) { @@ -161,7 +166,7 @@ const writeImageToView = ( editor: Editor, inlinePreview: InlinePreview, imgTag: ViewElement, - withSpinnerClass: boolean, + withSpinnerClass: boolean ): void => { editor.editing.view.change((writer: DowncastWriter) => { writer.setAttribute("src", inlinePreview.thumbnailSrc, imgTag); @@ -196,6 +201,6 @@ const createSpinnerImagePreviewAttributes = (editor: Editor): InlinePreview => { return { thumbnailSrc: IMAGE_SPINNER_SVG, thumbnailTitle: t("loading..."), - isPlaceholder: false, + isPlaceholder: false }; }; diff --git a/packages/ckeditor5-coremedia-images/tsconfig.json b/packages/ckeditor5-coremedia-images/tsconfig.json index b3fab7184..cce9759ee 100644 --- a/packages/ckeditor5-coremedia-images/tsconfig.json +++ b/packages/ckeditor5-coremedia-images/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./src", "./theme", diff --git a/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkDefaultTargetsConfig.test.ts b/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkDefaultTargetsConfig.test.ts index 7d061fb0f..65b2cad7b 100644 --- a/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkDefaultTargetsConfig.test.ts +++ b/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkDefaultTargetsConfig.test.ts @@ -2,7 +2,7 @@ import { Config } from "ckeditor5"; import { computeDefaultLinkTargetForUrl } from "../../../src/linktarget/config/LinkTargetConfig"; -jest.mock("@ckeditor/ckeditor5-utils/src/config"); + describe("LinkTargetDefaultsConfig", () => { describe("computeDefaultLinkTargetForUrl", () => { // @ts-expect-error - Requires generic type since CKEditor 37.x. diff --git a/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkTargetConfig.test.ts b/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkTargetConfig.test.ts index b7ba03e3d..122148366 100644 --- a/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkTargetConfig.test.ts +++ b/packages/ckeditor5-coremedia-link/__tests__/linktarget/config/LinkTargetConfig.test.ts @@ -3,7 +3,7 @@ import { Config } from "ckeditor5"; import { parseLinkTargetConfig } from "../../../src/linktarget/config/LinkTargetConfig"; import LinkTargetOptionDefinition from "../../../src/linktarget/config/LinkTargetOptionDefinition"; -jest.mock("@ckeditor/ckeditor5-utils/src/config"); + const someFunction = () => { // irrelevant, only type required }; diff --git a/packages/ckeditor5-coremedia-link/package.json b/packages/ckeditor5-coremedia-link/package.json index 3c112a1db..69499092b 100644 --- a/packages/ckeditor5-coremedia-link/package.json +++ b/packages/ckeditor5-coremedia-link/package.json @@ -16,7 +16,7 @@ ], "license": "Apache-2.0", "scripts": { - "build": "tsc --project ./tsconfig.release.json", + "build": "tsc --project ./tsconfig.release.json && copyfiles -u 1 theme/* theme/**/* dist/theme", "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", @@ -24,10 +24,23 @@ "jest:coverage": "jest --collect-coverage --passWithNoTests", "npm-check-updates": "npm-check-updates --upgrade" }, - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src", @@ -35,17 +48,19 @@ ], "devDependencies": { "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "@coremedia/service-agent": "^1.1.5", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "ckeditor5": "^42.0.2", + "copyfiles": "^2.4.1", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { - "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "@coremedia/service-agent": "^1.1.5", "ckeditor5": "^42.0.2" }, "dependencies": { diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkClipboardPlugin.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkClipboardPlugin.ts index 5af374514..03c8b1be8 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkClipboardPlugin.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkClipboardPlugin.ts @@ -1,16 +1,18 @@ -import { Plugin, Writer, Node } from "ckeditor5"; -import { createContentDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentDisplayServiceDescriptor"; +import { Node, Plugin, Writer } from "ckeditor5"; +import { + createContentDisplayServiceDescriptor, + requireContentCkeModelUri, + ROOT_NAME, +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import { serviceAgent } from "@coremedia/service-agent"; -import { ROOT_NAME } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/Constants"; -import { requireContentCkeModelUri } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { + ContentClipboardEditing, CreateModelFunction, CreateModelFunctionCreator, -} from "@coremedia/ckeditor5-coremedia-content-clipboard/src/ContentToModelRegistry"; -import ContentClipboardEditing from "@coremedia/ckeditor5-coremedia-content-clipboard/src/ContentClipboardEditing"; -import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +} from "@coremedia/ckeditor5-coremedia-content-clipboard"; +import { getOptionalPlugin, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; + type CreateLinkModelFunction = (contentUri: string, name: string) => CreateModelFunction; const createLinkModelFunctionCreator: CreateModelFunctionCreator = async ( contentUri: string, @@ -40,7 +42,8 @@ const createLinkModelFunction: CreateLinkModelFunction = (contentUri: string, na */ export default class ContentLinkClipboardPlugin extends Plugin { public static readonly pluginName = "ContentLinkClipboardPlugin" as const; - static readonly #logger: Logger = LoggerProvider.getLogger(ContentLinkClipboardPlugin.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("ContentLinkClipboardPlugin"); + init(): void { const logger = ContentLinkClipboardPlugin.#logger; const { editor } = this; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkCommandHook.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkCommandHook.ts index bc2fee598..994fd7885 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkCommandHook.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkCommandHook.ts @@ -1,15 +1,19 @@ import { ModelUri, requireContentCkeModelUri, + ROOT_NAME, UriPath, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { Plugin, TextProxy, Range, Writer, Item as ModelItem, DiffItem, DiffItemInsert, LinkEditing } from "ckeditor5"; -import { LINK_COMMAND_NAME } from "@coremedia/ckeditor5-link-common/src/Constants"; -import { ROOT_NAME } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/Constants"; -import { ifCommand, optionalCommandNotFound, recommendCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +} from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; +import { DiffItem, DiffItemInsert, Item as ModelItem, LinkEditing, Plugin, Range, TextProxy, Writer } from "ckeditor5"; +import { LINK_COMMAND_NAME } from "@coremedia/ckeditor5-link-common"; +import { + ifCommand, + optionalCommandNotFound, + recommendCommand, + reportInitEnd, + reportInitStart, +} from "@coremedia/ckeditor5-core-common"; /** * Alias for easier readable code. @@ -139,7 +143,7 @@ const getItems = (range: Range): ModelItem[] => [ */ class ContentLinkCommandHook extends Plugin { public static readonly pluginName = "ContentLinkCommandHook" as const; - static readonly #logger: Logger = LoggerProvider.getLogger(ContentLinkCommandHook.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("ContentLinkCommandHook"); readonly #trackingData: TrackingData = new TrackingData(); /** @@ -361,4 +365,5 @@ class ContentLinkCommandHook extends Plugin { return this.#replaceRawLink(writer, textProxy, range); } } + export default ContentLinkCommandHook; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkViewUtils.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkViewUtils.ts index 24ec9d6d1..3c3e3c1f4 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkViewUtils.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinkViewUtils.ts @@ -1,6 +1,6 @@ import { addClass, addClassToTemplate, removeClass, removeClassFromTemplate } from "../utils"; import { View, ContextualBalloon, Editor } from "ckeditor5"; -import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { getOptionalPlugin } from "@coremedia/ckeditor5-core-common"; /** * Adds or removes "cm-ck-link-view--show-content-link" to the form view's (and action view's) element or to the corresponding diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinks.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinks.ts index 2482cefb9..28fe98b2f 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinks.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ContentLinks.ts @@ -5,17 +5,19 @@ import { createDecoratorHook } from "../utils"; import "../lang/contentlink"; import ContentLinkClipboardPlugin from "./ContentLinkClipboardPlugin"; import LinkUserActionsPlugin from "./LinkUserActionsPlugin"; -import { CONTENT_CKE_MODEL_URI_REGEXP } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; +import { + CONTENT_CKE_MODEL_URI_REGEXP, + createWorkAreaServiceDescriptor, + WorkAreaService, +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import { serviceAgent } from "@coremedia/service-agent"; import { addMouseEventListenerToHideDialog, removeInitialMouseDownListener } from "./LinkBalloonEventListenerFix"; -import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/WorkAreaServiceDescriptor"; import { Subscription } from "rxjs"; -import WorkAreaService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/WorkAreaService"; import { closeContextualBalloon } from "./ContentLinkViewUtils"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { parseLinkBalloonConfig } from "./LinkBalloonConfig"; import { hasRequiredInternalLinkUI } from "./InternalLinkUI"; -import { Plugin, Editor, LinkUI, Link, LinkCommand, ContextualBalloon, Observable } from "ckeditor5"; +import { ContextualBalloon, Editor, Link, LinkCommand, LinkUI, Observable, Plugin } from "ckeditor5"; import { asAugmentedLinkUI, requireNonNullsAugmentedLinkUI } from "./ui/AugmentedLinkUI"; import { openContentInTabCommandName, registerOpenContentInTabCommand } from "./OpenContentInTabCommand"; @@ -26,7 +28,7 @@ import { openContentInTabCommandName, registerOpenContentInTabCommand } from "./ export default class ContentLinks extends Plugin { public static readonly pluginName = "ContentLinks" as const; static readonly openLinkInTab = openContentInTabCommandName; - readonly #logger = LoggerProvider.getLogger(ContentLinks.pluginName); + readonly #logger = LoggerProvider.getLogger("ContentLinks"); #serviceRegisteredSubscription: Pick | undefined = undefined; #initialized = false; @@ -59,6 +61,7 @@ export default class ContentLinks extends Plugin { linkUI._hideUI(); } } + static readonly requires = [ Link, ContentLinkActionsViewExtension, @@ -67,6 +70,7 @@ export default class ContentLinks extends Plugin { ContentLinkClipboardPlugin, LinkUserActionsPlugin, ]; + init(): void { const editor = this.editor; const linkUI: LinkUI = editor.plugins.get(LinkUI); @@ -94,6 +98,7 @@ export default class ContentLinks extends Plugin { .subscribe(onServiceRegisteredFunction); registerOpenContentInTabCommand(editor); } + initializeLinkBalloonListeners(linkUI: LinkUI): void { const { editor } = linkUI; removeInitialMouseDownListener(linkUI); @@ -104,6 +109,7 @@ export default class ContentLinks extends Plugin { createDecoratorHook(internalLinkUI, "_hideUI", this.onHideUiCallback(editor), this); } } + onHideUiCallback(editor: Editor): () => void { return () => { const linkCommand = editor.commands.get("link") as LinkCommand; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/InternalLinkUI.ts b/packages/ckeditor5-coremedia-link/src/contentlink/InternalLinkUI.ts index 8e68fdd4a..5b707b059 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/InternalLinkUI.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/InternalLinkUI.ts @@ -1,5 +1,5 @@ import { ContextualBalloon } from "ckeditor5"; -import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; +import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common"; /** * We require accessing some of the internal properties/methods of `LinkUI`. @@ -8,12 +8,15 @@ import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/s */ export interface InternalLinkUI { _balloon: ContextualBalloon; + /** * Removes the `formView` from the `_balloon`. */ _hideUI(): void; + get _isUIInPanel(): boolean; } + const isHasBalloon = (linkUI: object): linkUI is Pick => "_balloon" in linkUI && typeof linkUI._balloon === "object"; const isHasHideUI = (linkUI: object): linkUI is Pick => @@ -48,7 +51,7 @@ export const hasRequiredInternalLinkUI = (linkUI: unknown): linkUI is InternalLi if (!result) { console.debug( "hasRequiredInternalLinkUI: Required internal properties (_balloon, _hideUI, _isUIInPanel) not available", - linkUI, + linkUI ); throw new IncompatibleInternalApiUsageError("Required internal API of LinkUI unavailable."); } diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonEventListenerFix.ts b/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonEventListenerFix.ts index 199f3e3a2..fd5bfaa03 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonEventListenerFix.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/LinkBalloonEventListenerFix.ts @@ -1,7 +1,7 @@ -import { LinkUI, Emitter } from "ckeditor5"; +import { Emitter, LinkUI } from "ckeditor5"; import { keepOpen } from "./LinkBalloonConfig"; import { hasRequiredInternalLinkUI } from "./InternalLinkUI"; -import { requireNonNulls } from "@coremedia/ckeditor5-common/src/RequiredNonNull"; +import { requireNonNulls } from "@coremedia/ckeditor5-common"; /** * Whether the mouseDown event occurred on an allow-listed element. @@ -59,8 +59,8 @@ export const addMouseEventListenerToHideDialog = (linkUI: LinkUI): void => { } const { _balloon: { - view: { element }, - }, + view: { element } + } } = internalLinkUI; addCustomClickOutsideHandler({ emitter: formView, @@ -68,14 +68,14 @@ export const addMouseEventListenerToHideDialog = (linkUI: LinkUI): void => { contextElements: element ? [element] : [], callback: () => { internalLinkUI._hideUI(); - }, + } }); }; const addCustomClickOutsideHandler = ({ emitter, activator, callback, - contextElements, + contextElements }: { emitter: Emitter; activator: () => boolean; @@ -91,7 +91,7 @@ const addCustomClickOutsideHandler = ({ domEvt: { composedPath: () => Element[]; target: HTMLElement; - }, + } ) => { if (!activator()) { return; @@ -124,7 +124,7 @@ const addCustomClickOutsideHandler = ({ } } callback(); - }, + } ); emitter.listenTo( document as unknown as Emitter, @@ -134,7 +134,7 @@ const addCustomClickOutsideHandler = ({ domEvt: { composedPath: () => Element[]; target: HTMLElement; - }, + } ) => { if (mouseDownOnWhiteListedElement) { // we already checked that this click (mouseDown) occurred on an allow-listed element @@ -157,6 +157,6 @@ const addCustomClickOutsideHandler = ({ } } callback(); - }, + } ); }; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts b/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts index b38fdf9ad..c53421f48 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/LinkUserActionsPlugin.ts @@ -1,23 +1,22 @@ import { serviceAgent } from "@coremedia/service-agent"; -import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/WorkAreaServiceDescriptor"; -import { openLink } from "@coremedia/ckeditor5-core-common"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; import { + createWorkAreaServiceDescriptor, isModelUriPath, requireContentUriPath, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; +} from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { openLink } from "@coremedia/ckeditor5-core-common"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { - Plugin, - Editor, EditingView, - ViewDocumentFragment, - ViewElement, - TextProxy, + Editor, Element as ModelElement, - Node as ModelNode, env, keyCodes, + Node as ModelNode, + Plugin, + TextProxy, + ViewDocumentFragment, + ViewElement, } from "ckeditor5"; /** @@ -35,7 +34,7 @@ import { */ export default class LinkUserActionsPlugin extends Plugin { public static readonly pluginName = "LinkUserActionsPlugin" as const; - static readonly LOG: Logger = LoggerProvider.getLogger(LinkUserActionsPlugin.pluginName); + static readonly LOG: Logger = LoggerProvider.getLogger("LinkUserActionsPlugin"); static readonly requires = []; init(): void { diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkUI.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkUI.ts index 64c45ba95..cbeca1683 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkUI.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/AugmentedLinkUI.ts @@ -1,7 +1,7 @@ import { AugmentedLinkActionsView } from "./AugmentedLinkActionsView"; import { AugmentedLinkFormView } from "./AugmentedLinkFormView"; import { ViewWithCssTransitionDisabler, LinkUI } from "ckeditor5"; -import { RequiredNonNull, requireNonNulls } from "@coremedia/ckeditor5-common/src/RequiredNonNull"; +import { RequiredNonNull, requireNonNulls } from "@coremedia/ckeditor5-common"; /** * Augmented properties for `LinkUI`. diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts index d912cc23f..de041f70d 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkActionsViewExtension.ts @@ -3,18 +3,19 @@ import ContentLinkView from "./ContentLinkView"; import type { UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { isModelUriPath, requireContentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import { handleFocusManagement } from "@coremedia/ckeditor5-link-common/src/FocusUtils"; +import { ifCommand, reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; +import { + handleFocusManagement, + hasRequiredInternalFocusablesProperty, + LINK_COMMAND_NAME, +} from "@coremedia/ckeditor5-link-common"; import { Command, ContextualBalloon, LinkUI, Plugin } from "ckeditor5"; -import { LINK_COMMAND_NAME } from "@coremedia/ckeditor5-link-common/src/Constants"; -import { ifCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { hasContentUriPath } from "./ViewExtensions"; import { showContentLinkField } from "../ContentLinkViewUtils"; import { asAugmentedLinkUI, AugmentedLinkUI, requireNonNullsAugmentedLinkUI } from "./AugmentedLinkUI"; import { AugmentedLinkActionsView, LinkActionsView } from "./AugmentedLinkActionsView"; import { executeOpenContentInTabCommand } from "../OpenContentInTabCommand"; -import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link-common/src/HasFocusables"; /** * Extends the action view for Content link display. This includes: @@ -25,7 +26,7 @@ import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link */ class ContentLinkActionsViewExtension extends Plugin { public static readonly pluginName = "ContentLinkActionsViewExtension" as const; - static readonly #logger = LoggerProvider.getLogger(ContentLinkActionsViewExtension.pluginName); + static readonly #logger = LoggerProvider.getLogger("ContentLinkActionsViewExtension"); static readonly requires = [LinkUI, ContextualBalloon]; contentUriPath: string | undefined | null; #initialized = false; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts index 079b85a4b..1d597542d 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkFormViewExtension.ts @@ -1,32 +1,28 @@ /* eslint no-null/no-null: off */ -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import createContentLinkView from "./ContentLinkViewFactory"; import { CONTENT_CKE_MODEL_URI_REGEXP, + createContentImportServiceDescriptor, + createContentReferenceServiceDescriptor, + getEvaluationResult, + isLinkable, + IsLinkableEvaluationResult, + receiveDraggedItemsFromDataTransfer, requireContentCkeModelUri, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import { Command, ContextualBalloon, LabeledFieldView, LinkUI, Plugin, View } from "ckeditor5"; import { showContentLinkField } from "../ContentLinkViewUtils"; import ContentLinkCommandHook from "../ContentLinkCommandHook"; import { hasContentUriPath, hasContentUriPathAndName } from "./ViewExtensions"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { serviceAgent } from "@coremedia/service-agent"; -import { createContentImportServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ContentImportService"; -import { createContentReferenceServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; -import { receiveDraggedItemsFromDataTransfer } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/DragDropServiceWrapper"; -import { - getEvaluationResult, - isLinkable, - IsLinkableEvaluationResult, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsLinkableDragAndDrop"; -import { handleFocusManagement } from "@coremedia/ckeditor5-link-common/src/FocusUtils"; +import { handleFocusManagement, hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link-common"; import ContentLinkView from "./ContentLinkView"; import { addClassToTemplate } from "../../utils"; import { AugmentedLinkFormView, LinkFormView } from "./AugmentedLinkFormView"; import { requireNonNullsAugmentedLinkUI } from "./AugmentedLinkUI"; -import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link-common/src/HasFocusables"; /** * Extends the form view for Content link display. This includes: @@ -37,7 +33,7 @@ import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link */ class ContentLinkFormViewExtension extends Plugin { public static readonly pluginName = "ContentLinkFormViewExtension" as const; - static readonly #logger: Logger = LoggerProvider.getLogger(ContentLinkFormViewExtension.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("ContentLinkFormViewExtension"); static readonly #CM_LINK_FORM_CLS = "cm-ck-link-form"; static readonly #CM_FORM_VIEW_CLS = "cm-ck-link-form-view"; static readonly requires = [LinkUI, ContentLinkCommandHook]; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkView.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkView.ts index 3cd9b47c2..ffa26d104 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkView.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkView.ts @@ -1,12 +1,12 @@ import { serviceAgent } from "@coremedia/service-agent"; -import { createContentDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentDisplayServiceDescriptor"; +import { createContentDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { Subscription } from "rxjs"; import { CONTENT_CKE_MODEL_URI_REGEXP, requireContentUriPath, - UriPath, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import ContentAsLink from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentAsLink"; + UriPath +} from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { ContentAsLink } from "@coremedia/ckeditor5-coremedia-studio-integration"; import CoreMediaIconView from "./CoreMediaIconView"; import CancelButtonView from "./CancelButtonView"; import { ButtonView, Editor } from "ckeditor5"; @@ -40,13 +40,14 @@ export default class ContentLinkView extends ButtonView { declare underlined: boolean; declare renderAsTextLink: boolean; declare ariaLabelText: string; + constructor( editor: Editor, renderOptions?: { renderTypeIcon?: boolean; renderStatusIcon?: boolean; renderCancelButton?: boolean; - }, + } ) { super(editor.locale); const bind = this.bindTemplate; @@ -114,10 +115,10 @@ export default class ContentLinkView extends ButtonView { "class": [ "cm-ck-content-link-view", bind.if("underlined", "cm-ck-button--underlined"), - bind.if("renderAsTextLink", "ck-link-actions__preview"), + bind.if("renderAsTextLink", "ck-link-actions__preview") ], - "aria-label": bind.to("ariaLabelText"), - }, + "aria-label": bind.to("ariaLabelText") + } }); this.listenTo(this, "executeContentLink", () => { // If cancel button is executed, this button also executes @@ -132,13 +133,13 @@ export default class ContentLinkView extends ButtonView { // URI changes, thus contentName, icons and tooltip are not valid anymore for the new URI this.set({ contentName: undefined, - tooltip: undefined, + tooltip: undefined }); this.#typeIcon?.set({ - iconClass: undefined, + iconClass: undefined }); this.#statusIcon?.set({ - iconClass: undefined, + iconClass: undefined }); this.#endContentSubscription(); const hasUriPath = this.hasUriPathProperty(evt.source); @@ -151,17 +152,19 @@ export default class ContentLinkView extends ButtonView { } }); } + hasUriPathProperty(obj: object): obj is { uriPath: string; } { return "uriPath" in obj; } + override render(): void { super.render(); if (this.renderOptions?.renderStatusIcon) { if (!this.#statusIcon) { throw new Error( - "Unexpected State: Although render options request rendering a status icon, the required status icon is not available.", + "Unexpected State: Although render options request rendering a status icon, the required status icon is not available." ); } this.children.add(this.#statusIcon); @@ -169,7 +172,7 @@ export default class ContentLinkView extends ButtonView { if (this.renderOptions?.renderCancelButton) { if (!this.#cancelButton) { throw new Error( - "Unexpected State: Although render options request rendering a cancel icon, the required cancel icon is not available.", + "Unexpected State: Although render options request rendering a cancel icon, the required cancel icon is not available." ); } this.children.add(this.#cancelButton); @@ -178,10 +181,12 @@ export default class ContentLinkView extends ButtonView { this.element.removeAttribute("aria-labelledby"); } } + #endContentSubscription(): void { this.#contentSubscription?.unsubscribe(); this.#contentSubscription = undefined; } + #registerSubscription(subscriptionSupplier: () => Subscription): void { if (!this.#acceptSubscriptions) { return; @@ -190,6 +195,7 @@ export default class ContentLinkView extends ButtonView { this.#endContentSubscription(); this.#contentSubscription = subscriptionSupplier(); } + #subscribeToContent(uriPath: UriPath): void { serviceAgent .fetchService(createContentDisplayServiceDescriptor()) @@ -199,27 +205,29 @@ export default class ContentLinkView extends ButtonView { contentDisplayService.observe_asLink(uriPath).subscribe({ next: (received: ContentAsLink) => { this.#typeIcon?.set({ - iconClass: received.type.classes?.join(" "), + iconClass: received.type.classes?.join(" ") }); this.#statusIcon?.set({ - iconClass: received.state.classes?.join(" "), + iconClass: received.state.classes?.join(" ") }); this.set({ tooltip: received.content.name, contentName: received.content.name, - ariaLabelText: `${received.type.name}: ${received.content.name}`, + ariaLabelText: `${received.type.name}: ${received.content.name}` }); - }, - }), + } + }) ); }) .catch((reason): void => { console.warn("ContentDisplayService not available.", reason); }); } + get cancelButton(): ButtonView | undefined { return this.#cancelButton; } + override destroy(): void { // Prevent possible asynchronous events from re-triggering subscription. this.#acceptSubscriptions = false; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkViewFactory.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkViewFactory.ts index 17493a1e6..9ee90238e 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkViewFactory.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ContentLinkViewFactory.ts @@ -2,7 +2,7 @@ import "../../../theme/contentlinkview.css"; import ContentLinkView from "./ContentLinkView"; import { requireNonNullsAugmentedLinkUI } from "./AugmentedLinkUI"; import { LabeledFieldView, Editor, LinkUI } from "ckeditor5"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { executeOpenContentInTabCommand } from "../OpenContentInTabCommand"; import { requireContentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; diff --git a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ViewExtensions.ts b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ViewExtensions.ts index 22fa21717..9ba3d6dab 100644 --- a/packages/ckeditor5-coremedia-link/src/contentlink/ui/ViewExtensions.ts +++ b/packages/ckeditor5-coremedia-link/src/contentlink/ui/ViewExtensions.ts @@ -1,4 +1,4 @@ -import { isRaw } from "@coremedia/ckeditor5-common/src/AdvancedTypes"; +import { isRaw } from "@coremedia/ckeditor5-common"; /** * Holds a reference to the UriPath of a content. diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts index 1180a7f7d..341567b66 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetActionsViewExtension.ts @@ -4,12 +4,11 @@ import CustomLinkTargetUI from "./ui/CustomLinkTargetUI"; import { OTHER_TARGET_NAME } from "./config/DefaultTarget"; import "../../theme/linktargetactionsviewextension.css"; import { Plugin, Command, LinkUI, ButtonView, ToolbarSeparatorView, View, ContextualBalloon, Locale } from "ckeditor5"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import { handleFocusManagement } from "@coremedia/ckeditor5-link-common/src/FocusUtils"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { requireNonNulls } from "@coremedia/ckeditor5-common/src/RequiredNonNull"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; +import { handleFocusManagement, hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link-common"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; +import { requireNonNulls } from "@coremedia/ckeditor5-common"; import { LinkActionsView } from "../contentlink/ui/AugmentedLinkActionsView"; -import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link-common/src/HasFocusables"; /** * Extends the action view of the linkUI plugin for link target display. This includes: @@ -26,7 +25,7 @@ import { hasRequiredInternalFocusablesProperty } from "@coremedia/ckeditor5-link class LinkTargetActionsViewExtension extends Plugin { public static readonly pluginName = "LinkTargetActionsViewExtension" as const; static readonly requires = [LinkUI, CustomLinkTargetUI]; - static readonly #logger = LoggerProvider.getLogger(LinkTargetActionsViewExtension.pluginName); + static readonly #logger = LoggerProvider.getLogger("LinkTargetActionsViewExtension"); #initialized = false; init(): void { diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts index 755982eda..ea92e2280 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/LinkTargetModelView.ts @@ -2,8 +2,8 @@ import { LINK_TARGET_MODEL, LINK_TARGET_VIEW } from "./Constants"; import LinkTargetCommand from "./command/LinkTargetCommand"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import { getLinkAttributes, LinkAttributes } from "@coremedia/ckeditor5-link-common/src/LinkAttributes"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; +import { getLinkAttributes, LinkAttributes } from "@coremedia/ckeditor5-link-common"; import { computeDefaultLinkTargetForUrl } from "./config/LinkTargetConfig"; import { Plugin, DiffItemAttribute, Range, Writer, DiffItem, DiffItemInsert } from "ckeditor5"; @@ -31,7 +31,7 @@ export default class LinkTargetModelView extends Plugin { const { editor } = this; getLinkAttributes(editor)?.registerAttribute({ model: LINK_TARGET_MODEL, - view: LINK_TARGET_VIEW, + view: LINK_TARGET_VIEW }); editor.commands.add("linkTarget", new LinkTargetCommand(editor)); diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/command/LinkTargetCommand.ts b/packages/ckeditor5-coremedia-link/src/linktarget/command/LinkTargetCommand.ts index f42189ebe..d5a3bcb73 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/command/LinkTargetCommand.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/command/LinkTargetCommand.ts @@ -1,5 +1,5 @@ import { LINK_TARGET_MODEL } from "../Constants"; -import { LINK_HREF_MODEL } from "@coremedia/ckeditor5-link-common/src/Constants"; +import { LINK_HREF_MODEL } from "@coremedia/ckeditor5-link-common"; import { Command, Element, @@ -10,7 +10,7 @@ import { Model, Writer, first, - findAttributeRange, + findAttributeRange } from "ckeditor5"; /** @@ -170,7 +170,7 @@ class LinkTargetCommand extends Command { const linkHrefModel = selection?.getAttribute(LINK_HREF_MODEL); if (typeof linkHrefModel !== "string") { throw new Error( - `Unexpected type for attribute ${LINK_HREF_MODEL}. Expected "string" but value is: ${linkHrefModel}`, + `Unexpected type for attribute ${LINK_HREF_MODEL}. Expected "string" but value is: ${linkHrefModel}` ); } return findAttributeRanges(selection.getFirstPosition(), LINK_HREF_MODEL, linkHrefModel, model); @@ -191,7 +191,7 @@ class LinkTargetCommand extends Command { position: Position | null | undefined, attributeName: string, value: string, - model: Model, + model: Model ): Range[] { if (!position) { return []; @@ -199,5 +199,6 @@ class LinkTargetCommand extends Command { return [findAttributeRange(position, attributeName, value, model)]; } } + export default LinkTargetCommand; export { Target, DeletedTarget }; diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetInputFormView.ts b/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetInputFormView.ts index e31165558..7efdabc68 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetInputFormView.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetInputFormView.ts @@ -36,6 +36,7 @@ export default class CustomLinkTargetInputFormView extends View { // declared, because we extend this view by calling {@link injectCssTransitionDisabler} later on declare enableCssTransitions: () => void; declare disableCssTransitions: () => void; + constructor(linkTargetCommand: Command, locale?: Locale) { super(locale); const t = this.locale?.t; diff --git a/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts b/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts index 4431b83b9..daaae8943 100644 --- a/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts +++ b/packages/ckeditor5-coremedia-link/src/linktarget/ui/CustomLinkTargetUI.ts @@ -2,7 +2,7 @@ import CustomLinkTargetInputFormView from "./CustomLinkTargetInputFormView"; import { parseLinkTargetConfig } from "../config/LinkTargetConfig"; import { OTHER_TARGET_NAME, requireDefaultTargetDefinition } from "../config/DefaultTarget"; import LinkTargetOptionDefinition from "../config/LinkTargetOptionDefinition"; -import { ifCommand } from "@coremedia/ckeditor5-core-common/src/Commands"; +import { ifCommand } from "@coremedia/ckeditor5-core-common"; import { Plugin, Command, @@ -13,9 +13,9 @@ import { Config, PositionOptions, LinkUI, - EditorConfig, + EditorConfig } from "ckeditor5"; -import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; +import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common"; /** * Adds a button to the `LinkUI` for selecting a custom target, i.e., if @@ -73,11 +73,11 @@ export default class CustomLinkTargetUI extends Plugin { // First provide some defaults, in case they don't exist in definition. ...requireDefaultTargetDefinition(OTHER_TARGET_NAME), // Now override with definition found in config. - ...linkTargetDefinitions.find((definition) => definition.name === OTHER_TARGET_NAME), + ...linkTargetDefinitions.find((definition) => definition.name === OTHER_TARGET_NAME) }; return { otherNames, - myConfig, + myConfig }; } @@ -97,7 +97,7 @@ export default class CustomLinkTargetUI extends Plugin { tooltip: true, icon: definition.icon, class: "cm-ck-target-button", - isToggleable: true, + isToggleable: true }); view.bind("isOn").to(linkTargetCommand, "value", (value: unknown) => { if (typeof value !== "string") { @@ -173,7 +173,7 @@ export default class CustomLinkTargetUI extends Plugin { emitter: this.#form, activator: () => this.#isVisible, contextElements: [element], - callback: () => this.#hideForm(), + callback: () => this.#hideForm() }); } @@ -194,7 +194,7 @@ export default class CustomLinkTargetUI extends Plugin { if (!this.#isInBalloon) { this.#balloon?.add({ view: this.#form, - position: this.#getBalloonPositionData(), + position: this.#getBalloonPositionData() }); } const commandValue: string = (linkTargetCommand?.value ?? "") as string; diff --git a/packages/ckeditor5-coremedia-link/tsconfig.json b/packages/ckeditor5-coremedia-link/tsconfig.json index 3c84dda6c..fd7844f29 100644 --- a/packages/ckeditor5-coremedia-link/tsconfig.json +++ b/packages/ckeditor5-coremedia-link/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__mocks__", "./__tests__", diff --git a/packages/ckeditor5-coremedia-richtext-support/package.json b/packages/ckeditor5-coremedia-richtext-support/package.json index 0322bfae4..0d495ef9a 100644 --- a/packages/ckeditor5-coremedia-richtext-support/package.json +++ b/packages/ckeditor5-coremedia-richtext-support/package.json @@ -33,12 +33,25 @@ "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" diff --git a/packages/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport.ts b/packages/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport.ts index 67455a70a..56fc6b984 100644 --- a/packages/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport.ts +++ b/packages/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport.ts @@ -1,6 +1,6 @@ import { Plugin, GeneralHtmlSupport } from "ckeditor5"; import RichTextDataFilter from "./RichTextDataFilter"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; /** * Wrapper plugin to enable GeneralRichTextSupport based on CKEditor's @@ -9,9 +9,11 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common class GeneralRichTextSupport extends Plugin { public static readonly pluginName = "GeneralRichTextSupport" as const; static readonly requires = [GeneralHtmlSupport, RichTextDataFilter]; + init(): Promise | void { const initInformation = reportInitStart(this); reportInitEnd(initInformation); } } + export default GeneralRichTextSupport; diff --git a/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts b/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts index 849ba5dc4..376e6b16d 100644 --- a/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts +++ b/packages/ckeditor5-coremedia-richtext-support/src/RichTextDataFilter.ts @@ -1,6 +1,5 @@ -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { Plugin, DataFilter } from "ckeditor5"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; +import { DataFilter, Plugin } from "ckeditor5"; import ReducedMatcherPattern, { InheritingMatcherPattern, resolveInheritance, @@ -8,7 +7,7 @@ import ReducedMatcherPattern, { } from "./ReducedMatcherPattern"; import { COREMEDIA_RICHTEXT_1_0_CONFIG } from "./CoreMediaRichText10Dtd"; import { getConfig } from "./CoreMediaRichTextSupportConfig"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; /** * Plugin, which configures CKEditor's General HTML Support, so that @@ -24,7 +23,7 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common */ class RichTextDataFilter extends Plugin { public static readonly pluginName = "GeneralRichTextDataFilter" as const; - static readonly #logger: Logger = LoggerProvider.getLogger(RichTextDataFilter.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("GeneralRichTextDataFilter"); static readonly requires = [DataFilter]; #delegate: DataFilter | undefined = undefined; readonly #config: ReducedMatcherPattern[] = []; diff --git a/packages/ckeditor5-coremedia-richtext-support/src/augmentation.ts b/packages/ckeditor5-coremedia-richtext-support/src/augmentation.ts index acc08bd6f..c95230206 100644 --- a/packages/ckeditor5-coremedia-richtext-support/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-richtext-support/src/augmentation.ts @@ -1,9 +1,9 @@ -import { +import CoreMediaRichTextSupportConfig, { COREMEDIA_RICHTEXT_SUPPORT_CONFIG_KEY, - CoreMediaRichTextSupportConfig, - GeneralRichTextSupport, - RichTextDataFilter, -} from "./index"; +} from "./CoreMediaRichTextSupportConfig"; +import GeneralRichTextSupport from "./GeneralRichTextSupport"; +import RichTextDataFilter from "./RichTextDataFilter"; + declare module "ckeditor5" { interface EditorConfig { /** @@ -13,6 +13,7 @@ declare module "ckeditor5" { */ [COREMEDIA_RICHTEXT_SUPPORT_CONFIG_KEY]?: CoreMediaRichTextSupportConfig; } + interface PluginsMap { [GeneralRichTextSupport.pluginName]: GeneralRichTextSupport; [RichTextDataFilter.pluginName]: RichTextDataFilter; diff --git a/packages/ckeditor5-coremedia-richtext-support/tsconfig.json b/packages/ckeditor5-coremedia-richtext-support/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-coremedia-richtext-support/tsconfig.json +++ b/packages/ckeditor5-coremedia-richtext-support/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/Silenced.ts b/packages/ckeditor5-coremedia-richtext/__tests__/Silenced.ts index 9a9aea580..64fd883a0 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/Silenced.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/Silenced.ts @@ -1,3 +1,5 @@ +import { jest as jestGlobal } from "@jest/globals"; + /** * Suppresses Console Output while executing the given function, if * `silent === true`. @@ -9,11 +11,11 @@ const silenced = (call: () => T, silent = true): T => { const consoleOutputs: (keyof Console)[] = ["log", "error", "warn", "info", "debug"]; const spies: jest.SpyInstance[] = []; consoleOutputs.forEach((output) => { - const spy = jest.spyOn(console, output); + const spy = jestGlobal.spyOn(console, output); spies.push(spy); if (silent) { // eslint-disable-next-line no-null/no-null - spy.mockImplementation(() => null); + spy.mockImplementation(() => null as unknown as Console); } }); try { diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/DataDrivenTests.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/DataDrivenTests.ts index 25531a85d..c40009e2e 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/DataDrivenTests.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/DataDrivenTests.ts @@ -1,9 +1,8 @@ import "jest-xml-matcher"; -import HtmlFilter from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; +import { HtmlFilter } from "@coremedia/ckeditor5-dataprocessor-support"; import { Editor } from "ckeditor5"; import { getV10Config, parseXml } from "./Utils"; import { silenced } from "../../Silenced"; -jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); //@ts-expect-error We should rather mock ClassicEditor or similar here. export const MOCK_EDITOR = new Editor(); @@ -72,6 +71,7 @@ export interface DirectionRestriction { */ direction?: Direction; } + export type DocumentPostProcessor = (document: Document) => void; /** diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/RichTextSchema.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/RichTextSchema.test.ts index 95677564a..decd05e9e 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/RichTextSchema.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/RichTextSchema.test.ts @@ -2,7 +2,7 @@ import "jest-xml-matcher"; import RichTextSchema, { V10Strictness } from "../../../src/compatibility/v10/RichTextSchema"; -import ElementProxy from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; +import { ElementProxy } from "@coremedia/ckeditor5-dataprocessor-support"; import { Strictness } from "../../../src/Strictness"; interface CommentableTestData { diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts index e5719929b..bd90a5f9f 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts @@ -3,9 +3,12 @@ import "jest-xml-matcher"; import ToDataProcessor from "../../../src/ToDataProcessor"; import { Editor } from "ckeditor5"; -import HtmlFilter from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; +import { HtmlFilter } from "@coremedia/ckeditor5-dataprocessor-support"; import { getV10Config } from "./Utils"; -jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); + const EXECUTION_REPETITIONS = 100; const FIBONACCI_INDEX_FROM = 1; /** @@ -81,12 +84,14 @@ interface PerformanceTestData { */ gracePercentage: number; } + interface TestData extends PerformanceTestData { /** * The DOM we start from. */ from: string; } + type NamedTestData = [ /** * A name/description for the test (will be printed to output). diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Anchor.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Anchor.test.ts index 5cee1259a..4f2180ef8 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Anchor.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Anchor.test.ts @@ -1,6 +1,9 @@ /* eslint @typescript-eslint/naming-convention: off */ import { allDataProcessingTests, DataProcessingTestCase, Direction } from "../DataDrivenTests"; +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); // noinspection HttpUrlsUsage const ns_richtext = "http://www.coremedia.com/2003/richtext-1.0"; @@ -47,6 +50,7 @@ interface XLinkBehavior { show?: string; role?: string; } + type XlinkBehaviorDefinition = XLinkBehavior & { comment?: string; non_bijective?: boolean; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Block.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Block.test.ts index af0bfa4f8..f742bc567 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Block.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Block.test.ts @@ -1,5 +1,8 @@ import { allDataProcessingTests, DataProcessingTestCase, Direction } from "../DataDrivenTests"; import { flatten } from "../Utils"; +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); // noinspection HttpUrlsUsage const ns_richtext = "http://www.coremedia.com/2003/richtext-1.0"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Heading.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Heading.test.ts index ebfd8abd0..b44d4a250 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Heading.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Heading.test.ts @@ -1,5 +1,8 @@ import { allDataProcessingTests, DataProcessingTestCase, Direction } from "../DataDrivenTests"; import { flatten } from "../Utils"; +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); // noinspection HttpUrlsUsage const ns_richtext = "http://www.coremedia.com/2003/richtext-1.0"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/AnchorElements.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/AnchorElements.test.ts index 90657266b..f3e2437ed 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/AnchorElements.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/AnchorElements.test.ts @@ -2,7 +2,7 @@ import * as aut from "../../src/rules/AnchorElements"; import { silenced } from "../Silenced"; -import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { RulesTester } from "./RulesTester"; import { bijective, TestDirection } from "./TestDirection"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/BasicInlineElements.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/BasicInlineElements.test.ts index 51b69339a..c7110287a 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/BasicInlineElements.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/BasicInlineElements.test.ts @@ -1,5 +1,5 @@ import * as aut from "../../src/rules/BasicInlineElements"; -import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { bijective, TestDirection, toData } from "./TestDirection"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/CodeElements.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/CodeElements.test.ts index bf12470db..8590c4664 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/CodeElements.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/CodeElements.test.ts @@ -1,5 +1,5 @@ import * as aut from "../../src/rules/CodeElements"; -import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { bijective, TestDirection } from "./TestDirection"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/DefaultRules.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/DefaultRules.test.ts index a8ffd0257..e5f16d8de 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/DefaultRules.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/DefaultRules.test.ts @@ -1,7 +1,7 @@ // noinspection HtmlUnknownAttribute import * as aut from "../../src/rules/DefaultRules"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { bijective, TestDirection, toView } from "./TestDirection"; import { INLINE_IMG } from "../../src/rules/ImageElements"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/DivElements.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/DivElements.test.ts index 101d4a195..bf2fe0322 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/DivElements.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/DivElements.test.ts @@ -1,5 +1,5 @@ import * as aut from "../../src/rules/DivElements"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { bijective, TestDirection } from "./TestDirection"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/HeadingElements.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/HeadingElements.test.ts index b3e103cd0..d15384fa4 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/HeadingElements.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/HeadingElements.test.ts @@ -1,5 +1,5 @@ import * as aut from "../../src/rules/HeadingElements"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { bijective, TestDirection } from "./TestDirection"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/ImageElements.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/ImageElements.test.ts index 02a36ed17..cb11169ab 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/ImageElements.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/ImageElements.test.ts @@ -1,7 +1,7 @@ // noinspection HtmlUnknownAttribute,HtmlRequiredAltAttribute import * as aut from "../../src/rules/ImageElements"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { bijective, TestDirection, toData } from "./TestDirection"; import { INLINE_IMG } from "../../src/rules/ImageElements"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/LanguageAttributes.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/LanguageAttributes.test.ts index 1701c8f55..caf16bfa2 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/LanguageAttributes.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/LanguageAttributes.test.ts @@ -1,5 +1,5 @@ import * as aut from "../../src/rules/LanguageAttributes"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { bijective, TestDirection, toData, toView } from "./TestDirection"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/RuleBasedHtmlDomConverters.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/RuleBasedHtmlDomConverters.ts index d1d530cad..7d2895003 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/RuleBasedHtmlDomConverters.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/RuleBasedHtmlDomConverters.ts @@ -1,6 +1,11 @@ -import { byPriority, parseRule, RuleConfig, RuleSection } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { RuleBasedConversionListener } from "@coremedia/ckeditor5-dom-converter/src/RuleBasedConversionListener"; -import { HtmlDomConverter } from "@coremedia/ckeditor5-dom-converter/src/HtmlDomConverter"; +import { + byPriority, + parseRule, + RuleConfig, + RuleSection, + RuleBasedConversionListener, + HtmlDomConverter, +} from "@coremedia/ckeditor5-dom-converter"; /** * Lightweight "data processor" just providing access to the DOM Converter API. diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/RulesTester.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/RulesTester.ts index d0abcf3ef..b89095c73 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/RulesTester.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/RulesTester.ts @@ -1,6 +1,6 @@ import { RuleBasedHtmlDomConverterFactory } from "./RuleBasedHtmlDomConverters"; import { isToData, isToView, TestDirection } from "./TestDirection"; -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import "jest-xml-matcher"; @@ -11,6 +11,7 @@ export class RulesTester { readonly factory = new RuleBasedHtmlDomConverterFactory(); readonly xmlSerializer = new XMLSerializer(); readonly domParser = new DOMParser(); + constructor( public readonly rules: RuleConfig[], public readonly xmlElementSelector: string, diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/SuppressedElements.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/SuppressedElements.test.ts index 8b5ae6aad..09e4148ea 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/SuppressedElements.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/SuppressedElements.test.ts @@ -1,5 +1,5 @@ import * as aut from "../../src/rules/SuppressedElements"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { TestDirection, toData } from "./TestDirection"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/rules/TableElements.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/rules/TableElements.test.ts index e09c2c958..7b6981e1b 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/rules/TableElements.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/rules/TableElements.test.ts @@ -1,7 +1,7 @@ // noinspection HtmlUnknownAttribute import * as aut from "../../src/rules/TableElements"; -import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { bijective, TestDirection, toData, toView } from "./TestDirection"; import { RulesTester } from "./RulesTester"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/sanitation/RichTextSanitizer.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/sanitation/RichTextSanitizer.test.ts index bbaa653e4..8fb976979 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/sanitation/RichTextSanitizer.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/sanitation/RichTextSanitizer.test.ts @@ -22,10 +22,13 @@ import { td, tr, ul, -} from "@coremedia-internal/ckeditor5-coremedia-example-data/src/RichTextBase"; +} from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { sanitationListener } from "./TestSanitationListener"; import { parseXml } from "./XmlTestUtils"; import { expectSanitationResult } from "./ExpectSanitationResult"; +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); export const createRichTextSanitizer = (strictness: Strictness = defaultStrictness): RichTextSanitizer => new RichTextSanitizer(strictness, sanitationListener); diff --git a/packages/ckeditor5-coremedia-richtext/package.json b/packages/ckeditor5-coremedia-richtext/package.json index 847628163..c2a098f7e 100644 --- a/packages/ckeditor5-coremedia-richtext/package.json +++ b/packages/ckeditor5-coremedia-richtext/package.json @@ -21,7 +21,7 @@ "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", - "jest": "jest", + "jest": "jest --passWithNoTests", "jest:coverage": "jest --collect-coverage", "npm-check-updates": "npm-check-updates --upgrade" }, @@ -29,17 +29,32 @@ "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-coremedia-example-data": "^1.0.0", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "ts-jest": "^29.2.4", + "typescript": "5.4.5" }, - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/coremedia-richtext*", diff --git a/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichText.ts b/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichText.ts index 2e4882887..e503a87b3 100644 --- a/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichText.ts +++ b/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichText.ts @@ -1,6 +1,6 @@ import V10RichTextDataProcessor from "./compatibility/v10/V10RichTextDataProcessor"; import { COREMEDIA_RICHTEXT_PLUGIN_NAME } from "./Constants"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { Plugin, DataProcessor } from "ckeditor5"; import RichTextDataProcessor from "./RichTextDataProcessor"; import { getCoreMediaRichTextConfig } from "./CoreMediaRichTextConfig"; @@ -12,6 +12,7 @@ import { LinkIntegration } from "./integrations/LinkIntegration"; export default class CoreMediaRichText extends Plugin { public static readonly pluginName = COREMEDIA_RICHTEXT_PLUGIN_NAME; static readonly requires = [LinkIntegration]; + init(): void { const initInformation = reportInitStart(this); const { editor } = this; diff --git a/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichTextConfig.ts b/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichTextConfig.ts index 91f7be6a9..4231b9cf6 100644 --- a/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichTextConfig.ts +++ b/packages/ckeditor5-coremedia-richtext/src/CoreMediaRichTextConfig.ts @@ -1,7 +1,8 @@ import { defaultStrictness, Strictness } from "./Strictness"; -import { FilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { FilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import { Config as CKEditorConfig, EditorConfig } from "ckeditor5"; + export const COREMEDIA_RICHTEXT_CONFIG_KEY = "coremedia:richtext"; /** @@ -25,22 +26,26 @@ export const compatibilityKeys: readonly string[] = ["latest", "v10"]; * The type of compatibility keys. */ export type CompatibilityKey = (typeof compatibilityKeys)[number]; + export interface CompatibilityConfig { /** * Compatibility mode of data-processing. */ readonly compatibility?: CompatibilityKey; } + export interface CommonCoreMediaRichTextConfig extends CompatibilityConfig { /** * The strictness when validating against CoreMedia RichText 1.0 DTD. */ readonly strictness?: Strictness; } + export interface LatestCoreMediaRichTextConfig extends CommonCoreMediaRichTextConfig { readonly compatibility: "latest"; readonly rules?: RuleConfig[]; } + const isLatestCoreMediaRichTextConfig = (value: unknown): value is LatestCoreMediaRichTextConfig => { if (value && typeof value === "object") { if (value.hasOwnProperty("compatibility")) { @@ -50,6 +55,7 @@ const isLatestCoreMediaRichTextConfig = (value: unknown): value is LatestCoreMed } return false; }; + export interface V10CoreMediaRichTextConfig extends CommonCoreMediaRichTextConfig { readonly compatibility: "v10"; /** @@ -57,6 +63,7 @@ export interface V10CoreMediaRichTextConfig extends CommonCoreMediaRichTextConfi */ readonly rules?: FilterRuleSetConfiguration; } + const isV10CoreMediaRichTextConfig = (value: unknown): value is V10CoreMediaRichTextConfig => { if (value && typeof value === "object") { if (value.hasOwnProperty("compatibility")) { diff --git a/packages/ckeditor5-coremedia-richtext/src/RichTextDataProcessor.ts b/packages/ckeditor5-coremedia-richtext/src/RichTextDataProcessor.ts index 2c7fa6259..384b50a47 100644 --- a/packages/ckeditor5-coremedia-richtext/src/RichTextDataProcessor.ts +++ b/packages/ckeditor5-coremedia-richtext/src/RichTextDataProcessor.ts @@ -1,27 +1,30 @@ -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import RichTextXmlWriter from "./RichTextXmlWriter"; import { COREMEDIA_RICHTEXT_NAMESPACE_URI, COREMEDIA_RICHTEXT_PLUGIN_NAME } from "./Constants"; import { - ViewDocument, - ViewDocumentFragment, - HtmlDataProcessor, DataProcessor, DomConverter, - MatcherPattern, Editor, + HtmlDataProcessor, + MatcherPattern, ObservableMixin, + ViewDocument, + ViewDocumentFragment, } from "ckeditor5"; -import { parseRule, RuleConfig, RuleSection } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { + HtmlDomConverter, + parseRule, + RuleBasedConversionListener, + RuleConfig, + RuleSection, +} from "@coremedia/ckeditor5-dom-converter"; import { declareCoreMediaRichText10Entities } from "./Entities"; import { defaultRules } from "./rules/DefaultRules"; import { Strictness } from "./Strictness"; -import { registerNamespacePrefixes } from "@coremedia/ckeditor5-dom-support/src/Namespaces"; +import { registerNamespacePrefixes } from "@coremedia/ckeditor5-dom-support"; import { TrackingSanitationListener } from "./sanitation/TrackingSanitationListener"; import { RichTextSanitizer } from "./sanitation/RichTextSanitizer"; import { getLatestCoreMediaRichTextConfig } from "./CoreMediaRichTextConfig"; -import { RuleBasedConversionListener } from "@coremedia/ckeditor5-dom-converter/src/RuleBasedConversionListener"; -import { HtmlDomConverter } from "@coremedia/ckeditor5-dom-converter/src/HtmlDomConverter"; /** * Creates an empty CoreMedia RichText Document with required namespace @@ -124,9 +127,11 @@ export default class RichTextDataProcessor extends ObservableMixin() implements */ this.#delegate.domConverter.preElements.push("xdiff:span"); } + registerRawContentMatcher(pattern: MatcherPattern): void { this.#delegate.registerRawContentMatcher(pattern); } + useFillerType(type: "default" | "marked"): void { this.#delegate.useFillerType(type); } diff --git a/packages/ckeditor5-coremedia-richtext/src/RichTextXmlWriter.ts b/packages/ckeditor5-coremedia-richtext/src/RichTextXmlWriter.ts index 215f4edc7..79a66c9ba 100644 --- a/packages/ckeditor5-coremedia-richtext/src/RichTextXmlWriter.ts +++ b/packages/ckeditor5-coremedia-richtext/src/RichTextXmlWriter.ts @@ -5,6 +5,7 @@ export default class RichTextXmlWriter { readonly #serializer: XMLSerializer = new XMLSerializer(); getXml(fragment: Node | DocumentFragment): string { + const a = []; return this.#serializer.serializeToString(fragment); } } diff --git a/packages/ckeditor5-coremedia-richtext/src/ToDataProcessor.ts b/packages/ckeditor5-coremedia-richtext/src/ToDataProcessor.ts index b17080bd5..90a3a5ce0 100644 --- a/packages/ckeditor5-coremedia-richtext/src/ToDataProcessor.ts +++ b/packages/ckeditor5-coremedia-richtext/src/ToDataProcessor.ts @@ -1,4 +1,4 @@ -import HtmlFilter from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; +import { HtmlFilter } from "@coremedia/ckeditor5-dataprocessor-support"; import { COREMEDIA_RICHTEXT_NAMESPACE_URI } from "./Constants"; /** diff --git a/packages/ckeditor5-coremedia-richtext/src/augmentation.ts b/packages/ckeditor5-coremedia-richtext/src/augmentation.ts index 5e7094390..de0a8981f 100644 --- a/packages/ckeditor5-coremedia-richtext/src/augmentation.ts +++ b/packages/ckeditor5-coremedia-richtext/src/augmentation.ts @@ -1,4 +1,7 @@ -import { CoreMediaRichTextConfig, COREMEDIA_RICHTEXT_CONFIG_KEY, CoreMediaRichText, LinkIntegration } from "./index"; +import CoreMediaRichTextConfig, { COREMEDIA_RICHTEXT_CONFIG_KEY } from "./CoreMediaRichTextConfig"; +import CoreMediaRichText from "./CoreMediaRichText"; +import { LinkIntegration } from "./integrations/LinkIntegration"; + declare module "ckeditor5" { interface EditorConfig { /** @@ -8,6 +11,7 @@ declare module "ckeditor5" { */ [COREMEDIA_RICHTEXT_CONFIG_KEY]?: CoreMediaRichTextConfig; } + interface PluginsMap { [CoreMediaRichText.pluginName]: CoreMediaRichText; [LinkIntegration.pluginName]: LinkIntegration; diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/RichTextSchema.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/RichTextSchema.ts index af585100c..56957d8f4 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/RichTextSchema.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/RichTextSchema.ts @@ -8,10 +8,8 @@ * ============================================================================= */ -import ElementProxy from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; -import TextProxy from "@coremedia/ckeditor5-dataprocessor-support/src/TextProxy"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { ElementProxy, TextProxy } from "@coremedia/ckeditor5-dataprocessor-support"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { Strictness } from "../../Strictness"; /** diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10CoreMediaRichTextConfig.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10CoreMediaRichTextConfig.ts index 79cd82565..ada0da8bb 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10CoreMediaRichTextConfig.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10CoreMediaRichTextConfig.ts @@ -1,11 +1,11 @@ import RichTextSchema, { V10Strictness } from "./RichTextSchema"; -import { allFilterRules } from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; -import { FilterRuleSet } from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; import { + allFilterRules, + FilterRuleSet, FilterRuleSetConfiguration, parseFilterRuleSetConfigurations, ToDataAndViewElementConfiguration, -} from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; +} from "@coremedia/ckeditor5-dataprocessor-support"; import { replaceBy, replaceByElementAndClassBackAndForth, replaceElementAndClassBy } from "./rules/ReplaceBy"; import { headingRules, paragraphToHeading } from "./rules/Heading"; import { handleAnchor } from "./rules/Anchor"; diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts index 532ea928e..59247d1ff 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/V10RichTextDataProcessor.ts @@ -1,7 +1,6 @@ -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import RichTextXmlWriter from "../../RichTextXmlWriter"; -import HtmlFilter from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; +import { HtmlFilter } from "@coremedia/ckeditor5-dataprocessor-support"; import RichTextSchema from "./RichTextSchema"; import { COREMEDIA_RICHTEXT_PLUGIN_NAME } from "../../Constants"; import { getConfig } from "./V10CoreMediaRichTextConfig"; diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Anchor.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Anchor.ts index ce6005e97..ee8ecd5fc 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Anchor.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Anchor.ts @@ -1,5 +1,4 @@ -import { ToDataAndViewElementConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; -import ElementProxy from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; +import { ToDataAndViewElementConfiguration, ElementProxy } from "@coremedia/ckeditor5-dataprocessor-support"; import { xLinkActuateMapper, xLinkTitleMapper, xLinkTypeMapper } from "./XLink"; import { langMapper } from "./Lang"; import { formatLink } from "./IdHelper"; diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Heading.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Heading.ts index 4864b2d8d..708bf641a 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Heading.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Heading.ts @@ -1,7 +1,9 @@ -import { ElementFilterRule } from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; -import { ElementsFilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; +import { + ElementFilterRule, + ElementsFilterRuleSetConfiguration, + warnOnAmbiguousElementState, +} from "@coremedia/ckeditor5-dataprocessor-support"; import { langMapper } from "./Lang"; -import { warnOnAmbiguousElementState } from "@coremedia/ckeditor5-dataprocessor-support/src/RulesLogger"; const HEADING_NUMBER_PATTERN = /^h(\d+)$/; const HEADING_CLASSES = Array.from(Array(6).keys()).map((i) => `p--heading-${i + 1}`); diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Image.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Image.ts index 483b63c87..f0d50dedf 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Image.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Image.ts @@ -1,5 +1,4 @@ -import { ToDataAndViewElementConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; -import ElementProxy from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; +import { ToDataAndViewElementConfiguration, ElementProxy } from "@coremedia/ckeditor5-dataprocessor-support"; import { xLinkActuateMapper, xLinkHrefMapper, diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Lang.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Lang.ts index 63ad53ce7..bb311c652 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Lang.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Lang.ts @@ -2,9 +2,9 @@ import { asDataFilterRule, asViewFilterRule, preserveAttributeAs, -} from "@coremedia/ckeditor5-dataprocessor-support/src/Attributes"; -import { ElementFilterRule } from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; -import { ToDataAndViewElementConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; + ElementFilterRule, + ToDataAndViewElementConfiguration, +} from "@coremedia/ckeditor5-dataprocessor-support"; /** * Maps `xml:lang` and `lang` from data (CoreMedia RichText) to `lang`. diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/List.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/List.ts index a9cb9581e..da89b33a1 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/List.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/List.ts @@ -1,5 +1,8 @@ -import { allFilterRules, ElementFilterRule } from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; -import { ElementsFilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; +import { + allFilterRules, + ElementFilterRule, + ElementsFilterRuleSetConfiguration, +} from "@coremedia/ckeditor5-dataprocessor-support"; import { langDataFilterRule, langMapperConfiguration, langViewFilterRule } from "./Lang"; // Workaround/Fix for CMS-10539 (Error while Saving when deleting in Lists, MSIE11) diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/ReplaceBy.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/ReplaceBy.ts index 3d655e146..383bebabe 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/ReplaceBy.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/ReplaceBy.ts @@ -1,8 +1,12 @@ -import { ToDataAndViewElementConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; -import { ElementFilterRulesByName } from "@coremedia/ckeditor5-dataprocessor-support/src/HtmlFilter"; -import { allFilterRules, ElementFilterRule } from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; -import { asDataFilterRule, AttributeMapper } from "@coremedia/ckeditor5-dataprocessor-support/src/Attributes"; -import { warnOnAmbiguousElementState } from "@coremedia/ckeditor5-dataprocessor-support/src/RulesLogger"; +import { + ToDataAndViewElementConfiguration, + ElementFilterRulesByName, + allFilterRules, + ElementFilterRule, + asDataFilterRule, + AttributeMapper, + warnOnAmbiguousElementState, +} from "@coremedia/ckeditor5-dataprocessor-support"; /** * Rule to replace a given element by a new element with an optional diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Schema.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Schema.ts index 1f4e457c5..afe91d5c7 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Schema.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Schema.ts @@ -1,12 +1,15 @@ /* eslint no-null/no-null: off */ -import { ElementFilterParams } from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; -import { TextFilterParams } from "@coremedia/ckeditor5-dataprocessor-support/src/TextProxy"; +import { + ElementFilterParams, + TextFilterParams, + ElementsFilterRuleSetConfiguration, +} from "@coremedia/ckeditor5-dataprocessor-support"; import RichTextSchema from "../RichTextSchema"; -import { ElementsFilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; import { DataProcessor } from "ckeditor5"; import V10RichTextDataProcessor from "../V10RichTextDataProcessor"; import { Strictness } from "../../../Strictness"; + export const defaultSchema = new RichTextSchema(Strictness.STRICT); /** diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Table.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Table.ts index 0dda50d9d..ecf91f0ab 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Table.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/Table.ts @@ -1,6 +1,5 @@ -import { ElementsFilterRuleSetConfiguration } from "@coremedia/ckeditor5-dataprocessor-support/src/Rules"; +import { ElementsFilterRuleSetConfiguration, ElementFilterParams } from "@coremedia/ckeditor5-dataprocessor-support"; import { replaceByElementAndClassBackAndForth } from "./ReplaceBy"; -import { ElementFilterParams } from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; import { langMapper, langMapperConfiguration, langViewFilterRule } from "./Lang"; /** diff --git a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/XLink.ts b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/XLink.ts index 20cf98831..d531b6031 100644 --- a/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/XLink.ts +++ b/packages/ckeditor5-coremedia-richtext/src/compatibility/v10/rules/XLink.ts @@ -1,9 +1,9 @@ import { + ElementProxy, AttributeMapper, preserveAttributeAs, renameAttribute, -} from "@coremedia/ckeditor5-dataprocessor-support/src/Attributes"; -import ElementProxy from "@coremedia/ckeditor5-dataprocessor-support/src/ElementProxy"; +} from "@coremedia/ckeditor5-dataprocessor-support"; import { formatLink } from "./IdHelper"; /** diff --git a/packages/ckeditor5-coremedia-richtext/src/index.ts b/packages/ckeditor5-coremedia-richtext/src/index.ts index f7e4a5b22..18a91dd39 100644 --- a/packages/ckeditor5-coremedia-richtext/src/index.ts +++ b/packages/ckeditor5-coremedia-richtext/src/index.ts @@ -16,11 +16,12 @@ export type { LatestCoreMediaRichTextConfig, V10CoreMediaRichTextConfig, } from "./CoreMediaRichTextConfig"; -export { default as RichTextDataProcessor } from "./RichTextDataProcessor"; +export { default as RichTextDataProcessor, isRichTextDataProcessor } from "./RichTextDataProcessor"; export { default as RichTextXmlWriter } from "./RichTextXmlWriter"; export { default as ToDataProcessor } from "./ToDataProcessor"; export { COREMEDIA_RICHTEXT_1_0_DTD, declareCoreMediaRichText10Entities } from "./Entities"; export { Strictness, defaultStrictness } from "./Strictness"; +export { namespaces } from "./Namespaces"; /* * `integrations/` @@ -34,6 +35,7 @@ export { LinkIntegration } from "./integrations/LinkIntegration"; export { replaceByChildren, type ReplaceByChildrenConfig } from "./rules/ReplaceByChildren"; export { replaceElementByElement, type ReplaceElementByElementConfig } from "./rules/ReplaceElementByElement"; +export { replaceByElementAndClassBackAndForth } from "./rules/ReplaceBy"; export { replaceElementByElementAndClass, type ReplaceElementByElementAndClassConfig, diff --git a/packages/ckeditor5-coremedia-richtext/src/integrations/LinkIntegration.ts b/packages/ckeditor5-coremedia-richtext/src/integrations/LinkIntegration.ts index 645b61ecc..4251cfbed 100644 --- a/packages/ckeditor5-coremedia-richtext/src/integrations/LinkIntegration.ts +++ b/packages/ckeditor5-coremedia-richtext/src/integrations/LinkIntegration.ts @@ -1,6 +1,6 @@ import { Plugin } from "ckeditor5"; -import { getLinkAttributes, LinkAttributes } from "@coremedia/ckeditor5-link-common/src/LinkAttributes"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { getLinkAttributes, LinkAttributes } from "@coremedia/ckeditor5-link-common"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; /** * Provides integration with the CKEditor 5 Link Feature. @@ -8,6 +8,7 @@ import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common export class LinkIntegration extends Plugin { public static readonly pluginName = "LinkIntegration" as const; static readonly requires = [LinkAttributes]; + init(): void { const initInformation = reportInitStart(this); const { editor } = this; diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/AnchorElements.ts b/packages/ckeditor5-coremedia-richtext/src/rules/AnchorElements.ts index 6f39dbb0b..534fd3dab 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/AnchorElements.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/AnchorElements.ts @@ -6,9 +6,8 @@ import { XLinkAttributes, xLinkNamespaceUri, } from "./XLink"; -import { RuleConfig, RuleSectionConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { isHTMLAnchorElement } from "@coremedia/ckeditor5-dom-support/src/HTMLAnchorElements"; -import { ConversionApi } from "@coremedia/ckeditor5-dom-converter/src/ConversionApi"; +import { ConversionApi, RuleConfig, RuleSectionConfig } from "@coremedia/ckeditor5-dom-converter"; +import { isHTMLAnchorElement } from "@coremedia/ckeditor5-dom-support"; import { RequireSelected } from "@coremedia/ckeditor5-common"; export const contentUriPathPrefix = "content"; diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/DefaultRules.ts b/packages/ckeditor5-coremedia-richtext/src/rules/DefaultRules.ts index f7f3b1d4e..a57c72923 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/DefaultRules.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/DefaultRules.ts @@ -1,4 +1,4 @@ -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import { headingElements } from "./HeadingElements"; import { languageAttributes } from "./LanguageAttributes"; import { basicInlineElements } from "./BasicInlineElements"; diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/Direction.ts b/packages/ckeditor5-coremedia-richtext/src/rules/Direction.ts index 4ab5b6b64..e3deb98ea 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/Direction.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/Direction.ts @@ -1,4 +1,4 @@ -import { RuleConfig, RuleSectionConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig, RuleSectionConfig } from "@coremedia/ckeditor5-dom-converter"; /** * Direction for mapping to apply. diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ImageElements.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ImageElements.ts index 6c8b7dd79..ed5609dab 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ImageElements.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ImageElements.ts @@ -4,9 +4,8 @@ import { setXLinkAttributes, setXLinkDataSetEntries, } from "./XLink"; -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; -import { isHTMLImageElement } from "@coremedia/ckeditor5-dom-support/src/HTMLImageElements"; -import { isElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; +import { isHTMLImageElement, isElement } from "@coremedia/ckeditor5-dom-support"; import { namespaces } from "../Namespaces"; /** diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/MergeTableSectionsToTableBody.ts b/packages/ckeditor5-coremedia-richtext/src/rules/MergeTableSectionsToTableBody.ts index 9c5ddb0d7..480bfc380 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/MergeTableSectionsToTableBody.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/MergeTableSectionsToTableBody.ts @@ -1,15 +1,15 @@ -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; -import { isHTMLTableElement } from "@coremedia/ckeditor5-dom-support/src/HTMLTableElements"; -import { removeClass } from "@coremedia/ckeditor5-dom-support/src/Elements"; -import { copyAttributesFrom } from "@coremedia/ckeditor5-dom-support/src/Attrs"; +import { copyAttributesFrom, isHTMLTableElement, removeClass } from "@coremedia/ckeditor5-dom-support"; + export interface MergeTableSectionsToTableBodyConfig { headerRowClass?: string; footerRowClass?: string; direction?: Direction; priority?: PriorityString; } + export const defaultMergeTableSectionsToTableBodyConfig: Required = { headerRowClass: "tr--header", footerRowClass: "tr--footer", diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/PreferLangAttribute.ts b/packages/ckeditor5-coremedia-richtext/src/rules/PreferLangAttribute.ts index d04bd77ff..958a899de 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/PreferLangAttribute.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/PreferLangAttribute.ts @@ -1,8 +1,9 @@ /* eslint-disable no-null/no-null */ -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import { PriorityString } from "ckeditor5"; -import { isElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; +import { isElement } from "@coremedia/ckeditor5-dom-support"; import { namespaces } from "../Namespaces"; + const nsXml = namespaces.xml; /** diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceByChildren.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceByChildren.ts index 1f699b410..b84d5361a 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceByChildren.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceByChildren.ts @@ -1,7 +1,8 @@ -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; -import { isElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; +import { isElement } from "@coremedia/ckeditor5-dom-support"; + export interface ReplaceByChildrenConfig { localName: string; /** @@ -11,6 +12,7 @@ export interface ReplaceByChildrenConfig { direction?: Exclude; priority?: PriorityString; } + export const defaultReplaceByChildrenConfig: Required> = { // toData is the typical transformation direction, as it provides less // valid elements than the data view. diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElement.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElement.ts index 56b99cad1..3e066ee7f 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElement.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElement.ts @@ -1,13 +1,15 @@ -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; -import { isElement, renameElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; +import { isElement, renameElement } from "@coremedia/ckeditor5-dom-support"; + export interface ReplaceElementByElementConfig { viewLocalName: string; dataLocalName: string; direction?: Direction; priority?: PriorityString; } + export const defaultReplaceElementByElementConfig: Required< Omit > = { diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass.ts index 0b31fc352..02400bb1a 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceElementByElementAndClass.ts @@ -1,7 +1,8 @@ -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; -import { isElement, removeClass, renameElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; +import { isElement, removeClass, renameElement } from "@coremedia/ckeditor5-dom-support"; + export interface ReplaceElementByElementAndClassConfig { viewLocalName: string; dataLocalName: string; @@ -9,6 +10,7 @@ export interface ReplaceElementByElementAndClassConfig { direction?: Direction; priority?: PriorityString; } + export const applyDefaultReplaceElementByElementAndClassConfig = ( config: ReplaceElementByElementAndClassConfig, ): Required => ({ diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceHeadingsByElementAndClass.ts b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceHeadingsByElementAndClass.ts index 6c6e6967a..1303eaf64 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceHeadingsByElementAndClass.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/ReplaceHeadingsByElementAndClass.ts @@ -1,7 +1,8 @@ -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; import { PriorityString } from "ckeditor5"; import { Direction, resolveDirectionToConfig } from "./Direction"; -import { isElement, renameElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; +import { isElement, renameElement } from "@coremedia/ckeditor5-dom-support"; + const headingRegEx = /^h(?\d)$/; /** diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/TableElements.ts b/packages/ckeditor5-coremedia-richtext/src/rules/TableElements.ts index 6fb01bdac..1cece5a32 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/TableElements.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/TableElements.ts @@ -1,6 +1,6 @@ import { replaceElementByElementAndClass } from "./ReplaceElementByElementAndClass"; import { mergeTableSectionsToTableBody } from "./MergeTableSectionsToTableBody"; -import { RuleConfig } from "@coremedia/ckeditor5-dom-converter/src/Rule"; +import { RuleConfig } from "@coremedia/ckeditor5-dom-converter"; /** * Applies bijective mapping for the table header cells element. diff --git a/packages/ckeditor5-coremedia-richtext/src/rules/XLink.ts b/packages/ckeditor5-coremedia-richtext/src/rules/XLink.ts index bac091ca6..5104f1e59 100644 --- a/packages/ckeditor5-coremedia-richtext/src/rules/XLink.ts +++ b/packages/ckeditor5-coremedia-richtext/src/rules/XLink.ts @@ -1,4 +1,4 @@ -import { capitalize } from "@coremedia/ckeditor5-common/src/Strings"; +import { capitalize } from "@coremedia/ckeditor5-common"; import { describeAttr } from "@coremedia/ckeditor5-dom-support"; export const xLinkNamespaceUri = "http://www.w3.org/1999/xlink"; diff --git a/packages/ckeditor5-coremedia-richtext/src/sanitation/ElementConfig.ts b/packages/ckeditor5-coremedia-richtext/src/sanitation/ElementConfig.ts index df260a5e1..1de4d7e03 100644 --- a/packages/ckeditor5-coremedia-richtext/src/sanitation/ElementConfig.ts +++ b/packages/ckeditor5-coremedia-richtext/src/sanitation/ElementConfig.ts @@ -2,12 +2,14 @@ import { ParsedAttributeDefinitionConfig } from "./AttributeDefinitionConfig"; import { allowEmpty, ElementContent, pcdata } from "./ElementContent"; import { ActiveStrictness } from "../Strictness"; import { SanitationListener } from "./SanitationListener"; -import { isText } from "@coremedia/ckeditor5-dom-support/src/Texts"; -import { isElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; +import { + isText, + isElement, + isParentNode, + isHasNamespaceUri, + lookupNamespaceURI, +} from "@coremedia/ckeditor5-dom-support"; import { isKnownNamespacePrefix, namespaces } from "../Namespaces"; -import { isParentNode } from "@coremedia/ckeditor5-dom-support/src/ParentNodes"; -import { isHasNamespaceUri } from "@coremedia/ckeditor5-dom-support/src/HasNamespaceUris"; -import { lookupNamespaceURI } from "@coremedia/ckeditor5-dom-support/src/Nodes"; const defaultPrefix = Symbol("default"); type DefaultPrefix = typeof defaultPrefix; diff --git a/packages/ckeditor5-coremedia-richtext/src/sanitation/RichTextSanitizer.ts b/packages/ckeditor5-coremedia-richtext/src/sanitation/RichTextSanitizer.ts index 81314da9c..0e5deee44 100644 --- a/packages/ckeditor5-coremedia-richtext/src/sanitation/RichTextSanitizer.ts +++ b/packages/ckeditor5-coremedia-richtext/src/sanitation/RichTextSanitizer.ts @@ -1,7 +1,7 @@ import { ActiveStrictness, Strictness } from "../Strictness"; import { SanitationListener, silentSanitationListener } from "./SanitationListener"; import { namespaces } from "../Namespaces"; -import { isParentNode } from "@coremedia/ckeditor5-dom-support/src/ParentNodes"; +import { isParentNode } from "@coremedia/ckeditor5-dom-support"; import { supportedElements } from "./RichTextDtd"; /** diff --git a/packages/ckeditor5-coremedia-richtext/src/sanitation/TrackingSanitationListener.ts b/packages/ckeditor5-coremedia-richtext/src/sanitation/TrackingSanitationListener.ts index 231e2a432..a73f88d42 100644 --- a/packages/ckeditor5-coremedia-richtext/src/sanitation/TrackingSanitationListener.ts +++ b/packages/ckeditor5-coremedia-richtext/src/sanitation/TrackingSanitationListener.ts @@ -1,6 +1,6 @@ import { AttributeCause, ElementCause, severeElementCauses } from "./Causes"; import { SanitationListener } from "./SanitationListener"; -import { isHasNamespaceUri } from "@coremedia/ckeditor5-dom-support/src/HasNamespaceUris"; +import { isHasNamespaceUri } from "@coremedia/ckeditor5-dom-support"; class TrackingState { removedElements: { diff --git a/packages/ckeditor5-coremedia-richtext/tsconfig.json b/packages/ckeditor5-coremedia-richtext/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-coremedia-richtext/tsconfig.json +++ b/packages/ckeditor5-coremedia-richtext/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-coremedia-studio-essentials/package.json b/packages/ckeditor5-coremedia-studio-essentials/package.json index 1e9e7d77d..ba1d23d19 100644 --- a/packages/ckeditor5-coremedia-studio-essentials/package.json +++ b/packages/ckeditor5-coremedia-studio-essentials/package.json @@ -42,7 +42,7 @@ "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" diff --git a/packages/ckeditor5-coremedia-studio-essentials/src/CoreMediaStudioEssentials.ts b/packages/ckeditor5-coremedia-studio-essentials/src/CoreMediaStudioEssentials.ts index 215e128f7..452b1f9fd 100644 --- a/packages/ckeditor5-coremedia-studio-essentials/src/CoreMediaStudioEssentials.ts +++ b/packages/ckeditor5-coremedia-studio-essentials/src/CoreMediaStudioEssentials.ts @@ -1,6 +1,6 @@ import { Plugin } from "ckeditor5"; -import CoreMediaRichText from "@coremedia/ckeditor5-coremedia-richtext/src/CoreMediaRichText"; -import GeneralRichTextSupport from "@coremedia/ckeditor5-coremedia-richtext-support/src/GeneralRichTextSupport"; +import { CoreMediaRichText } from "@coremedia/ckeditor5-coremedia-richtext"; +import { GeneralRichTextSupport } from "@coremedia/ckeditor5-coremedia-richtext-support"; /** * Essential editing features for CKEditor 5 in the CoreMedia Studio wrapped in one plugin. diff --git a/packages/ckeditor5-coremedia-studio-essentials/tsconfig.json b/packages/ckeditor5-coremedia-studio-essentials/tsconfig.json index 92989e37d..baaaaf99b 100644 --- a/packages/ckeditor5-coremedia-studio-essentials/tsconfig.json +++ b/packages/ckeditor5-coremedia-studio-essentials/tsconfig.json @@ -1,6 +1,9 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ - "./src", + "./src" ] } diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/DisplayHints.test.ts b/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/DisplayHints.test.ts index e9a7bc5dd..5df45865e 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/DisplayHints.test.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/DisplayHints.test.ts @@ -1,6 +1,6 @@ import Delayed from "../../src/content/Delayed"; -import { NameHintConfig, unreadableNameHint, observeNameHint } from "../../src/content/DisplayHints"; -import DisplayHint from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/DisplayHint"; +import { NameHintConfig, observeNameHint, unreadableNameHint } from "../../src/content/DisplayHints"; +import { DisplayHint } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { testShouldRetrieveValues } from "./ObservableTestUtil"; const delays: Delayed = { initialDelayMs: 0, changeDelayMs: 1 }; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/MockContentDisplayService.test.ts b/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/MockContentDisplayService.test.ts index 8f38487b6..16b79bbd8 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/MockContentDisplayService.test.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/MockContentDisplayService.test.ts @@ -1,8 +1,11 @@ import { serviceAgent } from "@coremedia/service-agent"; -import { createContentDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentDisplayServiceDescriptor"; +import { createContentDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import MockContentDisplayService from "../../src/content/MockContentDisplayService"; import { testShouldRetrieveValuesThat } from "./ObservableTestUtil"; import { first } from "rxjs/operators"; +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); describe("MockContentDisplayService", () => { describe("serviceAgent Integration", () => { diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/package.json b/packages/ckeditor5-coremedia-studio-integration-mock/package.json index 9a4d0195a..1c91900be 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/package.json +++ b/packages/ckeditor5-coremedia-studio-integration-mock/package.json @@ -18,10 +18,23 @@ ], "private": true, "license": "Apache-2.0", - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" @@ -40,7 +53,8 @@ "@babel/core": "^7.24.4", "@coremedia-internal/ckeditor5-babel-config": "^1.0.0", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "@coremedia/service-agent": "^1.1.5", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "ckeditor5": "^42.0.2", "@ckeditor/ckeditor5-core": "^42.0.2", @@ -48,11 +62,11 @@ "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1" + "@coremedia/service-agent": "^1.1.5" }, "dependencies": { "@coremedia/ckeditor5-core-common": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService.ts index c457e6b5e..65f85860f 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/MockBlocklistService.ts @@ -1,6 +1,5 @@ import { Observable, Subject } from "rxjs"; -import BlocklistService from "@coremedia/ckeditor5-coremedia-studio-integration/src/BlocklistService"; -import { createBlocklistServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/BlocklistServiceDescriptor"; +import { BlocklistService, createBlocklistServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { Editor, Plugin } from "ckeditor5"; import MockServiceAgentPlugin from "./content/MockServiceAgentPlugin"; import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; @@ -28,9 +27,10 @@ export class MockBlocklistService extends Plugin implements BlocklistService { this.#blocklistSubject = new Subject(); this.#addExamples(); } + init(): void { const initInformation = reportInitStart(this); - serviceAgent.registerService(this, createBlocklistServiceDescriptor()); + serviceAgent.registerService(this, createBlocklistServiceDescriptor()); reportInitEnd(initInformation); } @@ -45,7 +45,7 @@ export class MockBlocklistService extends Plugin implements BlocklistService { if (wordsToAdd.length > 0) { const word = wordsToAdd.pop(); if (word) { - this.addToBlocklist(word); + void this.addToBlocklist(word); } } }, 2000); @@ -64,7 +64,8 @@ export class MockBlocklistService extends Plugin implements BlocklistService { * * @param wordToBlock - the word to be added to the blocklist */ - addToBlocklist(wordToBlock: string): void { + // eslint-disable-next-line @typescript-eslint/require-await + async addToBlocklist(wordToBlock: string): Promise { const lowerCaseWord = wordToBlock.toLowerCase(); if (!this.#blocklist.includes(lowerCaseWord)) { this.#blocklist.push(lowerCaseWord); @@ -77,7 +78,8 @@ export class MockBlocklistService extends Plugin implements BlocklistService { * * @param wordToUnblock - the word to be removed from the blocklist */ - removeFromBlocklist(wordToUnblock: string): void { + // eslint-disable-next-line @typescript-eslint/require-await + async removeFromBlocklist(wordToUnblock: string): Promise { const lowerCaseWord = wordToUnblock.toLowerCase(); if (this.#blocklist.includes(lowerCaseWord)) { this.#blocklist = this.#blocklist.filter((word) => word !== lowerCaseWord); diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration.ts index e7ce465c5..0117462f8 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/MockStudioIntegration.ts @@ -7,28 +7,30 @@ import MockWorkAreaService from "./content/MockWorkAreaService"; import MockContentPlugin, { MockContentProvider } from "./content/MockContentPlugin"; import MockBlobDisplayService from "./content/MockBlobDisplayService"; import MockServiceAgentPlugin from "./content/MockServiceAgentPlugin"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import MockClipboardService from "./content/MockClipboardService"; -import { createClipboardServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ClipboardServiceDesriptor"; +import { createClipboardServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { MockContentReferenceService } from "./content/MockContentReferenceService"; -import { createContentReferenceServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; +import { createContentReferenceServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import MockExternalContentPlugin from "./content/MockExternalContentPlugin"; import { MockContentImportService } from "./content/MockContentImportService"; -import { createContentImportServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ContentImportService"; +import { createContentImportServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { MockBlocklistService } from "./MockBlocklistService"; + const PLUGIN_NAME = "MockStudioIntegration"; /** * Plugin to provide mocked CoreMedia Studio Integration. */ -class MockStudioIntegration extends Plugin { +export class MockStudioIntegration extends Plugin { static readonly pluginName: string = PLUGIN_NAME; static readonly requires = [ MockBlocklistService, MockContentPlugin, MockExternalContentPlugin, - MockServiceAgentPlugin, + MockServiceAgentPlugin ]; + init(): Promise | void { const initInformation = reportInitStart(this); const contentProvider = this.#initContents(); @@ -47,19 +49,19 @@ class MockStudioIntegration extends Plugin { const contentReferenceService = new MockContentReferenceService(this.editor); serviceAgent.registerService( contentReferenceService, - createContentReferenceServiceDescriptor(), + createContentReferenceServiceDescriptor() ); const contentImportService = new MockContentImportService(this.editor); serviceAgent.registerService( contentImportService, - createContentImportServiceDescriptor(), + createContentImportServiceDescriptor() ); reportInitEnd(initInformation); } + #initContents(): MockContentProvider { const editor = this.editor; const contentPlugin = editor.plugins.get(MockContentPlugin); return contentPlugin.getContent; } } -export default MockStudioIntegration; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/DisplayHints.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/DisplayHints.ts index 58cc5d641..a66373fb2 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/DisplayHints.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/DisplayHints.ts @@ -2,7 +2,7 @@ import MockContent from "./MockContent"; import { map } from "rxjs/operators"; import { combineLatest, Observable } from "rxjs"; import { observeEditing, observeName, observeReadable } from "./MutableProperties"; -import DisplayHint from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/DisplayHint"; +import { DisplayHint } from "@coremedia/ckeditor5-coremedia-studio-integration"; import Delayed from "./Delayed"; import { capitalize } from "./MockContentUtils"; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockBlobDisplayService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockBlobDisplayService.ts index d67f3fa8b..163495608 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockBlobDisplayService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockBlobDisplayService.ts @@ -1,8 +1,5 @@ -import BlobDisplayService, { - InlinePreview, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/BlobDisplayService"; -import { UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { createBlobDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/BlobDisplayServiceDescriptor"; +import { BlobDisplayService, InlinePreview, UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { createBlobDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { map } from "rxjs/operators"; import { combineLatest, Observable } from "rxjs"; import { defaultMockContentProvider, MockContentProvider } from "./MockContentPlugin"; @@ -14,7 +11,7 @@ import { unreadableName } from "./DisplayHints"; * Represents an unreadable blob-state. */ const unreadableBlob: Pick = { - value: PNG_LOCK_24x24, + value: PNG_LOCK_24x24 }; /** @@ -22,7 +19,7 @@ const unreadableBlob: Pick = { */ const unsetBlob: BlobData = { value: PNG_EMPTY_24x24, - mime: "image/png", + mime: "image/png" }; export default class MockBlobDisplayService implements BlobDisplayService { @@ -53,7 +50,7 @@ export default class MockBlobDisplayService implements BlobDisplayService { // Set unreadable placeholder icon. actualBlob = { ...actualBlob, - ...unreadableBlob, + ...unreadableBlob }; thumbnailTitle = unreadableTitle; isPlaceholder = true; @@ -64,9 +61,9 @@ export default class MockBlobDisplayService implements BlobDisplayService { return { thumbnailSrc, thumbnailTitle, - isPlaceholder, + isPlaceholder }; - }), + }) ); } diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockClipboardService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockClipboardService.ts index 283b43ce3..e3a63883b 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockClipboardService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockClipboardService.ts @@ -1,9 +1,10 @@ -import ClipboardService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ClipboardService"; -import ClipboardItemRepresentation from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ClipboardItemRepresentation"; +import { + ClipboardItemRepresentation, + ClipboardService, + createClipboardServiceDescriptor +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import { Observable, Subject, Subscriber, TeardownLogic } from "rxjs"; -import { createClipboardServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ClipboardServiceDesriptor"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; export default class MockClipboardService implements ClipboardService { static readonly #logger: Logger = LoggerProvider.getLogger("MockClipboardService"); @@ -39,7 +40,7 @@ export default class MockClipboardService implements ClipboardService { observe_items(): Observable { return new Observable((subscriber: Subscriber): TeardownLogic => { const subscription = this.#subject.subscribe((items: ClipboardItemRepresentation[]): void => - subscriber.next(items), + subscriber.next(items) ); return (): void => subscription.unsubscribe(); diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentDisplayService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentDisplayService.ts index b848cc7ff..3e14de184 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentDisplayService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentDisplayService.ts @@ -1,10 +1,13 @@ -import ContentDisplayService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentDisplayService"; +import { + ContentAsLink, + ContentDisplayService, + contentUriPath, + createContentDisplayServiceDescriptor, + DisplayHint, + UriPath, +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import { combineLatest, Observable, OperatorFunction, Subscription } from "rxjs"; import { first, map } from "rxjs/operators"; -import { contentUriPath, UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; -import { createContentDisplayServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentDisplayServiceDescriptor"; -import DisplayHint from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/DisplayHint"; -import ContentAsLink from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ContentAsLink"; import { defaultMockContentProvider, MockContentProvider } from "./MockContentPlugin"; import { observeEditingHint, observeNameHint, observeTypeHint } from "./DisplayHints"; import { observeName, observeReadable } from "./MutableProperties"; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentImportService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentImportService.ts index e8925441e..fe91ac6b2 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentImportService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentImportService.ts @@ -1,17 +1,21 @@ -import { ContentImportService } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/ContentImportService"; -import { createContentReferenceServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; +import { ContentImportService } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { createContentReferenceServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { Editor } from "ckeditor5"; import MockContentPlugin from "./MockContentPlugin"; import MockExternalContentPlugin from "./MockExternalContentPlugin"; -import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; +import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; + export class MockContentImportService implements ContentImportService { readonly #editor: Editor; + constructor(editor: Editor) { this.#editor = editor; } + getName(): string { return createContentReferenceServiceDescriptor().name; } + import(uri: string): Promise { const mockExternalContentPlugin = this.#editor.plugins.get(MockExternalContentPlugin); const externalContent = mockExternalContentPlugin.getExternalContent(uri); diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin.ts index b21b51f56..05331d030 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentPlugin.ts @@ -1,6 +1,5 @@ import { Plugin } from "ckeditor5"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import MockContent, { asStaticContent, isMockContentConfigs, @@ -9,9 +8,9 @@ import MockContent, { } from "./MockContent"; import Delayed from "./Delayed"; import { isObject } from "./MockContentUtils"; -import { numericId, UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; +import { numericId, UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { PREDEFINED_MOCK_CONTENTS } from "./PredefinedMockContents"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; /** * If states shall change, it will be done with this fixed @@ -110,7 +109,7 @@ class MockContentPlugin extends Plugin { * The pre-defined contents we provide by default. */ static readonly #defaultContents: MockContentConfig[] = [ - MockContentPlugin.#rootFolderConfig, + this.#rootFolderConfig, // Easier to prefill some mock contents here. ...PREDEFINED_MOCK_CONTENTS, ]; @@ -251,5 +250,6 @@ class MockContentPlugin extends Plugin { return this.#addDefaults(registeredContents.get(id)) ?? asStaticContent(id); }; } + export default MockContentPlugin; export { CONFIG_KEY as COREMEDIA_MOCK_CONTENT_PLUGIN, MockContentProvider, defaultMockContentProvider }; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentReferenceService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentReferenceService.ts index a40c04eca..e0e848e22 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentReferenceService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockContentReferenceService.ts @@ -2,36 +2,42 @@ import { ContentReferenceResponse, createContentReferenceServiceDescriptor, IContentReferenceService, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; + isUriPath +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import { Editor } from "ckeditor5"; import MockExternalContentPlugin from "./MockExternalContentPlugin"; import MockContentPlugin from "./MockContentPlugin"; -import { isUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; + export class MockContentReferenceService implements IContentReferenceService { readonly #editor: Editor; + constructor(editor: Editor) { this.#editor = editor; } + getName(): string { return createContentReferenceServiceDescriptor().name; } + getContentReferences(requests: string[]): Promise { return Promise.all(requests.map((request) => this.getContentReference(request))); } + getContentReference(request: string): Promise { const mockContentPlugin: MockContentPlugin = this.#editor.plugins.get( - MockContentPlugin.pluginName, + MockContentPlugin.pluginName ) as MockContentPlugin; const mockExternalContentPlugin: MockExternalContentPlugin = this.#editor.plugins.get( - MockExternalContentPlugin.pluginName, + MockExternalContentPlugin.pluginName ) as MockExternalContentPlugin; const response = this.#evaluateResponse(mockContentPlugin, mockExternalContentPlugin, request); return response ? Promise.resolve(response) : Promise.reject(); } + #evaluateResponse( mockContentPlugin: MockContentPlugin, mockExternalContentPlugin: MockExternalContentPlugin, - request: string, + request: string ): ContentReferenceResponse | undefined { if (!request) { return undefined; @@ -45,8 +51,8 @@ export class MockContentReferenceService implements IContentReferenceService { contentUri: undefined, externalUriInformation: { contentUri: `content/${externalContent.contentAfterImport.id}`, - mappedContentType: externalContent.contentAfterImport.type, - }, + mappedContentType: externalContent.contentAfterImport.type + } }; } } @@ -56,8 +62,8 @@ export class MockContentReferenceService implements IContentReferenceService { contentUri: undefined, externalUriInformation: { contentUri: undefined, - mappedContentType: externalContent.contentAfterImport.type, - }, + mappedContentType: externalContent.contentAfterImport.type + } }; } } @@ -66,13 +72,13 @@ export class MockContentReferenceService implements IContentReferenceService { return { request, contentUri: request, - externalUriInformation: undefined, + externalUriInformation: undefined }; } return { request, contentUri: undefined, - externalUriInformation: undefined, + externalUriInformation: undefined }; } } diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockDragDropService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockDragDropService.ts index d8fe58f18..9e9a91367 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockDragDropService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockDragDropService.ts @@ -1,4 +1,4 @@ -import DragDropService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/DragDropService"; +import { DragDropService } from "@coremedia/ckeditor5-coremedia-studio-integration"; /** * MockDragDropService for the example app. diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin.ts index dd9bdd46e..5cf84aef9 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockExternalContentPlugin.ts @@ -1,10 +1,11 @@ import { Plugin } from "ckeditor5"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { MockContentConfig } from "./MockContent"; import MockContentPlugin from "./MockContentPlugin"; + const PLUGIN_NAME = "MockExternalContent"; + export interface MockExternalContent { /** * ID of the external content @@ -26,6 +27,7 @@ export interface MockExternalContent { */ errorWhileImporting: boolean; } + type ExternalContentsByUri = Map; const EXTERNAL_CONTENTS: MockExternalContent[] = [ { @@ -34,9 +36,9 @@ const EXTERNAL_CONTENTS: MockExternalContent[] = [ contentAfterImport: { id: 2000, type: "linkable", - name: "External Content #2000", + name: "External Content #2000" }, - errorWhileImporting: false, + errorWhileImporting: false }, { id: 2002, @@ -44,9 +46,9 @@ const EXTERNAL_CONTENTS: MockExternalContent[] = [ contentAfterImport: { id: 2002, type: "linkable", - name: "External Content #2002", + name: "External Content #2002" }, - errorWhileImporting: false, + errorWhileImporting: false }, { id: 2004, @@ -54,9 +56,9 @@ const EXTERNAL_CONTENTS: MockExternalContent[] = [ contentAfterImport: { id: 2004, type: "unknown", - name: "Must not appear as link, if you see this, it is an error", + name: "Must not appear as link, if you see this, it is an error" }, - errorWhileImporting: false, + errorWhileImporting: false }, { id: 2006, @@ -64,10 +66,10 @@ const EXTERNAL_CONTENTS: MockExternalContent[] = [ contentAfterImport: { id: 2006, type: "linkable", - name: "External Content #2006", + name: "External Content #2006" }, - errorWhileImporting: true, - }, + errorWhileImporting: true + } ]; export default class MockExternalContentPlugin extends Plugin { static readonly pluginName: string = PLUGIN_NAME; @@ -83,18 +85,23 @@ export default class MockExternalContentPlugin extends Plugin { this.#initExternalContents(); reportInitEnd(initInformation); } + addExternalContent(externalContent: MockExternalContent): void { this.#registeredExternalContents.set(`externalUri/${externalContent.id}`, externalContent); } + addExternalContents(externalContents: MockExternalContent[]): void { externalContents.forEach((externalContent) => this.addExternalContent(externalContent)); } + externalContentExist(uri: string): boolean { return this.#registeredExternalContents.has(uri); } + getExternalContent(uri: string): MockExternalContent | undefined { return this.#registeredExternalContents.get(uri); } + #initExternalContents() { const plugins = this.editor.plugins; const mockContentPlugin: MockContentPlugin = plugins.get(MockContentPlugin.pluginName) as MockContentPlugin; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin.ts index 4c1f90f7e..e4f030c6a 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockInputExamplePlugin.ts @@ -1,18 +1,18 @@ import { Plugin } from "ckeditor5"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { serviceAgent } from "@coremedia/service-agent"; import MockDragDropService from "./MockDragDropService"; -import { createClipboardServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/ClipboardServiceDesriptor"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { createClipboardServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import { Logger } from "@coremedia/ckeditor5-logging"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { IsDroppableEvaluationResult, - isDroppableUris, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext"; + isDroppableUris +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import { IsLinkableEvaluationResult, - isLinkableUris, -} from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/IsLinkableDragAndDrop"; + isLinkableUris +} from "@coremedia/ckeditor5-coremedia-studio-integration"; /** * Describes a div-element that can be created by this plugin. @@ -45,6 +45,7 @@ export interface InputExampleElement { export interface ExternalContent { externalId: number; } + export const isAnExternalContent = (obj: number | object): boolean => { if (typeof obj === "number") { return false; @@ -59,10 +60,12 @@ const PLUGIN_NAME = "MockInputExamplePlugin"; class MockInputExamplePlugin extends Plugin { static readonly pluginName: string = PLUGIN_NAME; static readonly #logger: Logger = LoggerProvider.getLogger(this.pluginName); + init(): void { const initInformation = reportInitStart(this); reportInitEnd(initInformation); } + createInsertElement(data: InputExampleElement): HTMLDivElement { const insertDiv = document.createElement("div"); insertDiv.classList.add("input-example", ...(data.classes || [])); @@ -115,6 +118,7 @@ class MockInputExamplePlugin extends Plugin { ensureIsDroppableInLinkBalloon(uris: string[]): IsLinkableEvaluationResult | undefined { return isLinkableUris(uris); } + static async #setClipboardData(event: MouseEvent): Promise { const target = event.target as HTMLElement; const contentIdCommaSeparated = target.getAttribute("data-uripath"); @@ -124,7 +128,7 @@ class MockInputExamplePlugin extends Plugin { const contentIds: string[] = contentIdCommaSeparated.split(","); const urilistJSON = JSON.stringify(contentIds); const blob = new Blob([urilistJSON], { - type: "cm-studio-rest/uri-list", + type: "cm-studio-rest/uri-list" }); const data: Record = {}; data[blob.type] = blob; @@ -133,10 +137,10 @@ class MockInputExamplePlugin extends Plugin { [ { data, - options: "copy", - }, + options: "copy" + } ], - new Date().getTime(), + new Date().getTime() ); } @@ -173,13 +177,16 @@ class MockInputExamplePlugin extends Plugin { static #removeDropData(): void { serviceAgent.unregisterServices("dragDropService"); } + static #generateUriPath(item: number | ExternalContent): string { const prefix: string = isAnExternalContent(item) ? "externalUri" : "content"; const id: number = isAnExternalContent(item) ? (item as ExternalContent).externalId : (item as number); return `${prefix}/${id}`; } + static #generateUriPathCsv(items: (number | ExternalContent)[]): string { return items.map((item) => MockInputExamplePlugin.#generateUriPath(item)).join(","); } } + export default MockInputExamplePlugin; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockRichtextConfigurationService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockRichtextConfigurationService.ts index 72efe361f..8b7429184 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockRichtextConfigurationService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockRichtextConfigurationService.ts @@ -1,12 +1,16 @@ /* async: Methods require to be asynchronous in production scenario. */ /* eslint-disable @typescript-eslint/require-await */ -import RichtextConfigurationService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/RichtextConfigurationService"; +import { + createContentReferenceServiceDescriptor, + isUriPath, + RichtextConfigurationService, + UriPath +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import { defaultMockContentProvider, MockContentProvider } from "./MockContentPlugin"; -import { isUriPath, UriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; import { serviceAgent } from "@coremedia/service-agent"; -import { createContentReferenceServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/IContentReferenceService"; import { Editor } from "ckeditor5"; import MockExternalContentPlugin from "./MockExternalContentPlugin"; + class MockRichtextConfigurationService implements RichtextConfigurationService { readonly #contentProvider: MockContentProvider; readonly #editor: Editor; @@ -18,6 +22,7 @@ class MockRichtextConfigurationService implements RichtextConfigurationService { this.#contentProvider = contentProvider; this.#editor = editor; } + async hasLinkableType(uriPath: UriPath): Promise { const contentReferenceService = serviceAgent.getService(createContentReferenceServiceDescriptor()); if (!contentReferenceService) { @@ -40,6 +45,7 @@ class MockRichtextConfigurationService implements RichtextConfigurationService { } return false; } + async isEmbeddableType(uriPath: UriPath): Promise { if (isUriPath(uriPath)) { const mockContent = this.#contentProvider(uriPath); @@ -47,6 +53,7 @@ class MockRichtextConfigurationService implements RichtextConfigurationService { } return false; } + async resolveBlobPropertyReference(uriPath: UriPath): Promise { if (isUriPath(uriPath)) { const mockContent = this.#contentProvider(uriPath); @@ -59,8 +66,10 @@ class MockRichtextConfigurationService implements RichtextConfigurationService { } throw new Error(`'${uriPath}' is not a valid URI-path.`); } + getName(): string { return "richtextConfigurationService"; } } + export default MockRichtextConfigurationService; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin.ts index dea6c2f39..ae0beac95 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockServiceAgentPlugin.ts @@ -1,19 +1,24 @@ import { Plugin } from "ckeditor5"; import { serviceAgent } from "@coremedia/service-agent"; -import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/WorkAreaServiceDescriptor"; +import { createWorkAreaServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; import MockWorkAreaService from "./MockWorkAreaService"; import { MockBlocklistService } from "../MockBlocklistService"; import { createBlocklistServiceDescriptor } from "@coremedia/ckeditor5-coremedia-studio-integration"; + const PLUGIN_NAME = "MockServiceAgent"; + class MockServiceAgentPlugin extends Plugin { static readonly pluginName: string = PLUGIN_NAME; + async getMockWorkAreaService(): Promise { const workAreaService = await serviceAgent.fetchService(createWorkAreaServiceDescriptor()); return workAreaService as MockWorkAreaService; } + async getMockBlocklistService(): Promise { const blocklistService = await serviceAgent.fetchService(createBlocklistServiceDescriptor()); return blocklistService as MockBlocklistService; } } + export default MockServiceAgentPlugin; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService.ts index 6d8457799..83fc24fc2 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/MockWorkAreaService.ts @@ -2,13 +2,15 @@ /* eslint-disable @typescript-eslint/require-await */ /* eslint no-restricted-globals: off */ -import WorkAreaService from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/studioservices/WorkAreaService"; +import { WorkAreaService } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { Editor } from "ckeditor5"; import MockContentPlugin from "./MockContentPlugin"; import MockContent from "./MockContent"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { Observable, Subject } from "rxjs"; + const isString = (value: unknown): value is string => typeof value === "string"; + class MockWorkAreaService implements WorkAreaService { static readonly #LOGGER = LoggerProvider.getLogger("WorkAreaService"); readonly #editor: Editor; @@ -18,10 +20,12 @@ class MockWorkAreaService implements WorkAreaService { */ lastOpenedEntities: unknown[] = []; readonly #activeEntitySubject: Subject; + constructor(editor: Editor) { this.#editor = editor; this.#activeEntitySubject = new Subject(); } + async openEntitiesInTabs(entities: unknown[]): Promise<{ accepted: string[]; rejected: string[]; @@ -42,12 +46,14 @@ class MockWorkAreaService implements WorkAreaService { this.lastOpenedEntities = entities; return { accepted, - rejected: [], + rejected: [] }; } + getLastOpenedEntities(): unknown[] { return this.lastOpenedEntities; } + async canBeOpenedInTab(entityUris: unknown[]): Promise { const mockContentPlugin = this.#editor.plugins.get(MockContentPlugin.pluginName) as MockContentPlugin; const uris = entityUris as string[]; @@ -56,16 +62,19 @@ class MockWorkAreaService implements WorkAreaService { .every((mockContent: MockContent): boolean => { const allReadable = mockContent.readable.every((isReadable) => isReadable); MockWorkAreaService.#LOGGER.debug( - `Content ${mockContent.id} is considered ${allReadable ? "" : "un"}readable.`, + `Content ${mockContent.id} is considered ${allReadable ? "" : "un"}readable.` ); return allReadable; }); } + getName(): string { return "workAreaService"; } + observe_activeEntity(): Observable { return this.#activeEntitySubject; } } + export default MockWorkAreaService; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/PredefinedMockContents.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/PredefinedMockContents.ts index a16763833..db9c5a242 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/content/PredefinedMockContents.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/content/PredefinedMockContents.ts @@ -15,7 +15,7 @@ import { PNG_RED_240x135, } from "./MockFixtures"; import { capitalize } from "./MockContentUtils"; -import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration/src/content/UriPath"; +import { contentUriPath } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { defaultTypeById } from "./MockContentType"; type PredefinedMockContentConfig = { comment?: string } & MockContentConfig; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/index-doc.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/index-doc.ts index 59e1da220..d924049c5 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/index-doc.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/index-doc.ts @@ -6,5 +6,5 @@ */ export * as content from "./content/index-doc"; -export { default as MockStudioIntegration } from "./MockStudioIntegration"; +export { MockStudioIntegration } from "./MockStudioIntegration"; export * from "./MockBlocklistService"; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/src/index.ts b/packages/ckeditor5-coremedia-studio-integration-mock/src/index.ts index f28ffe62d..ca7d812ed 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/src/index.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/src/index.ts @@ -3,3 +3,18 @@ */ export { MockBlocklistService } from "./MockBlocklistService"; +export { MockStudioIntegration } from "./MockStudioIntegration"; +export { COREMEDIA_MOCK_CONTENT_PLUGIN, default as MockContentPlugin } from "./content/MockContentPlugin"; +export { default as MockInputExamplePlugin, InputExampleElement } from "./content/MockInputExamplePlugin"; +export { PREDEFINED_MOCK_LINK_DATA } from "./content/PredefinedMockContents"; +export { + PNG_BLUE_240x135, + PNG_GREEN_240x135, + PNG_RED_240x135, + PNG_EMPTY_24x24, + PNG_LOCK_24x24 +} from "./content/MockFixtures"; +export { MockContentConfig } from "./content/MockContent"; +export { default as MockExternalContentPlugin, MockExternalContent } from "./content/MockExternalContentPlugin"; +export { default as MockServiceAgentPlugin } from "./content/MockServiceAgentPlugin"; +export { default as MockWorkAreaService } from "./content/MockWorkAreaService"; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/tsconfig.json b/packages/ckeditor5-coremedia-studio-integration-mock/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/tsconfig.json +++ b/packages/ckeditor5-coremedia-studio-integration-mock/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-coremedia-studio-integration/package.json b/packages/ckeditor5-coremedia-studio-integration/package.json index d7befdc70..00b3169c9 100644 --- a/packages/ckeditor5-coremedia-studio-integration/package.json +++ b/packages/ckeditor5-coremedia-studio-integration/package.json @@ -14,13 +14,26 @@ "ckeditor5", "studio" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ - "/src" + "/src/*" ], "license": "Apache-2.0", "scripts": { @@ -34,16 +47,16 @@ }, "devDependencies": { "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@coremedia/service-agent": "^1.1.5 || ^2.0.1", + "@coremedia/service-agent": "^1.1.5", "@types/jest": "^29.5.12", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { - "@coremedia/service-agent": "^1.1.5 || ^2.0.1" + "@coremedia/service-agent": "^1.1.5" }, "dependencies": { "@coremedia/ckeditor5-logging": "^20.1.0", diff --git a/packages/ckeditor5-coremedia-studio-integration/src/BlocklistService.ts b/packages/ckeditor5-coremedia-studio-integration/src/BlocklistService.ts index b12a1241f..28a577580 100644 --- a/packages/ckeditor5-coremedia-studio-integration/src/BlocklistService.ts +++ b/packages/ckeditor5-coremedia-studio-integration/src/BlocklistService.ts @@ -27,14 +27,14 @@ interface BlocklistService { * * @param wordToBlock - the word to be added to the blocklist */ - addToBlocklist(wordToBlock: string): void; + addToBlocklist(wordToBlock: string): Promise; /** * Removes a given word from the blocklist. * * @param wordToUnblock - the word to be removed from the blocklist */ - removeFromBlocklist(wordToUnblock: string): void; + removeFromBlocklist(wordToUnblock: string): Promise; /** * Returns all entries of the blocklist. diff --git a/packages/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext.ts b/packages/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext.ts index 27f8ecf97..ae8735b01 100644 --- a/packages/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext.ts +++ b/packages/ckeditor5-coremedia-studio-integration/src/content/IsDroppableInRichtext.ts @@ -1,5 +1,5 @@ import { serviceAgent } from "@coremedia/service-agent"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import RichtextConfigurationService from "./RichtextConfigurationService"; import { createRichtextConfigurationServiceDescriptor } from "./RichtextConfigurationServiceDescriptor"; import { receiveDraggedItemsFromService } from "./studioservices/DragDropServiceWrapper"; @@ -91,14 +91,14 @@ const evaluateIsDroppable = async (uris: string[]): Promise isDroppableUriInformation(uri))); const isDroppable = droppableUriInformation.every( - (droppableInformation) => droppableInformation.isEmbeddable || droppableInformation.isLinkable, + (droppableInformation) => droppableInformation.isEmbeddable || droppableInformation.isLinkable ); return Promise.resolve({ uris, isDroppable }); }; const isDroppableUriInformation = async (uri: string): Promise => { const richTextConfigurationService: RichtextConfigurationService = await serviceAgent.fetchService( - createRichtextConfigurationServiceDescriptor(), + createRichtextConfigurationServiceDescriptor() ); const isEmbeddable: boolean = await richTextConfigurationService.isEmbeddableType(uri); const isLinkable: boolean = await richTextConfigurationService.hasLinkableType(uri); diff --git a/packages/ckeditor5-coremedia-studio-integration/src/content/IsLinkableDragAndDrop.ts b/packages/ckeditor5-coremedia-studio-integration/src/content/IsLinkableDragAndDrop.ts index 0e51ab4ed..25c622d87 100644 --- a/packages/ckeditor5-coremedia-studio-integration/src/content/IsLinkableDragAndDrop.ts +++ b/packages/ckeditor5-coremedia-studio-integration/src/content/IsLinkableDragAndDrop.ts @@ -1,5 +1,5 @@ import { serviceAgent } from "@coremedia/service-agent"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { receiveDraggedItemsFromService } from "./studioservices/DragDropServiceWrapper"; import RichtextConfigurationService from "./RichtextConfigurationService"; import { createRichtextConfigurationServiceDescriptor } from "./RichtextConfigurationServiceDescriptor"; @@ -76,7 +76,7 @@ const evaluateIsLinkable = async (uris: string[]): Promise => { const richTextConfigurationService: RichtextConfigurationService = await serviceAgent.fetchService( - createRichtextConfigurationServiceDescriptor(), + createRichtextConfigurationServiceDescriptor() ); return richTextConfigurationService.hasLinkableType(uri); }; diff --git a/packages/ckeditor5-coremedia-studio-integration/src/index.ts b/packages/ckeditor5-coremedia-studio-integration/src/index.ts index 4177d840d..9ffca657d 100644 --- a/packages/ckeditor5-coremedia-studio-integration/src/index.ts +++ b/packages/ckeditor5-coremedia-studio-integration/src/index.ts @@ -17,8 +17,45 @@ export { default as BlocklistService } from "./BlocklistService"; export { createBlocklistServiceDescriptor } from "./BlocklistServiceDescriptor"; // Helpers -export type { UriPath } from "./content/UriPath"; -export { isModelUriPath, requireContentUriPath } from "./content/UriPath"; +export type { UriPath, ModelUri } from "./content/UriPath"; +export { isUriPath, contentUriPath, numericId, CONTENT_CKE_MODEL_URI_REGEXP } from "./content/UriPath"; +export { isModelUriPath, requireContentUriPath, requireContentCkeModelUri } from "./content/UriPath"; export { default as ContentAsLink } from "./content/ContentAsLink"; export { default as DisplayHint } from "./content/DisplayHint"; + +export { default as ClipboardService } from "./content/studioservices/ClipboardService"; +export { createClipboardServiceDescriptor } from "./content/ClipboardServiceDesriptor"; + +export { default as ClipboardItemRepresentation } from "./content/studioservices/ClipboardItemRepresentation"; + +export { + ContentReferenceResponse, + createContentReferenceServiceDescriptor +} from "./content/studioservices/IContentReferenceService"; + +export { + getEvaluationResult, isDroppable, isDroppableUris, IsDroppableEvaluationResult +} from "./content/IsDroppableInRichtext"; + +export { receiveDraggedItemsFromDataTransfer } from "./content/studioservices/DragDropServiceWrapper"; +export { default as DragDropService } from "./content/studioservices/DragDropService"; + +export { + ContentImportService, createContentImportServiceDescriptor +} from "./content/studioservices/ContentImportService"; + +export { createWorkAreaServiceDescriptor } from "./content/WorkAreaServiceDescriptor"; +export { default as WorkAreaService } from "./content/studioservices/WorkAreaService"; + +export { + IsLinkableEvaluationResult, + isLinkableUris, + isLinkable +} from "./content/IsLinkableDragAndDrop"; + +export { ROOT_NAME } from "./content/Constants"; + +export { toContentUris } from "./content/studioservices/ClipboardServiceUtil"; + +export { IContentReferenceService } from "./content/studioservices/IContentReferenceService"; diff --git a/packages/ckeditor5-coremedia-studio-integration/tsconfig.json b/packages/ckeditor5-coremedia-studio-integration/tsconfig.json index 95c214275..1c1570bff 100644 --- a/packages/ckeditor5-coremedia-studio-integration/tsconfig.json +++ b/packages/ckeditor5-coremedia-studio-integration/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", "./src" diff --git a/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts b/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts index 3015e0126..8d6632153 100644 --- a/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts +++ b/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts @@ -1,6 +1,10 @@ -import { Editor, EditorUI, Autosave } from "ckeditor5"; -import { DataFacade, SetDataData } from "../src"; -jest.mock("@ckeditor/ckeditor5-core"); +import { SetDataData } from "../src/DataControllerApi"; +import { EditorUI, Autosave, Editor } from "ckeditor5"; +import { jest } from "@jest/globals"; +import { DataFacade } from "../src"; + +jest.useFakeTimers(); + class DummyEditor extends Editor { readonly ui: EditorUI = {} as EditorUI; @@ -24,6 +28,7 @@ class DummyEditor extends Editor { this.data.set(data); } } + describe("DataFacade", () => { beforeEach(() => { jest.clearAllMocks(); @@ -58,8 +63,8 @@ describe("DataFacade", () => { const dataFixture = "DATA"; let savedData = ""; let editor: DummyEditor; - let autosave: Autosave; - let dataFacade: DataFacade; + let autosave: InstanceType; + let dataFacade: InstanceType; beforeEach(() => { editor = new DummyEditor({ plugins: [DataFacade, Autosave], diff --git a/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts b/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts index 0dc57baec..2870a03a4 100644 --- a/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts +++ b/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts @@ -1,6 +1,9 @@ import { ContextMismatchError, DataFacade, DataFacadeController, SetDataData } from "../src"; import { Editor, EditorUI, CKEditorError, Autosave } from "ckeditor5"; -jest.mock("@ckeditor/ckeditor5-core"); +import { jest } from "@jest/globals"; + +jest.useFakeTimers(); + class DummyEditor extends Editor { readonly ui: EditorUI = {} as EditorUI; @@ -24,6 +27,7 @@ class DummyEditor extends Editor { this.data.set(data); } } + describe("DataFacadeController", () => { beforeEach(() => { jest.clearAllMocks(); diff --git a/packages/ckeditor5-data-facade/__tests__/toDelete1.test.ts b/packages/ckeditor5-data-facade/__tests__/toDelete1.test.ts new file mode 100644 index 000000000..ea84f1346 --- /dev/null +++ b/packages/ckeditor5-data-facade/__tests__/toDelete1.test.ts @@ -0,0 +1,11 @@ +import { DataFacade } from "../src"; + +const { ClassicEditor } = await import("ckeditor5"); + +it("is just a simple test", async () => { + const editor = await ClassicEditor.create("
    ", { plugins: [DataFacade] }); + + expect(editor.plugins.has("DataFacade")).toBeTruthy(); +}); + +export {}; diff --git a/packages/ckeditor5-data-facade/__tests__/toDelete2.test.ts b/packages/ckeditor5-data-facade/__tests__/toDelete2.test.ts new file mode 100644 index 000000000..d472d8868 --- /dev/null +++ b/packages/ckeditor5-data-facade/__tests__/toDelete2.test.ts @@ -0,0 +1,6 @@ +import { ClassicEditor } from "ckeditor5"; + +it("is just a simple test", () => { + console.log("ClassicEditor", ClassicEditor); + expect(2).toBeGreaterThan(1); +}); diff --git a/packages/ckeditor5-data-facade/__tests__/toDelete3.test.ts b/packages/ckeditor5-data-facade/__tests__/toDelete3.test.ts new file mode 100644 index 000000000..45e46819b --- /dev/null +++ b/packages/ckeditor5-data-facade/__tests__/toDelete3.test.ts @@ -0,0 +1,4 @@ +it("is just a simple test", () => { + console.log(JSON.stringify({ test: 1 })); + expect(2).toBeGreaterThan(1); +}); diff --git a/packages/ckeditor5-data-facade/package.json b/packages/ckeditor5-data-facade/package.json index aa0bb5d83..5289a398a 100644 --- a/packages/ckeditor5-data-facade/package.json +++ b/packages/ckeditor5-data-facade/package.json @@ -20,22 +20,26 @@ "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", - "jest": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" npx jest --passWithNoTests", + "jest": "jest --passWithNoTests", "jest:coverage": "jest --collect-coverage --passWithNoTests", "npm-check-updates": "npm-check-updates --upgrade" }, - "type": "module", - "main": "./src/index.ts", - "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.ts" - }, - "types": "./src/index.d.ts", "exports": { ".": { - "types": "./src/index.ts", - "default": "./src/index.js", - "import": "./src/index.js" + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", + "publishConfig": { + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } } }, "files": [ @@ -44,13 +48,13 @@ "devDependencies": { "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", - "@jest/globals": "^27.4.6", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", "jest-each": "^29.7.0", "rimraf": "^6.0.1", "ts-jest": "^29.2.4", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" diff --git a/packages/ckeditor5-data-facade/tsconfig.json b/packages/ckeditor5-data-facade/tsconfig.json index a1b78c300..6293c217c 100644 --- a/packages/ckeditor5-data-facade/tsconfig.json +++ b/packages/ckeditor5-data-facade/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__mocks__", "./__tests__", diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/ElementProxy.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/ElementProxy.test.ts index 38297bc68..d61b46170 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/ElementProxy.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/ElementProxy.test.ts @@ -1,9 +1,8 @@ /* eslint no-null/no-null: off */ -import ElementProxy, { ElementFilterRule, ElementFilterParams } from "../src/ElementProxy"; +import { ElementFilterRule, ElementFilterParams, ElementProxy } from "../src/ElementProxy"; import "jest-xml-matcher"; import { Editor } from "ckeditor5"; -jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); //@ts-expect-error We should rather mock ClassicEditor or similar here. const MOCK_EDITOR = new Editor(); diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/HtmlFilter.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/HtmlFilter.test.ts index d9679455b..ab1851717 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/HtmlFilter.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/HtmlFilter.test.ts @@ -2,9 +2,8 @@ // noinspection InnerHTMLJS import "jest-xml-matcher"; -import HtmlFilter, { FilterRuleSet } from "../src/HtmlFilter"; +import { FilterRuleSet, HtmlFilter } from "../src/HtmlFilter"; import { Editor } from "ckeditor5"; -jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); //@ts-expect-error We should rather mock ClassicEditor or similar here. const MOCK_EDITOR = new Editor(); diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/NodeProxy.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/NodeProxy.test.ts index 9f1844b15..fdbdf30b1 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/NodeProxy.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/NodeProxy.test.ts @@ -1,7 +1,8 @@ /* eslint no-null/no-null: off */ import "jest-xml-matcher"; -import NodeProxy from "../src/NodeProxy"; +import { NodeProxy } from "../src/NodeProxy"; +import { jest } from "@jest/globals"; const PARSER = new DOMParser(); const SERIALIZER = new XMLSerializer(); diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/Rules.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/Rules.test.ts index 7068e8ea3..3ebb5f160 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/Rules.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/Rules.test.ts @@ -1,10 +1,9 @@ import "jest-xml-matcher"; import { parseFilterRuleSetConfigurations, FilterRuleSetConfiguration } from "../src/Rules"; -import HtmlFilter from "../src/HtmlFilter"; +import { HtmlFilter } from "../src/HtmlFilter"; import { ElementFilterRule } from "../src/ElementProxy"; import { Editor } from "ckeditor5"; import { TextFilterRule } from "../src/TextProxy"; -jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); /** * Will be checked for "startsWith" for a given Data Driven Testname. Meant @@ -18,12 +17,14 @@ const TEST_SELECTOR = ""; const MOCK_EDITOR = new Editor(); const parser = new DOMParser(); const serializer = new XMLSerializer(); + interface CommentableTestData { /** * Some comment, which may help to understand the test case better. */ comment?: string; } + interface DisablableTestCase { /** * If set to `true` or non-empty string this test will be ignored. @@ -31,6 +32,7 @@ interface DisablableTestCase { */ disabled?: boolean | string; } + interface ParseFilterRuleSetConfigurationTestData { config: FilterRuleSetConfiguration; // The original 'view' @@ -40,9 +42,11 @@ interface ParseFilterRuleSetConfigurationTestData { // The view after re-transforming the previously generated data. view: string; } + interface WithDefaultsTestData { default: FilterRuleSetConfiguration; } + const replaceElementByChildren: ElementFilterRule = (p) => { p.node.replaceByChildren = true; }; diff --git a/packages/ckeditor5-dataprocessor-support/__tests__/TextProxy.test.ts b/packages/ckeditor5-dataprocessor-support/__tests__/TextProxy.test.ts index 99e88942c..ffbed71a0 100644 --- a/packages/ckeditor5-dataprocessor-support/__tests__/TextProxy.test.ts +++ b/packages/ckeditor5-dataprocessor-support/__tests__/TextProxy.test.ts @@ -2,8 +2,7 @@ import "jest-xml-matcher"; import { Editor } from "ckeditor5"; -import TextProxy, { TextFilterRule } from "../src/TextProxy"; -jest.mock("@ckeditor/ckeditor5-core/src/editor/editor"); +import { TextProxy, TextFilterRule } from "../src/TextProxy"; //@ts-expect-error We should rather mock ClassicEditor or similar here. const MOCK_EDITOR = new Editor(); @@ -48,6 +47,7 @@ interface DisablableTestData { */ disabled?: boolean | string | (() => boolean | string); } + interface TextFilterTestData extends CommentableTestData, DisablableTestData { /** * The rules to apply. @@ -71,6 +71,7 @@ interface TextFilterTestData extends CommentableTestData, DisablableTestData { */ restartPath?: string; } + describe("TextProxy.applyRules()", () => { type ApplyRulesData = [ /** diff --git a/packages/ckeditor5-dataprocessor-support/package.json b/packages/ckeditor5-dataprocessor-support/package.json index 530eee53e..9852874f8 100644 --- a/packages/ckeditor5-dataprocessor-support/package.json +++ b/packages/ckeditor5-dataprocessor-support/package.json @@ -14,6 +14,23 @@ "dataprocessor" ], "license": "Apache-2.0", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "publishConfig": { + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } + }, "files": [ "/src" ], @@ -22,19 +39,20 @@ "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", - "jest": "jest", + "jest": "jest --passWithNoTests", "jest:coverage": "jest --collect-coverage", "npm-check-updates": "npm-check-updates --upgrade" }, "devDependencies": { "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" diff --git a/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts b/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts index 48d0c3975..5953fcb51 100644 --- a/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts +++ b/packages/ckeditor5-dataprocessor-support/src/ElementProxy.ts @@ -2,7 +2,7 @@ import { DEFAULT_NAMESPACES, Namespaces } from "./Namespace"; import { Editor } from "ckeditor5"; -import NodeProxy, { PersistResponse, RESPONSE_CONTINUE } from "./NodeProxy"; +import { NodeProxy, PersistResponse, RESPONSE_CONTINUE } from "./NodeProxy"; /** * Simulates a DOMTokenList to access the `class` attribute. @@ -799,5 +799,5 @@ const allFilterRules = (...rules: ElementFilterRule[]): ElementFilterRule => (params) => rules.forEach((r) => r(params)); -export default ElementProxy; -export { AttributeValue, AttributeMap, ElementFilterParams, ElementFilterRule, allFilterRules }; + +export { AttributeValue, AttributeMap, ElementFilterParams, ElementFilterRule, ElementProxy, allFilterRules }; diff --git a/packages/ckeditor5-dataprocessor-support/src/HtmlFilter.ts b/packages/ckeditor5-dataprocessor-support/src/HtmlFilter.ts index 385e927a3..4959b797e 100644 --- a/packages/ckeditor5-dataprocessor-support/src/HtmlFilter.ts +++ b/packages/ckeditor5-dataprocessor-support/src/HtmlFilter.ts @@ -1,21 +1,25 @@ /* eslint no-null/no-null: off */ -import ElementProxy, { ElementFilterRule } from "./ElementProxy"; -import TextProxy, { TextFilterRule } from "./TextProxy"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { ElementFilterRule, ElementProxy } from "./ElementProxy"; +import { TextProxy, TextFilterRule } from "./TextProxy"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { Editor } from "ckeditor5"; + enum FilterMode { toData, toView, } + type ElementFilterRulesByName = Record; + interface ElementFilterRuleSet { elements?: ElementFilterRulesByName; } + interface TextFilterRuleSet { text?: TextFilterRule; } + type FilterRuleSet = ElementFilterRuleSet & TextFilterRuleSet; /** @@ -61,10 +65,12 @@ class HtmlFilter { static readonly #logger: Logger = LoggerProvider.getLogger("HtmlFilter"); readonly #ruleSet: FilterRuleSet; readonly #editor: Editor; + constructor(ruleSet: FilterRuleSet, editor: Editor) { this.#ruleSet = ruleSet; this.#editor = editor; } + public applyTo(root: Node): void { const logger = HtmlFilter.#logger; logger.debug(`Applying filter to root node ${root.nodeName}.`, { @@ -74,6 +80,7 @@ class HtmlFilter { // this again, we should do it here. this.#applyToChildNodes(root); } + #applyToChildNodes(parent: Node): void { const logger = HtmlFilter.#logger; logger.debug(`Applying filter to child nodes of ${parent.nodeName}.`, { @@ -148,7 +155,7 @@ class HtmlFilter { return newCurrent ?? next; } } -export default HtmlFilter; + export { AFTER_ELEMENT, AFTER_ELEMENT_AND_CHILDREN, @@ -157,5 +164,6 @@ export { ElementFilterRuleSet, FilterMode, FilterRuleSet, + HtmlFilter, TextFilterRuleSet, }; diff --git a/packages/ckeditor5-dataprocessor-support/src/Namespace.ts b/packages/ckeditor5-dataprocessor-support/src/Namespace.ts index 35db497e0..52cdd516f 100644 --- a/packages/ckeditor5-dataprocessor-support/src/Namespace.ts +++ b/packages/ckeditor5-dataprocessor-support/src/Namespace.ts @@ -18,5 +18,4 @@ const DEFAULT_NAMESPACES: Namespaces = { }, }; -export default Namespace; -export { DEFAULT_NAMESPACE_PREFIX, DEFAULT_NAMESPACES, Namespaces }; +export { DEFAULT_NAMESPACE_PREFIX, DEFAULT_NAMESPACES, Namespaces, Namespace }; diff --git a/packages/ckeditor5-dataprocessor-support/src/NodeProxy.ts b/packages/ckeditor5-dataprocessor-support/src/NodeProxy.ts index 0ca906359..0d325f389 100644 --- a/packages/ckeditor5-dataprocessor-support/src/NodeProxy.ts +++ b/packages/ckeditor5-dataprocessor-support/src/NodeProxy.ts @@ -459,5 +459,4 @@ enum NodeState { REMOVE_CHILDREN, } -export default NodeProxy; -export { ChildPredicate, NodeState, PersistResponse, RESPONSE_ABORT, RESPONSE_CONTINUE }; +export { ChildPredicate, NodeProxy, NodeState, PersistResponse, RESPONSE_ABORT, RESPONSE_CONTINUE }; diff --git a/packages/ckeditor5-dataprocessor-support/src/RulesLogger.ts b/packages/ckeditor5-dataprocessor-support/src/RulesLogger.ts index 6004b2046..a1b8b7033 100644 --- a/packages/ckeditor5-dataprocessor-support/src/RulesLogger.ts +++ b/packages/ckeditor5-dataprocessor-support/src/RulesLogger.ts @@ -1,5 +1,4 @@ -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; /** * Prefix for issues triggered by Data Processor. diff --git a/packages/ckeditor5-dataprocessor-support/src/TextProxy.ts b/packages/ckeditor5-dataprocessor-support/src/TextProxy.ts index 6a512c509..368f87ba4 100644 --- a/packages/ckeditor5-dataprocessor-support/src/TextProxy.ts +++ b/packages/ckeditor5-dataprocessor-support/src/TextProxy.ts @@ -1,6 +1,6 @@ /* eslint no-null/no-null: off */ -import NodeProxy, { PersistResponse } from "./NodeProxy"; +import { NodeProxy, PersistResponse } from "./NodeProxy"; import { Editor } from "ckeditor5"; /** @@ -142,5 +142,5 @@ interface TextFilterParams { * Function interface: `(params: TextFilterParams) => void`. */ type TextFilterRule = (params: TextFilterParams) => void; -export default TextProxy; -export { TextFilterParams, TextFilterRule }; + +export { TextFilterParams, TextFilterRule, TextProxy }; diff --git a/packages/ckeditor5-dataprocessor-support/src/index-doc.ts b/packages/ckeditor5-dataprocessor-support/src/index-doc.ts deleted file mode 100644 index 98fc677c0..000000000 --- a/packages/ckeditor5-dataprocessor-support/src/index-doc.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @module ckeditor5-dataprocessor-support - */ -export * as Attributes from "./Attributes"; - -export * from "./ElementProxy"; -export { default as ElementProxy } from "./ElementProxy"; - -export * from "./HtmlFilter"; -export { default as HtmlFilter } from "./HtmlFilter"; - -export * from "./Namespace"; -export { default as Namespace } from "./Namespace"; - -export * from "./NodeProxy"; -export { default as NodeProxy } from "./NodeProxy"; - -export * from "./Rules"; - -export * as RulesLogger from "./RulesLogger"; - -export * from "./TextProxy"; -export { default as TextProxy } from "./TextProxy"; diff --git a/packages/ckeditor5-dataprocessor-support/src/index.ts b/packages/ckeditor5-dataprocessor-support/src/index.ts new file mode 100644 index 000000000..10369938c --- /dev/null +++ b/packages/ckeditor5-dataprocessor-support/src/index.ts @@ -0,0 +1,57 @@ +/** + * @module ckeditor5-dataprocessor-support + */ +export { + AttributeMapper, + renameAttribute, + preserveAttributeAs, + allAttributeMappers, + asDataFilterRule, + asViewFilterRule, +} from "./Attributes"; + +export { + ElementProxy, + AttributeValue, + AttributeMap, + ElementFilterParams, + ElementFilterRule, + allFilterRules, +} from "./ElementProxy"; + +export { + AFTER_ELEMENT, + AFTER_ELEMENT_AND_CHILDREN, + BEFORE_ELEMENT, + ElementFilterRulesByName, + ElementFilterRuleSet, + FilterMode, + FilterRuleSet, + HtmlFilter, + TextFilterRuleSet, +} from "./HtmlFilter"; + +export { DEFAULT_NAMESPACE_PREFIX, DEFAULT_NAMESPACES, Namespaces, Namespace } from "./Namespace"; + +export { ChildPredicate, NodeProxy, NodeState, PersistResponse, RESPONSE_ABORT, RESPONSE_CONTINUE } from "./NodeProxy"; + +export { + ElementsFilterRuleSetConfiguration, + ElementsFilterRuleSetConfigurationValueType, + FilterRuleSetConfiguration, + ParsedToDataAndView, + PreParsedElementSection, + PreParsedToDataAndView, + PreParsedToView, + TextFilterRuleSetConfigurationValueType, + ToDataAndViewElementConfiguration, + ToDataAndViewTextConfiguration, + mergePreParsedToViews, + parseFilterRuleSetConfigurations, +} from "./Rules"; + +export { rulesLogger } from "./RulesLogger"; + +export { TextFilterParams, TextFilterRule, TextProxy } from "./TextProxy"; + +export { warnOnAmbiguousElementState } from "./RulesLogger"; diff --git a/packages/ckeditor5-dataprocessor-support/tsconfig.json b/packages/ckeditor5-dataprocessor-support/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-dataprocessor-support/tsconfig.json +++ b/packages/ckeditor5-dataprocessor-support/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-dialog-visibility/package.json b/packages/ckeditor5-dialog-visibility/package.json index 3096fe561..35274c374 100644 --- a/packages/ckeditor5-dialog-visibility/package.json +++ b/packages/ckeditor5-dialog-visibility/package.json @@ -26,12 +26,25 @@ "devDependencies": { "ckeditor5": "^42.0.2", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" diff --git a/packages/ckeditor5-dialog-visibility/tsconfig.json b/packages/ckeditor5-dialog-visibility/tsconfig.json index 92989e37d..baaaaf99b 100644 --- a/packages/ckeditor5-dialog-visibility/tsconfig.json +++ b/packages/ckeditor5-dialog-visibility/tsconfig.json @@ -1,6 +1,9 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ - "./src", + "./src" ] } diff --git a/packages/ckeditor5-dom-converter/__tests__/DataProcessorSimulation.ts b/packages/ckeditor5-dom-converter/__tests__/DataProcessorSimulation.ts index 6c61cea9b..c399bc033 100644 --- a/packages/ckeditor5-dom-converter/__tests__/DataProcessorSimulation.ts +++ b/packages/ckeditor5-dom-converter/__tests__/DataProcessorSimulation.ts @@ -1,5 +1,5 @@ import { HtmlDomConverter } from "../src/HtmlDomConverter"; -import { registerNamespacePrefixes } from "@coremedia/ckeditor5-dom-support/src/Namespaces"; +import { registerNamespacePrefixes } from "@coremedia/ckeditor5-dom-support"; /** * Simulates processing from HTML document as hold in data view layer in diff --git a/packages/ckeditor5-dom-converter/__tests__/HtmlDomConverter.test.ts b/packages/ckeditor5-dom-converter/__tests__/HtmlDomConverter.test.ts index f83970308..3487ae080 100644 --- a/packages/ckeditor5-dom-converter/__tests__/HtmlDomConverter.test.ts +++ b/packages/ckeditor5-dom-converter/__tests__/HtmlDomConverter.test.ts @@ -1,13 +1,18 @@ // noinspection HtmlRequiredLangAttribute,HtmlRequiredTitleElement,HtmlUnknownAttribute,HttpUrlsUsage -import { HtmlDomConverter, skip, Skip, ConversionContext } from "../src"; +import { ConversionContext, HtmlDomConverter, Skip, skip } from "../src"; import { dataNs, dataViewNs, USE_CASE_NAME } from "./Constants"; -import { documentFromHtml, documentFromXml } from "@coremedia/ckeditor5-dom-support/src/Documents"; -import { extractNodeContents, serializeToXmlString } from "@coremedia/ckeditor5-dom-support/src/Nodes"; +import { + documentFromHtml, + documentFromXml, + extractNodeContents, + isElement, + renameElement, + serializeToXmlString, + wrapIfHTMLElement, + wrapIfTableElement, +} from "@coremedia/ckeditor5-dom-support"; import { toData, toDataView } from "./DataProcessorSimulation"; -import { isElement, renameElement } from "@coremedia/ckeditor5-dom-support/src/Elements"; -import { wrapIfTableElement } from "@coremedia/ckeditor5-dom-support/src/HTMLTableElements"; -import { wrapIfHTMLElement } from "@coremedia/ckeditor5-dom-support/src/HTMLElements"; describe("HtmlDomConverter", () => { describe(USE_CASE_NAME, () => { diff --git a/packages/ckeditor5-dom-converter/package.json b/packages/ckeditor5-dom-converter/package.json index 8c7aeec33..7935a5ecd 100644 --- a/packages/ckeditor5-dom-converter/package.json +++ b/packages/ckeditor5-dom-converter/package.json @@ -12,10 +12,23 @@ "coremedia", "dom" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" @@ -24,10 +37,11 @@ "devDependencies": { "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" diff --git a/packages/ckeditor5-dom-converter/src/index.ts b/packages/ckeditor5-dom-converter/src/index.ts index 3a65fc3ca..3d60b95a3 100644 --- a/packages/ckeditor5-dom-converter/src/index.ts +++ b/packages/ckeditor5-dom-converter/src/index.ts @@ -12,6 +12,6 @@ export type { PrepareFunction, } from "./DomConverterStages"; export { HtmlDomConverter } from "./HtmlDomConverter"; -export type { RuleConfig, RuleSectionConfig } from "./Rule"; +export { byPriority, parseRule, RuleConfig, RuleSection, RuleSectionConfig } from "./Rule"; export { RuleBasedConversionListener } from "./RuleBasedConversionListener"; export { skip, type Skip } from "./Signals"; diff --git a/packages/ckeditor5-dom-converter/tsconfig.json b/packages/ckeditor5-dom-converter/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-dom-converter/tsconfig.json +++ b/packages/ckeditor5-dom-converter/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-dom-support/package.json b/packages/ckeditor5-dom-support/package.json index 7e184fe73..4df7a1219 100644 --- a/packages/ckeditor5-dom-support/package.json +++ b/packages/ckeditor5-dom-support/package.json @@ -12,10 +12,23 @@ "coremedia", "dom" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" @@ -23,10 +36,11 @@ "license": "Apache-2.0", "devDependencies": { "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "dependencies": { "@coremedia/ckeditor5-common": "^20.1.0" @@ -36,7 +50,7 @@ "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", "build": "tsc --project ./tsconfig.release.json", - "jest": "jest", + "jest": "jest --passWithNoTests", "jest:coverage": "jest --collect-coverage" } } diff --git a/packages/ckeditor5-dom-support/tsconfig.json b/packages/ckeditor5-dom-support/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-dom-support/tsconfig.json +++ b/packages/ckeditor5-dom-support/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-font-mapper/__tests__/FontMappingRegistry.test.ts b/packages/ckeditor5-font-mapper/__tests__/FontMappingRegistry.test.ts index b2efea43e..73aada945 100644 --- a/packages/ckeditor5-font-mapper/__tests__/FontMappingRegistry.test.ts +++ b/packages/ckeditor5-font-mapper/__tests__/FontMappingRegistry.test.ts @@ -1,6 +1,7 @@ import { FontMappingRegistry } from "../src/FontMappingRegistry"; import { configToMap } from "../src/ConfigToMapUtil"; import { Mode } from "../src"; +import { jest } from "@jest/globals"; test("Should return a FontMapper for symbol and ignore case", () => { const fontMappingRegistry = new FontMappingRegistry(); diff --git a/packages/ckeditor5-font-mapper/package.json b/packages/ckeditor5-font-mapper/package.json index f37265bc7..2bd0aa4d2 100644 --- a/packages/ckeditor5-font-mapper/package.json +++ b/packages/ckeditor5-font-mapper/package.json @@ -13,10 +13,23 @@ "font", "clipboard" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "version": "20.1.0", "files": [ @@ -26,11 +39,12 @@ "devDependencies": { "ckeditor5": "^42.0.2", "@coremedia-internal/ckeditor5-jest-test-helpers": "^1.0.0", + "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "@types/webpack": "^5.28.5", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" @@ -45,7 +59,7 @@ "clean": "pnpm clean:src && pnpm clean:dist", "clean:src": "rimraf --glob \"src/**/*.@(js|js.map|d.ts|d.ts.map)\"", "clean:dist": "rimraf ./dist", - "jest": "jest", + "jest": "jest --passWithNoTests", "jest:coverage": "jest --collect-coverage", "npm-check-updates": "npm-check-updates --upgrade" } diff --git a/packages/ckeditor5-font-mapper/src/FontMapper.ts b/packages/ckeditor5-font-mapper/src/FontMapper.ts index 52e3304a4..960fca85f 100644 --- a/packages/ckeditor5-font-mapper/src/FontMapper.ts +++ b/packages/ckeditor5-font-mapper/src/FontMapper.ts @@ -1,14 +1,13 @@ -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; import { - Plugin, ClipboardEventData, ClipboardPipeline, DataTransfer as ViewDataTransfer, - ViewDocumentFragment, EventInfo, + Plugin, + ViewDocumentFragment, } from "ckeditor5"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; import { fontMappingRegistry } from "./FontMappingRegistry"; import { replaceFontInDocumentFragment } from "./FontReplacer"; import { COREMEDIA_FONT_MAPPER_CONFIG_KEY, FontMapperConfig, FontMapperConfigEntry } from "./FontMapperConfig"; @@ -49,10 +48,11 @@ import { COREMEDIA_FONT_MAPPER_CONFIG_KEY, FontMapperConfig, FontMapperConfigEnt */ export default class FontMapper extends Plugin { public static readonly pluginName = "FontMapper" as const; - static readonly #logger: Logger = LoggerProvider.getLogger(FontMapper.pluginName); + static readonly #logger: Logger = LoggerProvider.getLogger("FontMapper"); static readonly #supportedDataFormat = "text/html"; static readonly #clipboardEventName = "inputTransformation"; static readonly requires = [ClipboardPipeline]; + init(): void { const initInformation = reportInitStart(this); const { editor } = this; diff --git a/packages/ckeditor5-font-mapper/src/FontMapping.ts b/packages/ckeditor5-font-mapper/src/FontMapping.ts index f5c6cf6a1..61468142b 100644 --- a/packages/ckeditor5-font-mapper/src/FontMapping.ts +++ b/packages/ckeditor5-font-mapper/src/FontMapping.ts @@ -1,5 +1,5 @@ import { htmlEncodingMap } from "./HtmlEncodingMap"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; /** * A mapping table for a certain font. diff --git a/packages/ckeditor5-font-mapper/src/FontReplacer.ts b/packages/ckeditor5-font-mapper/src/FontReplacer.ts index 0eba0f10c..f1e46f570 100644 --- a/packages/ckeditor5-font-mapper/src/FontReplacer.ts +++ b/packages/ckeditor5-font-mapper/src/FontReplacer.ts @@ -1,9 +1,9 @@ import { ViewNode, ViewElement, ViewText, UpcastWriter, ViewDocumentFragment } from "ckeditor5"; import { FontMapping } from "./FontMapping"; import { fontMappingRegistry } from "./FontMappingRegistry"; -import Logger from "@coremedia/ckeditor5-logging/src/logging/Logger"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; -import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; +import { Logger, LoggerProvider } from "@coremedia/ckeditor5-logging"; +import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common"; + const FONT_FAMILY_PROPERTY_NAME = "font-family"; const logger: Logger = LoggerProvider.getLogger("FontMapper"); /** @@ -223,6 +223,7 @@ const findTextNodeChildren = (element: ViewElement): ViewText[] => interface HasTextData { _textData: string; } + const isHasTextData = (value: unknown): value is HasTextData => typeof value === "object" && !!value && "_textData" in value && typeof value._textData === "string"; const asHasTextData = (value: unknown): HasTextData => { diff --git a/packages/ckeditor5-font-mapper/src/augmentation.ts b/packages/ckeditor5-font-mapper/src/augmentation.ts index 80edba501..8fac11681 100644 --- a/packages/ckeditor5-font-mapper/src/augmentation.ts +++ b/packages/ckeditor5-font-mapper/src/augmentation.ts @@ -1,8 +1,11 @@ -import { type FontMapper, type FontMapperConfig, COREMEDIA_FONT_MAPPER_CONFIG_KEY } from "./index"; +import FontMapper from "./FontMapper"; +import { FontMapperConfig, COREMEDIA_FONT_MAPPER_CONFIG_KEY } from "./FontMapperConfig"; + declare module "ckeditor5" { interface EditorConfig { [COREMEDIA_FONT_MAPPER_CONFIG_KEY]?: FontMapperConfig; } + interface PluginsMap { [FontMapper.pluginName]: FontMapper; } diff --git a/packages/ckeditor5-font-mapper/tsconfig.json b/packages/ckeditor5-font-mapper/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-font-mapper/tsconfig.json +++ b/packages/ckeditor5-font-mapper/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/packages/ckeditor5-link-common/package.json b/packages/ckeditor5-link-common/package.json index 071a71eb3..78d1ea8a7 100644 --- a/packages/ckeditor5-link-common/package.json +++ b/packages/ckeditor5-link-common/package.json @@ -14,7 +14,14 @@ "ckeditor5", "ckeditor5-link" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { "main": "./src/index.js", "types": "./src/index.d.ts" @@ -30,7 +37,7 @@ "jest": "^29.7.0", "jest-config": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "peerDependencies": { "ckeditor5": "^42.0.2" diff --git a/packages/ckeditor5-link-common/src/HasFocusables.ts b/packages/ckeditor5-link-common/src/HasFocusables.ts index e08e0e808..1c78ca8f1 100644 --- a/packages/ckeditor5-link-common/src/HasFocusables.ts +++ b/packages/ckeditor5-link-common/src/HasFocusables.ts @@ -1,5 +1,5 @@ import { FocusTracker, ViewCollection } from "ckeditor5"; -import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common/src/IncompatibleInternalApiUsageError"; +import { IncompatibleInternalApiUsageError } from "@coremedia/ckeditor5-common"; /** * Internal API of `LinkFormView` and `LinkActionsView` we need to expose @@ -30,10 +30,10 @@ export const hasRequiredInternalFocusablesProperty = (value: unknown): value is if (!result) { console.debug( "hasRequiredInternalFocusablesProperty: Required internal property _focusables missing or of unexpected type.", - value, + value ); throw new IncompatibleInternalApiUsageError( - "Required internal API property _focusables missing or of unexpected type.", + "Required internal API property _focusables missing or of unexpected type." ); } return result; diff --git a/packages/ckeditor5-link-common/src/LinkAttributes.ts b/packages/ckeditor5-link-common/src/LinkAttributes.ts index c97be89fe..12e05370f 100644 --- a/packages/ckeditor5-link-common/src/LinkAttributes.ts +++ b/packages/ckeditor5-link-common/src/LinkAttributes.ts @@ -3,8 +3,8 @@ import LinkCleanup, { getLinkCleanup } from "./LinkCleanup"; import { RegisterAttributeConfig } from "./RegisterAttributeConfig"; import { parseAttributesConfig } from "./LinkAttributesConfig"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { Plugin, Editor, @@ -95,8 +95,9 @@ const LINK_CUSTOM_PROPERTY = "link"; export class LinkAttributes extends Plugin { static readonly #TEXT_NAME = "$text"; public static readonly pluginName = "LinkAttributes" as const; - static readonly #logger = LoggerProvider.getLogger(LinkAttributes.pluginName); + static readonly #logger = LoggerProvider.getLogger("LinkAttributes"); static readonly requires = [LinkCleanup, TwoStepCaretMovement]; + init(): void { const initInformation = reportInitStart(this); const { editor } = this; diff --git a/packages/ckeditor5-link-common/src/LinkCleanup.ts b/packages/ckeditor5-link-common/src/LinkCleanup.ts index b12b0544b..a8027edd6 100644 --- a/packages/ckeditor5-link-common/src/LinkCleanup.ts +++ b/packages/ckeditor5-link-common/src/LinkCleanup.ts @@ -1,9 +1,9 @@ /* eslint no-null/no-null: off */ -import LoggerProvider from "@coremedia/ckeditor5-logging/src/logging/LoggerProvider"; +import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { LINK_HREF_MODEL } from "./Constants"; -import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common/src/Plugins"; -import { Plugin, Editor, DiffItem, DiffItemAttribute, Writer, Range, LinkEditing } from "ckeditor5"; +import { reportInitEnd, reportInitStart } from "@coremedia/ckeditor5-core-common"; +import { DiffItem, DiffItemAttribute, Editor, LinkEditing, Plugin, Range, Writer } from "ckeditor5"; /** * Provides configuration options for attributes, which must not exist without @@ -40,9 +40,10 @@ interface LinkCleanupRegistry { */ class LinkCleanup extends Plugin implements LinkCleanupRegistry { static readonly pluginName: string = "LinkCleanup"; - static readonly #logger = LoggerProvider.getLogger(LinkCleanup.pluginName); + static readonly #logger = LoggerProvider.getLogger("LinkCleanup"); readonly #watchedAttributes: Set = new Set(); static readonly requires = []; + init(): void { const initInformation = reportInitStart(this); const { editor } = this; @@ -57,13 +58,16 @@ class LinkCleanup extends Plugin implements LinkCleanupRegistry { document.registerPostFixer(this.#fixOrphanedAttributes); reportInitEnd(initInformation); } + override destroy(): void { // Implicitly disabled post-fixer, as it cannot be disabled explicitly. this.#watchedAttributes.clear(); } + registerDependentAttribute(modelAttributeName: string): void { this.#watchedAttributes.add(modelAttributeName); } + unregisterDependentAttribute(modelAttributeName: string): boolean { return this.#watchedAttributes.delete(modelAttributeName); } diff --git a/packages/ckeditor5-link-common/src/index.ts b/packages/ckeditor5-link-common/src/index.ts index 5fcdaa335..a2c6e6227 100644 --- a/packages/ckeditor5-link-common/src/index.ts +++ b/packages/ckeditor5-link-common/src/index.ts @@ -5,5 +5,8 @@ export { LinkAttributes, getLinkAttributes } from "./LinkAttributes"; export { LinkAttributesConfig } from "./LinkAttributesConfig"; export { RegisterAttributeConfig, LinkAttributeName, isRegisterAttributeConfig } from "./RegisterAttributeConfig"; +export { LINK_COMMAND_NAME, LINK_HREF_MODEL } from "./Constants"; +export { hasRequiredInternalFocusablesProperty } from "./HasFocusables"; +export { handleFocusManagement } from "./FocusUtils"; import "./augmentation"; diff --git a/packages/ckeditor5-link-common/tsconfig.json b/packages/ckeditor5-link-common/tsconfig.json index 92989e37d..baaaaf99b 100644 --- a/packages/ckeditor5-link-common/tsconfig.json +++ b/packages/ckeditor5-link-common/tsconfig.json @@ -1,6 +1,9 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ - "./src", + "./src" ] } diff --git a/packages/ckeditor5-logging/package.json b/packages/ckeditor5-logging/package.json index 68dc0fd42..db6cb57c5 100644 --- a/packages/ckeditor5-logging/package.json +++ b/packages/ckeditor5-logging/package.json @@ -14,10 +14,23 @@ "ckeditor5", "logging" ], - "main": "./src/index.ts", + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js", + "import": "./dist/src/index.js" + } + }, + "main": "./dist/src/index.js", "publishConfig": { - "main": "./src/index.js", - "types": "./src/index.d.ts" + "directory": "dist", + "linkDirectory": false, + "exports": { + ".": { + "types": "./dist/src/index.d.ts", + "default": "./dist/src/index.js" + } + } }, "files": [ "/src" @@ -28,7 +41,7 @@ "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "scripts": { "clean": "pnpm clean:src && pnpm clean:dist", diff --git a/packages/ckeditor5-logging/tsconfig.json b/packages/ckeditor5-logging/tsconfig.json index 1b6674928..1c1570bff 100644 --- a/packages/ckeditor5-logging/tsconfig.json +++ b/packages/ckeditor5-logging/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist/src" + }, "include": [ "./__tests__", - "./src", + "./src" ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ddb073158..af7bd0e47 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,25 +14,25 @@ importers: devDependencies: '@babel/generator': specifier: ^7.25.0 - version: 7.25.0 + version: 7.25.6 '@babel/parser': specifier: ^7.25.0 - version: 7.25.3 + version: 7.25.6 '@babel/traverse': specifier: ^7.25.0 - version: 7.25.3 + version: 7.25.6 '@babel/types': specifier: ^7.25.0 - version: 7.25.2 + version: 7.25.6 '@types/jest': specifier: ^29.5.12 version: 29.5.12 '@typescript-eslint/eslint-plugin': specifier: ^7.7.0 - version: 7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.7.0 - version: 7.7.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.18.0(eslint@8.57.0)(typescript@5.4.5) eslint: specifier: ^8.5.6 version: 8.57.0 @@ -41,39 +41,39 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) + version: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-jsdoc: specifier: ^48.2.3 - version: 48.2.3(eslint@8.57.0) + version: 48.11.0(eslint@8.57.0) eslint-plugin-no-null: specifier: ^1.0.2 version: 1.0.2(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2) + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) eslint-plugin-tsdoc: specifier: ^0.2.17 version: 0.2.17 eslint-plugin-unused-imports: specifier: ^3.1.0 - version: 3.1.0(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) + version: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) minimist: specifier: ^1.2.8 version: 1.2.8 prettier: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.3 rimraf: specifier: ^6.0.1 version: 6.0.1 semver: specifier: ^7.6.2 - version: 7.6.2 + version: 7.6.3 typedoc: specifier: ^0.25.13 version: 0.25.13(typescript@5.4.5) typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 validate-peer-dependencies: specifier: ^2.2.0 @@ -130,21 +130,27 @@ importers: specifier: ^20.1.0 version: link:../packages/ckeditor5-link-common '@coremedia/service-agent': - specifier: ^2.0.1 - version: 2.0.1 + specifier: ^1.1.5 + version: 1.1.5 ckeditor5: specifier: ^42.0.2 version: 42.0.2 xml-formatter: specifier: ^3.6.2 - version: 3.6.2 + version: 3.6.3 devDependencies: + '@babel/core': + specifier: ^7.25.2 + version: 7.25.2 + '@babel/plugin-transform-runtime': + specifier: ^7.25.4 + version: 7.25.4(@babel/core@7.25.2) '@ckeditor/ckeditor5-dev-translations': specifier: ^42.0.0 - version: 42.0.0 + version: 42.1.0 '@ckeditor/ckeditor5-dev-utils': specifier: ^42.0.0 - version: 42.0.0(webpack@5.93.0(webpack-cli@5.1.4)) + version: 42.1.0(webpack@5.94.0(webpack-cli@5.1.4)) '@ckeditor/ckeditor5-inspector': specifier: ^4.1.0 version: 4.1.0 @@ -153,46 +159,49 @@ importers: version: 42.0.2 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.16.5 + babel-loader: + specifier: ^8.3.0 + version: 8.3.0(@babel/core@7.25.2)(webpack@5.94.0(webpack-cli@5.1.4)) circular-dependency-plugin: specifier: ^5.2.2 - version: 5.2.2(webpack@5.93.0(webpack-cli@5.1.4)) + version: 5.2.2(webpack@5.94.0(webpack-cli@5.1.4)) css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.93.0(webpack-cli@5.1.4)) + version: 7.1.2(webpack@5.94.0(webpack-cli@5.1.4)) esbuild-loader: specifier: ^3.2.0 - version: 3.2.0(webpack@5.93.0(webpack-cli@5.1.4)) + version: 3.2.0(webpack@5.94.0(webpack-cli@5.1.4)) http-server: specifier: ^14.1.1 version: 14.1.1 postcss: specifier: ^8.4.39 - version: 8.4.39 + version: 8.4.45 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(postcss@8.4.39)(typescript@5.4.5)(webpack@5.93.0(webpack-cli@5.1.4)) + version: 8.1.1(postcss@8.4.45)(typescript@5.4.5)(webpack@5.94.0(webpack-cli@5.1.4)) raw-loader: specifier: ^4.0.2 - version: 4.0.2(webpack@5.93.0(webpack-cli@5.1.4)) + version: 4.0.2(webpack@5.94.0(webpack-cli@5.1.4)) rimraf: specifier: ^6.0.1 version: 6.0.1 style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.93.0(webpack-cli@5.1.4)) + version: 4.0.0(webpack@5.94.0(webpack-cli@5.1.4)) terser-webpack-plugin: specifier: ^5.3.10 - version: 5.3.10(webpack@5.93.0(webpack-cli@5.1.4)) + version: 5.3.10(webpack@5.94.0(webpack-cli@5.1.4)) typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 webpack: specifier: ^5.93.0 - version: 5.93.0(webpack-cli@5.1.4) + version: 5.94.0(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 - version: 5.1.4(webpack@5.93.0) + version: 5.1.4(webpack@5.94.0) itest: devDependencies: @@ -214,6 +223,9 @@ importers: '@coremedia/ckeditor5-coremedia-studio-integration-mock': specifier: ^20.1.0 version: link:../packages/ckeditor5-coremedia-studio-integration-mock + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/express': specifier: ^4.17.21 version: 4.17.21 @@ -222,7 +234,7 @@ importers: version: 29.5.12 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.16.5 ckeditor5: specifier: ^42.0.2 version: 42.0.2 @@ -237,36 +249,36 @@ importers: version: 7.1.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-circus: specifier: ^29.7.0 version: 29.7.0 jest-config: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-environment-node: specifier: ^29.7.0 version: 29.7.0 jest-playwright-preset: specifier: 4.0.0 - version: 4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.14.10)) + version: 4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.16.5)) jest-runner: specifier: ^29.7.0 version: 29.7.0 playwright: specifier: ^1.45.1 - version: 1.45.1 + version: 1.47.0 playwright-core: specifier: ^1.45.1 - version: 1.45.1 + version: 1.47.0 rimraf: specifier: ^6.0.1 version: 6.0.1 tslib: specifier: ^2.6.3 - version: 2.6.3 + version: 2.7.0 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 wait-for-expect: specifier: ^3.0.2 @@ -276,13 +288,13 @@ importers: dependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4 + version: 7.25.2 '@babel/preset-env': specifier: ^7.24.4 - version: 7.24.4(@babel/core@7.24.4) + version: 7.25.4(@babel/core@7.25.2) '@babel/preset-typescript': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) + version: 7.24.7(@babel/core@7.25.2) packages/ckeditor5-bbcode: dependencies: @@ -307,6 +319,9 @@ importers: '@coremedia/ckeditor5-core-common': specifier: ^20.1.0 version: link:../ckeditor5-core-common + '@coremedia/ckeditor5-dom-support': + specifier: ^20.1.0 + version: link:../ckeditor5-dom-support '@coremedia/ckeditor5-logging': specifier: ^20.1.0 version: link:../ckeditor5-logging @@ -314,9 +329,9 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers - '@coremedia/ckeditor5-dom-support': - specifier: ^20.1.0 - version: link:../ckeditor5-dom-support + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -325,19 +340,20 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 - jest-xml-matcher: - specifier: ^1.2.0 - version: 1.2.0 rimraf: specifier: ^6.0.1 version: 6.0.1 + ts-jest: + specifier: ^29.2.4 + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0)(typescript@5.4.5) typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-common: dependencies: @@ -351,21 +367,28 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) - jest-config: + version: 29.7.0(@types/node@20.16.5) + jest-each: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0 rimraf: specifier: ^6.0.1 version: 6.0.1 + ts-jest: + specifier: ^29.2.4 + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0)(typescript@5.4.5) typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-core-common: dependencies: @@ -387,16 +410,17 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-config: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-blocklist: dependencies: @@ -414,7 +438,7 @@ importers: specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@coremedia/service-agent': - specifier: ^1.1.5 || ^2.0.1 + specifier: ^1.1.5 version: 1.1.5 '@types/jest': specifier: ^29.5.12 @@ -422,9 +446,12 @@ importers: ckeditor5: specifier: ^42.0.2 version: 42.0.2 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -432,8 +459,9 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-content: dependencies: @@ -448,7 +476,7 @@ importers: specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@coremedia/service-agent': - specifier: ^1.1.5 || ^2.0.1 + specifier: ^1.1.5 version: 1.1.5 '@types/jest': specifier: ^29.5.12 @@ -458,15 +486,15 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-config: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 packages/ckeditor5-coremedia-content-clipboard: @@ -488,7 +516,7 @@ importers: specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@coremedia/service-agent': - specifier: ^1.1.5 || ^2.0.1 + specifier: ^1.1.5 version: 1.1.5 '@types/jest': specifier: ^29.5.12 @@ -496,9 +524,12 @@ importers: ckeditor5: specifier: ^42.0.2 version: 42.0.2 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -512,8 +543,9 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-differencing: dependencies: @@ -542,6 +574,9 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -550,19 +585,23 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-config: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-xml-matcher: specifier: ^1.2.0 version: 1.2.0 rimraf: specifier: ^6.0.1 version: 6.0.1 + ts-jest: + specifier: ^29.2.4 + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0)(typescript@5.4.5) typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-example-data: dependencies: @@ -573,6 +612,9 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -581,13 +623,14 @@ importers: version: 5.28.5 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-images: dependencies: @@ -614,7 +657,7 @@ importers: specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@coremedia/service-agent': - specifier: ^1.1.5 || ^2.0.1 + specifier: ^1.1.5 version: 1.1.5 '@types/jest': specifier: ^29.5.12 @@ -622,9 +665,12 @@ importers: ckeditor5: specifier: ^42.0.2 version: 42.0.2 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -635,8 +681,9 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-link: dependencies: @@ -669,17 +716,23 @@ importers: specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@coremedia/service-agent': - specifier: ^1.1.5 || ^2.0.1 + specifier: ^1.1.5 version: 1.1.5 + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 ckeditor5: specifier: ^42.0.2 version: 42.0.2 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -690,8 +743,9 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-richtext: dependencies: @@ -723,6 +777,9 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -731,7 +788,7 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -741,9 +798,13 @@ importers: rimraf: specifier: ^6.0.1 version: 6.0.1 + ts-jest: + specifier: ^29.2.4 + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0)(typescript@5.4.5) typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-richtext-support: dependencies: @@ -765,7 +826,7 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -776,8 +837,9 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-studio-essentials: dependencies: @@ -799,7 +861,7 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -810,7 +872,7 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 packages/ckeditor5-coremedia-studio-integration: @@ -829,14 +891,14 @@ importers: specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@coremedia/service-agent': - specifier: ^1.1.5 || ^2.0.1 + specifier: ^1.1.5 version: 1.1.5 '@types/jest': specifier: ^29.5.12 version: 29.5.12 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -847,8 +909,9 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-coremedia-studio-integration-mock: dependencies: @@ -867,10 +930,10 @@ importers: devDependencies: '@babel/cli': specifier: ^7.24.1 - version: 7.24.1(@babel/core@7.24.4) + version: 7.25.6(@babel/core@7.25.2) '@babel/core': specifier: ^7.24.4 - version: 7.24.4 + version: 7.25.2 '@ckeditor/ckeditor5-core': specifier: ^42.0.2 version: 42.0.2 @@ -881,8 +944,11 @@ importers: specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@coremedia/service-agent': - specifier: ^1.1.5 || ^2.0.1 + specifier: ^1.1.5 version: 1.1.5 + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -891,7 +957,7 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -902,8 +968,9 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-data-facade: dependencies: @@ -918,8 +985,8 @@ importers: specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers '@jest/globals': - specifier: ^27.4.6 - version: 27.5.1 + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -928,7 +995,7 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -937,23 +1004,27 @@ importers: version: 6.0.1 ts-jest: specifier: ^29.2.4 - version: 29.2.4(@babel/core@7.24.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0)(typescript@5.4.5) typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-dataprocessor-support: dependencies: '@coremedia/ckeditor5-common': - specifier: ^20.1.0 + specifier: workspace:* version: link:../ckeditor5-common '@coremedia/ckeditor5-logging': - specifier: ^20.1.0 + specifier: workspace:* version: link:../ckeditor5-logging devDependencies: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -962,7 +1033,7 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-each: specifier: ^29.7.0 version: 29.7.0 @@ -973,8 +1044,9 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-dialog-visibility: devDependencies: @@ -985,8 +1057,9 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-dom-converter: dependencies: @@ -1003,6 +1076,9 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -1011,13 +1087,14 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-dom-support: dependencies: @@ -1028,18 +1105,22 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-font-mapper: dependencies: @@ -1056,6 +1137,9 @@ importers: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 version: link:../ckeditor5-jest-test-helpers + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@types/jest': specifier: ^29.5.12 version: 29.5.12 @@ -1067,28 +1151,29 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages/ckeditor5-jest-test-helpers: dependencies: '@babel/core': specifier: ^7.24.4 - version: 7.24.4 + version: 7.25.2 '@coremedia-internal/ckeditor5-babel-config': specifier: ^1.0.0 version: link:../ckeditor5-babel-config babel-jest: specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.24.4) + version: 29.7.0(@babel/core@7.25.2) enhanced-resolve: specifier: ^5.16.0 - version: 5.16.0 + version: 5.17.1 jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -1097,10 +1182,10 @@ importers: version: 2.0.0 ts-jest: specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0)(typescript@5.5.3) + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0)(typescript@5.5.4) tslib: specifier: ^2.6.3 - version: 2.6.3 + version: 2.7.0 packages/ckeditor5-link-common: dependencies: @@ -1125,15 +1210,15 @@ importers: version: 42.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) jest-config: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 packages/ckeditor5-logging: @@ -1146,248 +1231,170 @@ importers: version: 29.5.12 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.10) + version: 29.7.0(@types/node@20.16.5) rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.4.5 + specifier: 5.4.5 version: 5.4.5 + publishDirectory: dist packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/cli@7.24.1': - resolution: {integrity: sha512-HbmrtxyFUr34LwAlV9jS+sSIjUp4FpdtIMGwgufY3AsxrIfsh/HxlMTywsONAZsU0RMYbZtbZFpUCrSGs7o0EA==} + '@babel/cli@7.25.6': + resolution: {integrity: sha512-Z+Doemr4VtvSD2SNHTrkiFZ1LX+JI6tyRXAAOb4N9khIuPyoEPmTPJarPm8ljJV1D6bnMQjyHMWTT9NeKbQuXA==} engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/code-frame@7.22.13': - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.23.5': - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.24.2': - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.23.5': - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.4': - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.23.9': - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.4': - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + '@babel/compat-data@7.25.4': + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.4': - resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.0': - resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.22.5': - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.23.6': - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.4': - resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} + '@babel/helper-create-class-features-plugin@7.25.4': + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.22.15': - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + '@babel/helper-create-regexp-features-plugin@7.25.2': + resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.1': - resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-environment-visitor@7.22.20': - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.23.0': - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.23.0': - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.22.15': - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.3': - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.23.3': - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.22.5': - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.22.5': - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.0': - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.22.20': - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + '@babel/helper-remap-async-to-generator@7.25.0': + resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.24.1': - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.22.6': - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.1': - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.24.8': resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.23.5': - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.22.20': - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.23.9': - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.24.4': - resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.22.13': - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.23.4': - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + '@babel/helper-wrap-function@7.25.0': + resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.2': - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + '@babel/helpers@7.25.6': + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.4': - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.25.3': - resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3': + resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4': - resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0': + resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1': - resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0': + resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1': - resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1': - resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0': + resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1429,14 +1436,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.24.1': - resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} + '@babel/plugin-syntax-import-assertions@7.25.6': + resolution: {integrity: sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.24.1': - resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} + '@babel/plugin-syntax-import-attributes@7.25.6': + resolution: {integrity: sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1451,8 +1458,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.24.1': - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + '@babel/plugin-syntax-jsx@7.24.7': + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1499,14 +1506,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.22.5': - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.24.1': - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + '@babel/plugin-syntax-typescript@7.25.4': + resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1517,302 +1518,314 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.24.1': - resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + '@babel/plugin-transform-arrow-functions@7.24.7': + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.24.3': - resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} + '@babel/plugin-transform-async-generator-functions@7.25.4': + resolution: {integrity: sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.24.1': - resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + '@babel/plugin-transform-async-to-generator@7.24.7': + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.24.1': - resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + '@babel/plugin-transform-block-scoped-functions@7.24.7': + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.24.4': - resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} + '@babel/plugin-transform-block-scoping@7.25.0': + resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.24.1': - resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} + '@babel/plugin-transform-class-properties@7.25.4': + resolution: {integrity: sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.24.4': - resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} + '@babel/plugin-transform-class-static-block@7.24.7': + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.24.1': - resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} + '@babel/plugin-transform-classes@7.25.4': + resolution: {integrity: sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.24.1': - resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + '@babel/plugin-transform-computed-properties@7.24.7': + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.24.1': - resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} + '@babel/plugin-transform-destructuring@7.24.8': + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.24.1': - resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} + '@babel/plugin-transform-dotall-regex@7.24.7': + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.24.1': - resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} + '@babel/plugin-transform-duplicate-keys@7.24.7': + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dynamic-import@7.24.1': - resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0': + resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.24.7': + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.24.1': - resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} + '@babel/plugin-transform-exponentiation-operator@7.24.7': + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.24.1': - resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} + '@babel/plugin-transform-export-namespace-from@7.24.7': + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.24.1': - resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + '@babel/plugin-transform-for-of@7.24.7': + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.24.1': - resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + '@babel/plugin-transform-function-name@7.25.1': + resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.24.1': - resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} + '@babel/plugin-transform-json-strings@7.24.7': + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.24.1': - resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + '@babel/plugin-transform-literals@7.25.2': + resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.24.1': - resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} + '@babel/plugin-transform-logical-assignment-operators@7.24.7': + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.24.1': - resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + '@babel/plugin-transform-member-expression-literals@7.24.7': + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.24.1': - resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} + '@babel/plugin-transform-modules-amd@7.24.7': + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.1': - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.24.1': - resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} + '@babel/plugin-transform-modules-systemjs@7.25.0': + resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.24.1': - resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} + '@babel/plugin-transform-modules-umd@7.24.7': + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.24.1': - resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} + '@babel/plugin-transform-new-target@7.24.7': + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1': - resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.24.1': - resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} + '@babel/plugin-transform-numeric-separator@7.24.7': + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.1': - resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} + '@babel/plugin-transform-object-rest-spread@7.24.7': + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.24.1': - resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + '@babel/plugin-transform-object-super@7.24.7': + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.24.1': - resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} + '@babel/plugin-transform-optional-catch-binding@7.24.7': + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.1': - resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} + '@babel/plugin-transform-optional-chaining@7.24.8': + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.24.1': - resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} + '@babel/plugin-transform-parameters@7.24.7': + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.24.1': - resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + '@babel/plugin-transform-private-methods@7.25.4': + resolution: {integrity: sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.24.1': - resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} + '@babel/plugin-transform-private-property-in-object@7.24.7': + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.24.1': - resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + '@babel/plugin-transform-property-literals@7.24.7': + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.24.1': - resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} + '@babel/plugin-transform-regenerator@7.24.7': + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.24.1': - resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} + '@babel/plugin-transform-reserved-words@7.24.7': + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.24.1': - resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + '@babel/plugin-transform-runtime@7.25.4': + resolution: {integrity: sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.24.1': - resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + '@babel/plugin-transform-shorthand-properties@7.24.7': + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.24.1': - resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + '@babel/plugin-transform-spread@7.24.7': + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.24.1': - resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + '@babel/plugin-transform-sticky-regex@7.24.7': + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.1': - resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} + '@babel/plugin-transform-template-literals@7.24.7': + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.24.4': - resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} + '@babel/plugin-transform-typeof-symbol@7.24.8': + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.24.1': - resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} + '@babel/plugin-transform-typescript@7.25.2': + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.24.1': - resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} + '@babel/plugin-transform-unicode-escapes@7.24.7': + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.24.1': - resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + '@babel/plugin-transform-unicode-property-regex@7.24.7': + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.24.1': - resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} + '@babel/plugin-transform-unicode-regex@7.24.7': + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.4': + resolution: {integrity: sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.24.4': - resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} + '@babel/preset-env@7.25.4': + resolution: {integrity: sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1822,8 +1835,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-typescript@7.24.1': - resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} + '@babel/preset-typescript@7.24.7': + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1831,40 +1844,20 @@ packages: '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - '@babel/runtime@7.24.4': - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.23.9': - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.24.0': - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} '@babel/template@7.25.0': resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.1': - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.25.3': - resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.25.2': - resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} '@bbob/core@3.0.2': @@ -1924,12 +1917,12 @@ packages: '@ckeditor/ckeditor5-core@42.0.2': resolution: {integrity: sha512-LkNx1Qpk/gwh0wYkl4FdZfi1N2G5Gmp026sVp301boyE9sSVeR3YxcSdKXfsr2HII+7EdJHxMswTvnd/L+IdSg==} - '@ckeditor/ckeditor5-dev-translations@42.0.0': - resolution: {integrity: sha512-qdme0GXrefAH+7hpBNRnU7nxXsUWvrLrc/AnbsWr+4pjsoU4NXHHdjLqJdlQE0u371LlYjj+HYZ/V50NdeHzIw==} + '@ckeditor/ckeditor5-dev-translations@42.1.0': + resolution: {integrity: sha512-8Ab0BhQnlTnhIQoSQGZthD29wHnY1cJCcoiPqVRWW667ezxm2fwzm56qLngGPoFa16IVW2LLBgYkFYL5Jy6N0Q==} engines: {node: '>=18.0.0', npm: '>=5.7.1'} - '@ckeditor/ckeditor5-dev-utils@42.0.0': - resolution: {integrity: sha512-zfzTnKN6uZmRK+4uXgVY5eWajxeXGirMK2Yac8HsQVankTfQkhA1UZCeJMFOWJIU3SUqbEVTL9Rg5XvieZjc7Q==} + '@ckeditor/ckeditor5-dev-utils@42.1.0': + resolution: {integrity: sha512-qytP3xJlpCFxkqC/sYZF36ivfoPQMKdTp7mdXTayTy+4CXmiucTIgtgc/jbgkoOCFYln+Tt9oEOhQ4OnadhL3A==} engines: {node: '>=18.0.0', npm: '>=5.7.1'} '@ckeditor/ckeditor5-easy-image@42.0.2': @@ -2074,9 +2067,6 @@ packages: '@coremedia/service-agent@1.1.5': resolution: {integrity: sha512-yPdNaqvpE3W1seg6uZEPgMZSs1Ov1dRbMQxluNaYLCdU736j9j7aN/XqmjZWfDVncfVTLYNCNuIFfMS3dE/I1g==} - '@coremedia/service-agent@2.0.1': - resolution: {integrity: sha512-iKD5bQ63Nn0CAFvDK/vjrXy7sQvdNDOgpI96irpF6gy+tGDZKR9qILzfvcAgpTGSjUqpVEGa4fSnIksQjvXa/Q==} - '@coremedia/set-version@1.1.1': resolution: {integrity: sha512-PZfuWfm+bUwmA2C5l0EOmmoy96hJfLb0nT7qcpslS8aWChEOT4Q0dY49E0MzJ5LJz9PeRJf/33yaej2K5NJg7Q==} engines: {node: '>=14'} @@ -2092,18 +2082,24 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@es-joy/jsdoccomment@0.42.0': - resolution: {integrity: sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==} + '@es-joy/jsdoccomment@0.46.0': + resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} engines: {node: '>=16'} + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.17.19': resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.19.3': - resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==} + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2114,8 +2110,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.19.3': - resolution: {integrity: sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==} + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -2126,8 +2122,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.19.3': - resolution: {integrity: sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==} + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -2138,8 +2134,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.19.3': - resolution: {integrity: sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==} + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -2150,8 +2146,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.19.3': - resolution: {integrity: sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==} + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -2162,8 +2158,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.19.3': - resolution: {integrity: sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==} + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -2174,8 +2170,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.3': - resolution: {integrity: sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==} + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -2186,8 +2182,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.19.3': - resolution: {integrity: sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==} + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -2198,8 +2194,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.19.3': - resolution: {integrity: sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==} + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -2210,8 +2206,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.19.3': - resolution: {integrity: sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==} + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -2222,8 +2218,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.19.3': - resolution: {integrity: sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==} + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -2234,8 +2230,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.19.3': - resolution: {integrity: sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==} + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -2246,8 +2242,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.19.3': - resolution: {integrity: sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==} + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -2258,8 +2254,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.19.3': - resolution: {integrity: sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==} + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -2270,8 +2266,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.19.3': - resolution: {integrity: sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==} + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -2282,8 +2278,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.19.3': - resolution: {integrity: sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==} + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -2294,8 +2290,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.19.3': - resolution: {integrity: sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==} + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -2306,8 +2302,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.19.3': - resolution: {integrity: sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==} + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -2318,8 +2314,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.19.3': - resolution: {integrity: sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==} + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -2330,8 +2326,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.19.3': - resolution: {integrity: sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==} + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -2342,8 +2338,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.19.3': - resolution: {integrity: sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==} + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -2354,8 +2350,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.19.3': - resolution: {integrity: sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==} + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2366,8 +2362,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': @@ -2390,6 +2386,7 @@ packages: '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -2397,6 +2394,7 @@ packages: '@humanwhocodes/object-schema@2.0.3': resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -2423,10 +2421,6 @@ packages: node-notifier: optional: true - '@jest/environment@27.5.1': - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - '@jest/environment@29.7.0': resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2439,18 +2433,10 @@ packages: resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/fake-timers@27.5.1': - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - '@jest/fake-timers@29.7.0': resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/globals@27.5.1': - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - '@jest/globals@29.7.0': resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2484,49 +2470,27 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@27.5.1': - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.3': - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.1.2': - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.5': - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} - '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.19': - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -2571,8 +2535,11 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@sideway/address@4.1.4': - resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} '@sideway/formula@3.0.1': resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} @@ -2583,17 +2550,11 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sinonjs/commons@1.8.6': - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} - - '@sinonjs/commons@2.0.0': - resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - '@sinonjs/fake-timers@10.0.2': - resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} - - '@sinonjs/fake-timers@8.1.0': - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} @@ -2603,35 +2564,29 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} - '@types/babel__core@7.20.0': - resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} - - '@types/babel__generator@7.6.4': - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - '@types/babel__template@7.4.1': - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - '@types/babel__traverse@7.18.3': - resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/body-parser@1.19.2': - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/connect@3.4.35': - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/express-serve-static-core@4.17.33': - resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} + '@types/express-serve-static-core@4.19.5': + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} @@ -2639,17 +2594,20 @@ packages: '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - '@types/graceful-fs@4.1.6': - resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/istanbul-lib-coverage@2.0.4': - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - '@types/istanbul-lib-report@3.0.0': - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - '@types/istanbul-reports@3.0.1': - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} '@types/jest@29.5.12': resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} @@ -2657,65 +2615,56 @@ packages: '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - '@types/json-schema@7.0.11': - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/mime@3.0.1': - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@20.14.10': - resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/node@20.16.5': + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/qs@6.9.7': - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - '@types/range-parser@1.2.4': - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - '@types/serve-static@1.15.1': - resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - '@types/stack-utils@2.0.1': - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/tough-cookie@4.0.2': - resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@types/wait-on@5.3.1': - resolution: {integrity: sha512-2FFOKCF/YydrMUaqg+fkk49qf0e5rDgwt6aQsMzFQzbS419h2gNOXyiwp/o2yYy27bi/C1z+HgfncryjGzlvgQ==} + '@types/wait-on@5.3.4': + resolution: {integrity: sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==} '@types/webpack@5.28.5': resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} - '@types/yargs-parser@21.0.0': - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@16.0.9': - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@types/yargs@17.0.24': - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} - - '@typescript-eslint/eslint-plugin@7.7.0': - resolution: {integrity: sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==} + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -2725,8 +2674,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.7.0': - resolution: {integrity: sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==} + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2735,12 +2684,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.7.0': - resolution: {integrity: sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.7.0': - resolution: {integrity: sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==} + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -2749,12 +2698,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.7.0': - resolution: {integrity: sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==} + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.7.0': - resolution: {integrity: sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==} + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -2762,14 +2711,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@7.7.0': - resolution: {integrity: sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==} + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.7.0': - resolution: {integrity: sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': @@ -2853,6 +2802,7 @@ packages: abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -2871,19 +2821,9 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} - hasBin: true acorn@8.12.1: resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} @@ -2919,8 +2859,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -2974,22 +2914,23 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} array.prototype.flat@1.3.2: @@ -3000,8 +2941,8 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} async@2.6.4: @@ -3017,12 +2958,12 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.6.5: - resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -3030,6 +2971,13 @@ packages: peerDependencies: '@babel/core': ^7.8.0 + babel-loader@8.3.0: + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} @@ -3038,23 +2986,23 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-polyfill-corejs2@0.4.10: - resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.10.4: - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.1: - resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-preset-current-node-syntax@1.0.1: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} peerDependencies: '@babel/core': ^7.0.0 @@ -3094,22 +3042,12 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.22.3: - resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3123,10 +3061,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -3139,9 +3073,6 @@ packages: resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} - call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -3165,14 +3096,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001585: - resolution: {integrity: sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==} - - caniuse-lite@1.0.30001611: - resolution: {integrity: sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==} - - caniuse-lite@1.0.30001641: - resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} + caniuse-lite@1.0.30001659: + resolution: {integrity: sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -3202,8 +3127,8 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} circular-dependency-plugin@5.2.2: @@ -3212,8 +3137,8 @@ packages: peerDependencies: webpack: '>=4.0.1' - cjs-module-lexer@1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} ckeditor5@42.0.2: resolution: {integrity: sha512-SHyyJ6y/+2Mas3SMlVchsq1i9LYqF7J7EMwEUKAt+sIXBW9pbBnLVncXpIpGTQ/M8fS20NVk7dfJ2P4TyEZGew==} @@ -3248,8 +3173,8 @@ packages: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - collect-v8-coverage@1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -3270,8 +3195,8 @@ packages: colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} colors@1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} @@ -3291,14 +3216,14 @@ packages: commander@3.0.2: resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -3334,8 +3259,15 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} - core-js-compat@3.37.0: - resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} + copyfiles@2.4.1: + resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} + hasBin: true + + core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} corser@2.0.1: resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} @@ -3447,6 +3379,18 @@ packages: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3463,17 +3407,8 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -3488,8 +3423,8 @@ packages: decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -3507,16 +3442,12 @@ packages: resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} engines: {node: '>=8'} - define-data-property@1.1.0: - resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} - engines: {node: '>= 0.4'} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} del@5.1.0: @@ -3539,10 +3470,6 @@ packages: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3572,6 +3499,7 @@ packages: domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} @@ -3591,14 +3519,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.4.661: - resolution: {integrity: sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw==} - - electron-to-chromium@1.4.744: - resolution: {integrity: sha512-nAGcF0yeKKfrP13LMFr5U1eghfFSvFLg302VUFzWlcjPOnUYd52yU5x6PBYrujhNbc4jYmZFrGZFK+xasaEzVA==} - - electron-to-chromium@1.4.825: - resolution: {integrity: sha512-OCcF+LwdgFGcsYPYC5keEEFC2XT0gBhrYbeGzHCx7i9qRFbzO/AqTmc/C/1xNhJj+JA7rzlN7mpBuStshh96Cg==} + electron-to-chromium@1.5.18: + resolution: {integrity: sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -3618,18 +3540,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} - enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} - engines: {node: '>=10.13.0'} - - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} - entities@4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} - engines: {node: '>=0.12'} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3638,16 +3552,16 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - envinfo@7.8.1: - resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + envinfo@7.13.0: + resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==} engines: {node: '>=4'} hasBin: true error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} es-define-property@1.0.0: @@ -3661,12 +3575,16 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -3690,17 +3608,13 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.19.3: - resolution: {integrity: sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==} + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} hasBin: true - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-html@1.0.3: @@ -3718,8 +3632,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - escodegen@2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true @@ -3732,8 +3646,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + eslint-module-utils@2.11.0: + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3753,8 +3667,8 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + eslint-plugin-import@2.30.0: + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3763,8 +3677,8 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-jsdoc@48.2.3: - resolution: {integrity: sha512-r9DMAmFs66VNvNqRLLjHejdnJtILrt3xGi+Qx0op0oRfFGVpOR1Hb3BC++MacseHx93d8SKYPhyrC9BS7Os2QA==} + eslint-plugin-jsdoc@48.11.0: + resolution: {integrity: sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -3775,8 +3689,8 @@ packages: peerDependencies: eslint: '>=3.0.0' - eslint-plugin-prettier@5.1.3: - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -3792,8 +3706,8 @@ packages: eslint-plugin-tsdoc@0.2.17: resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - eslint-plugin-unused-imports@3.1.0: - resolution: {integrity: sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==} + eslint-plugin-unused-imports@3.2.0: + resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': 6 - 7 @@ -3818,11 +3732,19 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3832,8 +3754,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -3878,10 +3800,6 @@ packages: expect-playwright@0.8.0: resolution: {integrity: sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg==} - expect@27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3893,8 +3811,8 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} @@ -3906,12 +3824,15 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -3923,8 +3844,8 @@ packages: filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} finalhandler@1.2.0: @@ -3959,20 +3880,15 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - follow-redirects@1.15.1: - resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - follow-redirects@1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -3987,8 +3903,8 @@ packages: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} - foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} form-data@4.0.0: @@ -4034,9 +3950,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -4055,12 +3968,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} - - get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -4077,15 +3984,12 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.0: - resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==} - - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-tsconfig@4.8.0: + resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -4105,6 +4009,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported global-modules@0.2.3: resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==} @@ -4122,8 +4027,8 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} globby@10.0.2: @@ -4154,16 +4059,9 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - has-proto@1.0.3: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} @@ -4172,22 +4070,14 @@ packages: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - hasha@5.2.2: resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} engines: {node: '>=8'} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -4246,16 +4136,16 @@ packages: peerDependencies: postcss: ^8.1.0 - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true @@ -4272,6 +4162,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -4279,8 +4170,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} interpret@1.4.0: @@ -4295,8 +4186,9 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -4312,22 +4204,17 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - - is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -4353,8 +4240,8 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} is-number-object@1.0.7: @@ -4384,8 +4271,9 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} @@ -4399,8 +4287,8 @@ packages: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} is-typedarray@1.0.0: @@ -4417,6 +4305,12 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -4427,8 +4321,8 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} istanbul-lib-hook@3.0.0: @@ -4443,24 +4337,24 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} - istanbul-lib-instrument@6.0.0: - resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} istanbul-lib-processinfo@2.0.3: resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} engines: {node: '>=8'} - istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} - istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} jackspeak@4.0.1: @@ -4505,10 +4399,6 @@ packages: ts-node: optional: true - jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-diff@29.7.0: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4534,10 +4424,6 @@ packages: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4550,26 +4436,14 @@ packages: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-matcher-utils@29.7.0: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-mock@29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4621,10 +4495,6 @@ packages: jest-transform-stub@2.0.0: resolution: {integrity: sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==} - jest-util@27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4662,15 +4532,15 @@ packages: node-notifier: optional: true - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - joi@17.12.0: - resolution: {integrity: sha512-HSLsmSmXz+PV9PYoi3p7cgIbj06WnEBNT28n+bbBNcPZXZFqCzzvGqpTBPujx/Z0nh1+KNQPDrNgdmQ8dq0qYw==} + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4729,8 +4599,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -4754,10 +4624,6 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -4773,10 +4639,6 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} - loader-utils@2.0.2: - resolution: {integrity: sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==} - engines: {node: '>=8.9.0'} - loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} @@ -4810,8 +4672,8 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - lru-cache@11.0.0: - resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} + lru-cache@11.0.1: + resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -4832,6 +4694,10 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} @@ -4872,8 +4738,8 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -4893,8 +4759,8 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mini-css-extract-plugin@2.9.0: - resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} + mini-css-extract-plugin@2.9.1: + resolution: {integrity: sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 @@ -4910,8 +4776,8 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -4957,9 +4823,6 @@ packages: ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -4988,8 +4851,11 @@ packages: resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} engines: {node: '>=8'} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + noms@0.0.0: + resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -5002,37 +4868,36 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + nwsapi@2.2.12: + resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} engines: {node: '>=8.9'} hasBin: true - object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} on-finished@2.4.1: @@ -5050,12 +4915,8 @@ packages: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true - optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} os-homedir@1.0.2: @@ -5101,6 +4962,10 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-imports@2.1.1: + resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} + engines: {node: '>= 18'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -5150,11 +5015,8 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -5168,21 +5030,21 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.45.1: - resolution: {integrity: sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg==} + playwright-core@1.47.0: + resolution: {integrity: sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==} engines: {node: '>=18'} hasBin: true - playwright@1.45.1: - resolution: {integrity: sha512-Hjrgae4kpSQBr98nhCj3IScxVeVUixqj+5oyif8TdIn2opTCPEzqAqNMeK42i3cWDCVu9MI+ZsGWw+gVR4ISBg==} + playwright@1.47.0: + resolution: {integrity: sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==} engines: {node: '>=18'} hasBin: true @@ -5193,6 +5055,10 @@ packages: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + postcss-calc@9.0.1: resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} engines: {node: ^14 || ^16 || >=18.0} @@ -5411,8 +5277,8 @@ packages: peerDependencies: postcss: ^8.4.31 - postcss-selector-parser@6.1.1: - resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} postcss-simple-vars@7.0.1: @@ -5436,14 +5302,10 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.45: + resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} engines: {node: ^10 || ^12 || >=14} - prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5452,22 +5314,21 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true pretty-data@0.40.0: resolution: {integrity: sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==} - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-on-spawn@1.0.0: resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} engines: {node: '>=8'} @@ -5494,21 +5355,21 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pure-rand@6.0.1: - resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} - - qs@6.10.3: - resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} - engines: {node: '>=0.6'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -5532,15 +5393,18 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - - react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -5570,8 +5434,8 @@ packages: regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} regexpu-core@5.3.2: @@ -5630,10 +5494,6 @@ packages: resolve@1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} - hasBin: true - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -5662,8 +5522,8 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} safe-buffer@5.1.2: @@ -5672,8 +5532,9 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -5682,9 +5543,9 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - schema-utils@3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} - engines: {node: '>= 10.13.0'} + schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} schema-utils@3.3.0: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} @@ -5705,18 +5566,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -5727,8 +5578,8 @@ packages: serialize-javascript@5.0.1: resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} - serialize-javascript@6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} @@ -5741,8 +5592,8 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} - set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} setprototypeof@1.2.0: @@ -5768,9 +5619,6 @@ packages: shiki@0.14.7: resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -5793,11 +5641,14 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slashes@3.0.12: + resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} + source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} source-map-support@0.5.13: @@ -5823,8 +5674,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -5853,15 +5704,22 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -5938,8 +5796,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} tapable@2.2.1: @@ -5972,13 +5830,8 @@ packages: uglify-js: optional: true - terser@5.27.0: - resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} - engines: {node: '>=10'} - hasBin: true - - terser@5.31.2: - resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} + terser@5.31.6: + resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} engines: {node: '>=10'} hasBin: true @@ -5989,6 +5842,9 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through2@3.0.2: resolution: {integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==} @@ -6007,8 +5863,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} tr46@3.0.0: @@ -6025,29 +5881,8 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-jest@29.1.2: - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - - ts-jest@29.2.4: - resolution: {integrity: sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==} + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -6073,8 +5908,8 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} turndown-plugin-gfm@1.0.2: resolution: {integrity: sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==} @@ -6082,10 +5917,6 @@ packages: turndown@7.2.0: resolution: {integrity: sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==} - type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -6110,20 +5941,21 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} @@ -6140,16 +5972,16 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} @@ -6189,11 +6021,9 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} update-browserslist-db@1.1.0: resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} @@ -6221,8 +6051,8 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - v8-to-istanbul@9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} validate-peer-dependencies@2.2.0: @@ -6262,8 +6092,8 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} webidl-conversions@7.0.0: @@ -6287,8 +6117,8 @@ packages: webpack-dev-server: optional: true - webpack-merge@5.8.0: - resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} + webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} engines: {node: '>=10.0.0'} webpack-sources@1.4.3: @@ -6302,8 +6132,8 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.93.0: - resolution: {integrity: sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==} + webpack@5.94.0: + resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -6327,11 +6157,11 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-module@2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} which@1.3.1: @@ -6343,11 +6173,11 @@ packages: engines: {node: '>= 8'} hasBin: true - wildcard@2.0.0: - resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} wrap-ansi@6.2.0: @@ -6372,8 +6202,8 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -6384,21 +6214,25 @@ packages: utf-8-validate: optional: true - xml-formatter@3.6.2: - resolution: {integrity: sha512-enWhevZNOwffZFUhzl1WMcha8lFLZUgJ7NzFs5Ug4ZOFCoNheGYXz1J9Iz/e+cTn9rCkuT1GwTacz+YlmFHOGw==} - engines: {node: '>= 14'} + xml-formatter@3.6.3: + resolution: {integrity: sha512-++x1TlRO1FRlQ82AZ4WnoCSufaI/PT/sycn4K8nRl4gnrNC1uYY2VV/67aALZ2m0Q4Q/BLj/L69K360Itw9NNg==} + engines: {node: '>= 16'} xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} - xml-parser-xo@4.1.1: - resolution: {integrity: sha512-Ggf2y90+Y6e9IK5hoPuembVHJ03PhDSdhldEmgzbihzu9k0XBo0sfcFxaSi4W1PlUSSI1ok+MJ0JCXUn+U4Ilw==} - engines: {node: '>= 14'} + xml-parser-xo@4.1.2: + resolution: {integrity: sha512-Z/DRB0ZAKj5vAQg++XsfQQKfT73Vfj5n5lKIVXobBDQEva6NHWUTxOA6OohJmEcpoy8AEqBmSGkXXAnFwt5qAA==} + engines: {node: '>= 16'} xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -6436,8 +6270,8 @@ packages: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} - yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} yocto-queue@0.1.0: @@ -6446,23 +6280,16 @@ packages: snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.2.1': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/cli@7.24.1(@babel/core@7.24.4)': + '@babel/cli@7.25.6(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.2 '@jridgewell/trace-mapping': 0.3.25 - commander: 4.1.1 + commander: 6.2.1 convert-source-map: 2.0.0 fs-readdir-recursive: 1.1.0 glob: 7.2.3 @@ -6472,937 +6299,811 @@ snapshots: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 chokidar: 3.6.0 - '@babel/code-frame@7.22.13': - dependencies: - '@babel/highlight': 7.22.13 - chalk: 2.4.2 - - '@babel/code-frame@7.23.5': - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - - '@babel/code-frame@7.24.2': - dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.0 - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.23.5': {} - - '@babel/compat-data@7.24.4': {} + picocolors: 1.1.0 - '@babel/core@7.23.9': - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.25.0 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.25.3 - '@babel/template': 7.23.9 - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/compat-data@7.25.4': {} - '@babel/core@7.24.4': + '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helpers': 7.24.4 - '@babel/parser': 7.24.4 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.24.4': - dependencies: - '@babel/types': 7.25.2 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/generator@7.25.0': + '@babel/generator@7.25.6': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/helper-annotate-as-pure@7.22.5': + '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 - '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-compilation-targets@7.23.6': + '@babel/helper-compilation-targets@7.25.2': dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.3 + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.6 semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4)': + '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 regexpu-core: 5.3.2 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.5 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.22.20': {} - - '@babel/helper-function-name@7.23.0': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.25.2 - - '@babel/helper-hoist-variables@7.22.5': - dependencies: - '@babel/types': 7.25.2 - - '@babel/helper-member-expression-to-functions@7.23.0': - dependencies: - '@babel/types': 7.25.2 - - '@babel/helper-module-imports@7.22.15': - dependencies: - '@babel/types': 7.25.2 - - '@babel/helper-module-imports@7.24.3': + '@babel/helper-member-expression-to-functions@7.24.8': dependencies: - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9)': + '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)': + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-optimise-call-expression@7.22.5': + '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 - '@babel/helper-plugin-utils@7.22.5': {} + '@babel/helper-plugin-utils@7.24.8': {} - '@babel/helper-plugin-utils@7.24.0': {} - - '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 - - '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4)': + '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-wrap-function': 7.25.0 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-simple-access@7.22.5': + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/types': 7.25.2 + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/types': 7.25.2 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-split-export-declaration@7.22.6': + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/types': 7.25.2 - - '@babel/helper-string-parser@7.24.1': {} + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-validator-identifier@7.22.20': {} - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-option@7.23.5': {} - - '@babel/helper-wrap-function@7.22.20': - dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.7 - '@babel/types': 7.25.2 - - '@babel/helpers@7.23.9': - dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color + '@babel/helper-validator-option@7.24.8': {} - '@babel/helpers@7.24.4': + '@babel/helper-wrap-function@7.25.0': dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color - '@babel/highlight@7.22.13': + '@babel/helpers@7.25.6': dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - - '@babel/highlight@7.23.4': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - - '@babel/highlight@7.24.2': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 '@babel/highlight@7.24.7': dependencies: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.24.4': - dependencies: - '@babel/types': 7.25.2 - - '@babel/parser@7.25.3': - dependencies: - '@babel/types': 7.25.2 + picocolors: 1.1.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4)': + '@babel/parser@7.25.6': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/types': 7.25.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.9)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-syntax-import-assertions@7.25.6(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9)': + '@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9)': + '@babel/plugin-transform-async-generator-functions@7.25.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4)': + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4)': + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9)': + '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4)': + '@babel/plugin-transform-class-properties@7.25.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.24.4)': + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-classes@7.25.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/traverse': 7.25.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4)': + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.25.0 - '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4)': + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4)': + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4)': + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/template': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-simple-access': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4)': + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-private-methods@7.25.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + regenerator-transform: 0.15.2 - '@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-runtime@7.25.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - regenerator-transform: 0.15.2 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - - '@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) - - '@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4)': - dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/preset-env@7.24.4(@babel/core@7.24.4)': - dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) - core-js-compat: 3.37.0 + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-sets-regex@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/preset-env@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.25.4(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/types': 7.25.2 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.25.6 esutils: 2.0.3 - '@babel/preset-typescript@7.24.1(@babel/core@7.24.4)': + '@babel/preset-typescript@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color '@babel/regjsgen@0.8.0': {} - '@babel/runtime@7.24.4': + '@babel/runtime@7.25.6': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.23.9': - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - - '@babel/template@7.24.0': - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - - '@babel/template@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - - '@babel/traverse@7.24.1': - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.25.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 - '@babel/traverse@7.25.3': + '@babel/traverse@7.25.6': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.3 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - debug: 4.3.5 + '@babel/types': 7.25.6 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.0': - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@babel/types@7.25.2': + '@babel/types@7.25.6': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 @@ -7526,10 +7227,10 @@ snapshots: '@ckeditor/ckeditor5-watchdog': 42.0.2 lodash-es: 4.17.21 - '@ckeditor/ckeditor5-dev-translations@42.0.0': + '@ckeditor/ckeditor5-dev-translations@42.1.0': dependencies: - '@babel/parser': 7.25.3 - '@babel/traverse': 7.25.3 + '@babel/parser': 7.25.6 + '@babel/traverse': 7.25.6 chalk: 4.1.2 pofile: 1.1.4 rimraf: 3.0.2 @@ -7537,29 +7238,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-dev-utils@42.0.0(webpack@5.93.0(webpack-cli@5.1.4))': + '@ckeditor/ckeditor5-dev-utils@42.1.0(webpack@5.94.0(webpack-cli@5.1.4))': dependencies: - '@ckeditor/ckeditor5-dev-translations': 42.0.0 + '@ckeditor/ckeditor5-dev-translations': 42.1.0 chalk: 3.0.0 cli-cursor: 3.1.0 cli-spinners: 2.9.2 - css-loader: 5.2.7(webpack@5.93.0(webpack-cli@5.1.4)) - cssnano: 6.1.2(postcss@8.4.39) + css-loader: 5.2.7(webpack@5.94.0(webpack-cli@5.1.4)) + cssnano: 6.1.2(postcss@8.4.45) del: 5.1.0 - esbuild-loader: 3.0.1(webpack@5.93.0(webpack-cli@5.1.4)) + esbuild-loader: 3.0.1(webpack@5.94.0(webpack-cli@5.1.4)) fs-extra: 9.1.0 is-interactive: 1.0.0 javascript-stringify: 1.6.0 - mini-css-extract-plugin: 2.9.0(webpack@5.93.0(webpack-cli@5.1.4)) - postcss: 8.4.39 - postcss-import: 14.1.0(postcss@8.4.39) - postcss-loader: 4.3.0(postcss@8.4.39)(webpack@5.93.0(webpack-cli@5.1.4)) - postcss-mixins: 9.0.4(postcss@8.4.39) - postcss-nesting: 10.2.0(postcss@8.4.39) - raw-loader: 4.0.2(webpack@5.93.0(webpack-cli@5.1.4)) + mini-css-extract-plugin: 2.9.1(webpack@5.94.0(webpack-cli@5.1.4)) + postcss: 8.4.45 + postcss-import: 14.1.0(postcss@8.4.45) + postcss-loader: 4.3.0(postcss@8.4.45)(webpack@5.94.0(webpack-cli@5.1.4)) + postcss-mixins: 9.0.4(postcss@8.4.45) + postcss-nesting: 10.2.0(postcss@8.4.45) + raw-loader: 4.0.2(webpack@5.94.0(webpack-cli@5.1.4)) shelljs: 0.8.5 - style-loader: 2.0.0(webpack@5.93.0(webpack-cli@5.1.4)) - terser-webpack-plugin: 4.2.3(webpack@5.93.0(webpack-cli@5.1.4)) + style-loader: 2.0.0(webpack@5.94.0(webpack-cli@5.1.4)) + terser-webpack-plugin: 4.2.3(webpack@5.94.0(webpack-cli@5.1.4)) through2: 3.0.2 transitivePeerDependencies: - bluebird @@ -7934,162 +7635,160 @@ snapshots: lodash: 4.17.21 rxjs: 7.8.1 - '@coremedia/service-agent@2.0.1': - dependencies: - lodash: 4.17.21 - rxjs: 7.8.1 - '@coremedia/set-version@1.1.1': dependencies: escape-string-regexp: 4.0.0 glob: 7.2.3 js-yaml: 4.1.0 lodash: 4.17.21 - semver: 7.6.2 + semver: 7.6.3 yargs: 16.2.0 - '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.1)': + '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.1.2)': dependencies: - postcss-selector-parser: 6.1.1 + postcss-selector-parser: 6.1.2 '@discoveryjs/json-ext@0.5.7': {} - '@es-joy/jsdoccomment@0.42.0': + '@es-joy/jsdoccomment@0.46.0': dependencies: comment-parser: 1.4.1 - esquery: 1.5.0 + esquery: 1.6.0 jsdoc-type-pratt-parser: 4.0.0 + '@esbuild/aix-ppc64@0.19.12': + optional: true + '@esbuild/android-arm64@0.17.19': optional: true - '@esbuild/android-arm64@0.19.3': + '@esbuild/android-arm64@0.19.12': optional: true '@esbuild/android-arm@0.17.19': optional: true - '@esbuild/android-arm@0.19.3': + '@esbuild/android-arm@0.19.12': optional: true '@esbuild/android-x64@0.17.19': optional: true - '@esbuild/android-x64@0.19.3': + '@esbuild/android-x64@0.19.12': optional: true '@esbuild/darwin-arm64@0.17.19': optional: true - '@esbuild/darwin-arm64@0.19.3': + '@esbuild/darwin-arm64@0.19.12': optional: true '@esbuild/darwin-x64@0.17.19': optional: true - '@esbuild/darwin-x64@0.19.3': + '@esbuild/darwin-x64@0.19.12': optional: true '@esbuild/freebsd-arm64@0.17.19': optional: true - '@esbuild/freebsd-arm64@0.19.3': + '@esbuild/freebsd-arm64@0.19.12': optional: true '@esbuild/freebsd-x64@0.17.19': optional: true - '@esbuild/freebsd-x64@0.19.3': + '@esbuild/freebsd-x64@0.19.12': optional: true '@esbuild/linux-arm64@0.17.19': optional: true - '@esbuild/linux-arm64@0.19.3': + '@esbuild/linux-arm64@0.19.12': optional: true '@esbuild/linux-arm@0.17.19': optional: true - '@esbuild/linux-arm@0.19.3': + '@esbuild/linux-arm@0.19.12': optional: true '@esbuild/linux-ia32@0.17.19': optional: true - '@esbuild/linux-ia32@0.19.3': + '@esbuild/linux-ia32@0.19.12': optional: true '@esbuild/linux-loong64@0.17.19': optional: true - '@esbuild/linux-loong64@0.19.3': + '@esbuild/linux-loong64@0.19.12': optional: true '@esbuild/linux-mips64el@0.17.19': optional: true - '@esbuild/linux-mips64el@0.19.3': + '@esbuild/linux-mips64el@0.19.12': optional: true '@esbuild/linux-ppc64@0.17.19': optional: true - '@esbuild/linux-ppc64@0.19.3': + '@esbuild/linux-ppc64@0.19.12': optional: true '@esbuild/linux-riscv64@0.17.19': optional: true - '@esbuild/linux-riscv64@0.19.3': + '@esbuild/linux-riscv64@0.19.12': optional: true '@esbuild/linux-s390x@0.17.19': optional: true - '@esbuild/linux-s390x@0.19.3': + '@esbuild/linux-s390x@0.19.12': optional: true '@esbuild/linux-x64@0.17.19': optional: true - '@esbuild/linux-x64@0.19.3': + '@esbuild/linux-x64@0.19.12': optional: true '@esbuild/netbsd-x64@0.17.19': optional: true - '@esbuild/netbsd-x64@0.19.3': + '@esbuild/netbsd-x64@0.19.12': optional: true '@esbuild/openbsd-x64@0.17.19': optional: true - '@esbuild/openbsd-x64@0.19.3': + '@esbuild/openbsd-x64@0.19.12': optional: true '@esbuild/sunos-x64@0.17.19': optional: true - '@esbuild/sunos-x64@0.19.3': + '@esbuild/sunos-x64@0.19.12': optional: true '@esbuild/win32-arm64@0.17.19': optional: true - '@esbuild/win32-arm64@0.19.3': + '@esbuild/win32-arm64@0.19.12': optional: true '@esbuild/win32-ia32@0.17.19': optional: true - '@esbuild/win32-ia32@0.19.3': + '@esbuild/win32-ia32@0.19.12': optional: true '@esbuild/win32-x64@0.17.19': optional: true - '@esbuild/win32-x64@0.19.3': + '@esbuild/win32-x64@0.19.12': optional: true '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': @@ -8097,15 +7796,15 @@ snapshots: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.11.0': {} '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.7 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -8126,7 +7825,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -8157,7 +7856,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -8170,14 +7869,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.14.10) + jest-config: 29.7.0(@types/node@20.16.5) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8189,7 +7888,7 @@ snapshots: jest-util: 29.7.0 jest-validate: 29.7.0 jest-watcher: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 @@ -8198,18 +7897,11 @@ snapshots: - supports-color - ts-node - '@jest/environment@27.5.1': - dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.14.10 - jest-mock: 27.5.1 - '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -8223,30 +7915,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/fake-timers@27.5.1': - dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 - '@types/node': 20.14.10 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 - '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.0.2 - '@types/node': 20.14.10 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.16.5 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 - '@jest/globals@27.5.1': - dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 - '@jest/globals@29.7.0': dependencies: '@jest/environment': 29.7.0 @@ -8264,24 +7941,24 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.14.10 + '@types/node': 20.16.5 chalk: 4.1.2 - collect-v8-coverage: 1.0.1 + collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.0 - istanbul-lib-report: 3.0.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 + istanbul-reports: 3.1.7 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.0 + v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color @@ -8299,8 +7976,8 @@ snapshots: dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 '@jest/test-sequencer@29.7.0': dependencies: @@ -8311,9 +7988,9 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.2 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -8322,71 +7999,43 @@ snapshots: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.5 + micromatch: 4.0.8 + pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color - '@jest/types@27.5.1': - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 20.14.10 - '@types/yargs': 16.0.9 - chalk: 4.1.2 - '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 20.14.10 - '@types/yargs': 17.0.24 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.16.5 + '@types/yargs': 17.0.33 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.3': - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/resolve-uri@3.1.1': {} - '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.1.2': {} - '@jridgewell/set-array@1.2.1': {} - '@jridgewell/source-map@0.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - '@jridgewell/source-map@0.3.6': dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.19': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@microsoft/tsdoc-config@0.16.2': dependencies: @@ -8412,12 +8061,12 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 '@npmcli/fs@1.1.1': dependencies: '@gar/promisify': 1.1.3 - semver: 7.6.2 + semver: 7.6.3 '@npmcli/move-file@1.1.2': dependencies: @@ -8429,7 +8078,9 @@ snapshots: '@pkgr/core@0.1.1': {} - '@sideway/address@4.1.4': + '@rtsao/scc@1.1.0': {} + + '@sideway/address@4.1.5': dependencies: '@hapi/hoek': 9.3.0 @@ -8439,99 +8090,84 @@ snapshots: '@sinclair/typebox@0.27.8': {} - '@sinonjs/commons@1.8.6': + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 - '@sinonjs/commons@2.0.0': + '@sinonjs/fake-timers@10.3.0': dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.0.2': - dependencies: - '@sinonjs/commons': 2.0.0 - - '@sinonjs/fake-timers@8.1.0': - dependencies: - '@sinonjs/commons': 1.8.6 + '@sinonjs/commons': 3.0.1 '@tootallnate/once@2.0.0': {} '@trysound/sax@0.2.0': {} - '@types/babel__core@7.20.0': - dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - '@types/babel__generator': 7.6.4 - '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.3 - - '@types/babel__generator@7.6.4': + '@types/babel__core@7.20.5': dependencies: - '@babel/types': 7.25.2 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 - '@types/babel__template@7.4.1': + '@types/babel__generator@7.6.8': dependencies: - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 - '@types/babel__traverse@7.18.3': + '@types/babel__template@7.4.4': dependencies: - '@babel/types': 7.25.2 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 - '@types/body-parser@1.19.2': + '@types/babel__traverse@7.20.6': dependencies: - '@types/connect': 3.4.35 - '@types/node': 20.14.10 + '@babel/types': 7.25.6 - '@types/connect@3.4.35': + '@types/body-parser@1.19.5': dependencies: - '@types/node': 20.14.10 + '@types/connect': 3.4.38 + '@types/node': 20.16.5 - '@types/eslint-scope@3.7.7': + '@types/connect@3.4.38': dependencies: - '@types/eslint': 8.56.10 - '@types/estree': 1.0.5 - - '@types/eslint@8.56.10': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 + '@types/node': 20.16.5 '@types/estree@1.0.5': {} - '@types/express-serve-static-core@4.17.33': + '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 20.14.10 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 + '@types/node': 20.16.5 + '@types/qs': 6.9.15 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 '@types/express@4.17.21': dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.33 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.1 + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.5 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.14.10 + '@types/node': 20.16.5 - '@types/graceful-fs@4.1.6': + '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.5 + + '@types/http-errors@2.0.4': {} - '@types/istanbul-lib-coverage@2.0.4': {} + '@types/istanbul-lib-coverage@2.0.6': {} - '@types/istanbul-lib-report@3.0.0': + '@types/istanbul-lib-report@3.0.3': dependencies: - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports@3.0.1': + '@types/istanbul-reports@3.0.4': dependencies: - '@types/istanbul-lib-report': 3.0.0 + '@types/istanbul-lib-report': 3.0.3 '@types/jest@29.5.12': dependencies: @@ -8540,111 +8176,105 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.14.10 - '@types/tough-cookie': 4.0.2 + '@types/node': 20.16.5 + '@types/tough-cookie': 4.0.5 parse5: 7.1.2 - '@types/json-schema@7.0.11': {} - - '@types/json-schema@7.0.12': {} - '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} - '@types/mime@3.0.1': {} + '@types/mime@1.3.5': {} '@types/minimatch@5.1.2': {} - '@types/node@20.14.10': + '@types/node@20.16.5': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 '@types/parse-json@4.0.2': {} - '@types/qs@6.9.7': {} + '@types/qs@6.9.15': {} - '@types/range-parser@1.2.4': {} + '@types/range-parser@1.2.7': {} - '@types/semver@7.5.8': {} + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.16.5 - '@types/serve-static@1.15.1': + '@types/serve-static@1.15.7': dependencies: - '@types/mime': 3.0.1 - '@types/node': 20.14.10 + '@types/http-errors': 2.0.4 + '@types/node': 20.16.5 + '@types/send': 0.17.4 - '@types/stack-utils@2.0.1': {} + '@types/stack-utils@2.0.3': {} - '@types/tough-cookie@4.0.2': {} + '@types/tough-cookie@4.0.5': {} - '@types/wait-on@5.3.1': + '@types/wait-on@5.3.4': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.5 '@types/webpack@5.28.5': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.5 tapable: 2.2.1 - webpack: 5.93.0 + webpack: 5.94.0 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack-cli - '@types/yargs-parser@21.0.0': {} - - '@types/yargs@16.0.9': - dependencies: - '@types/yargs-parser': 21.0.0 + '@types/yargs-parser@21.0.3': {} - '@types/yargs@17.0.24': + '@types/yargs@17.0.33': dependencies: - '@types/yargs-parser': 21.0.0 + '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/type-utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 - debug: 4.3.4 + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.7.0 - debug: 4.3.4 + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.7 eslint: 8.57.0 optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.7.0': + '@typescript-eslint/scope-manager@7.18.0': dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.7.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.7.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.4.5) + debug: 4.3.7 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -8652,40 +8282,37 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.7.0': {} + '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.7.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/visitor-keys': 7.7.0 - debug: 4.3.4 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.2 + minimatch: 9.0.5 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.7.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.7.0 - '@typescript-eslint/types': 7.7.0 - '@typescript-eslint/typescript-estree': 7.7.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) eslint: 8.57.0 - semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.7.0': + '@typescript-eslint/visitor-keys@7.18.0': dependencies: - '@typescript-eslint/types': 7.7.0 + '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -8766,20 +8393,20 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4))': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack@5.94.0))(webpack@5.94.0(webpack-cli@5.1.4))': dependencies: - webpack: 5.93.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.93.0) + webpack: 5.94.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.94.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4))': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack@5.94.0))(webpack@5.94.0(webpack-cli@5.1.4))': dependencies: - webpack: 5.93.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.93.0) + webpack: 5.94.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.94.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4))': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack@5.94.0))(webpack@5.94.0(webpack-cli@5.1.4))': dependencies: - webpack: 5.93.0(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.93.0) + webpack: 5.94.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.94.0) '@xtuc/ieee754@1.2.0': {} @@ -8794,28 +8421,26 @@ snapshots: acorn-globals@7.0.1: dependencies: - acorn: 8.11.3 - acorn-walk: 8.2.0 + acorn: 8.12.1 + acorn-walk: 8.3.3 acorn-import-attributes@1.9.5(acorn@8.12.1): dependencies: acorn: 8.12.1 - acorn-jsx@5.3.2(acorn@8.11.3): + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: - acorn: 8.11.3 - - acorn-walk@8.2.0: {} - - acorn@8.10.0: {} + acorn: 8.12.1 - acorn@8.11.3: {} + acorn-walk@8.3.3: + dependencies: + acorn: 8.12.1 acorn@8.12.1: {} agent-base@6.0.2: dependencies: - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -8824,17 +8449,17 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ajv-formats@2.1.1(ajv@8.16.0): + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.16.0 + ajv: 8.17.1 ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - ajv-keywords@5.1.0(ajv@8.16.0): + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: - ajv: 8.16.0 + ajv: 8.17.1 fast-deep-equal: 3.1.3 ajv@6.12.6: @@ -8844,12 +8469,12 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.16.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 ansi-escapes@4.3.2: dependencies: @@ -8892,54 +8517,57 @@ snapshots: argparse@2.0.1: {} - array-buffer-byte-length@1.0.0: + array-buffer-byte-length@1.0.1: dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 array-flatten@1.1.1: {} - array-includes@3.1.7: + array-includes@3.1.8: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 array-union@2.1.0: {} - array.prototype.findlastindex@1.2.3: + array.prototype.findlastindex@1.2.5: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 array.prototype.flat@1.3.2: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 array.prototype.flatmap@1.3.2: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 - arraybuffer.prototype.slice@1.0.2: + arraybuffer.prototype.slice@1.0.3: dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 async@2.6.4: dependencies: @@ -8951,45 +8579,43 @@ snapshots: at-least-node@1.0.0: {} - available-typed-arrays@1.0.5: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 - axios@1.6.5: + axios@1.7.7: dependencies: - follow-redirects: 1.15.5 + follow-redirects: 1.15.9 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - babel-jest@29.7.0(@babel/core@7.23.9): + babel-jest@29.7.0(@babel/core@7.25.2): dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.25.2 '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.0 + '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.9) + babel-preset-jest: 29.6.3(@babel/core@7.25.2) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-jest@29.7.0(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.0 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.4) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color + babel-loader@8.3.0(@babel/core@7.25.2)(webpack@5.94.0(webpack-cli@5.1.4)): + dependencies: + '@babel/core': 7.25.2 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.94.0(webpack-cli@5.1.4) babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.8 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -8999,78 +8625,59 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.25.2 - '@types/babel__core': 7.20.0 - '@types/babel__traverse': 7.18.3 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 - babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) - core-js-compat: 3.37.0 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.9): - dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - - babel-preset-jest@29.6.3(@babel/core@7.23.9): - dependencies: - '@babel/core': 7.23.9 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) - - babel-preset-jest@29.6.3(@babel/core@7.24.4): - dependencies: - '@babel/core': 7.24.4 + babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + + babel-preset-jest@29.6.3(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2) balanced-match@1.0.2: {} @@ -9113,30 +8720,16 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.2: + braces@3.0.3: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 - browserslist@4.22.3: + browserslist@4.23.3: dependencies: - caniuse-lite: 1.0.30001585 - electron-to-chromium: 1.4.661 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.3) - - browserslist@4.23.0: - dependencies: - caniuse-lite: 1.0.30001611 - electron-to-chromium: 1.4.744 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) - - browserslist@4.23.2: - dependencies: - caniuse-lite: 1.0.30001641 - electron-to-chromium: 1.4.825 - node-releases: 2.0.14 - update-browserslist-db: 1.1.0(browserslist@4.23.2) + caniuse-lite: 1.0.30001659 + electron-to-chromium: 1.5.18 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) bs-logger@0.2.6: dependencies: @@ -9148,8 +8741,6 @@ snapshots: buffer-from@1.1.2: {} - builtin-modules@3.3.0: {} - bytes@3.1.2: {} cacache@15.3.0: @@ -9182,11 +8773,6 @@ snapshots: package-hash: 4.0.0 write-file-atomic: 3.0.3 - call-bind@1.0.2: - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.0 - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -9205,16 +8791,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.23.2 - caniuse-lite: 1.0.30001641 + browserslist: 4.23.3 + caniuse-lite: 1.0.30001659 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001585: {} - - caniuse-lite@1.0.30001611: {} - - caniuse-lite@1.0.30001641: {} + caniuse-lite@1.0.30001659: {} chalk@2.4.2: dependencies: @@ -9237,7 +8819,7 @@ snapshots: chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -9251,13 +8833,13 @@ snapshots: chrome-trace-event@1.0.4: {} - ci-info@3.8.0: {} + ci-info@3.9.0: {} - circular-dependency-plugin@5.2.2(webpack@5.93.0(webpack-cli@5.1.4)): + circular-dependency-plugin@5.2.2(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: - webpack: 5.93.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@5.1.4) - cjs-module-lexer@1.2.2: {} + cjs-module-lexer@1.4.1: {} ckeditor5@42.0.2: dependencies: @@ -9353,7 +8935,7 @@ snapshots: co@4.6.0: {} - collect-v8-coverage@1.0.1: {} + collect-v8-coverage@1.0.2: {} color-convert@1.9.3: dependencies: @@ -9373,7 +8955,7 @@ snapshots: colord@2.9.3: {} - colorette@2.0.19: {} + colorette@2.0.20: {} colors@1.4.0: {} @@ -9387,10 +8969,10 @@ snapshots: commander@3.0.2: {} - commander@4.1.1: {} - commander@5.1.0: {} + commander@6.2.1: {} + commander@7.2.0: {} comment-parser@1.4.1: {} @@ -9413,9 +8995,21 @@ snapshots: cookie@0.6.0: {} - core-js-compat@3.37.0: + copyfiles@2.4.1: + dependencies: + glob: 7.2.3 + minimatch: 3.1.2 + mkdirp: 1.0.4 + noms: 0.0.0 + through2: 2.0.5 + untildify: 4.0.0 + yargs: 16.2.0 + + core-js-compat@3.38.1: dependencies: - browserslist: 4.23.0 + browserslist: 4.23.3 + + core-util-is@1.0.3: {} corser@2.0.1: {} @@ -9436,13 +9030,13 @@ snapshots: optionalDependencies: typescript: 5.4.5 - create-jest@29.7.0(@types/node@20.14.10): + create-jest@29.7.0(@types/node@20.16.5): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.14.10) + jest-config: 29.7.0(@types/node@20.16.5) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -9457,36 +9051,36 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-declaration-sorter@7.2.0(postcss@8.4.39): + css-declaration-sorter@7.2.0(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - css-loader@5.2.7(webpack@5.93.0(webpack-cli@5.1.4)): + css-loader@5.2.7(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) + icss-utils: 5.1.0(postcss@8.4.45) loader-utils: 2.0.4 - postcss: 8.4.39 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.39) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.39) - postcss-modules-scope: 3.2.0(postcss@8.4.39) - postcss-modules-values: 4.0.0(postcss@8.4.39) + postcss: 8.4.45 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.45) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.45) + postcss-modules-scope: 3.2.0(postcss@8.4.45) + postcss-modules-values: 4.0.0(postcss@8.4.45) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 - semver: 7.6.2 - webpack: 5.93.0(webpack-cli@5.1.4) + semver: 7.6.3 + webpack: 5.94.0(webpack-cli@5.1.4) - css-loader@7.1.2(webpack@5.93.0(webpack-cli@5.1.4)): + css-loader@7.1.2(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.39) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.39) - postcss-modules-scope: 3.2.0(postcss@8.4.39) - postcss-modules-values: 4.0.0(postcss@8.4.39) + icss-utils: 5.1.0(postcss@8.4.45) + postcss: 8.4.45 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.45) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.45) + postcss-modules-scope: 3.2.0(postcss@8.4.45) + postcss-modules-values: 4.0.0(postcss@8.4.45) postcss-value-parser: 4.2.0 - semver: 7.6.2 + semver: 7.6.3 optionalDependencies: - webpack: 5.93.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@5.1.4) css-select@5.1.0: dependencies: @@ -9499,60 +9093,60 @@ snapshots: css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-what@6.1.0: {} cssesc@3.0.0: {} - cssnano-preset-default@6.1.2(postcss@8.4.39): - dependencies: - browserslist: 4.23.2 - css-declaration-sorter: 7.2.0(postcss@8.4.39) - cssnano-utils: 4.0.2(postcss@8.4.39) - postcss: 8.4.39 - postcss-calc: 9.0.1(postcss@8.4.39) - postcss-colormin: 6.1.0(postcss@8.4.39) - postcss-convert-values: 6.1.0(postcss@8.4.39) - postcss-discard-comments: 6.0.2(postcss@8.4.39) - postcss-discard-duplicates: 6.0.3(postcss@8.4.39) - postcss-discard-empty: 6.0.3(postcss@8.4.39) - postcss-discard-overridden: 6.0.2(postcss@8.4.39) - postcss-merge-longhand: 6.0.5(postcss@8.4.39) - postcss-merge-rules: 6.1.1(postcss@8.4.39) - postcss-minify-font-values: 6.1.0(postcss@8.4.39) - postcss-minify-gradients: 6.0.3(postcss@8.4.39) - postcss-minify-params: 6.1.0(postcss@8.4.39) - postcss-minify-selectors: 6.0.4(postcss@8.4.39) - postcss-normalize-charset: 6.0.2(postcss@8.4.39) - postcss-normalize-display-values: 6.0.2(postcss@8.4.39) - postcss-normalize-positions: 6.0.2(postcss@8.4.39) - postcss-normalize-repeat-style: 6.0.2(postcss@8.4.39) - postcss-normalize-string: 6.0.2(postcss@8.4.39) - postcss-normalize-timing-functions: 6.0.2(postcss@8.4.39) - postcss-normalize-unicode: 6.1.0(postcss@8.4.39) - postcss-normalize-url: 6.0.2(postcss@8.4.39) - postcss-normalize-whitespace: 6.0.2(postcss@8.4.39) - postcss-ordered-values: 6.0.2(postcss@8.4.39) - postcss-reduce-initial: 6.1.0(postcss@8.4.39) - postcss-reduce-transforms: 6.0.2(postcss@8.4.39) - postcss-svgo: 6.0.3(postcss@8.4.39) - postcss-unique-selectors: 6.0.4(postcss@8.4.39) - - cssnano-utils@4.0.2(postcss@8.4.39): - dependencies: - postcss: 8.4.39 - - cssnano@6.1.2(postcss@8.4.39): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.4.39) + cssnano-preset-default@6.1.2(postcss@8.4.45): + dependencies: + browserslist: 4.23.3 + css-declaration-sorter: 7.2.0(postcss@8.4.45) + cssnano-utils: 4.0.2(postcss@8.4.45) + postcss: 8.4.45 + postcss-calc: 9.0.1(postcss@8.4.45) + postcss-colormin: 6.1.0(postcss@8.4.45) + postcss-convert-values: 6.1.0(postcss@8.4.45) + postcss-discard-comments: 6.0.2(postcss@8.4.45) + postcss-discard-duplicates: 6.0.3(postcss@8.4.45) + postcss-discard-empty: 6.0.3(postcss@8.4.45) + postcss-discard-overridden: 6.0.2(postcss@8.4.45) + postcss-merge-longhand: 6.0.5(postcss@8.4.45) + postcss-merge-rules: 6.1.1(postcss@8.4.45) + postcss-minify-font-values: 6.1.0(postcss@8.4.45) + postcss-minify-gradients: 6.0.3(postcss@8.4.45) + postcss-minify-params: 6.1.0(postcss@8.4.45) + postcss-minify-selectors: 6.0.4(postcss@8.4.45) + postcss-normalize-charset: 6.0.2(postcss@8.4.45) + postcss-normalize-display-values: 6.0.2(postcss@8.4.45) + postcss-normalize-positions: 6.0.2(postcss@8.4.45) + postcss-normalize-repeat-style: 6.0.2(postcss@8.4.45) + postcss-normalize-string: 6.0.2(postcss@8.4.45) + postcss-normalize-timing-functions: 6.0.2(postcss@8.4.45) + postcss-normalize-unicode: 6.1.0(postcss@8.4.45) + postcss-normalize-url: 6.0.2(postcss@8.4.45) + postcss-normalize-whitespace: 6.0.2(postcss@8.4.45) + postcss-ordered-values: 6.0.2(postcss@8.4.45) + postcss-reduce-initial: 6.1.0(postcss@8.4.45) + postcss-reduce-transforms: 6.0.2(postcss@8.4.45) + postcss-svgo: 6.0.3(postcss@8.4.45) + postcss-unique-selectors: 6.0.4(postcss@8.4.45) + + cssnano-utils@4.0.2(postcss@8.4.45): + dependencies: + postcss: 8.4.45 + + cssnano@6.1.2(postcss@8.4.45): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.4.45) lilconfig: 3.1.2 - postcss: 8.4.39 + postcss: 8.4.45 csso@5.0.5: dependencies: @@ -9577,6 +9171,24 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + debug@2.6.9: dependencies: ms: 2.0.0 @@ -9585,19 +9197,15 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - - debug@4.3.5: + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 decamelize@1.2.0: {} decimal.js@10.4.3: {} - dedent@1.5.1: {} + dedent@1.5.3: {} deep-is@0.1.4: {} @@ -9607,21 +9215,16 @@ snapshots: dependencies: strip-bom: 4.0.0 - define-data-property@1.1.0: - dependencies: - get-intrinsic: 1.2.1 - gopd: 1.0.1 - has-property-descriptors: 1.0.0 - define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - define-properties@1.2.0: + define-properties@1.2.1: dependencies: - has-property-descriptors: 1.0.0 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 del@5.1.0: @@ -9643,8 +9246,6 @@ snapshots: detect-newline@3.1.0: {} - diff-sequences@27.5.1: {} - diff-sequences@29.6.3: {} diff@3.5.0: {} @@ -9691,11 +9292,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.4.661: {} - - electron-to-chromium@1.4.744: {} - - electron-to-chromium@1.4.825: {} + electron-to-chromium@1.5.18: {} emittery@0.13.1: {} @@ -9707,69 +9304,69 @@ snapshots: encodeurl@1.0.2: {} - enhanced-resolve@5.16.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - enhanced-resolve@5.17.0: + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - entities@4.4.0: {} - entities@4.5.0: {} env-paths@2.2.1: {} - envinfo@7.8.1: {} + envinfo@7.13.0: {} error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - es-abstract@1.22.2: + es-abstract@1.23.3: dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.2 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.15 es-define-property@1.0.0: dependencies: @@ -9779,15 +9376,19 @@ snapshots: es-module-lexer@1.5.4: {} - es-set-tostringtag@2.0.1: + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - has-tostringtag: 1.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - es-shim-unscopables@1.0.0: + es-shim-unscopables@1.0.2: dependencies: - has: 1.0.3 + hasown: 2.0.2 es-to-primitive@1.2.1: dependencies: @@ -9797,20 +9398,20 @@ snapshots: es6-error@4.1.1: {} - esbuild-loader@3.0.1(webpack@5.93.0(webpack-cli@5.1.4)): + esbuild-loader@3.0.1(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: esbuild: 0.17.19 - get-tsconfig: 4.7.5 + get-tsconfig: 4.8.0 loader-utils: 2.0.4 - webpack: 5.93.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@5.1.4) webpack-sources: 1.4.3 - esbuild-loader@3.2.0(webpack@5.93.0(webpack-cli@5.1.4)): + esbuild-loader@3.2.0(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: - esbuild: 0.19.3 - get-tsconfig: 4.7.0 + esbuild: 0.19.12 + get-tsconfig: 4.8.0 loader-utils: 2.0.4 - webpack: 5.93.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@5.1.4) webpack-sources: 1.4.3 esbuild@0.17.19: @@ -9838,34 +9439,33 @@ snapshots: '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 - esbuild@0.19.3: + esbuild@0.19.12: optionalDependencies: - '@esbuild/android-arm': 0.19.3 - '@esbuild/android-arm64': 0.19.3 - '@esbuild/android-x64': 0.19.3 - '@esbuild/darwin-arm64': 0.19.3 - '@esbuild/darwin-x64': 0.19.3 - '@esbuild/freebsd-arm64': 0.19.3 - '@esbuild/freebsd-x64': 0.19.3 - '@esbuild/linux-arm': 0.19.3 - '@esbuild/linux-arm64': 0.19.3 - '@esbuild/linux-ia32': 0.19.3 - '@esbuild/linux-loong64': 0.19.3 - '@esbuild/linux-mips64el': 0.19.3 - '@esbuild/linux-ppc64': 0.19.3 - '@esbuild/linux-riscv64': 0.19.3 - '@esbuild/linux-s390x': 0.19.3 - '@esbuild/linux-x64': 0.19.3 - '@esbuild/netbsd-x64': 0.19.3 - '@esbuild/openbsd-x64': 0.19.3 - '@esbuild/sunos-x64': 0.19.3 - '@esbuild/win32-arm64': 0.19.3 - '@esbuild/win32-ia32': 0.19.3 - '@esbuild/win32-x64': 0.19.3 - - escalade@3.1.1: {} - - escalade@3.1.2: {} + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -9875,12 +9475,11 @@ snapshots: escape-string-regexp@4.0.0: {} - escodegen@2.0.0: + escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 - optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 @@ -9891,60 +9490,63 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.4 + is-core-module: 2.15.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.0 - is-core-module: 2.13.1 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.7.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@48.2.3(eslint@8.57.0): + eslint-plugin-jsdoc@48.11.0(eslint@8.57.0): dependencies: - '@es-joy/jsdoccomment': 0.42.0 + '@es-joy/jsdoccomment': 0.46.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.4 + debug: 4.3.7 escape-string-regexp: 4.0.0 eslint: 8.57.0 - esquery: 1.5.0 - is-builtin-module: 3.2.1 - semver: 7.6.2 + espree: 10.1.0 + esquery: 1.6.0 + parse-imports: 2.1.1 + semver: 7.6.3 spdx-expression-parse: 4.0.0 + synckit: 0.9.1 transitivePeerDependencies: - supports-color @@ -9952,14 +9554,13 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): dependencies: eslint: 8.57.0 - prettier: 3.3.2 + prettier: 3.3.3 prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 + synckit: 0.9.1 optionalDependencies: - '@types/eslint': 8.56.10 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-plugin-tsdoc@0.2.17: @@ -9967,12 +9568,12 @@ snapshots: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: eslint: 8.57.0 eslint-rule-composer: 0.3.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.7.0(@typescript-eslint/parser@7.7.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) eslint-rule-composer@0.3.0: {} @@ -9988,10 +9589,12 @@ snapshots: eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@4.0.0: {} + eslint@8.57.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -10001,13 +9604,13 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.7 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -10015,7 +9618,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -10025,21 +9628,27 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color + espree@10.1.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 + espree@9.6.1: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -10079,13 +9688,6 @@ snapshots: expect-playwright@0.8.0: {} - expect@27.5.1: - dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 @@ -10132,7 +9734,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-diff@1.2.0: {} + fast-diff@1.3.0: {} fast-glob@3.3.2: dependencies: @@ -10140,15 +9742,17 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} + fast-uri@3.0.1: {} + fastest-levenshtein@1.0.16: {} - fastq@1.15.0: + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -10164,7 +9768,7 @@ snapshots: dependencies: minimatch: 5.1.6 - fill-range@7.0.1: + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -10199,7 +9803,7 @@ snapshots: dependencies: chalk: 4.1.2 commander: 5.1.0 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -10219,11 +9823,11 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 - flatted@3.3.1: {} + flat@5.0.2: {} - follow-redirects@1.15.1: {} + flatted@3.3.1: {} - follow-redirects@1.15.5: {} + follow-redirects@1.15.9: {} for-each@0.3.3: dependencies: @@ -10234,7 +9838,7 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 3.0.7 - foreground-child@3.2.1: + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 @@ -10274,15 +9878,13 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.1: {} - function-bind@1.1.2: {} function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 functions-have-names: 1.2.3 functions-have-names@1.2.3: {} @@ -10291,19 +9893,6 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.0: - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - - get-intrinsic@1.2.1: - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-proto: 1.0.1 - has-symbols: 1.0.3 - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -10318,16 +9907,13 @@ snapshots: get-stream@6.0.1: {} - get-symbol-description@1.0.0: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - - get-tsconfig@4.7.0: + get-symbol-description@1.0.2: dependencies: - resolve-pkg-maps: 1.0.0 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 - get-tsconfig@4.7.5: + get-tsconfig@4.8.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -10343,7 +9929,7 @@ snapshots: glob@11.0.0: dependencies: - foreground-child: 3.2.1 + foreground-child: 3.3.0 jackspeak: 4.0.1 minimatch: 10.0.1 minipass: 7.1.2 @@ -10377,9 +9963,10 @@ snapshots: dependencies: type-fest: 0.20.2 - globalthis@1.0.3: + globalthis@1.0.4: dependencies: - define-properties: 1.2.0 + define-properties: 1.2.1 + gopd: 1.0.1 globby@10.0.2: dependencies: @@ -10388,7 +9975,7 @@ snapshots: dir-glob: 3.0.1 fast-glob: 3.3.2 glob: 7.2.3 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -10397,13 +9984,13 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 gopd@1.0.1: dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.4 graceful-fs@4.2.11: {} @@ -10415,37 +10002,23 @@ snapshots: has-flag@4.0.0: {} - has-property-descriptors@1.0.0: - dependencies: - get-intrinsic: 1.2.1 - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - has-proto@1.0.1: {} - has-proto@1.0.3: {} has-symbols@1.0.3: {} - has-tostringtag@1.0.0: + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - has@1.0.3: - dependencies: - function-bind: 1.1.1 - hasha@5.2.2: dependencies: is-stream: 2.0.1 type-fest: 0.8.1 - hasown@2.0.0: - dependencies: - function-bind: 1.1.2 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -10474,14 +10047,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.1 + follow-redirects: 1.15.9 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -10508,7 +10081,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -10522,18 +10095,18 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.39): + icss-utils@5.1.0(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - ignore@5.3.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - import-local@3.1.0: + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -10553,11 +10126,11 @@ snapshots: ini@1.3.8: {} - internal-slot@1.0.5: + internal-slot@1.0.7: dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 interpret@1.4.0: {} @@ -10565,11 +10138,10 @@ snapshots: ipaddr.js@1.9.1: {} - is-array-buffer@3.0.2: + is-array-buffer@3.0.4: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-arrayish@0.2.1: {} @@ -10584,30 +10156,22 @@ snapshots: is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 is-callable@1.2.7: {} - is-core-module@2.11.0: - dependencies: - has: 1.0.3 - - is-core-module@2.13.0: + is-core-module@2.15.1: dependencies: - has: 1.0.3 + hasown: 2.0.2 - is-core-module@2.13.1: + is-data-view@1.0.1: dependencies: - hasown: 2.0.0 + is-typed-array: 1.1.13 is-date-object@1.0.5: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-extglob@2.1.1: {} @@ -10621,11 +10185,11 @@ snapshots: is-interactive@1.0.0: {} - is-negative-zero@2.0.2: {} + is-negative-zero@2.0.3: {} is-number-object@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -10641,44 +10205,48 @@ snapshots: is-regex@1.1.4: dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - is-shared-array-buffer@1.0.2: + is-shared-array-buffer@1.0.3: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 is-stream@2.0.1: {} is-string@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - is-typed-array@1.1.12: + is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.11 + which-typed-array: 1.1.15 is-typedarray@1.0.0: {} is-weakref@1.0.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 is-windows@0.2.0: {} is-windows@1.0.2: {} + isarray@0.0.1: {} + + isarray@1.0.0: {} + isarray@2.0.5: {} isexe@2.0.0: {} isobject@3.0.1: {} - istanbul-lib-coverage@3.2.0: {} + istanbul-lib-coverage@3.2.2: {} istanbul-lib-hook@3.0.0: dependencies: @@ -10686,30 +10254,30 @@ snapshots: istanbul-lib-instrument@4.0.3: dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.2 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.25.3 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color - istanbul-lib-instrument@6.0.0: + istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.25.3 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 7.6.2 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -10717,29 +10285,29 @@ snapshots: dependencies: archy: 1.0.0 cross-spawn: 7.0.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 p-map: 3.0.0 rimraf: 3.0.2 uuid: 8.3.2 - istanbul-lib-report@3.0.0: + istanbul-lib-report@3.0.1: dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 supports-color: 7.2.0 istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.5 - istanbul-lib-coverage: 3.2.0 + debug: 4.3.7 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - istanbul-reports@3.1.5: + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 jackspeak@4.0.1: dependencies: @@ -10768,10 +10336,10 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.1 + dedent: 1.5.3 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -10781,40 +10349,40 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.1 + pure-rand: 6.1.0 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.14.10): + jest-cli@29.7.0(@types/node@20.16.5): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.14.10) + create-jest: 29.7.0(@types/node@20.16.5) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.14.10) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.16.5) jest-util: 29.7.0 jest-validate: 29.7.0 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest-config@29.7.0(@types/node@20.14.10): + jest-config@29.7.0(@types/node@20.16.5): dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.23.9) + babel-jest: 29.7.0(@babel/core@7.25.2) chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 @@ -10826,24 +10394,17 @@ snapshots: jest-runner: 29.7.0 jest-util: 29.7.0 jest-validate: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 parse-json: 5.2.0 pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.5 transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-diff@27.5.1: - dependencies: - chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -10869,7 +10430,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.14.10 + '@types/node': 20.16.5 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -10883,26 +10444,24 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-get-type@27.5.1: {} - jest-get-type@29.6.3: {} jest-haste-map@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.6 - '@types/node': 20.14.10 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.16.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 @@ -10912,13 +10471,6 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-matcher-utils@27.5.1: - dependencies: - chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - jest-matcher-utils@29.7.0: dependencies: chalk: 4.1.2 @@ -10926,51 +10478,34 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-message-util@27.5.1: - dependencies: - '@babel/code-frame': 7.24.7 - '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.7 '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.1 + '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 - jest-mock@27.5.1: - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.14.10 - jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 jest-util: 29.7.0 - jest-playwright-preset@4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.14.10)): + jest-playwright-preset@4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@20.16.5)): dependencies: expect-playwright: 0.8.0 - jest: 29.7.0(@types/node@20.14.10) + jest: 29.7.0(@types/node@20.16.5) jest-circus: 29.7.0 jest-environment-node: 29.7.0 jest-process-manager: 0.4.0 jest-runner: 29.7.0 nyc: 15.1.0 - playwright-core: 1.45.1 + playwright-core: 1.47.0 rimraf: 3.0.2 uuid: 8.3.2 transitivePeerDependencies: @@ -10983,7 +10518,7 @@ snapshots: jest-process-manager@0.4.0: dependencies: - '@types/wait-on': 5.3.1 + '@types/wait-on': 5.3.4 chalk: 4.1.2 cwd: 0.10.0 exit: 0.1.2 @@ -11014,7 +10549,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.4 + resolve: 1.22.8 resolve.exports: 2.0.2 slash: 3.0.0 @@ -11025,7 +10560,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -11053,10 +10588,10 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 chalk: 4.1.2 - cjs-module-lexer: 1.2.2 - collect-v8-coverage: 1.0.1 + cjs-module-lexer: 1.4.1 + collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 jest-haste-map: 29.7.0 @@ -11073,15 +10608,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.24.4 - '@babel/generator': 7.25.0 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.24.4) - '@babel/types': 7.25.2 + '@babel/core': 7.25.2 + '@babel/generator': 7.25.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + '@babel/types': 7.25.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -11092,27 +10627,18 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color jest-transform-stub@2.0.0: {} - jest-util@27.5.1: - dependencies: - '@jest/types': 27.5.1 - '@types/node': 20.14.10 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 @@ -11129,7 +10655,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.16.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -11138,19 +10664,19 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.5 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.5 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.14.10 + '@types/node': 20.16.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -11161,27 +10687,27 @@ snapshots: diff: 3.5.0 pretty-data: 0.40.0 - jest@29.7.0(@types/node@20.14.10): + jest@29.7.0(@types/node@20.16.5): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.14.10) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.16.5) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jiti@1.21.0: {} + jiti@1.21.6: {} jju@1.4.0: {} - joi@17.12.0: + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.4 + '@sideway/address': 4.1.5 '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 @@ -11201,30 +10727,30 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.12.1 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 decimal.js: 10.4.3 domexception: 4.0.0 - escodegen: 2.0.0 + escodegen: 2.1.0 form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 + nwsapi: 2.2.12 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 + tough-cookie: 4.1.4 w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.13.0 + ws: 8.18.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -11251,7 +10777,7 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.2.1: {} + jsonc-parser@3.3.1: {} jsonfile@6.1.0: dependencies: @@ -11271,11 +10797,6 @@ snapshots: leven@3.1.0: {} - levn@0.3.0: - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -11287,12 +10808,6 @@ snapshots: loader-runner@4.3.0: {} - loader-utils@2.0.2: - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - loader-utils@2.0.4: dependencies: big.js: 5.2.2 @@ -11321,7 +10836,7 @@ snapshots: lodash@4.17.21: {} - lru-cache@11.0.0: {} + lru-cache@11.0.1: {} lru-cache@5.1.1: dependencies: @@ -11342,6 +10857,10 @@ snapshots: dependencies: semver: 6.3.1 + make-dir@4.0.0: + dependencies: + semver: 7.6.3 + make-error@1.3.6: {} makeerror@1.0.12: @@ -11366,9 +10885,9 @@ snapshots: methods@1.1.2: {} - micromatch@4.0.5: + micromatch@4.0.8: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 mime-db@1.52.0: {} @@ -11381,11 +10900,11 @@ snapshots: mimic-fn@2.1.0: {} - mini-css-extract-plugin@2.9.0(webpack@5.93.0(webpack-cli@5.1.4)): + mini-css-extract-plugin@2.9.1(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.93.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@5.1.4) minimatch@10.0.1: dependencies: @@ -11399,7 +10918,7 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -11438,8 +10957,6 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} nanoid@3.3.7: {} @@ -11458,7 +10975,12 @@ snapshots: dependencies: process-on-spawn: 1.0.0 - node-releases@2.0.14: {} + node-releases@2.0.18: {} + + noms@0.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 1.0.34 normalize-path@3.0.0: {} @@ -11470,7 +10992,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.2: {} + nwsapi@2.2.12: {} nyc@15.1.0: dependencies: @@ -11484,13 +11006,13 @@ snapshots: foreground-child: 2.0.0 get-package-type: 0.1.0 glob: 7.2.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 istanbul-lib-hook: 3.0.0 istanbul-lib-instrument: 4.0.3 istanbul-lib-processinfo: 2.0.3 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 + istanbul-reports: 3.1.7 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -11504,37 +11026,35 @@ snapshots: transitivePeerDependencies: - supports-color - object-inspect@1.12.3: {} - - object-inspect@1.13.1: {} + object-inspect@1.13.2: {} object-keys@1.1.1: {} - object.assign@4.1.4: + object.assign@4.1.5: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 + call-bind: 1.0.7 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - object.fromentries@2.0.7: + object.fromentries@2.0.8: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - object.groupby@1.0.1: + object.groupby@1.0.3: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 - object.values@1.1.7: + object.values@1.2.0: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 on-finished@2.4.1: dependencies: @@ -11550,23 +11070,14 @@ snapshots: opener@1.5.2: {} - optionator@0.8.3: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.3 - - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 os-homedir@1.0.2: {} @@ -11609,9 +11120,14 @@ snapshots: dependencies: callsites: 3.1.0 + parse-imports@2.1.1: + dependencies: + es-module-lexer: 1.5.4 + slashes: 3.0.12 + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -11620,7 +11136,7 @@ snapshots: parse5@7.1.2: dependencies: - entities: 4.4.0 + entities: 4.5.0 parseurl@1.3.3: {} @@ -11640,16 +11156,14 @@ snapshots: path-scurry@2.0.0: dependencies: - lru-cache: 11.0.0 + lru-cache: 11.0.1 minipass: 7.1.2 path-to-regexp@0.1.7: {} path-type@4.0.0: {} - picocolors@1.0.0: {} - - picocolors@1.0.1: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} @@ -11657,17 +11171,17 @@ snapshots: pify@4.0.1: {} - pirates@4.0.5: {} + pirates@4.0.6: {} pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - playwright-core@1.45.1: {} + playwright-core@1.47.0: {} - playwright@1.45.1: + playwright@1.47.0: dependencies: - playwright-core: 1.45.1 + playwright-core: 1.47.0 optionalDependencies: fsevents: 2.3.2 @@ -11681,261 +11195,257 @@ snapshots: transitivePeerDependencies: - supports-color - postcss-calc@9.0.1(postcss@8.4.39): + possible-typed-array-names@1.0.0: {} + + postcss-calc@9.0.1(postcss@8.4.45): dependencies: - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + postcss: 8.4.45 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.4.39): + postcss-colormin@6.1.0(postcss@8.4.45): dependencies: - browserslist: 4.23.2 + browserslist: 4.23.3 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.4.39): + postcss-convert-values@6.1.0(postcss@8.4.45): dependencies: - browserslist: 4.23.2 - postcss: 8.4.39 + browserslist: 4.23.3 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-discard-comments@6.0.2(postcss@8.4.39): + postcss-discard-comments@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - postcss-discard-duplicates@6.0.3(postcss@8.4.39): + postcss-discard-duplicates@6.0.3(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - postcss-discard-empty@6.0.3(postcss@8.4.39): + postcss-discard-empty@6.0.3(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - postcss-discard-overridden@6.0.2(postcss@8.4.39): + postcss-discard-overridden@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - postcss-import@14.1.0(postcss@8.4.39): + postcss-import@14.1.0(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.39): + postcss-js@4.0.1(postcss@8.4.45): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.39 + postcss: 8.4.45 - postcss-loader@4.3.0(postcss@8.4.39)(webpack@5.93.0(webpack-cli@5.1.4)): + postcss-loader@4.3.0(postcss@8.4.45)(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 loader-utils: 2.0.4 - postcss: 8.4.39 + postcss: 8.4.45 schema-utils: 3.3.0 - semver: 7.6.2 - webpack: 5.93.0(webpack-cli@5.1.4) + semver: 7.6.3 + webpack: 5.94.0(webpack-cli@5.1.4) - postcss-loader@8.1.1(postcss@8.4.39)(typescript@5.4.5)(webpack@5.93.0(webpack-cli@5.1.4)): + postcss-loader@8.1.1(postcss@8.4.45)(typescript@5.4.5)(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: cosmiconfig: 9.0.0(typescript@5.4.5) - jiti: 1.21.0 - postcss: 8.4.39 - semver: 7.6.0 + jiti: 1.21.6 + postcss: 8.4.45 + semver: 7.6.3 optionalDependencies: - webpack: 5.93.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@5.1.4) transitivePeerDependencies: - typescript - postcss-merge-longhand@6.0.5(postcss@8.4.39): + postcss-merge-longhand@6.0.5(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.4.39) + stylehacks: 6.1.1(postcss@8.4.45) - postcss-merge-rules@6.1.1(postcss@8.4.39): + postcss-merge-rules@6.1.1(postcss@8.4.45): dependencies: - browserslist: 4.23.2 + browserslist: 4.23.3 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.4.39) - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + cssnano-utils: 4.0.2(postcss@8.4.45) + postcss: 8.4.45 + postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.4.39): + postcss-minify-font-values@6.1.0(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.4.39): + postcss-minify-gradients@6.0.3(postcss@8.4.45): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 4.0.2(postcss@8.4.45) + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.4.39): + postcss-minify-params@6.1.0(postcss@8.4.45): dependencies: - browserslist: 4.23.2 - cssnano-utils: 4.0.2(postcss@8.4.39) - postcss: 8.4.39 + browserslist: 4.23.3 + cssnano-utils: 4.0.2(postcss@8.4.45) + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.4.39): + postcss-minify-selectors@6.0.4(postcss@8.4.45): dependencies: - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + postcss: 8.4.45 + postcss-selector-parser: 6.1.2 - postcss-mixins@9.0.4(postcss@8.4.39): + postcss-mixins@9.0.4(postcss@8.4.45): dependencies: fast-glob: 3.3.2 - postcss: 8.4.39 - postcss-js: 4.0.1(postcss@8.4.39) - postcss-simple-vars: 7.0.1(postcss@8.4.39) - sugarss: 4.0.1(postcss@8.4.39) + postcss: 8.4.45 + postcss-js: 4.0.1(postcss@8.4.45) + postcss-simple-vars: 7.0.1(postcss@8.4.45) + sugarss: 4.0.1(postcss@8.4.45) - postcss-modules-extract-imports@3.1.0(postcss@8.4.39): + postcss-modules-extract-imports@3.1.0(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - postcss-modules-local-by-default@4.0.5(postcss@8.4.39): + postcss-modules-local-by-default@4.0.5(postcss@8.4.45): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + icss-utils: 5.1.0(postcss@8.4.45) + postcss: 8.4.45 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.0(postcss@8.4.39): + postcss-modules-scope@3.2.0(postcss@8.4.45): dependencies: - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + postcss: 8.4.45 + postcss-selector-parser: 6.1.2 - postcss-modules-values@4.0.0(postcss@8.4.39): + postcss-modules-values@4.0.0(postcss@8.4.45): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 + icss-utils: 5.1.0(postcss@8.4.45) + postcss: 8.4.45 - postcss-nesting@10.2.0(postcss@8.4.39): + postcss-nesting@10.2.0(postcss@8.4.45): dependencies: - '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.1) - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2) + postcss: 8.4.45 + postcss-selector-parser: 6.1.2 - postcss-normalize-charset@6.0.2(postcss@8.4.39): + postcss-normalize-charset@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - postcss-normalize-display-values@6.0.2(postcss@8.4.39): + postcss-normalize-display-values@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.4.39): + postcss-normalize-positions@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.4.39): + postcss-normalize-repeat-style@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.4.39): + postcss-normalize-string@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.4.39): + postcss-normalize-timing-functions@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.4.39): + postcss-normalize-unicode@6.1.0(postcss@8.4.45): dependencies: - browserslist: 4.23.2 - postcss: 8.4.39 + browserslist: 4.23.3 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.4.39): + postcss-normalize-url@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.4.39): + postcss-normalize-whitespace@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-ordered-values@6.0.2(postcss@8.4.39): + postcss-ordered-values@6.0.2(postcss@8.4.45): dependencies: - cssnano-utils: 4.0.2(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 4.0.2(postcss@8.4.45) + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-reduce-initial@6.1.0(postcss@8.4.39): + postcss-reduce-initial@6.1.0(postcss@8.4.45): dependencies: - browserslist: 4.23.2 + browserslist: 4.23.3 caniuse-api: 3.0.0 - postcss: 8.4.39 + postcss: 8.4.45 - postcss-reduce-transforms@6.0.2(postcss@8.4.39): + postcss-reduce-transforms@6.0.2(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 - postcss-selector-parser@6.1.1: + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-simple-vars@7.0.1(postcss@8.4.39): + postcss-simple-vars@7.0.1(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 - postcss-svgo@6.0.3(postcss@8.4.39): + postcss-svgo@6.0.3(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@6.0.4(postcss@8.4.39): + postcss-unique-selectors@6.0.4(postcss@8.4.45): dependencies: - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + postcss: 8.4.45 + postcss-selector-parser: 6.1.2 postcss-value-parser@4.2.0: {} - postcss@8.4.39: + postcss@8.4.45: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - - prelude-ls@1.1.2: {} + picocolors: 1.1.0 + source-map-js: 1.2.1 prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: dependencies: - fast-diff: 1.2.0 + fast-diff: 1.3.0 - prettier@3.3.2: {} + prettier@3.3.3: {} pretty-data@0.40.0: {} - pretty-format@27.5.1: - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 + + process-nextick-args@2.0.1: {} process-on-spawn@1.0.0: dependencies: @@ -11957,15 +11467,15 @@ snapshots: psl@1.9.0: {} - punycode@2.3.0: {} + punycode@2.3.1: {} - pure-rand@6.0.1: {} + pure-rand@6.1.0: {} - qs@6.10.3: + qs@6.11.0: dependencies: - side-channel: 1.0.4 + side-channel: 1.0.6 - qs@6.11.0: + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -11986,20 +11496,35 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@5.93.0(webpack-cli@5.1.4)): + raw-loader@4.0.2(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: - loader-utils: 2.0.2 - schema-utils: 3.1.1 - webpack: 5.93.0(webpack-cli@5.1.4) - - react-is@17.0.2: {} + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.94.0(webpack-cli@5.1.4) - react-is@18.2.0: {} + react-is@18.3.1: {} read-cache@1.0.0: dependencies: pify: 2.3.0 + readable-stream@1.0.34: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -12017,7 +11542,7 @@ snapshots: rechoir@0.8.0: dependencies: - resolve: 1.22.4 + resolve: 1.22.8 regenerate-unicode-properties@10.1.1: dependencies: @@ -12029,13 +11554,14 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.25.6 - regexp.prototype.flags@1.5.1: + regexp.prototype.flags@1.5.2: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - set-function-name: 2.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 regexpu-core@5.3.2: dependencies: @@ -12085,18 +11611,12 @@ snapshots: resolve@1.19.0: dependencies: - is-core-module: 2.11.0 + is-core-module: 2.15.1 path-parse: 1.0.7 - resolve@1.22.4: - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -12122,12 +11642,12 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.6.3 + tslib: 2.7.0 - safe-array-concat@1.0.1: + safe-array-concat@1.1.2: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 @@ -12135,10 +11655,10 @@ snapshots: safe-buffer@5.2.1: {} - safe-regex-test@1.0.0: + safe-regex-test@1.0.3: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 safer-buffer@2.1.2: {} @@ -12147,24 +11667,24 @@ snapshots: dependencies: xmlchars: 2.2.0 - schema-utils@3.1.1: + schema-utils@2.7.1: dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) schema-utils@3.3.0: dependencies: - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) schema-utils@4.2.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.16.0 - ajv-formats: 2.1.1(ajv@8.16.0) - ajv-keywords: 5.1.0(ajv@8.16.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) secure-compare@3.0.1: {} @@ -12172,15 +11692,7 @@ snapshots: semver@6.3.1: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - - semver@7.6.2: {} + semver@7.6.3: {} send@0.18.0: dependencies: @@ -12204,7 +11716,7 @@ snapshots: dependencies: randombytes: 2.1.0 - serialize-javascript@6.0.1: + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -12228,11 +11740,12 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 - set-function-name@2.0.1: + set-function-name@2.0.2: dependencies: - define-data-property: 1.1.0 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.2 setprototypeof@1.2.0: {} @@ -12255,22 +11768,16 @@ snapshots: shiki@0.14.7: dependencies: ansi-sequence-parser: 1.1.1 - jsonc-parser: 3.2.1 + jsonc-parser: 3.3.1 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - side-channel@1.0.4: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - object-inspect: 1.12.3 - side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 signal-exit@3.0.7: {} @@ -12282,9 +11789,11 @@ snapshots: slash@3.0.0: {} + slashes@3.0.12: {} + source-list-map@2.0.1: {} - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} source-map-support@0.5.13: dependencies: @@ -12321,9 +11830,9 @@ snapshots: spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.20 - spdx-license-ids@3.0.17: {} + spdx-license-ids@3.0.20: {} sprintf-js@1.0.3: {} @@ -12354,23 +11863,30 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.trim@1.2.8: + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 - string.prototype.trimend@1.0.7: + string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string_decoder@0.10.31: {} - string.prototype.trimstart@1.0.7: + string_decoder@1.1.1: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.2 + safe-buffer: 5.1.2 string_decoder@1.3.0: dependencies: @@ -12392,25 +11908,25 @@ snapshots: strip-json-comments@3.1.1: {} - style-loader@2.0.0(webpack@5.93.0(webpack-cli@5.1.4)): + style-loader@2.0.0(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.93.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@5.1.4) - style-loader@4.0.0(webpack@5.93.0(webpack-cli@5.1.4)): + style-loader@4.0.0(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: - webpack: 5.93.0(webpack-cli@5.1.4) + webpack: 5.94.0(webpack-cli@5.1.4) - stylehacks@6.1.1(postcss@8.4.39): + stylehacks@6.1.1(postcss@8.4.45): dependencies: - browserslist: 4.23.2 - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + browserslist: 4.23.3 + postcss: 8.4.45 + postcss-selector-parser: 6.1.2 - sugarss@4.0.1(postcss@8.4.39): + sugarss@4.0.1(postcss@8.4.45): dependencies: - postcss: 8.4.39 + postcss: 8.4.45 supports-color@5.5.0: dependencies: @@ -12434,14 +11950,14 @@ snapshots: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.1 + picocolors: 1.1.0 symbol-tree@3.2.4: {} - synckit@0.8.8: + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.3 + tslib: 2.7.0 tapable@2.2.1: {} @@ -12454,7 +11970,7 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - terser-webpack-plugin@4.2.3(webpack@5.93.0(webpack-cli@5.1.4)): + terser-webpack-plugin@4.2.3(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: cacache: 15.3.0 find-cache-dir: 3.3.2 @@ -12463,38 +11979,31 @@ snapshots: schema-utils: 3.3.0 serialize-javascript: 5.0.1 source-map: 0.6.1 - terser: 5.31.2 - webpack: 5.93.0(webpack-cli@5.1.4) + terser: 5.31.6 + webpack: 5.94.0(webpack-cli@5.1.4) webpack-sources: 1.4.3 transitivePeerDependencies: - bluebird - terser-webpack-plugin@5.3.10(webpack@5.93.0(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.10(webpack@5.94.0(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.27.0 - webpack: 5.93.0(webpack-cli@5.1.4) + serialize-javascript: 6.0.2 + terser: 5.31.6 + webpack: 5.94.0(webpack-cli@5.1.4) - terser-webpack-plugin@5.3.10(webpack@5.93.0): + terser-webpack-plugin@5.3.10(webpack@5.94.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 - serialize-javascript: 6.0.1 - terser: 5.27.0 - webpack: 5.93.0 - - terser@5.27.0: - dependencies: - '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 - commander: 2.20.3 - source-map-support: 0.5.21 + serialize-javascript: 6.0.2 + terser: 5.31.6 + webpack: 5.94.0 - terser@5.31.2: + terser@5.31.6: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.12.1 @@ -12509,6 +12018,11 @@ snapshots: text-table@0.2.0: {} + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + through2@3.0.2: dependencies: inherits: 2.0.4 @@ -12524,16 +12038,16 @@ snapshots: toidentifier@1.0.1: {} - tough-cookie@4.1.2: + tough-cookie@4.1.4: dependencies: psl: 1.9.0 - punycode: 2.3.0 + punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 tr46@3.0.0: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 tree-kill@1.2.2: {} @@ -12541,41 +12055,43 @@ snapshots: dependencies: typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0)(typescript@5.5.3): + ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0)(typescript@5.4.5): dependencies: bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.10) + jest: 29.7.0(@types/node@20.16.5) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 - typescript: 5.5.3 + semver: 7.6.3 + typescript: 5.4.5 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.2 + '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.4) + babel-jest: 29.7.0(@babel/core@7.25.2) - ts-jest@29.2.4(@babel/core@7.24.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.4))(jest@29.7.0)(typescript@5.4.5): + ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0)(typescript@5.5.4): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.10) + jest: 29.7.0(@types/node@20.16.5) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.2 - typescript: 5.4.5 + semver: 7.6.3 + typescript: 5.5.4 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.25.2 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.4) + babel-jest: 29.7.0(@babel/core@7.25.2) tsconfig-paths@3.15.0: dependencies: @@ -12584,7 +12100,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.6.3: {} + tslib@2.7.0: {} turndown-plugin-gfm@1.0.2: {} @@ -12592,10 +12108,6 @@ snapshots: dependencies: '@mixmark-io/domino': 2.2.0 - type-check@0.3.2: - dependencies: - prelude-ls: 1.1.2 - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -12613,32 +12125,37 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typed-array-buffer@1.0.0: + typed-array-buffer@1.0.2: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 - typed-array-byte-length@1.0.0: + typed-array-byte-length@1.0.1: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.0: + typed-array-byte-offset@1.0.2: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - typed-array-length@1.0.4: + typed-array-length@1.0.6: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 typedarray-to-buffer@3.1.5: dependencies: @@ -12648,22 +12165,22 @@ snapshots: dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.4 + minimatch: 9.0.5 shiki: 0.14.7 typescript: 5.4.5 typescript@5.4.5: {} - typescript@5.5.3: {} + typescript@5.5.4: {} unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undici-types@5.26.5: {} + undici-types@6.19.8: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -12678,7 +12195,7 @@ snapshots: union@0.5.0: dependencies: - qs: 6.10.3 + qs: 6.13.0 unique-filename@1.1.1: dependencies: @@ -12694,27 +12211,17 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.0.13(browserslist@4.22.3): - dependencies: - browserslist: 4.22.3 - escalade: 3.1.1 - picocolors: 1.0.0 - - update-browserslist-db@1.0.13(browserslist@4.23.0): - dependencies: - browserslist: 4.23.0 - escalade: 3.1.1 - picocolors: 1.0.0 + untildify@4.0.0: {} - update-browserslist-db@1.1.0(browserslist@4.23.2): + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 uri-js@4.4.1: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 url-join@4.0.1: {} @@ -12729,16 +12236,16 @@ snapshots: uuid@8.3.2: {} - v8-to-istanbul@9.1.0: + v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 validate-peer-dependencies@2.2.0: dependencies: resolve-package-path: 4.0.3 - semver: 7.6.2 + semver: 7.6.3 vanilla-colorful@0.7.2: {} @@ -12756,8 +12263,8 @@ snapshots: wait-on@7.2.0: dependencies: - axios: 1.6.5 - joi: 17.12.0 + axios: 1.7.7 + joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 rxjs: 7.8.1 @@ -12768,7 +12275,7 @@ snapshots: dependencies: chalk: 2.4.2 commander: 3.0.2 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -12776,34 +12283,35 @@ snapshots: dependencies: makeerror: 1.0.12 - watchpack@2.4.1: + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 webidl-conversions@7.0.0: {} - webpack-cli@5.1.4(webpack@5.93.0): + webpack-cli@5.1.4(webpack@5.94.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4)) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4)) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack@5.93.0))(webpack@5.93.0(webpack-cli@5.1.4)) - colorette: 2.0.19 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack@5.94.0))(webpack@5.94.0(webpack-cli@5.1.4)) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack@5.94.0))(webpack@5.94.0(webpack-cli@5.1.4)) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack@5.94.0))(webpack@5.94.0(webpack-cli@5.1.4)) + colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 - envinfo: 7.8.1 + envinfo: 7.13.0 fastest-levenshtein: 1.0.16 - import-local: 3.1.0 + import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.93.0(webpack-cli@5.1.4) - webpack-merge: 5.8.0 + webpack: 5.94.0(webpack-cli@5.1.4) + webpack-merge: 5.10.0 - webpack-merge@5.8.0: + webpack-merge@5.10.0: dependencies: clone-deep: 4.0.1 - wildcard: 2.0.0 + flat: 5.0.2 + wildcard: 2.0.1 webpack-sources@1.4.3: dependencies: @@ -12817,18 +12325,17 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.93.0: + webpack@5.94.0: dependencies: - '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.12.1 acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.23.2 + browserslist: 4.23.3 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 @@ -12840,26 +12347,25 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.93.0) - watchpack: 2.4.1 + terser-webpack-plugin: 5.3.10(webpack@5.94.0) + watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack@5.93.0(webpack-cli@5.1.4): + webpack@5.94.0(webpack-cli@5.1.4): dependencies: - '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.12.1 acorn-import-attributes: 1.9.5(acorn@8.12.1) - browserslist: 4.23.2 + browserslist: 4.23.3 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 @@ -12871,11 +12377,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.93.0(webpack-cli@5.1.4)) - watchpack: 2.4.1 + terser-webpack-plugin: 5.3.10(webpack@5.94.0(webpack-cli@5.1.4)) + watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.93.0) + webpack-cli: 5.1.4(webpack@5.94.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -12900,15 +12406,15 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-module@2.0.0: {} + which-module@2.0.1: {} - which-typed-array@1.1.11: + which-typed-array@1.1.15: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 which@1.3.1: dependencies: @@ -12918,9 +12424,9 @@ snapshots: dependencies: isexe: 2.0.0 - wildcard@2.0.0: {} + wildcard@2.0.1: {} - word-wrap@1.2.3: {} + word-wrap@1.2.5: {} wrap-ansi@6.2.0: dependencies: @@ -12954,18 +12460,20 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@8.13.0: {} + ws@8.18.0: {} - xml-formatter@3.6.2: + xml-formatter@3.6.3: dependencies: - xml-parser-xo: 4.1.1 + xml-parser-xo: 4.1.2 xml-name-validator@4.0.0: {} - xml-parser-xo@4.1.1: {} + xml-parser-xo@4.1.2: {} xmlchars@2.2.0: {} + xtend@4.0.2: {} + y18n@4.0.3: {} y18n@5.0.8: {} @@ -12995,24 +12503,24 @@ snapshots: require-main-filename: 2.0.0 set-blocking: 2.0.0 string-width: 4.2.3 - which-module: 2.0.0 + which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - yargs@17.7.1: + yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/tsconfig.json b/tsconfig.json index ad767a34e..be7b01b40 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,7 @@ "alwaysStrict": true, "composite": true, "declaration": true, + "emitDeclarationOnly": false, "declarationMap": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, @@ -11,6 +12,7 @@ "DOM", "DOM.Iterable", "ES5", + "es6", "ESNext" ], "module": "es2022", From a901be433360dfecbaa2f6c45f1695e8ee029695 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Thu, 24 Oct 2024 08:45:56 +0200 Subject: [PATCH 07/43] patch ckeditor5 version 42.0.2 + fix build outputDir + revert shared-jest-config --- package.json | 5 + packages/ckeditor5-bbcode/tsconfig.json | 2 +- packages/ckeditor5-common/tsconfig.json | 2 +- packages/ckeditor5-core-common/tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../ckeditor5-coremedia-content/tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../ckeditor5-coremedia-images/tsconfig.json | 2 +- .../ckeditor5-coremedia-link/tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../__tests__/toDelete1.test.ts | 11 -- .../__tests__/toDelete2.test.ts | 6 - .../__tests__/toDelete3.test.ts | 4 - packages/ckeditor5-data-facade/tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../ckeditor5-dialog-visibility/tsconfig.json | 2 +- .../ckeditor5-dom-converter/tsconfig.json | 2 +- packages/ckeditor5-dom-support/tsconfig.json | 2 +- packages/ckeditor5-font-mapper/tsconfig.json | 2 +- .../shared-jest.config.js | 18 ++- packages/ckeditor5-link-common/tsconfig.json | 2 +- packages/ckeditor5-logging/tsconfig.json | 2 +- patches/ckeditor5@42.0.2.patch | 14 ++ pnpm-lock.yaml | 139 +++++++++--------- 30 files changed, 125 insertions(+), 118 deletions(-) delete mode 100644 packages/ckeditor5-data-facade/__tests__/toDelete1.test.ts delete mode 100644 packages/ckeditor5-data-facade/__tests__/toDelete2.test.ts delete mode 100644 packages/ckeditor5-data-facade/__tests__/toDelete3.test.ts create mode 100644 patches/ckeditor5@42.0.2.patch diff --git a/package.json b/package.json index 6fd25c05f..ac375c2e7 100644 --- a/package.json +++ b/package.json @@ -85,5 +85,10 @@ "typedoc": "^0.25.13", "typescript": "5.4.5", "validate-peer-dependencies": "^2.2.0" + }, + "pnpm": { + "patchedDependencies": { + "ckeditor5@42.0.2": "patches/ckeditor5@42.0.2.patch" + } } } diff --git a/packages/ckeditor5-bbcode/tsconfig.json b/packages/ckeditor5-bbcode/tsconfig.json index 855987a19..23fd95518 100644 --- a/packages/ckeditor5-bbcode/tsconfig.json +++ b/packages/ckeditor5-bbcode/tsconfig.json @@ -6,7 +6,7 @@ "./types" ], "compilerOptions": { - "outDir": "./dist/src", + "outDir": "./dist", "paths": { "@bbob/core/*": [ "./types/@bbob/core/*" diff --git a/packages/ckeditor5-common/tsconfig.json b/packages/ckeditor5-common/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-common/tsconfig.json +++ b/packages/ckeditor5-common/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-core-common/tsconfig.json b/packages/ckeditor5-core-common/tsconfig.json index baaaaf99b..8439751c6 100644 --- a/packages/ckeditor5-core-common/tsconfig.json +++ b/packages/ckeditor5-core-common/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./src" diff --git a/packages/ckeditor5-coremedia-blocklist/tsconfig.json b/packages/ckeditor5-coremedia-blocklist/tsconfig.json index fd7844f29..b98d0d678 100644 --- a/packages/ckeditor5-coremedia-blocklist/tsconfig.json +++ b/packages/ckeditor5-coremedia-blocklist/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__mocks__", diff --git a/packages/ckeditor5-coremedia-content-clipboard/tsconfig.json b/packages/ckeditor5-coremedia-content-clipboard/tsconfig.json index cce9759ee..e239fc8fc 100644 --- a/packages/ckeditor5-coremedia-content-clipboard/tsconfig.json +++ b/packages/ckeditor5-coremedia-content-clipboard/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./src", diff --git a/packages/ckeditor5-coremedia-content/tsconfig.json b/packages/ckeditor5-coremedia-content/tsconfig.json index baaaaf99b..8439751c6 100644 --- a/packages/ckeditor5-coremedia-content/tsconfig.json +++ b/packages/ckeditor5-coremedia-content/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./src" diff --git a/packages/ckeditor5-coremedia-differencing/tsconfig.json b/packages/ckeditor5-coremedia-differencing/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-coremedia-differencing/tsconfig.json +++ b/packages/ckeditor5-coremedia-differencing/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-coremedia-example-data/tsconfig.json b/packages/ckeditor5-coremedia-example-data/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-coremedia-example-data/tsconfig.json +++ b/packages/ckeditor5-coremedia-example-data/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-coremedia-images/tsconfig.json b/packages/ckeditor5-coremedia-images/tsconfig.json index cce9759ee..e239fc8fc 100644 --- a/packages/ckeditor5-coremedia-images/tsconfig.json +++ b/packages/ckeditor5-coremedia-images/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./src", diff --git a/packages/ckeditor5-coremedia-link/tsconfig.json b/packages/ckeditor5-coremedia-link/tsconfig.json index fd7844f29..b98d0d678 100644 --- a/packages/ckeditor5-coremedia-link/tsconfig.json +++ b/packages/ckeditor5-coremedia-link/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__mocks__", diff --git a/packages/ckeditor5-coremedia-richtext-support/tsconfig.json b/packages/ckeditor5-coremedia-richtext-support/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-coremedia-richtext-support/tsconfig.json +++ b/packages/ckeditor5-coremedia-richtext-support/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-coremedia-richtext/tsconfig.json b/packages/ckeditor5-coremedia-richtext/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-coremedia-richtext/tsconfig.json +++ b/packages/ckeditor5-coremedia-richtext/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-coremedia-studio-essentials/tsconfig.json b/packages/ckeditor5-coremedia-studio-essentials/tsconfig.json index baaaaf99b..8439751c6 100644 --- a/packages/ckeditor5-coremedia-studio-essentials/tsconfig.json +++ b/packages/ckeditor5-coremedia-studio-essentials/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./src" diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/tsconfig.json b/packages/ckeditor5-coremedia-studio-integration-mock/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/tsconfig.json +++ b/packages/ckeditor5-coremedia-studio-integration-mock/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-coremedia-studio-integration/tsconfig.json b/packages/ckeditor5-coremedia-studio-integration/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-coremedia-studio-integration/tsconfig.json +++ b/packages/ckeditor5-coremedia-studio-integration/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-data-facade/__tests__/toDelete1.test.ts b/packages/ckeditor5-data-facade/__tests__/toDelete1.test.ts deleted file mode 100644 index ea84f1346..000000000 --- a/packages/ckeditor5-data-facade/__tests__/toDelete1.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { DataFacade } from "../src"; - -const { ClassicEditor } = await import("ckeditor5"); - -it("is just a simple test", async () => { - const editor = await ClassicEditor.create("
    ", { plugins: [DataFacade] }); - - expect(editor.plugins.has("DataFacade")).toBeTruthy(); -}); - -export {}; diff --git a/packages/ckeditor5-data-facade/__tests__/toDelete2.test.ts b/packages/ckeditor5-data-facade/__tests__/toDelete2.test.ts deleted file mode 100644 index d472d8868..000000000 --- a/packages/ckeditor5-data-facade/__tests__/toDelete2.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ClassicEditor } from "ckeditor5"; - -it("is just a simple test", () => { - console.log("ClassicEditor", ClassicEditor); - expect(2).toBeGreaterThan(1); -}); diff --git a/packages/ckeditor5-data-facade/__tests__/toDelete3.test.ts b/packages/ckeditor5-data-facade/__tests__/toDelete3.test.ts deleted file mode 100644 index 45e46819b..000000000 --- a/packages/ckeditor5-data-facade/__tests__/toDelete3.test.ts +++ /dev/null @@ -1,4 +0,0 @@ -it("is just a simple test", () => { - console.log(JSON.stringify({ test: 1 })); - expect(2).toBeGreaterThan(1); -}); diff --git a/packages/ckeditor5-data-facade/tsconfig.json b/packages/ckeditor5-data-facade/tsconfig.json index 6293c217c..2a8804393 100644 --- a/packages/ckeditor5-data-facade/tsconfig.json +++ b/packages/ckeditor5-data-facade/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__mocks__", diff --git a/packages/ckeditor5-dataprocessor-support/tsconfig.json b/packages/ckeditor5-dataprocessor-support/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-dataprocessor-support/tsconfig.json +++ b/packages/ckeditor5-dataprocessor-support/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-dialog-visibility/tsconfig.json b/packages/ckeditor5-dialog-visibility/tsconfig.json index baaaaf99b..8439751c6 100644 --- a/packages/ckeditor5-dialog-visibility/tsconfig.json +++ b/packages/ckeditor5-dialog-visibility/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./src" diff --git a/packages/ckeditor5-dom-converter/tsconfig.json b/packages/ckeditor5-dom-converter/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-dom-converter/tsconfig.json +++ b/packages/ckeditor5-dom-converter/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-dom-support/tsconfig.json b/packages/ckeditor5-dom-support/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-dom-support/tsconfig.json +++ b/packages/ckeditor5-dom-support/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-font-mapper/tsconfig.json b/packages/ckeditor5-font-mapper/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-font-mapper/tsconfig.json +++ b/packages/ckeditor5-font-mapper/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/packages/ckeditor5-jest-test-helpers/shared-jest.config.js b/packages/ckeditor5-jest-test-helpers/shared-jest.config.js index f9b0e2b54..562835655 100644 --- a/packages/ckeditor5-jest-test-helpers/shared-jest.config.js +++ b/packages/ckeditor5-jest-test-helpers/shared-jest.config.js @@ -1,3 +1,5 @@ +const babelConfig = require("@coremedia-internal/ckeditor5-babel-config"); + module.exports = { testEnvironment: require.resolve("jest-environment-jsdom"), // Don't detect utility files as tests, i.e. require `test` in name. @@ -6,18 +8,20 @@ module.exports = { moduleNameMapper: { // https://www.npmjs.com/package/jest-transform-stub "^.+\\.(css|less|sass|scss|gif|png|jpg|ttf|eot|woff|woff2|svg)$": require.resolve("jest-transform-stub"), - // https://stackoverflow.com/questions/76608600/jest-tests-are-failing-because-of-an-unknown-unexpected-token-export - "^blurhash": require.resolve("blurhash"), }, - preset: "ts-jest/presets/default-esm", transform: { - "^.+.tsx?$": [ + // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` + // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` + "^.+\\.tsx?$": [ "ts-jest", { - useESM: true, + // ts-jest configuration goes here }, ], + // Required, e.g., for CKEditor 5 Dependencies. + "^.+\\.jsx?$": [require.resolve("babel-jest"), babelConfig], + // https://www.npmjs.com/package/jest-transform-stub + "^.+\\.(css|less|sass|scss|gif|png|jpg|ttf|eot|woff|woff2|svg)$": require.resolve("jest-transform-stub"), }, - extensionsToTreatAsEsm: [".ts"], - transformIgnorePatterns: ["node_modules/.pnpm/(?!@bbob|lodash-es|rxjs|vanilla-colorful)"], + transformIgnorePatterns: ["node_modules/.pnpm/(?!@ckeditor|@bbob|lodash-es|rxjs|ckeditor5|vanilla-colorful)"], }; diff --git a/packages/ckeditor5-link-common/tsconfig.json b/packages/ckeditor5-link-common/tsconfig.json index baaaaf99b..8439751c6 100644 --- a/packages/ckeditor5-link-common/tsconfig.json +++ b/packages/ckeditor5-link-common/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./src" diff --git a/packages/ckeditor5-logging/tsconfig.json b/packages/ckeditor5-logging/tsconfig.json index 1c1570bff..40d148433 100644 --- a/packages/ckeditor5-logging/tsconfig.json +++ b/packages/ckeditor5-logging/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "./dist/src" + "outDir": "./dist" }, "include": [ "./__tests__", diff --git a/patches/ckeditor5@42.0.2.patch b/patches/ckeditor5@42.0.2.patch new file mode 100644 index 000000000..bebe3f986 --- /dev/null +++ b/patches/ckeditor5@42.0.2.patch @@ -0,0 +1,14 @@ +diff --git a/package.json b/package.json +index 24c71866b40459089344354843e1460a12206246..93f32574eb3d8120cc290ef8557d4fb7c935e356 100644 +--- a/package.json ++++ b/package.json +@@ -26,7 +26,8 @@ + "exports": { + ".": { + "types": "./dist/index.d.ts", +- "import": "./dist/ckeditor5.js" ++ "import": "./dist/ckeditor5.js", ++ "default": "./dist/ckeditor5.js" + }, + "./*": "./dist/*", + "./browser/*": null, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af7bd0e47..53501f3a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +patchedDependencies: + ckeditor5@42.0.2: + hash: e3wvqnjogfwavdpitrzg5zqxpm + path: patches/ckeditor5@42.0.2.patch + importers: .: @@ -134,7 +139,7 @@ importers: version: 1.1.5 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) xml-formatter: specifier: ^3.6.2 version: 3.6.3 @@ -237,7 +242,7 @@ importers: version: 20.16.5 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) expect-playwright: specifier: ^0.8.0 version: 0.8.0 @@ -337,7 +342,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -362,7 +367,7 @@ importers: version: link:../ckeditor5-logging ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) devDependencies: '@coremedia-internal/ckeditor5-jest-test-helpers': specifier: ^1.0.0 @@ -407,7 +412,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -445,7 +450,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -483,7 +488,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -523,7 +528,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -582,7 +587,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -664,7 +669,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -726,7 +731,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -785,7 +790,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -823,7 +828,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -858,7 +863,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -954,7 +959,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -992,7 +997,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -1013,10 +1018,10 @@ importers: packages/ckeditor5-dataprocessor-support: dependencies: '@coremedia/ckeditor5-common': - specifier: workspace:* + specifier: ^20.1.0 version: link:../ckeditor5-common '@coremedia/ckeditor5-logging': - specifier: workspace:* + specifier: ^20.1.0 version: link:../ckeditor5-logging devDependencies: '@coremedia-internal/ckeditor5-jest-test-helpers': @@ -1030,7 +1035,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -1052,7 +1057,7 @@ importers: devDependencies: ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -1084,7 +1089,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -1148,7 +1153,7 @@ importers: version: 5.28.5 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -1207,7 +1212,7 @@ importers: version: 29.5.12 ckeditor5: specifier: ^42.0.2 - version: 42.0.2 + version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.16.5) @@ -7137,14 +7142,14 @@ snapshots: dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-upload': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-alignment@42.0.2': dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-autoformat@42.0.2': dependencies: @@ -7152,13 +7157,13 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-typing': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-autosave@42.0.2': dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-basic-styles@42.0.2': @@ -7166,7 +7171,7 @@ snapshots: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-typing': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-block-quote@42.0.2': dependencies: @@ -7175,7 +7180,7 @@ snapshots: '@ckeditor/ckeditor5-typing': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-ckbox@42.0.2': dependencies: @@ -7185,7 +7190,7 @@ snapshots: '@ckeditor/ckeditor5-upload': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 blurhash: 2.0.5 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-ckfinder@42.0.2': @@ -7193,7 +7198,7 @@ snapshots: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-clipboard@42.0.2': dependencies: @@ -7208,7 +7213,7 @@ snapshots: dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-code-block@42.0.2': dependencies: @@ -7217,7 +7222,7 @@ snapshots: '@ckeditor/ckeditor5-enter': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-core@42.0.2': @@ -7272,7 +7277,7 @@ snapshots: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-upload': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-editor-balloon@42.0.2': dependencies: @@ -7280,7 +7285,7 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-editor-classic@42.0.2': @@ -7289,7 +7294,7 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-editor-decoupled@42.0.2': @@ -7298,7 +7303,7 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-editor-inline@42.0.2': @@ -7307,7 +7312,7 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-editor-multi-root@42.0.2': @@ -7316,7 +7321,7 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-engine@42.0.2': @@ -7339,14 +7344,14 @@ snapshots: '@ckeditor/ckeditor5-typing': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-undo': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-find-and-replace@42.0.2': dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-font@42.0.2': @@ -7355,7 +7360,7 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-heading@42.0.2': dependencies: @@ -7364,20 +7369,20 @@ snapshots: '@ckeditor/ckeditor5-paragraph': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-highlight@42.0.2': dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-horizontal-line@42.0.2': dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-widget': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-html-embed@42.0.2': dependencies: @@ -7385,7 +7390,7 @@ snapshots: '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 '@ckeditor/ckeditor5-widget': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-html-support@42.0.2': dependencies: @@ -7394,7 +7399,7 @@ snapshots: '@ckeditor/ckeditor5-enter': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 '@ckeditor/ckeditor5-widget': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-image@42.0.2': @@ -7408,7 +7413,7 @@ snapshots: '@ckeditor/ckeditor5-upload': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 '@ckeditor/ckeditor5-widget': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-indent@42.0.2': @@ -7417,7 +7422,7 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-inspector@4.1.0': {} @@ -7426,7 +7431,7 @@ snapshots: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-link@42.0.2': dependencies: @@ -7437,7 +7442,7 @@ snapshots: '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 '@ckeditor/ckeditor5-widget': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-list@42.0.2': @@ -7449,14 +7454,14 @@ snapshots: '@ckeditor/ckeditor5-typing': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-markdown-gfm@42.0.2': dependencies: '@ckeditor/ckeditor5-clipboard': 42.0.2 '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-engine': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) marked: 4.0.12 turndown: 7.2.0 turndown-plugin-gfm: 1.0.2 @@ -7471,7 +7476,7 @@ snapshots: '@ckeditor/ckeditor5-undo': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 '@ckeditor/ckeditor5-widget': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-mention@42.0.2': dependencies: @@ -7479,7 +7484,7 @@ snapshots: '@ckeditor/ckeditor5-typing': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-minimap@42.0.2': @@ -7488,14 +7493,14 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-page-break@42.0.2': dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-widget': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-paragraph@42.0.2': dependencies: @@ -7508,14 +7513,14 @@ snapshots: '@ckeditor/ckeditor5-clipboard': 42.0.2 '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-engine': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-remove-format@42.0.2': dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-restricted-editing@42.0.2': dependencies: @@ -7523,7 +7528,7 @@ snapshots: '@ckeditor/ckeditor5-engine': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-select-all@42.0.2': dependencies: @@ -7535,7 +7540,7 @@ snapshots: dependencies: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-source-editing@42.0.2': dependencies: @@ -7543,7 +7548,7 @@ snapshots: '@ckeditor/ckeditor5-theme-lark': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-special-characters@42.0.2': dependencies: @@ -7551,7 +7556,7 @@ snapshots: '@ckeditor/ckeditor5-typing': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) '@ckeditor/ckeditor5-style@42.0.2': dependencies: @@ -7559,7 +7564,7 @@ snapshots: '@ckeditor/ckeditor5-typing': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-table@42.0.2': @@ -7570,7 +7575,7 @@ snapshots: '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 '@ckeditor/ckeditor5-widget': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@ckeditor/ckeditor5-theme-lark@42.0.2': @@ -7627,7 +7632,7 @@ snapshots: '@ckeditor/ckeditor5-core': 42.0.2 '@ckeditor/ckeditor5-ui': 42.0.2 '@ckeditor/ckeditor5-utils': 42.0.2 - ckeditor5: 42.0.2 + ckeditor5: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) lodash-es: 4.17.21 '@coremedia/service-agent@1.1.5': @@ -8841,7 +8846,7 @@ snapshots: cjs-module-lexer@1.4.1: {} - ckeditor5@42.0.2: + ckeditor5@42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm): dependencies: '@ckeditor/ckeditor5-adapter-ckfinder': 42.0.2 '@ckeditor/ckeditor5-alignment': 42.0.2 From 78a612ee6207ef72f9d9e95b845b9abcfcaa1bed Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Mon, 28 Oct 2024 09:17:26 +0100 Subject: [PATCH 08/43] all jest tests functional again --- .../@ckeditor/ckeditor5-utils/src/config.ts | 13 -- .../@ckeditor/ckeditor5-autosave/autosave.ts | 20 -- .../@ckeditor/ckeditor5-autosave/index.ts | 1 - .../@ckeditor/ckeditor5-core/editor.ts | 68 ------- .../@ckeditor/ckeditor5-core/index.ts | 5 - .../@ckeditor/ckeditor5-core/plugin.ts | 7 - .../ckeditor5-core/plugincollection.ts | 75 -------- .../controller/datacontroller.ts | 40 ---- .../@ckeditor/ckeditor5-engine/index.ts | 3 - .../ckeditor5-engine/model/document.ts | 4 - .../@ckeditor/ckeditor5-engine/model/model.ts | 5 - .../ckeditor5-ui/editorui/editorui.ts | 2 - .../__mocks__/@ckeditor/ckeditor5-ui/index.ts | 1 - .../@ckeditor/ckeditor5-utils/config.ts | 11 -- .../@ckeditor/ckeditor5-utils/index.ts | 1 - .../__tests__/CkEditorTester.test.ts | 28 +++ .../__tests__/DataFacade.test.ts | 85 +++------ .../__tests__/DataFacadeController.test.ts | 175 ++++++++---------- .../__tests__/helpers/TestEditor.ts | 83 +++++++++ .../__tests__/helpers/index.html.ts | 13 ++ .../ckeditor5-data-facade/jest.config.cjs | 5 +- packages/ckeditor5-data-facade/jest.setup.ts | 11 ++ .../src/DataFacadeController.ts | 1 - pnpm-lock.yaml | 10 +- 24 files changed, 260 insertions(+), 407 deletions(-) delete mode 100644 packages/ckeditor5-coremedia-link/__mocks__/@ckeditor/ckeditor5-utils/src/config.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-autosave/autosave.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-autosave/index.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/editor.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/index.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugin.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugincollection.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/controller/datacontroller.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/index.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/model/document.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/model/model.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-ui/editorui/editorui.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-ui/index.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-utils/config.ts delete mode 100644 packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-utils/index.ts create mode 100644 packages/ckeditor5-data-facade/__tests__/CkEditorTester.test.ts create mode 100644 packages/ckeditor5-data-facade/__tests__/helpers/TestEditor.ts create mode 100644 packages/ckeditor5-data-facade/__tests__/helpers/index.html.ts create mode 100644 packages/ckeditor5-data-facade/jest.setup.ts diff --git a/packages/ckeditor5-coremedia-link/__mocks__/@ckeditor/ckeditor5-utils/src/config.ts b/packages/ckeditor5-coremedia-link/__mocks__/@ckeditor/ckeditor5-utils/src/config.ts deleted file mode 100644 index c75b4964f..000000000 --- a/packages/ckeditor5-coremedia-link/__mocks__/@ckeditor/ckeditor5-utils/src/config.ts +++ /dev/null @@ -1,13 +0,0 @@ -class Config { - readonly #config: Map = new Map(); - - get(name: string): unknown { - return this.#config.get(name); - } - - set(name: string, value: unknown): void { - this.#config.set(name, value); - } -} - -export default Config; diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-autosave/autosave.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-autosave/autosave.ts deleted file mode 100644 index 8a1f008ed..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-autosave/autosave.ts +++ /dev/null @@ -1,20 +0,0 @@ -export class Autosave { - adapter?: AutosaveAdapter; - readonly editor: unknown; - - constructor(editor: unknown) { - this.editor = editor; - } - - init(): void { - // Nothing to do/to mock. - } - - save(): Promise { - return this.adapter?.save(this.editor) ?? Promise.resolve(); - } -} - -export interface AutosaveAdapter { - save(editor: unknown): Promise; -} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-autosave/index.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-autosave/index.ts deleted file mode 100644 index 854654fe1..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-autosave/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Autosave } from "./autosave"; diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/editor.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/editor.ts deleted file mode 100644 index 419294d02..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/editor.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { PluginCollection } from "./plugincollection"; -import { DataController, Model } from "../ckeditor5-engine"; -import { Config } from "../ckeditor5-utils"; - -/** - * Some extra configuration you may apply to control mocking behavior. - * Will be passed with "mock" configuration key. - */ -interface MockConfig { - /** - * If given, will delay the initialization of plugins and subsequent - * `"ready"` event until the provided promise got resolved. - */ - initDelay?: Promise; -} - -export abstract class Editor { - static #instanceCount = 0; - readonly instanceId: number; - readonly plugins: PluginCollection; - readonly model = new Model(); - readonly data = new DataController(this.model); - readonly config; - readonly #eventsOnce = new Map void>(); - - protected constructor(config?: Record) { - // Config should exist first, so that plugins may already access it. - this.config = new Config(config ?? {}); - this.plugins = new PluginCollection(this, config?.plugins as unknown[] | undefined); - this.instanceId = Editor.#instanceCount++; - - let delayInit = false; - - // Some special mock behavior configuration. - if (config?.hasOwnProperty("mock")) { - const mockConfig = config.mock as MockConfig; - if (mockConfig.initDelay) { - delayInit = true; - // Let init be controlled from within the test. - void mockConfig.initDelay.then(() => this.mockInit()); - } - } - - if (!delayInit) { - this.mockInit(); - } - } - - mockInit(): void { - this.plugins.mockInitAll(); - this.fire("ready"); - } - - once(name: string, cb: () => void): void { - this.#eventsOnce.set(name, cb); - } - - fire(name: string): void { - if (this.#eventsOnce.has(name)) { - this.#eventsOnce.get(name)?.(); - this.#eventsOnce.delete(name); - } - } - - toString(): string { - return `Editor@${this.instanceId}`; - } -} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/index.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/index.ts deleted file mode 100644 index e19b72f42..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { Editor } from "./editor"; - -export { PluginCollection } from "./plugincollection"; - -export { Plugin } from "./plugin"; diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugin.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugin.ts deleted file mode 100644 index 1c057a04c..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugin.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class Plugin { - readonly editor: unknown; - - constructor(editor: unknown) { - this.editor = editor; - } -} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugincollection.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugincollection.ts deleted file mode 100644 index 6f18c28b5..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-core/plugincollection.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { DataFacade } from "../../../src"; -import { Editor } from "ckeditor5"; -import { Autosave } from "../ckeditor5-autosave"; -const byStringKey = (key: string, plugin: unknown): boolean => { - if (typeof plugin === "function") { - return plugin.name === key; - } - console.debug(`Signal not found searching for ${key} for entry: ${plugin} (${typeof plugin})`); - return false; -}; -const byConstructor = (key: unknown, plugin: unknown): boolean => { - if (typeof plugin === "function") { - return key === plugin; - } - console.debug(`Signal not found searching for ${key} for entry: ${plugin} (${typeof plugin})`); - return false; -}; -const pluginPredicate = - (key: unknown) => - (plugin: unknown): boolean => { - if (typeof key === "string") { - return byStringKey(key, plugin); - } - if (typeof key === "function") { - return byConstructor(key, plugin); - } - console.debug(`Unsupported key ${key} of type ${typeof key}. Will signal: Not found.`); - return false; - }; -export class PluginCollection { - readonly #context: unknown; - readonly #plugins: unknown[]; - #dataFacade: DataFacade; - #autosave: Autosave; - constructor(context: unknown, availablePlugins: unknown[] = []) { - this.#context = context; - this.#plugins = availablePlugins; - } - mockInitAll() { - for (const pluginKey of this.#plugins) { - const plugin = this.get(pluginKey) as { - init?: () => void; - }; - plugin.init?.(); - } - } - has(key: unknown): boolean { - return this.#plugins.some(pluginPredicate(key)); - } - get(key: unknown): unknown { - const plugin = this.#plugins.find(pluginPredicate(key)); - if (!plugin) { - throw new Error(`get: No Plugin registered for key "${key}" (${typeof key}).`); - } - if (typeof plugin === "function") { - // Lazy initialization required, as at construction time, relevant - // setup in the editor (here: config) may not be available, yet. - switch (plugin.name) { - case "DataFacade": - if (!this.#dataFacade) { - this.#dataFacade = new DataFacade(this.#context as Editor); - } - return this.#dataFacade; - case "Autosave": - if (!this.#autosave) { - this.#autosave = new Autosave(this.#context); - } - return this.#autosave; - default: - throw new Error(`Don't know how to provide instance of: "${plugin.name}"`); - } - } - throw new Error(`get: Mock does not know how to get instance for: "${typeof plugin}".`); - } -} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/controller/datacontroller.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/controller/datacontroller.ts deleted file mode 100644 index 680cb657c..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/controller/datacontroller.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Model } from "../model/model"; - -export class DataController { - #data: string | Record = ""; - #options: object = {}; - - readonly model; - - constructor(model: Model) { - this.model = model; - } - - set(data: string | Record, options: object = {}): void { - this.#data = data; - this.#options = options; - this.model.document.version++; - } - - get( - options: { - rootName?: string; - trim?: "empty" | "none"; - } = {}, - ): string { - const { rootName = "main", trim = "empty" } = options; - const data = this.#data; - - if (typeof data === "string") { - if (rootName === "main") { - return trim === "none" ? data : data.trim(); - } - throw new Error(`MockError: Unsupported rootName ${rootName} for string data.`); - } - if (data.hasOwnProperty(rootName)) { - const rootData = data[rootName]; - return trim === "none" ? rootData : rootData.trim(); - } - throw new Error(`MockError: No data available for rootName ${rootName}.`); - } -} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/index.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/index.ts deleted file mode 100644 index 2880f35b8..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { DataController } from "./controller/datacontroller"; -export { Document } from "./model/document"; -export { Model } from "./model/model"; diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/model/document.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/model/document.ts deleted file mode 100644 index 9a5dc29a3..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/model/document.ts +++ /dev/null @@ -1,4 +0,0 @@ -export class Document { - // see model.history: starts with 0 - version = 0; -} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/model/model.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/model/model.ts deleted file mode 100644 index d4fcdef36..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-engine/model/model.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Document } from "./document"; - -export class Model { - readonly document = new Document(); -} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-ui/editorui/editorui.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-ui/editorui/editorui.ts deleted file mode 100644 index 7d9869f4c..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-ui/editorui/editorui.ts +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-extraneous-class -export abstract class EditorUI {} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-ui/index.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-ui/index.ts deleted file mode 100644 index cb634b1f1..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-ui/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { EditorUI } from "./editorui/editorui"; diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-utils/config.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-utils/config.ts deleted file mode 100644 index 68211b2b0..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-utils/config.ts +++ /dev/null @@ -1,11 +0,0 @@ -export class Config { - readonly #config: Record; - - constructor(config: Record = {}) { - this.#config = config; - } - - get(name: string): unknown | undefined { - return this.#config[name]; - } -} diff --git a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-utils/index.ts b/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-utils/index.ts deleted file mode 100644 index abfc4b51f..000000000 --- a/packages/ckeditor5-data-facade/__mocks__/@ckeditor/ckeditor5-utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Config } from "./config"; diff --git a/packages/ckeditor5-data-facade/__tests__/CkEditorTester.test.ts b/packages/ckeditor5-data-facade/__tests__/CkEditorTester.test.ts new file mode 100644 index 000000000..bede8cb06 --- /dev/null +++ b/packages/ckeditor5-data-facade/__tests__/CkEditorTester.test.ts @@ -0,0 +1,28 @@ +import { completeToolbar, createTestEditor, prepareDocument } from "./helpers/TestEditor"; + +describe("CkEditor", () => { + beforeEach(() => { + prepareDocument(document); + }); + + afterEach(() => { + // restore the original func after test + jest.resetModules(); + }); + + it("Element with id 'main' exists", () => { + expect(document.getElementById("main")).toBeTruthy(); + }); + + it("Should be an editor available, including a toolbar.", async () => { + const editor = await createTestEditor(); + expect(editor.ui.element?.parentElement?.tagName).toEqual("BODY"); + expect(document.getElementsByTagName("button").length).toEqual(completeToolbar.length); + }); + + it("Should be possible to use the DataController.", async () => { + const editor = await createTestEditor(); + editor.data.set("

    test

    "); + expect(editor.data.get()).toEqual("

    test

    "); + }); +}); diff --git a/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts b/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts index 8d6632153..dc69d1615 100644 --- a/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts +++ b/packages/ckeditor5-data-facade/__tests__/DataFacade.test.ts @@ -1,86 +1,61 @@ -import { SetDataData } from "../src/DataControllerApi"; -import { EditorUI, Autosave, Editor } from "ckeditor5"; -import { jest } from "@jest/globals"; -import { DataFacade } from "../src"; +import { Autosave, Editor } from "ckeditor5"; +import { DataFacade, GetDataApi, SetDataData } from "../src"; +import { allPlugins, completeToolbar, createTestEditor, prepareDocument } from "./helpers/TestEditor"; -jest.useFakeTimers(); +const simulateDataReformat = (data: SetDataData, editor: Editor) => { + const previousVersion = editor.model.document.version; + editor.data.set(data); + editor.model.document.version = previousVersion; +}; -class DummyEditor extends Editor { - readonly ui: EditorUI = {} as EditorUI; - - /** - * Simulates an internal change to the data (like reordering attributes). - * Similar to setting data, but skipping version update. - * @param data - data to set to be _equal_ to the original set data - */ - simulateDataReformat(data: SetDataData): void { - const previousVersion = this.model.document.version; - this.data.set(data); - this.model.document.version = previousVersion; - } - - /** - * Make test more verbose (we could have invoked data controller directly). - * - * @param data - data that are the result of editorial changes - */ - simulateEditorialUpdate(data: SetDataData): void { - this.data.set(data); - } -} +const simulateEditorialUpdate = (data: SetDataData, editor: Editor) => { + editor.data.set(data); +}; describe("DataFacade", () => { beforeEach(() => { - jest.clearAllMocks(); + prepareDocument(document); }); it("should forward previously set data once initialized", async () => { - const dataFixture = "DATA"; - const initDelay = new Promise((resolve) => window.setTimeout(resolve, 1)); - const editor = new DummyEditor({ - plugins: [DataFacade, Autosave], - // @ts-expect-error – Just some mock configuration. - mock: { - initDelay, - }, - }); + const dataFixture = "

    DATA

    "; + const editor = await createTestEditor(); const dataFacade = editor.plugins.get(DataFacade); // This will also forward the data to the editor, but we will not know // if the editor itself does not override these afterward, e.g., when // reading the `initialData` property. dataFacade.setData(dataFixture); - editor.data.set("mocking data set from initialData"); expect.assertions(2); - await initDelay.then(() => { - // After init is done, data should have been forwarded. - expect(editor.data.get()).toEqual(dataFixture); + // await initDelay; + // After init is done, data should have been forwarded. + expect(editor.data.get()).toEqual(dataFixture); - // Caching should work. - editor.simulateDataReformat(dataFixture.toLowerCase()); - expect(dataFacade.getData()).toEqual(dataFixture); - }); + // Caching should work. + simulateDataReformat(dataFixture.toLowerCase(), editor); + expect(dataFacade.getData()).toEqual(dataFixture); }); describe("Autosave integration", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; let savedData = ""; - let editor: DummyEditor; - let autosave: InstanceType; + let editor: Editor; + let autosave: Autosave; let dataFacade: InstanceType; - beforeEach(() => { - editor = new DummyEditor({ - plugins: [DataFacade, Autosave], + beforeEach(async () => { + prepareDocument(document); + editor = await createTestEditor("main", allPlugins, completeToolbar, { dataFacade: { - save(dataApi): Promise { + save(dataApi: GetDataApi): Promise { savedData = dataApi.getData(); return Promise.resolve(); }, }, }); + // await editor.initPlugins(); autosave = editor.plugins.get(Autosave); dataFacade = editor.plugins.get(DataFacade); }); it("should hook into autosave and use custom configuration for saving cached data", async () => { dataFacade.setData(dataFixture); - editor.simulateDataReformat(dataFixture.toLowerCase()); + simulateDataReformat(dataFixture.toLowerCase(), editor); expect.assertions(1); // We do not mock auto-forwarding set data to Autosave. Thus, invoking @@ -91,7 +66,7 @@ describe("DataFacade", () => { }); it("should hook into autosave but prefer editorial changes on data facade's save", async () => { dataFacade.setData(dataFixture); - editor.simulateEditorialUpdate(dataFixture.toLowerCase()); + simulateEditorialUpdate(dataFixture.toLowerCase(), editor); expect.assertions(1); // We do not mock auto-forwarding set data to Autosave. Thus, invoking diff --git a/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts b/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts index 2870a03a4..800435e75 100644 --- a/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts +++ b/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts @@ -1,54 +1,48 @@ import { ContextMismatchError, DataFacade, DataFacadeController, SetDataData } from "../src"; -import { Editor, EditorUI, CKEditorError, Autosave } from "ckeditor5"; +import { CKEditorError, Editor } from "ckeditor5"; import { jest } from "@jest/globals"; +import { createTestEditor, prepareDocument } from "./helpers/TestEditor"; jest.useFakeTimers(); -class DummyEditor extends Editor { - readonly ui: EditorUI = {} as EditorUI; +/** + * Simulates an internal change to the data (like reordering attributes). + * Similar to setting data, but skipping version update. + * @param data - data to set to be _equal_ to the original set data + * @param editor - the editor to change the data for + */ +const simulateDataReformat = (data: SetDataData, editor: Editor) => { + const previousVersion = editor.model.document.version; + editor.data.set(data); + editor.model.document.version = previousVersion; +}; - /** - * Simulates an internal change to the data (like reordering attributes). - * Similar to setting data, but skipping version update. - * @param data - data to set to be _equal_ to the original set data - */ - simulateDataReformat(data: SetDataData): void { - const previousVersion = this.model.document.version; - this.data.set(data); - this.model.document.version = previousVersion; - } - - /** - * Make test more verbose (we could have invoked data controller directly). - * - * @param data - data that are the result of editorial changes - */ - simulateEditorialUpdate(data: SetDataData): void { - this.data.set(data); - } -} +/** + * Make test more verbose (we could have invoked data controller directly). + * @param data - data that are the result of editorial changes + * @param editor - the editor to change the data for + */ +const simulateEditorialUpdate = (data: SetDataData, editor: Editor) => { + editor.data.set(data); +}; describe("DataFacadeController", () => { beforeEach(() => { - jest.clearAllMocks(); + prepareDocument(document); }); // ========================================================[ Delegating Mode ] describe("Delegating Mode", () => { - it("should retrieve data from delegate controller when in delegating mode", () => { - const dataFixture = "DATA"; + it("should retrieve data from delegate controller when in delegating mode", async () => { + const dataFixture = "

    DATA

    "; const controller = new DataFacadeController(); - const editor = new DummyEditor({ - // We manually need to add Autosave, as we did not mock resolving - // required plugins. - plugins: [DataFacade, Autosave], - }); + const editor = await createTestEditor(); const dataFacade = editor.plugins.get(DataFacade); controller.init(editor); expect(controller).toHaveProperty("delegating", true); dataFacade.setData(dataFixture); - editor.simulateDataReformat(dataFixture.toLowerCase()); + simulateDataReformat(dataFixture.toLowerCase(), editor); // Theoretically, without delegating enabled, the subsequent get should // directly forward to editor (no data yet cached in the original @@ -58,36 +52,29 @@ describe("DataFacadeController", () => { // the data-controller we delegate to. expect(controller.getData()).toEqual(dataFixture); }); - it("should propagate data to delegate and editor subsequently when delegation gets initialized", () => { - const dataFixture = "DATA"; + it("should propagate data to delegate and editor subsequently when delegation gets initialized", async () => { + const dataFixture = "

    DATA

    "; const controller = new DataFacadeController(); - const editor = new DummyEditor({ - // We manually need to add Autosave, as we did not mock resolving - // required plugins. - plugins: [DataFacade, Autosave], - }); + const editor = await createTestEditor(); const dataFacade = editor.plugins.get(DataFacade); controller.setData(dataFixture); + editor.data.set = jest.fn(); controller.init(editor); expect(controller).toHaveProperty("delegating", true); // Should have propagated on init to delegate data-facade-controller and // to editor subsequently. expect(dataFacade.getData()).toEqual(dataFixture); - expect(editor.data.get()).toEqual(dataFixture); + expect(editor.data.set).toHaveBeenCalledWith(dataFixture, {}); // Some additional check, that delegation also respects caching now. - editor.simulateDataReformat(dataFixture.toLowerCase()); + simulateDataReformat(dataFixture.toLowerCase(), editor); expect(dataFacade.getData()).toEqual(dataFixture); }); - it("should forward data set to delegate directly", () => { - const dataFixture = "DATA"; + it("should forward data set to delegate directly", async () => { + const dataFixture = "

    DATA

    "; const controller = new DataFacadeController(); - const editor = new DummyEditor({ - // We manually need to add Autosave, as we did not mock resolving - // required plugins. - plugins: [DataFacade, Autosave], - }); + const editor = await createTestEditor(); const dataFacade = editor.plugins.get(DataFacade); controller.init(editor); expect(controller).toHaveProperty("delegating", true); @@ -117,19 +104,20 @@ describe("DataFacadeController", () => { // -----------------------------------------------------------------[ Init ] describe("init", () => { - it("should be possible to bind to editor even without DataFacade plugin installed", () => { + it("should be possible to bind to editor even without DataFacade plugin installed", async () => { const controller = new DataFacadeController(); - const editor = new DummyEditor(); + const editor = await createTestEditor(); controller.init(editor); expect(controller).toHaveProperty("editor", editor); }); - it("should propagate any already set data", () => { - const dataFixture = "DATA"; + it("should propagate any already set data", async () => { + const dataFixture = "

    DATA

    "; const controller = new DataFacadeController(); - const editor = new DummyEditor(); + const editor = await createTestEditor(); controller.setData(dataFixture); + editor.data.set = jest.fn(); controller.init(editor); - expect(editor.data.get()).toEqual(dataFixture); + expect(editor.data.set).toHaveBeenCalledWith(dataFixture, {}); }); }); @@ -138,26 +126,26 @@ describe("DataFacadeController", () => { describe("getData/setData", () => { describe("General Use Cases", () => { it("should cache data if not bound to editor instance already", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const controller = new DataFacadeController(); controller.setData(dataFixture); expect(controller.getData()).toEqual(dataFixture); }); - it("should propagate data set if bound to editor instance", () => { - const dataFixture = "DATA"; - const editor = new DummyEditor(); + it("should propagate data set if bound to editor instance", async () => { + const dataFixture = "

    DATA

    "; + const editor = await createTestEditor(); const controller = new DataFacadeController(editor); + editor.data.set = jest.fn(); controller.setData(dataFixture); expect(controller.getData()).toEqual(dataFixture); - expect(editor.data.get()).toEqual(dataFixture); + expect(editor.data.set).toHaveBeenCalledWith(dataFixture, {}); }); - it("should read data directly, if none cached", () => { - const dataFixture = "DATA"; - const editor = new DummyEditor(); + it("should read data directly, if none cached", async () => { + const dataFixture = "

    Some text.

    "; + const editor = await createTestEditor(); const controller = new DataFacadeController(editor); - // Similar to: There was some other way, that provided the initial data. - editor.simulateEditorialUpdate(dataFixture); + simulateEditorialUpdate(dataFixture, editor); expect(controller.getData()).toEqual(dataFixture); expect(editor.data.get()).toEqual(dataFixture); }); @@ -168,8 +156,8 @@ describe("DataFacadeController", () => { ${"none"} | ${" DATA "} | ${" DATA "} `( "[$#] should ignore options in bound mode but without editorial actions applied (trim = $trim)", - ({ trim, data, expected }: { trim: "empty" | "none"; data: string; expected: string }) => { - const editor = new DummyEditor(); + async ({ trim, data, expected }: { trim: "empty" | "none"; data: string; expected: string }) => { + const editor = await createTestEditor(); const controller = new DataFacadeController(editor); controller.setData(data); expect( @@ -180,17 +168,18 @@ describe("DataFacadeController", () => { }, ); it.each` - trim | data | expected - ${"empty"} | ${" DATA "} | ${"DATA"} - ${"none"} | ${" DATA "} | ${" DATA "} + trim | data | expected + ${"empty"} | ${"

    DATA

    "} | ${"

    DATA

    "} + ${"empty"} | ${"

     

    "} | ${""} + ${"none"} | ${"

     

    "} | ${"

     

    "} `( "[$#] should forward options in bound mode when editorial changes got applied (trim = $trim)", - ({ trim, data, expected }: { trim: "empty" | "none"; data: string; expected: string }) => { + async ({ trim, data, expected }: { trim: "empty" | "none"; data: string; expected: string }) => { const dataSet = "originalData"; - const editor = new DummyEditor(); + const editor = await createTestEditor(); const controller = new DataFacadeController(editor); controller.setData(dataSet); - editor.simulateEditorialUpdate(data); + simulateEditorialUpdate(data, editor); expect( controller.getData({ trim, @@ -201,7 +190,7 @@ describe("DataFacadeController", () => { }); describe("Multi-Root Support", () => { it("should respect available rootName in unbound mode", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const rootName = "ROOT"; const controller = new DataFacadeController(); controller.setData({ @@ -233,7 +222,7 @@ describe("DataFacadeController", () => { * multi-root-editing. */ it("should simulate data retrieval failure on unavailable rootName in cache", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const rootName = "ROOT"; const controller = new DataFacadeController(); const callToFail = () => @@ -274,13 +263,13 @@ describe("DataFacadeController", () => { }); }); describe("Main Use Cases", () => { - it("should prefer original data on no editorial change (main use case)", () => { - const dataFixture = "DATA"; + it("should prefer original data on no editorial change (main use case)", async () => { + const dataFixture = "

    DATA

    "; const internallyNormalizedData = dataFixture.toLowerCase(); - const editor = new DummyEditor(); + const editor = await createTestEditor(); const controller = new DataFacadeController(editor); controller.setData(dataFixture); - editor.simulateDataReformat(internallyNormalizedData); + simulateDataReformat(internallyNormalizedData, editor); // Precondition check that our simulated change works. expect(editor.data.get()).toEqual(internallyNormalizedData); @@ -288,13 +277,13 @@ describe("DataFacadeController", () => { // No version change? Provide the original data. expect(controller.getData()).toEqual(dataFixture); }); - it("should prefer data as result from editing (main use case)", () => { - const dataFixture = "DATA"; + it("should prefer data as result from editing (main use case)", async () => { + const dataFixture = "

    DATA

    "; const editorialData = dataFixture.toLowerCase(); - const editor = new DummyEditor(); + const editor = await createTestEditor(); const controller = new DataFacadeController(editor); controller.setData(dataFixture); - editor.simulateEditorialUpdate(editorialData); + simulateEditorialUpdate(editorialData, editor); // Precondition check that our simulated change works. expect(editor.data.get()).toEqual(editorialData); @@ -310,14 +299,14 @@ describe("DataFacadeController", () => { ${"unbound"} ${"bound"} `("[$#] Editor Binding: $editorBinding", ({ editorBinding }: { editorBinding: "unbound" | "bound" }) => { - let editor: DummyEditor | undefined; - beforeEach(() => { + let editor: Editor | undefined; + beforeEach(async () => { if (editorBinding === "bound") { - editor = new DummyEditor(); + editor = await createTestEditor(); } }); it("should provide data on context match", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const contextOnSet = "document/1"; const contextOnGet = contextOnSet; const controller = new DataFacadeController(editor); @@ -331,7 +320,7 @@ describe("DataFacadeController", () => { ).toEqual(dataFixture); }); it("should fail providing data if not specified when setting data", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const contextOnGet = "document/1"; const controller = new DataFacadeController(editor); controller.setData(dataFixture); @@ -342,7 +331,7 @@ describe("DataFacadeController", () => { ).toThrow(ContextMismatchError); }); it("should fail providing data if not specified when getting data", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const contextOnSet = "document/1"; const controller = new DataFacadeController(editor); controller.setData(dataFixture, { @@ -351,7 +340,7 @@ describe("DataFacadeController", () => { expect(() => controller.getData()).toThrow(ContextMismatchError); }); it("should fail providing data if contexts on set and get do not match", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const contextOnSet = "document/1"; const contextOnGet = "document/2"; const controller = new DataFacadeController(editor); @@ -366,7 +355,7 @@ describe("DataFacadeController", () => { }); (editorBinding === "bound" ? describe : describe.skip)("Bound Mode", () => { it("should respect context also when getting data as result of editorial changes (same context scenario)", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const editedDataFixture = dataFixture.toLowerCase(); const contextOnSet = "document/1"; const contextOnGet = contextOnSet; @@ -374,7 +363,7 @@ describe("DataFacadeController", () => { controller.setData(dataFixture, { context: contextOnSet, }); - editor?.simulateEditorialUpdate(editedDataFixture); + editor && simulateEditorialUpdate(editedDataFixture, editor); expect( controller.getData({ context: contextOnGet, @@ -382,7 +371,7 @@ describe("DataFacadeController", () => { ).toEqual(editedDataFixture); }); it("should respect context also when getting data as result of editorial changes (expected failure due to different context)", () => { - const dataFixture = "DATA"; + const dataFixture = "

    DATA

    "; const editedDataFixture = dataFixture.toLowerCase(); const contextOnSet = "document/1"; const contextOnGet = "document/2"; @@ -390,7 +379,7 @@ describe("DataFacadeController", () => { controller.setData(dataFixture, { context: contextOnSet, }); - editor?.simulateEditorialUpdate(editedDataFixture); + editor && simulateEditorialUpdate(editedDataFixture, editor); expect(() => controller.getData({ context: contextOnGet, diff --git a/packages/ckeditor5-data-facade/__tests__/helpers/TestEditor.ts b/packages/ckeditor5-data-facade/__tests__/helpers/TestEditor.ts new file mode 100644 index 000000000..f09e252cd --- /dev/null +++ b/packages/ckeditor5-data-facade/__tests__/helpers/TestEditor.ts @@ -0,0 +1,83 @@ +import { html } from "./index.html"; +import { + Autosave, + Bold, + Italic, + Strikethrough, + Underline, + ClassicEditor, + Essentials, + Heading, + Paragraph, + SourceEditing, + AutoLink, + Link, + Autoformat, + BlockQuote, + CodeBlock, + List, + ListProperties, + PasteFromOffice, + RemoveFormat, + Indent, + FontColor, + FontSize, + AutoImage, + Base64UploadAdapter, + EditorConfig, +} from "ckeditor5"; +import { DataFacade } from "../../src"; + +export const allPlugins = [ + AutoImage, + AutoLink, + Autoformat, + Autosave, + Base64UploadAdapter, + BlockQuote, + Bold, + CodeBlock, + DataFacade, + List, + ListProperties, + Essentials, + FontColor, + FontSize, + Heading, + Indent, + Italic, + Link, + Paragraph, + PasteFromOffice, + RemoveFormat, + SourceEditing, + Strikethrough, + Underline, +]; + +export const completeToolbar = [ + "undo", + "redo", + "heading", + "bold", + "italic", + "underline", + "strikethrough", + "fontSize", + "fontColor", + "removeFormat", +]; + +export const prepareDocument = (doc: Document) => { + doc.body.innerHTML = html; +}; +export const createTestEditor = async ( + elementId = "main", + plugins = allPlugins, + toolbar = completeToolbar, + config: Omit = {}, +) => { + const element = document.getElementById(elementId); + if (!element) throw new Error(`Element with id '${elementId}' not found.`); + return ClassicEditor.create(element, { ...config, plugins, toolbar }); +}; diff --git a/packages/ckeditor5-data-facade/__tests__/helpers/index.html.ts b/packages/ckeditor5-data-facade/__tests__/helpers/index.html.ts new file mode 100644 index 000000000..6bcf3e86f --- /dev/null +++ b/packages/ckeditor5-data-facade/__tests__/helpers/index.html.ts @@ -0,0 +1,13 @@ +export const html = ` + + + + + + Test Editor + + +
    +
    + +`; diff --git a/packages/ckeditor5-data-facade/jest.config.cjs b/packages/ckeditor5-data-facade/jest.config.cjs index 208f377fa..c6fccc936 100644 --- a/packages/ckeditor5-data-facade/jest.config.cjs +++ b/packages/ckeditor5-data-facade/jest.config.cjs @@ -1,3 +1,6 @@ const jestConfig = require("@coremedia-internal/ckeditor5-jest-test-helpers/shared-jest.config.js"); -module.exports = { ...jestConfig }; +module.exports = { + ...jestConfig, + setupFiles: ["/jest.setup.ts"] +}; diff --git a/packages/ckeditor5-data-facade/jest.setup.ts b/packages/ckeditor5-data-facade/jest.setup.ts new file mode 100644 index 000000000..cc17fbf62 --- /dev/null +++ b/packages/ckeditor5-data-facade/jest.setup.ts @@ -0,0 +1,11 @@ +// jsdom does not yet provide createObjectURL: https://github.com/jsdom/jsdom/issues/1721 +// @ts-ignore +URL.createObjectURL = jest.fn(); +// @ts-ignore +global.window.ResizeObserver = class { + observe() {} + + unobserve() {} + + disconnect() {} +}; diff --git a/packages/ckeditor5-data-facade/src/DataFacadeController.ts b/packages/ckeditor5-data-facade/src/DataFacadeController.ts index 8d347b699..b0fbd5b09 100644 --- a/packages/ckeditor5-data-facade/src/DataFacadeController.ts +++ b/packages/ckeditor5-data-facade/src/DataFacadeController.ts @@ -174,7 +174,6 @@ export class DataFacadeController implements DataApi { * forward to the existing DataFacadeController bound to CKEditor via * DataFacade plugin. */ - this.#initiallyPropagateDataToDelegate(boundDataFacadeController); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53501f3a4..ce338e175 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -994,7 +994,7 @@ importers: version: 29.7.0 '@types/jest': specifier: ^29.5.12 - version: 29.5.12 + version: 29.5.14 ckeditor5: specifier: ^42.0.2 version: 42.0.2(patch_hash=e3wvqnjogfwavdpitrzg5zqxpm) @@ -2617,6 +2617,9 @@ packages: '@types/jest@29.5.12': resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} @@ -8179,6 +8182,11 @@ snapshots: expect: 29.7.0 pretty-format: 29.7.0 + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + '@types/jsdom@20.0.1': dependencies: '@types/node': 20.16.5 From 2792f6df8d7414cab0ebd86e07bbb9a17d0273a7 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Tue, 29 Oct 2024 13:40:50 +0100 Subject: [PATCH 09/43] fix filename + fix lint + remove old dep + remove useFakeTimers --- itest/jest.local.js | 2 +- .../src/commands/OpenInTabCommand.ts | 2 +- .../__tests__/content/MockContentDisplayService.test.ts | 3 --- .../ckeditor5-coremedia-studio-integration-mock/package.json | 1 - 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/itest/jest.local.js b/itest/jest.local.js index 8d195c115..7cbca0fda 100644 --- a/itest/jest.local.js +++ b/itest/jest.local.js @@ -1,4 +1,4 @@ -const jestConfig = require("./jest.config.js"); +const jestConfig = require("./jest.config.cjs"); const localPlaywrightConfig = require("./jest-playwright.local.js"); module.exports = { diff --git a/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts b/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts index 90a639099..59626c3f8 100644 --- a/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts +++ b/packages/ckeditor5-coremedia-content/src/commands/OpenInTabCommand.ts @@ -3,7 +3,7 @@ import { isModelUriPath, isUriPath, requireContentUriPath, - UriPath + UriPath, } from "@coremedia/ckeditor5-coremedia-studio-integration"; import { LoggerProvider } from "@coremedia/ckeditor5-logging"; import { canBeOpenedInTab, openEntitiesInTabs, OpenEntitiesInTabsResult } from "../OpenInTab"; diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/MockContentDisplayService.test.ts b/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/MockContentDisplayService.test.ts index 16b79bbd8..2b3555196 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/MockContentDisplayService.test.ts +++ b/packages/ckeditor5-coremedia-studio-integration-mock/__tests__/content/MockContentDisplayService.test.ts @@ -3,9 +3,6 @@ import { createContentDisplayServiceDescriptor } from "@coremedia/ckeditor5-core import MockContentDisplayService from "../../src/content/MockContentDisplayService"; import { testShouldRetrieveValuesThat } from "./ObservableTestUtil"; import { first } from "rxjs/operators"; -import { jest } from "@jest/globals"; - -jest.useFakeTimers(); describe("MockContentDisplayService", () => { describe("serviceAgent Integration", () => { diff --git a/packages/ckeditor5-coremedia-studio-integration-mock/package.json b/packages/ckeditor5-coremedia-studio-integration-mock/package.json index 1c91900be..6d1700075 100644 --- a/packages/ckeditor5-coremedia-studio-integration-mock/package.json +++ b/packages/ckeditor5-coremedia-studio-integration-mock/package.json @@ -57,7 +57,6 @@ "@jest/globals": "^29.7.0", "@types/jest": "^29.5.12", "ckeditor5": "^42.0.2", - "@ckeditor/ckeditor5-core": "^42.0.2", "jest": "^29.7.0", "jest-each": "^29.7.0", "jest-xml-matcher": "^1.2.0", From d0ac0e6c9c6a04d017f1671af326da7e232f3906 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Tue, 29 Oct 2024 13:48:38 +0100 Subject: [PATCH 10/43] remove all useFakeTimers --- itest/src/Differencing.test.ts | 3 --- .../__tests__/integrations/XDiffElements.test.ts | 3 --- .../__tests__/compatibility/v10/ToDataProcessor.test.ts | 3 --- .../__tests__/compatibility/v10/rules/Anchor.test.ts | 3 --- .../__tests__/compatibility/v10/rules/Block.test.ts | 3 --- .../__tests__/compatibility/v10/rules/Heading.test.ts | 3 --- .../__tests__/sanitation/RichTextSanitizer.test.ts | 3 --- .../__tests__/DataFacadeController.test.ts | 2 -- 8 files changed, 23 deletions(-) diff --git a/itest/src/Differencing.test.ts b/itest/src/Differencing.test.ts index 86d9d17f3..76e8fd22b 100644 --- a/itest/src/Differencing.test.ts +++ b/itest/src/Differencing.test.ts @@ -9,9 +9,6 @@ import { } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import "./expect/Expectations"; import { PNG_BLUE_240x135 } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; -import { jest } from "@jest/globals"; - -jest.useFakeTimers(); const xdiff = new Differencing(); diff --git a/packages/ckeditor5-coremedia-differencing/__tests__/integrations/XDiffElements.test.ts b/packages/ckeditor5-coremedia-differencing/__tests__/integrations/XDiffElements.test.ts index 0296abca5..441096525 100644 --- a/packages/ckeditor5-coremedia-differencing/__tests__/integrations/XDiffElements.test.ts +++ b/packages/ckeditor5-coremedia-differencing/__tests__/integrations/XDiffElements.test.ts @@ -2,9 +2,6 @@ import * as aut from "../../src/integrations/XDiffElements"; import { blockquote, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { TestDirection, toData, toView } from "./TestDirection"; import { RulesTester } from "./RulesTester"; -import { jest } from "@jest/globals"; - -jest.useFakeTimers(); describe("XDiffElements", () => { const ruleConfigurations = [aut.xDiffElements]; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts index bd90a5f9f..8749ffb49 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/ToDataProcessor.test.ts @@ -5,9 +5,6 @@ import ToDataProcessor from "../../../src/ToDataProcessor"; import { Editor } from "ckeditor5"; import { HtmlFilter } from "@coremedia/ckeditor5-dataprocessor-support"; import { getV10Config } from "./Utils"; -import { jest } from "@jest/globals"; - -jest.useFakeTimers(); const EXECUTION_REPETITIONS = 100; const FIBONACCI_INDEX_FROM = 1; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Anchor.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Anchor.test.ts index 4f2180ef8..4db36b844 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Anchor.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Anchor.test.ts @@ -1,9 +1,6 @@ /* eslint @typescript-eslint/naming-convention: off */ import { allDataProcessingTests, DataProcessingTestCase, Direction } from "../DataDrivenTests"; -import { jest } from "@jest/globals"; - -jest.useFakeTimers(); // noinspection HttpUrlsUsage const ns_richtext = "http://www.coremedia.com/2003/richtext-1.0"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Block.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Block.test.ts index f742bc567..af0bfa4f8 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Block.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Block.test.ts @@ -1,8 +1,5 @@ import { allDataProcessingTests, DataProcessingTestCase, Direction } from "../DataDrivenTests"; import { flatten } from "../Utils"; -import { jest } from "@jest/globals"; - -jest.useFakeTimers(); // noinspection HttpUrlsUsage const ns_richtext = "http://www.coremedia.com/2003/richtext-1.0"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Heading.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Heading.test.ts index b44d4a250..ebfd8abd0 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Heading.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/compatibility/v10/rules/Heading.test.ts @@ -1,8 +1,5 @@ import { allDataProcessingTests, DataProcessingTestCase, Direction } from "../DataDrivenTests"; import { flatten } from "../Utils"; -import { jest } from "@jest/globals"; - -jest.useFakeTimers(); // noinspection HttpUrlsUsage const ns_richtext = "http://www.coremedia.com/2003/richtext-1.0"; diff --git a/packages/ckeditor5-coremedia-richtext/__tests__/sanitation/RichTextSanitizer.test.ts b/packages/ckeditor5-coremedia-richtext/__tests__/sanitation/RichTextSanitizer.test.ts index 8fb976979..2d4269397 100644 --- a/packages/ckeditor5-coremedia-richtext/__tests__/sanitation/RichTextSanitizer.test.ts +++ b/packages/ckeditor5-coremedia-richtext/__tests__/sanitation/RichTextSanitizer.test.ts @@ -26,9 +26,6 @@ import { import { sanitationListener } from "./TestSanitationListener"; import { parseXml } from "./XmlTestUtils"; import { expectSanitationResult } from "./ExpectSanitationResult"; -import { jest } from "@jest/globals"; - -jest.useFakeTimers(); export const createRichTextSanitizer = (strictness: Strictness = defaultStrictness): RichTextSanitizer => new RichTextSanitizer(strictness, sanitationListener); diff --git a/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts b/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts index 800435e75..a6d3d690b 100644 --- a/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts +++ b/packages/ckeditor5-data-facade/__tests__/DataFacadeController.test.ts @@ -3,8 +3,6 @@ import { CKEditorError, Editor } from "ckeditor5"; import { jest } from "@jest/globals"; import { createTestEditor, prepareDocument } from "./helpers/TestEditor"; -jest.useFakeTimers(); - /** * Simulates an internal change to the data (like reordering attributes). * Similar to setting data, but skipping version update. From f54fb6e66dd26d4200bc4e3cfde027c6fd6dc3d4 Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Tue, 29 Oct 2024 13:49:11 +0100 Subject: [PATCH 11/43] update pnpm-lockk --- pnpm-lock.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce338e175..f456adc97 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -939,9 +939,6 @@ importers: '@babel/core': specifier: ^7.24.4 version: 7.25.2 - '@ckeditor/ckeditor5-core': - specifier: ^42.0.2 - version: 42.0.2 '@coremedia-internal/ckeditor5-babel-config': specifier: ^1.0.0 version: link:../ckeditor5-babel-config From 3817e83d46c847f325236b0432ee386becbebeba Mon Sep 17 00:00:00 2001 From: Jens Meisner Date: Thu, 14 Nov 2024 08:11:04 +0100 Subject: [PATCH 12/43] fix playwright tests by avoiding imports which assume to be in a browser --- itest/src/BlocklistCollapsed.test.ts | 3 +- itest/src/Differencing.test.ts | 2 +- itest/src/DragDrop.test.ts | 15 ++-- itest/src/Images.test.ts | 9 +-- itest/src/MockFixtures.ts | 70 +++++++++++++++++++ itest/src/PasteButton.test.ts | 9 +-- itest/src/aut/MockContentPluginWrapper.ts | 6 +- .../aut/MockExternalContentPluginWrapper.ts | 9 ++- .../src/aut/MockInputExamplePluginWrapper.ts | 5 +- .../aut/services/BlocklistServiceWrapper.ts | 6 +- .../aut/services/WorkAreaServiceWrapper.ts | 2 +- .../src/RichTextDOM.ts | 15 ++-- .../src/richtext/ContentLinkData.ts | 10 +-- .../src/richtext/LinkTargetData.ts | 12 ++-- .../ckeditor5-coremedia-link/src/index.ts | 1 + 15 files changed, 118 insertions(+), 56 deletions(-) create mode 100644 itest/src/MockFixtures.ts diff --git a/itest/src/BlocklistCollapsed.test.ts b/itest/src/BlocklistCollapsed.test.ts index 72e15210e..d7d267baf 100644 --- a/itest/src/BlocklistCollapsed.test.ts +++ b/itest/src/BlocklistCollapsed.test.ts @@ -1,4 +1,3 @@ -import { MockServiceAgentPluginWrapper } from "./aut/services/MockServiceAgentPluginWrapper"; import { p, richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { ApplicationWrapper } from "./aut/ApplicationWrapper"; import { clickModifiers } from "./aria/KeyboardUtils"; @@ -29,7 +28,7 @@ describe("Blocklist", () => { describe("Blocklist", () => { it("Collapsed selection shows balloon", async () => { const blockedWord = "thisisablockedword"; - const serviceAgent: MockServiceAgentPluginWrapper = application.mockServiceAgent; + const serviceAgent = application.mockServiceAgent; await serviceAgent.getBlocklistServiceWrapper().addWord(blockedWord); const data = richtext(`${p("Hello World!")}${p(blockedWord)}${p("This is an example text for test purposes.")}`); diff --git a/itest/src/Differencing.test.ts b/itest/src/Differencing.test.ts index 76e8fd22b..c46a5b223 100644 --- a/itest/src/Differencing.test.ts +++ b/itest/src/Differencing.test.ts @@ -8,7 +8,7 @@ import { blobReference, } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import "./expect/Expectations"; -import { PNG_BLUE_240x135 } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import { PNG_BLUE_240x135 } from "./MockFixtures"; const xdiff = new Differencing(); diff --git a/itest/src/DragDrop.test.ts b/itest/src/DragDrop.test.ts index e711bb816..9f86488d5 100644 --- a/itest/src/DragDrop.test.ts +++ b/itest/src/DragDrop.test.ts @@ -1,17 +1,18 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; import { richtext } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import "./expect/Expectations"; -import { +import type { InputExampleElement, MockContentConfig, - PNG_BLUE_240x135, - PNG_GREEN_240x135, - PNG_RED_240x135, -, MockExternalContent } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; + MockExternalContent, +} from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import { PNG_BLUE_240x135, PNG_GREEN_240x135, PNG_RED_240x135 } from "./MockFixtures"; import waitForExpect from "wait-for-expect"; -import { IsDroppableEvaluationResult } from "@coremedia/ckeditor5-coremedia-studio-integration"; +import type { + IsDroppableEvaluationResult, + IsLinkableEvaluationResult, +} from "@coremedia/ckeditor5-coremedia-studio-integration"; import WindowBrowserAccessor from "./browser/WindowBrowserAccessor"; -import { IsLinkableEvaluationResult } from "@coremedia/ckeditor5-coremedia-studio-integration"; const oneLink: MockContentConfig[] = [ { diff --git a/itest/src/Images.test.ts b/itest/src/Images.test.ts index e04e2cbc0..bdaa3672b 100644 --- a/itest/src/Images.test.ts +++ b/itest/src/Images.test.ts @@ -1,9 +1,6 @@ import { ApplicationWrapper } from "./aut/ApplicationWrapper"; -import { - PNG_EMPTY_24x24, - PNG_LOCK_24x24, - PNG_RED_240x135, -, MockContentConfig } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import type { MockContentConfig } from "@coremedia/ckeditor5-coremedia-studio-integration-mock"; +import { PNG_EMPTY_24x24, PNG_LOCK_24x24, PNG_RED_240x135 } from "./MockFixtures"; import "./expect/Expectations"; import { ElementHandle } from "playwright-core"; import { @@ -12,7 +9,7 @@ import { img, p, richtext, - linkReference + linkReference, } from "@coremedia-internal/ckeditor5-coremedia-example-data"; import { MockServiceAgentPluginWrapper } from "./aut/services/MockServiceAgentPluginWrapper"; import { ClassicEditorWrapper } from "./aut/ClassicEditorWrapper"; diff --git a/itest/src/MockFixtures.ts b/itest/src/MockFixtures.ts new file mode 100644 index 000000000..08309eef0 --- /dev/null +++ b/itest/src/MockFixtures.ts @@ -0,0 +1,70 @@ +/* eslint @typescript-eslint/naming-convention: off */ + +/** + * Example Blob Fixture for 10×10 Red PNG. + */ +export const PNG_RED_10x10 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAQMAAAC3/F3+AAAAA1BMVEX/AAAZ4gk3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQIHWPACwAAHgAB95hMXAAAAABJRU5ErkJggg=="; +/** + * Example Blob Fixture for 240×135 Red PNG. + */ +export const PNG_RED_240x135 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAACHCAIAAACnEEO8AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAACB0RVh0VGl0bGUAUmVkIEltYWdlIEZpeHR1cmUgMjQww5cxMzV/6oVFAAABEklEQVR42u3SAQkAAAgEMbV/5zeGIFuE4zoFf4wEGBoMDYYGQ2NoMDQYGgwNhsbQYGgwNBgaDI2hwdBgaDA0GBpDg6HB0GBoMDSGBkODocHQYGgMDYYGQ4OhwdAYGgwNhgZDY2gwNBgaDA2GxtBgaDA0GBoMjaHB0GBoMDQYGkODocHQYGgwNIYGQ4OhwdBgaAwNhgZDg6HB0BgaDA2GBkODoTE0GBoMDYbG0GBoMDQYGgyNocHQYGgwNBgaQ4OhwdBgaDA0hgZDg6HB0GBoDA2GBkODocHQGBoMDYYGQ4OhMTQYGgwNhsbQYGgwNBgaDI2hwdBgaDA0GBpDg6HB0GBoMDSGBkODocHQYGgMDYaGMwvY/gIN7U7I3gAAAABJRU5ErkJggg=="; +/** + * Example Blob Fixture for 10×10 Green PNG. + */ +export const PNG_GREEN_10x10 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAQMAAAC3/F3+AAAAA1BMVEUA/wA0XsCoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQIHWPACwAAHgAB95hMXAAAAABJRU5ErkJggg=="; +/** + * Example Blob Fixture for 240×135 Green PNG. + */ +export const PNG_GREEN_240x135 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAACHCAIAAACnEEO8AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAACJ0RVh0VGl0bGUAR3JlZW4gSW1hZ2UgRml4dHVyZSAyNDDDlzEzNeoCT9oAAAESSURBVHja7dIBCQAACASx1/6dNYYgW4TjKhN4oyXA0GBoMDQYGkODocHQYGgwNIYGQ4OhwdBgaAwNhgZDg6HB0BgaDA2GBkODoTE0GBoMDYYGQ2NoMDQYGgwNhsbQYGgwNBgaQ4OhwdBgaDA0hgZDg6HB0GBoDA2GBkODocHQGBoMDYYGQ4OhMTQYGgwNhgZDY2gwNBgaDA2GxtBgaDA0GBoMjaHB0GBoMDSGBkODocHQYGgMDYYGQ4OhwdAYGgwNhgZDg6ExNBgaDA2GBkNjaDA0GBoMDYbG0GBoMDQYGgyNocHQYGgwNIYGQ4OhwdBgaAwNhgZDg6HB0BgaDA2GBkODoTE0GBoMDYYGQ2NoMDScWdf/Ag1zS0U/AAAAAElFTkSuQmCC"; +/** + * Example Blob Fixture for 10×10 Blue PNG. + */ +export const PNG_BLUE_10x10 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAQMAAAC3/F3+AAAAA1BMVEUAAP+KeNJXAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQIHWPACwAAHgAB95hMXAAAAABJRU5ErkJggg=="; +/** + * Example Blob Fixture for 240×135 Blue PNG. + */ +export const PNG_BLUE_240x135 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAACHCAIAAACnEEO8AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAACF0RVh0VGl0bGUAQmx1ZSBJbWFnZSBGaXh0dXJlIDI0MMOXMTM1kw6skwAAARNJREFUeNrt0gEJAAAIBLHX/p01hiBbhOMqmcAXLQGGBkODocHQGBoMDYYGQ4OhMTQYGgwNhgZDY2gwNBgaDA2GxtBgaDA0GBoMjaHB0GBoMDQYGkODocHQYGgwNIYGQ4OhwdAYGgwNhgZDg6ExNBgaDA2GBkNjaDA0GBoMDYbG0GBoMDQYGgyNocHQYGgwNBgaQ4OhwdBgaDA0hgZDg6HB0GBoDA2GBkODoTE0GBoMDYYGQ2NoMDQYGgwNhsbQYGgwNBgaDI2hwdBgaDA0GBpDg6HB0GBoMDSGBkODocHQYGgMDYYGQ4OhMTQYGgwNhgZDY2gwNBgaDA2GxtBgaDA0GBoMjaHB0GBoMDQYGkODoeHMAtcAAg2/P7w5AAAAAElFTkSuQmCC"; +/** + * Example Blob Fixture for 10×10 Gray PNG. + */ +export const PNG_GRAY_10x10 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKBAMAAAB/HNKOAAAAMFBMVEXIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgyCeFrAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAC0lEQVQIHWOgAAAAADwAAZFvo9AAAAAASUVORK5CYII="; +/** + * Example Blob Fixture for unreadable state as 24×24 lock-symbol PNG. + */ +export const PNG_LOCK_24x24 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAB90RVh0VGl0bGUATG9jayBJbWFnZSBGaXh0dXJlIDI0w5cyND+RntEAAAFYSURBVEiJ7ZUxq4JQGIYfL2kRBUK0tDZY0C9pcmlMpCIa+ymtTUKr0OCU/6ExCIuoxYZAcLMMvHe6LabhJYcLvdPhnPO+D+f7PjjCer3+Jkd95RkOUHh1IQxDlsslq9WKw+EAQLPZpNvtoqoqkiSl+oW0El0uF6bTKbvdDlmW6XQ6AGw2G3zfR1EUZrMZ9Xo9O+B+v6PrOvv9nslkQr/fRxTFx9lisWA+n6MoCoZhUCg8L0ZiDyzLwnEcxuMxg8HgEQ4giiLD4ZDRaMR2u8WyrMQXJAJs26ZaraJpWqJZ13UqlQq2bWcHnE4n2u12ahMlSaLVanE8HrMDgiCgVColGn9VLpcJgiA74F3KHRAb0zAM6fV6nM9nisUitVotNcDzPG63G41GA9M0Yz2LDW8URbiuC8D1en2sX8l1XaIoiu3//x58AB9ADgBBEP4c9syb+mW+Q7mX6AcWeH9EMzKhnwAAAABJRU5ErkJggg=="; +/** + * Example Blob Fixture for empty state as 24×24 symbol PNG. + */ +export const PNG_EMPTY_24x24 = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAACB0RVh0VGl0bGUARW1wdHkgSW1hZ2UgRml4dHVyZSAyNMOXMjRSzyF5AAABjklEQVRIidWUsYrCQBRFz0osJIiViKCIFv5AwEZSpLRMo1jkEyyENGKjtWBj5Q+k9QOsRCSIWitioSgWgoKmd7dYtFkTE0mKvdUMb949M+/NzNd8Pv8mQIWCNAcQ7AKXywXTNJlOp+x2O06nE+fzmWg0Si6XQ1EUVFUlEok4Ar7sStTtdjEMwzE5nU7T6/VIpVLeT/CQJEkUi0UymQyCIHA8HhkMBqzXa/b7PfV6HcMwCIfD3k4wHo9JJBLk8/k/sfv9TrPZZDgcAtDpdFAU5SXAtsmyLL80BwiFQqiq+pyvVis7m89vUTwed7XuY8Bms3mOs9msvwDLsuj3+wDEYjFkWfYPcL1e0XWd7XYLgK7riKLoD8A0TarVKovFAkEQaDQalEolx5y37wDgdrvRbrcZjUYAJJNJWq0WkiS9zXUFOBwOT/NyuUytVnv7RTzkuQeVSsW1+UcAr3JVIlEUKRQKAJ52Dw5/kV8KvESuALPZDE3T0DSNyWTiCeCqB5ZlsVwugd+X7EWBl+j/N/kHBzKDUUt0TnMAAAAASUVORK5CYII="; + +/** + * A content name containing several entities. + */ +export const CONTENT_NAME_CHALLENGE_ENTITIES = "<br>&"Ɯ"; +/** + * A content name with various charsets. + */ +export const CONTENT_NAME_CHALLENGE_CHARSETS = "年Ϩ"; +/** + * A content name with RTL characters. + */ +export const CONTENT_NAME_CHALLENGE_RTL = "عامعام"; +/** + * A content name, which challenges possible Cross-Site-Scripting-Attacks. + */ +export const CONTENT_NAME_CHALLENGE_XSS = `