From 3f6398cbed4eb9a916c0814ed9c2bf1dd6f0e81a Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 22 Apr 2026 23:02:51 +0000 Subject: [PATCH 001/108] Fix bump scripts --- packages/support/cldr-data-downloader/package.json | 2 +- packages/support/cldr-data/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/support/cldr-data-downloader/package.json b/packages/support/cldr-data-downloader/package.json index 4de9619309..759716aaf1 100644 --- a/packages/support/cldr-data-downloader/package.json +++ b/packages/support/cldr-data-downloader/package.json @@ -45,7 +45,7 @@ "build:pre:local-dependencies": "../../../scripts/npm/build-local-dependencies.sh", "build:pre:watch": "../../../scripts/npm/build-watch.sh", "build:run": "echo This package does not need to be built.", - "bump": "npm run bump:dev && npm run bump:prod && (npm audit fix || exit 0)", + "bump": "vg bump prod && vg bump dev && (npm audit fix || exit 0)", "eslint": "npm run precommit", "postversion": "../../../scripts/npm/postversion.sh", "precommit": "npm run precommit:eslint -- src", diff --git a/packages/support/cldr-data/package.json b/packages/support/cldr-data/package.json index bd99ff4780..43ce851a6b 100644 --- a/packages/support/cldr-data/package.json +++ b/packages/support/cldr-data/package.json @@ -45,7 +45,7 @@ "build:pre:local-dependencies": "../../../scripts/npm/build-local-dependencies.sh", "build:pre:watch": "../../../scripts/npm/build-watch.sh", "build:run": "node ./src/install.mjs && node ./src/patch.mjs && touch ./package.json", - "bump": "npm run bump:dev && npm run bump:prod && (npm audit fix || exit 0)", + "bump": "vg bump prod && vg bump dev && (npm audit fix || exit 0)", "eslint": "npm run precommit", "postversion": "../../../scripts/npm/postversion.sh", "precommit": "npm run precommit:eslint -- src", From 75d17098af39d77811c14c7ac09650590ec7201f Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 22 Apr 2026 23:11:57 +0000 Subject: [PATCH 002/108] Add local dependencies --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 44a83833c8..709db1dca9 100644 --- a/package.json +++ b/package.json @@ -223,6 +223,9 @@ "strip-ansi@7 dropped support of CommonJS" ] }, + "localDependencies": { + "@msinternal/vibe-grep": "development" + }, "devDependencies": { "@babel/plugin-transform-runtime": "^7.28.5", "@babel/preset-env": "^7.28.5", From 1792eb3dd4dd9512e59944b01715ca21a6293a54 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 22 Apr 2026 23:22:30 +0000 Subject: [PATCH 003/108] Pin react and react-dom --- packages/api-graph/package.json | 7 ++++++- packages/api-middleware/package.json | 4 ++++ packages/api/package.json | 8 ++++++++ packages/bundle/package.json | 8 ++++++++ packages/component/package.json | 8 ++++++++ packages/debug-theme/package.json | 6 ++++++ packages/fluent-theme/package.json | 4 ++++ packages/react-hooks/package.json | 6 ++++++ packages/react-valibot/package.json | 4 ++++ packages/redux-store/package.json | 4 ++++ packages/styles/package.json | 7 ++++++- 11 files changed, 64 insertions(+), 2 deletions(-) diff --git a/packages/api-graph/package.json b/packages/api-graph/package.json index dddf6deb02..59c256bc58 100644 --- a/packages/api-graph/package.json +++ b/packages/api-graph/package.json @@ -47,7 +47,12 @@ "preversion": "../../scripts/npm/preversion.sh", "start": "../../scripts/npm/notify-build.sh \"src\" \"../react-hooks/package.json\" \"../react-valibot/package.json\" \"../core/package.json\"" }, - "pinDependencies": {}, + "pinDependencies": { + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" + ] + }, "localDependencies": { "@msinternal/botframework-webchat-base": "development", "@msinternal/botframework-webchat-react-hooks": "development", diff --git a/packages/api-middleware/package.json b/packages/api-middleware/package.json index 9b4b1aaf94..32f0d45af7 100644 --- a/packages/api-middleware/package.json +++ b/packages/api-middleware/package.json @@ -72,6 +72,10 @@ "start": "../../scripts/npm/notify-build.sh \"src\" \"../react-hooks/package.json\" \"../react-valibot/package.json\"" }, "pinDependencies": { + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" + ], "react-wrap-with": [ "0.1.0", "0.2.0 is having compatibility issues with preact@10.25.4" diff --git a/packages/api/package.json b/packages/api/package.json index 4ce78edd2c..b7306fcee0 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -102,6 +102,14 @@ "16", "react@16.8.6 is our baseline" ], + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" + ], + "react-dom": [ + "16.8.6", + "using react-dom@16.8.6 to make sure this is the minimum supported version" + ], "react-redux": [ "7", "react-redux@>7 requires newer version of React" diff --git a/packages/bundle/package.json b/packages/bundle/package.json index 16140c45f9..5ab2f1b69d 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -139,6 +139,14 @@ "3.0.6", "we should bump manually" ], + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" + ], + "react-dom": [ + "16.8.6", + "using react-dom@16.8.6 to make sure this is the minimum supported version" + ], "shiki": [ "2", "tsd is complaining about shiki@3 lack of typing for named exports, https://arethetypeswrong.github.io/?p=shiki%403.9.1 says the same thing" diff --git a/packages/component/package.json b/packages/component/package.json index bd3c4d1c6b..9e7de56239 100644 --- a/packages/component/package.json +++ b/packages/component/package.json @@ -112,6 +112,14 @@ "13", "markdown-it@14.1.0 has module field and it is breaking Webpack 4 because cross loading CJS and ESM" ], + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" + ], + "react-dom": [ + "16.8.6", + "using react-dom@16.8.6 to make sure this is the minimum supported version" + ], "react-redux": [ "7" ], diff --git a/packages/debug-theme/package.json b/packages/debug-theme/package.json index 24903ef86f..0349e5aa12 100644 --- a/packages/debug-theme/package.json +++ b/packages/debug-theme/package.json @@ -51,6 +51,12 @@ "preversion": "../../scripts/npm/preversion.sh", "start": "../../scripts/npm/notify-build.sh \"src\" \"../component/package.json\"" }, + "pinDependencies": { + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" + ] + }, "localDependencies": { "botframework-webchat-api": "production", "botframework-webchat-component": "production" diff --git a/packages/fluent-theme/package.json b/packages/fluent-theme/package.json index 1e0ad0e943..fb349573fc 100644 --- a/packages/fluent-theme/package.json +++ b/packages/fluent-theme/package.json @@ -66,6 +66,10 @@ "@types/react": [ "16", "react@16.8.6 is our baseline" + ], + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" ] }, "localDependencies": { diff --git a/packages/react-hooks/package.json b/packages/react-hooks/package.json index a8ca025a54..2ec04a7dd7 100644 --- a/packages/react-hooks/package.json +++ b/packages/react-hooks/package.json @@ -51,6 +51,12 @@ "preversion": "../../scripts/npm/preversion.sh", "start": "../../scripts/npm/notify-build.sh \"src\" \"../base/package.json\"" }, + "pinDependencies": { + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" + ] + }, "localDependencies": { "@msinternal/botframework-webchat-base": "development" }, diff --git a/packages/react-valibot/package.json b/packages/react-valibot/package.json index 6fa2c17b48..7dca3aafd1 100644 --- a/packages/react-valibot/package.json +++ b/packages/react-valibot/package.json @@ -54,6 +54,10 @@ "@types/react": [ "16", "react@16.8.6 is our baseline" + ], + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" ] }, "localDependencies": { diff --git a/packages/redux-store/package.json b/packages/redux-store/package.json index be0980d16d..76556929b7 100644 --- a/packages/redux-store/package.json +++ b/packages/redux-store/package.json @@ -49,6 +49,10 @@ "@types/react": [ "16", "react@16.8.6 is our baseline" + ], + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" ] }, "localDependencies": { diff --git a/packages/styles/package.json b/packages/styles/package.json index f9dd4c0674..47e9e3e0ea 100644 --- a/packages/styles/package.json +++ b/packages/styles/package.json @@ -70,7 +70,12 @@ "preversion": "../../scripts/npm/preversion.sh", "start": "../../scripts/npm/notify-build.sh \"src\" \"../base/package.json\"" }, - "pinDependencies": {}, + "pinDependencies": { + "react": [ + "16.8.6", + "using react@16.8.6 to make sure this is the minimum supported version" + ] + }, "localDependencies": { "@msinternal/botframework-webchat-base": "development", "@msinternal/botframework-webchat-tsconfig": "development" From 0ebcb620e384019e48a5f22433f918c8ce8bc157 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 22 Apr 2026 23:44:15 +0000 Subject: [PATCH 004/108] Bump deps --- CHANGELOG.md | 58 +- package-lock.json | 11692 +++++++++++++--- package.json | 56 +- packages/api-graph/package.json | 6 +- packages/api-middleware/package.json | 8 +- packages/api/package.json | 16 +- packages/base/package.json | 8 +- packages/bundle/package.json | 26 +- packages/component/package.json | 16 +- packages/core-debug-api/package.json | 2 +- packages/core-graph/package.json | 12 +- packages/core/package.json | 18 +- packages/directlinespeech/package.json | 24 +- packages/fluent-theme/package.json | 6 +- packages/isomorphic-react-dom/package.json | 6 +- packages/isomorphic-react/package.json | 6 +- packages/react-valibot/package.json | 2 +- packages/redux-store/package.json | 4 +- packages/repack/adaptivecards/package.json | 2 +- packages/repack/base64-js/package.json | 2 +- .../botframework-directlinejs/package.json | 2 +- .../repack/html-react-parser/package.json | 4 +- .../package.json | 11 +- packages/repack/react-dom/package.json | 2 +- .../repack/react-dom@baseline/package.json | 2 +- packages/repack/react-dom@umd/package.json | 2 +- packages/repack/react-is/package.json | 2 +- packages/repack/react/package.json | 2 +- packages/repack/react@baseline/package.json | 2 +- packages/repack/react@umd/package.json | 2 +- packages/styles/package.json | 8 +- .../support/cldr-data-downloader/package.json | 2 +- packages/support/cldr-data/package.json | 2 +- packages/test/harness/package.json | 12 +- packages/test/page-object/package.json | 8 +- packages/test/web-server/package.json | 2 +- packages/vibe-grep/package.json | 4 +- .../javascript/bot/package-lock.json | 91 +- .../javascript/bot/package.json | 6 +- .../javascript/web/package-lock.json | 30 +- .../javascript/web/package.json | 6 +- samples/04.api/e.piping-to-redux/package.json | 12 +- .../04.api/f.selectable-activity/package.json | 10 +- .../04.api/g.chat-send-history/package.json | 10 +- .../04.api/h.clear-after-idle/package.json | 10 +- .../a.minimizable-web-chat/package.json | 10 +- .../b.speech-ui/package.json | 14 +- .../c.smart-display/package.json | 18 +- .../06.recomposing-ui/d.plain-ui/package.json | 8 +- .../e.extending-ui/package.json | 8 +- samples/package-lock.json | 1289 +- 51 files changed, 10402 insertions(+), 3159 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f0db9993d..42ff46fb6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -187,28 +187,28 @@ Breaking changes in this release: - Activity "copy" button will use `outerHTML` and `textContent` for clipboard content, in PR [#5378](https://github.com/microsoft/BotFramework-WebChat/pull/5378), by [@compulim](https://github.com/compulim) - Enabled icon customization in Fluent theme through CSS variables, in PR [#5413](https://github.com/microsoft/BotFramework-WebChat/pull/5413), by [@OEvgeny](https://github.com/OEvgeny) - Reworked, enabled in Web Chat, in PR [#5502](https://github.com/microsoft/BotFramework-WebChat/pull/5502), by [@OEvgeny](https://github.com/OEvgeny) -- Bumped dependencies, by [@compulim](https://github.com/compulim) in PR [#5385](https://github.com/microsoft/BotFramework-WebChat/pull/5385), PR [#5400](https://github.com/microsoft/BotFramework-WebChat/pull/5400), PR [#5426](https://github.com/microsoft/BotFramework-WebChat/pull/5426), PR [#5427](https://github.com/microsoft/BotFramework-WebChat/pull/5427), PR [#5476](https://github.com/microsoft/BotFramework-WebChat/pull/5476), PR [#5516](https://github.com/microsoft/BotFramework-WebChat/pull/5516), PR [#5529](https://github.com/microsoft/BotFramework-WebChat/pull/5529), PR [#5532](https://github.com/microsoft/BotFramework-WebChat/pull/5532), PR [#5659](https://github.com/microsoft/BotFramework-WebChat/pull/5659), PR [#5661](https://github.com/microsoft/BotFramework-WebChat/pull/5661), and PR [#5768](https://github.com/microsoft/BotFramework-WebChat/pull/5768), by [@OEvgeny](https://github.com/OEvgeny) in PR [#5662](https://github.com/microsoft/BotFramework-WebChat/pull/5662) +- Bumped dependencies, by [@compulim](https://github.com/compulim) in PR [#5385](https://github.com/microsoft/BotFramework-WebChat/pull/5385), PR [#5400](https://github.com/microsoft/BotFramework-WebChat/pull/5400), PR [#5426](https://github.com/microsoft/BotFramework-WebChat/pull/5426), PR [#5427](https://github.com/microsoft/BotFramework-WebChat/pull/5427), PR [#5476](https://github.com/microsoft/BotFramework-WebChat/pull/5476), PR [#5516](https://github.com/microsoft/BotFramework-WebChat/pull/5516), PR [#5529](https://github.com/microsoft/BotFramework-WebChat/pull/5529), PR [#5532](https://github.com/microsoft/BotFramework-WebChat/pull/5532), PR [#5659](https://github.com/microsoft/BotFramework-WebChat/pull/5659), PR [#5661](https://github.com/microsoft/BotFramework-WebChat/pull/5661), PR [#5768](https://github.com/microsoft/BotFramework-WebChat/pull/5768), and PR [#XXX](https://github.com/microsoft/BotFramework-WebChat/pull/XXX), by [@OEvgeny](https://github.com/OEvgeny) in PR [#5662](https://github.com/microsoft/BotFramework-WebChat/pull/5662) - Production dependencies - - [`@babel/runtime@7.28.6`](https://npmjs.com/package/@babel/runtime/v/7.28.6) + - [`@babel/runtime@7.29.2`](https://npmjs.com/package/@babel/runtime/v/7.29.2) - [`@emotion/css@11.13.5`](https://npmjs.com/package/@emotion/css/v/11.13.5) - - [`@redux-devtools/extension@3.3.0`](https://npmjs.com/package/@redux-devtools/extension/v/3.3.0) + - [`@redux-devtools/extension@4.0.0`](https://npmjs.com/package/@redux-devtools/extension/v/4.0.0) - [`adaptivecards@3.0.5`](https://npmjs.com/package/adaptivecards/v/3.0.5) - [`botframework-directlinejs@0.15.8`](https://npmjs.com/package/botframework-directlinejs/v/0.15.8) - - [`core-js-pure@3.48.0`](https://npmjs.com/package/core-js-pure/v/3.48.0) - - [`core-js@3.48.0`](https://npmjs.com/package/core-js/v/3.48.0) + - [`core-js-pure@3.49.0`](https://npmjs.com/package/core-js-pure/v/3.49.0) + - [`core-js@3.49.0`](https://npmjs.com/package/core-js/v/3.49.0) - [`event-as-promise@2.0.1`](https://npmjs.com/package/event-as-promise/v/2.0.1) - [`globalize@1.7.1`](https://npmjs.com/package/globalize/v/1.7.1) - - [`html-react-parser@5.2.17`](https://npmjs.com/package/html-react-parser/v/5.2.17) + - [`html-react-parser@6.0.1`](https://npmjs.com/package/html-react-parser/v/6.0.1) - [`inject-meta-tag@0.1.0`](https://npmjs.com/package/inject-meta-tag/v/0.1.0) - [`iter-fest@0.3.1`](https://npmjs.com/package/iter-fest/v/0.3.1) - - [`katex@0.16.33`](https://npmjs.com/package/katex/v/0.16.33) + - [`katex@0.16.45`](https://npmjs.com/package/katex/v/0.16.45) - [`mdast-util-from-markdown@2.0.3`](https://npmjs.com/package/mdast-util-from-markdown/v/2.0.3) - [`merge-refs@2.0.0`](https://npmjs.com/package/merge-refs/v/2.0.0) - [`micromark-extension-gfm@3.0.0`](https://npmjs.com/package/micromark-extension-gfm/v/3.0.0) - [`micromark-util-character@2.1.1`](https://npmjs.com/package/micromark-util-character/v/2.1.1) - [`micromark-util-sanitize-uri@2.0.1`](https://npmjs.com/package/micromark-util-sanitize-uri/v/2.0.1) - [`micromark@4.0.2`](https://npmjs.com/package/micromark/v/4.0.2) - - [`microsoft-cognitiveservices-speech-sdk@1.48.0`](https://npmjs.com/package/microsoft-cognitiveservices-speech-sdk/v/1.48.0) + - [`microsoft-cognitiveservices-speech-sdk@1.49.0`](https://npmjs.com/package/microsoft-cognitiveservices-speech-sdk/v/1.49.0) - [`mime@4.1.0`](https://npmjs.com/package/mime/v/4.1.0) - [`punycode@2.3.1`](https://npmjs.com/package/punycode/v/2.3.1) - [`react-chain-of-responsibility@0.4.2`](https://npmjs.com/package/react-chain-of-responsibility/v/0.4.2) @@ -218,7 +218,7 @@ Breaking changes in this release: - [`react-scroll-to-bottom@4.2.1-main.53844f5`](https://npmjs.com/package/react-scroll-to-bottom/v/4.2.1-main.53844f5) - [`react-wrap-with@0.1.0`](https://npmjs.com/package/react-wrap-with/v/0.1.0) - [`redux-saga@1.4.2`](https://npmjs.com/package/redux-saga/v/1.4.2) - - [`sanitize-html@2.17.1`](https://npmjs.com/package/sanitize-html/v/2.17.1) + - [`sanitize-html@2.17.3`](https://npmjs.com/package/sanitize-html/v/2.17.3) - [`shiki@2.5.0`](https://npmjs.com/package/shiki/v/2.5.0) - [`tagged-tag@1.0.0`](https://npmjs.com/package/tagged-tag/v/1.0.0) - [`use-propagate@0.2.2`](https://npmjs.com/package/use-propagate/v/0.2.2) @@ -226,15 +226,15 @@ Breaking changes in this release: - [`use-ref-from@0.2.1`](https://npmjs.com/package/use-ref-from/v/0.2.1) - [`use-state-with-ref@0.2.1`](https://npmjs.com/package/use-state-with-ref/v/0.2.1) - [`uuid@8.3.2`](https://npmjs.com/package/uuid/v/8.3.2) - - [`valibot@1.2.0`](https://npmjs.com/package/valibot/v/1.2.0) + - [`valibot@1.3.1`](https://npmjs.com/package/valibot/v/1.3.1) - [`web-speech-cognitive-services@8.1.4`](https://npmjs.com/package/web-speech-cognitive-services/v/8.1.4) - Development dependencies - - [`@ast-grep/napi@0.41.0`](https://npmjs.com/package/@ast-grep/napi/v/0.41.0) + - [`@ast-grep/napi@0.42.1`](https://npmjs.com/package/@ast-grep/napi/v/0.42.1) - [`@babel/cli@7.28.6`](https://npmjs.com/package/@babel/cli/v/7.28.6) - [`@babel/core@7.29.0`](https://npmjs.com/package/@babel/core/v/7.29.0) - [`@babel/plugin-transform-runtime@7.29.0`](https://npmjs.com/package/@babel/plugin-transform-runtime/v/7.29.0) - [`@babel/plugin-transform-typescript@7.28.6`](https://npmjs.com/package/@babel/plugin-transform-typescript/v/7.28.6) - - [`@babel/preset-env@7.29.0`](https://npmjs.com/package/@babel/preset-env/v/7.29.0) + - [`@babel/preset-env@7.29.2`](https://npmjs.com/package/@babel/preset-env/v/7.29.2) - [`@babel/preset-react@7.28.5`](https://npmjs.com/package/@babel/preset-react/v/7.28.5) - [`@babel/preset-typescript@7.28.5`](https://npmjs.com/package/@babel/preset-typescript/v/7.28.5) - [`@biomejs/biome@2.3.10`](https://npmjs.com/package/@biomejs/biome/v/2.3.10) @@ -244,10 +244,10 @@ Breaking changes in this release: - [`@jridgewell/sourcemap-codec@1.5.5`](https://npmjs.com/package/@jridgewell/sourcemap-codec/v/1.5.5) - [`@testduet/given-when-then@0.1.0`](https://npmjs.com/package/@testduet/given-when-then/v/0.1.0) - [`@tsconfig/strictest@2.0.8`](https://npmjs.com/package/@tsconfig/strictest/v/2.0.8) - - [`@types/dom-speech-recognition@0.0.7`](https://npmjs.com/package/@types/dom-speech-recognition/v/0.0.7) + - [`@types/dom-speech-recognition@0.0.9`](https://npmjs.com/package/@types/dom-speech-recognition/v/0.0.9) - [`@types/jest@29.5.14`](https://npmjs.com/package/@types/jest/v/29.5.14) - [`@types/mdast@4.0.4`](https://npmjs.com/package/@types/mdast/v/4.0.4) - - [`@types/node@25.3.3`](https://npmjs.com/package/@types/node/v/25.3.3) + - [`@types/node@25.6.0`](https://npmjs.com/package/@types/node/v/25.6.0) - [`@types/react-dom@18.3.7`](https://npmjs.com/package/@types/react-dom/v/18.3.7) - [`@types/react-is@16.7.5`](https://npmjs.com/package/@types/react-is/v/16.7.5) - [`@types/react@16.14.69`](https://npmjs.com/package/@types/react/v/16.14.69) @@ -255,13 +255,13 @@ Breaking changes in this release: - [`@types/semver@7.7.1`](https://npmjs.com/package/@types/semver/v/7.7.1) - [`@types/use-sync-external-store@1.5.0`](https://npmjs.com/package/@types/use-sync-external-store/v/1.5.0) - [`@types/uuid@8.3.4`](https://npmjs.com/package/@types/uuid/v/8.3.4) - - [`@typescript-eslint/eslint-plugin@8.56.1`](https://npmjs.com/package/@typescript-eslint/eslint-plugin/v/8.56.1) - - [`@typescript-eslint/parser@8.56.1`](https://npmjs.com/package/@typescript-eslint/parser/v/8.56.1) + - [`@typescript-eslint/eslint-plugin@8.59.0`](https://npmjs.com/package/@typescript-eslint/eslint-plugin/v/8.59.0) + - [`@typescript-eslint/parser@8.59.0`](https://npmjs.com/package/@typescript-eslint/parser/v/8.59.0) - [`adaptivecards@3.0.2`](https://npmjs.com/package/adaptivecards/v/3.0.2) - - [`adm-zip@0.5.16`](https://npmjs.com/package/adm-zip/v/0.5.16) - - [`axe-core@4.11.1`](https://npmjs.com/package/axe-core/v/4.11.1) + - [`adm-zip@0.5.17`](https://npmjs.com/package/adm-zip/v/0.5.17) + - [`axe-core@4.11.3`](https://npmjs.com/package/axe-core/v/4.11.3) - [`babel-jest@29.7.0`](https://npmjs.com/package/babel-jest/v/29.7.0) - - [`babel-plugin-istanbul@7.0.1`](https://npmjs.com/package/babel-plugin-istanbul/v/7.0.1) + - [`babel-plugin-istanbul@8.0.0`](https://npmjs.com/package/babel-plugin-istanbul/v/8.0.0) - [`base64-js@1.5.1`](https://npmjs.com/package/base64-js/v/1.5.1) - [`bent@7.3.12`](https://npmjs.com/package/bent/v/7.3.12) - [`botframework-directlinejs@0.15.8`](https://npmjs.com/package/botframework-directlinejs/v/0.15.8) @@ -272,9 +272,9 @@ Breaking changes in this release: - [`core-js@3.48.0`](https://npmjs.com/package/core-js/v/3.48.0) - [`cross-env@10.1.0`](https://npmjs.com/package/cross-env/v/10.1.0) - [`diff@8.0.2`](https://npmjs.com/package/diff/v/8.0.2) - - [`dotenv@17.3.1`](https://npmjs.com/package/dotenv/v/17.3.1) + - [`dotenv@17.4.2`](https://npmjs.com/package/dotenv/v/17.4.2) - [`dtsroll@1.4.1`](https://npmjs.com/package/dtsroll/v/1.4.1) - - [`esbuild@0.27.3`](https://npmjs.com/package/esbuild/v/0.27.3) + - [`esbuild@0.28.0`](https://npmjs.com/package/esbuild/v/0.28.0) - [`eslint-config-prettier@10.1.8`](https://npmjs.com/package/eslint-config-prettier/v/10.1.8) - [`eslint-plugin-import@2.32.0`](https://npmjs.com/package/eslint-plugin-import/v/2.32.0) - [`eslint-plugin-local-rules@3.0.2`](https://npmjs.com/package/eslint-plugin-local-rules/v/3.0.2) @@ -290,8 +290,8 @@ Breaking changes in this release: - [`html-react-parser@5.2.10`](https://npmjs.com/package/html-react-parser/v/5.2.10) - [`http-proxy-middleware@2.0.9`](https://npmjs.com/package/http-proxy-middleware/v/2.0.9) - [`husky@9.1.7`](https://npmjs.com/package/husky/v/9.1.7) - - [`jest-environment-node@29.7.0`](https://npmjs.com/package/jest-environment-node/v/29.7.0) - [`jest-image-snapshot@6.5.1`](https://npmjs.com/package/jest-image-snapshot/v/6.5.1) + - [`jest-image-snapshot@6.5.2`](https://npmjs.com/package/jest-image-snapshot/v/6.5.2) - [`jest@29.7.0`](https://npmjs.com/package/jest/v/29.7.0) - [`keep-a-changelog@2.7.1`](https://npmjs.com/package/keep-a-changelog/v/2.7.1) - [`lint-staged@16.2.7`](https://npmjs.com/package/lint-staged/v/16.2.7) @@ -300,7 +300,7 @@ Breaking changes in this release: - [`minimatch@10.1.1`](https://npmjs.com/package/minimatch/v/10.1.1) - [`nodemon@3.1.14`](https://npmjs.com/package/nodemon/v/3.1.14) - [`nopt@9.0.0`](https://npmjs.com/package/nopt/v/9.0.0) - - [`prettier@3.8.1`](https://npmjs.com/package/prettier/v/3.8.1) + - [`prettier@3.8.3`](https://npmjs.com/package/prettier/v/3.8.3) - [`progress@2.0.3`](https://npmjs.com/package/progress/v/2.0.3) - [`q@1.5.1`](https://npmjs.com/package/q/v/1.5.1) - [`react-dom@16.8.6`](https://npmjs.com/package/react-dom/v/16.8.6) @@ -310,20 +310,20 @@ Breaking changes in this release: - [`react@18.3.1`](https://npmjs.com/package/react/v/18.3.1) - [`read-package-up@12.0.0`](https://npmjs.com/package/read-package-up/v/12.0.0) - [`read-pkg@10.1.0`](https://npmjs.com/package/read-pkg/v/10.1.0) - - [`selenium-webdriver@4.41.0`](https://npmjs.com/package/selenium-webdriver/v/4.41.0) + - [`selenium-webdriver@4.43.0`](https://npmjs.com/package/selenium-webdriver/v/4.43.0) - [`selfsigned@5.5.0`](https://npmjs.com/package/selfsigned/v/5.5.0) - [`serve-handler@6.1.7`](https://npmjs.com/package/serve-handler/v/6.1.7) - [`serve@14.2.6`](https://npmjs.com/package/serve/v/14.2.6) - [`simple-git@3.30.0`](https://npmjs.com/package/simple-git/v/3.30.0) - [`tsd@0.33.0`](https://npmjs.com/package/tsd/v/0.33.0) - [`tsup@8.5.1`](https://npmjs.com/package/tsup/v/8.5.1) - - [`type-fest@5.4.4`](https://npmjs.com/package/type-fest/v/5.4.4) + - [`type-fest@5.6.0`](https://npmjs.com/package/type-fest/v/5.6.0) - [`typescript-plugin-css-modules@5.2.0`](https://npmjs.com/package/typescript-plugin-css-modules/v/5.2.0) - - [`typescript@5.9.3`](https://npmjs.com/package/typescript/v/5.9.3) + - [`typescript@6.0.3`](https://npmjs.com/package/typescript/v/6.0.3) - [`unplugin-lightningcss@0.4.3`](https://npmjs.com/package/unplugin-lightningcss/v/0.4.3) - - [`webpack-cli@6.0.1`](https://npmjs.com/package/webpack-cli/v/6.0.1) - - [`webpack@5.105.4`](https://npmjs.com/package/webpack/v/5.105.4) - - [`yaml@2.8.2`](https://npmjs.com/package/yaml/v/2.8.2) + - [`webpack-cli@7.0.2`](https://npmjs.com/package/webpack-cli/v/7.0.2) + - [`webpack@5.106.2`](https://npmjs.com/package/webpack/v/5.106.2) + - [`yaml@2.8.3`](https://npmjs.com/package/yaml/v/2.8.3) - Fixed [#5446](https://github.com/microsoft/BotFramework-WebChat/issues/5446). Embedded `uuid` so `microsoft-cognitiveservices-speech-sdk` do not need to use dynamic loading, as this could fail in Webpack 4 environment, in PR [#5445](https://github.com/microsoft/BotFramework-WebChat/pull/5445), by [@compulim](https://github.com/compulim) - Fixed [#5476](https://github.com/microsoft/BotFramework-WebChat/issues/5476). Modernizing components through memoization and use [`valibot`](https://npmjs.com/package/valibot) for props validation, by [@compulim](https://github.com/compulim) - Ported `useSuggestedActions` to use React hooks as backend instead of Redux store, in PR [#5489](https://github.com/microsoft/BotFramework-WebChat/pull/5489), by [@compulim](https://github.com/compulim) diff --git a/package-lock.json b/package-lock.json index 81572d4e3d..10de7273f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,59 +55,59 @@ "react-dom": "16.8.6" }, "devDependencies": { - "@babel/plugin-transform-runtime": "^7.28.5", - "@babel/preset-env": "^7.28.5", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", - "@babel/runtime": "^7.28.4", - "@biomejs/biome": "^2.3.10", - "@happy-dom/jest-environment": "^20.0.11", + "@babel/runtime": "^7.29.2", + "@biomejs/biome": "^2.4.12", + "@happy-dom/jest-environment": "^20.9.0", "@msinternal/vibe-grep": "^0.0.0-0", "@testing-library/react": "^12.1.5", "@types/jest": "^29.5.14", - "@types/react": "^16.14.68", + "@types/react": "^16.14.69", "@types/react-dom": "^16.9.25", "@types/semver": "^7.7.1", - "@typescript-eslint/eslint-plugin": "^8.50.0", - "@typescript-eslint/parser": "^8.50.0", + "@typescript-eslint/eslint-plugin": "^8.59.0", + "@typescript-eslint/parser": "^8.59.0", "babel-jest": "^29.7.0", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "chalk": "^5.6.2", "concurrently": "^9.2.1", - "core-js": "^3.47.0", + "core-js": "^3.49.0", "cross-env": "^10.1.0", - "diff": "^8.0.2", - "dotenv": "^17.2.3", - "dtsroll": "^1.4.1", + "diff": "^9.0.0", + "dotenv": "^17.4.2", + "dtsroll": "^1.8.1", "eslint": "^8.57.1", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-local-rules": "^3.0.2", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-security": "^3.0.1", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-security": "^4.0.0", "get-port": "^5.1.1", - "global-agent": "^3.0.0", + "global-agent": "^4.1.3", "husky": "^9.1.7", "jest": "^29.7.0", - "jest-image-snapshot": "^6.5.1", - "keep-a-changelog": "^2.7.1", - "lint-staged": "^16.2.7", + "jest-image-snapshot": "^6.5.2", + "keep-a-changelog": "^3.0.2", + "lint-staged": "^16.4.0", "lolex": "^6.0.0", - "minimatch": "^10.1.1", + "minimatch": "^10.2.5", "node-dev": "^8.0.0", - "prettier": "^3.7.4", + "prettier": "^3.8.3", "read-package-up": "^12.0.0", - "read-pkg": "^10.0.0", - "selenium-webdriver": "^4.39.0", - "serve": "^14.2.5", - "serve-handler": "^6.1.6", + "read-pkg": "^10.1.0", + "selenium-webdriver": "^4.43.0", + "serve": "^14.2.6", + "serve-handler": "^6.1.7", "strip-ansi": "^6.0.1", "tsup": "^8.5.1", - "typescript": "^5.9.3", - "unplugin-lightningcss": "^0.4.3" + "typescript": "^6.0.3", + "unplugin-lightningcss": "^0.4.5" } }, "node_modules/@adobe/css-tools": { @@ -117,33 +117,31 @@ "optional": true }, "node_modules/@ast-grep/napi": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi/-/napi-0.41.0.tgz", - "integrity": "sha512-3kK6hCxyinsxZIM6p/gWoN33v0GgxBXU6uDbM/J2j3t7f9lXRvA1J+8HeiemCtXNA75H1EK5Oo7/E28HOhYHDg==", - "license": "MIT", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi/-/napi-0.42.1.tgz", + "integrity": "sha512-+YEv9ElJi9azr8AYII79NxYXQRJsrUy1kUqZfxZfvPM7rhs3174mzB+qEE9Pl3sVKAJS5cevyT4lgLNV0AZK6A==", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@ast-grep/napi-darwin-arm64": "0.41.0", - "@ast-grep/napi-darwin-x64": "0.41.0", - "@ast-grep/napi-linux-arm64-gnu": "0.41.0", - "@ast-grep/napi-linux-arm64-musl": "0.41.0", - "@ast-grep/napi-linux-x64-gnu": "0.41.0", - "@ast-grep/napi-linux-x64-musl": "0.41.0", - "@ast-grep/napi-win32-arm64-msvc": "0.41.0", - "@ast-grep/napi-win32-ia32-msvc": "0.41.0", - "@ast-grep/napi-win32-x64-msvc": "0.41.0" + "@ast-grep/napi-darwin-arm64": "0.42.1", + "@ast-grep/napi-darwin-x64": "0.42.1", + "@ast-grep/napi-linux-arm64-gnu": "0.42.1", + "@ast-grep/napi-linux-arm64-musl": "0.42.1", + "@ast-grep/napi-linux-x64-gnu": "0.42.1", + "@ast-grep/napi-linux-x64-musl": "0.42.1", + "@ast-grep/napi-win32-arm64-msvc": "0.42.1", + "@ast-grep/napi-win32-ia32-msvc": "0.42.1", + "@ast-grep/napi-win32-x64-msvc": "0.42.1" } }, "node_modules/@ast-grep/napi-darwin-arm64": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-arm64/-/napi-darwin-arm64-0.41.0.tgz", - "integrity": "sha512-SoAzCj1o9/mdtOdj6pZI1qpZkfncd+2DsWAa2ZmoomKc7CFKCzPniJtThXeOq+IJKcufS8zFGbk57ScMpDgd5A==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-arm64/-/napi-darwin-arm64-0.42.1.tgz", + "integrity": "sha512-VtO4DX20ODCfRBwv1I71lZx+qlrhlMbt9Rpo3LozoaUpHnLmyFMBSgpUal5KTd1SCKUK8ekJGgxpKWo27H4AVQ==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -153,13 +151,12 @@ } }, "node_modules/@ast-grep/napi-darwin-x64": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-x64/-/napi-darwin-x64-0.41.0.tgz", - "integrity": "sha512-SSQeJzm19nNQ+caTgLLFgmhhjhyL8C+8yDSYSYYwOwqkj/Zx5sZHFvND2f8XeOM9Tey7Lkvaf1Prp4l/NwrskA==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-x64/-/napi-darwin-x64-0.42.1.tgz", + "integrity": "sha512-V2uaKP6QZLb60iFHK0IiXAcwSoUliiDJ3c1zLLzHnBFyCbTKC4b3L3XtkiyKsnpET+uzY7hQLpTIAhW5aOCX4w==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -169,13 +166,12 @@ } }, "node_modules/@ast-grep/napi-linux-arm64-gnu": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-gnu/-/napi-linux-arm64-gnu-0.41.0.tgz", - "integrity": "sha512-Td7ciWtsbuYlFV4OC8bg7s+DexXsGLy29yKJqI1ZvoE+9SpWPdFVojeIu9qiQinGh27uggOAZ25WCROnZ2kJpw==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-gnu/-/napi-linux-arm64-gnu-0.42.1.tgz", + "integrity": "sha512-wmt59yzvcZT4Z5XpxB1B1FoFrc32l0vmy2G7yrY2lG9qP2M157mWdp1T50h2XoYrotyRhCyLDXP70SiTZHZkaQ==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -185,13 +181,12 @@ } }, "node_modules/@ast-grep/napi-linux-arm64-musl": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-musl/-/napi-linux-arm64-musl-0.41.0.tgz", - "integrity": "sha512-2wx0SfNZ7eBJN40ne9ncuODoU8ck85wXJ94WV40Ol8Pr4owtrd1yFXQqZTMrq5xYcf4Z3yQWwmEhaH6TJAoBbg==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-musl/-/napi-linux-arm64-musl-0.42.1.tgz", + "integrity": "sha512-cnU+H0drvdkApQDJEcBsYGlPq2gk3l2Xxq0y8EmcxAXYXDNkz+Gc2vfvyM7ib2jD9Y51+cQIsb0RFzA2g9VnZQ==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -201,13 +196,12 @@ } }, "node_modules/@ast-grep/napi-linux-x64-gnu": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-gnu/-/napi-linux-x64-gnu-0.41.0.tgz", - "integrity": "sha512-OzaoOpW4/uX9T5D6h2mXCncCaQ+Ph/hzzH3c91ozNrFYqsQ7MDS04PUhRJQ4Z79H4yuXx2jkbXaj3+ZNR3DP6g==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-gnu/-/napi-linux-x64-gnu-0.42.1.tgz", + "integrity": "sha512-gY+PtqbFtFlR8rCL9F6GEPuymqLhh2eG/e8Ly01Z/S5x3e357nNaF69xAvNRpYi/HnEUZ5cE1MzshDCjubqE1A==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -217,13 +211,12 @@ } }, "node_modules/@ast-grep/napi-linux-x64-musl": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-musl/-/napi-linux-x64-musl-0.41.0.tgz", - "integrity": "sha512-Oeg3BhOC+FA32mW3FHfXXW/AelvicfRhQIrWq5YNS44Sdy9scA34b2FiBPLaj4dHwBgg3ebEfDgmiYBQOMkXaw==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-musl/-/napi-linux-x64-musl-0.42.1.tgz", + "integrity": "sha512-yDTlIgFOzglpzs3Ua9w43uVeEW4csf80F5/n2FqCK5pip4Iyfu21Q+M8iC9AmTRl/OGHVI48ieuPwOD9i1i6hA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -233,13 +226,12 @@ } }, "node_modules/@ast-grep/napi-win32-arm64-msvc": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-arm64-msvc/-/napi-win32-arm64-msvc-0.41.0.tgz", - "integrity": "sha512-6rE9lQbey3rRfr3wQxrfGMcLeyNRydjA4rfdfAciWQApQ+lat5QI7tlgqPqo5EKITUNwap6YY+IxfwBxsLbHYg==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-arm64-msvc/-/napi-win32-arm64-msvc-0.42.1.tgz", + "integrity": "sha512-6WQhKEfZmtfMSIOzluMoBaQhNqfRKXzj5y2YA2U0Y3x7HxNAZBO067y8xlSMddKFN/FtCwft8GFktFxqSYWl1w==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -249,13 +241,12 @@ } }, "node_modules/@ast-grep/napi-win32-ia32-msvc": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-ia32-msvc/-/napi-win32-ia32-msvc-0.41.0.tgz", - "integrity": "sha512-ITtAD7tI3/vImz13wJUUns3UDIsrE3d2/JhhLN3CE1YqNItuNoW53nWqR3YcC/KsfSJnDddD6R0gMVkmlXapAg==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-ia32-msvc/-/napi-win32-ia32-msvc-0.42.1.tgz", + "integrity": "sha512-ET2vRrsHo0e4JJbCrejzDcDPsfTmRaYK9VIpq1MqXXAUvLoiMly+cQYZ64MWdXTlgITKMXCYxhCbFPTn/9XZaQ==", "cpu": [ "ia32" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -265,13 +256,12 @@ } }, "node_modules/@ast-grep/napi-win32-x64-msvc": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-x64-msvc/-/napi-win32-x64-msvc-0.41.0.tgz", - "integrity": "sha512-DSqDh4KJ5+8x+gfAtWdXdeRpGfTjgm00kTW/pqUxhMdW6DVShMSDrFR+lj3dL9FmzMrwVGb+mcN8dWNqGA85Cw==", + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-x64-msvc/-/napi-win32-x64-msvc-0.42.1.tgz", + "integrity": "sha512-NAeA2Q6jp7F9uXtSuG12c1xjTzipXFCTvuAcEBnsTwBXq0kdPV6H6Y4GZJVcDhsHk3TX4sGlQGkuV/6FT2Ngig==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -325,7 +315,6 @@ "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.6.tgz", "integrity": "sha512-6EUNcuBbNkj08Oj4gAZ+BUU8yLCgKzgVX4gaTh09Ya2C8ICM4P+G30g4m3akRxSYAp3A/gnWchrNst7px4/nUQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.28", "commander": "^6.2.0", @@ -379,7 +368,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "devOptional": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1764,7 +1752,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", @@ -1858,7 +1845,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-create-class-features-plugin": "^7.28.6", @@ -1937,11 +1923,10 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", - "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", + "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", @@ -2052,7 +2037,6 @@ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", @@ -2073,7 +2057,6 @@ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", @@ -2089,10 +2072,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", - "license": "MIT", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "engines": { "node": ">=6.9.0" } @@ -2109,16 +2091,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs3/node_modules/core-js-pure": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.49.0.tgz", - "integrity": "sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/@babel/template": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", @@ -2176,9 +2148,9 @@ "license": "MIT" }, "node_modules/@biomejs/biome": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.10.tgz", - "integrity": "sha512-/uWSUd1MHX2fjqNLHNL6zLYWBbrJeG412/8H7ESuK8ewoRoMPUgHDebqKrPTx/5n6f17Xzqc9hdg3MEqA5hXnQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.12.tgz", + "integrity": "sha512-Rro7adQl3NLq/zJCIL98eElXKI8eEiBtoeu5TbXF/U3qbjuSc7Jb5rjUbeHHcquDWeSf3HnGP7XI5qGrlRk/pA==", "dev": true, "bin": { "biome": "bin/biome" @@ -2191,20 +2163,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.3.10", - "@biomejs/cli-darwin-x64": "2.3.10", - "@biomejs/cli-linux-arm64": "2.3.10", - "@biomejs/cli-linux-arm64-musl": "2.3.10", - "@biomejs/cli-linux-x64": "2.3.10", - "@biomejs/cli-linux-x64-musl": "2.3.10", - "@biomejs/cli-win32-arm64": "2.3.10", - "@biomejs/cli-win32-x64": "2.3.10" + "@biomejs/cli-darwin-arm64": "2.4.12", + "@biomejs/cli-darwin-x64": "2.4.12", + "@biomejs/cli-linux-arm64": "2.4.12", + "@biomejs/cli-linux-arm64-musl": "2.4.12", + "@biomejs/cli-linux-x64": "2.4.12", + "@biomejs/cli-linux-x64-musl": "2.4.12", + "@biomejs/cli-win32-arm64": "2.4.12", + "@biomejs/cli-win32-x64": "2.4.12" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.10.tgz", - "integrity": "sha512-M6xUjtCVnNGFfK7HMNKa593nb7fwNm43fq1Mt71kpLpb+4mE7odO8W/oWVDyBVO4ackhresy1ZYO7OJcVo/B7w==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.12.tgz", + "integrity": "sha512-BnMU4Pc3ciEVteVpZ0BK33MLr7X57F5w1dwDLDn+/iy/yTrA4Q/N2yftidFtsA4vrDh0FMXDpacNV/Tl3fbmng==", "cpu": [ "arm64" ], @@ -2218,9 +2190,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.10.tgz", - "integrity": "sha512-Vae7+V6t/Avr8tVbFNjnFSTKZogZHFYl7MMH62P/J1kZtr0tyRQ9Fe0onjqjS2Ek9lmNLmZc/VR5uSekh+p1fg==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.12.tgz", + "integrity": "sha512-x9uJ0bI1rJsWICp3VH8w/5PnAVD3A7SqzDpbrfoUQX1QyWrK5jSU4fRLo/wSgGeplCivbxBRKmt5Xq4/nWvq8A==", "cpu": [ "x64" ], @@ -2234,9 +2206,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.10.tgz", - "integrity": "sha512-hhPw2V3/EpHKsileVOFynuWiKRgFEV48cLe0eA+G2wO4SzlwEhLEB9LhlSrVeu2mtSn205W283LkX7Fh48CaxA==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.12.tgz", + "integrity": "sha512-tOwuCuZZtKi1jVzbk/5nXmIsziOB6yqN8c9r9QM0EJYPU6DpQWf11uBOSCfFKKM4H3d9ZoarvlgMfbcuD051Pw==", "cpu": [ "arm64" ], @@ -2250,9 +2222,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.10.tgz", - "integrity": "sha512-B9DszIHkuKtOH2IFeeVkQmSMVUjss9KtHaNXquYYWCjH8IstNgXgx5B0aSBQNr6mn4RcKKRQZXn9Zu1rM3O0/A==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.12.tgz", + "integrity": "sha512-FhfpkAAlKL6kwvcVap0Hgp4AhZmtd3YImg0kK1jd7C/aSoh4SfsB2f++yG1rU0lr8Y5MCFJrcSkmssiL9Xnnig==", "cpu": [ "arm64" ], @@ -2266,9 +2238,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.10.tgz", - "integrity": "sha512-wwAkWD1MR95u+J4LkWP74/vGz+tRrIQvr8kfMMJY8KOQ8+HMVleREOcPYsQX82S7uueco60L58Wc6M1I9WA9Dw==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.12.tgz", + "integrity": "sha512-8pFeAnLU9QdW9jCIslB/v82bI0lhBmz2ZAKc8pVMFPO0t0wAHsoEkrUQUbMkIorTRIjbqyNZHA3lEXavsPWYSw==", "cpu": [ "x64" ], @@ -2282,9 +2254,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.10.tgz", - "integrity": "sha512-QTfHZQh62SDFdYc2nfmZFuTm5yYb4eO1zwfB+90YxUumRCR171tS1GoTX5OD0wrv4UsziMPmrePMtkTnNyYG3g==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.12.tgz", + "integrity": "sha512-dwTIgZrGutzhkQCuvHynCkyW6hJxUuyZqKKO0YNfaS2GUoRO+tOvxXZqZB6SkWAOdfZTzwaw8IEdUnIkHKHoew==", "cpu": [ "x64" ], @@ -2298,9 +2270,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.10.tgz", - "integrity": "sha512-o7lYc9n+CfRbHvkjPhm8s9FgbKdYZu5HCcGVMItLjz93EhgJ8AM44W+QckDqLA9MKDNFrR8nPbO4b73VC5kGGQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.12.tgz", + "integrity": "sha512-B0DLnx0vA9ya/3v7XyCaP+/lCpnbWbMOfUFFve+xb5OxyYvdHaS55YsSddr228Y+JAFk58agCuZTsqNiw2a6ig==", "cpu": [ "arm64" ], @@ -2314,9 +2286,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.10.tgz", - "integrity": "sha512-pHEFgq7dUEsKnqG9mx9bXihxGI49X+ar+UBrEIj3Wqj3UCZp1rNgV+OoyjFgcXsjCWpuEAF4VJdkZr3TrWdCbQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.12.tgz", + "integrity": "sha512-yMckRzTyZ83hkk8iDFWswqSdU8tvZxspJKnYNh7JZr/zhZNOlzH13k4ecboU6MurKExCe2HUkH75pGI/O2JwGA==", "cpu": [ "x64" ], @@ -2329,51 +2301,11 @@ "node": ">=14.21.3" } }, - "node_modules/@deno/shim-deno": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/@deno/shim-deno/-/shim-deno-0.18.2.tgz", - "integrity": "sha512-oQ0CVmOio63wlhwQF75zA4ioolPvOwAoK0yuzcS5bDC1JUvH3y1GS8xPh8EOpcoDQRU4FTG8OQfxhpR+c6DrzA==", - "dev": true, - "dependencies": { - "@deno/shim-deno-test": "^0.5.0", - "which": "^4.0.0" - } - }, - "node_modules/@deno/shim-deno-test": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@deno/shim-deno-test/-/shim-deno-test-0.5.0.tgz", - "integrity": "sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==", - "dev": true - }, - "node_modules/@deno/shim-deno/node_modules/isexe": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", - "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@deno/shim-deno/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.0.0.tgz", + "integrity": "sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.17.0" } @@ -2421,7 +2353,6 @@ "version": "11.13.5", "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.13.5.tgz", "integrity": "sha512-wQdD0Xhkn3Qy2VNcIzbLP9MR8TafI0MJb7BEAXKp+w4+XqErksWR4OXomuDzPsN4InLdGhVe6EYcn2ZIUCpB8w==", - "license": "MIT", "dependencies": { "@emotion/babel-plugin": "^11.13.5", "@emotion/cache": "^11.13.5", @@ -2471,14 +2402,13 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", - "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "aix" @@ -2488,14 +2418,13 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -2505,14 +2434,13 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -2522,14 +2450,13 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -2539,14 +2466,13 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -2556,14 +2482,13 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -2573,14 +2498,13 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2590,14 +2514,13 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2607,14 +2530,13 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2624,14 +2546,13 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2641,14 +2562,13 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2658,14 +2578,13 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", "cpu": [ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2675,14 +2594,13 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", "cpu": [ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2692,14 +2610,13 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2709,14 +2626,13 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2726,14 +2642,13 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2743,14 +2658,13 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -2760,14 +2674,13 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", - "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -2777,14 +2690,13 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -2794,14 +2706,13 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", - "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -2811,14 +2722,13 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -2828,14 +2738,13 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", - "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openharmony" @@ -2845,14 +2754,13 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" @@ -2862,14 +2770,13 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -2879,14 +2786,13 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -2896,14 +2802,13 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -2969,9 +2874,9 @@ "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -3047,7 +2952,6 @@ "version": "1.0.0-alpha.23", "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.23.tgz", "integrity": "sha512-uxrzF9Z+J10naP0pGS7zPmzSkspSS+3OJDmYIK3o1nkntQrgBXq3dBob4xSlTDm5aOQ0kw6EvB9wQgtlyy4eKQ==", - "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" } @@ -3089,12 +2993,12 @@ } }, "node_modules/@happy-dom/jest-environment": { - "version": "20.0.11", - "resolved": "https://registry.npmjs.org/@happy-dom/jest-environment/-/jest-environment-20.0.11.tgz", - "integrity": "sha512-gsd01XEvkP290xE29Se2hCzXh0V+9CoKfBZ1RsDPjWd80xmiYuVdpzrnxjAl3MvM5z/YPaMNQCIJizEdu7uWsg==", + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@happy-dom/jest-environment/-/jest-environment-20.9.0.tgz", + "integrity": "sha512-6FjF0leAEPLuUOkeN63HmV4kbVHAaddz3I5au44ZtV3WyJS2nxXhH1Xx9mXA/0vIgIEVD20SYzmDtixap2LSpQ==", "dev": true, "dependencies": { - "happy-dom": "^20.0.11" + "happy-dom": "^20.9.0" }, "engines": { "node": ">=20.0.0" @@ -3121,9 +3025,9 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -3164,7 +3068,6 @@ "version": "8.0.2", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3182,7 +3085,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "peer": true, "engines": { "node": ">=12" }, @@ -3195,7 +3097,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "peer": true, "engines": { "node": ">=12" }, @@ -3206,14 +3107,12 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -3232,7 +3131,6 @@ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^6.2.2" }, @@ -3247,7 +3145,6 @@ "version": "8.1.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -3897,8 +3794,7 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.29", @@ -4540,7 +4436,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">=14" } @@ -4559,14 +4454,9 @@ } }, "node_modules/@redux-devtools/extension": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@redux-devtools/extension/-/extension-3.3.0.tgz", - "integrity": "sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.2", - "immutable": "^4.3.4" - }, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@redux-devtools/extension/-/extension-4.0.0.tgz", + "integrity": "sha512-pLIzgo5MvqdDLe5D1pzHLgmr8THra/DOyRf5MvOEPZnKKDn6RhFbNSS5oXZ3Cal0cpx08kx7sR6zD8QgoXEnZA==", "peerDependencies": { "redux": "^3.1.0 || ^4.0.0 || ^5.0.0" } @@ -4622,11 +4512,10 @@ "integrity": "sha512-YRCrJdhQLobGIQ8Cj1sta3nn6DrZDTSUnrIYhS2e5V590BmfVDleKoAquclAiKSBKWJwmuXTb+b4BL6rSHnahw==" }, "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.2.tgz", - "integrity": "sha512-tCtHJ2BlhSoK4cCs25NMXfV7EALKr0jyasmqVCq3y9cBrKdmJhtsy1iTz36Xhk/O+pDJbzawxF4K6ZblqCnITQ==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", "dev": true, - "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -4651,7 +4540,6 @@ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -4682,350 +4570,325 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", "cpu": [ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", "cpu": [ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", - "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openharmony" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", + "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", + "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -5139,7 +5002,6 @@ "resolved": "https://registry.npmjs.org/@testduet/given-when-then/-/given-when-then-0.1.0.tgz", "integrity": "sha512-Ts2LzdmFycynneaO7l2nOWNej47tQxg0QxMcFmDmguV5PjiX7P8k6H5HjP2vrsiN5tFDY5QyB76SdjyTyOMSjw==", "dev": true, - "license": "MIT", "dependencies": { "@testduet/given-when-then": "^0.1.0" } @@ -5221,8 +5083,7 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/strictest/-/strictest-2.0.8.tgz", "integrity": "sha512-XnQ7vNz5HRN0r88GYf1J9JJjqtZPiHt2woGJOo2dYqyHGGcd6OLGqSlBB6p1j9mpzja6Oe5BoPqWmeDx6X9rLw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@tsd/typescript": { "version": "5.9.3", @@ -5283,11 +5144,10 @@ } }, "node_modules/@types/dom-speech-recognition": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.7.tgz", - "integrity": "sha512-NjiUoJbBlKhyufNsMZLSp+pbPNtPAFnR738RCJvtZy/HVQ2TZjmqpMyaeOSMXgxdfZM60nt8QGbtfmQrJAH2sw==", - "dev": true, - "license": "MIT" + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/dom-speech-recognition/-/dom-speech-recognition-0.0.9.tgz", + "integrity": "sha512-uxta75eB62f/Jex9wYTAypKKpiEZ5nOvBRj3TI4yI7JSc65y9eF/Lh9SFjCE3xACj5O5ox2d8nTQFe7Y/nJzfw==", + "dev": true }, "node_modules/@types/eslint": { "version": "9.6.1", @@ -5367,7 +5227,6 @@ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, - "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -5416,14 +5275,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/math-random/-/math-random-1.0.2.tgz", "integrity": "sha512-DGQhRH6YJ4ZYkwd0k+GUax+CXd2aJOiwljwhuxfKCiaTvRoDESs0DpEVdLIKqtcxaGWKNXwfMkmZm99wTEbLsA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/mdast": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", "dependencies": { "@types/unist": "*" } @@ -5438,11 +5295,11 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", "dependencies": { - "undici-types": "~7.18.0" + "undici-types": "~7.19.0" } }, "node_modules/@types/normalize-package-data": { @@ -5477,7 +5334,6 @@ "version": "16.14.69", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.69.tgz", "integrity": "sha512-NdnAamzkxLX9LBssSdt9Q0tQ3LR94hYxotI4/sRUs1vHKFXaDx9xDbK8S4wuw5bwrxiiXbTYyhKeITtFnwDvEA==", - "license": "MIT", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "^0.16", @@ -5488,7 +5344,6 @@ "version": "16.9.25", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.25.tgz", "integrity": "sha512-ZK//eAPhwft9Ul2/Zj+6O11YR6L4JX0J2sVeBC9Ft7x7HFN7xk7yUV/zDxqV6rjvqgl6r8Dq7oQImxtyf/Mzcw==", - "license": "MIT", "peerDependencies": { "@types/react": "^16.0.0" } @@ -5498,7 +5353,6 @@ "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-16.7.5.tgz", "integrity": "sha512-fcPxYqcx6uLZwl+SlcHs2C/3lU2+yM9paQiVokQW5Ux4ywpHRYsfDmraSRGec+5rw3xpXR3w7usvJAoKic6fyg==", "dev": true, - "license": "MIT", "dependencies": { "@types/react": "^16" } @@ -5524,8 +5378,7 @@ "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/scheduler": { "version": "0.16.8", @@ -5551,15 +5404,13 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", "integrity": "sha512-5dyB8nLC/qogMrlCizZnYWQTA4lnb/v+It+sqNl5YnSRAPMlIqY/X0Xn+gZw8vOL+TgTTr28VEbn3uf8fUtAkw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/webrtc": { "version": "0.0.37", @@ -5593,20 +5444,19 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", - "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", + "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.56.1", - "@typescript-eslint/type-utils": "8.56.1", - "@typescript-eslint/utils": "8.56.1", - "@typescript-eslint/visitor-keys": "8.56.1", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/type-utils": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5616,9 +5466,9 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.56.1", + "@typescript-eslint/parser": "^8.59.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { @@ -5630,16 +5480,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", - "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", + "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.56.1", - "@typescript-eslint/types": "8.56.1", - "@typescript-eslint/typescript-estree": "8.56.1", - "@typescript-eslint/visitor-keys": "8.56.1", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3" }, "engines": { @@ -5651,18 +5500,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", - "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", + "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.56.1", - "@typescript-eslint/types": "^8.56.1", + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", "debug": "^4.4.3" }, "engines": { @@ -5673,18 +5521,17 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", - "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.56.1", - "@typescript-eslint/visitor-keys": "8.56.1" + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5695,11 +5542,10 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", - "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", + "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -5708,21 +5554,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", - "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", + "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.56.1", - "@typescript-eslint/typescript-estree": "8.56.1", - "@typescript-eslint/utils": "8.56.1", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0", "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5733,15 +5578,14 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", - "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", + "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -5751,21 +5595,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", - "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", + "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.56.1", - "@typescript-eslint/tsconfig-utils": "8.56.1", - "@typescript-eslint/types": "8.56.1", - "@typescript-eslint/visitor-keys": "8.56.1", + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" + "ts-api-utils": "^2.5.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5775,7 +5618,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { @@ -5783,7 +5626,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5792,16 +5634,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", - "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", + "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.56.1", - "@typescript-eslint/types": "8.56.1", - "@typescript-eslint/typescript-estree": "8.56.1" + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5812,17 +5653,16 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.56.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", - "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", + "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/types": "8.59.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -5838,7 +5678,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^20.19.0 || ^22.13.0 || >=24" }, @@ -6017,47 +5856,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "dev": true, @@ -6085,7 +5883,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -6134,9 +5931,9 @@ } }, "node_modules/adm-zip": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.17.tgz", + "integrity": "sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==", "engines": { "node": ">=12.0" } @@ -6493,6 +6290,36 @@ "node": ">=0.10.0" } }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js-rfc2560": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz", + "integrity": "sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==", + "dependencies": { + "asn1.js-rfc5280": "^3.0.0" + }, + "peerDependencies": { + "asn1.js": "^5.0.0" + } + }, + "node_modules/asn1.js-rfc5280": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-3.0.0.tgz", + "integrity": "sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==", + "dependencies": { + "asn1.js": "^5.0.0" + } + }, "node_modules/asn1js": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", @@ -6506,6 +6333,34 @@ "node": ">=12.0.0" } }, + "node_modules/async-disk-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-2.1.0.tgz", + "integrity": "sha512-iH+boep2xivfD9wMaZWkywYIURSmsL96d6MoqrC94BnGSvXE4Quf8hnJiHGFYhw/nLeIa1XyRaf4vvcvkwAefg==", + "dependencies": { + "debug": "^4.1.1", + "heimdalljs": "^0.2.3", + "istextorbinary": "^2.5.1", + "mkdirp": "^0.5.0", + "rimraf": "^3.0.0", + "rsvp": "^4.8.5", + "username-sync": "^1.0.2" + }, + "engines": { + "node": "8.* || >= 10.*" + } + }, + "node_modules/async-disk-cache/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/async-function": { "version": "1.0.0", "dev": true, @@ -6537,25 +6392,23 @@ } }, "node_modules/axe-core": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", - "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", - "license": "MPL-2.0", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.3.tgz", + "integrity": "sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==", "engines": { "node": ">=4" } }, "node_modules/axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "proxy-from-env": "^2.1.0" } }, "node_modules/babel-jest": { @@ -6563,7 +6416,6 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, - "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -6641,37 +6493,69 @@ } }, "node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-8.0.0.tgz", + "integrity": "sha512-18wCskrN3DgbuBmp1gr7LBGT8xdz5xhQQqFvFhVxbkl8VBCrMKQ2YtqBWtUal1Zrc1HTuX0011+Brjw78TCFkg==", "dev": true, - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" + "test-exclude": "^7.0.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "6.0.3", + "node_modules/babel-plugin-istanbul/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { "node": ">=10" } }, @@ -6688,6 +6572,20 @@ "node": ">=10" } }, + "node_modules/babel-plugin-istanbul/node_modules/test-exclude": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", + "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^10.2.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", "dev": true, @@ -6759,8 +6657,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-0.4.4.tgz", "integrity": "sha512-bJILBtn5a11SmtR2j/3mBOjX4K3weC6cq+NNZ7hG22wCAqpc3qtj/iN7dSe9HDiS46lgp1nHsQgeYrea/RUe+g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/babel-preset-current-node-syntax": { "version": "1.1.0", @@ -6810,7 +6707,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", - "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -6832,8 +6728,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/baseline-browser-mapping": { "version": "2.9.10", @@ -6848,7 +6743,6 @@ "version": "7.3.12", "resolved": "https://registry.npmjs.org/bent/-/bent-7.3.12.tgz", "integrity": "sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==", - "license": "Apache-2.0", "dependencies": { "bytesish": "^0.4.1", "caseless": "~0.12.0", @@ -6866,6 +6760,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/binaryextensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", + "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==", + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==" + }, "node_modules/body-parser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", @@ -6909,14 +6819,15 @@ }, "node_modules/boolean": { "version": "3.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true }, "node_modules/botframework-directlinejs": { "version": "0.15.8", "resolved": "https://registry.npmjs.org/botframework-directlinejs/-/botframework-directlinejs-0.15.8.tgz", "integrity": "sha512-w/rt2NPSuKMU02zFuJ5E456j2xjAJskgaR6L0sEb6/osmC+zcRlP9ghAjKEmgO9Bquu9NYVwVtahIiRCdKpqDA==", - "license": "MIT", "dependencies": { "@babel/runtime": "7.26.10", "botframework-streaming": "4.23.0", @@ -7114,9 +7025,9 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dependencies": { "balanced-match": "^1.0.0" } @@ -7512,8 +7423,7 @@ "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/cldr-data": { "version": "36.0.5", @@ -7620,14 +7530,13 @@ "version": "0.5.5" }, "node_modules/cleye": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/cleye/-/cleye-1.3.4.tgz", - "integrity": "sha512-Rd6M8ecBDtdYdPR22h6gG37lPqqJ3hSOaplaGwuGYey9xKmEElOvTgupqfyLSlISshroRpVhYjDtW3vwNUNBaQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cleye/-/cleye-2.6.0.tgz", + "integrity": "sha512-u0SQCsega/ox+2GSuUlG6wvA9c2FtH8sPmv9G9Q3JRTs7FK6+LtaziRAQgx7lrJ1J7bOd3palhwgZKMg8R6JbQ==", "dev": true, - "license": "MIT", "dependencies": { - "terminal-columns": "^1.4.1", - "type-flag": "^3.0.0" + "terminal-columns": "^2.0.0", + "type-flag": "^4.1.0" }, "funding": { "url": "https://github.com/privatenumber/cleye?sponsor=1" @@ -7850,7 +7759,6 @@ "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", @@ -7882,8 +7790,7 @@ "node_modules/compute-scroll-into-view": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", - "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", - "license": "MIT" + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" }, "node_modules/concat-map": { "version": "0.0.1", @@ -7894,7 +7801,6 @@ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", @@ -7987,9 +7893,9 @@ } }, "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", "dev": true, "engines": { "node": ">=18" @@ -8040,11 +7946,10 @@ } }, "node_modules/core-js": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", - "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", + "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -8065,11 +7970,10 @@ } }, "node_modules/core-js-pure": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", - "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.49.0.tgz", + "integrity": "sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==", "hasInstallScript": true, - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -8164,7 +8068,6 @@ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz", "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", "dev": true, - "license": "MIT", "dependencies": { "@epic-web/invariant": "^1.0.0", "cross-spawn": "^7.0.6" @@ -8387,8 +8290,7 @@ "node_modules/deep-freeze-strict": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-freeze-strict/-/deep-freeze-strict-1.1.1.tgz", - "integrity": "sha512-QemROZMM2IvhAcCFvahdX2Vbm4S/txeq5rFYU9fh4mQP79WTMW5c/HkQ2ICl1zuzcDZdPZ6zarDxQeQMsVYoNA==", - "license": "public domain" + "integrity": "sha512-QemROZMM2IvhAcCFvahdX2Vbm4S/txeq5rFYU9fh4mQP79WTMW5c/HkQ2ICl1zuzcDZdPZ6zarDxQeQMsVYoNA==" }, "node_modules/deep-is": { "version": "0.1.4", @@ -8479,8 +8381,9 @@ }, "node_modules/detect-node": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true }, "node_modules/devlop": { "version": "1.1.0", @@ -8494,11 +8397,10 @@ } }, "node_modules/diff": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", - "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", + "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -8596,9 +8498,9 @@ } }, "node_modules/dotenv": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz", - "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "dev": true, "engines": { "node": ">=12" @@ -8608,16 +8510,19 @@ } }, "node_modules/dtsroll": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dtsroll/-/dtsroll-1.4.1.tgz", - "integrity": "sha512-Ih6dWLx/6DGpPMIODGzaeGYYW/L/A4bAk0/5j+XPKYQ9D2vHKyDZt86GaKCAjd2uhLDwHrr4HwGzoBzdl0EQ2w==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/dtsroll/-/dtsroll-1.8.1.tgz", + "integrity": "sha512-rw+Uv4mk7cxndD1sN5GxWj0Mt1UIqGpLVNay6SlcL1spOW07We29ZBrmy4e7D34+NucGLSCY+JT00S6scMLAFg==", "dev": true, "dependencies": { - "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-node-resolve": "^16.0.3", "byte-size": "^9.0.1", - "cleye": "^1.3.2", - "rollup": "^4.29.1", - "rollup-plugin-dts": "6.1.1" + "cleye": "^2.3.0", + "convert-source-map": "^2.0.0", + "empathic": "^2.0.0", + "resolve-pkg-maps": "^1.0.0", + "rollup": "^4.60.1", + "rollup-plugin-import-trace": "^1.0.1" }, "bin": { "dtsroll": "dist/cli.mjs" @@ -8629,8 +8534,8 @@ "url": "https://github.com/privatenumber/dtsroll?sponsor=1" }, "peerDependencies": { - "typescript": "^4.5 || ^5.0", - "vite": "5 || 6" + "typescript": "^4.5 || ^5.0 || ^6.0", + "vite": "5 || 6 || 7" }, "peerDependenciesMeta": { "vite": { @@ -8664,6 +8569,21 @@ "dev": true, "license": "MIT" }, + "node_modules/editions": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.3.1.tgz", + "integrity": "sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==", + "dependencies": { + "errlop": "^2.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/ee-first": { "version": "1.1.1", "dev": true, @@ -8697,6 +8617,15 @@ "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==" }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/encodeurl": { "version": "2.0.0", "dev": true, @@ -8752,6 +8681,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/errlop": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.2.0.tgz", + "integrity": "sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==", + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/errno": { "version": "0.1.8", "dev": true, @@ -8848,7 +8788,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8959,16 +8898,16 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true }, "node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -8976,32 +8915,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" } }, "node_modules/escalade": { @@ -9034,7 +8973,6 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -9287,9 +9225,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -9339,7 +9277,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "license": "MIT", "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", @@ -9356,9 +9293,9 @@ } }, "node_modules/eslint-plugin-node/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -9383,7 +9320,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", "dev": true, - "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.1", "synckit": "^0.11.12" @@ -9442,9 +9378,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", - "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", @@ -9457,13 +9393,13 @@ "node": ">=18" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -9519,9 +9455,9 @@ } }, "node_modules/eslint-plugin-security": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz", - "integrity": "sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-4.0.0.tgz", + "integrity": "sha512-tfuQT8K/Li1ZxhFzyD8wPIKtlzZxqBcPr9q0jFMQ77wWAbKBVEhaMPVQRTMTvCMUDhwBe5vPVqQPwAGk/ASfxQ==", "dev": true, "dependencies": { "safe-regex": "^2.1.1" @@ -9592,9 +9528,9 @@ "license": "Python-2.0" }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -9779,8 +9715,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/esutils": { "version": "2.0.3", @@ -9802,7 +9737,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/event-as-promise/-/event-as-promise-2.0.1.tgz", "integrity": "sha512-g0Wpfse1Gf9Pc8RLggBMti+LxHRmnHxGgv/lQeBlwL31xvFSjLS1ab8g9K5XrtSh8fcK8CHAV7h3zMgjg0LFBA==", - "license": "MIT", "dependencies": { "event-as-promise": "^2.0.1" } @@ -9810,8 +9744,7 @@ "node_modules/event-iterator": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/event-iterator/-/event-iterator-2.0.0.tgz", - "integrity": "sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ==", - "license": "MIT" + "integrity": "sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ==" }, "node_modules/event-target-shim": { "version": "5.0.1", @@ -9882,7 +9815,6 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -9933,14 +9865,6 @@ "node": ">= 0.6" } }, - "node_modules/express/node_modules/mime-db": { - "version": "1.54.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/mime-types": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", @@ -10162,9 +10086,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -10172,7 +10096,6 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -10200,7 +10123,6 @@ "version": "3.3.0", "dev": true, "license": "ISC", - "peer": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -10216,7 +10138,6 @@ "version": "4.1.0", "dev": true, "license": "ISC", - "peer": true, "engines": { "node": ">=14" }, @@ -10437,7 +10358,6 @@ }, "node_modules/glob": { "version": "7.2.3", - "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -10473,10 +10393,9 @@ "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10486,7 +10405,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -10496,18 +10414,15 @@ } }, "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-4.1.3.tgz", + "integrity": "sha512-KUJEViiuFT3I97t+GYMikLPJS2Lfo/S2F+DQuBWzuzaMPnvt5yyZePzArx36fBzpGTxZjIpDbXLeySLgh+k76g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" + "globalthis": "^1.0.2", + "matcher": "^4.0.0", + "semver": "^7.3.5", + "serialize-error": "^8.1.0" }, "engines": { "node": ">=10.0" @@ -10530,7 +10445,6 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.7.1.tgz", "integrity": "sha512-PFymRL0PtitFOlSniuwwwNfkooi3cLQJo9Uke1+j1DsGfUkkHkwneImqVtGcqKI0TuzhAlHt7hAcgK324902HA==", - "license": "MIT", "dependencies": { "cldrjs": "^0.5.4" } @@ -10540,7 +10454,6 @@ "resolved": "https://registry.npmjs.org/globalize-compiler/-/globalize-compiler-1.1.1.tgz", "integrity": "sha512-oZIwVp3L/waDidle7Qrw4FiCCmOLAqvdM9P7W8nEO4OfXO//l/abBiA+RL2+mYZPOpTAlRDVS2FLfFVWxHovWA==", "dev": true, - "license": "MIT", "dependencies": { "escodegen": "^1.6.1", "esprima": "^2.3.0", @@ -10773,15 +10686,14 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/handler-chain/-/handler-chain-0.1.1.tgz", "integrity": "sha512-5eo8F9UTUiFCMtDUF1ipva1tvOCGE+vFr33aFHSISjTqXfGywCRV2aE6TzPkMhaw1pArOv3wv2Wz3Rh+AJJ8bA==", - "license": "MIT", "dependencies": { "handler-chain": "^0.1.1" } }, "node_modules/happy-dom": { - "version": "20.8.9", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.8.9.tgz", - "integrity": "sha512-Tz23LR9T9jOGVZm2x1EPdXqwA37G/owYMxRwU0E4miurAtFsPMQ1d2Jc2okUaSjZqAFz2oEn3FLXC5a0a+siyA==", + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.9.0.tgz", + "integrity": "sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ==", "dev": true, "dependencies": { "@types/node": ">=20.0.0", @@ -10891,7 +10803,6 @@ "resolved": "https://registry.npmjs.org/has-resolved/-/has-resolved-2.0.0.tgz", "integrity": "sha512-vt/qMRKKx5m+kKCj6r98uIRI+UWH+mwg/rUNpTwq5i3J81AVvAT3aSVqPSOX4pFvZIMd6jSHMJvaovAAv5erkw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^25.0.3", "has-resolved": "^2.0.0" @@ -10966,6 +10877,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/heimdalljs": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", + "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", + "dependencies": { + "rsvp": "~3.2.1" + } + }, + "node_modules/heimdalljs/node_modules/rsvp": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", + "integrity": "sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==" + }, "node_modules/hermes-estree": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", @@ -11004,9 +10928,9 @@ } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.2.tgz", - "integrity": "sha512-wgWa6FWQ3QRRJbIjbsldRJZxdxYngT/dO0I5Ynmlnin8qy7tC6xYzbcJjtN4wHLXtkbVwHzk0C+OejVw1XM+DQ==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", "engines": { "node": "20 || >=22" } @@ -11027,37 +10951,6 @@ "htmlparser2": "10.1.0" } }, - "node_modules/html-dom-parser/node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/html-dom-parser/node_modules/htmlparser2": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", - "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "entities": "^7.0.1" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "dev": true, @@ -11104,7 +10997,9 @@ } }, "node_modules/htmlparser2": { - "version": "8.0.2", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -11112,17 +11007,17 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, "node_modules/htmlparser2/node_modules/entities": { - "version": "4.5.0", - "license": "BSD-2-Clause", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "engines": { "node": ">=0.12" }, @@ -11190,7 +11085,6 @@ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -11327,12 +11221,6 @@ "dev": true, "license": "MIT" }, - "node_modules/immutable": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", - "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", - "license": "MIT" - }, "node_modules/import-fresh": { "version": "3.3.0", "license": "MIT", @@ -11431,7 +11319,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/inject-meta-tag/-/inject-meta-tag-0.1.0.tgz", "integrity": "sha512-2dxkvwL/Ko8Sgehc23plijjenoAXJRNfbaHQnwa24JU5l7faOzYBGsFiFyt+Ew3s0uFA6s1UPeD7zsIBGvYK0Q==", - "license": "MIT", "dependencies": { "inject-meta-tag": "^0.1.0" } @@ -11728,8 +11615,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/is-negative-zero": { "version": "2.0.3", @@ -11993,7 +11879,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -12097,13 +11982,28 @@ "node": ">=8" } }, + "node_modules/istextorbinary": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.6.0.tgz", + "integrity": "sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==", + "dependencies": { + "binaryextensions": "^2.1.2", + "editions": "^2.2.0", + "textextensions": "^2.5.0" + }, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/iter-fest": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/iter-fest/-/iter-fest-0.3.0.tgz", - "integrity": "sha512-t76cnHCl9MEZRaUb0VBwTXP8dWjxbcTYm91VGWfQYjSMXKkjdOAIjUsaMYuLIy9jxk9fT55XIlb4Y/HACK/zlw==", - "peer": true, + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/iter-fest/-/iter-fest-0.3.1.tgz", + "integrity": "sha512-XL7DGglVGVevTuQAAhVAN3MbADeKyDcijPToBKUxZHpOSUJT22CfvGqsV1t34LyoVxDDL3MGPbHZVx20Lky0og==", "dependencies": { - "iter-fest": "^0.3.0" + "iter-fest": "^0.3.1" }, "peerDependencies": { "core-js-pure": "^3.37.1" @@ -12129,7 +12029,6 @@ "version": "3.4.3", "dev": true, "license": "BlueOak-1.0.0", - "peer": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -12145,7 +12044,6 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -12723,7 +12621,6 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -12769,11 +12666,10 @@ } }, "node_modules/jest-image-snapshot": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/jest-image-snapshot/-/jest-image-snapshot-6.5.1.tgz", - "integrity": "sha512-xlJFufgfY2Z4DsRsjcnTwxuynvo1bKdhf4OfcEftNuUAK+BwSCUtPmwlBGJhQ0XJXfm9JMAi/4BhQiHbaV8HrA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/jest-image-snapshot/-/jest-image-snapshot-6.5.2.tgz", + "integrity": "sha512-frenWThr5ddnnokcX5N4gwi41hA5TiUOdhv/JoGcJrOaktHjrk4/7XbiHKW52lgKX+vei6QkRlgM7fkYQ15nPg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "chalk": "^4.0.0", "get-stdin": "^5.0.1", @@ -12787,7 +12683,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "jest": ">=20 <=29" + "jest": ">=20 <31" }, "peerDependenciesMeta": { "jest": { @@ -13768,8 +13664,9 @@ }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true }, "node_modules/json5": { "version": "2.2.3", @@ -13811,20 +13708,18 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", - "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/katex": { - "version": "0.16.33", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.33.tgz", - "integrity": "sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==", + "version": "0.16.45", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.45.tgz", + "integrity": "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" ], - "license": "MIT", "dependencies": { "commander": "^8.3.0" }, @@ -13840,15 +13735,37 @@ } }, "node_modules/keep-a-changelog": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/keep-a-changelog/-/keep-a-changelog-2.7.1.tgz", - "integrity": "sha512-uwxVmpiSd2LOT+sffmd+7odV80WLFxe7jUyGLh4K6H3bjnPIlWJ4d/632+13K2WvtRz4NAwak8PPw416hS5NHA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keep-a-changelog/-/keep-a-changelog-3.0.2.tgz", + "integrity": "sha512-MKk4RWduGopP7MoA8bkzdXQk9CV6cbqNjMzpClM/mA2kT+jsbvO6co2h3UuYPe6/bX/UITemzLBNEanplrIOmQ==", "dev": true, "dependencies": { - "@deno/shim-deno": "~0.18.0" + "ini": "6.0.0", + "semver": "7.7.4" }, "bin": { - "changelog": "esm/bin.js" + "changelog": "bin.js" + } + }, + "node_modules/keep-a-changelog/node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/keep-a-changelog/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/keyborg": { @@ -13935,9 +13852,10 @@ } }, "node_modules/lightningcss": { - "version": "1.30.1", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "dev": true, - "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" }, @@ -13949,27 +13867,47 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" - } + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", - "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "darwin" @@ -13983,14 +13921,13 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", - "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", "cpu": [ "x64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "darwin" @@ -14004,14 +13941,13 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", - "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", "cpu": [ "x64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "freebsd" @@ -14025,14 +13961,13 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", - "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", "cpu": [ "arm" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -14046,14 +13981,13 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", - "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -14067,14 +14001,13 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", - "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", "cpu": [ "arm64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -14088,12 +14021,13 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.1", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ "x64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -14107,12 +14041,13 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.1", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ "x64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -14126,14 +14061,13 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", - "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ "arm64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -14147,14 +14081,13 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", - "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", "cpu": [ "x64" ], "dev": true, - "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -14190,18 +14123,17 @@ } }, "node_modules/lint-staged": { - "version": "16.2.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz", - "integrity": "sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.4.0.tgz", + "integrity": "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==", "dev": true, "dependencies": { - "commander": "^14.0.2", + "commander": "^14.0.3", "listr2": "^9.0.5", - "micromatch": "^4.0.8", - "nano-spawn": "^2.0.0", - "pidtree": "^0.6.0", + "picomatch": "^4.0.3", "string-argv": "^0.3.2", - "yaml": "^2.8.1" + "tinyexec": "^1.0.4", + "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -14223,6 +14155,18 @@ "node": ">=20" } }, + "node_modules/lint-staged/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/listr2": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", @@ -14280,11 +14224,10 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true }, "node_modules/lodash.camelcase": { "version": "4.3.0", @@ -14421,7 +14364,6 @@ "resolved": "https://registry.npmjs.org/lolex/-/lolex-6.0.0.tgz", "integrity": "sha512-ad9IBHbfVJ3bPAotDxnCgJgKcNK5/mrRAfbJzXhY5+PEmuBWP7wyHQlA6L8TfSfPlqlDjY4K7IG6mbzsrIBx1A==", "deprecated": "lolex has been renamed to @sinonjs/fake-timers. No API changes made. Please use the new package instead", - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0" } @@ -14504,7 +14446,6 @@ "version": "13.0.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", - "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "~3.0.1", @@ -14521,14 +14462,18 @@ "license": "Python-2.0" }, "node_modules/matcher": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-4.0.0.tgz", + "integrity": "sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^4.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/math-intrinsics": { @@ -14542,14 +14487,12 @@ "node_modules/math-random": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/math-random/-/math-random-2.0.1.tgz", - "integrity": "sha512-oIEbWiVDxDpl5tIF4S6zYS9JExhh3bun3uLb3YAinHPTlRtW4g1S66LtJrJ4Npq8dgIa8CLK5iPVah5n4n0s2w==", - "license": "CC0-1.0" + "integrity": "sha512-oIEbWiVDxDpl5tIF4S6zYS9JExhh3bun3uLb3YAinHPTlRtW4g1S66LtJrJ4Npq8dgIa8CLK5iPVah5n4n0s2w==" }, "node_modules/mdast-util-from-markdown": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", - "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -14615,8 +14558,7 @@ "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", - "license": "MIT" + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, "node_modules/meow": { "version": "9.0.0", @@ -14723,7 +14665,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-2.0.0.tgz", "integrity": "sha512-3+B21mYK2IqUWnd2EivABLT7ueDhb0b8/dGK8LoFQPrU61YITeCMn14F7y7qZafWNZhUEKb24cJdiT5Wxs3prg==", - "license": "MIT", "funding": { "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" }, @@ -14763,7 +14704,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -14820,7 +14760,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", @@ -15036,7 +14975,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -15209,7 +15147,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", @@ -15263,8 +15200,7 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromatch": { "version": "4.0.8", @@ -15278,10 +15214,9 @@ } }, "node_modules/microsoft-cognitiveservices-speech-sdk": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.48.0.tgz", - "integrity": "sha512-D/8cZn0+vWE18PHloEXfeSHjxuCTYs1zjMulQ4EgpjIrLdtaqSqa9guDBXPnxFnnysWRnZZwyfM/uoiKZvEXXw==", - "license": "MIT", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.49.0.tgz", + "integrity": "sha512-4WLkw+wqygqFCjgUOjD/Vj3x12KZhuBF09Bf3/ywZqLDIepPi3jPq42QjuAGyel9lWoa8V5P9cri34fUhzTkEw==", "dependencies": { "@azure/core-auth": "^1.9.0", "@types/webrtc": "^0.0.37", @@ -15338,24 +15273,33 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "~1.33.0" }, "engines": { "node": ">= 0.6" } }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "dev": true, @@ -15384,6 +15328,11 @@ "node": ">=4" } }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "node_modules/minimatch": { "version": "10.2.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", @@ -15423,7 +15372,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15454,7 +15402,6 @@ "version": "7.1.2", "dev": true, "license": "ISC", - "peer": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -15496,18 +15443,6 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nano-spawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz", - "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==", - "dev": true, - "engines": { - "node": ">=20.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" - } - }, "node_modules/nanoid": { "version": "3.3.8", "funding": [ @@ -15695,7 +15630,6 @@ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.14.tgz", "integrity": "sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw==", "dev": true, - "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", @@ -16053,8 +15987,7 @@ "node_modules/package-json-from-dist": { "version": "1.0.0", "dev": true, - "license": "BlueOak-1.0.0", - "peer": true + "license": "BlueOak-1.0.0" }, "node_modules/pako": { "version": "1.0.11", @@ -16117,7 +16050,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -16143,7 +16075,6 @@ "version": "1.11.1", "dev": true, "license": "BlueOak-1.0.0", - "peer": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -16158,8 +16089,7 @@ "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/path-to-regexp": { "version": "8.4.2", @@ -16204,17 +16134,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pidtree": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pify": { "version": "4.0.1", "dev": true, @@ -16440,11 +16359,10 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -16521,7 +16439,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -16554,10 +16471,14 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", "dev": true, - "license": "MIT", - "peer": true + "peer": true, + "engines": { + "node": ">=10" + } }, "node_modules/prr": { "version": "1.0.1", @@ -16574,7 +16495,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", "engines": { "node": ">=6" } @@ -16621,6 +16541,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "node_modules/queue-microtask": { "version": "1.2.3", "dev": true, @@ -16714,7 +16639,6 @@ "version": "16.8.6", "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", - "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -16729,7 +16653,6 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/react-chain-of-responsibility/-/react-chain-of-responsibility-0.4.2.tgz", "integrity": "sha512-khBaWO1rSLSUw6Ydr3lYFgONwmrx9rSOClrLCyn7cq40QxVJSh5utq1rbey+Pr24trWmQdC9qweTuKG2RptTXw==", - "license": "MIT", "dependencies": { "handler-chain": "^0.1.0", "react-chain-of-responsibility": "^0.4.2", @@ -16743,7 +16666,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/react-dictate-button/-/react-dictate-button-4.0.1.tgz", "integrity": "sha512-UvXx3RhJfGD4I7UkUEtBGBRyKRQrh90gzFsde53sJUhJ0V8iTJo8dthtNBMuanYTUyGdZdfdPCjv5ozIlEPvAQ==", - "license": "MIT", "dependencies": { "@babel/runtime-corejs3": "^7.28.4", "react-dictate-button": "^4.0.1", @@ -16757,7 +16679,6 @@ "version": "16.8.6", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", - "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -16772,7 +16693,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/react-film/-/react-film-4.0.0.tgz", "integrity": "sha512-KHhHA+155CBwSq1REa4f9c+68PZUQdISo25JCEnk/2/TuzO+c/feT95usxwO50MCcWyatWefa8chdu0jYIS3WQ==", - "license": "MIT", "dependencies": { "@emotion/css": "^11.13.5", "classnames": "^2.5.1", @@ -16799,7 +16719,6 @@ "version": "7.2.9", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", - "license": "MIT", "dependencies": { "@babel/runtime": "^7.15.4", "@types/react-redux": "^7.1.20", @@ -16824,7 +16743,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-say/-/react-say-2.2.1.tgz", "integrity": "sha512-Iew40Wql10+IC659S1CRbziEO272XeJmWfmLbnSLqyGpCwELTBxTefHvFUvKwEAuJv8Bk+ezjcw0NxgDAZdzWA==", - "license": "MIT", "dependencies": { "prop-types": "^15.8.1", "react-say": "^2.2.1" @@ -16837,7 +16755,6 @@ "version": "4.2.1-main.53844f5", "resolved": "https://registry.npmjs.org/react-scroll-to-bottom/-/react-scroll-to-bottom-4.2.1-main.53844f5.tgz", "integrity": "sha512-YWTDfj15tVwRateyq3yOUjlmZ8BNgAmBahzvwX5J/fjyBTkASbwnZlABuqQt1NspZ9Oe/bO8r/BYWTnIInxlcw==", - "license": "MIT", "dependencies": { "@babel/runtime-corejs3": "^7.15.4", "@emotion/css": "11.1.3", @@ -16900,7 +16817,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/react-wrap-with/-/react-wrap-with-0.1.0.tgz", "integrity": "sha512-8+UKXYLofRBNtSfeZCM81/X0sCvJRv0/nrt42lPozrF/BF0WW2/QDoZQLKuvkMxN+i8qaGzC7mOM6z4UGwlpug==", - "license": "MIT", "dependencies": { "@babel/runtime-corejs3": "^7.24.1", "react-wrap-with": "^0.1.0", @@ -16939,9 +16855,9 @@ } }, "node_modules/read-package-up/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "dependencies": { "tagged-tag": "^1.0.0" }, @@ -16953,15 +16869,15 @@ } }, "node_modules/read-pkg": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.0.0.tgz", - "integrity": "sha512-A70UlgfNdKI5NSvTTfHzLQj7NJRpJ4mT5tGafkllJ4wh71oYuGm/pzphHcmW4s35iox56KSK721AihodoXSc/A==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", + "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", "parse-json": "^8.3.0", - "type-fest": "^5.2.0", - "unicorn-magic": "^0.3.0" + "type-fest": "^5.4.4", + "unicorn-magic": "^0.4.0" }, "engines": { "node": ">=20" @@ -17075,9 +16991,9 @@ } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "dependencies": { "tagged-tag": "^1.0.0" }, @@ -17149,14 +17065,12 @@ "node_modules/redux": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" }, "node_modules/redux-saga": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.4.2.tgz", "integrity": "sha512-QLIn/q+7MX/B+MkGJ/K6R3//60eJ4QNy65eqPsJrfGezbxdh1Jx+37VRKE2K4PsJnNET5JufJtgWdT30WBa+6w==", - "license": "MIT", "dependencies": { "@redux-saga/core": "^1.4.2" } @@ -17346,7 +17260,6 @@ }, "node_modules/requires-port": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/reserved-words": { @@ -17355,10 +17268,11 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" @@ -17392,6 +17306,15 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { "version": "2.0.3", "dev": true, @@ -17460,7 +17383,6 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "dev": true, "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -17474,8 +17396,9 @@ }, "node_modules/roarr": { "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", @@ -17490,15 +17413,15 @@ }, "node_modules/roarr/node_modules/sprintf-js": { "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true }, "node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", + "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.8" }, @@ -17510,55 +17433,56 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", + "@rollup/rollup-android-arm-eabi": "4.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-dts": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.1.1.tgz", - "integrity": "sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==", + "node_modules/rollup-plugin-import-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-import-trace/-/rollup-plugin-import-trace-1.0.1.tgz", + "integrity": "sha512-dWOKrdYba2BXDJh82kkuM4pAR3M6r7WFp6vbVxAgvLfug2WniMFAg2uZ5sNQ/8CoQWo5l2N5EXDG8+QClKk1YQ==", "dev": true, - "license": "LGPL-3.0-only", - "dependencies": { - "magic-string": "^0.30.10" - }, "engines": { - "node": ">=16" + "node": ">=20.20.0" }, "funding": { - "url": "https://github.com/sponsors/Swatinem" - }, - "optionalDependencies": { - "@babel/code-frame": "^7.24.2" + "url": "https://github.com/privatenumber/rollup-plugin-import-trace?sponsor=1" }, "peerDependencies": { - "rollup": "^3.29.4 || ^4", - "typescript": "^4.5 || ^5.0" + "rollup": "^3.0.0 || ^4.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "vite": { + "optional": true + } } }, "node_modules/router": { @@ -17576,6 +17500,14 @@ "node": ">= 18" } }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "engines": { + "node": "6.* || >= 7.*" + } + }, "node_modules/rtl-css-js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", @@ -17695,18 +17627,16 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/sanitize-html": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.1.tgz", - "integrity": "sha512-ehFCW+q1a4CSOWRAdX97BX/6/PDEkCqw7/0JXZAGQV57FQB3YOkTa/rrzHPeJ+Aghy4vZAFfWMYyfxIiB7F/gw==", - "license": "MIT", + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.3.tgz", + "integrity": "sha512-Kn4srCAo2+wZyvCNKCSyB2g8RQ8IkX/gQs2uqoSRNu5t9I2qvUyAVvRDiFUVAiX3N3PNuwStY0eNr+ooBHVWEg==", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", - "htmlparser2": "^8.0.0", + "htmlparser2": "^10.1.0", "is-plain-object": "^5.0.0", "parse-srcset": "^1.0.2", "postcss": "^8.3.11" @@ -17834,9 +17764,9 @@ "dev": true }, "node_modules/selenium-webdriver": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.41.0.tgz", - "integrity": "sha512-1XxuKVhr9az24xwixPBEDGSZP+P0z3ZOnCmr9Oiep0MlJN2Mk+flIjD3iBS9BgyjS4g14dikMqnrYUPIjhQBhA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.43.0.tgz", + "integrity": "sha512-dV4zBTT37or3Z3/8uD6rS8zvd4ZxPuG4EJVlqYIbZCGZCYttZm7xb9rlFLSk4rrsQHAeDYvudl7cquo0vWpHjg==", "dev": true, "funding": [ { @@ -17848,12 +17778,11 @@ "url": "https://opencollective.com/selenium" } ], - "license": "Apache-2.0", "dependencies": { "@bazel/runfiles": "^6.5.0", "jszip": "^3.10.1", "tmp": "^0.2.5", - "ws": "^8.19.0" + "ws": "^8.20.0" }, "engines": { "node": ">= 20.0.0" @@ -17884,7 +17813,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", - "license": "MIT", "dependencies": { "@peculiar/x509": "^1.14.2", "pkijs": "^3.3.3" @@ -17895,7 +17823,6 @@ }, "node_modules/semver": { "version": "6.3.1", - "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -17903,8 +17830,9 @@ }, "node_modules/semver-compare": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true }, "node_modules/send": { "version": "1.2.0", @@ -17927,14 +17855,6 @@ "node": ">= 18" } }, - "node_modules/send/node_modules/mime-db": { - "version": "1.54.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/send/node_modules/mime-types": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", @@ -17952,11 +17872,12 @@ } }, "node_modules/serialize-error": { - "version": "7.0.1", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", "dev": true, - "license": "MIT", "dependencies": { - "type-fest": "^0.13.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=10" @@ -17966,9 +17887,10 @@ } }, "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -17981,7 +17903,6 @@ "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.6.tgz", "integrity": "sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==", "dev": true, - "license": "MIT", "dependencies": { "@zeit/schemas": "2.36.0", "ajv": "8.18.0", @@ -18006,7 +17927,6 @@ "version": "6.1.7", "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", - "license": "MIT", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", @@ -18018,9 +17938,9 @@ } }, "node_modules/serve-handler/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -18040,23 +17960,6 @@ "node": ">= 0.6" } }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-handler/node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -18233,7 +18136,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", - "license": "MIT", "dependencies": { "@shikijs/core": "2.5.0", "@shikijs/engine-javascript": "2.5.0", @@ -18318,11 +18220,15 @@ "dev": true, "license": "ISC" }, + "node_modules/simple-lru-cache": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", + "integrity": "sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==" + }, "node_modules/simple-update-in": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/simple-update-in/-/simple-update-in-2.2.0.tgz", - "integrity": "sha512-FrW41lLiOs82jKxwq39UrE1HDAHOvirKWk4Nv8tqnFFFknVbTxcHZzDS4vt02qqdU/5+KNsQHWzhKHznDBmrww==", - "license": "MIT" + "integrity": "sha512-FrW41lLiOs82jKxwq39UrE1HDAHOvirKWk4Nv8tqnFFFknVbTxcHZzDS4vt02qqdU/5+KNsQHWzhKHznDBmrww==" }, "node_modules/simple-update-notifier": { "version": "2.0.0", @@ -18409,7 +18315,6 @@ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", "dev": true, - "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" @@ -18572,7 +18477,6 @@ "version": "4.2.3", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -18585,14 +18489,12 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -18731,7 +18633,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -18744,7 +18645,6 @@ "version": "6.0.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -18995,7 +18895,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", - "license": "MIT", "engines": { "node": ">=20" }, @@ -19018,11 +18917,10 @@ } }, "node_modules/terminal-columns": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/terminal-columns/-/terminal-columns-1.4.1.tgz", - "integrity": "sha512-IKVL/itiMy947XWVv4IHV7a0KQXvKjj4ptbi7Ew9MPMcOLzkiQeyx3Gyvh62hKrfJ0RZc4M1nbhzjNM39Kyujw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/terminal-columns/-/terminal-columns-2.0.0.tgz", + "integrity": "sha512-6IByuUjyNZJXUtwDNm+OIe62zgwwaRbH+WMNTcx05O2G5V9WhvluAAHJY8OvUdwmzMPpqAD/7EUpGdI6ae1aiQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/privatenumber/terminal-columns?sponsor=1" } @@ -19147,9 +19045,9 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -19174,6 +19072,17 @@ "dev": true, "license": "MIT" }, + "node_modules/textextensions": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", + "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", + "engines": { + "node": ">=0.8" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/thenify": { "version": "3.3.1", "dev": true, @@ -19193,6 +19102,15 @@ "node": ">=0.8" } }, + "node_modules/tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -19304,11 +19222,10 @@ } }, "node_modules/ts-api-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", - "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.12" }, @@ -19356,7 +19273,6 @@ "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.33.0.tgz", "integrity": "sha512-/PQtykJFVw90QICG7zyPDMIyueOXKL7jOJVoX5pILnb3Ux+7QqynOxfVvarE+K+yi7BZyOSY4r+OZNWSWRiEwQ==", "dev": true, - "license": "MIT", "dependencies": { "@tsd/typescript": "^5.9.2", "eslint-formatter-pretty": "^4.1.0", @@ -19382,7 +19298,6 @@ "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz", "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", "dev": true, - "license": "MIT", "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", @@ -19531,11 +19446,10 @@ } }, "node_modules/type-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/type-flag/-/type-flag-3.0.0.tgz", - "integrity": "sha512-3YaYwMseXCAhBB14RXW5cRQfJQlEknS6i4C8fCfeUdS3ihG9EdccdR9kt3vP73ZdeTGmPb4bZtkDn5XMIn1DLA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/type-flag/-/type-flag-4.2.0.tgz", + "integrity": "sha512-6h6QpSh5glA+BrMCq8FINo4o/BqSHNQdfIPpeSBt0s/6mynPaQWWZL+RHaYm95htTbid/spUbJer1yOCsA6ezQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/privatenumber/type-flag?sponsor=1" } @@ -19553,14 +19467,6 @@ "node": ">= 0.6" } }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.54.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/type-is/node_modules/mime-types": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", @@ -19648,11 +19554,10 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "devOptional": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19679,7 +19584,6 @@ "resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.2.0.tgz", "integrity": "sha512-c5pAU5d+m3GciDr/WhkFldz1NIEGBafuP/3xhFt9BEXS2gmn/LvjkoZ11vEBIuP8LkXfPNhOt1BUhM5efFuwOw==", "dev": true, - "license": "MIT", "dependencies": { "@types/postcss-modules-local-by-default": "^4.0.2", "@types/postcss-modules-scope": "^3.0.4", @@ -19821,10 +19725,9 @@ "license": "MIT" }, "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "license": "MIT" + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", @@ -19871,11 +19774,11 @@ } }, "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -19953,32 +19856,30 @@ } }, "node_modules/unplugin": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", - "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.0.0.tgz", + "integrity": "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==", "dev": true, "dependencies": { "@jridgewell/remapping": "^2.3.5", - "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" }, "engines": { - "node": ">=18.12.0" + "node": "^20.19.0 || >=22.12.0" } }, "node_modules/unplugin-lightningcss": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/unplugin-lightningcss/-/unplugin-lightningcss-0.4.3.tgz", - "integrity": "sha512-duRm9yQq/EbjsHHhNxgQJhelqSvUFNUN9UM/BomglCVQpmE3qD2d17UeAps1Pvoa6LHH23VRAYhEA4YKsf+sCQ==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/unplugin-lightningcss/-/unplugin-lightningcss-0.4.5.tgz", + "integrity": "sha512-PMm6POv3gt1HNbxYFItantjcP6dPG/BiV/9IXcVLVBv3BZ+pf7Eo4yE+siIGKoVMXjs3BfVXeETTw2Gv3D8iOw==", "dev": true, "dependencies": { - "lightningcss": "^1.30.1", - "magic-string": "^0.30.19", - "unplugin": "^2.3.10" + "lightningcss": "^1.31.1", + "unplugin": "^3.0.0" }, "engines": { - "node": ">=20.18.0" + "node": ">=20.19.0" }, "funding": { "url": "https://github.com/sponsors/sxzz" @@ -20043,17 +19944,24 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/url-search-params-polyfill": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/url-search-params-polyfill/-/url-search-params-polyfill-8.2.5.tgz", - "integrity": "sha512-FOEojW4XReTmtZOB7xqSHmJZhrNTmClhBriwLTmle4iA7bwuCo6ldSfbtsFSb8bTf3E0a3XpfonAdaur9vqq8A==", - "license": "MIT" + "integrity": "sha512-FOEojW4XReTmtZOB7xqSHmJZhrNTmClhBriwLTmle4iA7bwuCo6ldSfbtsFSb8bTf3E0a3XpfonAdaur9vqq8A==" }, "node_modules/use-propagate": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/use-propagate/-/use-propagate-0.2.2.tgz", "integrity": "sha512-cuOqTG8JKwkd1DHJAy1fkwIMhjVRZSdSvELJCXsROvmS49yd8CEXg4UDaDC7Qqsea0FAa1d8cFMY5pnodZul1w==", - "license": "MIT", "dependencies": { "use-propagate": "^0.2.2", "use-ref-from": "^0.1.0" @@ -20066,7 +19974,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/use-reduce-memo/-/use-reduce-memo-0.1.0.tgz", "integrity": "sha512-dJK1fMqvI7Lzh5xdKsZkZiqbvTyNtovQB7E3IWJp5tOeG7kdxZKdD5XSROiRGwAfB0qctgzJMcsCTp+m7y77UA==", - "license": "MIT", "dependencies": { "handler-chain": "^0.1.0", "use-reduce-memo": "^0.1.0", @@ -20092,7 +19999,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/use-state-with-ref/-/use-state-with-ref-0.2.1.tgz", "integrity": "sha512-6EPhnqXsdzEVnOQub5VoDmrTLI2PqKp8zIIw/fvfdW9F/qLboIZG5ifaRQpAon8Upu3QYnIYZ+8h+YYQdXUnCw==", - "license": "MIT", "dependencies": { "use-ref-from": "^0.2.1", "use-state-with-ref": "^0.2.1" @@ -20113,6 +20019,11 @@ "react": ">=16.8.0" } }, + "node_modules/username-sync": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/username-sync/-/username-sync-1.0.3.tgz", + "integrity": "sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA==" + }, "node_modules/util-deprecate": { "version": "1.0.2", "dev": true, @@ -20122,7 +20033,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -20222,7 +20132,6 @@ "version": "8.1.4", "resolved": "https://registry.npmjs.org/web-speech-cognitive-services/-/web-speech-cognitive-services-8.1.4.tgz", "integrity": "sha512-1d/2F5RDAMTJmJdSWWssKzmTsA6hkXz4kz3QzBpDvgjxWjDo4j2erb6KydyfaRzDRk4Pij4MtR1CtpzZtU9rSA==", - "license": "MIT", "dependencies": { "base64-arraybuffer": "^1.0.2", "event-as-promise": "^2.0.1", @@ -20248,11 +20157,10 @@ } }, "node_modules/webpack": { - "version": "5.105.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", - "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", + "version": "5.106.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz", + "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -20270,9 +20178,8 @@ "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", - "mime-types": "^2.1.27", + "mime-db": "^1.54.0", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", @@ -20297,19 +20204,14 @@ } }, "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-7.0.2.tgz", + "integrity": "sha512-dB0R4T+C/8YuvM+fabdvil6QE44/ChDXikV5lOOkrUeCkW5hTJv2pGLE3keh+D5hjYw8icBaJkZzpFoaHV4T+g==", "dev": true, - "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", + "@discoveryjs/json-ext": "^1.0.0", + "commander": "^14.0.3", + "cross-spawn": "^7.0.6", "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -20321,14 +20223,16 @@ "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=18.12.0" + "node": ">=20.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.82.0" + "webpack": "^5.101.0", + "webpack-bundle-analyzer": "^4.0.0 || ^5.0.0", + "webpack-dev-server": "^5.0.0" }, "peerDependenciesMeta": { "webpack-bundle-analyzer": { @@ -20340,11 +20244,12 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "12.1.0", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/webpack-merge": { @@ -20374,8 +20279,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/webpack-stats-plugin/-/webpack-stats-plugin-1.1.3.tgz", "integrity": "sha512-yUKYyy+e0iF/w31QdfioRKY+h3jDBRpthexBOWGKda99iu2l/wxYsI/XqdlP5IU58/0KB9CsJZgWNAl+/MPkRw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", @@ -20406,8 +20310,7 @@ "node_modules/whatwg-fetch": { "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "license": "MIT" + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" }, "node_modules/whatwg-mimetype": { "version": "3.0.0", @@ -20611,7 +20514,6 @@ "version": "7.0.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -20627,14 +20529,12 @@ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -20643,7 +20543,6 @@ "version": "4.2.3", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -20767,10 +20666,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", - "license": "ISC", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", "bin": { "yaml": "bin.mjs" }, @@ -20907,11 +20805,11 @@ "simple-update-in": "2.2.0", "use-reduce-memo": "0.1.0", "use-ref-from": "0.2.1", - "valibot": "1.2.0" + "valibot": "1.3.1" }, "devDependencies": { "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", "@msinternal/botframework-webchat-api-graph": "0.0.0-0", @@ -20922,19 +20820,19 @@ "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", "@msinternal/botframework-webchat-redux-store": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/dom-speech-recognition": "^0.0.7", + "@types/dom-speech-recognition": "^0.0.9", "@types/jest": "^29.5.14", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "@types/react": "^16.14.69", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", - "core-js": "^3.48.0", + "core-js": "^3.49.0", "cross-env": "^10.1.0", "globalize-compiler": "^1.1.1", "iana-tz-data": "^2019.1.0", "nodemon": "^3.1.14", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { "react": ">= 16.8.6", @@ -20946,7 +20844,7 @@ "version": "0.0.0-0", "license": "MIT", "dependencies": { - "valibot": "1.2.0" + "valibot": "1.3.1" }, "devDependencies": { "@msinternal/botframework-webchat-base": "0.0.0-0", @@ -20955,8 +20853,8 @@ "@testduet/given-when-then": "^0.1.0", "@types/use-sync-external-store": "^1.5.0", "botframework-webchat-core": "0.0.0-0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { "handler-chain": "0.1.1", @@ -20965,9 +20863,9 @@ } }, "packages/api-graph/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "dev": true, "dependencies": { "tagged-tag": "^1.0.0" @@ -20979,6 +20877,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "packages/api-graph/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "packages/api-middleware": { "name": "@msinternal/botframework-webchat-api-middleware", "version": "0.0.0-0", @@ -20986,17 +20897,17 @@ "dependencies": { "handler-chain": "0.1.1", "react-wrap-with": "0.1.0", - "valibot": "1.2.0" + "valibot": "1.3.1" }, "devDependencies": { "@jridgewell/sourcemap-codec": "^1.5.5", "@msinternal/botframework-webchat-base": "0.0.0-0", "@msinternal/botframework-webchat-react-hooks": "0.0.0-0", "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "cross-env": "^10.1.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { "react": ">= 16.8.6", @@ -21004,9 +20915,9 @@ } }, "packages/api-middleware/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "dev": true, "dependencies": { "tagged-tag": "^1.0.0" @@ -21018,22 +20929,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/api/node_modules/iter-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/iter-fest/-/iter-fest-0.3.1.tgz", - "integrity": "sha512-XL7DGglVGVevTuQAAhVAN3MbADeKyDcijPToBKUxZHpOSUJT22CfvGqsV1t34LyoVxDDL3MGPbHZVx20Lky0og==", - "license": "MIT", - "dependencies": { - "iter-fest": "^0.3.1" - }, + "packages/api-middleware/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", "peerDependencies": { - "core-js-pure": "^3.37.1" + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "packages/api/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "dev": true, "dependencies": { "tagged-tag": "^1.0.0" @@ -21049,7 +20961,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.2.1.tgz", "integrity": "sha512-iwRcKtgIPP4K++mR3LO5DLUf4WMfBWyAM20oUL9jbKfywoMTiRScUixGv0HkhlJxFm6uFv5yDnr5YwcSiJSm1g==", - "license": "MIT", "dependencies": { "use-ref-from": "^0.2.1" }, @@ -21057,37 +20968,39 @@ "react": ">=16.8.0" } }, + "packages/api/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "packages/base": { "name": "@msinternal/botframework-webchat-base", "version": "0.0.0-0", "license": "MIT", "devDependencies": { "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/node": "^25.3.3", - "core-js-pure": "^3.48.0", + "@types/node": "^25.6.0", + "core-js-pure": "^3.49.0", "cross-env": "^10.1.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { "valibot": "1.2.0" } }, - "packages/base/node_modules/core-js-pure": { - "version": "3.49.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.49.0.tgz", - "integrity": "sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "packages/base/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "dev": true, "dependencies": { "tagged-tag": "^1.0.0" @@ -21104,7 +21017,7 @@ "version": "0.0.0-0", "license": "MIT", "dependencies": { - "@babel/runtime": "7.28.6", + "@babel/runtime": "7.29.2", "adaptivecards": "3.0.6", "botframework-directlinejs": "0.15.8", "botframework-directlinespeech-sdk": "0.0.0-0", @@ -21112,8 +21025,8 @@ "botframework-webchat-component": "0.0.0-0", "botframework-webchat-core": "0.0.0-0", "classnames": "2.5.1", - "core-js": "3.48.0", - "katex": "0.16.33", + "core-js": "3.49.0", + "katex": "0.16.45", "math-random": "2.0.1", "mdast-util-from-markdown": "2.0.3", "memoize-one": "6.0.0", @@ -21121,22 +21034,22 @@ "micromark-extension-gfm": "3.0.0", "micromark-util-character": "2.1.1", "micromark-util-sanitize-uri": "2.0.1", - "microsoft-cognitiveservices-speech-sdk": "1.48.0", + "microsoft-cognitiveservices-speech-sdk": "1.49.0", "prop-types": "15.8.1", "punycode": "2.3.1", - "sanitize-html": "2.17.1", + "sanitize-html": "2.17.3", "shiki": "2.5.0", "url-search-params-polyfill": "8.2.5", "use-ref-from": "0.2.1", "uuid": "8.3.2", - "valibot": "1.2.0", + "valibot": "1.3.1", "web-speech-cognitive-services": "8.1.4", "whatwg-fetch": "3.6.20" }, "devDependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-runtime": "^7.29.0", - "@babel/preset-env": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", "@msinternal/adaptivecards": "0.0.0-0", @@ -21159,21 +21072,21 @@ "@msinternal/react-is": "0.0.0-0", "@msinternal/react-umd": "0.0.0-0", "@testduet/given-when-then": "^0.1.0", - "@types/dom-speech-recognition": "^0.0.7", + "@types/dom-speech-recognition": "^0.0.9", "@types/mdast": "^4.0.4", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "@types/react": "^16.14.69", "@types/react-dom": "^16.9.25", "@types/uuid": "^8.3.4", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "cross-env": "^10.1.0", - "esbuild": "^0.27.3", + "esbuild": "^0.28.0", "micromark-util-types": "^2.0.2", "read-pkg": "^10.1.0", "tsd": "^0.33.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { "react": ">= 16.8.6", @@ -21181,429 +21094,437 @@ "react-dom": ">= 16.8.6" } }, - "packages/bundle/node_modules/botframework-directlinespeech-sdk/node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", - "extraneous": true, - "license": "MIT", + "packages/bundle/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "packages/bundle/node_modules/botframework-directlinespeech-sdk/node_modules/core-js": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz", - "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", - "extraneous": true, - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "packages/bundle/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "packages/bundle/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "packages/bundle/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/bundle/node_modules/parse-json/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "packages/bundle/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "(MIT OR CC0-1.0)", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "packages/bundle/node_modules/read-pkg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", - "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", + "packages/bundle/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.4", - "normalize-package-data": "^8.0.0", - "parse-json": "^8.3.0", - "type-fest": "^5.4.4", - "unicorn-magic": "^0.4.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "packages/bundle/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "packages/bundle/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "packages/bundle/node_modules/unicorn-magic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "packages/bundle/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "packages/bundle/node_modules/use-ref-from": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.2.1.tgz", - "integrity": "sha512-iwRcKtgIPP4K++mR3LO5DLUf4WMfBWyAM20oUL9jbKfywoMTiRScUixGv0HkhlJxFm6uFv5yDnr5YwcSiJSm1g==", - "license": "MIT", - "dependencies": { - "use-ref-from": "^0.2.1" - }, - "peerDependencies": { - "react": ">=16.8.0" + "packages/bundle/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "packages/component": { - "name": "botframework-webchat-component", - "version": "0.0.0-0", - "license": "MIT", - "dependencies": { - "@emotion/css": "11.13.5", - "base64-js": "1.5.1", - "botframework-webchat-api": "0.0.0-0", - "botframework-webchat-core": "0.0.0-0", - "classnames": "2.5.1", - "compute-scroll-into-view": "1.0.20", - "deep-freeze-strict": "1.1.1", - "markdown-it": "13.0.2", - "math-random": "2.0.1", - "mdast-util-from-markdown": "2.0.3", - "memoize-one": "6.0.0", - "merge-refs": "2.0.0", - "prop-types": "15.8.1", - "punycode": "2.3.1", - "react-chain-of-responsibility": "0.4.2", - "react-dictate-button": "4.0.1", - "react-film": "4.0.0", - "react-redux": "7.2.9", - "react-say": "2.2.1", - "react-scroll-to-bottom": "4.2.1-main.53844f5", - "react-wrap-with": "0.1.0", - "redux": "5.0.1", - "simple-update-in": "2.2.0", - "use-propagate": "0.2.2", - "use-reduce-memo": "0.1.0", - "use-ref-from": "0.2.1", - "use-state-with-ref": "0.2.1", - "valibot": "1.2.0" - }, - "devDependencies": { - "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", - "@babel/preset-react": "^7.28.5", - "@babel/preset-typescript": "^7.28.5", - "@msinternal/botframework-webchat-base": "0.0.0-0", - "@msinternal/botframework-webchat-react-hooks": "0.0.0-0", - "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", - "@msinternal/botframework-webchat-styles": "0.0.0-0", - "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/dom-speech-recognition": "^0.0.7", - "@types/jest": "^29.5.14", - "@types/mdast": "^4.0.4", - "@types/node": "^25.3.3", - "@types/react": "^16.14.69", - "babel-plugin-istanbul": "^7.0.1", - "babel-plugin-transform-inline-environment-variables": "^0.4.4", - "core-js": "^3.48.0", - "cross-env": "^10.1.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" - }, - "peerDependencies": { - "react": ">= 16.8.6", - "react-dom": ">= 16.8.6" + "packages/bundle/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "packages/component/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "packages/bundle/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "packages/component/node_modules/use-ref-from": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.2.1.tgz", - "integrity": "sha512-iwRcKtgIPP4K++mR3LO5DLUf4WMfBWyAM20oUL9jbKfywoMTiRScUixGv0HkhlJxFm6uFv5yDnr5YwcSiJSm1g==", - "license": "MIT", - "dependencies": { - "use-ref-from": "^0.2.1" - }, - "peerDependencies": { - "react": ">=16.8.0" + "packages/bundle/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "packages/core": { - "name": "botframework-webchat-core", - "version": "0.0.0-0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "7.28.6", - "@redux-devtools/extension": "3.3.0", - "core-js-pure": "3.48.0", - "iter-fest": "0.3.1", - "jwt-decode": "4.0.0", - "math-random": "2.0.1", - "mime": "4.1.0", - "redux": "5.0.1", - "redux-saga": "1.4.2", - "simple-update-in": "2.2.0", - "uuid": "8.3.2", - "valibot": "1.2.0" - }, - "devDependencies": { - "@babel/core": "^7.29.0", - "@babel/plugin-transform-runtime": "^7.29.0", - "@babel/plugin-transform-typescript": "^7.28.6", - "@babel/preset-env": "^7.29.0", - "@msinternal/botframework-webchat-base": "0.0.0-0", - "@msinternal/botframework-webchat-core-debug-api": "0.0.0-0", - "@msinternal/botframework-webchat-core-graph": "0.0.0-0", - "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@testduet/given-when-then": "^0.1.0", - "@types/jest": "^29.5.14", - "@types/node": "^25.3.3", - "@types/uuid": "^8.3.4", - "babel-plugin-istanbul": "^7.0.1", - "babel-plugin-transform-inline-environment-variables": "^0.4.4", - "botframework-directlinejs": "^0.15.8", - "cross-env": "^10.1.0", - "tsd": "^0.33.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" - }, + "packages/bundle/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12.0.0" + "node": ">=18" } }, - "packages/core-debug-api": { - "name": "@msinternal/botframework-webchat-core-debug-api", - "version": "0.0.0-0", - "license": "MIT", - "dependencies": { - "tagged-tag": "1.0.0" - }, - "devDependencies": { - "@msinternal/botframework-webchat-base": "0.0.0-0", - "type-fest": "^5.4.4" + "packages/bundle/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "packages/core-debug-api/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "packages/bundle/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "packages/core-graph": { - "name": "@msinternal/botframework-webchat-core-graph", - "version": "0.0.0-0", - "license": "MIT", - "dependencies": { - "valibot": "1.2.0" - }, - "devDependencies": { - "@msinternal/botframework-webchat-base": "0.0.0-0", - "@testduet/given-when-then": "^0.1.0", - "@types/uuid": "^8.3.4", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" - }, - "peerDependencies": { - "core-js-pure": "3.47.0", - "iter-fest": "0.3.0", - "uuid": "8.3.2" + "packages/bundle/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "packages/core-graph/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "packages/bundle/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "packages/core/node_modules/core-js-pure": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz", - "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "packages/bundle/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "packages/core/node_modules/iter-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/iter-fest/-/iter-fest-0.3.1.tgz", - "integrity": "sha512-XL7DGglVGVevTuQAAhVAN3MbADeKyDcijPToBKUxZHpOSUJT22CfvGqsV1t34LyoVxDDL3MGPbHZVx20Lky0og==", - "license": "MIT", - "dependencies": { - "iter-fest": "^0.3.1" - }, - "peerDependencies": { - "core-js-pure": "^3.37.1" + "packages/bundle/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "packages/core/node_modules/mime": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", - "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", - "funding": [ - "https://github.com/sponsors/broofa" + "packages/bundle/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" ], - "license": "MIT", - "bin": { - "mime": "bin/cli.js" - }, "engines": { - "node": ">=16" + "node": ">=18" } }, - "packages/core/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "packages/bundle/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "packages/debug-theme": { - "name": "@msinternal/botframework-webchat-debug-theme", - "version": "0.0.0-0", - "license": "MIT", - "dependencies": { - "botframework-webchat-api": "0.0.0-0", - "botframework-webchat-component": "0.0.0-0" - }, - "peerDependencies": { - "react": ">= 16.8.6" + "packages/bundle/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "packages/directlinespeech": { - "name": "botframework-directlinespeech-sdk", - "version": "0.0.0-0", + "packages/bundle/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/bundle/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/bundle/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/bundle/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/bundle/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/bundle/node_modules/botframework-directlinespeech-sdk/node_modules/@babel/runtime": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "extraneous": true, "license": "MIT", - "dependencies": { - "@babel/runtime": "7.28.6", - "abort-controller": "3.0.0", - "base64-arraybuffer": "1.0.2", - "core-js": "3.48.0", - "core-js-pure": "3.48.0", - "event-as-promise": "2.0.1", - "event-target-shim": "6.0.2", - "math-random": "2.0.1", - "microsoft-cognitiveservices-speech-sdk": "1.48.0", - "web-speech-cognitive-services": "8.1.4" - }, - "devDependencies": { - "@babel/cli": "^7.28.6", - "@babel/core": "^7.29.0", - "@babel/plugin-transform-runtime": "^7.29.0", - "@babel/preset-env": "^7.29.0", - "@types/jest": "^29.5.14", - "@typescript-eslint/eslint-plugin": "^8.56.1", - "@typescript-eslint/parser": "^8.56.1", - "babel-jest": "^29.7.0", - "babel-plugin-istanbul": "^7.0.1", - "babel-plugin-transform-inline-environment-variables": "^0.4.4", - "cross-env": "^10.1.0", - "dotenv": "^17.3.1", - "eslint": "^8.57.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^5.5.5", - "eslint-plugin-security": "^4.0.0", - "global-agent": "^3.0.0", - "has-resolved": "^2.0.0", - "jest": "^29.7.0", - "prettier": "^3.8.1", - "serve": "^14.2.6", - "simple-update-in": "^2.2.0", - "source-map-loader": "^5.0.0", - "webpack": "^5.105.4", - "webpack-cli": "^6.0.1", - "webpack-stats-plugin": "^1.1.3" - }, "engines": { - "node": ">= 10.14.2" + "node": ">=6.9.0" } }, - "packages/directlinespeech/node_modules/core-js-pure": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz", - "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==", + "packages/bundle/node_modules/botframework-directlinespeech-sdk/node_modules/core-js": { + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz", + "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", + "extraneous": true, "hasInstallScript": true, "license": "MIT", "funding": { @@ -21611,65 +21532,166 @@ "url": "https://opencollective.com/core-js" } }, - "packages/directlinespeech/node_modules/eslint-plugin-security": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-4.0.0.tgz", - "integrity": "sha512-tfuQT8K/Li1ZxhFzyD8wPIKtlzZxqBcPr9q0jFMQ77wWAbKBVEhaMPVQRTMTvCMUDhwBe5vPVqQPwAGk/ASfxQ==", + "packages/bundle/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-regex": "^2.1.1" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=18" }, - "funding": { - "url": "https://opencollective.com/eslint" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" } }, - "packages/directlinespeech/node_modules/event-target-shim": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", - "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", - "license": "MIT", + "packages/bundle/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", + "dev": true, + "dependencies": { + "tagged-tag": "^1.0.0" + }, "engines": { - "node": ">=10.13.0" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/fluent-theme": { - "name": "botframework-webchat-fluent-theme", + "packages/bundle/node_modules/use-ref-from": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.2.1.tgz", + "integrity": "sha512-iwRcKtgIPP4K++mR3LO5DLUf4WMfBWyAM20oUL9jbKfywoMTiRScUixGv0HkhlJxFm6uFv5yDnr5YwcSiJSm1g==", + "dependencies": { + "use-ref-from": "^0.2.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "packages/bundle/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/component": { + "name": "botframework-webchat-component", "version": "0.0.0-0", "license": "MIT", "dependencies": { - "botframework-webchat": "0.0.0-0", + "@emotion/css": "11.13.5", + "base64-js": "1.5.1", + "botframework-webchat-api": "0.0.0-0", + "botframework-webchat-core": "0.0.0-0", "classnames": "2.5.1", - "inject-meta-tag": "0.1.0", + "compute-scroll-into-view": "1.0.20", + "deep-freeze-strict": "1.1.1", + "markdown-it": "13.0.2", "math-random": "2.0.1", + "mdast-util-from-markdown": "2.0.3", + "memoize-one": "6.0.0", + "merge-refs": "2.0.0", + "prop-types": "15.8.1", + "punycode": "2.3.1", + "react-chain-of-responsibility": "0.4.2", + "react-dictate-button": "4.0.1", + "react-film": "4.0.0", + "react-redux": "7.2.9", + "react-say": "2.2.1", + "react-scroll-to-bottom": "4.2.1-main.53844f5", + "react-wrap-with": "0.1.0", + "redux": "5.0.1", + "simple-update-in": "2.2.0", + "use-propagate": "0.2.2", + "use-reduce-memo": "0.1.0", "use-ref-from": "0.2.1", - "valibot": "1.2.0" + "use-state-with-ref": "0.2.1", + "valibot": "1.3.1" }, "devDependencies": { + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "@babel/preset-react": "^7.28.5", + "@babel/preset-typescript": "^7.28.5", + "@msinternal/botframework-webchat-base": "0.0.0-0", + "@msinternal/botframework-webchat-react-hooks": "0.0.0-0", + "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", "@msinternal/botframework-webchat-styles": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/math-random": "^1.0.2", - "@types/node": "^25.3.3", + "@types/dom-speech-recognition": "^0.0.9", + "@types/jest": "^29.5.14", + "@types/mdast": "^4.0.4", + "@types/node": "^25.6.0", "@types/react": "^16.14.69", - "concurrently": "^9.2.1", - "tsup": "^8.5.1", - "typescript": "^5.9.3" + "babel-plugin-istanbul": "^8.0.0", + "babel-plugin-transform-inline-environment-variables": "^0.4.4", + "core-js": "^3.49.0", + "cross-env": "^10.1.0", + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { - "react": ">= 16.8.6" + "react": ">= 16.8.6", + "react-dom": ">= 16.8.6" } }, - "packages/fluent-theme/node_modules/use-ref-from": { + "packages/component/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", + "dev": true, + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/component/node_modules/use-ref-from": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.2.1.tgz", "integrity": "sha512-iwRcKtgIPP4K++mR3LO5DLUf4WMfBWyAM20oUL9jbKfywoMTiRScUixGv0HkhlJxFm6uFv5yDnr5YwcSiJSm1g==", - "license": "MIT", "dependencies": { "use-ref-from": "^0.2.1" }, @@ -21677,668 +21699,8181 @@ "react": ">=16.8.0" } }, - "packages/isomorphic-react": { - "name": "@msinternal/isomorphic-react", - "version": "0.0.0-0", - "license": "MIT", - "devDependencies": { - "@babel/cli": "^7.28.6", - "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", - "webpack": "^5.105.4", - "webpack-cli": "^6.0.1" - } - }, - "packages/isomorphic-react-dom": { - "name": "@msinternal/isomorphic-react-dom", + "packages/component/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/core": { + "name": "botframework-webchat-core", "version": "0.0.0-0", "license": "MIT", + "dependencies": { + "@babel/runtime": "7.29.2", + "@redux-devtools/extension": "4.0.0", + "core-js-pure": "3.49.0", + "iter-fest": "0.3.1", + "jwt-decode": "4.0.0", + "math-random": "2.0.1", + "mime": "4.1.0", + "redux": "5.0.1", + "redux-saga": "1.4.2", + "simple-update-in": "2.2.0", + "uuid": "8.3.2", + "valibot": "1.3.1" + }, "devDependencies": { - "@babel/cli": "^7.28.6", "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", - "webpack": "^5.105.4", - "webpack-cli": "^6.0.1" + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/plugin-transform-typescript": "^7.28.6", + "@babel/preset-env": "^7.29.2", + "@msinternal/botframework-webchat-base": "0.0.0-0", + "@msinternal/botframework-webchat-core-debug-api": "0.0.0-0", + "@msinternal/botframework-webchat-core-graph": "0.0.0-0", + "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", + "@testduet/given-when-then": "^0.1.0", + "@types/jest": "^29.5.14", + "@types/node": "^25.6.0", + "@types/uuid": "^8.3.4", + "babel-plugin-istanbul": "^8.0.0", + "babel-plugin-transform-inline-environment-variables": "^0.4.4", + "botframework-directlinejs": "^0.15.8", + "cross-env": "^10.1.0", + "tsd": "^0.33.0", + "type-fest": "^5.6.0", + "typescript": "^6.0.3" + }, + "engines": { + "node": ">=12.0.0" } }, - "packages/react-hooks": { - "name": "@msinternal/botframework-webchat-react-hooks", + "packages/core-debug-api": { + "name": "@msinternal/botframework-webchat-core-debug-api", "version": "0.0.0-0", "license": "MIT", + "dependencies": { + "tagged-tag": "1.0.0" + }, "devDependencies": { - "@msinternal/botframework-webchat-base": "0.0.0-0" + "@msinternal/botframework-webchat-base": "0.0.0-0", + "type-fest": "^5.6.0" + } + }, + "packages/core-debug-api/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", + "dev": true, + "dependencies": { + "tagged-tag": "^1.0.0" }, - "peerDependencies": { - "react": ">= 16.8.6" + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/react-valibot": { - "name": "@msinternal/botframework-webchat-react-valibot", + "packages/core-graph": { + "name": "@msinternal/botframework-webchat-core-graph", "version": "0.0.0-0", "license": "MIT", + "dependencies": { + "valibot": "1.3.1" + }, "devDependencies": { - "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/jest": "^29.5.14", - "@types/react": "^16.14.69", - "tsup": "^8.5.1", - "typescript": "^5.9.3" + "@msinternal/botframework-webchat-base": "0.0.0-0", + "@testduet/given-when-then": "^0.1.0", + "@types/uuid": "^8.3.4", + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { - "react": ">= 16.8.6", - "valibot": "1.2.0" + "core-js-pure": "^3.49.0", + "iter-fest": "^0.3.1", + "uuid": "^8.3.2" } }, - "packages/redux-store": { - "name": "@msinternal/botframework-webchat-redux-store", - "version": "0.0.0-0", - "license": "MIT", + "packages/core-graph/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", + "dev": true, "dependencies": { - "botframework-webchat-core": "0.0.0-0", - "valibot": "1.2.0" + "tagged-tag": "^1.0.0" }, - "devDependencies": { - "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", - "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/react": "^16.14.69", - "tsup": "^8.5.1", - "typescript": "^5.9.3" + "engines": { + "node": ">=20" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/core-graph/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", "peerDependencies": { - "react": ">= 16.8.6" + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "packages/repack/adaptivecards": { - "name": "@msinternal/adaptivecards", - "version": "0.0.0-0", + "packages/core/node_modules/mime": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "packages/core/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", + "dev": true, "dependencies": { - "adaptivecards": "3.0.6" + "tagged-tag": "^1.0.0" }, - "devDependencies": { - "esbuild": "^0.27.3" + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/repack/base64-js": { - "name": "@msinternal/base64-js", + "packages/core/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/debug-theme": { + "name": "@msinternal/botframework-webchat-debug-theme", "version": "0.0.0-0", + "license": "MIT", "dependencies": { - "base64-js": "1.5.1" + "botframework-webchat-api": "0.0.0-0", + "botframework-webchat-component": "0.0.0-0" }, - "devDependencies": { - "esbuild": "^0.27.3" + "peerDependencies": { + "react": ">= 16.8.6" } }, - "packages/repack/botframework-directlinejs": { - "name": "@msinternal/botframework-directlinejs", + "packages/directlinespeech": { + "name": "botframework-directlinespeech-sdk", "version": "0.0.0-0", + "license": "MIT", "dependencies": { - "botframework-directlinejs": "0.15.8" + "@babel/runtime": "7.29.2", + "abort-controller": "3.0.0", + "base64-arraybuffer": "1.0.2", + "core-js": "3.49.0", + "core-js-pure": "3.49.0", + "event-as-promise": "2.0.1", + "event-target-shim": "6.0.2", + "math-random": "2.0.1", + "microsoft-cognitiveservices-speech-sdk": "1.17.0", + "web-speech-cognitive-services": "8.1.4" }, "devDependencies": { - "esbuild": "^0.27.3" + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "@types/jest": "^29.5.14", + "@typescript-eslint/eslint-plugin": "^8.59.0", + "@typescript-eslint/parser": "^8.59.0", + "babel-jest": "^29.7.0", + "babel-plugin-istanbul": "^8.0.0", + "babel-plugin-transform-inline-environment-variables": "^0.4.4", + "cross-env": "^10.1.0", + "dotenv": "^17.4.2", + "eslint": "^8.57.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-security": "^4.0.0", + "global-agent": "^3.0.0", + "has-resolved": "^2.0.0", + "jest": "^29.7.0", + "prettier": "^3.8.3", + "serve": "^14.2.6", + "simple-update-in": "^2.2.0", + "source-map-loader": "^5.0.0", + "webpack": "^5.106.2", + "webpack-cli": "^7.0.2", + "webpack-stats-plugin": "^1.1.3" + }, + "engines": { + "node": ">= 10.14.2" } }, - "packages/repack/html-react-parser": { - "name": "@msinternal/html-react-parser", - "version": "0.0.0-0", + "packages/directlinespeech/node_modules/@angular/common": { + "version": "21.2.9", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.9.tgz", + "integrity": "sha512-7spQcF3hPN/fjTx6Pwa32KRRdO0NcixnRuPV4lo50ejtXesjiLVR+fkaX38sawAyGoq89IuuYvUDrbLwCMypmQ==", + "peer": true, "dependencies": { - "html-react-parser": "5.2.17" + "tslib": "^2.3.0" }, - "devDependencies": { - "esbuild": "^0.27.3" + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "21.2.9", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "packages/repack/microsoft-cognitiveservices-speech-sdk": { - "name": "@msinternal/microsoft-cognitiveservices-speech-sdk", - "version": "0.0.0-0", + "packages/directlinespeech/node_modules/@angular/core": { + "version": "21.2.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.9.tgz", + "integrity": "sha512-uZLq2aedJ+0uEZxyf6a1Nc7y1aZ7akAW7K1Kon8JUDZOvI2IDbk0i00MzkELt8q9uSmSSqg9zNKuhjspFf0Pyw==", + "peer": true, "dependencies": { - "microsoft-cognitiveservices-speech-sdk": "1.48.0" + "tslib": "^2.3.0" }, - "devDependencies": { - "esbuild": "^0.27.3" + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.2.9", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } } }, - "packages/repack/object-assign": { - "name": "@msinternal/object-assign", - "version": "0.0.0-0" + "packages/directlinespeech/node_modules/event-target-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", + "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "packages/repack/react": { - "name": "@msinternal/react", - "version": "0.0.0-0", + "packages/directlinespeech/node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, "dependencies": { - "react": "18.3.1" + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" }, - "devDependencies": { - "@types/react": "^18.3.28", - "esbuild": "^0.27.3" + "engines": { + "node": ">=10.0" } }, - "packages/repack/react-dom": { - "name": "@msinternal/react-dom", - "version": "0.0.0-0", + "packages/directlinespeech/node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, "dependencies": { - "react-dom": "18.3.1" + "escape-string-regexp": "^4.0.0" }, - "devDependencies": { - "@types/react-dom": "^18.3.7", - "esbuild": "^0.27.3" + "engines": { + "node": ">=10" } }, - "packages/repack/react-dom@baseline": { - "name": "@msinternal/react-dom-baseline", - "version": "0.0.0-0", + "packages/directlinespeech/node_modules/microsoft-cognitiveservices-speech-sdk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.17.0.tgz", + "integrity": "sha512-RVUCpTeu1g+R4HB/PaLQmEfsdHzwEa6+2phgCiPA4lGIiR7ILEL7qZHHUWAG6W4zcjnWeiLnL7tVgMbyd5XGgA==", "dependencies": { - "react-dom": "16.8.6" + "agent-base": "^6.0.1", + "asn1.js-rfc2560": "^5.0.1", + "asn1.js-rfc5280": "^3.0.0", + "async-disk-cache": "^2.1.0", + "https-proxy-agent": "^4.0.0", + "simple-lru-cache": "0.0.2", + "url-parse": "^1.4.7", + "uuid": "^3.3.3", + "ws": "^7.3.1", + "xmlhttprequest-ts": "^1.0.1" + } + }, + "packages/directlinespeech/node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "packages/directlinespeech/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/directlinespeech/node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/directlinespeech/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/directlinespeech/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "packages/directlinespeech/node_modules/xmlhttprequest-ts": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ts/-/xmlhttprequest-ts-1.0.1.tgz", + "integrity": "sha512-x+7u8NpBcwfBCeGqUpdGrR6+kGUGVjKc4wolyCz7CQqBZQp7VIyaF1xAvJ7ApRzvLeuiC4BbmrA6CWH9NqxK/g==", + "dependencies": { + "tslib": "^1.9.2" + }, + "peerDependencies": { + "@angular/common": ">= 5.0.0", + "@angular/core": ">= 5.0.0" + } + }, + "packages/directlinespeech/node_modules/xmlhttprequest-ts/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "packages/fluent-theme": { + "name": "botframework-webchat-fluent-theme", + "version": "0.0.0-0", + "license": "MIT", + "dependencies": { + "botframework-webchat": "0.0.0-0", + "classnames": "2.5.1", + "inject-meta-tag": "0.1.0", + "math-random": "2.0.1", + "use-ref-from": "0.2.1", + "valibot": "1.3.1" }, "devDependencies": { - "@msinternal/object-assign": "0.0.0-0", - "@types/react-dom": "^16.9.25", - "esbuild": "^0.27.3" + "@msinternal/botframework-webchat-styles": "0.0.0-0", + "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", + "@types/math-random": "^1.0.2", + "@types/node": "^25.6.0", + "@types/react": "^16.14.69", + "concurrently": "^9.2.1", + "tsup": "^8.5.1", + "typescript": "^6.0.3" + }, + "peerDependencies": { + "react": ">= 16.8.6" + } + }, + "packages/fluent-theme/node_modules/use-ref-from": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.2.1.tgz", + "integrity": "sha512-iwRcKtgIPP4K++mR3LO5DLUf4WMfBWyAM20oUL9jbKfywoMTiRScUixGv0HkhlJxFm6uFv5yDnr5YwcSiJSm1g==", + "dependencies": { + "use-ref-from": "^0.2.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "packages/fluent-theme/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/isomorphic-react": { + "name": "@msinternal/isomorphic-react", + "version": "0.0.0-0", + "license": "MIT", + "devDependencies": { + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "webpack": "^5.106.2", + "webpack-cli": "^7.0.2" + } + }, + "packages/isomorphic-react-dom": { + "name": "@msinternal/isomorphic-react-dom", + "version": "0.0.0-0", + "license": "MIT", + "devDependencies": { + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "webpack": "^5.106.2", + "webpack-cli": "^7.0.2" + } + }, + "packages/react-hooks": { + "name": "@msinternal/botframework-webchat-react-hooks", + "version": "0.0.0-0", + "license": "MIT", + "devDependencies": { + "@msinternal/botframework-webchat-base": "0.0.0-0" + }, + "peerDependencies": { + "react": ">= 16.8.6" + } + }, + "packages/react-valibot": { + "name": "@msinternal/botframework-webchat-react-valibot", + "version": "0.0.0-0", + "license": "MIT", + "devDependencies": { + "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", + "@types/jest": "^29.5.14", + "@types/react": "^16.14.69", + "tsup": "^8.5.1", + "typescript": "^6.0.3" + }, + "peerDependencies": { + "react": ">= 16.8.6", + "valibot": "1.2.0" + } + }, + "packages/redux-store": { + "name": "@msinternal/botframework-webchat-redux-store", + "version": "0.0.0-0", + "license": "MIT", + "dependencies": { + "botframework-webchat-core": "0.0.0-0", + "valibot": "1.3.1" + }, + "devDependencies": { + "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", + "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", + "@types/react": "^16.14.69", + "tsup": "^8.5.1", + "typescript": "^6.0.3" + }, + "peerDependencies": { + "react": ">= 16.8.6" + } + }, + "packages/redux-store/node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/repack/adaptivecards": { + "name": "@msinternal/adaptivecards", + "version": "0.0.0-0", + "dependencies": { + "adaptivecards": "3.0.6" + }, + "devDependencies": { + "esbuild": "^0.28.0" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/adaptivecards/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/base64-js": { + "name": "@msinternal/base64-js", + "version": "0.0.0-0", + "dependencies": { + "base64-js": "1.5.1" + }, + "devDependencies": { + "esbuild": "^0.28.0" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/base64-js/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/botframework-directlinejs": { + "name": "@msinternal/botframework-directlinejs", + "version": "0.0.0-0", + "dependencies": { + "botframework-directlinejs": "0.15.8" + }, + "devDependencies": { + "esbuild": "^0.28.0" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/botframework-directlinejs/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/html-react-parser": { + "name": "@msinternal/html-react-parser", + "version": "0.0.0-0", + "dependencies": { + "html-react-parser": "6.0.1" + }, + "devDependencies": { + "esbuild": "^0.28.0" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/html-react-parser/node_modules/dom-serializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-3.0.0.tgz", + "integrity": "sha512-x+9D6nkC8tdXOQUS32egtZpZFLP90+HBZmWjuT920srbJvD/zPgFB9t4k3pEhlw5BQrXStQtRc1Y1zuriXk+Nw==", + "dependencies": { + "domelementtype": "^3.0.0", + "domhandler": "^6.0.0", + "entities": "^8.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "packages/repack/html-react-parser/node_modules/domelementtype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-3.0.0.tgz", + "integrity": "sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "engines": { + "node": ">=20.19.0" + } + }, + "packages/repack/html-react-parser/node_modules/domhandler": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-6.0.1.tgz", + "integrity": "sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==", + "dependencies": { + "domelementtype": "^3.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "packages/repack/html-react-parser/node_modules/domutils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-4.0.2.tgz", + "integrity": "sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA==", + "dependencies": { + "dom-serializer": "^3.0.0", + "domelementtype": "^3.0.0", + "domhandler": "^6.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "packages/repack/html-react-parser/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "packages/repack/html-react-parser/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/html-react-parser/node_modules/html-dom-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-7.0.1.tgz", + "integrity": "sha512-loRBDTCY/05/jAC63J1X9ID+xjRucmpLkIcQO0IRbOubBo5ucnpUpyXXob9UMXOskMZlu7KPsDP/2KOMelzJNA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/remarkablemark" + } + ], + "dependencies": { + "domhandler": "6.0.1", + "htmlparser2": "12.0.0" + } + }, + "packages/repack/html-react-parser/node_modules/html-react-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-6.0.1.tgz", + "integrity": "sha512-tIie2HSIk2Ct1tdupjd/DhBjskxN/NL5J4ncbUnk2smBr5UIfpPpitUo0imGfBM0BlOL7ac8RcqEwne1jXTcsQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/remarkablemark" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/html-react-parser" + } + ], + "dependencies": { + "domhandler": "6.0.1", + "html-dom-parser": "7.0.1", + "react-property": "2.0.2", + "style-to-js": "1.1.21" + }, + "peerDependencies": { + "@types/react": "0.14 || 15 || 16 || 17 || 18 || 19", + "react": "0.14 || 15 || 16 || 17 || 18 || 19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/repack/html-react-parser/node_modules/htmlparser2": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-12.0.0.tgz", + "integrity": "sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^3.0.0", + "domhandler": "^6.0.0", + "domutils": "^4.0.2", + "entities": "^8.0.0" + }, + "engines": { + "node": ">=20.19.0" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk": { + "name": "@msinternal/microsoft-cognitiveservices-speech-sdk", + "version": "0.0.0-0", + "dependencies": { + "microsoft-cognitiveservices-speech-sdk": "1.49.0" + }, + "devDependencies": { + "esbuild": "^0.28.0" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/microsoft-cognitiveservices-speech-sdk/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/object-assign": { + "name": "@msinternal/object-assign", + "version": "0.0.0-0" + }, + "packages/repack/react": { + "name": "@msinternal/react", + "version": "0.0.0-0", + "dependencies": { + "react": "18.3.1" + }, + "devDependencies": { + "@types/react": "^18.3.28", + "esbuild": "^0.28.0" + } + }, + "packages/repack/react-dom": { + "name": "@msinternal/react-dom", + "version": "0.0.0-0", + "dependencies": { + "react-dom": "18.3.1" + }, + "devDependencies": { + "@types/react-dom": "^18.3.7", + "esbuild": "^0.28.0" + } + }, + "packages/repack/react-dom@baseline": { + "name": "@msinternal/react-dom-baseline", + "version": "0.0.0-0", + "dependencies": { + "react-dom": "16.8.6" + }, + "devDependencies": { + "@msinternal/object-assign": "0.0.0-0", + "@types/react-dom": "^16.9.25", + "esbuild": "^0.28.0" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@baseline/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/react-dom@umd": { + "name": "@msinternal/react-dom-umd", + "version": "0.0.0-0", + "devDependencies": { + "esbuild": "^0.28.0" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom@umd/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-dom/node_modules/@types/react": { + "version": "18.3.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "packages/repack/react-dom/node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "packages/repack/react-dom/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/react-dom/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/repack/react-dom/node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "packages/repack/react-dom/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "packages/repack/react-is": { + "name": "@msinternal/react-is", + "version": "0.0.0-0", + "dependencies": { + "react-is": "16.13.1" + }, + "devDependencies": { + "@types/react-is": "^16.7.5", + "esbuild": "^0.28.0" + } + }, + "packages/repack/react-is/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react-is/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/react-is/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "packages/repack/react@baseline": { + "name": "@msinternal/react-baseline", + "version": "0.0.0-0", + "dependencies": { + "react": "16.8.6" + }, + "devDependencies": { + "@msinternal/object-assign": "0.0.0-0", + "@types/react": "^16.14.69", + "esbuild": "^0.28.0" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@baseline/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/react@umd": { + "name": "@msinternal/react-umd", + "version": "0.0.0-0", + "devDependencies": { + "esbuild": "^0.28.0" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react@umd/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/react/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/repack/react/node_modules/@types/react": { + "version": "18.3.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "packages/repack/react/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/repack/react/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/styles": { + "name": "@msinternal/botframework-webchat-styles", + "version": "0.0.0-0", + "license": "MIT", + "devDependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5", + "@msinternal/botframework-webchat-base": "0.0.0-0", + "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", + "@types/node": "^25.6.0", + "cross-env": "^10.1.0", + "esbuild": "^0.28.0", + "tsup": "^8.5.1", + "type-fest": "^5.6.0", + "typescript": "^6.0.3" + }, + "peerDependencies": { + "react": ">= 16.8.6" + } + }, + "packages/styles/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/styles/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" + } + }, + "packages/styles/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", + "dev": true, + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/support/cldr-data": { + "name": "@msinternal/botframework-webchat-cldr-data", + "version": "0.0.0-0", + "dependencies": { + "@msinternal/botframework-webchat-cldr-data-downloader": "0.0.0-0", + "glob": "8.1.0", + "read-package-up": "12.0.0", + "read-pkg": "10.1.0" + }, + "engines": { + "node": ">= 12" + } + }, + "packages/support/cldr-data-downloader": { + "name": "@msinternal/botframework-webchat-cldr-data-downloader", + "version": "0.0.0-0", + "dependencies": { + "adm-zip": "0.5.17", + "nopt": "9.0.0", + "progress": "2.0.3", + "q": "1.5.1" + }, + "bin": { + "cldr-data-downloader": "bin/download.sh" + }, + "engines": { + "node": ">= 12" + } + }, + "packages/support/cldr-data/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/support/cldr-data/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "packages/test/dev-server": { + "name": "@msinternal/dev-server", + "version": "0.0.0-0", + "license": "MIT", + "devDependencies": { + "compression": "^1.8.1", + "express": "^5.2.1", + "serve-handler": "^6.1.7" + } + }, + "packages/test/harness": { + "name": "@msinternal/test-harness", + "version": "0.0.0-0", + "license": "MIT", + "dependencies": { + "abort-controller": "3.0.0", + "axe-core": "4.11.3", + "core-js": "3.49.0", + "core-js-pure": "3.49.0", + "event-target-shim": "6.0.2", + "expect": "25.5.0", + "lolex": "6.0.0", + "math-random": "2.0.1" + }, + "devDependencies": { + "concurrently": "^9.2.1", + "esbuild": "^0.28.0", + "express": "^5.2.1", + "global-agent": "^3.0.0", + "http-proxy-middleware": "^2.0.9", + "istanbul-lib-coverage": "^3.2.2", + "jest": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-image-snapshot": "^6.5.2", + "selenium-webdriver": "^4.43.0", + "serve": "^14.2.6", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "packages/test/harness/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/harness/node_modules/@jest/types": { + "version": "25.5.0", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "packages/test/harness/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, - "packages/repack/react-dom@umd": { - "name": "@msinternal/react-dom-umd", - "version": "0.0.0-0", - "devDependencies": { - "esbuild": "^0.27.3" + "packages/test/harness/node_modules/@types/stack-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "packages/test/harness/node_modules/@types/yargs": { + "version": "15.0.20", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz", + "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==", + "dependencies": { + "@types/yargs-parser": "*" } }, - "packages/repack/react-dom/node_modules/@types/react": { - "version": "18.3.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", - "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", - "dev": true, + "packages/test/harness/node_modules/chalk": { + "version": "3.0.0", "license": "MIT", - "peer": true, "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.2.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "packages/repack/react-dom/node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "dev": true, + "packages/test/harness/node_modules/diff-sequences": { + "version": "25.2.6", "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" + "engines": { + "node": ">= 8.3" } }, - "packages/repack/react-dom/node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" + "packages/test/harness/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" } }, - "packages/repack/react-dom/node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "packages/test/harness/node_modules/escape-string-regexp": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "engines": { + "node": ">=8" + } + }, + "packages/test/harness/node_modules/event-target-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", + "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "engines": { + "node": ">=10.13.0" }, - "peerDependencies": { - "react": "^18.3.1" + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "packages/repack/react-dom/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "packages/test/harness/node_modules/expect": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", + "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", "dependencies": { - "loose-envify": "^1.1.0" + "@jest/types": "^25.5.0", + "ansi-styles": "^4.0.0", + "jest-get-type": "^25.2.6", + "jest-matcher-utils": "^25.5.0", + "jest-message-util": "^25.5.0", + "jest-regex-util": "^25.2.6" + }, + "engines": { + "node": ">= 8.3" } }, - "packages/repack/react-is": { - "name": "@msinternal/react-is", - "version": "0.0.0-0", + "packages/test/harness/node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, "dependencies": { - "react-is": "16.13.1" + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" }, - "devDependencies": { - "@types/react-is": "^16.7.5", - "esbuild": "^0.27.3" + "engines": { + "node": ">=10.0" } }, - "packages/repack/react-is/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" + "packages/test/harness/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "packages/repack/react@baseline": { - "name": "@msinternal/react-baseline", - "version": "0.0.0-0", + "packages/test/harness/node_modules/jest-diff": { + "version": "25.5.0", + "license": "MIT", "dependencies": { - "react": "16.8.6" + "chalk": "^3.0.0", + "diff-sequences": "^25.2.6", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" }, - "devDependencies": { - "@msinternal/object-assign": "0.0.0-0", - "@types/react": "^16.14.69", - "esbuild": "^0.27.3" + "engines": { + "node": ">= 8.3" } }, - "packages/repack/react@umd": { - "name": "@msinternal/react-umd", - "version": "0.0.0-0", - "devDependencies": { - "esbuild": "^0.27.3" + "packages/test/harness/node_modules/jest-get-type": { + "version": "25.2.6", + "license": "MIT", + "engines": { + "node": ">= 8.3" } }, - "packages/repack/react/node_modules/@types/react": { - "version": "18.3.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", - "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", - "dev": true, + "packages/test/harness/node_modules/jest-matcher-utils": { + "version": "25.5.0", "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.2.2" + "chalk": "^3.0.0", + "jest-diff": "^25.5.0", + "jest-get-type": "^25.2.6", + "pretty-format": "^25.5.0" + }, + "engines": { + "node": ">= 8.3" } }, - "packages/repack/react/node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "packages/test/harness/node_modules/jest-message-util": { + "version": "25.5.0", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "@babel/code-frame": "^7.0.0", + "@jest/types": "^25.5.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.3" } }, - "packages/styles": { - "name": "@msinternal/botframework-webchat-styles", - "version": "0.0.0-0", + "packages/test/harness/node_modules/jest-regex-util": { + "version": "25.2.6", "license": "MIT", - "devDependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5", - "@msinternal/botframework-webchat-base": "0.0.0-0", - "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/node": "^25.3.3", - "cross-env": "^10.1.0", - "esbuild": "^0.27.3", - "tsup": "^8.5.1", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" - }, - "peerDependencies": { - "react": ">= 16.8.6" + "engines": { + "node": ">= 8.3" } }, - "packages/styles/node_modules/type-fest": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", - "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "packages/test/harness/node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, "dependencies": { - "tagged-tag": "^1.0.0" + "escape-string-regexp": "^4.0.0" }, "engines": { - "node": ">=20" + "node": ">=10" + } + }, + "packages/test/harness/node_modules/matcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/support/cldr-data": { - "name": "@msinternal/botframework-webchat-cldr-data", - "version": "0.0.0-0", + "packages/test/harness/node_modules/pretty-format": { + "version": "25.5.0", + "license": "MIT", "dependencies": { - "@msinternal/botframework-webchat-cldr-data-downloader": "0.0.0-0", - "glob": "8.1.0", - "read-package-up": "12.0.0", - "read-pkg": "10.0.0" + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" }, "engines": { - "node": ">= 12" + "node": ">= 8.3" } }, - "packages/support/cldr-data-downloader": { - "name": "@msinternal/botframework-webchat-cldr-data-downloader", - "version": "0.0.0-0", - "dependencies": { - "adm-zip": "0.5.16", - "nopt": "9.0.0", - "progress": "2.0.3", - "q": "1.5.1" - }, + "packages/test/harness/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "packages/test/harness/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, "bin": { - "cldr-data-downloader": "bin/download.sh" + "semver": "bin/semver.js" }, "engines": { - "node": ">= 12" + "node": ">=10" } }, - "packages/support/cldr-data/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "packages/test/harness/node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "type-fest": "^0.13.1" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/support/cldr-data/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "license": "ISC", + "packages/test/harness/node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "packages/test/harness/node_modules/stack-utils": { + "version": "1.0.5", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "escape-string-regexp": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "packages/test/dev-server": { - "name": "@msinternal/dev-server", - "version": "0.0.0-0", + "packages/test/harness/node_modules/supports-color": { + "version": "7.2.0", "license": "MIT", - "devDependencies": { - "compression": "^1.8.1", - "express": "^5.2.1", - "serve-handler": "^6.1.7" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "packages/test/harness": { - "name": "@msinternal/test-harness", + "packages/test/harness/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/test/page-object": { + "name": "@msinternal/test-page-object", "version": "0.0.0-0", "license": "MIT", "dependencies": { - "abort-controller": "3.0.0", - "axe-core": "4.11.1", - "core-js": "3.48.0", - "core-js-pure": "3.48.0", + "base64-arraybuffer": "1.0.2", + "bent": "7.3.12", + "classnames": "2.5.1", + "core-js": "3.49.0", + "core-js-pure": "3.49.0", + "event-iterator": "2.0.0", "event-target-shim": "6.0.2", - "expect": "25.5.0", - "lolex": "6.0.0", - "math-random": "2.0.1" + "math-random": "2.0.1", + "microsoft-cognitiveservices-speech-sdk": "1.49.0", + "prop-types": "15.8.1", + "simple-update-in": "2.2.0" }, "devDependencies": { "concurrently": "^9.2.1", - "esbuild": "^0.27.3", - "express": "^5.2.1", - "global-agent": "^3.0.0", - "http-proxy-middleware": "^2.0.9", - "istanbul-lib-coverage": "^3.2.2", - "jest": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-image-snapshot": "^6.5.1", - "selenium-webdriver": "^4.41.0", - "serve": "^14.2.6", - "strip-ansi": "^6.0.1" + "esbuild": "^0.28.0" }, "engines": { "node": ">= 14.0.0" } }, - "packages/test/harness/node_modules/@jest/types": { - "version": "25.5.0", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, + "packages/test/page-object/node_modules/@esbuild/aix-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "packages/test/page-object/node_modules/@esbuild/android-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "packages/test/harness/node_modules/@types/stack-utils": { - "version": "1.0.1", - "license": "MIT" + "packages/test/page-object/node_modules/@esbuild/android-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } }, - "packages/test/harness/node_modules/@types/yargs": { - "version": "15.0.20", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz", - "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==", - "dependencies": { - "@types/yargs-parser": "*" + "packages/test/page-object/node_modules/@esbuild/android-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "packages/test/harness/node_modules/chalk": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "packages/test/page-object/node_modules/@esbuild/darwin-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "packages/test/harness/node_modules/core-js-pure": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz", - "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "packages/test/page-object/node_modules/@esbuild/darwin-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "packages/test/harness/node_modules/diff-sequences": { - "version": "25.2.6", - "license": "MIT", + "packages/test/page-object/node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/escape-string-regexp": { - "version": "2.0.0", - "license": "MIT", + "packages/test/page-object/node_modules/@esbuild/freebsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/page-object/node_modules/@esbuild/linux-arm": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/page-object/node_modules/@esbuild/linux-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/page-object/node_modules/@esbuild/linux-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/page-object/node_modules/@esbuild/linux-loong64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/test/page-object/node_modules/@esbuild/linux-mips64el": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "packages/test/harness/node_modules/event-target-shim": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", - "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", - "license": "MIT", + "packages/test/page-object/node_modules/@esbuild/linux-ppc64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=18" } }, - "packages/test/harness/node_modules/expect": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-25.5.0.tgz", - "integrity": "sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-styles": "^4.0.0", - "jest-get-type": "^25.2.6", - "jest-matcher-utils": "^25.5.0", - "jest-message-util": "^25.5.0", - "jest-regex-util": "^25.2.6" - }, + "packages/test/page-object/node_modules/@esbuild/linux-riscv64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", + "packages/test/page-object/node_modules/@esbuild/linux-s390x": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "packages/test/harness/node_modules/jest-diff": { - "version": "25.5.0", - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, + "packages/test/page-object/node_modules/@esbuild/linux-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/jest-get-type": { - "version": "25.2.6", - "license": "MIT", + "packages/test/page-object/node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/jest-matcher-utils": { - "version": "25.5.0", - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, + "packages/test/page-object/node_modules/@esbuild/netbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/jest-message-util": { - "version": "25.5.0", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^25.5.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^3.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "slash": "^3.0.0", - "stack-utils": "^1.0.1" - }, + "packages/test/page-object/node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/jest-regex-util": { - "version": "25.2.6", - "license": "MIT", + "packages/test/page-object/node_modules/@esbuild/openbsd-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/pretty-format": { - "version": "25.5.0", - "license": "MIT", - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, + "packages/test/page-object/node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">= 8.3" + "node": ">=18" } }, - "packages/test/harness/node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "packages/test/harness/node_modules/slash": { - "version": "3.0.0", - "license": "MIT", + "packages/test/page-object/node_modules/@esbuild/sunos-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "packages/test/harness/node_modules/stack-utils": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, + "packages/test/page-object/node_modules/@esbuild/win32-arm64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "packages/test/harness/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "packages/test/page-object/node_modules/@esbuild/win32-ia32": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "packages/test/page-object": { - "name": "@msinternal/test-page-object", - "version": "0.0.0-0", - "license": "MIT", - "dependencies": { - "base64-arraybuffer": "1.0.2", - "bent": "7.3.12", - "classnames": "2.5.1", - "core-js": "3.48.0", - "core-js-pure": "3.48.0", - "event-iterator": "2.0.0", - "event-target-shim": "6.0.2", - "math-random": "2.0.1", - "microsoft-cognitiveservices-speech-sdk": "1.48.0", - "prop-types": "15.8.1", - "simple-update-in": "2.2.0" - }, - "devDependencies": { - "concurrently": "^9.2.1", - "esbuild": "^0.27.3" - }, + "packages/test/page-object/node_modules/@esbuild/win32-x64": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 14.0.0" + "node": ">=18" } }, - "packages/test/page-object/node_modules/core-js-pure": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz", - "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==", + "packages/test/page-object/node_modules/esbuild": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "dev": true, "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" } }, "packages/test/page-object/node_modules/event-target-shim": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", - "license": "MIT", "engines": { "node": ">=10.13.0" }, @@ -22378,7 +29913,6 @@ "version": "9.22.15", "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.22.15.tgz", "integrity": "sha512-a+ImgL9DOlylDM4UYPnxQTA3yXxbVj+O0iNEyTZ6fMzdMsHzpALU4GAq6tOyW4L7RaQtRBmNpVfwTCEKpqaTJQ==", - "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", "@fluentui/react-jsx-runtime": "^9.4.1", @@ -22451,7 +29985,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -22463,7 +29996,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -22491,7 +30023,7 @@ }, "devDependencies": { "tsup": "^8.5.1", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } }, "packages/tsconfig": { @@ -22508,8 +30040,8 @@ "version": "0.0.0-0", "license": "MIT", "dependencies": { - "@ast-grep/napi": "0.41.0", - "yaml": "2.8.2" + "@ast-grep/napi": "0.42.1", + "yaml": "2.8.3" }, "bin": { "vg": "src/vg.js" diff --git a/package.json b/package.json index 709db1dca9..aab3783ab1 100644 --- a/package.json +++ b/package.json @@ -227,59 +227,59 @@ "@msinternal/vibe-grep": "development" }, "devDependencies": { - "@babel/plugin-transform-runtime": "^7.28.5", - "@babel/preset-env": "^7.28.5", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", - "@babel/runtime": "^7.28.4", - "@biomejs/biome": "^2.3.10", - "@happy-dom/jest-environment": "^20.0.11", + "@babel/runtime": "^7.29.2", + "@biomejs/biome": "^2.4.12", + "@happy-dom/jest-environment": "^20.9.0", "@msinternal/vibe-grep": "^0.0.0-0", "@testing-library/react": "^12.1.5", "@types/jest": "^29.5.14", - "@types/react": "^16.14.68", + "@types/react": "^16.14.69", "@types/react-dom": "^16.9.25", "@types/semver": "^7.7.1", - "@typescript-eslint/eslint-plugin": "^8.50.0", - "@typescript-eslint/parser": "^8.50.0", + "@typescript-eslint/eslint-plugin": "^8.59.0", + "@typescript-eslint/parser": "^8.59.0", "babel-jest": "^29.7.0", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "chalk": "^5.6.2", "concurrently": "^9.2.1", - "core-js": "^3.47.0", + "core-js": "^3.49.0", "cross-env": "^10.1.0", - "diff": "^8.0.2", - "dotenv": "^17.2.3", - "dtsroll": "^1.4.1", + "diff": "^9.0.0", + "dotenv": "^17.4.2", + "dtsroll": "^1.8.1", "eslint": "^8.57.1", "eslint-config-prettier": "^10.1.8", "eslint-plugin-import": "^2.32.0", "eslint-plugin-local-rules": "^3.0.2", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-security": "^3.0.1", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-security": "^4.0.0", "get-port": "^5.1.1", - "global-agent": "^3.0.0", + "global-agent": "^4.1.3", "husky": "^9.1.7", "jest": "^29.7.0", - "jest-image-snapshot": "^6.5.1", - "keep-a-changelog": "^2.7.1", - "lint-staged": "^16.2.7", + "jest-image-snapshot": "^6.5.2", + "keep-a-changelog": "^3.0.2", + "lint-staged": "^16.4.0", "lolex": "^6.0.0", - "minimatch": "^10.1.1", + "minimatch": "^10.2.5", "node-dev": "^8.0.0", - "prettier": "^3.7.4", + "prettier": "^3.8.3", "read-package-up": "^12.0.0", - "read-pkg": "^10.0.0", - "selenium-webdriver": "^4.39.0", - "serve": "^14.2.5", - "serve-handler": "^6.1.6", + "read-pkg": "^10.1.0", + "selenium-webdriver": "^4.43.0", + "serve": "^14.2.6", + "serve-handler": "^6.1.7", "strip-ansi": "^6.0.1", "tsup": "^8.5.1", - "typescript": "^5.9.3", - "unplugin-lightningcss": "^0.4.3" + "typescript": "^6.0.3", + "unplugin-lightningcss": "^0.4.5" }, "dependencies": { "react": "16.8.6", diff --git a/packages/api-graph/package.json b/packages/api-graph/package.json index 59c256bc58..60cf6debf2 100644 --- a/packages/api-graph/package.json +++ b/packages/api-graph/package.json @@ -66,8 +66,8 @@ "@testduet/given-when-then": "^0.1.0", "@types/use-sync-external-store": "^1.5.0", "botframework-webchat-core": "0.0.0-0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { "handler-chain": "0.1.1", @@ -75,6 +75,6 @@ "use-ref-from": "0.1.0" }, "dependencies": { - "valibot": "1.2.0" + "valibot": "1.3.1" } } diff --git a/packages/api-middleware/package.json b/packages/api-middleware/package.json index 32f0d45af7..ce8aeecee4 100644 --- a/packages/api-middleware/package.json +++ b/packages/api-middleware/package.json @@ -91,15 +91,15 @@ "@msinternal/botframework-webchat-base": "0.0.0-0", "@msinternal/botframework-webchat-react-hooks": "0.0.0-0", "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "cross-env": "^10.1.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "dependencies": { "handler-chain": "0.1.1", "react-wrap-with": "0.1.0", - "valibot": "1.2.0" + "valibot": "1.3.1" }, "peerDependencies": { "react": ">= 16.8.6", diff --git a/packages/api/package.json b/packages/api/package.json index b7306fcee0..1d024cdd3b 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -128,7 +128,7 @@ }, "devDependencies": { "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", "@msinternal/botframework-webchat-api-graph": "0.0.0-0", @@ -139,19 +139,19 @@ "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", "@msinternal/botframework-webchat-redux-store": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/dom-speech-recognition": "^0.0.7", + "@types/dom-speech-recognition": "^0.0.9", "@types/jest": "^29.5.14", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "@types/react": "^16.14.69", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", - "core-js": "^3.48.0", + "core-js": "^3.49.0", "cross-env": "^10.1.0", "globalize-compiler": "^1.1.1", "iana-tz-data": "^2019.1.0", "nodemon": "^3.1.14", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "dependencies": { "botframework-webchat-core": "0.0.0-0", @@ -165,7 +165,7 @@ "simple-update-in": "2.2.0", "use-reduce-memo": "0.1.0", "use-ref-from": "0.2.1", - "valibot": "1.2.0" + "valibot": "1.3.1" }, "peerDependencies": { "react": ">= 16.8.6", diff --git a/packages/base/package.json b/packages/base/package.json index e5cf6f20d8..bee259447b 100644 --- a/packages/base/package.json +++ b/packages/base/package.json @@ -73,11 +73,11 @@ "pinDependencies": {}, "devDependencies": { "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/node": "^25.3.3", - "core-js-pure": "^3.48.0", + "@types/node": "^25.6.0", + "core-js-pure": "^3.49.0", "cross-env": "^10.1.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { "valibot": "1.2.0" diff --git a/packages/bundle/package.json b/packages/bundle/package.json index 5ab2f1b69d..851811f05b 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -184,7 +184,7 @@ "devDependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-runtime": "^7.29.0", - "@babel/preset-env": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", "@msinternal/adaptivecards": "0.0.0-0", @@ -207,24 +207,24 @@ "@msinternal/react-is": "0.0.0-0", "@msinternal/react-umd": "0.0.0-0", "@testduet/given-when-then": "^0.1.0", - "@types/dom-speech-recognition": "^0.0.7", + "@types/dom-speech-recognition": "^0.0.9", "@types/mdast": "^4.0.4", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "@types/react": "^16.14.69", "@types/react-dom": "^16.9.25", "@types/uuid": "^8.3.4", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "cross-env": "^10.1.0", - "esbuild": "^0.27.3", + "esbuild": "^0.28.0", "micromark-util-types": "^2.0.2", "read-pkg": "^10.1.0", "tsd": "^0.33.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "dependencies": { - "@babel/runtime": "7.28.6", + "@babel/runtime": "7.29.2", "adaptivecards": "3.0.6", "botframework-directlinejs": "0.15.8", "botframework-directlinespeech-sdk": "0.0.0-0", @@ -232,8 +232,8 @@ "botframework-webchat-component": "0.0.0-0", "botframework-webchat-core": "0.0.0-0", "classnames": "2.5.1", - "core-js": "3.48.0", - "katex": "0.16.33", + "core-js": "3.49.0", + "katex": "0.16.45", "math-random": "2.0.1", "mdast-util-from-markdown": "2.0.3", "memoize-one": "6.0.0", @@ -241,15 +241,15 @@ "micromark-extension-gfm": "3.0.0", "micromark-util-character": "2.1.1", "micromark-util-sanitize-uri": "2.0.1", - "microsoft-cognitiveservices-speech-sdk": "1.48.0", + "microsoft-cognitiveservices-speech-sdk": "1.49.0", "prop-types": "15.8.1", "punycode": "2.3.1", - "sanitize-html": "2.17.1", + "sanitize-html": "2.17.3", "shiki": "2.5.0", "url-search-params-polyfill": "8.2.5", "use-ref-from": "0.2.1", "uuid": "8.3.2", - "valibot": "1.2.0", + "valibot": "1.3.1", "web-speech-cognitive-services": "8.1.4", "whatwg-fetch": "3.6.20" }, diff --git a/packages/component/package.json b/packages/component/package.json index 9e7de56239..67f5ad0fa1 100644 --- a/packages/component/package.json +++ b/packages/component/package.json @@ -142,7 +142,7 @@ }, "devDependencies": { "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", "@msinternal/botframework-webchat-base": "0.0.0-0", @@ -150,17 +150,17 @@ "@msinternal/botframework-webchat-react-valibot": "0.0.0-0", "@msinternal/botframework-webchat-styles": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/dom-speech-recognition": "^0.0.7", + "@types/dom-speech-recognition": "^0.0.9", "@types/jest": "^29.5.14", "@types/mdast": "^4.0.4", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "@types/react": "^16.14.69", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", - "core-js": "^3.48.0", + "core-js": "^3.49.0", "cross-env": "^10.1.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "dependencies": { "@emotion/css": "11.13.5", @@ -190,7 +190,7 @@ "use-reduce-memo": "0.1.0", "use-ref-from": "0.2.1", "use-state-with-ref": "0.2.1", - "valibot": "1.2.0" + "valibot": "1.3.1" }, "peerDependencies": { "react": ">= 16.8.6", diff --git a/packages/core-debug-api/package.json b/packages/core-debug-api/package.json index 4d5e879cc5..4c66b928c1 100644 --- a/packages/core-debug-api/package.json +++ b/packages/core-debug-api/package.json @@ -53,7 +53,7 @@ }, "devDependencies": { "@msinternal/botframework-webchat-base": "0.0.0-0", - "type-fest": "^5.4.4" + "type-fest": "^5.6.0" }, "dependencies": { "tagged-tag": "1.0.0" diff --git a/packages/core-graph/package.json b/packages/core-graph/package.json index f54b040735..c5ee36710e 100644 --- a/packages/core-graph/package.json +++ b/packages/core-graph/package.json @@ -64,15 +64,15 @@ "@msinternal/botframework-webchat-base": "0.0.0-0", "@testduet/given-when-then": "^0.1.0", "@types/uuid": "^8.3.4", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { - "core-js-pure": "3.47.0", - "iter-fest": "0.3.0", - "uuid": "8.3.2" + "core-js-pure": "^3.49.0", + "iter-fest": "^0.3.1", + "uuid": "^8.3.2" }, "dependencies": { - "valibot": "1.2.0" + "valibot": "1.3.1" } } diff --git a/packages/core/package.json b/packages/core/package.json index a7da7b57a2..78777f4cee 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -122,27 +122,27 @@ "@babel/core": "^7.29.0", "@babel/plugin-transform-runtime": "^7.29.0", "@babel/plugin-transform-typescript": "^7.28.6", - "@babel/preset-env": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@msinternal/botframework-webchat-base": "0.0.0-0", "@msinternal/botframework-webchat-core-debug-api": "0.0.0-0", "@msinternal/botframework-webchat-core-graph": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", "@testduet/given-when-then": "^0.1.0", "@types/jest": "^29.5.14", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "@types/uuid": "^8.3.4", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "botframework-directlinejs": "^0.15.8", "cross-env": "^10.1.0", "tsd": "^0.33.0", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "dependencies": { - "@babel/runtime": "7.28.6", - "@redux-devtools/extension": "3.3.0", - "core-js-pure": "3.48.0", + "@babel/runtime": "7.29.2", + "@redux-devtools/extension": "4.0.0", + "core-js-pure": "3.49.0", "iter-fest": "0.3.1", "jwt-decode": "4.0.0", "math-random": "2.0.1", @@ -151,6 +151,6 @@ "redux-saga": "1.4.2", "simple-update-in": "2.2.0", "uuid": "8.3.2", - "valibot": "1.2.0" + "valibot": "1.3.1" } } diff --git a/packages/directlinespeech/package.json b/packages/directlinespeech/package.json index a21325efe5..7e3ddaa3f6 100644 --- a/packages/directlinespeech/package.json +++ b/packages/directlinespeech/package.json @@ -78,15 +78,15 @@ "@babel/cli": "^7.28.6", "@babel/core": "^7.29.0", "@babel/plugin-transform-runtime": "^7.29.0", - "@babel/preset-env": "^7.29.0", + "@babel/preset-env": "^7.29.2", "@types/jest": "^29.5.14", - "@typescript-eslint/eslint-plugin": "^8.56.1", - "@typescript-eslint/parser": "^8.56.1", + "@typescript-eslint/eslint-plugin": "^8.59.0", + "@typescript-eslint/parser": "^8.59.0", "babel-jest": "^29.7.0", - "babel-plugin-istanbul": "^7.0.1", + "babel-plugin-istanbul": "^8.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "cross-env": "^10.1.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.2", "eslint": "^8.57.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.5.5", @@ -94,24 +94,24 @@ "global-agent": "^3.0.0", "has-resolved": "^2.0.0", "jest": "^29.7.0", - "prettier": "^3.8.1", + "prettier": "^3.8.3", "serve": "^14.2.6", "simple-update-in": "^2.2.0", "source-map-loader": "^5.0.0", - "webpack": "^5.105.4", - "webpack-cli": "^6.0.1", + "webpack": "^5.106.2", + "webpack-cli": "^7.0.2", "webpack-stats-plugin": "^1.1.3" }, "dependencies": { - "@babel/runtime": "7.28.6", + "@babel/runtime": "7.29.2", "abort-controller": "3.0.0", "base64-arraybuffer": "1.0.2", - "core-js": "3.48.0", - "core-js-pure": "3.48.0", + "core-js": "3.49.0", + "core-js-pure": "3.49.0", "event-as-promise": "2.0.1", "event-target-shim": "6.0.2", "math-random": "2.0.1", - "microsoft-cognitiveservices-speech-sdk": "1.48.0", + "microsoft-cognitiveservices-speech-sdk": "1.17.0", "web-speech-cognitive-services": "8.1.4" } } diff --git a/packages/fluent-theme/package.json b/packages/fluent-theme/package.json index fb349573fc..fcbbc539f9 100644 --- a/packages/fluent-theme/package.json +++ b/packages/fluent-theme/package.json @@ -81,11 +81,11 @@ "@msinternal/botframework-webchat-styles": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", "@types/math-random": "^1.0.2", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "@types/react": "^16.14.69", "concurrently": "^9.2.1", "tsup": "^8.5.1", - "typescript": "^5.9.3" + "typescript": "^6.0.3" }, "dependencies": { "botframework-webchat": "0.0.0-0", @@ -93,7 +93,7 @@ "inject-meta-tag": "0.1.0", "math-random": "2.0.1", "use-ref-from": "0.2.1", - "valibot": "1.2.0" + "valibot": "1.3.1" }, "peerDependencies": { "react": ">= 16.8.6" diff --git a/packages/isomorphic-react-dom/package.json b/packages/isomorphic-react-dom/package.json index 293f3ae062..6bf83b901a 100644 --- a/packages/isomorphic-react-dom/package.json +++ b/packages/isomorphic-react-dom/package.json @@ -25,8 +25,8 @@ "devDependencies": { "@babel/cli": "^7.28.6", "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", - "webpack": "^5.105.4", - "webpack-cli": "^6.0.1" + "@babel/preset-env": "^7.29.2", + "webpack": "^5.106.2", + "webpack-cli": "^7.0.2" } } diff --git a/packages/isomorphic-react/package.json b/packages/isomorphic-react/package.json index b76c09977e..a79ebfd57c 100644 --- a/packages/isomorphic-react/package.json +++ b/packages/isomorphic-react/package.json @@ -25,8 +25,8 @@ "devDependencies": { "@babel/cli": "^7.28.6", "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.0", - "webpack": "^5.105.4", - "webpack-cli": "^6.0.1" + "@babel/preset-env": "^7.29.2", + "webpack": "^5.106.2", + "webpack-cli": "^7.0.2" } } diff --git a/packages/react-valibot/package.json b/packages/react-valibot/package.json index 7dca3aafd1..1493de0293 100644 --- a/packages/react-valibot/package.json +++ b/packages/react-valibot/package.json @@ -68,7 +68,7 @@ "@types/jest": "^29.5.14", "@types/react": "^16.14.69", "tsup": "^8.5.1", - "typescript": "^5.9.3" + "typescript": "^6.0.3" }, "peerDependencies": { "react": ">= 16.8.6", diff --git a/packages/redux-store/package.json b/packages/redux-store/package.json index 76556929b7..2eb91c104b 100644 --- a/packages/redux-store/package.json +++ b/packages/redux-store/package.json @@ -65,11 +65,11 @@ "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", "@types/react": "^16.14.69", "tsup": "^8.5.1", - "typescript": "^5.9.3" + "typescript": "^6.0.3" }, "dependencies": { "botframework-webchat-core": "0.0.0-0", - "valibot": "1.2.0" + "valibot": "1.3.1" }, "peerDependencies": { "react": ">= 16.8.6" diff --git a/packages/repack/adaptivecards/package.json b/packages/repack/adaptivecards/package.json index e097ff318d..bbdd860298 100644 --- a/packages/repack/adaptivecards/package.json +++ b/packages/repack/adaptivecards/package.json @@ -27,7 +27,7 @@ }, "localDependencies": {}, "devDependencies": { - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { "adaptivecards": "3.0.6" diff --git a/packages/repack/base64-js/package.json b/packages/repack/base64-js/package.json index 29282dfe35..3778aff6ab 100644 --- a/packages/repack/base64-js/package.json +++ b/packages/repack/base64-js/package.json @@ -22,7 +22,7 @@ "pinDependencies": {}, "localDependencies": {}, "devDependencies": { - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { "base64-js": "1.5.1" diff --git a/packages/repack/botframework-directlinejs/package.json b/packages/repack/botframework-directlinejs/package.json index 3c4a5c01bf..cc045808df 100644 --- a/packages/repack/botframework-directlinejs/package.json +++ b/packages/repack/botframework-directlinejs/package.json @@ -25,6 +25,6 @@ "botframework-directlinejs": "0.15.8" }, "devDependencies": { - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" } } diff --git a/packages/repack/html-react-parser/package.json b/packages/repack/html-react-parser/package.json index 09d398c2a7..fa77c54379 100644 --- a/packages/repack/html-react-parser/package.json +++ b/packages/repack/html-react-parser/package.json @@ -24,9 +24,9 @@ "pinDependencies": {}, "localDependencies": {}, "devDependencies": { - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { - "html-react-parser": "5.2.17" + "html-react-parser": "6.0.1" } } diff --git a/packages/repack/microsoft-cognitiveservices-speech-sdk/package.json b/packages/repack/microsoft-cognitiveservices-speech-sdk/package.json index dc2d81e565..e3bd53a754 100644 --- a/packages/repack/microsoft-cognitiveservices-speech-sdk/package.json +++ b/packages/repack/microsoft-cognitiveservices-speech-sdk/package.json @@ -28,17 +28,12 @@ "precommit:typecheck": "tsc --project ./src --emitDeclarationOnly false --esModuleInterop true --noEmit --pretty false", "start": "../../../scripts/npm/notify-build.sh \"src\"" }, - "pinDependencies": { - "microsoft-cognitiveservices-speech-sdk": [ - "1.17.0", - "<=1.45.0 is using new protocol that does not connect may need some tune." - ] - }, + "pinDependencies": {}, "localDependencies": {}, "devDependencies": { - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { - "microsoft-cognitiveservices-speech-sdk": "1.48.0" + "microsoft-cognitiveservices-speech-sdk": "1.49.0" } } diff --git a/packages/repack/react-dom/package.json b/packages/repack/react-dom/package.json index 93511e55a2..d8e2a55a4d 100644 --- a/packages/repack/react-dom/package.json +++ b/packages/repack/react-dom/package.json @@ -35,7 +35,7 @@ "localDependencies": {}, "devDependencies": { "@types/react-dom": "^18.3.7", - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { "react-dom": "18.3.1" diff --git a/packages/repack/react-dom@baseline/package.json b/packages/repack/react-dom@baseline/package.json index 90dbc4888f..a9391d9b59 100644 --- a/packages/repack/react-dom@baseline/package.json +++ b/packages/repack/react-dom@baseline/package.json @@ -37,7 +37,7 @@ "devDependencies": { "@msinternal/object-assign": "0.0.0-0", "@types/react-dom": "^16.9.25", - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { "react-dom": "16.8.6" diff --git a/packages/repack/react-dom@umd/package.json b/packages/repack/react-dom@umd/package.json index 451213cbe5..926617862e 100644 --- a/packages/repack/react-dom@umd/package.json +++ b/packages/repack/react-dom@umd/package.json @@ -24,6 +24,6 @@ "pinDependencies": {}, "localDependencies": {}, "devDependencies": { - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" } } diff --git a/packages/repack/react-is/package.json b/packages/repack/react-is/package.json index 25b3dc80da..714d353902 100644 --- a/packages/repack/react-is/package.json +++ b/packages/repack/react-is/package.json @@ -34,7 +34,7 @@ "localDependencies": {}, "devDependencies": { "@types/react-is": "^16.7.5", - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { "react-is": "16.13.1" diff --git a/packages/repack/react/package.json b/packages/repack/react/package.json index a5d5f19f72..07a001508b 100644 --- a/packages/repack/react/package.json +++ b/packages/repack/react/package.json @@ -36,7 +36,7 @@ "localDependencies": {}, "devDependencies": { "@types/react": "^18.3.28", - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { "react": "18.3.1" diff --git a/packages/repack/react@baseline/package.json b/packages/repack/react@baseline/package.json index 9e1a3b8225..f582470e2a 100644 --- a/packages/repack/react@baseline/package.json +++ b/packages/repack/react@baseline/package.json @@ -37,7 +37,7 @@ "devDependencies": { "@msinternal/object-assign": "0.0.0-0", "@types/react": "^16.14.69", - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { "react": "16.8.6" diff --git a/packages/repack/react@umd/package.json b/packages/repack/react@umd/package.json index 6e742327ba..672c78fa8b 100644 --- a/packages/repack/react@umd/package.json +++ b/packages/repack/react@umd/package.json @@ -24,6 +24,6 @@ "pinDependencies": {}, "localDependencies": {}, "devDependencies": { - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" } } diff --git a/packages/styles/package.json b/packages/styles/package.json index 47e9e3e0ea..5f80acbcf4 100644 --- a/packages/styles/package.json +++ b/packages/styles/package.json @@ -84,12 +84,12 @@ "@jridgewell/sourcemap-codec": "^1.5.5", "@msinternal/botframework-webchat-base": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", - "@types/node": "^25.3.3", + "@types/node": "^25.6.0", "cross-env": "^10.1.0", - "esbuild": "^0.27.3", + "esbuild": "^0.28.0", "tsup": "^8.5.1", - "type-fest": "^5.4.4", - "typescript": "^5.9.3" + "type-fest": "^5.6.0", + "typescript": "^6.0.3" }, "peerDependencies": { "react": ">= 16.8.6" diff --git a/packages/support/cldr-data-downloader/package.json b/packages/support/cldr-data-downloader/package.json index 759716aaf1..dccf41e83d 100644 --- a/packages/support/cldr-data-downloader/package.json +++ b/packages/support/cldr-data-downloader/package.json @@ -56,7 +56,7 @@ "pinDependencies": {}, "localDependencies": {}, "dependencies": { - "adm-zip": "0.5.16", + "adm-zip": "0.5.17", "nopt": "9.0.0", "progress": "2.0.3", "q": "1.5.1" diff --git a/packages/support/cldr-data/package.json b/packages/support/cldr-data/package.json index 43ce851a6b..5ce09cd096 100644 --- a/packages/support/cldr-data/package.json +++ b/packages/support/cldr-data/package.json @@ -66,6 +66,6 @@ "@msinternal/botframework-webchat-cldr-data-downloader": "0.0.0-0", "glob": "8.1.0", "read-package-up": "12.0.0", - "read-pkg": "10.0.0" + "read-pkg": "10.1.0" } } diff --git a/packages/test/harness/package.json b/packages/test/harness/package.json index 767dd4a5b5..cfabac58a0 100644 --- a/packages/test/harness/package.json +++ b/packages/test/harness/package.json @@ -58,23 +58,23 @@ "localDependencies": {}, "devDependencies": { "concurrently": "^9.2.1", - "esbuild": "^0.27.3", + "esbuild": "^0.28.0", "express": "^5.2.1", "global-agent": "^3.0.0", "http-proxy-middleware": "^2.0.9", "istanbul-lib-coverage": "^3.2.2", "jest": "^29.7.0", "jest-environment-node": "^29.7.0", - "jest-image-snapshot": "^6.5.1", - "selenium-webdriver": "^4.41.0", + "jest-image-snapshot": "^6.5.2", + "selenium-webdriver": "^4.43.0", "serve": "^14.2.6", "strip-ansi": "^6.0.1" }, "dependencies": { "abort-controller": "3.0.0", - "axe-core": "4.11.1", - "core-js": "3.48.0", - "core-js-pure": "3.48.0", + "axe-core": "4.11.3", + "core-js": "3.49.0", + "core-js-pure": "3.49.0", "event-target-shim": "6.0.2", "expect": "25.5.0", "lolex": "6.0.0", diff --git a/packages/test/page-object/package.json b/packages/test/page-object/package.json index 166373d265..2ed8939c9b 100644 --- a/packages/test/page-object/package.json +++ b/packages/test/page-object/package.json @@ -34,18 +34,18 @@ "localDependencies": {}, "devDependencies": { "concurrently": "^9.2.1", - "esbuild": "^0.27.3" + "esbuild": "^0.28.0" }, "dependencies": { "base64-arraybuffer": "1.0.2", "bent": "7.3.12", "classnames": "2.5.1", - "core-js": "3.48.0", - "core-js-pure": "3.48.0", + "core-js": "3.49.0", + "core-js-pure": "3.49.0", "event-iterator": "2.0.0", "event-target-shim": "6.0.2", "math-random": "2.0.1", - "microsoft-cognitiveservices-speech-sdk": "1.48.0", + "microsoft-cognitiveservices-speech-sdk": "1.49.0", "prop-types": "15.8.1", "simple-update-in": "2.2.0" } diff --git a/packages/test/web-server/package.json b/packages/test/web-server/package.json index a0eb029c66..6c6651c0bf 100644 --- a/packages/test/web-server/package.json +++ b/packages/test/web-server/package.json @@ -24,7 +24,7 @@ "localDependencies": {}, "devDependencies": { "tsup": "^8.5.1", - "typescript": "^5.9.3" + "typescript": "^6.0.3" }, "dependencies": { "selfsigned": "5.5.0", diff --git a/packages/vibe-grep/package.json b/packages/vibe-grep/package.json index 4aa4cd09d7..8e253cc369 100644 --- a/packages/vibe-grep/package.json +++ b/packages/vibe-grep/package.json @@ -30,7 +30,7 @@ "pinDependencies": {}, "localDependencies": {}, "dependencies": { - "@ast-grep/napi": "0.41.0", - "yaml": "2.8.2" + "@ast-grep/napi": "0.42.1", + "yaml": "2.8.3" } } diff --git a/samples/01.getting-started/k.direct-line-token/javascript/bot/package-lock.json b/samples/01.getting-started/k.direct-line-token/javascript/bot/package-lock.json index f2cdbead34..e1f17d15bf 100644 --- a/samples/01.getting-started/k.direct-line-token/javascript/bot/package-lock.json +++ b/samples/01.getting-started/k.direct-line-token/javascript/bot/package-lock.json @@ -9,9 +9,9 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "botbuilder": "^4.23.3", - "dotenv": "^17.2.3", - "restify": "^11.1.0" + "botbuilder": "4.23.3", + "dotenv": "17.4.2", + "restify": "11.1.0" }, "devDependencies": { "node-dev": "^8.0.0" @@ -113,9 +113,9 @@ } }, "node_modules/@azure/identity": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", - "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.1.tgz", + "integrity": "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", @@ -124,8 +124,8 @@ "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^4.2.0", - "@azure/msal-node": "^3.5.0", + "@azure/msal-browser": "^5.5.0", + "@azure/msal-node": "^5.1.0", "open": "^10.1.0", "tslib": "^2.2.0" }, @@ -134,24 +134,24 @@ } }, "node_modules/@azure/identity/node_modules/@azure/msal-common": { - "version": "15.13.3", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.3.tgz", - "integrity": "sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.5.1.tgz", + "integrity": "sha512-WS9w9SfI8SEYO7mTnxGeZ3UwQfhAVYCWglYF2/7GNx3ioHiAs2gPkl9eSwVs8cPrmiGh+zi9ai/OOKoq4cyzDw==", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/identity/node_modules/@azure/msal-node": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.4.tgz", - "integrity": "sha512-lvuAwsDpPDE/jSuVQOBMpLbXuVuLsPNRwWCyK3/6bPlBk0fGWegqoZ0qjZclMWyQ2JNvIY3vHY7hoFmFmFQcOw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.1.4.tgz", + "integrity": "sha512-G4LXGGggok1QC48uKu64/SV2DPRDlddmV8EieK8pflsNYMj9/Zz+Y9OHoEBhT15h+zpdwXXLYA/7PJCR/yZ8aw==", "dependencies": { - "@azure/msal-common": "15.13.3", + "@azure/msal-common": "16.5.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, "engines": { - "node": ">=16" + "node": ">=20" } }, "node_modules/@azure/identity/node_modules/uuid": { @@ -175,20 +175,20 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.27.0.tgz", - "integrity": "sha512-bZ8Pta6YAbdd0o0PEaL1/geBsPrLEnyY/RDWqvF1PP9RUH8EMLvUMGoZFYS6jSlUan6KZ9IMTLCnwpWWpQRK/w==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.8.0.tgz", + "integrity": "sha512-X7IZV77bN56l7sbLjkcbQJX1t3U4tgxqztDr/XFbUcUfKk+z2FavcLgKP+OYUNj0wl/pEEtV9lldW9siY8BuHQ==", "dependencies": { - "@azure/msal-common": "15.13.3" + "@azure/msal-common": "16.5.1" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": { - "version": "15.13.3", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.3.tgz", - "integrity": "sha512-shSDU7Ioecya+Aob5xliW9IGq1Ui8y4EVSdWGyI1Gbm4Vg61WpP95LuzcY214/wEjSn6w4PZYD4/iVldErHayQ==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.5.1.tgz", + "integrity": "sha512-WS9w9SfI8SEYO7mTnxGeZ3UwQfhAVYCWglYF2/7GNx3ioHiAs2gPkl9eSwVs8cPrmiGh+zi9ai/OOKoq4cyzDw==", "engines": { "node": ">=0.8.0" } @@ -331,13 +331,13 @@ } }, "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" } }, "node_modules/base64-js": { @@ -769,9 +769,9 @@ } }, "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "engines": { "node": ">=12" }, @@ -1020,9 +1020,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -1507,9 +1507,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" }, "node_modules/lodash.includes": { "version": "4.3.0", @@ -1825,14 +1825,17 @@ "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "engines": { + "node": ">=10" + } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "dependencies": { "side-channel": "^1.1.0" }, diff --git a/samples/01.getting-started/k.direct-line-token/javascript/bot/package.json b/samples/01.getting-started/k.direct-line-token/javascript/bot/package.json index 0aad3ea30c..a038ddb49c 100644 --- a/samples/01.getting-started/k.direct-line-token/javascript/bot/package.json +++ b/samples/01.getting-started/k.direct-line-token/javascript/bot/package.json @@ -25,9 +25,9 @@ } }, "dependencies": { - "botbuilder": "^4.23.3", - "dotenv": "^17.2.3", - "restify": "^11.1.0" + "botbuilder": "4.23.3", + "dotenv": "17.4.2", + "restify": "11.1.0" }, "devDependencies": { "node-dev": "^8.0.0" diff --git a/samples/01.getting-started/k.direct-line-token/javascript/web/package-lock.json b/samples/01.getting-started/k.direct-line-token/javascript/web/package-lock.json index e2f903a13d..8bd5fb08cd 100644 --- a/samples/01.getting-started/k.direct-line-token/javascript/web/package-lock.json +++ b/samples/01.getting-started/k.direct-line-token/javascript/web/package-lock.json @@ -9,9 +9,9 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "dotenv": "^17.2.3", - "http-proxy": "^1.18.1", - "restify": "^11.1.0" + "dotenv": "17.4.2", + "http-proxy": "1.18.1", + "restify": "11.1.0" }, "devDependencies": { "node-dev": "^8.0.0" @@ -243,9 +243,9 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "engines": { "node": ">=12" }, @@ -441,9 +441,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -770,9 +770,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" }, "node_modules/lru-cache": { "version": "7.18.3", @@ -984,9 +984,9 @@ "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "dependencies": { "side-channel": "^1.1.0" }, diff --git a/samples/01.getting-started/k.direct-line-token/javascript/web/package.json b/samples/01.getting-started/k.direct-line-token/javascript/web/package.json index f4ae23f1d0..ab6ee0f56f 100644 --- a/samples/01.getting-started/k.direct-line-token/javascript/web/package.json +++ b/samples/01.getting-started/k.direct-line-token/javascript/web/package.json @@ -21,9 +21,9 @@ } }, "dependencies": { - "dotenv": "^17.2.3", - "http-proxy": "^1.18.1", - "restify": "^11.1.0" + "dotenv": "17.4.2", + "http-proxy": "1.18.1", + "restify": "11.1.0" }, "devDependencies": { "node-dev": "^8.0.0" diff --git a/samples/04.api/e.piping-to-redux/package.json b/samples/04.api/e.piping-to-redux/package.json index 0f87f2465c..0a9fbda727 100644 --- a/samples/04.api/e.piping-to-redux/package.json +++ b/samples/04.api/e.piping-to-redux/package.json @@ -28,13 +28,13 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-redux": "^7.2.9", - "redux": "^5.0.1" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6", + "react-redux": "7.2.9", + "redux": "5.0.1" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/04.api/f.selectable-activity/package.json b/samples/04.api/f.selectable-activity/package.json index 87c817be6e..b058d89ae2 100644 --- a/samples/04.api/f.selectable-activity/package.json +++ b/samples/04.api/f.selectable-activity/package.json @@ -27,12 +27,12 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "botframework-webchat-api": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "botframework-webchat-api": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/04.api/g.chat-send-history/package.json b/samples/04.api/g.chat-send-history/package.json index 7ce1bc8134..690d6095bc 100644 --- a/samples/04.api/g.chat-send-history/package.json +++ b/samples/04.api/g.chat-send-history/package.json @@ -24,12 +24,12 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "use-state-with-ref": "^0.1.0" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6", + "use-state-with-ref": "0.2.1" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/04.api/h.clear-after-idle/package.json b/samples/04.api/h.clear-after-idle/package.json index 73c57e7773..f366d1482c 100644 --- a/samples/04.api/h.clear-after-idle/package.json +++ b/samples/04.api/h.clear-after-idle/package.json @@ -24,12 +24,12 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "classnames": "^2.5.1", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "classnames": "2.5.1", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/06.recomposing-ui/a.minimizable-web-chat/package.json b/samples/06.recomposing-ui/a.minimizable-web-chat/package.json index fde859c7a3..6a073d01ea 100644 --- a/samples/06.recomposing-ui/a.minimizable-web-chat/package.json +++ b/samples/06.recomposing-ui/a.minimizable-web-chat/package.json @@ -24,12 +24,12 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "classnames": "^2.5.1", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "classnames": "2.5.1", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/06.recomposing-ui/b.speech-ui/package.json b/samples/06.recomposing-ui/b.speech-ui/package.json index cebe2fd224..38e909819d 100644 --- a/samples/06.recomposing-ui/b.speech-ui/package.json +++ b/samples/06.recomposing-ui/b.speech-ui/package.json @@ -28,14 +28,14 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "classnames": "^2.5.1", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-redux": "^7.2.9", - "redux": "^5.0.1" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "classnames": "2.5.1", + "react": "16.8.6", + "react-dom": "16.8.6", + "react-redux": "7.2.9", + "redux": "5.0.1" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/06.recomposing-ui/c.smart-display/package.json b/samples/06.recomposing-ui/c.smart-display/package.json index 96b5374dd1..7734cfb9f5 100644 --- a/samples/06.recomposing-ui/c.smart-display/package.json +++ b/samples/06.recomposing-ui/c.smart-display/package.json @@ -28,16 +28,16 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "classnames": "^2.5.1", - "punycode": "^2.3.1", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-film": "^4.0.0", - "react-redux": "^7.2.9", - "redux": "^5.0.1" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "classnames": "2.5.1", + "punycode": "2.3.1", + "react": "16.8.6", + "react-dom": "16.8.6", + "react-film": "4.0.0", + "react-redux": "7.2.9", + "redux": "5.0.1" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/06.recomposing-ui/d.plain-ui/package.json b/samples/06.recomposing-ui/d.plain-ui/package.json index 47de93b42f..87321f7635 100644 --- a/samples/06.recomposing-ui/d.plain-ui/package.json +++ b/samples/06.recomposing-ui/d.plain-ui/package.json @@ -24,11 +24,11 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/06.recomposing-ui/e.extending-ui/package.json b/samples/06.recomposing-ui/e.extending-ui/package.json index aa1a85f499..ba0461074d 100644 --- a/samples/06.recomposing-ui/e.extending-ui/package.json +++ b/samples/06.recomposing-ui/e.extending-ui/package.json @@ -24,11 +24,11 @@ ] }, "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } } diff --git a/samples/package-lock.json b/samples/package-lock.json index fdce02acac..50d9dfcf3b 100644 --- a/samples/package-lock.json +++ b/samples/package-lock.json @@ -28,14 +28,14 @@ "name": "@msinternal/sample-customization-piping-to-redux", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-redux": "^7.2.9", - "redux": "^5.0.1" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6", + "react-redux": "7.2.9", + "redux": "5.0.1" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "04.api/e.piping-to-redux/node_modules/react": { @@ -85,13 +85,13 @@ "name": "@msinternal/sample-customization-selectable-activity", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "botframework-webchat-api": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "botframework-webchat-api": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "04.api/f.selectable-activity/node_modules/react": { @@ -136,13 +136,13 @@ "name": "@msinternal/sample-chat-send-history", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "use-state-with-ref": "^0.1.0" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6", + "use-state-with-ref": "0.2.1" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "04.api/g.chat-send-history/node_modules/react": { @@ -187,13 +187,13 @@ "name": "@msinternal/sample-clear-after-idle", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "classnames": "^2.5.1", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "classnames": "2.5.1", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "04.api/h.clear-after-idle/node_modules/react": { @@ -238,13 +238,13 @@ "name": "@msinternal/sample-customization-minimizable-web-chat", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "classnames": "^2.5.1", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "classnames": "2.5.1", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "06.recomposing-ui/a.minimizable-web-chat/node_modules/react": { @@ -289,15 +289,15 @@ "name": "@msinternal/sample-customization-speech-ui", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "classnames": "^2.5.1", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-redux": "^7.2.9", - "redux": "^5.0.1" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "classnames": "2.5.1", + "react": "16.8.6", + "react-dom": "16.8.6", + "react-redux": "7.2.9", + "redux": "5.0.1" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "06.recomposing-ui/b.speech-ui/node_modules/react": { @@ -347,17 +347,17 @@ "name": "@msinternal/sample-customization-smart-display", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "classnames": "^2.5.1", - "punycode": "^2.3.1", - "react": "^16.8.6", - "react-dom": "^16.8.6", - "react-film": "^4.0.0", - "react-redux": "^7.2.9", - "redux": "^5.0.1" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "classnames": "2.5.1", + "punycode": "2.3.1", + "react": "16.8.6", + "react-dom": "16.8.6", + "react-film": "4.0.0", + "react-redux": "7.2.9", + "redux": "5.0.1" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "06.recomposing-ui/c.smart-display/node_modules/react": { @@ -407,12 +407,12 @@ "name": "@msinternal/sample-customization-plain-ui", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "06.recomposing-ui/d.plain-ui/node_modules/react": { @@ -457,12 +457,12 @@ "name": "@msinternal/sample-customization-extending-ui", "version": "0.1.0", "dependencies": { - "botframework-webchat": "^4.18.1-main.20250804.93043a9", - "react": "^16.8.6", - "react-dom": "^16.8.6" + "botframework-webchat": "4.18.1-main.20260416.88357ae", + "react": "16.8.6", + "react-dom": "16.8.6" }, "devDependencies": { - "esbuild": "^0.27.2" + "esbuild": "^0.28.0" } }, "06.recomposing-ui/e.extending-ui/node_modules/react": { @@ -503,6 +503,43 @@ "object-assign": "^4.1.1" } }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -575,19 +612,19 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.2.tgz", - "integrity": "sha512-FVFaVs2/dZgD3Y9ZD+AKNKjyGKzwu0C54laAXWUXgLcVXcCX6YZ6GhK2cp7FogSN2OA0Fu+QT8dP3FUdo9ShSQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.29.2.tgz", + "integrity": "sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw==", "dependencies": { - "core-js-pure": "^3.43.0" + "core-js-pure": "^3.48.0" }, "engines": { "node": ">=6.9.0" @@ -732,9 +769,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", "cpu": [ "ppc64" ], @@ -748,9 +785,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", "cpu": [ "arm" ], @@ -764,9 +801,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", "cpu": [ "arm64" ], @@ -780,9 +817,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", "cpu": [ "x64" ], @@ -796,9 +833,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", "cpu": [ "arm64" ], @@ -812,9 +849,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", "cpu": [ "x64" ], @@ -828,9 +865,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", "cpu": [ "arm64" ], @@ -844,9 +881,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", "cpu": [ "x64" ], @@ -860,9 +897,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", "cpu": [ "arm" ], @@ -876,9 +913,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", "cpu": [ "arm64" ], @@ -892,9 +929,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", "cpu": [ "ia32" ], @@ -908,9 +945,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", "cpu": [ "loong64" ], @@ -924,9 +961,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", "cpu": [ "mips64el" ], @@ -940,9 +977,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", "cpu": [ "ppc64" ], @@ -956,9 +993,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", "cpu": [ "riscv64" ], @@ -972,9 +1009,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", "cpu": [ "s390x" ], @@ -988,9 +1025,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", "cpu": [ "x64" ], @@ -1004,9 +1041,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", "cpu": [ "arm64" ], @@ -1020,9 +1057,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", "cpu": [ "x64" ], @@ -1036,9 +1073,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", "cpu": [ "arm64" ], @@ -1052,9 +1089,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", "cpu": [ "x64" ], @@ -1068,9 +1105,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", "cpu": [ "arm64" ], @@ -1084,9 +1121,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", "cpu": [ "x64" ], @@ -1100,9 +1137,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", "cpu": [ "arm64" ], @@ -1116,9 +1153,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", "cpu": [ "ia32" ], @@ -1132,9 +1169,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", "cpu": [ "x64" ], @@ -1248,16 +1285,16 @@ } }, "node_modules/@redux-saga/core": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.3.0.tgz", - "integrity": "sha512-L+i+qIGuyWn7CIg7k1MteHGfttKPmxwZR5E7OsGikCL2LzYA0RERlaUY00Y3P3ZV2EYgrsYlBrGs6cJP5OKKqA==", - "dependencies": { - "@babel/runtime": "^7.6.3", - "@redux-saga/deferred": "^1.2.1", - "@redux-saga/delay-p": "^1.2.1", - "@redux-saga/is": "^1.1.3", - "@redux-saga/symbols": "^1.1.3", - "@redux-saga/types": "^1.2.1", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@redux-saga/core/-/core-1.4.2.tgz", + "integrity": "sha512-nIMLGKo6jV6Wc1sqtVQs1iqbB3Kq20udB/u9XEaZQisT6YZ0NRB8+4L6WqD/E+YziYutd27NJbG8EWUPkb7c6Q==", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@redux-saga/deferred": "^1.3.1", + "@redux-saga/delay-p": "^1.3.1", + "@redux-saga/is": "^1.2.1", + "@redux-saga/symbols": "^1.2.1", + "@redux-saga/types": "^1.3.1", "typescript-tuple": "^2.2.1" }, "funding": { @@ -1266,36 +1303,36 @@ } }, "node_modules/@redux-saga/deferred": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.2.1.tgz", - "integrity": "sha512-cmin3IuuzMdfQjA0lG4B+jX+9HdTgHZZ+6u3jRAOwGUxy77GSlTi4Qp2d6PM1PUoTmQUR5aijlA39scWWPF31g==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.3.1.tgz", + "integrity": "sha512-0YZ4DUivWojXBqLB/TmuRRpDDz7tyq1I0AuDV7qi01XlLhM5m51W7+xYtIckH5U2cMlv9eAuicsfRAi1XHpXIg==" }, "node_modules/@redux-saga/delay-p": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.2.1.tgz", - "integrity": "sha512-MdiDxZdvb1m+Y0s4/hgdcAXntpUytr9g0hpcOO1XFVyyzkrDu3SKPgBFOtHn7lhu7n24ZKIAT1qtKyQjHqRd+w==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.3.1.tgz", + "integrity": "sha512-597I7L5MXbD/1i3EmcaOOjL/5suxJD7p5tnbV1PiWnE28c2cYiIHqmSMK2s7us2/UrhOL2KTNBiD0qBg6KnImg==", "dependencies": { - "@redux-saga/symbols": "^1.1.3" + "@redux-saga/symbols": "^1.2.1" } }, "node_modules/@redux-saga/is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.3.tgz", - "integrity": "sha512-naXrkETG1jLRfVfhOx/ZdLj0EyAzHYbgJWkXbB3qFliPcHKiWbv/ULQryOAEKyjrhiclmr6AMdgsXFyx7/yE6Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@redux-saga/is/-/is-1.2.1.tgz", + "integrity": "sha512-x3aWtX3GmQfEvn8dh0ovPbsXgK9JjpiR24wKztpGbZP8JZUWWvUgKrvnWZ/T/4iphOBftyVc9VrIwhAnsM+OFA==", "dependencies": { - "@redux-saga/symbols": "^1.1.3", - "@redux-saga/types": "^1.2.1" + "@redux-saga/symbols": "^1.2.1", + "@redux-saga/types": "^1.3.1" } }, "node_modules/@redux-saga/symbols": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.3.tgz", - "integrity": "sha512-hCx6ZvU4QAEUojETnX8EVg4ubNLBFl1Lps4j2tX7o45x/2qg37m3c6v+kSp8xjDJY+2tJw4QB3j8o8dsl1FDXg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.2.1.tgz", + "integrity": "sha512-3dh+uDvpBXi7EUp/eO+N7eFM4xKaU4yuGBXc50KnZGzIrR/vlvkTFQsX13zsY8PB6sCFYAgROfPSRUj8331QSA==" }, "node_modules/@redux-saga/types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.2.1.tgz", - "integrity": "sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@redux-saga/types/-/types-1.3.1.tgz", + "integrity": "sha512-YRCrJdhQLobGIQ8Cj1sta3nn6DrZDTSUnrIYhS2e5V590BmfVDleKoAquclAiKSBKWJwmuXTb+b4BL6rSHnahw==" }, "node_modules/@shikijs/core": { "version": "2.5.0", @@ -1459,6 +1496,39 @@ "@types/node": "*" } }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.5.tgz", + "integrity": "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@typespec/ts-http-runtime/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@typespec/ts-http-runtime/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -1484,12 +1554,11 @@ } }, "node_modules/adaptivecards": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/adaptivecards/-/adaptivecards-3.0.2.tgz", - "integrity": "sha512-ioniHtm8c5uENw6jmddnntpjC4MvSOjN2Xrg9YhxuTtoVqz0XoYrInRIq0uf9WmONm7p+wqjAqBkoI6IRDeNwA==", - "license": "MIT", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/adaptivecards/-/adaptivecards-3.0.6.tgz", + "integrity": "sha512-WDCIb2WXZ7cOHJ9HIHRNdhSt861HySVOdN2xPk2aKHAF3JvD8QGQ8/XcNFrDJxCteOog8MM7EBlXfSAR8JXKAg==", "peerDependencies": { - "swiper": "^8.2.6" + "swiper": "^12.1.2" } }, "node_modules/agent-base": { @@ -1508,53 +1577,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js-rfc2560": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz", - "integrity": "sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==", - "dependencies": { - "asn1.js-rfc5280": "^3.0.0" - }, - "peerDependencies": { - "asn1.js": "^5.0.0" - } - }, - "node_modules/asn1.js-rfc5280": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-3.0.0.tgz", - "integrity": "sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==", - "dependencies": { - "asn1.js": "^5.0.0" - } - }, - "node_modules/async-disk-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-2.1.0.tgz", - "integrity": "sha512-iH+boep2xivfD9wMaZWkywYIURSmsL96d6MoqrC94BnGSvXE4Quf8hnJiHGFYhw/nLeIa1XyRaf4vvcvkwAefg==", - "dependencies": { - "debug": "^4.1.1", - "heimdalljs": "^0.2.3", - "istextorbinary": "^2.5.1", - "mkdirp": "^0.5.0", - "rimraf": "^3.0.0", - "rsvp": "^4.8.5", - "username-sync": "^1.0.2" - }, - "engines": { - "node": "8.* || >= 10.*" - } - }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", @@ -1570,11 +1592,6 @@ "npm": ">=6" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, "node_modules/base64-arraybuffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", @@ -1612,26 +1629,10 @@ "is-stream": "^2.0.0" } }, - "node_modules/binaryextensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", - "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==", - "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" - }, "node_modules/botframework-directlinejs": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/botframework-directlinejs/-/botframework-directlinejs-0.15.6.tgz", - "integrity": "sha512-l7zRsFb22eEAglGgopqw+3G2kCy3iBMJqTCKykJi2M/VNJikxyjJTIVx3bvuHq7KpUfiTxSZrnr61d7+ulEaYw==", + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/botframework-directlinejs/-/botframework-directlinejs-0.15.8.tgz", + "integrity": "sha512-w/rt2NPSuKMU02zFuJ5E456j2xjAJskgaR6L0sEb6/osmC+zcRlP9ghAjKEmgO9Bquu9NYVwVtahIiRCdKpqDA==", "dependencies": { "@babel/runtime": "7.26.10", "botframework-streaming": "4.23.0", @@ -1671,118 +1672,25 @@ "integrity": "sha512-KmkCs6SjE6t4ihrfW9JelAPQIIIFbJweaaSLTh/4AO+c58JlDcb+GbdPt8yr5lRcFg4rPswRFRRhBGpWwh0K/Q==" }, "node_modules/botframework-directlinespeech-sdk": { - "version": "4.18.1-main.20250804.93043a9", - "resolved": "https://registry.npmjs.org/botframework-directlinespeech-sdk/-/botframework-directlinespeech-sdk-4.18.1-main.20250804.93043a9.tgz", - "integrity": "sha512-HCdOcQtNHMrXdsniXkKyZRtBZCz9f4kgVlt2QTVIOt5wJUZrwxR+31S0kBfcSDjejJ5VyTZUjpnjU7RbJr6BwQ==", + "version": "4.18.1-main.20260416.88357ae", + "resolved": "https://registry.npmjs.org/botframework-directlinespeech-sdk/-/botframework-directlinespeech-sdk-4.18.1-main.20260416.88357ae.tgz", + "integrity": "sha512-fEwT+BltKzpk3CJECJJJ0twVj906OqaNwduHlkhhHuJGoWNzJLqR2pvGVZpHSkRhRtgKfs82UZofQqjbC8nz0g==", "dependencies": { - "@babel/runtime": "7.28.2", + "@babel/runtime": "7.28.6", "abort-controller": "3.0.0", "base64-arraybuffer": "1.0.2", - "core-js": "3.44.0", - "core-js-pure": "3.44.0", - "event-as-promise": "2.0.0", + "core-js": "3.48.0", + "core-js-pure": "3.48.0", + "event-as-promise": "2.0.1", "event-target-shim": "6.0.2", "math-random": "2.0.1", - "microsoft-cognitiveservices-speech-sdk": "1.17.0", - "web-speech-cognitive-services": "8.1.3" + "microsoft-cognitiveservices-speech-sdk": "1.48.0", + "web-speech-cognitive-services": "8.1.4" }, "engines": { "node": ">= 10.14.2" } }, - "node_modules/botframework-directlinespeech-sdk/node_modules/@angular/common": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.0.6.tgz", - "integrity": "sha512-Yd8PF0dR37FAzqEcBHAyVCiSGMJOezSJe6rV/4BC6AVLfaZ7oZLl8CNVxKsod2UHd6rKxt1hzx05QdVcVvYNeA==", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/core": "21.0.6", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/botframework-directlinespeech-sdk/node_modules/@angular/core": { - "version": "21.0.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.0.6.tgz", - "integrity": "sha512-SvWbOkkrsqprYJSBmzQEWkWjfZB/jkRYyFp2ClMJBPqOLxP1a+i3Om2rolcNQjZPz87bs9FszwgRlXUy7sw5cQ==", - "peer": true, - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/compiler": "21.0.6", - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.15.0 || ~0.16.0" - }, - "peerDependenciesMeta": { - "@angular/compiler": { - "optional": true - }, - "zone.js": { - "optional": true - } - } - }, - "node_modules/botframework-directlinespeech-sdk/node_modules/microsoft-cognitiveservices-speech-sdk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.17.0.tgz", - "integrity": "sha512-RVUCpTeu1g+R4HB/PaLQmEfsdHzwEa6+2phgCiPA4lGIiR7ILEL7qZHHUWAG6W4zcjnWeiLnL7tVgMbyd5XGgA==", - "dependencies": { - "agent-base": "^6.0.1", - "asn1.js-rfc2560": "^5.0.1", - "asn1.js-rfc5280": "^3.0.0", - "async-disk-cache": "^2.1.0", - "https-proxy-agent": "^4.0.0", - "simple-lru-cache": "0.0.2", - "url-parse": "^1.4.7", - "uuid": "^3.3.3", - "ws": "^7.3.1", - "xmlhttprequest-ts": "^1.0.1" - } - }, - "node_modules/botframework-directlinespeech-sdk/node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "peer": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/botframework-directlinespeech-sdk/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/botframework-directlinespeech-sdk/node_modules/xmlhttprequest-ts": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ts/-/xmlhttprequest-ts-1.0.1.tgz", - "integrity": "sha512-x+7u8NpBcwfBCeGqUpdGrR6+kGUGVjKc4wolyCz7CQqBZQp7VIyaF1xAvJ7ApRzvLeuiC4BbmrA6CWH9NqxK/g==", - "dependencies": { - "tslib": "^1.9.2" - }, - "peerDependencies": { - "@angular/common": ">= 5.0.0", - "@angular/core": ">= 5.0.0" - } - }, - "node_modules/botframework-directlinespeech-sdk/node_modules/xmlhttprequest-ts/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/botframework-streaming": { "version": "4.23.0", "resolved": "https://registry.npmjs.org/botframework-streaming/-/botframework-streaming-4.23.0.tgz", @@ -1795,60 +1703,62 @@ } }, "node_modules/botframework-webchat": { - "version": "4.18.1-main.20250804.93043a9", - "resolved": "https://registry.npmjs.org/botframework-webchat/-/botframework-webchat-4.18.1-main.20250804.93043a9.tgz", - "integrity": "sha512-JOTxvLBCh6FeWIqnpRI7AsIiRqx9MaUiADEjEOwsNFRdvp/rJ/JMum3VU2EEgOhHmll7MnsnAN3YIubA05GNrA==", - "dependencies": { - "@babel/runtime": "7.28.2", - "adaptivecards": "3.0.2", - "botframework-directlinejs": "0.15.6", - "botframework-directlinespeech-sdk": "4.18.1-main.20250804.93043a9", - "botframework-webchat-api": "4.18.1-main.20250804.93043a9", - "botframework-webchat-component": "4.18.1-main.20250804.93043a9", - "botframework-webchat-core": "4.18.1-main.20250804.93043a9", + "version": "4.18.1-main.20260416.88357ae", + "resolved": "https://registry.npmjs.org/botframework-webchat/-/botframework-webchat-4.18.1-main.20260416.88357ae.tgz", + "integrity": "sha512-qn92mVO46zb2HldNTp+gdmAcAri3tN9SRGlw2PZujakhncGC+A9ao7xL6sCCczuk42Zycx7gaWBWhQbPqyirNw==", + "dependencies": { + "@babel/runtime": "7.28.6", + "adaptivecards": "3.0.6", + "botframework-directlinejs": "0.15.8", + "botframework-directlinespeech-sdk": "4.18.1-main.20260416.88357ae", + "botframework-webchat-api": "4.18.1-main.20260416.88357ae", + "botframework-webchat-component": "4.18.1-main.20260416.88357ae", + "botframework-webchat-core": "4.18.1-main.20260416.88357ae", "classnames": "2.5.1", - "core-js": "3.44.0", - "katex": "0.16.22", + "core-js": "3.48.0", + "katex": "0.16.33", "math-random": "2.0.1", - "mdast-util-from-markdown": "2.0.2", + "mdast-util-from-markdown": "2.0.3", "memoize-one": "6.0.0", "micromark": "4.0.2", "micromark-extension-gfm": "3.0.0", "micromark-util-character": "2.1.1", - "microsoft-cognitiveservices-speech-sdk": "1.45.0", + "micromark-util-sanitize-uri": "2.0.1", + "microsoft-cognitiveservices-speech-sdk": "1.48.0", "prop-types": "15.8.1", "punycode": "2.3.1", - "sanitize-html": "2.17.0", + "sanitize-html": "2.17.1", "shiki": "2.5.0", - "swiper": "8.4.7", "url-search-params-polyfill": "8.2.5", - "use-ref-from": "0.1.0", + "use-ref-from": "0.2.1", "uuid": "8.3.2", - "valibot": "1.1.0", - "web-speech-cognitive-services": "8.1.3", + "valibot": "1.2.0", + "web-speech-cognitive-services": "8.1.4", "whatwg-fetch": "3.6.20" }, "peerDependencies": { "react": ">= 16.8.6", + "react-chain-of-responsibility": "0.4.2", "react-dom": ">= 16.8.6" } }, "node_modules/botframework-webchat-api": { - "version": "4.18.1-main.20250804.93043a9", - "resolved": "https://registry.npmjs.org/botframework-webchat-api/-/botframework-webchat-api-4.18.1-main.20250804.93043a9.tgz", - "integrity": "sha512-dQBrFBFURGHzjJ4Scg5DN1RbeDD0nHtZA8H+yE5qHis2DIz6qgwjk4n5jqgDfEdWLccljaql/fsIHHBGNdwrcQ==", + "version": "4.18.1-main.20260416.88357ae", + "resolved": "https://registry.npmjs.org/botframework-webchat-api/-/botframework-webchat-api-4.18.1-main.20260416.88357ae.tgz", + "integrity": "sha512-TcwV4/P/1iD0CLfhf+wL4zfDsPzx9/rw+hr4IhphwAWuPVfGYFXZZBSIL/tTO5sF2r3y84e6TU+HX4zoJ/W1qw==", "dependencies": { - "botframework-webchat-core": "4.18.1-main.20250804.93043a9", - "globalize": "1.7.0", - "iter-fest": "0.3.0", + "botframework-webchat-core": "4.18.1-main.20260416.88357ae", + "globalize": "1.7.1", + "iter-fest": "0.3.1", "math-random": "2.0.1", "prop-types": "15.8.1", - "react-chain-of-responsibility": "0.3.0", + "react-chain-of-responsibility": "0.4.2", "react-redux": "7.2.9", "redux": "5.0.1", "simple-update-in": "2.2.0", - "use-ref-from": "0.1.0", - "valibot": "1.1.0" + "use-reduce-memo": "0.1.0", + "use-ref-from": "0.2.1", + "valibot": "1.2.0" }, "peerDependencies": { "react": ">= 16.8.6", @@ -1861,37 +1771,38 @@ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" }, "node_modules/botframework-webchat-component": { - "version": "4.18.1-main.20250804.93043a9", - "resolved": "https://registry.npmjs.org/botframework-webchat-component/-/botframework-webchat-component-4.18.1-main.20250804.93043a9.tgz", - "integrity": "sha512-RFcj0QlWl70NTg/s3Yu+kNDEEaDTbW8cHnQYPSzGqDLQAq6udbz2p6Ssxob6I5jOvUSajpfnbt2klTKuuqVzmg==", + "version": "4.18.1-main.20260416.88357ae", + "resolved": "https://registry.npmjs.org/botframework-webchat-component/-/botframework-webchat-component-4.18.1-main.20260416.88357ae.tgz", + "integrity": "sha512-6VN6fECZg9xcjZ+vBBhh32yFYFaicMdbPjZd3hsQtnvstG0WMHX70sZLhLRrZUHmlEQijsuKwGxafMSum5AJ2g==", "dependencies": { "@emotion/css": "11.13.5", "base64-js": "1.5.1", - "botframework-webchat-api": "4.18.1-main.20250804.93043a9", - "botframework-webchat-core": "4.18.1-main.20250804.93043a9", + "botframework-webchat-api": "4.18.1-main.20260416.88357ae", + "botframework-webchat-core": "4.18.1-main.20260416.88357ae", "classnames": "2.5.1", "compute-scroll-into-view": "1.0.20", "deep-freeze-strict": "1.1.1", "markdown-it": "13.0.2", "math-random": "2.0.1", - "mdast-util-from-markdown": "2.0.2", + "mdast-util-from-markdown": "2.0.3", "memoize-one": "6.0.0", "merge-refs": "2.0.0", "prop-types": "15.8.1", "punycode": "2.3.1", - "react-chain-of-responsibility": "0.3.0", - "react-dictate-button": "4.0.0", + "react-chain-of-responsibility": "0.4.2", + "react-dictate-button": "4.0.1", "react-film": "4.0.0", "react-redux": "7.2.9", - "react-say": "2.2.0", + "react-say": "2.2.1", "react-scroll-to-bottom": "4.2.1-main.53844f5", "react-wrap-with": "0.1.0", "redux": "5.0.1", "simple-update-in": "2.2.0", - "use-propagate": "0.2.1", - "use-ref-from": "0.1.0", - "use-state-with-ref": "0.1.0", - "valibot": "1.1.0" + "use-propagate": "0.2.2", + "use-reduce-memo": "0.1.0", + "use-ref-from": "0.2.1", + "use-state-with-ref": "0.2.1", + "valibot": "1.2.0" }, "peerDependencies": { "react": ">= 16.8.6", @@ -1904,19 +1815,22 @@ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" }, "node_modules/botframework-webchat-core": { - "version": "4.18.1-main.20250804.93043a9", - "resolved": "https://registry.npmjs.org/botframework-webchat-core/-/botframework-webchat-core-4.18.1-main.20250804.93043a9.tgz", - "integrity": "sha512-05FKLfyUmoKHW3P0tofc09Q7eRG3zjHzg/86cp7HxAWnKu/hJJWpabM7nVGI9BAy78pHNrGkEDE/KedEQWNRwA==", + "version": "4.18.1-main.20260416.88357ae", + "resolved": "https://registry.npmjs.org/botframework-webchat-core/-/botframework-webchat-core-4.18.1-main.20260416.88357ae.tgz", + "integrity": "sha512-3jnsPdserlV/0fKyrmJ2lwl2YKREHHss7xOlsw7art3IN4AeIRk6IGVRCQIyfjDY26VY8OxhiDgqupg5yHEHQg==", "dependencies": { - "@babel/runtime": "7.28.2", + "@babel/runtime": "7.28.6", "@redux-devtools/extension": "3.3.0", + "core-js-pure": "3.48.0", + "iter-fest": "0.3.1", "jwt-decode": "4.0.0", "math-random": "2.0.1", - "mime": "4.0.7", + "mime": "4.1.0", "redux": "5.0.1", - "redux-saga": "1.3.0", + "redux-saga": "1.4.2", "simple-update-in": "2.2.0", - "valibot": "1.1.0" + "uuid": "8.3.2", + "valibot": "1.2.0" }, "engines": { "node": ">=12.0.0" @@ -1935,15 +1849,6 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -2042,20 +1947,23 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/compute-scroll-into-view": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, "node_modules/core-js": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz", - "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", + "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -2063,9 +1971,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.44.0.tgz", - "integrity": "sha512-gvMQAGB4dfVUxpYD0k3Fq8J+n5bB6Ytl15lqlZrOIXFzxOhtPaObfkQGHtMRdyjIf7z2IeNULwi1jEwyS+ltKQ==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz", + "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -2193,15 +2101,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/dom7": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/dom7/-/dom7-4.0.6.tgz", - "integrity": "sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==", - "license": "MIT", - "dependencies": { - "ssr-window": "^4.0.0" - } - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -2242,21 +2141,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/editions": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/editions/-/editions-2.3.1.tgz", - "integrity": "sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==", - "dependencies": { - "errlop": "^2.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/emoji-regex-xs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", @@ -2273,17 +2157,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/errlop": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.2.0.tgz", - "integrity": "sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==", - "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2294,9 +2167,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", "dev": true, "hasInstallScript": true, "bin": { @@ -2306,32 +2179,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" } }, "node_modules/escape-string-regexp": { @@ -2347,11 +2220,11 @@ } }, "node_modules/event-as-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/event-as-promise/-/event-as-promise-2.0.0.tgz", - "integrity": "sha512-veBES20Er4NLmbcpvTJxmdSeQt1YP+NmK/6CKlx2kkkitCZ0gRYi/Q6iwx5iwBBeHdGcD4W4uHxitv6oPB2X3A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/event-as-promise/-/event-as-promise-2.0.1.tgz", + "integrity": "sha512-g0Wpfse1Gf9Pc8RLggBMti+LxHRmnHxGgv/lQeBlwL31xvFSjLS1ab8g9K5XrtSh8fcK8CHAV7h3zMgjg0LFBA==", "dependencies": { - "event-as-promise": "^2.0.0" + "event-as-promise": "^2.0.1" } }, "node_modules/event-target-shim": { @@ -2371,11 +2244,6 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "license": "MIT" }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -2385,31 +2253,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globalize": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.7.0.tgz", - "integrity": "sha512-faR46vTIbFCeAemyuc9E6/d7Wrx9k2ae2L60UhakztFg6VuE42gENVJNuPFtt7Sdjrk9m2w8+py7Jj+JTNy59w==", - "license": "MIT", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/globalize/-/globalize-1.7.1.tgz", + "integrity": "sha512-PFymRL0PtitFOlSniuwwwNfkooi3cLQJo9Uke1+j1DsGfUkkHkwneImqVtGcqKI0TuzhAlHt7hAcgK324902HA==", "dependencies": { "cldrjs": "^0.5.4" } @@ -2423,6 +2270,14 @@ "node": ">=4" } }, + "node_modules/handler-chain": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/handler-chain/-/handler-chain-0.1.1.tgz", + "integrity": "sha512-5eo8F9UTUiFCMtDUF1ipva1tvOCGE+vFr33aFHSISjTqXfGywCRV2aE6TzPkMhaw1pArOv3wv2Wz3Rh+AJJ8bA==", + "dependencies": { + "handler-chain": "^0.1.1" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -2469,19 +2324,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/heimdalljs": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", - "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", - "dependencies": { - "rsvp": "~3.2.1" - } - }, - "node_modules/heimdalljs/node_modules/rsvp": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", - "integrity": "sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==" - }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -2587,6 +2429,26 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "engines": { + "node": ">= 14" + } + }, "node_modules/https-proxy-agent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", @@ -2627,9 +2489,9 @@ ] }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", + "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==" }, "node_modules/import-fresh": { "version": "3.3.0", @@ -2647,21 +2509,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "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.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, "node_modules/inline-style-parser": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", @@ -2707,28 +2554,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istextorbinary": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.6.0.tgz", - "integrity": "sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==", - "dependencies": { - "binaryextensions": "^2.1.2", - "editions": "^2.2.0", - "textextensions": "^2.5.0" - }, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/iter-fest": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/iter-fest/-/iter-fest-0.3.0.tgz", - "integrity": "sha512-t76cnHCl9MEZRaUb0VBwTXP8dWjxbcTYm91VGWfQYjSMXKkjdOAIjUsaMYuLIy9jxk9fT55XIlb4Y/HACK/zlw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/iter-fest/-/iter-fest-0.3.1.tgz", + "integrity": "sha512-XL7DGglVGVevTuQAAhVAN3MbADeKyDcijPToBKUxZHpOSUJT22CfvGqsV1t34LyoVxDDL3MGPbHZVx20Lky0og==", "dependencies": { - "iter-fest": "^0.3.0" + "iter-fest": "^0.3.1" }, "peerDependencies": { "core-js-pure": "^3.37.1" @@ -2764,9 +2595,9 @@ "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" }, "node_modules/katex": { - "version": "0.16.22", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", - "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", + "version": "0.16.33", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.33.tgz", + "integrity": "sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -2778,14 +2609,6 @@ "katex": "cli.js" } }, - "node_modules/katex/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -2834,9 +2657,9 @@ "license": "CC0-1.0" }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -3394,9 +3217,9 @@ } }, "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "funding": [ { "type": "GitHub Sponsors", @@ -3407,7 +3230,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", @@ -3469,10 +3291,11 @@ "license": "MIT" }, "node_modules/microsoft-cognitiveservices-speech-sdk": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.45.0.tgz", - "integrity": "sha512-etTSMGxDELxBQtNL8cgq2bwMrE6CjgfC8oIqKH9I9ghFs4/ITyLXy9HZuo0wQItN1zfDH3FhBeR72TmApe6pCQ==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.48.0.tgz", + "integrity": "sha512-D/8cZn0+vWE18PHloEXfeSHjxuCTYs1zjMulQ4EgpjIrLdtaqSqa9guDBXPnxFnnysWRnZZwyfM/uoiKZvEXXw==", "dependencies": { + "@azure/core-auth": "^1.9.0", "@types/webrtc": "^0.0.37", "agent-base": "^6.0.1", "bent": "^7.3.12", @@ -3494,9 +3317,9 @@ } }, "node_modules/microsoft-cognitiveservices-speech-sdk/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "engines": { "node": ">=10.0.0" }, @@ -3514,9 +3337,9 @@ } }, "node_modules/mime": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.7.tgz", - "integrity": "sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "funding": [ "https://github.com/sponsors/broofa" ], @@ -3527,41 +3350,6 @@ "node": ">=16" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3614,19 +3402,11 @@ } }, "node_modules/on-error-resume-next": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/on-error-resume-next/-/on-error-resume-next-2.0.2.tgz", - "integrity": "sha512-xGi+R6gp5OyWz/BbGIxyXbdcaGl0SFjvCyC0HgquupNC5t15L+7B/KYwLQ47EPRfpegmX0uOa85GAj4NO4Ujlg==", - "dependencies": { - "on-error-resume-next": "^2.0.2" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/on-error-resume-next/-/on-error-resume-next-2.0.3.tgz", + "integrity": "sha512-M/0RUYYlgKwoVhtdMNHSp//HxuqdAM5gDXtwitDfupoW+L773ZEitgqaYzZIuPFNZA3jf83bffkx4tm0QQxnuw==", "dependencies": { - "wrappy": "1" + "on-error-resume-next": "^2.0.3" } }, "node_modules/oniguruma-to-es": { @@ -3674,14 +3454,6 @@ "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -3703,9 +3475,9 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", "funding": [ { "type": "opencollective", @@ -3757,11 +3529,6 @@ "node": ">=6" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -3776,30 +3543,43 @@ } }, "node_modules/react-chain-of-responsibility": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/react-chain-of-responsibility/-/react-chain-of-responsibility-0.3.0.tgz", - "integrity": "sha512-ord5r2WtHbioakZ7EG3LPHR3zCpMzmNAHtb+rTkaU0SRB7xj3YvWgPQDhoPeBDMgPoCKuBsYabJhNVYoFPODpQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/react-chain-of-responsibility/-/react-chain-of-responsibility-0.4.2.tgz", + "integrity": "sha512-khBaWO1rSLSUw6Ydr3lYFgONwmrx9rSOClrLCyn7cq40QxVJSh5utq1rbey+Pr24trWmQdC9qweTuKG2RptTXw==", "dependencies": { - "react-chain-of-responsibility": "^0.3.0" + "handler-chain": "^0.1.0", + "react-chain-of-responsibility": "^0.4.2", + "valibot": "^1.1.0" }, "peerDependencies": { - "react": ">=16.8.0" + "react": ">=16.8.6" } }, "node_modules/react-dictate-button": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-dictate-button/-/react-dictate-button-4.0.0.tgz", - "integrity": "sha512-v+92/yHShDzCapCZm2Y6UoKEKzt32gCJWFTIcJxRTwySfP8+eulUG/2U2ttu74YD6i0z9dYsRfFEHHwC+UfwKQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-dictate-button/-/react-dictate-button-4.0.1.tgz", + "integrity": "sha512-UvXx3RhJfGD4I7UkUEtBGBRyKRQrh90gzFsde53sJUhJ0V8iTJo8dthtNBMuanYTUyGdZdfdPCjv5ozIlEPvAQ==", "dependencies": { - "@babel/runtime-corejs3": "^7.14.0", - "core-js": "^3.12.1", - "react-dictate-button": "^4.0.0", + "@babel/runtime-corejs3": "^7.28.4", + "react-dictate-button": "^4.0.1", "use-ref-from": "^0.1.0" }, "peerDependencies": { "react": ">=16.8.6" } }, + "node_modules/react-dictate-button/node_modules/use-ref-from": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.1.0.tgz", + "integrity": "sha512-PRjmfhUGUKghhOjKV1dBU66M7CASdb4NkMsaaWLdJA81yOZFlVL7Pi3O9aD+68pRh0VrRQjZfS6Ux3vPy1VhRg==", + "dependencies": { + "@babel/runtime-corejs3": "^7.24.1", + "use-ref-from": "^0.1.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -3873,12 +3653,12 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-say": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/react-say/-/react-say-2.2.0.tgz", - "integrity": "sha512-PbP3InO5bXeWEZyYi/QCu3CPsPKzT+1V/LnlxRsJ8gyL2utaEm1/cg+8WR2n6aHutzgvRP1Cq01jk9oYwectQA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-say/-/react-say-2.2.1.tgz", + "integrity": "sha512-Iew40Wql10+IC659S1CRbziEO272XeJmWfmLbnSLqyGpCwELTBxTefHvFUvKwEAuJv8Bk+ezjcw0NxgDAZdzWA==", "dependencies": { "prop-types": "^15.8.1", - "react-say": "^2.2.0" + "react-say": "^2.2.1" }, "peerDependencies": { "react": ">= 16.8.6" @@ -3970,11 +3750,11 @@ } }, "node_modules/redux-saga": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.3.0.tgz", - "integrity": "sha512-J9RvCeAZXSTAibFY0kGw6Iy4EdyDNW7k6Q+liwX+bsck7QVsU78zz8vpBRweEfANxnnlG/xGGeOvf6r8UXzNJQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/redux-saga/-/redux-saga-1.4.2.tgz", + "integrity": "sha512-QLIn/q+7MX/B+MkGJ/K6R3//60eJ4QNy65eqPsJrfGezbxdh1Jx+37VRKE2K4PsJnNET5JufJtgWdT30WBa+6w==", "dependencies": { - "@redux-saga/core": "^1.3.0" + "@redux-saga/core": "^1.4.2" } }, "node_modules/regenerator-runtime": { @@ -4003,11 +3783,6 @@ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==" }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -4034,29 +3809,6 @@ "node": ">=4" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "engines": { - "node": "6.* || >= 7.*" - } - }, "node_modules/rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -4068,15 +3820,10 @@ "npm": ">=2.0.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/sanitize-html": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.0.tgz", - "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.1.tgz", + "integrity": "sha512-ehFCW+q1a4CSOWRAdX97BX/6/PDEkCqw7/0JXZAGQV57FQB3YOkTa/rrzHPeJ+Aghy4vZAFfWMYyfxIiB7F/gw==", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", @@ -4096,14 +3843,6 @@ "loose-envify": "^1.1.0" } }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/shiki": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", @@ -4119,11 +3858,6 @@ "@types/hast": "^3.0.4" } }, - "node_modules/simple-lru-cache": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", - "integrity": "sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==" - }, "node_modules/simple-update-in": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/simple-update-in/-/simple-update-in-2.2.0.tgz", @@ -4156,12 +3890,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ssr-window": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", - "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==", - "license": "MIT" - }, "node_modules/stringify-entities": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", @@ -4210,9 +3938,9 @@ } }, "node_modules/swiper": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-8.4.7.tgz", - "integrity": "sha512-VwO/KU3i9IV2Sf+W2NqyzwWob4yX9Qdedq6vBtS0rFqJ6Fa5iLUJwxQkuD4I38w0WDJwmFl8ojkdcRFPHWD+2g==", + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-12.1.3.tgz", + "integrity": "sha512-XcWlVmkHFICI4fuoJKgbp8PscDcS4i7pBH8nwJRBi3dpQvhCySwsWRYm4bOf/BzKVWkHOYaFw7qz9uBSrY3oug==", "funding": [ { "type": "patreon", @@ -4223,12 +3951,7 @@ "url": "http://opencollective.com/swiper" } ], - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "dom7": "^4.0.4", - "ssr-window": "^4.0.2" - }, + "peer": true, "engines": { "node": ">= 4.7.0" } @@ -4241,17 +3964,6 @@ "node": ">=0.10.0" } }, - "node_modules/textextensions": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", - "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", - "engines": { - "node": ">=0.8" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -4269,8 +3981,7 @@ "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "peer": true + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/type-fest": { "version": "4.41.0", @@ -4373,15 +4084,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url-search-params-polyfill": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/url-search-params-polyfill/-/url-search-params-polyfill-8.2.5.tgz", @@ -4389,22 +4091,21 @@ "license": "MIT" }, "node_modules/use-propagate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/use-propagate/-/use-propagate-0.2.1.tgz", - "integrity": "sha512-sEqlR9Zq63fCmJbxD33j3+nRkR4tAiu6K6/P++ks4A9ZLJjKZcgllaaufTBSW29dQzjWdaMT2JsPwBskamWwQQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/use-propagate/-/use-propagate-0.2.2.tgz", + "integrity": "sha512-cuOqTG8JKwkd1DHJAy1fkwIMhjVRZSdSvELJCXsROvmS49yd8CEXg4UDaDC7Qqsea0FAa1d8cFMY5pnodZul1w==", "dependencies": { - "use-propagate": "^0.2.1", + "use-propagate": "^0.2.2", "use-ref-from": "^0.1.0" }, "peerDependencies": { "react": ">=16.8.0" } }, - "node_modules/use-ref-from": { + "node_modules/use-propagate/node_modules/use-ref-from": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.1.0.tgz", "integrity": "sha512-PRjmfhUGUKghhOjKV1dBU66M7CASdb4NkMsaaWLdJA81yOZFlVL7Pi3O9aD+68pRh0VrRQjZfS6Ux3vPy1VhRg==", - "license": "MIT", "dependencies": { "@babel/runtime-corejs3": "^7.24.1", "use-ref-from": "^0.1.0" @@ -4413,23 +4114,41 @@ "react": ">=16.8.0" } }, - "node_modules/use-state-with-ref": { + "node_modules/use-reduce-memo": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/use-state-with-ref/-/use-state-with-ref-0.1.0.tgz", - "integrity": "sha512-l8/Dsu9XjhhhFSsBWmit+7WYsRSrKHafp+eJURhhVvv9K9fVIKxDaEAq/dW4pHgxCYcjWgD6EaofiW8NiwGabQ==", + "resolved": "https://registry.npmjs.org/use-reduce-memo/-/use-reduce-memo-0.1.0.tgz", + "integrity": "sha512-dJK1fMqvI7Lzh5xdKsZkZiqbvTyNtovQB7E3IWJp5tOeG7kdxZKdD5XSROiRGwAfB0qctgzJMcsCTp+m7y77UA==", "dependencies": { - "@babel/runtime-corejs3": "^7.23.6", - "use-ref-from": "^0.1.0", - "use-state-with-ref": "^0.1.0" + "handler-chain": "^0.1.0", + "use-reduce-memo": "^0.1.0", + "valibot": "^1.1.0" }, "peerDependencies": { "react": ">=16.8.0" } }, - "node_modules/username-sync": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/username-sync/-/username-sync-1.0.3.tgz", - "integrity": "sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA==" + "node_modules/use-ref-from": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/use-ref-from/-/use-ref-from-0.2.1.tgz", + "integrity": "sha512-iwRcKtgIPP4K++mR3LO5DLUf4WMfBWyAM20oUL9jbKfywoMTiRScUixGv0HkhlJxFm6uFv5yDnr5YwcSiJSm1g==", + "dependencies": { + "use-ref-from": "^0.2.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/use-state-with-ref": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/use-state-with-ref/-/use-state-with-ref-0.2.1.tgz", + "integrity": "sha512-6EPhnqXsdzEVnOQub5VoDmrTLI2PqKp8zIIw/fvfdW9F/qLboIZG5ifaRQpAon8Upu3QYnIYZ+8h+YYQdXUnCw==", + "dependencies": { + "use-ref-from": "^0.2.1", + "use-state-with-ref": "^0.2.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + } }, "node_modules/uuid": { "version": "8.3.2", @@ -4441,9 +4160,9 @@ } }, "node_modules/valibot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.1.0.tgz", - "integrity": "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", + "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", "peerDependencies": { "typescript": ">=5" }, @@ -4480,18 +4199,18 @@ } }, "node_modules/web-speech-cognitive-services": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/web-speech-cognitive-services/-/web-speech-cognitive-services-8.1.3.tgz", - "integrity": "sha512-StlM8XsScA6Z/HGl4aAR9dmIe/+B5Tlc0ke1Bp7T/TSafzjszzDvXp/65u9vfbnJ2ZuCX+ie8IXR2y6q5rgYww==", + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/web-speech-cognitive-services/-/web-speech-cognitive-services-8.1.4.tgz", + "integrity": "sha512-1d/2F5RDAMTJmJdSWWssKzmTsA6hkXz4kz3QzBpDvgjxWjDo4j2erb6KydyfaRzDRk4Pij4MtR1CtpzZtU9rSA==", "dependencies": { "base64-arraybuffer": "^1.0.2", - "event-as-promise": "^2.0.0", + "event-as-promise": "^2.0.1", "event-target-shim": "^6.0.2", "memoize-one": "^6.0.0", - "on-error-resume-next": "^2.0.2", + "on-error-resume-next": "^2.0.3", "simple-update-in": "^2.2.0", - "valibot": "^1.1.0", - "web-speech-cognitive-services": "^8.1.3" + "valibot": "^1.2.0", + "web-speech-cognitive-services": "^8.1.4" }, "peerDependencies": { "microsoft-cognitiveservices-speech-sdk": "^1.17.0" @@ -4517,11 +4236,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, "node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", @@ -4543,10 +4257,9 @@ } }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "engines": { "node": ">= 6" } From 39edc5b9316fc29312b2340566092e31034cde7b Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 22 Apr 2026 23:45:54 +0000 Subject: [PATCH 005/108] Update PR number --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42ff46fb6f..cdf19a7750 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -187,7 +187,7 @@ Breaking changes in this release: - Activity "copy" button will use `outerHTML` and `textContent` for clipboard content, in PR [#5378](https://github.com/microsoft/BotFramework-WebChat/pull/5378), by [@compulim](https://github.com/compulim) - Enabled icon customization in Fluent theme through CSS variables, in PR [#5413](https://github.com/microsoft/BotFramework-WebChat/pull/5413), by [@OEvgeny](https://github.com/OEvgeny) - Reworked, enabled in Web Chat, in PR [#5502](https://github.com/microsoft/BotFramework-WebChat/pull/5502), by [@OEvgeny](https://github.com/OEvgeny) -- Bumped dependencies, by [@compulim](https://github.com/compulim) in PR [#5385](https://github.com/microsoft/BotFramework-WebChat/pull/5385), PR [#5400](https://github.com/microsoft/BotFramework-WebChat/pull/5400), PR [#5426](https://github.com/microsoft/BotFramework-WebChat/pull/5426), PR [#5427](https://github.com/microsoft/BotFramework-WebChat/pull/5427), PR [#5476](https://github.com/microsoft/BotFramework-WebChat/pull/5476), PR [#5516](https://github.com/microsoft/BotFramework-WebChat/pull/5516), PR [#5529](https://github.com/microsoft/BotFramework-WebChat/pull/5529), PR [#5532](https://github.com/microsoft/BotFramework-WebChat/pull/5532), PR [#5659](https://github.com/microsoft/BotFramework-WebChat/pull/5659), PR [#5661](https://github.com/microsoft/BotFramework-WebChat/pull/5661), PR [#5768](https://github.com/microsoft/BotFramework-WebChat/pull/5768), and PR [#XXX](https://github.com/microsoft/BotFramework-WebChat/pull/XXX), by [@OEvgeny](https://github.com/OEvgeny) in PR [#5662](https://github.com/microsoft/BotFramework-WebChat/pull/5662) +- Bumped dependencies, by [@compulim](https://github.com/compulim) in PR [#5385](https://github.com/microsoft/BotFramework-WebChat/pull/5385), PR [#5400](https://github.com/microsoft/BotFramework-WebChat/pull/5400), PR [#5426](https://github.com/microsoft/BotFramework-WebChat/pull/5426), PR [#5427](https://github.com/microsoft/BotFramework-WebChat/pull/5427), PR [#5476](https://github.com/microsoft/BotFramework-WebChat/pull/5476), PR [#5516](https://github.com/microsoft/BotFramework-WebChat/pull/5516), PR [#5529](https://github.com/microsoft/BotFramework-WebChat/pull/5529), PR [#5532](https://github.com/microsoft/BotFramework-WebChat/pull/5532), PR [#5659](https://github.com/microsoft/BotFramework-WebChat/pull/5659), PR [#5661](https://github.com/microsoft/BotFramework-WebChat/pull/5661), PR [#5768](https://github.com/microsoft/BotFramework-WebChat/pull/5768), and PR [#5813](https://github.com/microsoft/BotFramework-WebChat/pull/5813), by [@OEvgeny](https://github.com/OEvgeny) in PR [#5662](https://github.com/microsoft/BotFramework-WebChat/pull/5662) - Production dependencies - [`@babel/runtime@7.29.2`](https://npmjs.com/package/@babel/runtime/v/7.29.2) - [`@emotion/css@11.13.5`](https://npmjs.com/package/@emotion/css/v/11.13.5) From 9c8ad60654f0cc671a282eafb316f6bfdc31ce2d Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 22 Apr 2026 23:48:28 +0000 Subject: [PATCH 006/108] Add ignoreDeprecations --- packages/react-valibot/src/tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-valibot/src/tsconfig.json b/packages/react-valibot/src/tsconfig.json index 1a8e530c21..a7aa6e5e4f 100644 --- a/packages/react-valibot/src/tsconfig.json +++ b/packages/react-valibot/src/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "allowSyntheticDefaultImports": true, + "ignoreDeprecations": "6.0" // Required for tsup@8.5.1 to work in typescript@6.0.3 }, "extends": "@msinternal/botframework-webchat-tsconfig/current" } From 24e59370eda77b8c375ce9af1619e99da193717a Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 22 Apr 2026 23:51:25 +0000 Subject: [PATCH 007/108] Add ignoreDeprecations --- packages/react-valibot/src/tsconfig.json | 3 +-- packages/tsconfig/src/current/tsconfig.json | 1 + packages/tsconfig/src/legacy/tsconfig.json | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/react-valibot/src/tsconfig.json b/packages/react-valibot/src/tsconfig.json index a7aa6e5e4f..281599ac3f 100644 --- a/packages/react-valibot/src/tsconfig.json +++ b/packages/react-valibot/src/tsconfig.json @@ -1,7 +1,6 @@ { "compilerOptions": { - "allowSyntheticDefaultImports": true, - "ignoreDeprecations": "6.0" // Required for tsup@8.5.1 to work in typescript@6.0.3 + "allowSyntheticDefaultImports": true }, "extends": "@msinternal/botframework-webchat-tsconfig/current" } diff --git a/packages/tsconfig/src/current/tsconfig.json b/packages/tsconfig/src/current/tsconfig.json index 9bdd69c62e..621d2f0632 100644 --- a/packages/tsconfig/src/current/tsconfig.json +++ b/packages/tsconfig/src/current/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "ignoreDeprecations": "6.0", // Required for tsup@8.5.1 to work in typescript@6.0.3 "jsx": "react", "module": "ESNext", "moduleResolution": "Bundler", diff --git a/packages/tsconfig/src/legacy/tsconfig.json b/packages/tsconfig/src/legacy/tsconfig.json index 432d170f8b..e0372e43ea 100644 --- a/packages/tsconfig/src/legacy/tsconfig.json +++ b/packages/tsconfig/src/legacy/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "allowSyntheticDefaultImports": true, + "ignoreDeprecations": "6.0", // Required for tsup@8.5.1 to work in typescript@6.0.3 "jsx": "react", "module": "ESNext", "moduleResolution": "Bundler", From 55e748bb633eee18eb152810ec3c753f58e7ed8f Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 11:01:47 +0000 Subject: [PATCH 008/108] Fix Schema.org schema --- packages/core/src/actions/connect.ts | 10 +- packages/core/src/actions/sendEvent.ts | 2 +- packages/core/src/actions/sendMessageBack.ts | 2 +- packages/core/src/actions/sendPostBack.ts | 2 +- .../core/src/actions/setDictateInterims.ts | 2 +- packages/core/src/actions/setDictateState.ts | 4 +- packages/core/src/actions/setLanguage.ts | 2 +- packages/core/src/actions/setSendBox.ts | 2 +- packages/core/src/actions/setSendTimeout.ts | 2 +- .../src/actions/setSendTypingIndicator.ts | 2 +- ...yClientState.js => ActivityClientState.ts} | 6 +- packages/core/src/constants/DictateState.js | 7 - packages/core/src/constants/DictateState.ts | 12 ++ packages/core/src/createStore.ts | 14 +- packages/core/src/index.ts | 28 +-- .../src/types/external/OrgSchema/Action.ts | 91 ++++++---- .../types/external/OrgSchema/ActionStatus.ts | 13 ++ .../types/external/OrgSchema/Claim.spec.ts | 15 +- .../src/types/external/OrgSchema/Claim.ts | 56 ++++-- .../types/external/OrgSchema/CreativeWork.ts | 170 ++++++++++++------ .../external/OrgSchema/CreativeWorkStatus.ts | 8 + .../types/external/OrgSchema/DefinedTerm.ts | 52 ++++-- .../src/types/external/OrgSchema/Person.ts | 29 +++ .../src/types/external/OrgSchema/Project.ts | 55 ++++-- .../OrgSchema/Thing.parseThing.spec.ts | 12 +- .../src/types/external/OrgSchema/Thing.ts | 137 ++++++++++---- .../types/external/OrgSchema/UserReview.ts | 37 ++-- .../types/external/OrgSchema/VoteAction.ts | 43 +++-- .../private/orgSchemaProperties.spec.ts | 1 + .../OrgSchema/private/orgSchemaProperties.ts | 23 ++- .../private/orgSchemaProperty.spec.ts | 1 + .../OrgSchema/private/orgSchemaProperty.ts | 22 ++- .../src/types/external/OrgSchema/types.ts | 15 ++ .../src/types/internal/GlobalScopeClock.ts | 20 +-- .../core/src/utils/getOrgSchemaMessage.ts | 13 +- 35 files changed, 648 insertions(+), 262 deletions(-) rename packages/core/src/constants/{ActivityClientState.js => ActivityClientState.ts} (79%) delete mode 100644 packages/core/src/constants/DictateState.js create mode 100644 packages/core/src/constants/DictateState.ts create mode 100644 packages/core/src/types/external/OrgSchema/ActionStatus.ts create mode 100644 packages/core/src/types/external/OrgSchema/CreativeWorkStatus.ts create mode 100644 packages/core/src/types/external/OrgSchema/Person.ts create mode 100644 packages/core/src/types/external/OrgSchema/types.ts diff --git a/packages/core/src/actions/connect.ts b/packages/core/src/actions/connect.ts index db8b068a6b..df51c913f7 100644 --- a/packages/core/src/actions/connect.ts +++ b/packages/core/src/actions/connect.ts @@ -5,7 +5,15 @@ const CONNECT_PENDING = `${CONNECT}_PENDING`; const CONNECT_REJECTED = `${CONNECT}_REJECTED`; const CONNECT_STILL_PENDING = `${CONNECT}_STILL_PENDING`; -export default function connect({ directLine, userID, username }) { +export default function connect({ + directLine, + userID, + username +}: { + readonly directLine: any; + readonly userID: string; + readonly username: string; +}) { return { type: CONNECT, payload: { diff --git a/packages/core/src/actions/sendEvent.ts b/packages/core/src/actions/sendEvent.ts index badd442fa5..5168d356af 100644 --- a/packages/core/src/actions/sendEvent.ts +++ b/packages/core/src/actions/sendEvent.ts @@ -1,6 +1,6 @@ const SEND_EVENT = 'WEB_CHAT/SEND_EVENT'; -export default function sendEvent(name, value) { +export default function sendEvent(name: string, value: any) { return { type: SEND_EVENT, payload: { name, value } diff --git a/packages/core/src/actions/sendMessageBack.ts b/packages/core/src/actions/sendMessageBack.ts index d75f9d95ef..272a5261a4 100644 --- a/packages/core/src/actions/sendMessageBack.ts +++ b/packages/core/src/actions/sendMessageBack.ts @@ -1,6 +1,6 @@ const SEND_MESSAGE_BACK = 'WEB_CHAT/SEND_MESSAGE_BACK'; -export default function sendMessageback(value, text, displayText) { +export default function sendMessageback(value: any, text: string | undefined, displayText: string | undefined) { return { type: SEND_MESSAGE_BACK, payload: { displayText, text, value } diff --git a/packages/core/src/actions/sendPostBack.ts b/packages/core/src/actions/sendPostBack.ts index 77e8bc200c..10e1173576 100644 --- a/packages/core/src/actions/sendPostBack.ts +++ b/packages/core/src/actions/sendPostBack.ts @@ -1,6 +1,6 @@ const SEND_POST_BACK = 'WEB_CHAT/SEND_POST_BACK'; -export default function sendPostback(value) { +export default function sendPostback(value: any) { return { type: SEND_POST_BACK, payload: { value } diff --git a/packages/core/src/actions/setDictateInterims.ts b/packages/core/src/actions/setDictateInterims.ts index b485728f36..5bc98c29ff 100644 --- a/packages/core/src/actions/setDictateInterims.ts +++ b/packages/core/src/actions/setDictateInterims.ts @@ -1,6 +1,6 @@ const SET_DICTATE_INTERIMS = 'WEB_CHAT/SET_DICTATE_INTERIMS'; -export default function setDictateInterims(dictateInterims) { +export default function setDictateInterims(dictateInterims: readonly string[]) { return { type: SET_DICTATE_INTERIMS, payload: { dictateInterims } diff --git a/packages/core/src/actions/setDictateState.ts b/packages/core/src/actions/setDictateState.ts index c706044448..b0ae68c1dd 100644 --- a/packages/core/src/actions/setDictateState.ts +++ b/packages/core/src/actions/setDictateState.ts @@ -1,6 +1,8 @@ +import type { DictateState } from '../constants/DictateState'; + const SET_DICTATE_STATE = 'WEB_CHAT/SET_DICTATE_STATE'; -export default function setDictateState(dictateState) { +export default function setDictateState(dictateState: DictateState) { return { type: SET_DICTATE_STATE, payload: { dictateState } diff --git a/packages/core/src/actions/setLanguage.ts b/packages/core/src/actions/setLanguage.ts index f8b3bd7b42..e04460b308 100644 --- a/packages/core/src/actions/setLanguage.ts +++ b/packages/core/src/actions/setLanguage.ts @@ -1,6 +1,6 @@ const SET_LANGUAGE = 'WEB_CHAT/SET_LANGUAGE'; -export default function setLanguage(language) { +export default function setLanguage(language: string) { return { type: SET_LANGUAGE, payload: { language } diff --git a/packages/core/src/actions/setSendBox.ts b/packages/core/src/actions/setSendBox.ts index 28de1a8ef3..3e4f265c79 100644 --- a/packages/core/src/actions/setSendBox.ts +++ b/packages/core/src/actions/setSendBox.ts @@ -1,6 +1,6 @@ const SET_SEND_BOX = 'WEB_CHAT/SET_SEND_BOX'; -export default function setSendBox(text) { +export default function setSendBox(text: string) { return { type: SET_SEND_BOX, payload: { text } diff --git a/packages/core/src/actions/setSendTimeout.ts b/packages/core/src/actions/setSendTimeout.ts index 4fa8be804a..b70521cf18 100644 --- a/packages/core/src/actions/setSendTimeout.ts +++ b/packages/core/src/actions/setSendTimeout.ts @@ -1,6 +1,6 @@ const SET_SEND_TIMEOUT = 'WEB_CHAT/SET_SEND_TIMEOUT'; -export default function setSendTimeout(sendTimeout) { +export default function setSendTimeout(sendTimeout: number) { return { type: SET_SEND_TIMEOUT, payload: { sendTimeout } diff --git a/packages/core/src/actions/setSendTypingIndicator.ts b/packages/core/src/actions/setSendTypingIndicator.ts index bee0df415e..80734788ac 100644 --- a/packages/core/src/actions/setSendTypingIndicator.ts +++ b/packages/core/src/actions/setSendTypingIndicator.ts @@ -5,7 +5,7 @@ type SetSendTypingIndicatorAction = { type: typeof SET_SEND_TYPING_INDICATOR; }; -export default function setSendTypingIndicator(value): SetSendTypingIndicatorAction { +export default function setSendTypingIndicator(value: boolean): SetSendTypingIndicatorAction { return { payload: { sendTypingIndicator: !!value }, type: SET_SEND_TYPING_INDICATOR diff --git a/packages/core/src/constants/ActivityClientState.js b/packages/core/src/constants/ActivityClientState.ts similarity index 79% rename from packages/core/src/constants/ActivityClientState.js rename to packages/core/src/constants/ActivityClientState.ts index 5eee652eba..02dbf17b20 100644 --- a/packages/core/src/constants/ActivityClientState.js +++ b/packages/core/src/constants/ActivityClientState.ts @@ -1,8 +1,8 @@ /** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */ -const SEND_FAILED = 'send failed'; +const SEND_FAILED = 'send failed' as const; /** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */ -const SENDING = 'sending'; +const SENDING = 'sending' as const; /** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */ -const SENT = 'sent'; +const SENT = 'sent' as const; export { SEND_FAILED, SENDING, SENT }; diff --git a/packages/core/src/constants/DictateState.js b/packages/core/src/constants/DictateState.js deleted file mode 100644 index 7aef0394c4..0000000000 --- a/packages/core/src/constants/DictateState.js +++ /dev/null @@ -1,7 +0,0 @@ -const IDLE = 0; -const WILL_START = 1; -const STARTING = 2; -const DICTATING = 3; -const STOPPING = 4; - -export { DICTATING, IDLE, STARTING, STOPPING, WILL_START }; diff --git a/packages/core/src/constants/DictateState.ts b/packages/core/src/constants/DictateState.ts new file mode 100644 index 0000000000..dac7eb8263 --- /dev/null +++ b/packages/core/src/constants/DictateState.ts @@ -0,0 +1,12 @@ +const IDLE = 0 as const; +const WILL_START = 1 as const; +// eslint-disable-next-line no-magic-numbers +const STARTING = 2 as const; +// eslint-disable-next-line no-magic-numbers +const DICTATING = 3 as const; +// eslint-disable-next-line no-magic-numbers +const STOPPING = 4 as const; + +type DictateState = typeof DICTATING | typeof IDLE | typeof STARTING | typeof STOPPING | typeof WILL_START; + +export { DICTATING, IDLE, STARTING, STOPPING, WILL_START, type DictateState }; diff --git a/packages/core/src/createStore.ts b/packages/core/src/createStore.ts index 02abafc5fd..fd523b8e43 100644 --- a/packages/core/src/createStore.ts +++ b/packages/core/src/createStore.ts @@ -1,5 +1,5 @@ import { composeWithDevTools } from '@redux-devtools/extension'; -import { applyMiddleware, createStore as createReduxStore, type Store } from 'redux'; +import { applyMiddleware, createStore as createReduxStore, type Middleware, type Store } from 'redux'; import createSagaMiddleware from 'redux-saga'; import sagaError from './actions/sagaError'; @@ -31,7 +31,7 @@ type CreateStoreOptions = { ponyfill?: Partial; }; -function createEnhancerAndSagaMiddleware(getStore, ...middlewares) { +function createEnhancerAndSagaMiddleware(getStore: () => any, ...middlewares: readonly Middleware[]) { const sagaMiddleware = createSagaMiddleware({ onError: (...args) => { const [err] = args; @@ -58,7 +58,11 @@ function createEnhancerAndSagaMiddleware(getStore, ...middlewares) { // The complexity is introduced by the check of ponyfill. // eslint-disable-next-line complexity -export function withOptions(options: CreateStoreOptions, initialState?, ...middlewares): Store { +export function withOptions( + options: CreateStoreOptions, + initialState?: any | undefined, + ...middlewares: readonly Middleware[] +): Store { // IE Mode does not have `globalThis`. const globalThisOrWindow = typeof globalThis === 'undefined' ? window : globalThis; const ponyfillFromOptions: Partial = options.ponyfill || {}; @@ -139,7 +143,7 @@ export function withOptions(options: CreateStoreOptions, initialState?, ...middl * * This store is critical for Web Chat business logics to operate, please use with cautions. */ -export default function createStore(initialState?, ...middlewares): Store { +export default function createStore(initialState?: any, ...middlewares: readonly Middleware[]): Store { return withOptions({}, initialState, ...middlewares); } @@ -150,6 +154,6 @@ export default function createStore(initialState?, ...middlewares): Store { * * @deprecated Use `withOptions` instead and pass `{ devTools: true }` */ -export function withDevTools(initialState?, ...middlewares): Store { +export function withDevTools(initialState?: any, ...middlewares: readonly Middleware[]): Store { return withOptions({ devTools: true }, initialState, ...middlewares); } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index fadb704911..dec4cdf361 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -38,13 +38,6 @@ import createStore, { withDevTools as createStoreWithDevTools, withOptions as createStoreWithOptions } from './createStore'; -import { parseAction } from './types/external/OrgSchema/Action'; -import { parseClaim } from './types/external/OrgSchema/Claim'; -import { parseCreativeWork } from './types/external/OrgSchema/CreativeWork'; -import { parseDefinedTerm } from './types/external/OrgSchema/DefinedTerm'; -import { parseProject } from './types/external/OrgSchema/Project'; -import { parseThing } from './types/external/OrgSchema/Thing'; -import { parseVoteAction } from './types/external/OrgSchema/VoteAction'; import getActivityLivestreamingMetadata from './utils/getActivityLivestreamingMetadata'; import getOrgSchemaMessage from './utils/getOrgSchemaMessage'; import onErrorResumeNext from './utils/onErrorResumeNext'; @@ -90,13 +83,13 @@ import type { DirectLineSuggestedAction } from './types/external/DirectLineSugge import type { DirectLineThumbnailCard } from './types/external/DirectLineThumbnailCard'; import type { DirectLineVideoCard } from './types/external/DirectLineVideoCard'; import type { Observable } from './types/external/Observable'; -import type { Action as OrgSchemaAction } from './types/external/OrgSchema/Action'; -import type { Claim as OrgSchemaClaim } from './types/external/OrgSchema/Claim'; -import type { CreativeWork as OrgSchemaCreativeWork } from './types/external/OrgSchema/CreativeWork'; -import type { DefinedTerm as OrgSchemaDefinedTerm } from './types/external/OrgSchema/DefinedTerm'; -import type { Project as OrgSchemaProject } from './types/external/OrgSchema/Project'; -import type { Thing as OrgSchemaThing } from './types/external/OrgSchema/Thing'; -import type { UserReview as OrgSchemaUserReview } from './types/external/OrgSchema/UserReview'; +import type { ActionOutput as OrgSchemaAction } from './types/external/OrgSchema/Action'; +import type { ClaimOutput as OrgSchemaClaim } from './types/external/OrgSchema/Claim'; +import type { CreativeWorkOutput as OrgSchemaCreativeWork } from './types/external/OrgSchema/CreativeWork'; +import type { DefinedTermOutput as OrgSchemaDefinedTerm } from './types/external/OrgSchema/DefinedTerm'; +import type { ProjectOutput as OrgSchemaProject } from './types/external/OrgSchema/Project'; +import type { ThingOutput as OrgSchemaThing } from './types/external/OrgSchema/Thing'; +import type { UserReviewOutput as OrgSchemaUserReview } from './types/external/OrgSchema/UserReview'; /** @deprecated */ export { singleToArray, type OneOrMany } from '@msinternal/botframework-webchat-base/utils'; @@ -121,13 +114,6 @@ export { markActivity, muteVoiceRecording, onErrorResumeNext, - parseAction, - parseClaim, - parseCreativeWork, - parseDefinedTerm, - parseProject, - parseThing, - parseVoteAction, postActivity, postVoiceActivity, registerVoiceHandler, diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index 6c9b0ced14..3b0728b7bb 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -1,9 +1,10 @@ -import { lazy, parse, picklist, pipe, string, type ObjectEntries } from 'valibot'; +import { intersect, lazy, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; -import orgSchemaProperty from './private/orgSchemaProperty'; -import { project, type Project } from './Project'; -import { thing, type Thing } from './Thing'; -import { userReview, type UserReview } from './UserReview'; +import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; +import orgSchemaProperties from './private/orgSchemaProperties'; +import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. @@ -14,50 +15,78 @@ import { userReview, type UserReview } from './UserReview'; * * @see https://schema.org/Action */ -export type Action = Thing & { +type ActionInput = ThingInput & { /** * A sub property of object. The options subject to this action. Supersedes [`option`](https://schema.org/option). */ - actionOption?: string | Thing; + readonly actionOption?: string | ThingInput | readonly (string | ThingInput)[] | undefined; /** * Indicates the current disposition of the Action. * * @see https://schema.org/actionStatus */ - actionStatus?: - | 'ActiveActionStatus' - | 'CompletedActionStatus' - | 'FailedActionStatus' - | 'PotentialActionStatus' - | undefined; + readonly actionStatus?: ActionStatusInput | readonly ActionStatusInput[] | undefined; /** * The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller. Supersedes [carrier](https://schema.org/carrier). * * @see https://schema.org/provider */ - provider?: Project | undefined; + readonly provider?: ProjectInput | readonly ProjectInput[] | undefined; /** * The result produced in the action. E.g. John wrote *a book*. */ - result?: Thing | UserReview | undefined; + readonly result?: ThingInput | UserReviewInput | readonly (ThingInput | UserReviewInput)[] | undefined; }; -export const action = (entries?: TEntries | undefined) => - thing({ - actionOption: orgSchemaProperty(string()), - actionStatus: orgSchemaProperty( - pipe( - string(), - picklist(['ActiveActionStatus', 'CompletedActionStatus', 'FailedActionStatus', 'PotentialActionStatus']) - ) - ), - provider: orgSchemaProperty(lazy(() => project())), - result: orgSchemaProperty(userReview()), - - ...entries - }); - -export const parseAction = (data: unknown): Action => parse(action(), data); +/** + * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. + * + * See also [blog post](http://blog.schema.org/2014/04/announcing-schemaorg-actions.html) and [Actions overview document](https://schema.org/docs/actions.html). + * + * This is partial implementation of https://schema.org/Action. + * + * @see https://schema.org/Action + */ +type ActionOutput = ThingOutput & { + /** + * A sub property of object. The options subject to this action. Supersedes [`option`](https://schema.org/option). + */ + readonly actionOption?: readonly (string | ThingOutput)[] | undefined; + + /** + * Indicates the current disposition of the Action. + * + * @see https://schema.org/actionStatus + */ + readonly actionStatus?: readonly ActionStatusOutput[] | undefined; + + /** + * The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller. Supersedes [carrier](https://schema.org/carrier). + * + * @see https://schema.org/provider + */ + readonly provider?: readonly ProjectOutput[] | undefined; + + /** + * The result produced in the action. E.g. John wrote *a book*. + */ + readonly result?: readonly (ThingOutput | UserReviewOutput)[] | undefined; +}; + +const actionSchema: GenericSchema = intersect([ + thingSchema, + pipe( + looseObject({ + actionOption: orgSchemaProperties(string()), + actionStatus: orgSchemaProperties(actionStatusSchema), + provider: orgSchemaProperties(lazy(() => projectSchema)), + result: orgSchemaProperties(userReviewSchema) + }), + readonly() + ) +]); + +export { actionSchema, type ActionInput, type ActionOutput }; diff --git a/packages/core/src/types/external/OrgSchema/ActionStatus.ts b/packages/core/src/types/external/OrgSchema/ActionStatus.ts new file mode 100644 index 0000000000..244c7dce36 --- /dev/null +++ b/packages/core/src/types/external/OrgSchema/ActionStatus.ts @@ -0,0 +1,13 @@ +import { picklist, type InferInput, type InferOutput } from 'valibot'; + +const actionStatusSchema = picklist([ + 'ActiveActionStatus', + 'CompletedActionStatus', + 'FailedActionStatus', + 'PotentialActionStatus' +]); + +type ActionStatusInput = InferInput; +type ActionStatusOutput = InferOutput; + +export { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Claim.spec.ts b/packages/core/src/types/external/OrgSchema/Claim.spec.ts index a409826118..5a38e9e51e 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.spec.ts @@ -1,9 +1,11 @@ -import { parseClaim } from './Claim'; +import { describe, expect, test } from '@jest/globals'; +import { parse } from 'valibot'; +import { claimSchema } from './Claim'; describe('Claim', () => { test('should parse appearance', () => expect( - parseClaim({ + parse(claimSchema, { '@type': 'Claim', appearance: { '@type': 'Book', @@ -20,7 +22,7 @@ describe('Claim', () => { test('should parse claimInterpreter', () => expect( - parseClaim({ + parse(claimSchema, { '@type': 'Claim', claimInterpreter: { '@type': 'Project', @@ -37,9 +39,12 @@ describe('Claim', () => { describe('should parse position', () => { test('as a number', () => - expect(parseClaim({ '@type': 'Claim', position: 1 })).toEqual({ '@type': 'Claim', position: 1 })); + expect(parse(claimSchema, { '@type': 'Claim', position: 1 })).toEqual({ '@type': 'Claim', position: 1 })); test('as a string', () => - expect(parseClaim({ '@type': 'Claim', position: 'First' })).toEqual({ '@type': 'Claim', position: 'First' })); + expect(parse(claimSchema, { '@type': 'Claim', position: 'First' })).toEqual({ + '@type': 'Claim', + position: 'First' + })); }); }); diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index 68a6a751ab..7b68c5fa00 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -1,8 +1,8 @@ -import { lazy, parse, type ObjectEntries } from 'valibot'; +import { intersect, lazy, looseObject, pipe, readonly, type GenericSchema } from 'valibot'; -import { creativeWork, type CreativeWork } from './CreativeWork'; -import { project, type Project } from './Project'; -import orgSchemaProperty from './private/orgSchemaProperty'; +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; +import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; +import orgSchemaProperties from './private/orgSchemaProperties'; /** * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews. @@ -13,28 +13,56 @@ import orgSchemaProperty from './private/orgSchemaProperty'; * * @see https://schema.org/Claim. */ -export type Claim = CreativeWork & { +type ClaimInput = CreativeWorkInput & { /** * Indicates an occurrence of a [Claim](https://schema.org/Claim) in some [CreativeWork](https://schema.org/CreativeWork). * * @see https://schema.org/appearance. */ - appearance?: CreativeWork | undefined; + readonly appearance?: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; /** * For a [Claim](https://schema.org/Claim) interpreted from [MediaObject](https://schema.org/MediaObject) content sed to indicate a claim contained, implied or refined from the content of a [MediaObject](https://schema.org/MediaObject). * * @see https://schema.org/claimInterpreter. */ - claimInterpreter?: Project | undefined; + readonly claimInterpreter?: ProjectInput | readonly ProjectInput[] | undefined; }; -export const claim = (entries?: TEntries | undefined) => - creativeWork({ - appearance: orgSchemaProperty(lazy(() => creativeWork())), - claimInterpreter: orgSchemaProperty(lazy(() => project())), +/** + * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews. + * + * Beyond [ClaimReview](https://schema.org/ClaimReview), the Claim type can be associated with related creative works - for example a [ScholarlyArticle](https://schema.org/ScholarlyArticle) or [Question](https://schema.org/Question) might be about some [Claim](https://schema.org/Claim). + * + * This is partial implementation of https://schema.org/Claim. + * + * @see https://schema.org/Claim. + */ +type ClaimOutput = CreativeWorkOutput & { + /** + * Indicates an occurrence of a [Claim](https://schema.org/Claim) in some [CreativeWork](https://schema.org/CreativeWork). + * + * @see https://schema.org/appearance. + */ + readonly appearance?: readonly CreativeWorkOutput[] | undefined; + + /** + * For a [Claim](https://schema.org/Claim) interpreted from [MediaObject](https://schema.org/MediaObject) content sed to indicate a claim contained, implied or refined from the content of a [MediaObject](https://schema.org/MediaObject). + * + * @see https://schema.org/claimInterpreter. + */ + readonly claimInterpreter?: readonly ProjectOutput[] | undefined; +}; - ...entries - }); +const claimSchema: GenericSchema = intersect([ + creativeWorkSchema, + pipe( + looseObject({ + appearance: orgSchemaProperties(lazy(() => creativeWorkSchema)), + claimInterpreter: orgSchemaProperties(lazy(() => projectSchema)) + }), + readonly() + ) +]); -export const parseClaim = (data: unknown): Claim => parse(claim(), data); +export { claimSchema, type ClaimInput, type ClaimOutput }; diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 6a4225f900..97905b578c 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -1,9 +1,14 @@ -import { lazy, literal, number, object, parse, string, union, type ObjectEntries } from 'valibot'; - -import { definedTerm, type DefinedTerm } from './DefinedTerm'; +import { intersect, lazy, looseObject, number, pipe, readonly, string, union, type GenericSchema } from 'valibot'; + +import { + creativeWorkStatusSchema, + type CreativeWorkStatusInput, + type CreativeWorkStatusOutput +} from './CreativeWorkStatus'; +import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm'; +import { personSchema, type PersonInput, type PersonOutput } from './Person'; import orgSchemaProperties from './private/orgSchemaProperties'; -import orgSchemaProperty from './private/orgSchemaProperty'; -import { thing, type Thing } from './Thing'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** * The most generic kind of creative work, including books, movies, photographs, software programs, etc. @@ -12,110 +17,173 @@ import { thing, type Thing } from './Thing'; * * @see https://schema.org/CreativeWork */ -// Due to limitations of TypeScript, when using valibot.lazy(), the output type must be explicitly set. -export type CreativeWork = Thing & { +type CreativeWorkInput = ThingInput & { /** * An abstract is a short description that summarizes a [CreativeWork](https://schema.org/CreativeWork). * * @see https://schema.org/abstract */ - abstract?: string | undefined; + readonly abstract?: string | readonly string[] | undefined; /** * The author of this content or rating. Please note that author is special in that HTML 5 provides a special mechanism for indicating authorship via the rel tag. That is equivalent to this and may be used interchangeably. * * @see https://schema.org/author */ - author?: Person | string | undefined; + readonly author?: PersonInput | string | readonly (PersonInput | string)[] | undefined; /** * A citation or reference to another creative work, such as another publication, web page, scholarly article, etc. * * @see https://schema.org/citation */ - citation?: readonly CreativeWork[] | undefined; + readonly citation?: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; /** * The status of the creative work, such as whether it is incomplete or published. * * @see https://schema.org/creativeWorkStatus */ - creativeWorkStatus?: 'Incomplete' | 'Published' | undefined; + readonly creativeWorkStatus?: CreativeWorkStatusInput | readonly CreativeWorkStatusInput[] | undefined; /** * The schema.org [isBasedOn](https://schema.org/isBasedOn) property provides a resource from which this work is derived or from which it is a modification or adaptation. */ - isBasedOn?: CreativeWork | undefined; + readonly isBasedOn?: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; /** * Keywords or tags used to describe some item. Multiple textual entries in a keywords list are typically delimited by commas, or by repeating the property. * * @see https://schema.org/keywords */ - keywords?: readonly (DefinedTerm | string)[] | undefined; + readonly keywords: DefinedTermInput | string | readonly (DefinedTermInput | string)[] | undefined; /** * A pattern that something has, for example 'polka dot', 'striped', 'Canadian flag'. Values are typically expressed as text, although links to controlled value schemes are also supported. * * @see https://schema.org/pattern */ - pattern?: DefinedTerm | undefined; + readonly pattern: DefinedTermInput | readonly DefinedTermInput[] | undefined; /** * The position of an item in a series or sequence of items. * * @see https://schema.org/position */ - position?: number; + readonly position: number | string | readonly (number | string)[] | undefined; /** * The textual content of this CreativeWork. * * @see https://schema.org/text */ - text?: string | undefined; + readonly text: string | readonly string[] | undefined; /** * The schema.org [usageInfo](https://schema.org/usageInfo) property indicates further information about a [CreativeWork](https://schema.org/CreativeWork). This property is applicable both to works that are freely available and to those that require payment or other transactions. It can reference additional information, e.g. community expectations on preferred linking and citation conventions, as well as purchasing details. For something that can be commercially licensed, usageInfo can provide detailed, resource-specific information about licensing options. * * This property can be used alongside the license property which indicates license(s) applicable to some piece of content. The usageInfo property can provide information about other licensing options, e.g. acquiring commercial usage rights for an image that is also available under non-commercial creative commons licenses. */ - usageInfo?: CreativeWork | undefined; + readonly usageInfo: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; }; -type Person = { - '@type': 'Person'; - description?: string | undefined; - image?: string | undefined; - name?: string | undefined; +/** + * The most generic kind of creative work, including books, movies, photographs, software programs, etc. + * + * This is partial implementation of https://schema.org/CreativeWork. + * + * @see https://schema.org/CreativeWork + */ +type CreativeWorkOutput = ThingOutput & { + /** + * An abstract is a short description that summarizes a [CreativeWork](https://schema.org/CreativeWork). + * + * @see https://schema.org/abstract + */ + readonly abstract?: readonly string[] | undefined; + + /** + * The author of this content or rating. Please note that author is special in that HTML 5 provides a special mechanism for indicating authorship via the rel tag. That is equivalent to this and may be used interchangeably. + * + * @see https://schema.org/author + */ + readonly author?: readonly (PersonOutput | string)[] | undefined; + + /** + * A citation or reference to another creative work, such as another publication, web page, scholarly article, etc. + * + * @see https://schema.org/citation + */ + readonly citation?: readonly CreativeWorkOutput[] | undefined; + + /** + * The status of the creative work, such as whether it is incomplete or published. + * + * @see https://schema.org/creativeWorkStatus + */ + readonly creativeWorkStatus?: readonly CreativeWorkStatusOutput[] | undefined; + + /** + * The schema.org [isBasedOn](https://schema.org/isBasedOn) property provides a resource from which this work is derived or from which it is a modification or adaptation. + */ + readonly isBasedOn?: readonly CreativeWorkOutput[] | undefined; + + /** + * Keywords or tags used to describe some item. Multiple textual entries in a keywords list are typically delimited by commas, or by repeating the property. + * + * @see https://schema.org/keywords + */ + readonly keywords: readonly (DefinedTermOutput | string)[] | undefined; + + /** + * A pattern that something has, for example 'polka dot', 'striped', 'Canadian flag'. Values are typically expressed as text, although links to controlled value schemes are also supported. + * + * @see https://schema.org/pattern + */ + readonly pattern: readonly DefinedTermOutput[] | undefined; + + /** + * The position of an item in a series or sequence of items. + * + * @see https://schema.org/position + */ + readonly position: readonly (number | string)[] | undefined; + + /** + * The textual content of this CreativeWork. + * + * @see https://schema.org/text + */ + readonly text: readonly string[] | undefined; + + /** + * The schema.org [usageInfo](https://schema.org/usageInfo) property indicates further information about a [CreativeWork](https://schema.org/CreativeWork). This property is applicable both to works that are freely available and to those that require payment or other transactions. It can reference additional information, e.g. community expectations on preferred linking and citation conventions, as well as purchasing details. For something that can be commercially licensed, usageInfo can provide detailed, resource-specific information about licensing options. + * + * This property can be used alongside the license property which indicates license(s) applicable to some piece of content. The usageInfo property can provide information about other licensing options, e.g. acquiring commercial usage rights for an image that is also available under non-commercial creative commons licenses. + */ + readonly usageInfo: readonly CreativeWorkOutput[] | undefined; }; -const person = (entries?: TEntries | undefined) => - object({ - description: orgSchemaProperty(string()), - image: orgSchemaProperty(string()), - name: orgSchemaProperty(string()), - - ...entries - }); - -export const creativeWork = (entries?: TEntries | undefined) => - thing({ - // For forward compatibility, we did not enforce @type must be "CreativeWork" or any other subtypes. - // In future, if Schema.org introduced a new subtype of CreativeWork, we should still able to parse that one as a CreativeWork. - - abstract: orgSchemaProperty(string()), - author: orgSchemaProperty(union([person(), string()])), - citation: orgSchemaProperties(lazy(() => creativeWork())), - creativeWorkStatus: orgSchemaProperty(union([literal('Incomplete'), literal('Published')])), - isBasedOn: orgSchemaProperty(lazy(() => creativeWork())), - keywords: orgSchemaProperties(union([lazy(() => definedTerm()), string()])), - pattern: orgSchemaProperty(lazy(() => definedTerm())), - position: orgSchemaProperty(union([number(), string()])), - text: orgSchemaProperty(string()), - usageInfo: orgSchemaProperty(lazy(() => creativeWork())), - - ...entries - }); - -export const parseCreativeWork = (data: unknown): CreativeWork => parse(creativeWork(), data); +const creativeWorkSchema: GenericSchema = intersect([ + thingSchema, + pipe( + looseObject({ + // For forward compatibility, we did not enforce @type must be "CreativeWork" or any other subtypes. + // In future, if Schema.org introduced a new subtype of CreativeWork, we should still able to parse that one as a CreativeWork. + + abstract: orgSchemaProperties(string()), + author: orgSchemaProperties(union([personSchema, string()])), + citation: orgSchemaProperties(lazy(() => creativeWorkSchema)), + creativeWorkStatus: orgSchemaProperties(creativeWorkStatusSchema), + isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema)), + keywords: orgSchemaProperties(union([lazy(() => definedTermSchema), string()])), + pattern: orgSchemaProperties(lazy(() => definedTermSchema)), + position: orgSchemaProperties(union([number(), string()])), + text: orgSchemaProperties(string()), + usageInfo: orgSchemaProperties(lazy(() => creativeWorkSchema)) + }), + readonly() + ) +]); + +export { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput }; diff --git a/packages/core/src/types/external/OrgSchema/CreativeWorkStatus.ts b/packages/core/src/types/external/OrgSchema/CreativeWorkStatus.ts new file mode 100644 index 0000000000..c74413ff70 --- /dev/null +++ b/packages/core/src/types/external/OrgSchema/CreativeWorkStatus.ts @@ -0,0 +1,8 @@ +import { picklist, type InferInput, type InferOutput } from 'valibot'; + +const creativeWorkStatusSchema = picklist(['Incomplete', 'Published']); + +type CreativeWorkStatusInput = InferInput; +type CreativeWorkStatusOutput = InferOutput; + +export { creativeWorkStatusSchema, type CreativeWorkStatusInput, type CreativeWorkStatusOutput }; diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index 544fd27f9a..d0000df7a9 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -1,15 +1,30 @@ -import { parse, string, type ObjectEntries } from 'valibot'; +import { intersect, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; -import { thing, type Thing } from './Thing'; -import orgSchemaProperty from './private/orgSchemaProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import orgSchemaProperties from './private/orgSchemaProperties'; -export const definedTerm = (entries?: TEntries | undefined) => - thing({ - inDefinedTermSet: orgSchemaProperty(string()), - termCode: orgSchemaProperty(string()), +/** + * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term. + * + * This is partial implementation of https://schema.org/DefinedTerm. + * + * @see https://schema.org/DefinedTerm + */ +type DefinedTermInput = ThingInput & { + /** + * A [DefinedTermSet](https://schema.org/DefinedTermSet) that contains this term. + * + * @see https://schema.org/inDefinedTermSet + */ + readonly inDefinedTermSet?: string | readonly string[] | undefined; - ...entries - }); + /** + * A code that identifies this [DefinedTerm](https://schema.org/DefinedTerm) within a [DefinedTermSet](https://schema.org/DefinedTermSet). + * + * @see https://schema.org/termCode + */ + readonly termCode?: string | readonly string[] | undefined; +}; /** * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term. @@ -18,20 +33,31 @@ export const definedTerm = (entries?: TEntries | * * @see https://schema.org/DefinedTerm */ -export type DefinedTerm = Thing & { +type DefinedTermOutput = ThingOutput & { /** * A [DefinedTermSet](https://schema.org/DefinedTermSet) that contains this term. * * @see https://schema.org/inDefinedTermSet */ - inDefinedTermSet?: string | undefined; + readonly inDefinedTermSet?: readonly string[] | undefined; /** * A code that identifies this [DefinedTerm](https://schema.org/DefinedTerm) within a [DefinedTermSet](https://schema.org/DefinedTermSet). * * @see https://schema.org/termCode */ - termCode?: string | undefined; + readonly termCode?: readonly string[] | undefined; }; -export const parseDefinedTerm = (data: unknown): DefinedTerm => parse(definedTerm(), data); +const definedTermSchema: GenericSchema = intersect([ + thingSchema, + pipe( + looseObject({ + inDefinedTermSet: orgSchemaProperties(string()), + termCode: orgSchemaProperties(string()) + }), + readonly() + ) +]); + +export { definedTermSchema, type DefinedTermInput, type DefinedTermOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts new file mode 100644 index 0000000000..fd6fc5c599 --- /dev/null +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -0,0 +1,29 @@ +import { intersect, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import orgSchemaProperties from './private/orgSchemaProperties'; + +type PersonInput = ThingInput & { + readonly description?: string | readonly string[] | undefined; + readonly image?: string | readonly string[] | undefined; + readonly name?: string | readonly string[] | undefined; +}; + +type PersonOutput = ThingOutput & { + readonly description?: readonly string[] | undefined; + readonly image?: readonly string[] | undefined; + readonly name?: readonly string[] | undefined; +}; + +const personSchema: GenericSchema = intersect([ + thingSchema, + pipe( + looseObject({ + description: orgSchemaProperties(string()), + image: orgSchemaProperties(string()), + name: orgSchemaProperties(string()) + }), + readonly() + ) +]); + +export { personSchema, type PersonInput, type PersonOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index ddaa60b766..b967fb382d 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -1,14 +1,23 @@ -import { parse, string, type ObjectEntries } from 'valibot'; +import { intersect, looseObject, pipe, readonly, string } from 'valibot'; -import { thing, type Thing } from './Thing'; -import orgSchemaProperty from './private/orgSchemaProperty'; +import orgSchemaProperties from './private/orgSchemaProperties'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; -export const project = (entries?: TEntries | undefined) => - thing({ - slogan: orgSchemaProperty(string()), - - ...entries - }); +/** + * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. + * + * This is partial implementation of https://schema.org/Project. + * + * @see https://schema.org/Project + */ +type ProjectInput = ThingInput & { + /** + * A slogan or motto associated with the item. + * + * @see https://schema.org/slogan + */ + readonly slogan: string | readonly string[] | undefined; +}; /** * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. @@ -17,13 +26,35 @@ export const project = (entries?: TEntries | und * * @see https://schema.org/Project */ -export type Project = Thing & { +type ProjectOutput = ThingOutput & { /** * A slogan or motto associated with the item. * * @see https://schema.org/slogan */ - slogan?: string | undefined; + readonly slogan: readonly string[] | undefined; }; -export const parseProject = (data: unknown): Project => parse(project(), data); +/** + * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. + * + * This is partial implementation of https://schema.org/Project. + * + * @see https://schema.org/Project + */ +const projectSchema = intersect([ + thingSchema, + pipe( + looseObject({ + /** + * A slogan or motto associated with the item. + * + * @see https://schema.org/slogan + */ + slogan: orgSchemaProperties(string()) + }), + readonly() + ) +]); + +export { projectSchema, type ProjectInput, type ProjectOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts b/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts index d42a302c5f..a0fbdf8de7 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts @@ -1,9 +1,11 @@ -import { parseThing } from './Thing'; +import { describe, expect, test } from '@jest/globals'; +import { parse } from 'valibot'; +import { thingSchema } from './Thing'; describe('Thing', () => { test('should parse', () => { expect( - parseThing({ + parse(thingSchema, { '@type': 'Thing', name: 'John Doe' }) @@ -15,7 +17,7 @@ describe('Thing', () => { test('should parse unknown @type', () => { expect( - parseThing({ + parse(thingSchema, { '@type': 'Unknown', name: 'John Doe' }) @@ -30,7 +32,7 @@ describe('Thing', () => { // If unknown properties are removed, we will remove properties that are solely for CreativeWork. test('should not remove unknown properties', () => { expect( - parseThing({ + parse(thingSchema, { '@type': 'Thing', something: 1 }) @@ -42,7 +44,7 @@ describe('Thing', () => { test('should set invalid properties to undefined', () => { expect( - parseThing({ + parse(thingSchema, { '@type': 'Thing', name: 1 }) diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index 47f0ed518e..9b303df61f 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -1,10 +1,7 @@ -import { type EmptyObject } from 'type-fest'; -import { lazy, literal, looseObject, optional, parse, pipe, string, type ObjectEntries } from 'valibot'; +import { lazy, literal, looseObject, optional, pipe, readonly, string, type GenericSchema } from 'valibot'; -import { action, type Action } from './Action'; -import { creativeWork, type CreativeWork } from './CreativeWork'; import orgSchemaProperties from './private/orgSchemaProperties'; -import orgSchemaProperty from './private/orgSchemaProperty'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action'; /** * The most generic type of item. @@ -13,88 +10,154 @@ import orgSchemaProperty from './private/orgSchemaProperty'; * * @see https://schema.org/Thing */ -export type Thing = { - '@context'?: 'https://schema.org' | undefined; - '@id'?: string | undefined; - '@type': string; +type ThingInput = { + readonly '@context'?: 'https://schema.org' | undefined; + readonly '@id'?: string | undefined; + readonly '@type'?: string | undefined; /** * An additional type for the item, typically used for adding more specific types from external vocabularies in microdata syntax. This is a relationship between something and a class that the thing is in. Typically the value is a URI-identified RDF class, and in this case corresponds to the use of rdf:type in RDF. Text values can be used sparingly, for cases where useful information can be added without their being an appropriate schema to reference. In the case of text values, the class label should follow the schema.org [style guide](https://schema.org/docs/styleguide.html). * * @see https://schema.org/additionalType */ - additionalType?: string | undefined; + readonly additionalType?: string | readonly string[] | undefined; /** * An alias for the item. * * @see https://schema.org/alternateName */ - alternateName?: string | undefined; + readonly alternateName?: string | readonly string[] | undefined; /** * A description of the item. * * @see https://schema.org/description */ - description?: string | undefined; + readonly description?: string | readonly string[] | undefined; /** * The name of the item. * * @see https://schema.org/name */ - name?: string | undefined; + readonly name?: string | readonly string[] | undefined; /** * Indicates a potential Action, which describes an idealized action in which this thing would play an 'object' role. * * @see https://schema.org/potentialAction */ - potentialAction?: readonly Action[] | undefined; + readonly potentialAction?: ActionInput | readonly ActionInput[] | undefined; /** * URL of the item. * * @see https://schema.org/url */ - url?: string | undefined; + readonly url?: string | readonly string[] | undefined; /** * Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. * * @see https://schema.org/isPartOf */ - isPartOf?: CreativeWork | undefined; + readonly isPartOf?: ThingInput | readonly ThingInput[] | undefined; }; -const thingEntries = { - '@context': optional(pipe(string(), literal('https://schema.org'))), - '@id': optional(string()), - '@type': string(), - - additionalType: orgSchemaProperty(string()), - alternateName: orgSchemaProperty(string()), - description: orgSchemaProperty(string()), - isPartOf: orgSchemaProperty(lazy(() => creativeWork())), - name: orgSchemaProperty(string()), - potentialAction: orgSchemaProperties(lazy(() => action())), - url: orgSchemaProperty(string()) +/** + * The most generic type of item. + * + * This is partial implementation of https://schema.org/Thing. + * + * @see https://schema.org/Thing + */ +type ThingOutput = { + readonly '@context'?: 'https://schema.org' | undefined; + readonly '@id'?: string | undefined; + readonly '@type'?: string | undefined; + + /** + * An additional type for the item, typically used for adding more specific types from external vocabularies in microdata syntax. This is a relationship between something and a class that the thing is in. Typically the value is a URI-identified RDF class, and in this case corresponds to the use of rdf:type in RDF. Text values can be used sparingly, for cases where useful information can be added without their being an appropriate schema to reference. In the case of text values, the class label should follow the schema.org [style guide](https://schema.org/docs/styleguide.html). + * + * @see https://schema.org/additionalType + */ + readonly additionalType?: readonly string[] | undefined; + + /** + * An alias for the item. + * + * @see https://schema.org/alternateName + */ + readonly alternateName?: readonly string[] | undefined; + + /** + * A description of the item. + * + * @see https://schema.org/description + */ + readonly description?: readonly string[] | undefined; + + /** + * The name of the item. + * + * @see https://schema.org/name + */ + readonly name?: readonly string[] | undefined; + + /** + * Indicates a potential Action, which describes an idealized action in which this thing would play an 'object' role. + * + * @see https://schema.org/potentialAction + */ + readonly potentialAction?: readonly ActionOutput[] | undefined; + + /** + * URL of the item. + * + * @see https://schema.org/url + */ + readonly url?: readonly string[] | undefined; + + /** + * Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. + * + * @see https://schema.org/isPartOf + */ + readonly isPartOf?: readonly ThingOutput[] | undefined; }; -export const thing = (entries?: TEntries | undefined) => - // Forward compatibility is the reason why we use unknown() here and not adhere to JSON-LD which drop unknown fields. +/** + * The most generic type of item. + * + * This is partial implementation of https://schema.org/Thing. + * + * @see https://schema.org/Thing + */ +const thingSchema: GenericSchema = + // Forward compatibility is the reason why we use looseObject() here and not adhere to JSON-LD which drop unknown fields. // // Example: // - CreativeWork.editor must be type of Person (or any of its subtypes, Patient) - // - Without unknown(), when we parse the CreativeWork, we will drop Patient.diagnosis + // - Without looseObject(), when we parse the CreativeWork, we will drop Patient.diagnosis // - That means, CreativeWork.editor.diagnosis will be unset despite CreativeWork.editor is of type Patient // - // We can drop unknown() if there is a way to keep CreativeWork.editor.diagnosis. + // We can drop looseObject() if there is a way to keep CreativeWork.editor.diagnosis. // It is okay to drop future/unsupported properties. But not today/supported properties. - looseObject({ - ...thingEntries, - ...entries - }); + pipe( + looseObject({ + '@context': optional(pipe(literal('https://schema.org'))), + '@id': optional(string()), + '@type': string(), + additionalType: orgSchemaProperties(string()), + alternateName: orgSchemaProperties(string()), + description: orgSchemaProperties(string()), + isPartOf: orgSchemaProperties(lazy(() => thingSchema)), + name: orgSchemaProperties(string()), + potentialAction: orgSchemaProperties(lazy(() => actionSchema)), + url: orgSchemaProperties(string()) + }), + readonly() + ); -export const parseThing = (data: unknown): Thing => parse(thing(), data); +export { thingSchema, type ThingInput, type ThingOutput }; diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index 8ce5d9c322..90506e9c70 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -1,7 +1,7 @@ -import { parse, string, type ObjectEntries } from 'valibot'; +import { intersect, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; import orgSchemaProperty from './private/orgSchemaProperty'; -import { thing, type Thing } from './Thing'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** * A review created by an end-user (e.g. consumer, purchaser, attendee etc.), in contrast with [`CriticReview`](https://schema.org/CriticReview). @@ -10,18 +10,35 @@ import { thing, type Thing } from './Thing'; * * @see https://schema.org/UserReview */ -export type UserReview = Thing & { +type UserReviewInput = ThingInput & { /** * This Review or Rating is relevant to this part or facet of the itemReviewed. */ - reviewAspect?: string | undefined; + readonly reviewAspect?: string | readonly string[] | undefined; }; -export const userReview = (entries?: TEntries | undefined) => - thing({ - reviewAspect: orgSchemaProperty(string()), +/** + * A review created by an end-user (e.g. consumer, purchaser, attendee etc.), in contrast with [`CriticReview`](https://schema.org/CriticReview). + * + * This is partial implementation of https://schema.org/UserReview. + * + * @see https://schema.org/UserReview + */ +type UserReviewOutput = ThingOutput & { + /** + * This Review or Rating is relevant to this part or facet of the itemReviewed. + */ + readonly reviewAspect?: string | readonly string[] | undefined; +}; - ...entries - }); +const userReviewSchema: GenericSchema = intersect([ + thingSchema, + pipe( + looseObject({ + reviewAspect: orgSchemaProperty(string()) + }), + readonly() + ) +]); -export const parseUserReview = (data: unknown): UserReview => parse(userReview(), data); +export { userReviewSchema, type UserReviewInput, type UserReviewOutput }; diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index 481eb08e64..ba31f9be02 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,7 +1,7 @@ -import { parse, string, type ObjectEntries } from 'valibot'; +import { intersect, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; -import { action, type Action } from './Action'; -import orgSchemaProperty from './private/orgSchemaProperty'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action'; +import orgSchemaProperties from './private/orgSchemaProperties'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. @@ -12,20 +12,41 @@ import orgSchemaProperty from './private/orgSchemaProperty'; * * @see https://schema.org/Action */ -export type VoteAction = Action & { +type VoteActionInput = ActionInput & { /** * A sub property of object. The options subject to this action. Supersedes [option](https://schema.org/option). * * @see https://schema.org/VoteAction */ - actionOption?: string | undefined; + readonly actionOption?: string | readonly string[] | undefined; }; -export const voteAction = (entries?: TEntries | undefined) => - action({ - actionOption: orgSchemaProperty(string()), +/** + * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. + * + * See also [blog post](http://blog.schema.org/2014/04/announcing-schemaorg-actions.html) and [Actions overview document](https://schema.org/docs/actions.html). + * + * This is partial implementation of https://schema.org/Action. + * + * @see https://schema.org/Action + */ +type VoteActionOutput = ActionOutput & { + /** + * A sub property of object. The options subject to this action. Supersedes [option](https://schema.org/option). + * + * @see https://schema.org/VoteAction + */ + readonly actionOption?: readonly string[] | undefined; +}; - ...entries - }); +const voteActionSchema: GenericSchema = intersect([ + actionSchema, + pipe( + looseObject({ + actionOption: orgSchemaProperties(string()) + }), + readonly() + ) +]); -export const parseVoteAction = (data: unknown): VoteAction => parse(voteAction(), data); +export { voteActionSchema, type VoteActionInput, type VoteActionOutput }; diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts index 66d0e1f9d5..eb25caff33 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from '@jest/globals'; import { parse, string } from 'valibot'; import orgSchemaProperties from './orgSchemaProperties'; diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts index 2ed9d6ae50..4775340590 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts @@ -4,24 +4,31 @@ import { parse, pipe, transform, - type ArraySchema, type BaseSchema, - type UndefinedSchema + type Fallback, + type GenericSchema, + type InferInput, + type InferOutput } from 'valibot'; -import orgSchemaProperty from './orgSchemaProperty'; +type SingularToArraySchema> = GenericSchema< + InferInput | InferInput[] | undefined, + InferOutput[] | undefined +>; const singularToArray = >( schema: T -): ArraySchema | UndefinedSchema => - fallback( +): GenericSchema | InferInput[] | undefined, InferOutput[] | undefined> => + fallback, Fallback>>( pipe( array(schema), transform(value => value.filter(value => typeof value !== 'undefined')) ), - value => (value?.value ? [parse(schema, value?.value)] : undefined) + value => (value?.value ? [parse(schema, value?.value) as InferOutput] : undefined) ); -export default function orgSchemaProperties>(schema: T) { - return singularToArray(orgSchemaProperty(schema)); +export default function orgSchemaProperties>( + schema: T +): GenericSchema | readonly InferInput[] | undefined, readonly InferOutput[] | undefined> { + return singularToArray(schema); } diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.spec.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.spec.ts index a0eec9f423..8495ccf4ab 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.spec.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from '@jest/globals'; import { parse, string } from 'valibot'; import orgSchemaProperty from './orgSchemaProperty'; diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.ts index ef6e8f16c4..e3821a03ab 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.ts @@ -1,7 +1,23 @@ -import { array, fallback, optional, pipe, transform, union, type BaseSchema } from 'valibot'; +import { + array, + fallback, + optional, + pipe, + transform, + union, + type BaseSchema, + type Fallback, + type GenericSchema, + type InferOutput +} from 'valibot'; -const orgSchemaProperty = >(schema: T) => - fallback( +type ArrayToSingularSchema> = GenericSchema< + InferOutput | InferOutput[] | undefined, + InferOutput | undefined +>; + +const orgSchemaProperty = >(schema: T): ArrayToSingularSchema => + fallback, Fallback>>( optional( union([ pipe( diff --git a/packages/core/src/types/external/OrgSchema/types.ts b/packages/core/src/types/external/OrgSchema/types.ts new file mode 100644 index 0000000000..bd0574f652 --- /dev/null +++ b/packages/core/src/types/external/OrgSchema/types.ts @@ -0,0 +1,15 @@ +export type Inputize< + T extends { + [key in keyof T]?: T[key] extends ReadonlyArray | Array ? never : T[key]; + } +> = { + [key in keyof T]+?: key extends `@${string}` ? T[key] | undefined : T[key] | readonly T[key][] | undefined; +}; + +export type Outputize< + T extends { + [key in keyof T]?: T[key] extends ReadonlyArray | Array ? never : T[key]; + } +> = { + [key in keyof T]+?: key extends `@${string}` ? T[key] | undefined : readonly T[key][] | undefined; +}; diff --git a/packages/core/src/types/internal/GlobalScopeClock.ts b/packages/core/src/types/internal/GlobalScopeClock.ts index 97c4b64f7f..23b2a1733b 100644 --- a/packages/core/src/types/internal/GlobalScopeClock.ts +++ b/packages/core/src/types/internal/GlobalScopeClock.ts @@ -1,24 +1,24 @@ export type GlobalScopeClock = { // eslint-disable-next-line no-restricted-globals - cancelAnimationFrame?: typeof cancelAnimationFrame; + cancelAnimationFrame?: typeof cancelAnimationFrame | undefined; // eslint-disable-next-line no-restricted-globals - cancelIdleCallback?: typeof cancelIdleCallback; + cancelIdleCallback?: typeof cancelIdleCallback | undefined; // eslint-disable-next-line no-restricted-globals - clearImmediate?: typeof clearImmediate; + clearImmediate?: typeof clearImmediate | undefined; // eslint-disable-next-line no-restricted-globals - clearInterval: typeof clearInterval; + clearInterval?: typeof clearInterval | undefined; // eslint-disable-next-line no-restricted-globals - clearTimeout: typeof clearTimeout; + clearTimeout?: typeof clearTimeout | undefined; // eslint-disable-next-line no-restricted-globals Date: typeof Date; // eslint-disable-next-line no-restricted-globals - requestAnimationFrame?: typeof requestAnimationFrame; + requestAnimationFrame?: typeof requestAnimationFrame | undefined; // eslint-disable-next-line no-restricted-globals - requestIdleCallback?: typeof requestIdleCallback; + requestIdleCallback?: typeof requestIdleCallback | undefined; // eslint-disable-next-line no-restricted-globals - setImmediate?: typeof setImmediate; + setImmediate?: typeof setImmediate | undefined; // eslint-disable-next-line no-restricted-globals - setInterval: typeof setInterval; + setInterval?: typeof setInterval | undefined; // eslint-disable-next-line no-restricted-globals - setTimeout: typeof setTimeout; + setTimeout?: typeof setTimeout | undefined; }; diff --git a/packages/core/src/utils/getOrgSchemaMessage.ts b/packages/core/src/utils/getOrgSchemaMessage.ts index 69308575ee..431154f99c 100644 --- a/packages/core/src/utils/getOrgSchemaMessage.ts +++ b/packages/core/src/utils/getOrgSchemaMessage.ts @@ -1,21 +1,22 @@ +import { parse } from 'valibot'; +import { creativeWorkSchema, type CreativeWorkOutput } from '../types/external/OrgSchema/CreativeWork'; +import { thingSchema } from '../types/external/OrgSchema/Thing'; import { type WebChatActivity } from '../types/WebChatActivity'; -import { parseCreativeWork, type CreativeWork } from '../types/external/OrgSchema/CreativeWork'; -import { parseThing } from '../types/external/OrgSchema/Thing'; type EntityType = NonNullable[number]; -export default function getOrgSchemaMessage(graph: readonly EntityType[]): CreativeWork | undefined { +export default function getOrgSchemaMessage(graph: readonly EntityType[]): CreativeWorkOutput | undefined { const messageEntity = (graph || []).find(entity => { const isThing = entity.type?.startsWith('https://schema.org/'); if (isThing) { - const thing = parseThing(entity); + const thing = parse(thingSchema, entity); return thing['@id'] === ''; } }); - const message = messageEntity && parseCreativeWork(messageEntity); + const message = messageEntity && parse(creativeWorkSchema, messageEntity); - return message && parseCreativeWork(message); + return message && parse(creativeWorkSchema, message); } From 61722690bbe3a715e9163dab4db746a71c3ac903 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 11:24:10 +0000 Subject: [PATCH 009/108] Fix stream info coalesce --- packages/core/src/utils/getActivityLivestreamingMetadata.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core/src/utils/getActivityLivestreamingMetadata.ts b/packages/core/src/utils/getActivityLivestreamingMetadata.ts index 0a2e6cd918..30f211c2a6 100644 --- a/packages/core/src/utils/getActivityLivestreamingMetadata.ts +++ b/packages/core/src/utils/getActivityLivestreamingMetadata.ts @@ -63,7 +63,8 @@ function eitherChannelDataOrEntities< check(value => !!value) ) }), - transform(({ entities, ...value }) => ({ ...value, streamInfoEntity: entities })) + // This is quite hacky, we should not mutate the parse output to ease metadata extractions. + transform(({ entities, ...value }) => ({ ...value, streamInfoEntity: entities! })) ) ]); } From 33c1c7ce9efc482574d8108a2496591586473764 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 11:26:22 +0000 Subject: [PATCH 010/108] Fix types and add comment --- packages/core/src/types/external/Observable.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/core/src/types/external/Observable.ts b/packages/core/src/types/external/Observable.ts index da0649de4f..a03e70b44e 100644 --- a/packages/core/src/types/external/Observable.ts +++ b/packages/core/src/types/external/Observable.ts @@ -1,6 +1,9 @@ // This is a declaration file for a single ES feature. Could contains multiple classes definitions. /* eslint-disable max-classes-per-file */ +// TODO: Align with final proposal at https://wicg.github.io/observable/. +// For example, this signature missed `addTeardown`. + // Adopted from https://github.com/tc39/proposal-observable. /** Receives a completion notification */ @@ -39,7 +42,7 @@ declare class Subscription { */ declare class Observer { /** Receives the subscription object when `subscribe` is called */ - start(subscription: Subscription); + start(subscription: Subscription): void; /** Receives the next value in the sequence */ next: NextFunction; From 749986ffd516f50a5725e26a1d36c994eb6c3be1 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 11:29:58 +0000 Subject: [PATCH 011/108] Add types --- packages/api/src/defaultStyleOptions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/api/src/defaultStyleOptions.ts b/packages/api/src/defaultStyleOptions.ts index e9ea89c7f9..dba3e6275b 100644 --- a/packages/api/src/defaultStyleOptions.ts +++ b/packages/api/src/defaultStyleOptions.ts @@ -1,7 +1,7 @@ /* eslint no-magic-numbers: "off" */ import StyleOptions from './StyleOptions'; -function fontFamily(fonts) { +function fontFamily(fonts: readonly string[]): string { return fonts.map(font => `'${font}'`).join(', '); } From e70ead8b54b70d9b7e37bc685993ee5353c0c42e Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 11:47:01 +0000 Subject: [PATCH 012/108] Add undefined --- packages/api/src/StyleOptions.ts | 432 +++++++++++++++---------------- 1 file changed, 216 insertions(+), 216 deletions(-) diff --git a/packages/api/src/StyleOptions.ts b/packages/api/src/StyleOptions.ts index 2664030055..de89993994 100644 --- a/packages/api/src/StyleOptions.ts +++ b/packages/api/src/StyleOptions.ts @@ -6,37 +6,37 @@ type StyleOptions = { */ /** Web Chat component accent color */ - accent?: string; + accent?: string | undefined; /** * Transcript background color */ - backgroundColor?: string; + backgroundColor?: string | undefined; /** * Secondary component color */ - subtle?: string; + subtle?: string | undefined; /** * Default padding used in most visual components */ - paddingRegular?: number; + paddingRegular?: number | undefined; /** * Padding used for suggestedAction buttons */ - paddingWide?: number; + paddingWide?: number | undefined; /** * The duration to be used for transitions */ - transitionDuration?: string; + transitionDuration?: string | undefined; /** * The easing function to be used for transitions */ - transitionEasing?: string; + transitionEasing?: string | undefined; /** * Fonts @@ -46,28 +46,28 @@ type StyleOptions = { /** * Font size used for secondary components such as sendStatus */ - fontSizeSmall?: number | string; + fontSizeSmall?: number | string | undefined; /** * Font used for ErrorBox * comma-space separated string */ - monospaceFont?: string; + monospaceFont?: string | undefined; /** * Font used in most visual components * comma-space separated string */ - primaryFont?: string; + primaryFont?: string | undefined; - rootHeight?: number | string; + rootHeight?: number | string | undefined; - rootWidth?: number | string; + rootWidth?: number | string | undefined; /** * "z-index" for the root container of Web Chat. This will form a new stacking context so "z-index" used in children won't pollute. */ - rootZIndex?: number; + rootZIndex?: number | undefined; /** * Avatar styling @@ -76,46 +76,46 @@ type StyleOptions = { /** * Border radius used for both bot and user avatar */ - avatarBorderRadius?: number | string; + avatarBorderRadius?: number | string | undefined; /** * Height and width of avatar */ - avatarSize?: number; + avatarSize?: number | undefined; /** * Background color defaults to accent */ - botAvatarBackgroundColor?: string; + botAvatarBackgroundColor?: string | undefined; /** * URL string. Can be data URI or blob * botAvatarInitials must be set to empty string */ - botAvatarImage?: string; + botAvatarImage?: string | undefined; /** * Typically rendered as two letters, e.g. 'WC' * Empty string is required when setting botAvatarImage */ - botAvatarInitials?: string; + botAvatarInitials?: string | undefined; /** * Background color defaults to accent */ - userAvatarBackgroundColor?: string; + userAvatarBackgroundColor?: string | undefined; /** * URL string. Can be data URI or blob * userAvatarInitials must be set to empty string */ - userAvatarImage?: string; + userAvatarImage?: string | undefined; /** * Typically rendered as two letters, i.e. 'WC' * Empty string is required when setting userAvatarImage */ - userAvatarInitials?: string; + userAvatarInitials?: string | undefined; /** * Avatar grouping can be set at 3 different levels: @@ -123,23 +123,23 @@ type StyleOptions = { * Show avatar on activities sharing the same status ('status'; default) * Show avatar on every activity (true) */ - showAvatarInGroup?: true | 'sender' | 'status'; + showAvatarInGroup?: true | 'sender' | 'status' | undefined; /** * Bubble styling * 'Bubble' refers to the container of the activit(ies) from the bot and user. Below, non-'fromUser' props refer to styling for the bot activities. */ - bubbleBackground?: string; - bubbleBorderColor?: string; - bubbleBorderRadius?: number; - bubbleBorderStyle?: string; - bubbleBorderWidth?: number; - bubbleFromUserBackground?: string; - bubbleFromUserBorderColor?: string; - bubbleFromUserBorderRadius?: number; - bubbleFromUserBorderStyle?: string; - bubbleFromUserBorderWidth?: number; + bubbleBackground?: string | undefined; + bubbleBorderColor?: string | undefined; + bubbleBorderRadius?: number | undefined; + bubbleBorderStyle?: string | undefined; + bubbleBorderWidth?: number | undefined; + bubbleFromUserBackground?: string | undefined; + bubbleFromUserBorderColor?: string | undefined; + bubbleFromUserBorderRadius?: number | undefined; + bubbleFromUserBorderStyle?: string | undefined; + bubbleFromUserBorderWidth?: number | undefined; /** * Nub offset 'bottom' will render nub at the bottom @@ -147,14 +147,14 @@ type StyleOptions = { * "top" is equivalent to positive zero. * "bottom" is equivalent to negative zero. */ - bubbleFromUserNubOffset?: number | 'bottom' | 'top'; + bubbleFromUserNubOffset?: number | 'bottom' | 'top' | undefined; /** * Nub size 0 will render a sharp corner */ - bubbleFromUserNubSize?: number; + bubbleFromUserNubSize?: number | undefined; - bubbleFromUserTextColor?: string; + bubbleFromUserTextColor?: string | undefined; /** * Specifies the fixed height of the bubble for image, default to unset. @@ -191,7 +191,7 @@ type StyleOptions = { bubbleMessageMaxWidth?: number | undefined; bubbleMessageMinWidth?: number | undefined; - bubbleMinHeight?: number; + bubbleMinHeight?: number | undefined; /** * Nub offset ''bottom' will render nub at the bottom @@ -199,33 +199,33 @@ type StyleOptions = { * "top" is equivalent to positive zero. * "bottom" is equivalent to negative zero. */ - bubbleNubOffset?: number | 'bottom' | 'top'; + bubbleNubOffset?: number | 'bottom' | 'top' | undefined; /** * Nub size 0 will render a sharp corner */ - bubbleNubSize?: number; + bubbleNubSize?: number | undefined; - bubbleTextColor?: string; + bubbleTextColor?: string | undefined; - messageActivityWordBreak?: 'normal' | 'break-all' | 'break-word' | 'keep-all'; + messageActivityWordBreak?: 'normal' | 'break-all' | 'break-word' | 'keep-all' | undefined; /** * Connectivity UI styling */ - connectivityIconPadding?: number; - connectivityMarginLeftRight?: number; - connectivityMarginTopBottom?: number; - connectivityTextSize?: number | string; - failedConnectivity?: number | string; - slowConnectivity?: string; - notificationText?: string; + connectivityIconPadding?: number | undefined; + connectivityMarginLeftRight?: number | undefined; + connectivityMarginTopBottom?: number | undefined; + connectivityTextSize?: number | string | undefined; + failedConnectivity?: number | string | undefined; + slowConnectivity?: string | undefined; + notificationText?: string | undefined; /** * Slow connection status will render after x amount of time with no service response */ - slowConnectionAfter?: number; + slowConnectionAfter?: number | undefined; /** * Emoji styling @@ -234,19 +234,19 @@ type StyleOptions = { * key: emoticon * value: unicode emoji */ - emojiSet?: boolean | Record; + emojiSet?: boolean | Record | undefined; /** * Live region - Accessibility * New activities will be rendered in the non-visual live region and removed after a certain amount of time. Modify this property to change fade time. */ - internalLiveRegionFadeAfter?: number; + internalLiveRegionFadeAfter?: number | undefined; /** * Markdown styling * Parse markdown to ensure carriage return is respected */ - markdownRespectCRLF?: boolean; + markdownRespectCRLF?: boolean | undefined; /** * Render HTML inside Markdown. @@ -255,12 +255,12 @@ type StyleOptions = { * * New in 4.17: This option is enabled by default. */ - markdownRenderHTML?: boolean; + markdownRenderHTML?: boolean | undefined; /** * Assign new image for anchor links to indicate external */ - markdownExternalLinkIconImage?: string; + markdownExternalLinkIconImage?: string | undefined; /** * Scroll behavior styling @@ -272,36 +272,36 @@ type StyleOptions = { * @deprecated Since 4.14.0: To hide the scroll to end button, please set `scrollToEndButtonBehavior` to `false`. */ // TODO: [P4] Will be removed on or after 2023-06-02. - hideScrollToEndButton?: boolean; + hideScrollToEndButton?: boolean | undefined; /** * Snap to activity to 'snap-point' * If true, scrolling will pause after 1 activity is received. * Specifying a number will pause after X number of activities */ - autoScrollSnapOnActivity?: boolean | number; + autoScrollSnapOnActivity?: boolean | number | undefined; /** * Specify number of pixels to overscroll or underscroll after pause */ - autoScrollSnapOnActivityOffset?: number; + autoScrollSnapOnActivityOffset?: number | undefined; /** * If true, scrolling will pause after activities have filled the page. * Specifying a number (0 to 1) will pause after % of page is filled */ - autoScrollSnapOnPage?: boolean | number; + autoScrollSnapOnPage?: boolean | number | undefined; /** * Specify number of pixels to overscroll or underscroll after pause */ - autoScrollSnapOnPageOffset?: number; + autoScrollSnapOnPageOffset?: number | undefined; /** * Send box styling */ - hideSendBox?: boolean; + hideSendBox?: boolean | undefined; /** * Indicates if the upload file button should be hidden. @@ -310,7 +310,7 @@ type StyleOptions = { * * @deprecated deprecated since 4.18.0: obsolated by {@linkcode disableFileUpload}. This option will be removed on or after 2027-07-14. */ - hideUploadButton?: boolean; + hideUploadButton?: boolean | undefined; /** * (EXPERIMENTAL) `true`, if the telephone keypad button should be shown, otherwise, `false`. Defaults to `true`. @@ -319,152 +319,152 @@ type StyleOptions = { */ hideTelephoneKeypadButton?: boolean | undefined; - microphoneButtonColorOnDictate?: string; - sendBoxBackground?: string; + microphoneButtonColorOnDictate?: string | undefined; + sendBoxBackground?: string | undefined; /** * The comma-delimited file types that the upload button should accept. * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept * @example 'image/*,.pdf' */ - uploadAccept?: string; + uploadAccept?: string | undefined; /** * If true, the upload button will accept multiple files. * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#multiple */ - uploadMultiple?: boolean; + uploadMultiple?: boolean | undefined; /** * If set to `send` (default), attachment will be sent when the send button is clicked, or when the message is being sent. * * Otherwise, if set to `attach`, attachment will be sent immediately after file is selected. */ - sendAttachmentOn?: 'attach' | 'send'; + sendAttachmentOn?: 'attach' | 'send' | undefined; /** Send box button: Icon color, defaults to subtle */ - sendBoxButtonColor?: string; + sendBoxButtonColor?: string | undefined; /** * Send box button: Shade border radius * * @default 2 */ - sendBoxButtonShadeBorderRadius?: number; + sendBoxButtonShadeBorderRadius?: number | undefined; /** Send box button: Shade color */ - sendBoxButtonShadeColor?: string; + sendBoxButtonShadeColor?: string | undefined; /** * Send box button: Shade inset * * @default 2 */ - sendBoxButtonShadeInset?: number; + sendBoxButtonShadeInset?: number | undefined; /** Send box button (while `:active`): Icon color */ - sendBoxButtonColorOnActive?: string; + sendBoxButtonColorOnActive?: string | undefined; /** * Send box button (while `:active`): Shade color * * @default '#EDEBE9' */ - sendBoxButtonShadeColorOnActive?: string; + sendBoxButtonShadeColorOnActive?: string | undefined; /** * Send box button (while `:disabled`): Icon color * * @default '#A19F9D' */ - sendBoxButtonColorOnDisabled?: string; + sendBoxButtonColorOnDisabled?: string | undefined; /** * Send box button (while `:disabled`): Shade color * * @default '#F3F2F1' */ - sendBoxButtonShadeColorOnDisabled?: string; + sendBoxButtonShadeColorOnDisabled?: string | undefined; /** Send box button (while `:focus`): Icon color */ - sendBoxButtonColorOnFocus?: string; + sendBoxButtonColorOnFocus?: string | undefined; /** Send box button (while `:focus`): Shade color */ - sendBoxButtonShadeColorOnFocus?: string; + sendBoxButtonShadeColorOnFocus?: string | undefined; /** Send box button (while `:hover`): Icon color */ - sendBoxButtonColorOnHover?: string; + sendBoxButtonColorOnHover?: string | undefined; /** * Send box button (while `:hover`): Shade color * * @default '#F3F2F1' */ - sendBoxButtonShadeColorOnHover?: string; + sendBoxButtonShadeColorOnHover?: string | undefined; /** * Send box button (while `:focus-visible`): Keyboard focus indicator border color * * @default '#605E5C' */ - sendBoxButtonKeyboardFocusIndicatorBorderColor?: string; + sendBoxButtonKeyboardFocusIndicatorBorderColor?: string | undefined; /** * Send box button (while `:focus-visible`): Keyboard focus indicator border radius * * @default 0 */ - sendBoxButtonKeyboardFocusIndicatorBorderRadius?: number | string; + sendBoxButtonKeyboardFocusIndicatorBorderRadius?: number | string | undefined; /** * Send box button (while `:focus-visible`): Keyboard focus indicator border style * * @default 'solid' */ - sendBoxButtonKeyboardFocusIndicatorBorderStyle?: string; + sendBoxButtonKeyboardFocusIndicatorBorderStyle?: string | undefined; /** * Send box button (while` :focus-visible`): Keyboard focus indicator border width * * @default 4 */ - sendBoxButtonKeyboardFocusIndicatorBorderWidth?: number; + sendBoxButtonKeyboardFocusIndicatorBorderWidth?: number | undefined; /** * Send box button (while `:focus-visible`): Keyboard focus indicator inset * * @default 4 */ - sendBoxButtonKeyboardFocusIndicatorInset?: number; + sendBoxButtonKeyboardFocusIndicatorInset?: number | undefined; /** * Disabled text color defaults to subtle */ - sendBoxDisabledTextColor?: string; + sendBoxDisabledTextColor?: string | undefined; - sendBoxHeight?: number | string; - sendBoxMaxHeight?: number | string; - sendBoxTextColor?: string; - sendBoxBorderBottom?: number | string; - sendBoxBorderLeft?: number | string; - sendBoxBorderRight?: number | string; - sendBoxBorderTop?: number | string; - sendBoxPlaceholderColor?: string; - sendBoxTextWrap?: boolean; - sendBoxButtonAlignment?: 'bottom' | 'stretch' | 'top'; + sendBoxHeight?: number | string | undefined; + sendBoxMaxHeight?: number | string | undefined; + sendBoxTextColor?: string | undefined; + sendBoxBorderBottom?: number | string | undefined; + sendBoxBorderLeft?: number | string | undefined; + sendBoxBorderRight?: number | string | undefined; + sendBoxBorderTop?: number | string | undefined; + sendBoxPlaceholderColor?: string | undefined; + sendBoxTextWrap?: boolean | undefined; + sendBoxButtonAlignment?: 'bottom' | 'stretch' | 'top' | undefined; /** * Show spoken text */ - showSpokenText?: boolean; + showSpokenText?: boolean | undefined; /** * Spinner animation styling */ - spinnerAnimationBackgroundImage?: string; - spinnerAnimationHeight?: number | string; - spinnerAnimationWidth?: number | string; - spinnerAnimationPadding?: number | string; + spinnerAnimationBackgroundImage?: string | undefined; + spinnerAnimationHeight?: number | string | undefined; + spinnerAnimationWidth?: number | string | undefined; + spinnerAnimationPadding?: number | string | undefined; /** * Suggested Actions @@ -475,225 +475,225 @@ type StyleOptions = { * * @default 0 */ - suggestedActionBorderRadius?: number | string; + suggestedActionBorderRadius?: number | string | undefined; /** * Suggested action: Background * * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColor` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionBackground?: string; + suggestedActionBackground?: string | undefined; /** * Suggested action: Background color * * @default 'White' */ - suggestedActionBackgroundColor?: string; + suggestedActionBackgroundColor?: string | undefined; /** Suggested action: Border color, defaults to accent color */ - suggestedActionBorderColor?: string; + suggestedActionBorderColor?: string | undefined; /** * Suggested action: Border style * * @default 'solid' */ - suggestedActionBorderStyle?: string; + suggestedActionBorderStyle?: string | undefined; /** * Suggested action: Border width * * @default 2 */ - suggestedActionBorderWidth?: number; + suggestedActionBorderWidth?: number | undefined; /** Suggested action: Text color, defaults to accent color */ - suggestedActionTextColor?: string; + suggestedActionTextColor?: string | undefined; /** Suggested action (while `:disabled`): Background color, defaults to suggestedActionBackground */ - suggestedActionBackgroundColorOnDisabled?: string; + suggestedActionBackgroundColorOnDisabled?: string | undefined; /** * Suggested action (while `:disabled`): Border color * * @default '#E6E6E6' */ - suggestedActionBorderColorOnDisabled?: string; + suggestedActionBorderColorOnDisabled?: string | undefined; /** Suggested action (while `:disabled`): Border style */ - suggestedActionBorderStyleOnDisabled?: string; + suggestedActionBorderStyleOnDisabled?: string | undefined; /** Suggested action (while `:disabled`): Border width */ - suggestedActionBorderWidthOnDisabled?: number; + suggestedActionBorderWidthOnDisabled?: number | undefined; /** Suggested action (while `:disabled`): Foreground color, defaults to subtle color */ - suggestedActionTextColorOnDisabled?: string; + suggestedActionTextColorOnDisabled?: string | undefined; /** * Suggested action (while `:active`): Background color * * @default '#EDEBE9' */ - suggestedActionBackgroundColorOnActive?: string; + suggestedActionBackgroundColorOnActive?: string | undefined; /** Suggested action (while `:active`): Border color */ - suggestedActionBorderColorOnActive?: string; + suggestedActionBorderColorOnActive?: string | undefined; /** Suggested action (while `:active`): Border style */ - suggestedActionBorderStyleOnActive?: string; + suggestedActionBorderStyleOnActive?: string | undefined; /** Suggested action (while `:active`): Border width */ - suggestedActionBorderWidthOnActive?: number; + suggestedActionBorderWidthOnActive?: number | undefined; /** Suggested action (while `:active`): Text color */ - suggestedActionTextColorOnActive?: string; + suggestedActionTextColorOnActive?: string | undefined; /** Suggested action (while `:focus`): Background color */ - suggestedActionBackgroundColorOnFocus?: string; + suggestedActionBackgroundColorOnFocus?: string | undefined; /** Suggested action (while `:focus`): Border color */ - suggestedActionBorderColorOnFocus?: string; + suggestedActionBorderColorOnFocus?: string | undefined; /** Suggested action (while `:focus`): Border style */ - suggestedActionBorderStyleOnFocus?: string; + suggestedActionBorderStyleOnFocus?: string | undefined; /** Suggested action (while `:focus`): Border width */ - suggestedActionBorderWidthOnFocus?: number; + suggestedActionBorderWidthOnFocus?: number | undefined; /** Suggested action (while `:focus`): Text color */ - suggestedActionTextColorOnFocus?: string; + suggestedActionTextColorOnFocus?: string | undefined; /** * Suggested action (while `:hover`): Background color * * @default '#F3F2F1' */ - suggestedActionBackgroundColorOnHover?: string; + suggestedActionBackgroundColorOnHover?: string | undefined; /** Suggested action (while `:hover`): Border color */ - suggestedActionBorderColorOnHover?: string; + suggestedActionBorderColorOnHover?: string | undefined; /** Suggested action (while `:hover`): Border style */ - suggestedActionBorderStyleOnHover?: string; + suggestedActionBorderStyleOnHover?: string | undefined; /** Suggested action (while `:hover`): Border width */ - suggestedActionBorderWidthOnHover?: number; + suggestedActionBorderWidthOnHover?: number | undefined; /** Suggested action (while `:hover`): Text color */ - suggestedActionTextColorOnHover?: string; + suggestedActionTextColorOnHover?: string | undefined; /** * Suggested action (while `:disabled`): Background, defaults to suggestedActionBackground. * * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColorOnDisabled` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionDisabledBackground?: string; + suggestedActionDisabledBackground?: string | undefined; /** * Suggested action (while `:disabled`): Border color * * @deprecated Since 4.15.0: Please use `suggestedActionBorderColorOnDisabled` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionDisabledBorderColor?: string; + suggestedActionDisabledBorderColor?: string | undefined; /** * Suggested action (while `:disabled`): Border style * * @deprecated Since 4.15.0: Please use `suggestedActionBorderStyleOnDisabled` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionDisabledBorderStyle?: string; + suggestedActionDisabledBorderStyle?: string | undefined; /** * Suggested action (while `:disabled`): Border width * * @deprecated Since 4.15.0: Please use `suggestedActionBorderWidthOnDisabled` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionDisabledBorderWidth?: number; + suggestedActionDisabledBorderWidth?: number | undefined; /** * Suggested action (while `:disabled`): Foreground color, defaults to subtle color * * @deprecated Since 4.15.0: Please use `suggestedActionTextColorOnDisabled` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionDisabledTextColor?: string; + suggestedActionDisabledTextColor?: string | undefined; /** * Suggested action: Height * * @default 40 */ - suggestedActionHeight?: number | string; + suggestedActionHeight?: number | string | undefined; /** * Suggested action: Image height * * @default 20 */ - suggestedActionImageHeight?: number | string; + suggestedActionImageHeight?: number | string | undefined; /** * Suggested action: Layout type * * @default 'carousel' */ - suggestedActionLayout?: 'carousel' | 'flow' | 'stacked'; + suggestedActionLayout?: 'carousel' | 'flow' | 'stacked' | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator border color * * @default '#605E5C' */ - suggestedActionKeyboardFocusIndicatorBorderColor?: string; + suggestedActionKeyboardFocusIndicatorBorderColor?: string | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator border radius * * @default 0 */ - suggestedActionKeyboardFocusIndicatorBorderRadius?: number | string; + suggestedActionKeyboardFocusIndicatorBorderRadius?: number | string | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator border style * * @default 'solid' */ - suggestedActionKeyboardFocusIndicatorBorderStyle?: string; + suggestedActionKeyboardFocusIndicatorBorderStyle?: string | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator border width * * @default 1 */ - suggestedActionKeyboardFocusIndicatorBorderWidth?: number; + suggestedActionKeyboardFocusIndicatorBorderWidth?: number | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator inset * * @default 2 */ - suggestedActionKeyboardFocusIndicatorInset?: number; + suggestedActionKeyboardFocusIndicatorInset?: number | undefined; /** * Suggested action (while `:active`): background * * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColorOnActive` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionActiveBackground?: string; + suggestedActionActiveBackground?: string | undefined; /** * Suggested action (while `:focus`): background * * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColorOnFocus` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionFocusBackground?: string; + suggestedActionFocusBackground?: string | undefined; /** * Suggested action (while `:hover`): background * * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColorOnHover` instead. This option will be removed on or after 2023-09-16. */ - suggestedActionHoverBackground?: string; + suggestedActionHoverBackground?: string | undefined; /** * Suggested actions carousel layout @@ -702,23 +702,23 @@ type StyleOptions = { /** * Cursor when mouseover on flipper */ - suggestedActionsCarouselFlipperCursor?: string; + suggestedActionsCarouselFlipperCursor?: string | undefined; /** * Flipper bounding box size */ - suggestedActionsCarouselFlipperBoxWidth?: number; + suggestedActionsCarouselFlipperBoxWidth?: number | undefined; /** * Flipper button's visible size */ - suggestedActionsCarouselFlipperSize?: number; + suggestedActionsCarouselFlipperSize?: number | undefined; /** * Suggested actions flow layout * Default value is 'auto', */ - suggestedActionsFlowMaxHeight?: undefined; + suggestedActionsFlowMaxHeight?: number | undefined; /** * Suggested actions stacked layout @@ -727,31 +727,31 @@ type StyleOptions = { /** * Stacked height container's max height. Default value is 'auto' */ - suggestedActionsStackedHeight?: number | 'auto'; + suggestedActionsStackedHeight?: number | 'auto' | undefined; /** * Stacked overflow default value is 'auto' */ - suggestedActionsStackedOverflow?: 'auto' | 'hidden' | 'scroll' | 'visible'; + suggestedActionsStackedOverflow?: 'auto' | 'hidden' | 'scroll' | 'visible' | undefined; /** * Button max height default value is 100% if suggestedActionsStackedLayoutButtonTextWrap is true */ - suggestedActionsStackedLayoutButtonMaxHeight?: number | string; + suggestedActionsStackedLayoutButtonMaxHeight?: number | string | undefined; /** * Button Text Wrap, if set to true, will wrap long text in buttons in STACKED mode ONLY */ - suggestedActionsStackedLayoutButtonTextWrap?: boolean; + suggestedActionsStackedLayoutButtonTextWrap?: boolean | undefined; /** Suggested actions: Visual keyboard indicator color for the container. */ - suggestedActionsVisualKeyboardIndicatorColor?: string; + suggestedActionsVisualKeyboardIndicatorColor?: string | undefined; /** Suggested actions: Visual keyboard indicator style for the container. */ - suggestedActionsVisualKeyboardIndicatorStyle?: string; + suggestedActionsVisualKeyboardIndicatorStyle?: string | undefined; /** Suggested actions: Visual keyboard indicator width for the container. */ - suggestedActionsVisualKeyboardIndicatorWidth?: number; + suggestedActionsVisualKeyboardIndicatorWidth?: number | undefined; /** * Timestamp @@ -764,34 +764,34 @@ type StyleOptions = { * `false` - never group timestamps * `true` - group all timestamps */ - groupTimestamp?: boolean | number; + groupTimestamp?: boolean | number | undefined; - sendTimeout?: number | ((activity: WebChatActivity) => number); - sendTimeoutForAttachments?: number; + sendTimeout?: number | ((activity: WebChatActivity) => number) | undefined; + sendTimeoutForAttachments?: number | undefined; /** * Timestamp color default value is subtle */ - timestampColor?: string; + timestampColor?: string | undefined; - timestampFormat?: 'absolute' | 'relative'; + timestampFormat?: 'absolute' | 'relative' | undefined; /** * Transcript styling */ - transcriptTerminatorBackgroundColor?: string; - transcriptTerminatorBorderRadius?: number | string; - transcriptTerminatorColor?: string; - transcriptTerminatorFontSize?: number | string; + transcriptTerminatorBackgroundColor?: string | undefined; + transcriptTerminatorBorderRadius?: number | string | undefined; + transcriptTerminatorColor?: string | undefined; + transcriptTerminatorFontSize?: number | string | undefined; - transcriptActivityVisualKeyboardIndicatorColor?: string; - transcriptActivityVisualKeyboardIndicatorStyle?: string; - transcriptActivityVisualKeyboardIndicatorWidth?: number | string; + transcriptActivityVisualKeyboardIndicatorColor?: string | undefined; + transcriptActivityVisualKeyboardIndicatorStyle?: string | undefined; + transcriptActivityVisualKeyboardIndicatorWidth?: number | string | undefined; - transcriptVisualKeyboardIndicatorColor?: string; - transcriptVisualKeyboardIndicatorStyle?: string; - transcriptVisualKeyboardIndicatorWidth?: number | string; + transcriptVisualKeyboardIndicatorColor?: string | undefined; + transcriptVisualKeyboardIndicatorStyle?: string | undefined; + transcriptVisualKeyboardIndicatorWidth?: number | string | undefined; /** * Transcript overlay button @@ -805,10 +805,10 @@ type StyleOptions = { * - `"any"` will show when there are any offscreen messages * - `false` will always hide the button */ - scrollToEndButtonBehavior?: false | 'any' | 'unread'; + scrollToEndButtonBehavior?: false | 'any' | 'unread' | undefined; /** Font size of the new message button. */ - scrollToEndButtonFontSize?: number | string; + scrollToEndButtonFontSize?: number | string | undefined; /** * Font size of the new message button. @@ -816,24 +816,24 @@ type StyleOptions = { * @deprecated Since 4.14.0: Renamed to {@linkcode scrollToEndButtonFontSize}. */ // TODO: [P4] Will be removed on or after 2023-06-02. - newMessagesButtonFontSize?: number | string; + newMessagesButtonFontSize?: number | string | undefined; - transcriptOverlayButtonBackground?: string; - transcriptOverlayButtonBackgroundOnDisabled?: string; - transcriptOverlayButtonBackgroundOnFocus?: string; - transcriptOverlayButtonBackgroundOnHover?: string; - transcriptOverlayButtonColor?: string; - transcriptOverlayButtonColorOnDisabled?: string; + transcriptOverlayButtonBackground?: string | undefined; + transcriptOverlayButtonBackgroundOnDisabled?: string | undefined; + transcriptOverlayButtonBackgroundOnFocus?: string | undefined; + transcriptOverlayButtonBackgroundOnHover?: string | undefined; + transcriptOverlayButtonColor?: string | undefined; + transcriptOverlayButtonColorOnDisabled?: string | undefined; /** * Default value is transcriptOverlayButtonColor */ - transcriptOverlayButtonColorOnFocus?: string; + transcriptOverlayButtonColorOnFocus?: string | undefined; /** * Default value is transcriptOverlayButtonColor */ - transcriptOverlayButtonColorOnHover?: string; + transcriptOverlayButtonColorOnHover?: string | undefined; /** * Toast UI @@ -842,64 +842,64 @@ type StyleOptions = { /** * New debounce timeout value only affects new notifications. */ - notificationDebounceTimeout?: number; + notificationDebounceTimeout?: number | undefined; - hideToaster?: boolean; - toasterHeight?: number | string; - toasterMaxHeight?: number | string; - toasterSingularMaxHeight?: number | string; - toastFontSize?: number | string; - toastIconWidth?: number | string; - toastSeparatorColor?: string; - toastTextPadding?: number | string; + hideToaster?: boolean | undefined; + toasterHeight?: number | string | undefined; + toasterMaxHeight?: number | string | undefined; + toasterSingularMaxHeight?: number | string | undefined; + toastFontSize?: number | string | undefined; + toastIconWidth?: number | string | undefined; + toastSeparatorColor?: string | undefined; + toastTextPadding?: number | string | undefined; - toastErrorBackgroundColor?: string; - toastErrorColor?: string; - toastInfoBackgroundColor?: string; - toastInfoColor?: string; - toastSuccessBackgroundColor?: string; - toastSuccessColor?: string; - toastWarnBackgroundColor?: string; - toastWarnColor?: string; + toastErrorBackgroundColor?: string | undefined; + toastErrorColor?: string | undefined; + toastInfoBackgroundColor?: string | undefined; + toastInfoColor?: string | undefined; + toastSuccessBackgroundColor?: string | undefined; + toastSuccessColor?: string | undefined; + toastWarnBackgroundColor?: string | undefined; + toastWarnColor?: string | undefined; /** * Typing animation */ - typingAnimationBackgroundImage?: string; - typingAnimationDuration?: number; - typingAnimationHeight?: number | string; - typingAnimationWidth?: number | string; + typingAnimationBackgroundImage?: string | undefined; + typingAnimationDuration?: number | undefined; + typingAnimationHeight?: number | string | undefined; + typingAnimationWidth?: number | string | undefined; /** * Upload thumbnail */ - enableUploadThumbnail?: boolean; - uploadThumbnailContentType?: string; - uploadThumbnailHeight?: number; - uploadThumbnailQuality?: number; - uploadThumbnailWidth?: number; + enableUploadThumbnail?: boolean | undefined; + uploadThumbnailContentType?: string | undefined; + uploadThumbnailHeight?: number | undefined; + uploadThumbnailQuality?: number | undefined; + uploadThumbnailWidth?: number | undefined; /** * Video */ - videoHeight?: number | string; + videoHeight?: number | string | undefined; /** * Maximum message length in characters * * @default 2000 */ - maxMessageLength?: number; + maxMessageLength?: number | undefined; /** * The node to place Web Chat styles into. Needed when using as a Web Component. * * @default document.head */ - stylesRoot?: Node; + stylesRoot?: Node | undefined; /** * Border animation @@ -912,7 +912,7 @@ type StyleOptions = { * * New in 4.19.0. */ - borderAnimationColor1?: string; + borderAnimationColor1?: string | undefined; /** * Border animation 2nd color * @@ -920,7 +920,7 @@ type StyleOptions = { * * New in 4.19.0. */ - borderAnimationColor2?: string; + borderAnimationColor2?: string | undefined; /** * Border animation 3rd color * @@ -928,7 +928,7 @@ type StyleOptions = { * * New in 4.19.0. */ - borderAnimationColor3?: string; + borderAnimationColor3?: string | undefined; /** * Code block theme @@ -940,7 +940,7 @@ type StyleOptions = { * * New in 4.19.0. */ - codeBlockTheme?: 'github-light-default' | 'github-dark-default'; + codeBlockTheme?: 'github-light-default' | 'github-dark-default' | undefined; /** * (EXPERIMENTAL) Feedback buttons placement @@ -954,7 +954,7 @@ type StyleOptions = { * * New in 4.19.0. */ - feedbackActionsPlacement?: 'activity-actions' | 'activity-status'; + feedbackActionsPlacement?: 'activity-actions' | 'activity-status' | undefined; /** * Use continuous mode for speech recognition. Default to `false`. @@ -995,14 +995,14 @@ type StyleOptions = { * * @default 114 */ - sendBoxAttachmentBarMaxHeight?: number; + sendBoxAttachmentBarMaxHeight?: number | undefined; /** * Send box: maximum number of attachment item to preview as thumbnail before showing as list item. * * @default 3 */ - sendBoxAttachmentBarMaxThumbnail?: number; + sendBoxAttachmentBarMaxThumbnail?: number | undefined; /** * Indicates if file upload should be disabled. @@ -1011,7 +1011,7 @@ type StyleOptions = { * * New in 4.19.0. */ - disableFileUpload?: boolean; + disableFileUpload?: boolean | undefined; /** * Controls microphone button visibility in Fluent theme send box. * @@ -1020,7 +1020,7 @@ type StyleOptions = { * * @default 'auto' */ - showMicrophoneButton?: 'auto' | 'hide'; + showMicrophoneButton?: 'auto' | 'hide' | undefined; }; // StrictStyleOptions is only used internally in Web Chat and for simplifying our code: From 1619be4a77543747f6e164112a0c7a8e9f5913c7 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 18:31:41 +0000 Subject: [PATCH 013/108] Better styleOptions and remove deprecations --- packages/api/src/StyleOptions.ts | 595 ++++++++---------- .../api/src/decorator/DecoratorComposer.tsx | 10 +- packages/api/src/defaultStyleOptions.ts | 22 +- packages/api/src/hooks/Composer.tsx | 6 +- packages/api/src/index.ts | 2 +- packages/api/src/normalizeStyleOptions.ts | 142 +---- .../StyleOptions/StyleOptionsComposer.tsx | 2 +- packages/api/src/tsconfig.json | 3 +- 8 files changed, 304 insertions(+), 478 deletions(-) diff --git a/packages/api/src/StyleOptions.ts b/packages/api/src/StyleOptions.ts index de89993994..029ad8db68 100644 --- a/packages/api/src/StyleOptions.ts +++ b/packages/api/src/StyleOptions.ts @@ -1,42 +1,42 @@ import type { WebChatActivity } from 'botframework-webchat-core'; -type StyleOptions = { +type StrictStyleOptions = { /** * Basic styling */ /** Web Chat component accent color */ - accent?: string | undefined; + accent: string | undefined; /** * Transcript background color */ - backgroundColor?: string | undefined; + backgroundColor: string | undefined; /** * Secondary component color */ - subtle?: string | undefined; + subtle: string | undefined; /** * Default padding used in most visual components */ - paddingRegular?: number | undefined; + paddingRegular: number | undefined; /** * Padding used for suggestedAction buttons */ - paddingWide?: number | undefined; + paddingWide: number | undefined; /** * The duration to be used for transitions */ - transitionDuration?: string | undefined; + transitionDuration: string | undefined; /** * The easing function to be used for transitions */ - transitionEasing?: string | undefined; + transitionEasing: string | undefined; /** * Fonts @@ -46,28 +46,28 @@ type StyleOptions = { /** * Font size used for secondary components such as sendStatus */ - fontSizeSmall?: number | string | undefined; + fontSizeSmall: number | string | undefined; /** * Font used for ErrorBox * comma-space separated string */ - monospaceFont?: string | undefined; + monospaceFont: string | undefined; /** * Font used in most visual components * comma-space separated string */ - primaryFont?: string | undefined; + primaryFont: string | undefined; - rootHeight?: number | string | undefined; + rootHeight: number | string | undefined; - rootWidth?: number | string | undefined; + rootWidth: number | string | undefined; /** * "z-index" for the root container of Web Chat. This will form a new stacking context so "z-index" used in children won't pollute. */ - rootZIndex?: number | undefined; + rootZIndex: number | undefined; /** * Avatar styling @@ -76,46 +76,46 @@ type StyleOptions = { /** * Border radius used for both bot and user avatar */ - avatarBorderRadius?: number | string | undefined; + avatarBorderRadius: number | string | undefined; /** * Height and width of avatar */ - avatarSize?: number | undefined; + avatarSize: number | undefined; /** * Background color defaults to accent */ - botAvatarBackgroundColor?: string | undefined; + botAvatarBackgroundColor: string | undefined; /** * URL string. Can be data URI or blob * botAvatarInitials must be set to empty string */ - botAvatarImage?: string | undefined; + botAvatarImage: string | undefined; /** * Typically rendered as two letters, e.g. 'WC' * Empty string is required when setting botAvatarImage */ - botAvatarInitials?: string | undefined; + botAvatarInitials: string | undefined; /** * Background color defaults to accent */ - userAvatarBackgroundColor?: string | undefined; + userAvatarBackgroundColor: string | undefined; /** * URL string. Can be data URI or blob * userAvatarInitials must be set to empty string */ - userAvatarImage?: string | undefined; + userAvatarImage: string | undefined; /** * Typically rendered as two letters, i.e. 'WC' * Empty string is required when setting userAvatarImage */ - userAvatarInitials?: string | undefined; + userAvatarInitials: string | undefined; /** * Avatar grouping can be set at 3 different levels: @@ -123,23 +123,23 @@ type StyleOptions = { * Show avatar on activities sharing the same status ('status'; default) * Show avatar on every activity (true) */ - showAvatarInGroup?: true | 'sender' | 'status' | undefined; + showAvatarInGroup: true | 'sender' | 'status' | undefined; /** * Bubble styling * 'Bubble' refers to the container of the activit(ies) from the bot and user. Below, non-'fromUser' props refer to styling for the bot activities. */ - bubbleBackground?: string | undefined; - bubbleBorderColor?: string | undefined; - bubbleBorderRadius?: number | undefined; - bubbleBorderStyle?: string | undefined; - bubbleBorderWidth?: number | undefined; - bubbleFromUserBackground?: string | undefined; - bubbleFromUserBorderColor?: string | undefined; - bubbleFromUserBorderRadius?: number | undefined; - bubbleFromUserBorderStyle?: string | undefined; - bubbleFromUserBorderWidth?: number | undefined; + bubbleBackground: string | undefined; + bubbleBorderColor: string | undefined; + bubbleBorderRadius: number | undefined; + bubbleBorderStyle: string | undefined; + bubbleBorderWidth: number | undefined; + bubbleFromUserBackground: string | undefined; + bubbleFromUserBorderColor: string | undefined; + bubbleFromUserBorderRadius: number | undefined; + bubbleFromUserBorderStyle: string | undefined; + bubbleFromUserBorderWidth: number | undefined; /** * Nub offset 'bottom' will render nub at the bottom @@ -147,21 +147,14 @@ type StyleOptions = { * "top" is equivalent to positive zero. * "bottom" is equivalent to negative zero. */ - bubbleFromUserNubOffset?: number | 'bottom' | 'top' | undefined; + bubbleFromUserNubOffset: number | undefined; /** * Nub size 0 will render a sharp corner */ - bubbleFromUserNubSize?: number | undefined; - - bubbleFromUserTextColor?: string | undefined; + bubbleFromUserNubSize: number | undefined; - /** - * Specifies the fixed height of the bubble for image, default to unset. - * - * @deprecated Use `bubbleImageMaxHeight` and `bubbleImageMinHeight` instead. To mimick behavior before deprecation, set both options to 240px. - */ - bubbleImageHeight?: number | undefined; + bubbleFromUserTextColor: string | undefined; /** * Specifies the maximum height of the bubble for image, default to 240px. @@ -170,7 +163,7 @@ type StyleOptions = { * * New in 4.18.0. */ - bubbleImageMaxHeight?: number | undefined; + bubbleImageMaxHeight: number | undefined; /** * Specifies the minimum height of the bubble for image, default to 240px. @@ -179,19 +172,14 @@ type StyleOptions = { * * New in 4.18.0. */ - bubbleImageMinHeight?: number | undefined; + bubbleImageMinHeight: number | undefined; - /* @deprecated Please use `bubbleAttachmentMaxWidth` and `bubbleMessageMaxWidth` instead. */ - bubbleMaxWidth?: number | undefined; - /* @deprecated Please use `bubbleAttachmentMaxWidth` and `bubbleMessageMaxWidth` instead. */ - bubbleMinWidth?: number | undefined; + bubbleAttachmentMaxWidth: number | undefined; + bubbleAttachmentMinWidth: number | undefined; + bubbleMessageMaxWidth: number | undefined; + bubbleMessageMinWidth: number | undefined; - bubbleAttachmentMaxWidth?: number | undefined; - bubbleAttachmentMinWidth?: number | undefined; - bubbleMessageMaxWidth?: number | undefined; - bubbleMessageMinWidth?: number | undefined; - - bubbleMinHeight?: number | undefined; + bubbleMinHeight: number | undefined; /** * Nub offset ''bottom' will render nub at the bottom @@ -199,33 +187,33 @@ type StyleOptions = { * "top" is equivalent to positive zero. * "bottom" is equivalent to negative zero. */ - bubbleNubOffset?: number | 'bottom' | 'top' | undefined; + bubbleNubOffset: number | undefined; /** * Nub size 0 will render a sharp corner */ - bubbleNubSize?: number | undefined; + bubbleNubSize: number | undefined; - bubbleTextColor?: string | undefined; + bubbleTextColor: string | undefined; - messageActivityWordBreak?: 'normal' | 'break-all' | 'break-word' | 'keep-all' | undefined; + messageActivityWordBreak: 'normal' | 'break-all' | 'break-word' | 'keep-all' | undefined; /** * Connectivity UI styling */ - connectivityIconPadding?: number | undefined; - connectivityMarginLeftRight?: number | undefined; - connectivityMarginTopBottom?: number | undefined; - connectivityTextSize?: number | string | undefined; - failedConnectivity?: number | string | undefined; - slowConnectivity?: string | undefined; - notificationText?: string | undefined; + connectivityIconPadding: number | undefined; + connectivityMarginLeftRight: number | undefined; + connectivityMarginTopBottom: number | undefined; + connectivityTextSize: number | string | undefined; + failedConnectivity: number | string | undefined; + slowConnectivity: string | undefined; + notificationText: string | undefined; /** * Slow connection status will render after x amount of time with no service response */ - slowConnectionAfter?: number | undefined; + slowConnectionAfter: number | undefined; /** * Emoji styling @@ -234,19 +222,19 @@ type StyleOptions = { * key: emoticon * value: unicode emoji */ - emojiSet?: boolean | Record | undefined; + emojiSet: false | Record | undefined; /** * Live region - Accessibility * New activities will be rendered in the non-visual live region and removed after a certain amount of time. Modify this property to change fade time. */ - internalLiveRegionFadeAfter?: number | undefined; + internalLiveRegionFadeAfter: number | undefined; /** * Markdown styling * Parse markdown to ensure carriage return is respected */ - markdownRespectCRLF?: boolean | undefined; + markdownRespectCRLF: boolean | undefined; /** * Render HTML inside Markdown. @@ -255,216 +243,199 @@ type StyleOptions = { * * New in 4.17: This option is enabled by default. */ - markdownRenderHTML?: boolean | undefined; + markdownRenderHTML: boolean | undefined; /** * Assign new image for anchor links to indicate external */ - markdownExternalLinkIconImage?: string | undefined; + markdownExternalLinkIconImage: string | undefined; /** * Scroll behavior styling */ - /** - * Prevent scroll to end button from rendering - * - * @deprecated Since 4.14.0: To hide the scroll to end button, please set `scrollToEndButtonBehavior` to `false`. - */ - // TODO: [P4] Will be removed on or after 2023-06-02. - hideScrollToEndButton?: boolean | undefined; - /** * Snap to activity to 'snap-point' * If true, scrolling will pause after 1 activity is received. * Specifying a number will pause after X number of activities */ - autoScrollSnapOnActivity?: boolean | number | undefined; + autoScrollSnapOnActivity: boolean | number | undefined; /** * Specify number of pixels to overscroll or underscroll after pause */ - autoScrollSnapOnActivityOffset?: number | undefined; + autoScrollSnapOnActivityOffset: number | undefined; /** * If true, scrolling will pause after activities have filled the page. * Specifying a number (0 to 1) will pause after % of page is filled */ - autoScrollSnapOnPage?: boolean | number | undefined; + autoScrollSnapOnPage: boolean | number | undefined; /** * Specify number of pixels to overscroll or underscroll after pause */ - autoScrollSnapOnPageOffset?: number | undefined; + autoScrollSnapOnPageOffset: number | undefined; /** * Send box styling */ - hideSendBox?: boolean | undefined; - - /** - * Indicates if the upload file button should be hidden. - * - * @default false - * - * @deprecated deprecated since 4.18.0: obsolated by {@linkcode disableFileUpload}. This option will be removed on or after 2027-07-14. - */ - hideUploadButton?: boolean | undefined; + hideSendBox: boolean | undefined; /** * (EXPERIMENTAL) `true`, if the telephone keypad button should be shown, otherwise, `false`. Defaults to `true`. * * @deprecated This is an experimental style options and should not be used without understanding its risk. */ - hideTelephoneKeypadButton?: boolean | undefined; + hideTelephoneKeypadButton: boolean | undefined; - microphoneButtonColorOnDictate?: string | undefined; - sendBoxBackground?: string | undefined; + microphoneButtonColorOnDictate: string | undefined; + sendBoxBackground: string | undefined; /** * The comma-delimited file types that the upload button should accept. * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept * @example 'image/*,.pdf' */ - uploadAccept?: string | undefined; + uploadAccept: string | undefined; /** * If true, the upload button will accept multiple files. * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#multiple */ - uploadMultiple?: boolean | undefined; + uploadMultiple: boolean | undefined; /** * If set to `send` (default), attachment will be sent when the send button is clicked, or when the message is being sent. * * Otherwise, if set to `attach`, attachment will be sent immediately after file is selected. */ - sendAttachmentOn?: 'attach' | 'send' | undefined; + sendAttachmentOn: 'attach' | 'send' | undefined; /** Send box button: Icon color, defaults to subtle */ - sendBoxButtonColor?: string | undefined; + sendBoxButtonColor: string | undefined; /** * Send box button: Shade border radius * * @default 2 */ - sendBoxButtonShadeBorderRadius?: number | undefined; + sendBoxButtonShadeBorderRadius: number | undefined; /** Send box button: Shade color */ - sendBoxButtonShadeColor?: string | undefined; + sendBoxButtonShadeColor: string | undefined; /** * Send box button: Shade inset * * @default 2 */ - sendBoxButtonShadeInset?: number | undefined; + sendBoxButtonShadeInset: number | undefined; /** Send box button (while `:active`): Icon color */ - sendBoxButtonColorOnActive?: string | undefined; + sendBoxButtonColorOnActive: string | undefined; /** * Send box button (while `:active`): Shade color * * @default '#EDEBE9' */ - sendBoxButtonShadeColorOnActive?: string | undefined; + sendBoxButtonShadeColorOnActive: string | undefined; /** * Send box button (while `:disabled`): Icon color * * @default '#A19F9D' */ - sendBoxButtonColorOnDisabled?: string | undefined; + sendBoxButtonColorOnDisabled: string | undefined; /** * Send box button (while `:disabled`): Shade color * * @default '#F3F2F1' */ - sendBoxButtonShadeColorOnDisabled?: string | undefined; + sendBoxButtonShadeColorOnDisabled: string | undefined; /** Send box button (while `:focus`): Icon color */ - sendBoxButtonColorOnFocus?: string | undefined; + sendBoxButtonColorOnFocus: string | undefined; /** Send box button (while `:focus`): Shade color */ - sendBoxButtonShadeColorOnFocus?: string | undefined; + sendBoxButtonShadeColorOnFocus: string | undefined; /** Send box button (while `:hover`): Icon color */ - sendBoxButtonColorOnHover?: string | undefined; + sendBoxButtonColorOnHover: string | undefined; /** * Send box button (while `:hover`): Shade color * * @default '#F3F2F1' */ - sendBoxButtonShadeColorOnHover?: string | undefined; + sendBoxButtonShadeColorOnHover: string | undefined; /** * Send box button (while `:focus-visible`): Keyboard focus indicator border color * * @default '#605E5C' */ - sendBoxButtonKeyboardFocusIndicatorBorderColor?: string | undefined; + sendBoxButtonKeyboardFocusIndicatorBorderColor: string | undefined; /** * Send box button (while `:focus-visible`): Keyboard focus indicator border radius * * @default 0 */ - sendBoxButtonKeyboardFocusIndicatorBorderRadius?: number | string | undefined; + sendBoxButtonKeyboardFocusIndicatorBorderRadius: number | string | undefined; /** * Send box button (while `:focus-visible`): Keyboard focus indicator border style * * @default 'solid' */ - sendBoxButtonKeyboardFocusIndicatorBorderStyle?: string | undefined; + sendBoxButtonKeyboardFocusIndicatorBorderStyle: string | undefined; /** * Send box button (while` :focus-visible`): Keyboard focus indicator border width * * @default 4 */ - sendBoxButtonKeyboardFocusIndicatorBorderWidth?: number | undefined; + sendBoxButtonKeyboardFocusIndicatorBorderWidth: number | undefined; /** * Send box button (while `:focus-visible`): Keyboard focus indicator inset * * @default 4 */ - sendBoxButtonKeyboardFocusIndicatorInset?: number | undefined; + sendBoxButtonKeyboardFocusIndicatorInset: number | undefined; /** * Disabled text color defaults to subtle */ - sendBoxDisabledTextColor?: string | undefined; + sendBoxDisabledTextColor: string | undefined; - sendBoxHeight?: number | string | undefined; - sendBoxMaxHeight?: number | string | undefined; - sendBoxTextColor?: string | undefined; - sendBoxBorderBottom?: number | string | undefined; - sendBoxBorderLeft?: number | string | undefined; - sendBoxBorderRight?: number | string | undefined; - sendBoxBorderTop?: number | string | undefined; - sendBoxPlaceholderColor?: string | undefined; - sendBoxTextWrap?: boolean | undefined; - sendBoxButtonAlignment?: 'bottom' | 'stretch' | 'top' | undefined; + sendBoxHeight: number | string | undefined; + sendBoxMaxHeight: number | string | undefined; + sendBoxTextColor: string | undefined; + sendBoxBorderBottom: number | string | undefined; + sendBoxBorderLeft: number | string | undefined; + sendBoxBorderRight: number | string | undefined; + sendBoxBorderTop: number | string | undefined; + sendBoxPlaceholderColor: string | undefined; + sendBoxTextWrap: boolean | undefined; + sendBoxButtonAlignment: 'bottom' | 'stretch' | 'top' | undefined; /** * Show spoken text */ - showSpokenText?: boolean | undefined; + showSpokenText: boolean | undefined; /** * Spinner animation styling */ - spinnerAnimationBackgroundImage?: string | undefined; - spinnerAnimationHeight?: number | string | undefined; - spinnerAnimationWidth?: number | string | undefined; - spinnerAnimationPadding?: number | string | undefined; + spinnerAnimationBackgroundImage: string | undefined; + spinnerAnimationHeight: number | string | undefined; + spinnerAnimationWidth: number | string | undefined; + spinnerAnimationPadding: number | string | undefined; /** * Suggested Actions @@ -475,225 +446,162 @@ type StyleOptions = { * * @default 0 */ - suggestedActionBorderRadius?: number | string | undefined; - - /** - * Suggested action: Background - * - * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColor` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionBackground?: string | undefined; + suggestedActionBorderRadius: number | string | undefined; /** * Suggested action: Background color * * @default 'White' */ - suggestedActionBackgroundColor?: string | undefined; + suggestedActionBackgroundColor: string | undefined; /** Suggested action: Border color, defaults to accent color */ - suggestedActionBorderColor?: string | undefined; + suggestedActionBorderColor: string | undefined; /** * Suggested action: Border style * * @default 'solid' */ - suggestedActionBorderStyle?: string | undefined; + suggestedActionBorderStyle: string | undefined; /** * Suggested action: Border width * * @default 2 */ - suggestedActionBorderWidth?: number | undefined; + suggestedActionBorderWidth: number | undefined; /** Suggested action: Text color, defaults to accent color */ - suggestedActionTextColor?: string | undefined; + suggestedActionTextColor: string | undefined; /** Suggested action (while `:disabled`): Background color, defaults to suggestedActionBackground */ - suggestedActionBackgroundColorOnDisabled?: string | undefined; + suggestedActionBackgroundColorOnDisabled: string | undefined; /** * Suggested action (while `:disabled`): Border color * * @default '#E6E6E6' */ - suggestedActionBorderColorOnDisabled?: string | undefined; + suggestedActionBorderColorOnDisabled: string | undefined; /** Suggested action (while `:disabled`): Border style */ - suggestedActionBorderStyleOnDisabled?: string | undefined; + suggestedActionBorderStyleOnDisabled: string | undefined; /** Suggested action (while `:disabled`): Border width */ - suggestedActionBorderWidthOnDisabled?: number | undefined; + suggestedActionBorderWidthOnDisabled: number | undefined; /** Suggested action (while `:disabled`): Foreground color, defaults to subtle color */ - suggestedActionTextColorOnDisabled?: string | undefined; + suggestedActionTextColorOnDisabled: string | undefined; /** * Suggested action (while `:active`): Background color * * @default '#EDEBE9' */ - suggestedActionBackgroundColorOnActive?: string | undefined; + suggestedActionBackgroundColorOnActive: string | undefined; /** Suggested action (while `:active`): Border color */ - suggestedActionBorderColorOnActive?: string | undefined; + suggestedActionBorderColorOnActive: string | undefined; /** Suggested action (while `:active`): Border style */ - suggestedActionBorderStyleOnActive?: string | undefined; + suggestedActionBorderStyleOnActive: string | undefined; /** Suggested action (while `:active`): Border width */ - suggestedActionBorderWidthOnActive?: number | undefined; + suggestedActionBorderWidthOnActive: number | undefined; /** Suggested action (while `:active`): Text color */ - suggestedActionTextColorOnActive?: string | undefined; + suggestedActionTextColorOnActive: string | undefined; /** Suggested action (while `:focus`): Background color */ - suggestedActionBackgroundColorOnFocus?: string | undefined; + suggestedActionBackgroundColorOnFocus: string | undefined; /** Suggested action (while `:focus`): Border color */ - suggestedActionBorderColorOnFocus?: string | undefined; + suggestedActionBorderColorOnFocus: string | undefined; /** Suggested action (while `:focus`): Border style */ - suggestedActionBorderStyleOnFocus?: string | undefined; + suggestedActionBorderStyleOnFocus: string | undefined; /** Suggested action (while `:focus`): Border width */ - suggestedActionBorderWidthOnFocus?: number | undefined; + suggestedActionBorderWidthOnFocus: number | undefined; /** Suggested action (while `:focus`): Text color */ - suggestedActionTextColorOnFocus?: string | undefined; + suggestedActionTextColorOnFocus: string | undefined; /** * Suggested action (while `:hover`): Background color * * @default '#F3F2F1' */ - suggestedActionBackgroundColorOnHover?: string | undefined; + suggestedActionBackgroundColorOnHover: string | undefined; /** Suggested action (while `:hover`): Border color */ - suggestedActionBorderColorOnHover?: string | undefined; + suggestedActionBorderColorOnHover: string | undefined; /** Suggested action (while `:hover`): Border style */ - suggestedActionBorderStyleOnHover?: string | undefined; + suggestedActionBorderStyleOnHover: string | undefined; /** Suggested action (while `:hover`): Border width */ - suggestedActionBorderWidthOnHover?: number | undefined; + suggestedActionBorderWidthOnHover: number | undefined; /** Suggested action (while `:hover`): Text color */ - suggestedActionTextColorOnHover?: string | undefined; - - /** - * Suggested action (while `:disabled`): Background, defaults to suggestedActionBackground. - * - * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColorOnDisabled` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionDisabledBackground?: string | undefined; - - /** - * Suggested action (while `:disabled`): Border color - * - * @deprecated Since 4.15.0: Please use `suggestedActionBorderColorOnDisabled` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionDisabledBorderColor?: string | undefined; - - /** - * Suggested action (while `:disabled`): Border style - * - * @deprecated Since 4.15.0: Please use `suggestedActionBorderStyleOnDisabled` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionDisabledBorderStyle?: string | undefined; - - /** - * Suggested action (while `:disabled`): Border width - * - * @deprecated Since 4.15.0: Please use `suggestedActionBorderWidthOnDisabled` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionDisabledBorderWidth?: number | undefined; - - /** - * Suggested action (while `:disabled`): Foreground color, defaults to subtle color - * - * @deprecated Since 4.15.0: Please use `suggestedActionTextColorOnDisabled` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionDisabledTextColor?: string | undefined; + suggestedActionTextColorOnHover: string | undefined; /** * Suggested action: Height * * @default 40 */ - suggestedActionHeight?: number | string | undefined; + suggestedActionHeight: number | string | undefined; /** * Suggested action: Image height * * @default 20 */ - suggestedActionImageHeight?: number | string | undefined; + suggestedActionImageHeight: number | string | undefined; /** * Suggested action: Layout type * * @default 'carousel' */ - suggestedActionLayout?: 'carousel' | 'flow' | 'stacked' | undefined; + suggestedActionLayout: 'carousel' | 'flow' | 'stacked' | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator border color * * @default '#605E5C' */ - suggestedActionKeyboardFocusIndicatorBorderColor?: string | undefined; + suggestedActionKeyboardFocusIndicatorBorderColor: string | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator border radius * * @default 0 */ - suggestedActionKeyboardFocusIndicatorBorderRadius?: number | string | undefined; + suggestedActionKeyboardFocusIndicatorBorderRadius: number | string | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator border style * * @default 'solid' */ - suggestedActionKeyboardFocusIndicatorBorderStyle?: string | undefined; + suggestedActionKeyboardFocusIndicatorBorderStyle: string | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator border width * * @default 1 */ - suggestedActionKeyboardFocusIndicatorBorderWidth?: number | undefined; + suggestedActionKeyboardFocusIndicatorBorderWidth: number | undefined; /** * Suggested action (while `:focus-visible`): Keyboard focus indicator inset * * @default 2 */ - suggestedActionKeyboardFocusIndicatorInset?: number | undefined; - - /** - * Suggested action (while `:active`): background - * - * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColorOnActive` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionActiveBackground?: string | undefined; - - /** - * Suggested action (while `:focus`): background - * - * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColorOnFocus` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionFocusBackground?: string | undefined; - - /** - * Suggested action (while `:hover`): background - * - * @deprecated Since 4.15.0: Please use `suggestedActionBackgroundColorOnHover` instead. This option will be removed on or after 2023-09-16. - */ - suggestedActionHoverBackground?: string | undefined; + suggestedActionKeyboardFocusIndicatorInset: number | undefined; /** * Suggested actions carousel layout @@ -702,23 +610,23 @@ type StyleOptions = { /** * Cursor when mouseover on flipper */ - suggestedActionsCarouselFlipperCursor?: string | undefined; + suggestedActionsCarouselFlipperCursor: string | undefined; /** * Flipper bounding box size */ - suggestedActionsCarouselFlipperBoxWidth?: number | undefined; + suggestedActionsCarouselFlipperBoxWidth: number | undefined; /** * Flipper button's visible size */ - suggestedActionsCarouselFlipperSize?: number | undefined; + suggestedActionsCarouselFlipperSize: number | undefined; /** * Suggested actions flow layout * Default value is 'auto', */ - suggestedActionsFlowMaxHeight?: number | undefined; + suggestedActionsFlowMaxHeight: number | undefined; /** * Suggested actions stacked layout @@ -727,31 +635,31 @@ type StyleOptions = { /** * Stacked height container's max height. Default value is 'auto' */ - suggestedActionsStackedHeight?: number | 'auto' | undefined; + suggestedActionsStackedHeight: number | 'auto' | undefined; /** * Stacked overflow default value is 'auto' */ - suggestedActionsStackedOverflow?: 'auto' | 'hidden' | 'scroll' | 'visible' | undefined; + suggestedActionsStackedOverflow: 'auto' | 'hidden' | 'scroll' | 'visible' | undefined; /** * Button max height default value is 100% if suggestedActionsStackedLayoutButtonTextWrap is true */ - suggestedActionsStackedLayoutButtonMaxHeight?: number | string | undefined; + suggestedActionsStackedLayoutButtonMaxHeight: number | string | undefined; /** * Button Text Wrap, if set to true, will wrap long text in buttons in STACKED mode ONLY */ - suggestedActionsStackedLayoutButtonTextWrap?: boolean | undefined; + suggestedActionsStackedLayoutButtonTextWrap: boolean | undefined; /** Suggested actions: Visual keyboard indicator color for the container. */ - suggestedActionsVisualKeyboardIndicatorColor?: string | undefined; + suggestedActionsVisualKeyboardIndicatorColor: string | undefined; /** Suggested actions: Visual keyboard indicator style for the container. */ - suggestedActionsVisualKeyboardIndicatorStyle?: string | undefined; + suggestedActionsVisualKeyboardIndicatorStyle: string | undefined; /** Suggested actions: Visual keyboard indicator width for the container. */ - suggestedActionsVisualKeyboardIndicatorWidth?: number | undefined; + suggestedActionsVisualKeyboardIndicatorWidth: number | undefined; /** * Timestamp @@ -764,34 +672,34 @@ type StyleOptions = { * `false` - never group timestamps * `true` - group all timestamps */ - groupTimestamp?: boolean | number | undefined; + groupTimestamp: boolean | number | undefined; - sendTimeout?: number | ((activity: WebChatActivity) => number) | undefined; - sendTimeoutForAttachments?: number | undefined; + sendTimeout: number | ((activity: WebChatActivity) => number) | undefined; + sendTimeoutForAttachments: number | undefined; /** * Timestamp color default value is subtle */ - timestampColor?: string | undefined; + timestampColor: string | undefined; - timestampFormat?: 'absolute' | 'relative' | undefined; + timestampFormat: 'absolute' | 'relative' | undefined; /** * Transcript styling */ - transcriptTerminatorBackgroundColor?: string | undefined; - transcriptTerminatorBorderRadius?: number | string | undefined; - transcriptTerminatorColor?: string | undefined; - transcriptTerminatorFontSize?: number | string | undefined; + transcriptTerminatorBackgroundColor: string | undefined; + transcriptTerminatorBorderRadius: number | string | undefined; + transcriptTerminatorColor: string | undefined; + transcriptTerminatorFontSize: number | string | undefined; - transcriptActivityVisualKeyboardIndicatorColor?: string | undefined; - transcriptActivityVisualKeyboardIndicatorStyle?: string | undefined; - transcriptActivityVisualKeyboardIndicatorWidth?: number | string | undefined; + transcriptActivityVisualKeyboardIndicatorColor: string | undefined; + transcriptActivityVisualKeyboardIndicatorStyle: string | undefined; + transcriptActivityVisualKeyboardIndicatorWidth: number | string | undefined; - transcriptVisualKeyboardIndicatorColor?: string | undefined; - transcriptVisualKeyboardIndicatorStyle?: string | undefined; - transcriptVisualKeyboardIndicatorWidth?: number | string | undefined; + transcriptVisualKeyboardIndicatorColor: string | undefined; + transcriptVisualKeyboardIndicatorStyle: string | undefined; + transcriptVisualKeyboardIndicatorWidth: number | string | undefined; /** * Transcript overlay button @@ -805,35 +713,27 @@ type StyleOptions = { * - `"any"` will show when there are any offscreen messages * - `false` will always hide the button */ - scrollToEndButtonBehavior?: false | 'any' | 'unread' | undefined; + scrollToEndButtonBehavior: false | 'any' | 'unread' | undefined; /** Font size of the new message button. */ - scrollToEndButtonFontSize?: number | string | undefined; + scrollToEndButtonFontSize: number | string | undefined; - /** - * Font size of the new message button. - * - * @deprecated Since 4.14.0: Renamed to {@linkcode scrollToEndButtonFontSize}. - */ - // TODO: [P4] Will be removed on or after 2023-06-02. - newMessagesButtonFontSize?: number | string | undefined; - - transcriptOverlayButtonBackground?: string | undefined; - transcriptOverlayButtonBackgroundOnDisabled?: string | undefined; - transcriptOverlayButtonBackgroundOnFocus?: string | undefined; - transcriptOverlayButtonBackgroundOnHover?: string | undefined; - transcriptOverlayButtonColor?: string | undefined; - transcriptOverlayButtonColorOnDisabled?: string | undefined; + transcriptOverlayButtonBackground: string | undefined; + transcriptOverlayButtonBackgroundOnDisabled: string | undefined; + transcriptOverlayButtonBackgroundOnFocus: string | undefined; + transcriptOverlayButtonBackgroundOnHover: string | undefined; + transcriptOverlayButtonColor: string | undefined; + transcriptOverlayButtonColorOnDisabled: string | undefined; /** * Default value is transcriptOverlayButtonColor */ - transcriptOverlayButtonColorOnFocus?: string | undefined; + transcriptOverlayButtonColorOnFocus: string | undefined; /** * Default value is transcriptOverlayButtonColor */ - transcriptOverlayButtonColorOnHover?: string | undefined; + transcriptOverlayButtonColorOnHover: string | undefined; /** * Toast UI @@ -842,64 +742,64 @@ type StyleOptions = { /** * New debounce timeout value only affects new notifications. */ - notificationDebounceTimeout?: number | undefined; + notificationDebounceTimeout: number | undefined; - hideToaster?: boolean | undefined; - toasterHeight?: number | string | undefined; - toasterMaxHeight?: number | string | undefined; - toasterSingularMaxHeight?: number | string | undefined; - toastFontSize?: number | string | undefined; - toastIconWidth?: number | string | undefined; - toastSeparatorColor?: string | undefined; - toastTextPadding?: number | string | undefined; + hideToaster: boolean | undefined; + toasterHeight: number | string | undefined; + toasterMaxHeight: number | string | undefined; + toasterSingularMaxHeight: number | string | undefined; + toastFontSize: number | string | undefined; + toastIconWidth: number | string | undefined; + toastSeparatorColor: string | undefined; + toastTextPadding: number | string | undefined; - toastErrorBackgroundColor?: string | undefined; - toastErrorColor?: string | undefined; - toastInfoBackgroundColor?: string | undefined; - toastInfoColor?: string | undefined; - toastSuccessBackgroundColor?: string | undefined; - toastSuccessColor?: string | undefined; - toastWarnBackgroundColor?: string | undefined; - toastWarnColor?: string | undefined; + toastErrorBackgroundColor: string | undefined; + toastErrorColor: string | undefined; + toastInfoBackgroundColor: string | undefined; + toastInfoColor: string | undefined; + toastSuccessBackgroundColor: string | undefined; + toastSuccessColor: string | undefined; + toastWarnBackgroundColor: string | undefined; + toastWarnColor: string | undefined; /** * Typing animation */ - typingAnimationBackgroundImage?: string | undefined; - typingAnimationDuration?: number | undefined; - typingAnimationHeight?: number | string | undefined; - typingAnimationWidth?: number | string | undefined; + typingAnimationBackgroundImage: string | undefined; + typingAnimationDuration: number | undefined; + typingAnimationHeight: number | string | undefined; + typingAnimationWidth: number | string | undefined; /** * Upload thumbnail */ - enableUploadThumbnail?: boolean | undefined; - uploadThumbnailContentType?: string | undefined; - uploadThumbnailHeight?: number | undefined; - uploadThumbnailQuality?: number | undefined; - uploadThumbnailWidth?: number | undefined; + enableUploadThumbnail: boolean | undefined; + uploadThumbnailContentType: string | undefined; + uploadThumbnailHeight: number | undefined; + uploadThumbnailQuality: number | undefined; + uploadThumbnailWidth: number | undefined; /** * Video */ - videoHeight?: number | string | undefined; + videoHeight: number | string | undefined; /** * Maximum message length in characters * * @default 2000 */ - maxMessageLength?: number | undefined; + maxMessageLength: number | undefined; /** * The node to place Web Chat styles into. Needed when using as a Web Component. * * @default document.head */ - stylesRoot?: Node | undefined; + stylesRoot: Node | undefined; /** * Border animation @@ -912,7 +812,7 @@ type StyleOptions = { * * New in 4.19.0. */ - borderAnimationColor1?: string | undefined; + borderAnimationColor1: string | undefined; /** * Border animation 2nd color * @@ -920,7 +820,7 @@ type StyleOptions = { * * New in 4.19.0. */ - borderAnimationColor2?: string | undefined; + borderAnimationColor2: string | undefined; /** * Border animation 3rd color * @@ -928,7 +828,7 @@ type StyleOptions = { * * New in 4.19.0. */ - borderAnimationColor3?: string | undefined; + borderAnimationColor3: string | undefined; /** * Code block theme @@ -940,7 +840,7 @@ type StyleOptions = { * * New in 4.19.0. */ - codeBlockTheme?: 'github-light-default' | 'github-dark-default' | undefined; + codeBlockTheme: 'github-light-default' | 'github-dark-default' | undefined; /** * (EXPERIMENTAL) Feedback buttons placement @@ -954,7 +854,7 @@ type StyleOptions = { * * New in 4.19.0. */ - feedbackActionsPlacement?: 'activity-actions' | 'activity-status' | undefined; + feedbackActionsPlacement: 'activity-actions' | 'activity-status' | undefined; /** * Use continuous mode for speech recognition. Default to `false`. @@ -964,21 +864,21 @@ type StyleOptions = { * * @see https://github.com/microsoft/BotFramework-WebChat/pull/5426 */ - speechRecognitionContinuous?: boolean | undefined; + speechRecognitionContinuous: boolean | undefined; /** * Whether part groups are open by default. * * @default true */ - partGroupDefaultOpen?: boolean | undefined; + partGroupDefaultOpen: boolean | undefined; /** * Whether references (citation link definitions) are open by default. * * @default true */ - referenceListDefaultOpen?: boolean | undefined; + referenceListDefaultOpen: boolean | undefined; /** * Defines how activities are being grouped by (in the order of appearance in the array). Default to `['sender', 'status', 'part']` or `sender,status` in CSS. @@ -987,7 +887,7 @@ type StyleOptions = { * * To add new groupings, configure `groupActivitiesMiddleware` to output extra groups. Then, add the group names to `styleOptions.groupActivitiesBy`. */ - groupActivitiesBy?: readonly string[] | undefined; + groupActivitiesBy: readonly string[] | undefined; /** * Send box: maximum number of attachment item to preview as thumbnail before showing as text-only. @@ -995,14 +895,14 @@ type StyleOptions = { * * @default 114 */ - sendBoxAttachmentBarMaxHeight?: number | undefined; + sendBoxAttachmentBarMaxHeight: number | undefined; /** * Send box: maximum number of attachment item to preview as thumbnail before showing as list item. * * @default 3 */ - sendBoxAttachmentBarMaxThumbnail?: number | undefined; + sendBoxAttachmentBarMaxThumbnail: number | undefined; /** * Indicates if file upload should be disabled. @@ -1011,7 +911,7 @@ type StyleOptions = { * * New in 4.19.0. */ - disableFileUpload?: boolean | undefined; + disableFileUpload: boolean | undefined; /** * Controls microphone button visibility in Fluent theme send box. * @@ -1020,28 +920,59 @@ type StyleOptions = { * * @default 'auto' */ - showMicrophoneButton?: 'auto' | 'hide' | undefined; + showMicrophoneButton: 'auto' | 'hide' | undefined; }; // StrictStyleOptions is only used internally in Web Chat and for simplifying our code: // 1. Allow developers to set the "bubbleNubOffset" option as "top" (string), but when we normalize them, we will convert it to 0 (number); // 2. Renamed/deprecated options, only the newer option will be kept, the older option will be dropped. // Internally, no code should use the deprecated value except the migration code. -type StrictStyleOptions = Required< - Omit< - StyleOptions, - | 'bubbleImageHeight' - | 'bubbleMaxWidth' - | 'bubbleMinWidth' - | 'hideScrollToEndButton' - | 'hideUploadButton' - | 'newMessagesButtonFontSize' - > -> & { - bubbleFromUserNubOffset: number; - bubbleNubOffset: number; - emojiSet: false | Record; +type StyleOptions = Partial> & { + /** + * Specifies the fixed height of the bubble for image, default to unset. + * + * @deprecated Use `bubbleImageMaxHeight` and `bubbleImageMinHeight` instead. To mimick behavior before deprecation, set both options to 240px. + */ + bubbleImageHeight?: number | undefined; + + /* @deprecated Please use `bubbleAttachmentMaxWidth` and `bubbleMessageMaxWidth` instead. */ + bubbleMaxWidth?: number | undefined; + /* @deprecated Please use `bubbleAttachmentMaxWidth` and `bubbleMessageMaxWidth` instead. */ + bubbleMinWidth?: number | undefined; + + /** + * Indicates if the upload file button should be hidden. + * + * @default false + * + * @deprecated deprecated since 4.18.0: obsolated by {@linkcode disableFileUpload}. This option will be removed on or after 2027-07-14. + */ + hideUploadButton?: boolean | undefined; + + /** + * Nub offset 'bottom' will render nub at the bottom + * A positive or negative number will shift nub offset up/down + * "top" is equivalent to positive zero. + * "bottom" is equivalent to negative zero. + */ + bubbleFromUserNubOffset?: number | 'bottom' | 'top' | undefined; + + /** + * Nub offset ''bottom' will render nub at the bottom + * A positive or negative number will shift nub offset up/down + * "top" is equivalent to positive zero. + * "bottom" is equivalent to negative zero. + */ + bubbleNubOffset?: number | 'bottom' | 'top' | undefined; + + /** + * Emoji styling + * If true, Web Chat's default set of emoji will be enabled. See patchStyleOptions.js for default list. + * A custom object will enable unicode emoji specified by the developer. + * key: emoticon + * value: unicode emoji + */ + emojiSet?: boolean | Record | undefined; }; -export default StyleOptions; -export { StrictStyleOptions }; +export { type StrictStyleOptions, type StyleOptions }; diff --git a/packages/api/src/decorator/DecoratorComposer.tsx b/packages/api/src/decorator/DecoratorComposer.tsx index f78367f451..469d41c3bc 100644 --- a/packages/api/src/decorator/DecoratorComposer.tsx +++ b/packages/api/src/decorator/DecoratorComposer.tsx @@ -15,7 +15,15 @@ const decoratorComposerPropsSchema = pipe( ); const warnInvalidMiddlewarePropsSchema = optional( - array(custom(value => value[middlewareFactoryMarker satisfies symbol] === middlewareFactoryMarker)) + array( + custom( + value => + !!value && + typeof value === 'object' && + middlewareFactoryMarker in value && + value[middlewareFactoryMarker satisfies symbol] === middlewareFactoryMarker + ) + ) ); type DecoratorComposerProps = Omit, 'middleware'> & { diff --git a/packages/api/src/defaultStyleOptions.ts b/packages/api/src/defaultStyleOptions.ts index dba3e6275b..d0239b5ed5 100644 --- a/packages/api/src/defaultStyleOptions.ts +++ b/packages/api/src/defaultStyleOptions.ts @@ -1,5 +1,5 @@ /* eslint no-magic-numbers: "off" */ -import StyleOptions from './StyleOptions'; +import { type StrictStyleOptions } from './StyleOptions'; function fontFamily(fonts: readonly string[]): string { return fonts.map(font => `'${font}'`).join(', '); @@ -9,7 +9,7 @@ const DEFAULT_ACCENT = '#0063B1'; const DEFAULT_SUBTLE = '#767676'; // With contrast 4.5:1 to white const PADDING_REGULAR = 10; -const DEFAULT_OPTIONS: Required = { +const DEFAULT_OPTIONS: StrictStyleOptions = { // Basic styling accent: DEFAULT_ACCENT, backgroundColor: 'White', @@ -54,11 +54,8 @@ const DEFAULT_OPTIONS: Required = { bubbleFromUserNubOffset: 0, bubbleFromUserNubSize: undefined, bubbleFromUserTextColor: 'Black', - bubbleImageHeight: undefined, bubbleImageMaxHeight: 240, // Based on previously default `bubbleImageHeight` of 240px. bubbleImageMinHeight: 240, // TODO: Should change to 180px. Based on 320px bubble width showing a 16:9 image, or `320 / (16 / 9)`. 320px bubble width is based on 360px wide of the chat canvas. - bubbleMaxWidth: undefined, // Deprecated. - bubbleMinWidth: undefined, // Deprecated. bubbleAttachmentMaxWidth: 480, // Based off screen width = 600px bubbleAttachmentMinWidth: 250, // min screen width = 300px; Microsoft Edge requires 372px (https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/13621468/) bubbleMessageMaxWidth: 480, // Based off screen width = 600px @@ -80,7 +77,7 @@ const DEFAULT_OPTIONS: Required = { slowConnectionAfter: 15000, // Emoji - emojiSet: true, + emojiSet: undefined, // Live region - Accessibility internalLiveRegionFadeAfter: 1000, @@ -92,7 +89,6 @@ const DEFAULT_OPTIONS: Required = { markdownRenderHTML: true, // Scroll behavior - hideScrollToEndButton: undefined, // Deprecated as of 4.14.0. Use "scrollToEndButtonBehavior" instead. Remove on or after 2023-06-02. autoScrollSnapOnActivity: false, autoScrollSnapOnActivityOffset: 0, autoScrollSnapOnPage: false, @@ -102,7 +98,6 @@ const DEFAULT_OPTIONS: Required = { disableFileUpload: false, hideSendBox: false, hideTelephoneKeypadButton: true, - hideUploadButton: undefined, // Deprecated as of 4.19.0. microphoneButtonColorOnDictate: '#F33', sendAttachmentOn: 'send', sendBoxBackground: 'White', @@ -197,16 +192,6 @@ const DEFAULT_OPTIONS: Required = { suggestedActionKeyboardFocusIndicatorBorderWidth: 1, suggestedActionKeyboardFocusIndicatorInset: 2, - suggestedActionActiveBackground: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - suggestedActionBackground: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - suggestedActionDisabledBackground: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - suggestedActionDisabledBorderColor: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - suggestedActionDisabledBorderStyle: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - suggestedActionDisabledBorderWidth: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - suggestedActionDisabledTextColor: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - suggestedActionFocusBackground: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - suggestedActionHoverBackground: undefined, // Deprecated as of 4.15.0. Remove on or after 2023-09-16. - // Suggested actions carousel layout suggestedActionsCarouselFlipperCursor: undefined, suggestedActionsCarouselFlipperBoxWidth: 40, @@ -235,7 +220,6 @@ const DEFAULT_OPTIONS: Required = { // Transcript overlay buttons scrollToEndButtonBehavior: 'unread', scrollToEndButtonFontSize: '85%', - newMessagesButtonFontSize: undefined, // Deprecated as of 4.14.0, renamed to "scrollToEndButtonFontSize". Remove on or after 2023-06-02. transcriptOverlayButtonBackground: 'rgba(0, 0, 0, .6)', transcriptOverlayButtonBackgroundOnDisabled: 'rgba(0, 0, 0, .6)', transcriptOverlayButtonBackgroundOnFocus: 'rgba(0, 0, 0, .8)', diff --git a/packages/api/src/hooks/Composer.tsx b/packages/api/src/hooks/Composer.tsx index b229bc517e..8a8c30dde3 100644 --- a/packages/api/src/hooks/Composer.tsx +++ b/packages/api/src/hooks/Composer.tsx @@ -45,7 +45,7 @@ import React, { useCallback, useEffect, useMemo, useRef, useState, type ReactNod import { Provider } from 'react-redux'; import updateIn from 'simple-update-in'; -import type StyleOptions from '../StyleOptions'; +import { type StyleOptions } from '../StyleOptions'; import errorBoxTelemetryPolymiddleware from '../errorBox/errorBoxTelemetryPolymiddleware'; import PrecompiledGlobalize from '../external/PrecompiledGlobalize'; import usePonyfill from '../hooks/usePonyfill'; @@ -297,7 +297,7 @@ const ComposerCore = ({ sendTypingIndicator, toastMiddleware, typingIndicatorMiddleware, - uiState, + uiState: rawUIState, userID, username }: ComposerCoreProps) => { @@ -310,7 +310,7 @@ const ComposerCore = ({ const patchedDir = useMemo(() => (dir === 'ltr' || dir === 'rtl' ? dir : 'auto'), [dir]); const patchedGrammars = useMemo(() => grammars || [], [grammars]); - uiState = parseUIState(uiState, disabled); + const uiState = parseUIState(rawUIState, disabled); useEffect(() => { dispatch(setLanguage(locale)); diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 2b2cff9478..1ebd07ce62 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -31,7 +31,7 @@ export { type SendBoxToolbarMiddlewareRequest } from './middleware/SendBoxToolbarMiddleware'; export { default as normalizeStyleOptions } from './normalizeStyleOptions'; -export { type StrictStyleOptions, type default as StyleOptions } from './StyleOptions'; +export { type StrictStyleOptions, type StyleOptions } from './StyleOptions'; export { type ActivityStatusMiddleware, type RenderActivityStatus } from './types/ActivityStatusMiddleware'; export { type AttachmentForScreenReaderComponentFactory, diff --git a/packages/api/src/normalizeStyleOptions.ts b/packages/api/src/normalizeStyleOptions.ts index 6b20be7ba1..4766d960fb 100644 --- a/packages/api/src/normalizeStyleOptions.ts +++ b/packages/api/src/normalizeStyleOptions.ts @@ -1,7 +1,7 @@ import { warnOnce } from '@msinternal/botframework-webchat-base/utils'; import defaultStyleOptions from './defaultStyleOptions'; -import StyleOptions, { StrictStyleOptions } from './StyleOptions'; +import type { StrictStyleOptions, StyleOptions } from './StyleOptions'; const bubbleImageHeightDeprecation = warnOnce( '"styleOptions.bubbleImageHeight" has been deprecated. Use "styleOptions.bubbleImageMaxHeight" and "styleOptions.bubbleImageMinHeight" instead. This deprecation migration will be removed on or after 2026-07-05.' @@ -15,37 +15,26 @@ const bubbleMinWidthDeprecation = warnOnce( '"styleOptions.bubbleMinWidth" has been deprecated. Use "styleOptions.bubbleAttachmentMinWidth" and "styleOptions.bubbleMessageMinWidth" instead. This deprecation migration will be removed on or after 2026-07-05.' ); -const hideScrollToEndButtonDeprecation = warnOnce( - '"styleOptions.hideScrollToEndButton" has been deprecated. To hide scroll to end button, set "scrollToEndBehavior" to false. This deprecation migration will be removed on or after 2023-06-02.' -); - -const newMessagesButtonFontSizeDeprecation = warnOnce( - '"styleOptions.newMessagesButtonFontSize" has been renamed to "styleOptions.scrollToEndButtonFontSize". This deprecation migration will be removed on or after 2023-06-02.' -); - -const suggestedActionBackgroundDeprecation = warnOnce( - '"styleOptions.suggestedActionBackground" has been deprecated. Please use "styleOptions.suggestedActionBackgroundColor" instead. This deprecation migration will be removed on or after 2021-09-16.' -); - -const suggestedActionXXXBackgroundDeprecation = warnOnce( - '"styleOptions.suggestedActionXXXBackground" has been deprecated. Please use "styleOptions.suggestedActionBackgroundColorOnXXX" instead. This deprecation migration will be removed on or after 2021-09-16.' -); - -const suggestedActionDisabledDeprecation = warnOnce( - '"styleOptions.suggestedActionDisabledXXX" has been renamed to "styleOptions.suggestedActionXXXOnDisabled". This deprecation migration will be removed on or after 2021-09-16.' -); - // TODO: [P4] We should add a notice for people who want to use "styleSet" instead of "styleOptions". // "styleSet" is actually CSS stylesheet and it is based on the DOM tree. // DOM tree may change from time to time, thus, maintaining "styleSet" becomes a constant effort. // eslint-disable-next-line complexity export default function normalizeStyleOptions({ - hideScrollToEndButton, - newMessagesButtonFontSize, + bubbleImageHeight, + bubbleMaxWidth, + bubbleMinWidth, + hideUploadButton: _hideUploadButton, ...options }: StyleOptions = {}): StrictStyleOptions { - const filledOptions: Required = { ...defaultStyleOptions, ...options }; + const filledOptions: Required = { + ...defaultStyleOptions, + bubbleImageHeight: undefined, + bubbleMaxWidth: undefined, + bubbleMinWidth: undefined, + hideUploadButton: undefined, + ...options + }; // Keep this list flat (no nested style) and serializable (no functions) const { bubbleFromUserNubOffset, bubbleNubOffset, emojiSet } = filledOptions; @@ -105,13 +94,6 @@ export default function normalizeStyleOptions({ normalizedEmojiSet = emojiSet; } - if (hideScrollToEndButton) { - hideScrollToEndButtonDeprecation(); - - filledOptions.scrollToEndButtonBehavior = false; - filledOptions.hideScrollToEndButton = undefined; - } - let patchedScrollToEndButtonBehavior = filledOptions.scrollToEndButtonBehavior; if (patchedScrollToEndButtonBehavior !== 'any' && patchedScrollToEndButtonBehavior !== false) { @@ -123,107 +105,27 @@ export default function normalizeStyleOptions({ patchedScrollToEndButtonBehavior = 'unread'; } - if (newMessagesButtonFontSize) { - newMessagesButtonFontSizeDeprecation(); - - // Only set if the "scrollToEndButtonFontSize" is not set. - filledOptions.scrollToEndButtonFontSize = newMessagesButtonFontSize; - filledOptions.newMessagesButtonFontSize = undefined; - } - - options.suggestedActionBackground && suggestedActionBackgroundDeprecation(); - - if (options.suggestedActionActiveBackground) { - suggestedActionXXXBackgroundDeprecation(); - - filledOptions.suggestedActionBackgroundColorOnActive = options.suggestedActionActiveBackground; - filledOptions.suggestedActionActiveBackground = undefined; - } - - if (options.suggestedActionFocusBackground) { - suggestedActionXXXBackgroundDeprecation(); - - filledOptions.suggestedActionBackgroundColorOnFocus = options.suggestedActionFocusBackground; - filledOptions.suggestedActionFocusBackground = undefined; - } - - if (options.suggestedActionHoverBackground) { - suggestedActionXXXBackgroundDeprecation(); - - filledOptions.suggestedActionBackgroundColorOnHover = options.suggestedActionHoverBackground; - filledOptions.suggestedActionHoverBackground = undefined; - } - - if (options.suggestedActionDisabledBackground) { - suggestedActionXXXBackgroundDeprecation(); - - filledOptions.suggestedActionBackgroundColorOnDisabled = options.suggestedActionDisabledBackground; - filledOptions.suggestedActionDisabledBackground = undefined; - } - - if (options.suggestedActionDisabledBorderColor) { - suggestedActionDisabledDeprecation(); - - filledOptions.suggestedActionBorderColorOnDisabled = options.suggestedActionDisabledBorderColor; - filledOptions.suggestedActionDisabledBorderColor = undefined; - } - - if (options.suggestedActionDisabledBorderStyle) { - suggestedActionDisabledDeprecation(); - - filledOptions.suggestedActionBorderStyleOnDisabled = options.suggestedActionDisabledBorderStyle; - filledOptions.suggestedActionDisabledBorderStyle = undefined; - } - - if (options.suggestedActionDisabledBorderWidth) { - suggestedActionDisabledDeprecation(); - - filledOptions.suggestedActionBorderWidthOnDisabled = options.suggestedActionDisabledBorderWidth; - filledOptions.suggestedActionDisabledBorderWidth = undefined; - } - - if (options.suggestedActionDisabledTextColor) { - suggestedActionDisabledDeprecation(); - - filledOptions.suggestedActionTextColorOnDisabled = options.suggestedActionDisabledTextColor; - filledOptions.suggestedActionDisabledTextColor = undefined; - } - - if (options.bubbleImageHeight) { + if (bubbleImageHeight) { bubbleImageHeightDeprecation(); - filledOptions.bubbleImageMaxHeight = options.bubbleImageHeight; - filledOptions.bubbleImageMinHeight = options.bubbleImageHeight; + filledOptions.bubbleImageMaxHeight = bubbleImageHeight; + filledOptions.bubbleImageMinHeight = bubbleImageHeight; filledOptions.bubbleImageHeight = undefined; } - if (options.bubbleMaxWidth) { - bubbleMaxWidthDeprecation(); - - filledOptions.bubbleAttachmentMaxWidth = options.bubbleMaxWidth; - filledOptions.bubbleMaxWidth = undefined; - } - - if (options.bubbleMinWidth) { - bubbleMinWidthDeprecation(); - - filledOptions.bubbleAttachmentMinWidth = options.bubbleMinWidth; - filledOptions.bubbleMinWidth = undefined; - } - - if (options.bubbleMaxWidth) { + if (bubbleMaxWidth) { bubbleMaxWidthDeprecation(); - filledOptions.bubbleMessageMaxWidth = options.bubbleMaxWidth; - filledOptions.bubbleMaxWidth = undefined; + filledOptions.bubbleAttachmentMaxWidth = bubbleMaxWidth; + filledOptions.bubbleMessageMaxWidth = bubbleMaxWidth; } - if (options.bubbleMinWidth) { + if (bubbleMinWidth) { bubbleMinWidthDeprecation(); - filledOptions.bubbleMessageMinWidth = options.bubbleMinWidth; - filledOptions.bubbleMinWidth = undefined; + filledOptions.bubbleAttachmentMinWidth = bubbleMinWidth; + filledOptions.bubbleMessageMinWidth = bubbleMinWidth; } return { diff --git a/packages/api/src/providers/StyleOptions/StyleOptionsComposer.tsx b/packages/api/src/providers/StyleOptions/StyleOptionsComposer.tsx index 9744ed4d8e..095e3636dd 100644 --- a/packages/api/src/providers/StyleOptions/StyleOptionsComposer.tsx +++ b/packages/api/src/providers/StyleOptions/StyleOptionsComposer.tsx @@ -2,7 +2,7 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react import React, { memo, useMemo } from 'react'; import { custom, object, optional, pipe, readonly, safeParse, type InferInput } from 'valibot'; -import type StyleOptions from '../../StyleOptions'; +import { type StyleOptions } from '../../StyleOptions'; import StyleOptionsContext, { StyleOptionsContextType, useStyleOptionsContext } from './private/StyleOptionsContext'; import rectifyStyleOptions from './private/rectifyStyleOptions'; diff --git a/packages/api/src/tsconfig.json b/packages/api/src/tsconfig.json index 10186e2736..8a3e5e723b 100644 --- a/packages/api/src/tsconfig.json +++ b/packages/api/src/tsconfig.json @@ -1,7 +1,8 @@ { "compilerOptions": { "downlevelIteration": true, - "resolveJsonModule": true, // Required for localization files + "resolveJsonModule": true, // Required for localization files. + "strict": false, // We should flip this occasionally and fix all typing issues. "types": ["dom-speech-recognition"] }, "extends": "@msinternal/botframework-webchat-tsconfig/legacy" From 2858bfb31a2fa2850c91bc791405ca313d61a88b Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 18:31:48 +0000 Subject: [PATCH 014/108] Port to TypeScript --- packages/api/src/utils/{isObject.js => isObject.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename packages/api/src/utils/{isObject.js => isObject.ts} (57%) diff --git a/packages/api/src/utils/isObject.js b/packages/api/src/utils/isObject.ts similarity index 57% rename from packages/api/src/utils/isObject.js rename to packages/api/src/utils/isObject.ts index 3b62be7c8f..dbfeeb6eaf 100644 --- a/packages/api/src/utils/isObject.js +++ b/packages/api/src/utils/isObject.ts @@ -1,5 +1,5 @@ const { toString } = {}; -export default function isObject(obj) { +export default function isObject(obj: unknown): boolean { return toString.call(obj) === '[object Object]'; } From 037236d151f1330c29469462cd935c45781f8371 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 18:31:54 +0000 Subject: [PATCH 015/108] Set strict to false --- packages/component/src/tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/component/src/tsconfig.json b/packages/component/src/tsconfig.json index 96766595e1..ddd418527c 100644 --- a/packages/component/src/tsconfig.json +++ b/packages/component/src/tsconfig.json @@ -2,6 +2,7 @@ "compilerOptions": { "allowJs": true, "downlevelIteration": true, + "strict": false, "types": ["dom-speech-recognition"] }, "extends": [ From 7e9dd330216e8d91e83f1e0e8b8ed28bbbe00fee Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 19:18:13 +0000 Subject: [PATCH 016/108] Fix exporting class with private members --- .../customElements/CodeBlock.ts | 23 +++++++++++++++---- .../customElements/wrapAsCustomElement.ts | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/component/src/providers/CustomElements/customElements/CodeBlock.ts b/packages/component/src/providers/CustomElements/customElements/CodeBlock.ts index 4562b594e6..a0f210d4c9 100644 --- a/packages/component/src/providers/CustomElements/customElements/CodeBlock.ts +++ b/packages/component/src/providers/CustomElements/customElements/CodeBlock.ts @@ -1,4 +1,5 @@ /* eslint-disable class-methods-use-this */ +// eslint-disable-next-line max-classes-per-file import { hooks } from 'botframework-webchat-api'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import { ReactNode, useMemo, useRef } from 'react'; @@ -11,15 +12,28 @@ import styles from './CodeBlock.module.css'; const { useStyleOptions, useLocalizer } = hooks; -class CodeBlock extends HTMLElement { +abstract class CodeBlockBase extends HTMLElement { + copyButtonElement: HTMLElement; + + abstract get code(): string; + abstract get theme(): string; + abstract set theme(value: string); + abstract get language(): string; + abstract set language(value: string); + abstract get options(): { readonly theme: string }; + + abstract scheduleUpdate(): void; + abstract update(): void; + abstract highlightCode(...args: Parameters): DocumentFragment | string; +} + +class CodeBlock extends CodeBlockBase { static observedAttributes = ['theme', 'language']; #connected = false; #originalFragment: DocumentFragment = undefined; #updateTask?: Promise; - copyButtonElement: HTMLElement; - get code() { return this.querySelector('code')?.textContent ?? ''; } @@ -27,6 +41,7 @@ class CodeBlock extends HTMLElement { get theme() { return this.getAttribute('theme'); } + set theme(value: string) { this.setAttribute('theme', value); } @@ -153,7 +168,7 @@ export default function useReactCodeBlockClass(copyButtonTagName: string) { const classNames = useStyles(styles); - return useMemo( + return useMemo( () => class ReactCodeBlock extends CodeBlock { static observedAttributes = CodeBlock.observedAttributes; diff --git a/packages/component/src/providers/CustomElements/customElements/wrapAsCustomElement.ts b/packages/component/src/providers/CustomElements/customElements/wrapAsCustomElement.ts index 145f9293e9..e7b9304ecc 100644 --- a/packages/component/src/providers/CustomElements/customElements/wrapAsCustomElement.ts +++ b/packages/component/src/providers/CustomElements/customElements/wrapAsCustomElement.ts @@ -10,7 +10,7 @@ const ConnectionState = { export default function wrapAsCustomElement( component: ComponentType, propKeys: (keyof Props)[] -) { +): typeof HTMLElement { type AttributeName = keyof { [K in keyof Props as K extends 'className' ? 'class' : K]: Props[K] } & string; const attributeNames = propKeys.map(key => (key === 'className' ? 'class' : key)) as AttributeName[]; From 70e420f09772301b634dbc77f4f2270fc8541b0c Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 19:20:56 +0000 Subject: [PATCH 017/108] Disable strict --- packages/bundle/src/tsconfig.json | 1 + packages/component/src/tsconfig.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/bundle/src/tsconfig.json b/packages/bundle/src/tsconfig.json index 427e50993a..294fb69337 100644 --- a/packages/bundle/src/tsconfig.json +++ b/packages/bundle/src/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "strict": false, // We should flip this occasionally and fix all typing issues. "types": ["dom-speech-recognition"] }, "extends": [ diff --git a/packages/component/src/tsconfig.json b/packages/component/src/tsconfig.json index ddd418527c..0058183c3b 100644 --- a/packages/component/src/tsconfig.json +++ b/packages/component/src/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "allowJs": true, "downlevelIteration": true, - "strict": false, + "strict": false, // We should flip this occasionally and fix all typing issues. "types": ["dom-speech-recognition"] }, "extends": [ From 955789cefcf2bcc8821fe0bd5e55063699424318 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 19:27:53 +0000 Subject: [PATCH 018/108] Deprecate parseXXX --- .../src/types/external/OrgSchema/Action.ts | 7 +++++-- .../src/types/external/OrgSchema/Claim.ts | 7 +++++-- .../types/external/OrgSchema/CreativeWork.ts | 19 +++++++++++++++++-- .../types/external/OrgSchema/DefinedTerm.ts | 7 +++++-- .../src/types/external/OrgSchema/Person.ts | 7 +++++-- .../src/types/external/OrgSchema/Project.ts | 7 +++++-- .../src/types/external/OrgSchema/Thing.ts | 7 +++++-- .../types/external/OrgSchema/UserReview.ts | 7 +++++-- .../types/external/OrgSchema/VoteAction.ts | 7 +++++-- 9 files changed, 57 insertions(+), 18 deletions(-) diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index 3b0728b7bb..dff645b29d 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -89,4 +89,7 @@ const actionSchema: GenericSchema = intersect([ ) ]); -export { actionSchema, type ActionInput, type ActionOutput }; +/** @deprecated Use Valibot.parse(actionSchema) instead. Will be removed on or after 2028-04-23. */ +const parseAction = (action: ActionInput): ActionOutput => parse(actionSchema, action); + +export { actionSchema, parseAction, type ActionInput, type ActionOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index 7b68c5fa00..aadeed2c7f 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, pipe, readonly, type GenericSchema } from 'valibot'; +import { intersect, lazy, looseObject, parse, pipe, readonly, type GenericSchema } from 'valibot'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; @@ -65,4 +65,7 @@ const claimSchema: GenericSchema = intersect([ ) ]); -export { claimSchema, type ClaimInput, type ClaimOutput }; +/** @deprecated Use Valibot.parse(claimSchema) instead. Will be removed on or after 2028-04-23. */ +const parseClaim = (claim: ClaimInput): ClaimOutput => parse(claimSchema, claim); + +export { claimSchema, parseClaim, type ClaimInput, type ClaimOutput }; diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 97905b578c..881c61059c 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -1,4 +1,15 @@ -import { intersect, lazy, looseObject, number, pipe, readonly, string, union, type GenericSchema } from 'valibot'; +import { + intersect, + lazy, + looseObject, + number, + parse, + pipe, + readonly, + string, + union, + type GenericSchema +} from 'valibot'; import { creativeWorkStatusSchema, @@ -186,4 +197,8 @@ const creativeWorkSchema: GenericSchema = ) ]); -export { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput }; +/** @deprecated Use Valibot.parse(creativeWorkSchema) instead. Will be removed on or after 2028-04-23. */ +const parseCreativeWork = (creativeWork: CreativeWorkInput): CreativeWorkOutput => + parse(creativeWorkSchema, creativeWork); + +export { creativeWorkSchema, parseCreativeWork, type CreativeWorkInput, type CreativeWorkOutput }; diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index d0000df7a9..37374d3111 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -60,4 +60,7 @@ const definedTermSchema: GenericSchema = in ) ]); -export { definedTermSchema, type DefinedTermInput, type DefinedTermOutput }; +/** @deprecated Use Valibot.parse(definedTermSchema) instead. Will be removed on or after 2028-04-23. */ +const parseDefinedTerm = (definedTerm: DefinedTermInput): DefinedTermOutput => parse(definedTermSchema, definedTerm); + +export { definedTermSchema, parseDefinedTerm, type DefinedTermInput, type DefinedTermOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index fd6fc5c599..fab7e5ca92 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -26,4 +26,7 @@ const personSchema: GenericSchema = intersect([ ) ]); -export { personSchema, type PersonInput, type PersonOutput }; +/** @deprecated Use Valibot.parse(personSchema) instead. Will be removed on or after 2028-04-23. */ +const parsePerson = (person: PersonInput): PersonOutput => parse(personSchema, person); + +export { parsePerson, personSchema, type PersonInput, type PersonOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index b967fb382d..1bf378f566 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, pipe, readonly, string } from 'valibot'; +import { intersect, looseObject, parse, pipe, readonly, string } from 'valibot'; import orgSchemaProperties from './private/orgSchemaProperties'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -57,4 +57,7 @@ const projectSchema = intersect([ ) ]); -export { projectSchema, type ProjectInput, type ProjectOutput }; +/** @deprecated Use Valibot.parse(projectSchema) instead. Will be removed on or after 2028-04-23. */ +const parseProject = (project: ProjectInput): ProjectOutput => parse(projectSchema, project); + +export { parseProject, projectSchema, type ProjectInput, type ProjectOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index 9b303df61f..fbd5e39bbb 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -1,4 +1,4 @@ -import { lazy, literal, looseObject, optional, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { lazy, literal, looseObject, optional, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import orgSchemaProperties from './private/orgSchemaProperties'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; @@ -160,4 +160,7 @@ const thingSchema: GenericSchema = readonly() ); -export { thingSchema, type ThingInput, type ThingOutput }; +/** @deprecated Use Valibot.parse(thingSchema) instead. Will be removed on or after 2028-04-23. */ +const parseThing = (thing: ThingInput): ThingOutput => parse(thingSchema, thing); + +export { parseThing, thingSchema, type ThingInput, type ThingOutput }; diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index 90506e9c70..721338555f 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import orgSchemaProperty from './private/orgSchemaProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -41,4 +41,7 @@ const userReviewSchema: GenericSchema = inter ) ]); -export { userReviewSchema, type UserReviewInput, type UserReviewOutput }; +/** @deprecated Use Valibot.parse(userReviewSchema) instead. Will be removed on or after 2028-04-23. */ +const parseUserReview = (userReview: UserReviewInput): UserReviewOutput => parse(userReviewSchema, userReview); + +export { parseUserReview, userReviewSchema, type UserReviewInput, type UserReviewOutput }; diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index ba31f9be02..fa62d484a5 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -49,4 +49,7 @@ const voteActionSchema: GenericSchema = inter ) ]); -export { voteActionSchema, type VoteActionInput, type VoteActionOutput }; +/** @deprecated Use Valibot.parse(voteActionSchema) instead. Will be removed on or after 2028-04-23. */ +const parseVoteAction = (voteAction: VoteActionInput): VoteActionOutput => parse(voteActionSchema, voteAction); + +export { parseVoteAction, voteActionSchema, type VoteActionInput, type VoteActionOutput }; From ad9f42f5704ba6cbbb73e37bb3afda2043e1a42d Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 19:35:00 +0000 Subject: [PATCH 019/108] Readd and deprecate parseXXX --- packages/core/src/index.ts | 14 ++++++++++++++ .../core/src/types/external/OrgSchema/Thing.ts | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index dec4cdf361..5a7f7ea94d 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -38,6 +38,13 @@ import createStore, { withDevTools as createStoreWithDevTools, withOptions as createStoreWithOptions } from './createStore'; +import { parseAction } from './types/external/OrgSchema/Action'; +import { parseClaim } from './types/external/OrgSchema/Claim'; +import { parseCreativeWork } from './types/external/OrgSchema/CreativeWork'; +import { parseDefinedTerm } from './types/external/OrgSchema/DefinedTerm'; +import { parseProject } from './types/external/OrgSchema/Project'; +import { parseThing } from './types/external/OrgSchema/Thing'; +import { parseVoteAction } from './types/external/OrgSchema/VoteAction'; import getActivityLivestreamingMetadata from './utils/getActivityLivestreamingMetadata'; import getOrgSchemaMessage from './utils/getOrgSchemaMessage'; import onErrorResumeNext from './utils/onErrorResumeNext'; @@ -114,6 +121,13 @@ export { markActivity, muteVoiceRecording, onErrorResumeNext, + parseAction, + parseClaim, + parseCreativeWork, + parseDefinedTerm, + parseProject, + parseThing, + parseVoteAction, postActivity, postVoiceActivity, registerVoiceHandler, diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index fbd5e39bbb..2d288ff2ce 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -1,7 +1,7 @@ import { lazy, literal, looseObject, optional, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; -import orgSchemaProperties from './private/orgSchemaProperties'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; +import orgSchemaProperties from './private/orgSchemaProperties'; /** * The most generic type of item. From e41c583c8358f6878da9d867db51de7208d00a61 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 19:39:59 +0000 Subject: [PATCH 020/108] Add available/install Co-authored-by: Copilot --- .../bundle/src/createBrowserWebSpeechPonyfillFactory.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/bundle/src/createBrowserWebSpeechPonyfillFactory.ts b/packages/bundle/src/createBrowserWebSpeechPonyfillFactory.ts index 1982e759e3..4c18d61956 100644 --- a/packages/bundle/src/createBrowserWebSpeechPonyfillFactory.ts +++ b/packages/bundle/src/createBrowserWebSpeechPonyfillFactory.ts @@ -11,7 +11,14 @@ export default function createBrowserWebSpeechPonyfillFactory(): () => WebSpeech return () => ({ SpeechGrammarList: window.SpeechGrammarList || window.webkitSpeechGrammarList, - SpeechRecognition: window.SpeechRecognition || window.webkitSpeechRecognition, + SpeechRecognition: + window.SpeechRecognition || + (window.webkitSpeechRecognition + ? Object.assign(window.webkitSpeechRecognition, { + available: (): Promise => Promise.resolve('unavailable'), + install: (): Promise => Promise.resolve(false) + }) + : undefined), speechSynthesis: window.speechSynthesis, SpeechSynthesisUtterance: window.SpeechSynthesisUtterance }); From 1961f956aafe806856be80a5e15c00551ca74fae Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 19:47:56 +0000 Subject: [PATCH 021/108] Fix updated OrgSchemaXXX signature --- packages/core/src/index.ts | 49 +++++++++++++------ .../activity/CopilotMessageHeader.tsx | 4 +- .../activity/PartGroupingDecorator.tsx | 3 +- .../activity/private/useActivityAuthor.ts | 17 ++++--- 4 files changed, 50 insertions(+), 23 deletions(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 5a7f7ea94d..4376cfe3c4 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -90,13 +90,41 @@ import type { DirectLineSuggestedAction } from './types/external/DirectLineSugge import type { DirectLineThumbnailCard } from './types/external/DirectLineThumbnailCard'; import type { DirectLineVideoCard } from './types/external/DirectLineVideoCard'; import type { Observable } from './types/external/Observable'; -import type { ActionOutput as OrgSchemaAction } from './types/external/OrgSchema/Action'; -import type { ClaimOutput as OrgSchemaClaim } from './types/external/OrgSchema/Claim'; -import type { CreativeWorkOutput as OrgSchemaCreativeWork } from './types/external/OrgSchema/CreativeWork'; -import type { DefinedTermOutput as OrgSchemaDefinedTerm } from './types/external/OrgSchema/DefinedTerm'; -import type { ProjectOutput as OrgSchemaProject } from './types/external/OrgSchema/Project'; -import type { ThingOutput as OrgSchemaThing } from './types/external/OrgSchema/Thing'; -import type { UserReviewOutput as OrgSchemaUserReview } from './types/external/OrgSchema/UserReview'; + +// #region Schema.org +export { + actionSchema as orgSchemaActionSchema, + type ActionOutput as OrgSchemaAction +} from './types/external/OrgSchema/Action'; +export { + claimSchema as orgSchemaClaimSchema, + type ClaimOutput as OrgSchemaClaim +} from './types/external/OrgSchema/Claim'; +export { + creativeWorkSchema as orgSchemaCreativeWorkSchema, + type CreativeWorkOutput as OrgSchemaCreativeWork +} from './types/external/OrgSchema/CreativeWork'; +export { + definedTermSchema as orgSchemaDefinedTermSchema, + type DefinedTermOutput as OrgSchemaDefinedTerm +} from './types/external/OrgSchema/DefinedTerm'; +export { + personSchema as orgSchemaPersonSchema, + type PersonOutput as OrgSchemaPerson +} from './types/external/OrgSchema/Person'; +export { + projectSchema as orgSchemaProjectSchema, + type ProjectOutput as OrgSchemaProject +} from './types/external/OrgSchema/Project'; +export { + thingSchema as orgSchemaThingSchema, + type ThingOutput as OrgSchemaThing +} from './types/external/OrgSchema/Thing'; +export { + userReviewSchema as orgSchemaUserReviewSchema, + type UserReviewOutput as OrgSchemaUserReview +} from './types/external/OrgSchema/UserReview'; +// #endregion /** @deprecated */ export { singleToArray, type OneOrMany } from '@msinternal/botframework-webchat-base/utils'; @@ -172,13 +200,6 @@ export type { DirectLineVideoCard, GlobalScopePonyfill, Observable, - OrgSchemaAction, - OrgSchemaClaim, - OrgSchemaCreativeWork, - OrgSchemaDefinedTerm, - OrgSchemaProject, - OrgSchemaThing, - OrgSchemaUserReview, SendBoxAttachment, VoiceHandler, VoiceState, diff --git a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx index dc94b534db..24e0962f96 100644 --- a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx +++ b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx @@ -37,8 +37,8 @@ function CopilotMessageHeader(props: CopilotMessageHeaderProps) { ); const author = useActivityAuthor(activity); - const avatarImage = author?.image || botAvatarImage; - const botTitle = author?.name || activity?.from?.name; + const avatarImage = author?.image?.[0] || botAvatarImage; + const botTitle = author?.name?.[0] || activity?.from?.name?.[0]; return (
diff --git a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx index 31b4e6626d..487f712fba 100644 --- a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx +++ b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx @@ -39,7 +39,8 @@ function PartGroupingDecorator(props: PartGroupingDecoratorProps) { const isInGroup = useMemo( () => - restActivities.length > 0 || !!(activity?.entities && getOrgSchemaMessage(activity.entities)?.isPartOf?.['@id']), + restActivities.length > 0 || + !!(activity?.entities && getOrgSchemaMessage(activity.entities)?.isPartOf?.[0]?.['@id']), [activity, restActivities.length] ); diff --git a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts index 215d38053c..353ea260b2 100644 --- a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts +++ b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts @@ -1,16 +1,21 @@ +import { orgSchemaPersonSchema, type OrgSchemaPerson } from 'botframework-webchat-core'; import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal'; import { useMemo } from 'react'; +import { parse } from 'valibot'; -export default function useActivityAuthor(activity?: WebChatActivity | undefined) { +export default function useActivityAuthor(activity?: WebChatActivity | undefined): OrgSchemaPerson | undefined { return useMemo(() => { const entity = getOrgSchemaMessage(activity?.entities || []); - return typeof entity?.author === 'string' - ? { + + const [firstAuthor] = entity?.author ?? []; + + return typeof firstAuthor === 'string' + ? parse(orgSchemaPersonSchema, { '@type': 'Person', description: undefined, image: undefined, - name: entity?.author - } - : entity?.author; + name: firstAuthor + }) + : firstAuthor; }, [activity]); } From 456e147d440a16367583c61ea3a86b9fb93a4dea Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:07:41 +0000 Subject: [PATCH 022/108] Add lazy --- packages/core/src/types/external/OrgSchema/Action.ts | 2 +- packages/core/src/types/external/OrgSchema/Claim.ts | 2 +- packages/core/src/types/external/OrgSchema/CreativeWork.ts | 2 +- packages/core/src/types/external/OrgSchema/DefinedTerm.ts | 4 ++-- packages/core/src/types/external/OrgSchema/Person.ts | 4 ++-- packages/core/src/types/external/OrgSchema/Project.ts | 4 ++-- packages/core/src/types/external/OrgSchema/UserReview.ts | 4 ++-- packages/core/src/types/external/OrgSchema/VoteAction.ts | 4 ++-- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index dff645b29d..5029160eb6 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -77,7 +77,7 @@ type ActionOutput = ThingOutput & { }; const actionSchema: GenericSchema = intersect([ - thingSchema, + lazy(() => thingSchema), pipe( looseObject({ actionOption: orgSchemaProperties(string()), diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index aadeed2c7f..e1ac7650a6 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -55,7 +55,7 @@ type ClaimOutput = CreativeWorkOutput & { }; const claimSchema: GenericSchema = intersect([ - creativeWorkSchema, + lazy(() => creativeWorkSchema), pipe( looseObject({ appearance: orgSchemaProperties(lazy(() => creativeWorkSchema)), diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 881c61059c..768eba6d42 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -176,7 +176,7 @@ type CreativeWorkOutput = ThingOutput & { }; const creativeWorkSchema: GenericSchema = intersect([ - thingSchema, + lazy(() => thingSchema), pipe( looseObject({ // For forward compatibility, we did not enforce @type must be "CreativeWork" or any other subtypes. diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index 37374d3111..1fab65fa3f 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -50,7 +50,7 @@ type DefinedTermOutput = ThingOutput & { }; const definedTermSchema: GenericSchema = intersect([ - thingSchema, + lazy(() => thingSchema), pipe( looseObject({ inDefinedTermSet: orgSchemaProperties(string()), diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index fab7e5ca92..f81dd629fd 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -15,7 +15,7 @@ type PersonOutput = ThingOutput & { }; const personSchema: GenericSchema = intersect([ - thingSchema, + lazy(() => thingSchema), pipe( looseObject({ description: orgSchemaProperties(string()), diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index 1bf378f566..febf05b51e 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, parse, pipe, readonly, string } from 'valibot'; +import { intersect, lazy, looseObject, parse, pipe, readonly, string } from 'valibot'; import orgSchemaProperties from './private/orgSchemaProperties'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -43,7 +43,7 @@ type ProjectOutput = ThingOutput & { * @see https://schema.org/Project */ const projectSchema = intersect([ - thingSchema, + lazy(() => thingSchema), pipe( looseObject({ /** diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index 721338555f..a6c3a00a06 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import orgSchemaProperty from './private/orgSchemaProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -32,7 +32,7 @@ type UserReviewOutput = ThingOutput & { }; const userReviewSchema: GenericSchema = intersect([ - thingSchema, + lazy(() => thingSchema), pipe( looseObject({ reviewAspect: orgSchemaProperty(string()) diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index fa62d484a5..6dd03df907 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,4 +1,4 @@ -import { intersect, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -40,7 +40,7 @@ type VoteActionOutput = ActionOutput & { }; const voteActionSchema: GenericSchema = intersect([ - actionSchema, + lazy(() => actionSchema), pipe( looseObject({ actionOption: orgSchemaProperties(string()) From aa437e1a2dfdf70a19620776b340f24a217a773c Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:15:38 +0000 Subject: [PATCH 023/108] Add ignoreDeprecations --- packages/styles/src/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/styles/src/tsconfig.json b/packages/styles/src/tsconfig.json index ea28358425..fce7ed7bb2 100644 --- a/packages/styles/src/tsconfig.json +++ b/packages/styles/src/tsconfig.json @@ -1,7 +1,8 @@ { "compilerOptions": { "allowSyntheticDefaultImports": true, - "checkJs": false + "checkJs": false, + "ignoreDeprecations": "6.0" // Required for tsup@8.5.1 to work in typescript@6.0.3 }, "extends": ["@msinternal/botframework-webchat-tsconfig/current", "./build/tsconfig.json"] } From 39b5f2323bc1fd7cdff1a21b8ed51ed3d4724965 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:16:38 +0000 Subject: [PATCH 024/108] Move ignoreDeprecations --- packages/styles/src/build/tsconfig.json | 1 + packages/styles/src/tsconfig.json | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/styles/src/build/tsconfig.json b/packages/styles/src/build/tsconfig.json index fb7143e3bd..873eefab5c 100644 --- a/packages/styles/src/build/tsconfig.json +++ b/packages/styles/src/build/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "ignoreDeprecations": "6.0", // Required for tsup@8.5.1 to work in typescript@6.0.3 "module": "nodenext", "moduleResolution": "nodenext", "types": ["node"] diff --git a/packages/styles/src/tsconfig.json b/packages/styles/src/tsconfig.json index fce7ed7bb2..ea28358425 100644 --- a/packages/styles/src/tsconfig.json +++ b/packages/styles/src/tsconfig.json @@ -1,8 +1,7 @@ { "compilerOptions": { "allowSyntheticDefaultImports": true, - "checkJs": false, - "ignoreDeprecations": "6.0" // Required for tsup@8.5.1 to work in typescript@6.0.3 + "checkJs": false }, "extends": ["@msinternal/botframework-webchat-tsconfig/current", "./build/tsconfig.json"] } From 4c317b8421ca528b15eb884b7cc6efb7778939a1 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:32:25 +0000 Subject: [PATCH 025/108] Fix precommit --- packages/core/src/tsconfig.json | 2 +- .../preChatActivity/PreChatMessageActivity.tsx | 6 +++--- packages/fluent-theme/src/private/composePipeline.tsx | 10 +++++++--- packages/tsconfig/src/current/tsconfig.json | 3 +-- packages/tsconfig/src/legacy/tsconfig.json | 3 +-- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/core/src/tsconfig.json b/packages/core/src/tsconfig.json index 747faad1a8..e3e3e28de9 100644 --- a/packages/core/src/tsconfig.json +++ b/packages/core/src/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "types": [] + "strict": false }, "exclude": ["**/*.spec.ts"], "extends": "@msinternal/botframework-webchat-tsconfig/legacy" diff --git a/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx b/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx index 440ecb9a65..c0bfa4ca37 100644 --- a/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx +++ b/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx @@ -21,7 +21,7 @@ const PreChatMessageActivity = ({ activity }: Props) => { const author = useActivityAuthor(activity); const html = useMemo( - () => (renderMarkdownAsHTML ? { __html: renderMarkdownAsHTML(author?.description || '') } : { __html: '' }), + () => (renderMarkdownAsHTML ? { __html: renderMarkdownAsHTML(author?.description?.[0] || '') } : { __html: '' }), [author?.description, renderMarkdownAsHTML] ); @@ -36,9 +36,9 @@ const PreChatMessageActivity = ({ activity }: Props) => { > {author.image && ( {localize('AVATAR_ALT', )} {author.name &&

{author.name}

} diff --git a/packages/fluent-theme/src/private/composePipeline.tsx b/packages/fluent-theme/src/private/composePipeline.tsx index 810e2f3ad6..53ae1c9a1d 100644 --- a/packages/fluent-theme/src/private/composePipeline.tsx +++ b/packages/fluent-theme/src/private/composePipeline.tsx @@ -39,11 +39,15 @@ export function composePipeline< return StageWrapper; }, PassthroughComponent); - return memo(function Pipeline(props: PipelineProps) { + const Pipeline: PipelineComponent = function Pipeline(props: PipelineProps) { const { request, ...restProps } = props; return ; - }); + }; + + Pipeline.displayName = 'Pipeline'; + + return memo(Pipeline); } -export type { NextComponent, PipelineProps, PipelineComponent, StageComponent }; +export type { NextComponent, PipelineComponent, PipelineProps, StageComponent }; diff --git a/packages/tsconfig/src/current/tsconfig.json b/packages/tsconfig/src/current/tsconfig.json index 621d2f0632..c0914a8868 100644 --- a/packages/tsconfig/src/current/tsconfig.json +++ b/packages/tsconfig/src/current/tsconfig.json @@ -6,8 +6,7 @@ "moduleResolution": "Bundler", "noEmit": true, "skipLibCheck": true, - "target": "ESNext", - "types": [] // Platform neutrality: disable loading default types + "target": "ESNext" }, "extends": "@tsconfig/strictest/tsconfig.json" } diff --git a/packages/tsconfig/src/legacy/tsconfig.json b/packages/tsconfig/src/legacy/tsconfig.json index e0372e43ea..c808fddff1 100644 --- a/packages/tsconfig/src/legacy/tsconfig.json +++ b/packages/tsconfig/src/legacy/tsconfig.json @@ -8,7 +8,6 @@ "noEmit": true, "skipLibCheck": true, "sourceMap": true, - "target": "ESNext", - "types": [] // Platform neutrality: disable loading default types + "target": "ESNext" } } From 5fb14318d6fd236b60fe3d19adbd88ebfb987e0b Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:39:57 +0000 Subject: [PATCH 026/108] Remove deprecated tests --- .../deprecated.hideScrollToEndButton.html | 69 ------------------ ...ated.hideScrollToEndButton.html.snap-1.png | Bin 59896 -> 0 bytes ...ated.hideScrollToEndButton.html.snap-2.png | Bin 61747 -> 0 bytes .../deprecated.newMessageButtonFontSize.html | 52 ------------- ...d.newMessageButtonFontSize.html.snap-1.png | Bin 64326 -> 0 bytes 5 files changed, 121 deletions(-) delete mode 100644 __tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html delete mode 100644 __tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html.snap-1.png delete mode 100644 __tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html.snap-2.png delete mode 100644 __tests__/html2/styleOptions/deprecated.newMessageButtonFontSize.html delete mode 100644 __tests__/html2/styleOptions/deprecated.newMessageButtonFontSize.html.snap-1.png diff --git a/__tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html b/__tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html deleted file mode 100644 index c9d4154cd4..0000000000 --- a/__tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - -
- - - diff --git a/__tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html.snap-1.png b/__tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html.snap-1.png deleted file mode 100644 index 31cd732ab9c89a85e00f75eff46305c1a249e74e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59896 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 z

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 diff --git a/__tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html.snap-2.png b/__tests__/html2/styleOptions/deprecated.hideScrollToEndButton.html.snap-2.png deleted file mode 100644 index 48d7243e1d76632431e0930a1a68c38a723cdf58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61747 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 z

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 - - - - - - - - -

- - - diff --git a/__tests__/html2/styleOptions/deprecated.newMessageButtonFontSize.html.snap-1.png b/__tests__/html2/styleOptions/deprecated.newMessageButtonFontSize.html.snap-1.png deleted file mode 100644 index 43a8b6494b7a97ec5b1c9a88cec9af84c30d34a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64326 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ΠSOV-r0I6F?j@pdT%A+S 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⋙^^ll*7*JueE zs@G9{rcPM6;^_(i;3%X51Xm6g-hAga2Z7QCaBJVrX!G10j7h*?O{8vs{T@x_c6i-aDOS&M zNNi)6;FSy|AM2eVEl*kXq5$1-h7gyJG2gq|`9Dnboq({Qzud9XGYOV2OV3eGUP4tg%fF((O7#xclrLxW!O3*%m>br0ed1aixEtjv)>$*uKV7*Tpj? z7aGK-^ju+N=b^w^OSyTsX!dyag*sW?d$F)IuFRMxle;d`8jDe-5(gB!2qe|4!>yhA_M4_K0Nr^8`%d=n;|-K&jgAO0hcG?j00<)Pb+3 z<!s+nb6l{Qc@HrSeiv9%(tR=DTd}7G z)nUZJ=%q>2{nT>0Yg?r_gs9E?sFpwA_92j>T>Y}8VEMKBZp&K)r9;nx~w6D}tyNh3XrdUO*SJx?UBRCsAS zYShs<+w*dj4nY}zdYO8D_{t+n;b2M*58kJFFvrMop8S`3AKFh)=YeC;#x{!ud1ypw z``(8C6HV{UaL7&6_cFHAtUcz$@2}}U1Uh`5XbKdTQ&MNJqIX)3ZxjUoU}rKe7POS` z8EIV7$1s}P97k0ZT4Ld4zJ`g{qqD4CtUvYSE=!??$5N_1A-K!wB&d+vQMOo`P9H1q zc$&+8!K_K}Cb47OYRoi{{^{C5}Yk%~)*l zLMUFqYP6<|o`AK$_g;^vHSrAhqbA#yEwGRq^V*`N?O_&!=L0(9FKYWAMv390>37^e zcV!!kJ}jEUTTz60eyL#Ija0pa#s(EDowHE(9-6ijvaJL|mUq+p#b2%cDY@$xiRDgC z(;X;I-Ln8Jl{ShzT!JMJ^L$u59bN$76+Ma-3uc6$ zMrvmh`BgdX;rlSp!u)`sd$0h82aOWP&&r-*S)VtlfY~U0c4`fd<(FFa#YE!$(es}3 zZto)iY$qeN8CGBApsZ6QwFrvY}yQ+9G9=Cyzy5#Lq-IzMR zwVF;jbEoO8XOR)ww|n?7494Kn@Gk;vWU+H(1OjtH2wqDLT){4yYu=u}dkg&66G@oE z0B+?d=9?J<$8s3z;wbSvjG;!Vpq@I{~4&!MM2j4QS!FRCXiWIRku&=wty01 zqD#y-pcvmJ1niBXkLc{$&3t1*$+@-Gn7|mk&d38*zO=tt{_1U>VSjP7F_Czyy|&=F6WjNY`0};W-B?{+Wyv&UklXXxa#U3}xn}gM#^C=` v-u*At-@iv_XlQqLD$^|8-~~3Sq{Kio Date: Thu, 23 Apr 2026 20:40:18 +0000 Subject: [PATCH 027/108] StrictStyleOptions as first-class citizen --- .../src/adaptiveCards/AdaptiveCardsStyleOptions.ts | 14 +++++++------- .../bundle/src/fullBundleDefaultStyleOptions.ts | 4 ++-- .../bundle/src/types/FullBundleStyleOptions.ts | 3 +-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/bundle/src/adaptiveCards/AdaptiveCardsStyleOptions.ts b/packages/bundle/src/adaptiveCards/AdaptiveCardsStyleOptions.ts index e37e06ad78..b63949f4af 100644 --- a/packages/bundle/src/adaptiveCards/AdaptiveCardsStyleOptions.ts +++ b/packages/bundle/src/adaptiveCards/AdaptiveCardsStyleOptions.ts @@ -1,32 +1,32 @@ /** * Adaptive Cards styling */ -type AdaptiveCardsStyleOptions = { +type StrictAdaptiveCardsStyleOptions = { /** Adaptive Cards: Specify the maximum schema version supported by the Adaptive Card serializer. */ - adaptiveCardsParserMaxVersion?: string; + adaptiveCardsParserMaxVersion: string | undefined; /** * Adaptive Cards styling for 'emphasis' container style */ - cardEmphasisBackgroundColor?: string; + cardEmphasisBackgroundColor: string | undefined; /** * Adaptive Cards: background color of Adaptive Cards button with status of 'aria-pressed' */ - cardPushButtonBackgroundColor?: string; + cardPushButtonBackgroundColor: string | undefined; /** * Adaptive Cards: text color of Adaptive Cards button with status of 'aria-pressed' */ - cardPushButtonTextColor?: string; + cardPushButtonTextColor: string | undefined; /** * Cards: Rich Cards * Enable title (and subtitle) wrapping */ - richCardWrapTitle?: boolean; + richCardWrapTitle: boolean | undefined; }; -type StrictAdaptiveCardsStyleOptions = Required; +type AdaptiveCardsStyleOptions = Partial; export type { AdaptiveCardsStyleOptions, StrictAdaptiveCardsStyleOptions }; diff --git a/packages/bundle/src/fullBundleDefaultStyleOptions.ts b/packages/bundle/src/fullBundleDefaultStyleOptions.ts index 1d33057848..bf7a3c5e93 100644 --- a/packages/bundle/src/fullBundleDefaultStyleOptions.ts +++ b/packages/bundle/src/fullBundleDefaultStyleOptions.ts @@ -1,9 +1,9 @@ import { defaultStyleOptions } from 'botframework-webchat-api'; import adaptiveCardsDefaultStyleOptions from './adaptiveCards/defaultStyleOptions'; -import FullBundleStyleOptions from './types/FullBundleStyleOptions'; +import { type StrictFullBundleStyleOptions } from './types/FullBundleStyleOptions'; -const fullBundleDefaultStyleOptions: Required = { +const fullBundleDefaultStyleOptions: StrictFullBundleStyleOptions = { ...defaultStyleOptions, ...adaptiveCardsDefaultStyleOptions }; diff --git a/packages/bundle/src/types/FullBundleStyleOptions.ts b/packages/bundle/src/types/FullBundleStyleOptions.ts index efed1f43cf..4ac50020c5 100644 --- a/packages/bundle/src/types/FullBundleStyleOptions.ts +++ b/packages/bundle/src/types/FullBundleStyleOptions.ts @@ -8,5 +8,4 @@ import { type FullBundleStyleOptions = StyleOptions & AdaptiveCardsStyleOptions; type StrictFullBundleStyleOptions = StrictStyleOptions & StrictAdaptiveCardsStyleOptions; -export default FullBundleStyleOptions; -export { StrictFullBundleStyleOptions }; +export type { FullBundleStyleOptions, StrictFullBundleStyleOptions }; From 2f07742b8c1bf5bf7aa7f2a2455e95a225310ce8 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:40:39 +0000 Subject: [PATCH 028/108] Fix ESLint on deps --- packages/component/src/hooks/internal/useMemoized.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/component/src/hooks/internal/useMemoized.ts b/packages/component/src/hooks/internal/useMemoized.ts index 9e94e64693..8fe7d6fbae 100644 --- a/packages/component/src/hooks/internal/useMemoized.ts +++ b/packages/component/src/hooks/internal/useMemoized.ts @@ -62,7 +62,7 @@ export default function useMemoized(fn: Fn, deps: return memoizedFn; }, // Concat our deps with passed deps, so the memo callback runs when anything changes - /* eslint-disable-next-line react-hooks/exhaustive-deps */ + /* eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo */ [fnRef, cacheRef, nextCacheRef, ...deps] ); From cc27bfa5be45358c8df9db5725aebbace8d68700 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:43:50 +0000 Subject: [PATCH 029/108] Remove unnecessary ESLint overrides --- packages/api/src/decorator/private/templateDecorator.tsx | 2 -- packages/api/src/normalizeStyleOptions.ts | 1 - 2 files changed, 3 deletions(-) diff --git a/packages/api/src/decorator/private/templateDecorator.tsx b/packages/api/src/decorator/private/templateDecorator.tsx index f4269248a9..cb80e1f6c6 100644 --- a/packages/api/src/decorator/private/templateDecorator.tsx +++ b/packages/api/src/decorator/private/templateDecorator.tsx @@ -63,8 +63,6 @@ export default function templateDecorator< const buildMiddleware = useBuildComponentCallback(); const Proxy = useMemo(() => buildMiddleware(undefined, { fallbackComponent: FinalComponent }), [buildMiddleware]); - // is middleware component and is static. - // eslint-disable-next-line react-hooks/static-components return Proxy && ; } diff --git a/packages/api/src/normalizeStyleOptions.ts b/packages/api/src/normalizeStyleOptions.ts index 4766d960fb..7946d2e6fb 100644 --- a/packages/api/src/normalizeStyleOptions.ts +++ b/packages/api/src/normalizeStyleOptions.ts @@ -19,7 +19,6 @@ const bubbleMinWidthDeprecation = warnOnce( // "styleSet" is actually CSS stylesheet and it is based on the DOM tree. // DOM tree may change from time to time, thus, maintaining "styleSet" becomes a constant effort. -// eslint-disable-next-line complexity export default function normalizeStyleOptions({ bubbleImageHeight, bubbleMaxWidth, From 1b42ff062fb44343d3313a00c16989bdfe6a1fd0 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:43:52 +0000 Subject: [PATCH 030/108] Fix import --- .../src/providers/StyleOptions/private/rectifyStyleOptions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts b/packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts index fd97656e52..ae0da6edae 100644 --- a/packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts +++ b/packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts @@ -1,4 +1,4 @@ -import type { StrictStyleOptions, default as StyleOptions } from '../../../StyleOptions'; +import type { StrictStyleOptions, StyleOptions } from '../../../StyleOptions'; import normalizeStyleOptions from '../../../normalizeStyleOptions'; import patchStyleOptionsFromDeprecatedProps from '../../../patchStyleOptionsFromDeprecatedProps'; From 1df63936f82c6391a6adde2f6a3a5dbf1507c401 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:46:40 +0000 Subject: [PATCH 031/108] Fix imports --- .../src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts | 2 +- .../bundle/src/adaptiveCards/Styles/adaptiveCardHostConfig.ts | 2 +- packages/bundle/src/boot/actual/styleOptions/full.ts | 2 +- packages/bundle/src/createFullStyleSet.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/bundle/src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts b/packages/bundle/src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts index e6f1a7bd81..24cf519e65 100644 --- a/packages/bundle/src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts +++ b/packages/bundle/src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts @@ -1,4 +1,4 @@ -import FullBundleStyleOptions from '../../../types/FullBundleStyleOptions'; +import type { FullBundleStyleOptions } from '../../../types/FullBundleStyleOptions'; export default function ({ cardPushButtonBackgroundColor, diff --git a/packages/bundle/src/adaptiveCards/Styles/adaptiveCardHostConfig.ts b/packages/bundle/src/adaptiveCards/Styles/adaptiveCardHostConfig.ts index 736ad97073..3c51792518 100644 --- a/packages/bundle/src/adaptiveCards/Styles/adaptiveCardHostConfig.ts +++ b/packages/bundle/src/adaptiveCards/Styles/adaptiveCardHostConfig.ts @@ -1,6 +1,6 @@ import { normalizeStyleOptions } from 'botframework-webchat-api'; -import FullBundleStyleOptions from '../../types/FullBundleStyleOptions'; +import type { FullBundleStyleOptions } from '../../types/FullBundleStyleOptions'; import normalizeAdaptiveCardsStyleOptions from '../normalizeStyleOptions'; // https://docs.microsoft.com/en-us/adaptive-cards/rendering-cards/host-config diff --git a/packages/bundle/src/boot/actual/styleOptions/full.ts b/packages/bundle/src/boot/actual/styleOptions/full.ts index 252a100f64..2e3c503422 100644 --- a/packages/bundle/src/boot/actual/styleOptions/full.ts +++ b/packages/bundle/src/boot/actual/styleOptions/full.ts @@ -1,4 +1,4 @@ export { type StrictFullBundleStyleOptions as StrictStyleOptions, - type default as StyleOptions + type FullBundleStyleOptions as StyleOptions } from '../../../types/FullBundleStyleOptions'; diff --git a/packages/bundle/src/createFullStyleSet.ts b/packages/bundle/src/createFullStyleSet.ts index 148ce5f6fa..1fa6d704f5 100644 --- a/packages/bundle/src/createFullStyleSet.ts +++ b/packages/bundle/src/createFullStyleSet.ts @@ -1,7 +1,7 @@ import { createStyleSet } from 'botframework-webchat-component'; import createAdaptiveCardsStyleSet from './adaptiveCards/Styles/createAdaptiveCardsStyleSet'; -import FullBundleStyleOptions from './types/FullBundleStyleOptions'; +import type { FullBundleStyleOptions } from './types/FullBundleStyleOptions'; // TODO: [P4] We should add a notice for people who want to use "styleSet" instead of "styleOptions". // "styleSet" is actually CSS stylesheet and it is based on the DOM tree. From bf2d9121ec19b16a1d292f5ab07892db818e9df0 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 20:57:19 +0000 Subject: [PATCH 032/108] Fix ESLint --- packages/component/src/Composer.tsx | 6 ++++++ .../src/Transcript/useActivityAccessibleName.ts | 2 -- packages/component/src/Utils/InlineMarkdown.js | 5 +++++ .../component/src/hooks/useObserveScrollPosition.ts | 3 +++ .../component/src/hooks/useObserveTranscriptFocus.ts | 12 +++++++++--- .../src/hooks/useStreamingMarkdownWithDefinitions.ts | 2 ++ .../src/providers/LiveRegionTwin/useLiveRegion.ts | 2 +- 7 files changed, 26 insertions(+), 6 deletions(-) diff --git a/packages/component/src/Composer.tsx b/packages/component/src/Composer.tsx index ca3303dcd4..3495d8af33 100644 --- a/packages/component/src/Composer.tsx +++ b/packages/component/src/Composer.tsx @@ -250,11 +250,17 @@ const ComposerCore = ({ const getActivityByKey = useGetActivityByKey(); + // This is expected. + // The mutation is for preventing sending duplicates to the registered callback observers. + // eslint-disable-next-line react-hooks/immutability const dispatchTranscriptFocusByActivityKey = useMemo(() => { let prevActivityKey: string | symbol | undefined = Symbol(); return activityKey => { if (activityKey !== prevActivityKey) { + // This is expected. + // The mutation is for preventing sending duplicates to the registered callback observers. + // eslint-disable-next-line react-hooks/immutability prevActivityKey = activityKey; const event = { activity: getActivityByKey(activityKey) }; diff --git a/packages/component/src/Transcript/useActivityAccessibleName.ts b/packages/component/src/Transcript/useActivityAccessibleName.ts index 81300804bb..9e3d9d3473 100644 --- a/packages/component/src/Transcript/useActivityAccessibleName.ts +++ b/packages/component/src/Transcript/useActivityAccessibleName.ts @@ -111,8 +111,6 @@ export default function useActivityAccessibleName(activity: WebChatActivity, bod const hasWidgets = !!tabbableElements(bodyRef.current).length; interactiveTypeRef.current !== hasWidgets && - // TODO: [P2] Intentionally set the state, we will visit it later. - // eslint-disable-next-line react-hooks/set-state-in-effect setInteractiveType(hasLinks ? InteractiveType.LINK : hasWidgets ? InteractiveType.WIDGET : false); }, [bodyRef, interactiveTypeRef, setInteractiveType]); diff --git a/packages/component/src/Utils/InlineMarkdown.js b/packages/component/src/Utils/InlineMarkdown.js index e22fc4e051..14ab9bdf27 100644 --- a/packages/component/src/Utils/InlineMarkdown.js +++ b/packages/component/src/Utils/InlineMarkdown.js @@ -46,6 +46,9 @@ function replaceAnchorWithButton(markdownTokens) { const InlineMarkdown = ({ children, onReference, references }) => { if (typeof children !== 'string') { console.warn('botframework-webchat: "children" prop passed to must be of type string.'); + + // Shortcut for disabling invalid props. + // eslint-disable-next-line react-hooks/immutability children = ''; } @@ -80,6 +83,8 @@ const InlineMarkdown = ({ children, onReference, references }) => { ); // Markdown-It only support references in uppercase. + // Re-shaping input. + // eslint-disable-next-line react-hooks/immutability references = references.map(reference => reference.toUpperCase()); const { hrefToRef, refToHref } = references.reduce( diff --git a/packages/component/src/hooks/useObserveScrollPosition.ts b/packages/component/src/hooks/useObserveScrollPosition.ts index cb5b7432b9..cf36e71a92 100644 --- a/packages/component/src/hooks/useObserveScrollPosition.ts +++ b/packages/component/src/hooks/useObserveScrollPosition.ts @@ -8,7 +8,10 @@ export default function useObserveScrollPosition( deps: any[] ): void { if (typeof observer !== 'function') { + // This is for shortcutting invalid props. + // eslint-disable-next-line react-hooks/immutability observer = undefined; + console.warn('botframework-webchat: First argument passed to "useObserveScrollPosition" must be a function.'); } else if (typeof deps !== 'undefined' && !Array.isArray(deps)) { console.warn( diff --git a/packages/component/src/hooks/useObserveTranscriptFocus.ts b/packages/component/src/hooks/useObserveTranscriptFocus.ts index 6b39fb265e..ee5d4e4c7e 100644 --- a/packages/component/src/hooks/useObserveTranscriptFocus.ts +++ b/packages/component/src/hooks/useObserveTranscriptFocus.ts @@ -4,11 +4,14 @@ import type { WebChatActivity } from 'botframework-webchat-core'; import useWebChatUIContext from './internal/useWebChatUIContext'; export default function useObserveTranscriptFocus( - observer: (event: { activity: WebChatActivity }) => void, + observer: ((event: { activity: WebChatActivity }) => void) | undefined, deps: any[] ): void { if (typeof observer !== 'function') { + // Shortcut for disabling the observer. + // eslint-disable-next-line react-hooks/immutability observer = undefined; + console.warn('botframework-webchat: First argument passed to "useObserveTranscriptFocus" must be a function.'); } else if (typeof deps !== 'undefined' && !Array.isArray(deps)) { console.warn( @@ -18,6 +21,9 @@ export default function useObserveTranscriptFocus( const { observeTranscriptFocus } = useWebChatUIContext(); - /* eslint-disable-next-line react-hooks/exhaustive-deps */ - useEffect(() => observer && observeTranscriptFocus(observer), [...(deps || []), observer, observeTranscriptFocus]); + useEffect( + () => observer && observeTranscriptFocus(observer), + // eslint-disable-next-line react-hooks/exhaustive-deps + [...(deps || []), observer, observeTranscriptFocus] + ); } diff --git a/packages/component/src/hooks/useStreamingMarkdownWithDefinitions.ts b/packages/component/src/hooks/useStreamingMarkdownWithDefinitions.ts index 0f51804c66..88f36e6d22 100644 --- a/packages/component/src/hooks/useStreamingMarkdownWithDefinitions.ts +++ b/packages/component/src/hooks/useStreamingMarkdownWithDefinitions.ts @@ -83,6 +83,8 @@ export default function useStreamingMarkdownWithDefinitions( // starts clean, but the streaming effect can still set definitions on the same commit. useLayoutEffect(() => { previousMarkdownRef.current = ''; + + // eslint-disable-next-line react-hooks/set-state-in-effect setDefinitions(EMPTY_DEFINITIONS); }, [streamingRenderer]); diff --git a/packages/component/src/providers/LiveRegionTwin/useLiveRegion.ts b/packages/component/src/providers/LiveRegionTwin/useLiveRegion.ts index 687cd05a85..7e9c70a300 100644 --- a/packages/component/src/providers/LiveRegionTwin/useLiveRegion.ts +++ b/packages/component/src/providers/LiveRegionTwin/useLiveRegion.ts @@ -22,6 +22,6 @@ export default function useLiveRegion( const node = createNodeRef?.current(); node && queueStaticElement(node); - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo }, [...deps, createNodeRef, queueStaticElement]); } From cef14ff33f8c3569bf4eab1883df4c5bbd40b1c8 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 22:25:54 +0000 Subject: [PATCH 033/108] Fix new Schema.org "output is always array" --- .../createDefaultGroupActivitiesMiddleware.ts | 4 +- .../component/src/Activity/StackedLayout.tsx | 56 ++++++------ .../providers/ActivityFeedbackComposer.tsx | 34 ++++--- .../ActivityStatus/OthersActivityStatus.tsx | 20 +++-- .../Text/private/MarkdownTextContent.tsx | 88 ++++++++++--------- .../private/isBasedOnSoftwareSourceCode.ts | 18 ---- .../defaultActivityPolymiddleware.tsx | 10 ++- .../ui/PartGrouping/PartGrouping.tsx | 2 +- .../private/PartGroupingActivity.tsx | 14 +-- .../getFirstBaseOfSoftwareSourceCode.ts | 24 +++++ .../src/hooks/internal/useFeedbackActions.ts | 27 ++++-- packages/core/src/index.ts | 4 + .../private/getPartGroupingMetadataMap.ts | 23 +---- .../src/types/external/OrgSchema/Action.ts | 8 +- .../src/types/external/OrgSchema/Claim.ts | 4 +- .../types/external/OrgSchema/CreativeWork.ts | 45 ++++++---- .../types/external/OrgSchema/DefinedTerm.ts | 4 +- .../src/types/external/OrgSchema/Person.ts | 34 +++++-- .../src/types/external/OrgSchema/Project.ts | 4 +- .../external/OrgSchema/SoftwareSourceCode.ts | 48 ++++++++++ .../src/types/external/OrgSchema/Thing.ts | 27 ++---- .../types/external/OrgSchema/UserReview.ts | 6 +- .../types/external/OrgSchema/VoteAction.ts | 2 +- .../OrgSchema/private/orgSchemaProperties.ts | 28 ++++-- .../utils/getActivityLivestreamingMetadata.ts | 2 +- .../src/utils/getOrgSchemaMessage.spec.ts | 1 + .../activity/PartGroupingDecorator.tsx | 2 +- .../activity/private/useActivityAuthor.ts | 4 +- 28 files changed, 325 insertions(+), 218 deletions(-) delete mode 100644 packages/component/src/Attachment/Text/private/isBasedOnSoftwareSourceCode.ts create mode 100644 packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts create mode 100644 packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts diff --git a/packages/api/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts b/packages/api/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts index 72dcb16f81..9d1ad3de62 100644 --- a/packages/api/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts +++ b/packages/api/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts @@ -97,8 +97,8 @@ export default function createDefaultGroupActivitiesMiddleware({ return { ...next({ activities }), part: bin(messages, ([last], [current]) => { - const lastPartIdResult = safeParse(IdentifierSchema, last?.isPartOf?.['@id']); - const currentPartIdResult = safeParse(IdentifierSchema, current?.isPartOf?.['@id']); + const lastPartIdResult = safeParse(IdentifierSchema, last?.isPartOf[0]?.['@id']); + const currentPartIdResult = safeParse(IdentifierSchema, current?.isPartOf[0]?.['@id']); return ( lastPartIdResult.success && diff --git a/packages/component/src/Activity/StackedLayout.tsx b/packages/component/src/Activity/StackedLayout.tsx index 9e173e36fb..63808cafba 100644 --- a/packages/component/src/Activity/StackedLayout.tsx +++ b/packages/component/src/Activity/StackedLayout.tsx @@ -1,7 +1,8 @@ /* eslint complexity: ["error", 50] */ -import { hooks } from 'botframework-webchat-api'; +import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import type { RenderAttachment } from 'botframework-webchat-api'; +import { hooks } from 'botframework-webchat-api'; import { ActivityBorderDecorator } from 'botframework-webchat-api/decorator'; import { getActivityLivestreamingMetadata, @@ -11,15 +12,14 @@ import { isVoiceActivity, type WebChatActivity } from 'botframework-webchat-core'; -import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import cx from 'classnames'; import React, { memo, useCallback, useMemo, type ReactNode } from 'react'; -import isBasedOnSoftwareSourceCode from '../Attachment/Text/private/isBasedOnSoftwareSourceCode'; import ScreenReaderText from '../ScreenReaderText'; import isZeroOrPositive from '../Utils/isZeroOrPositive'; import textFormatToContentType from '../Utils/textFormatToContentType'; import useUniqueId from '../hooks/internal/useUniqueId'; +import { useGetLogicalGroupKey } from '../providers/ActivityLogicalGrouping'; import AttachmentRow from './AttachmentRow'; import Bubble from './Bubble'; import CodeBlockContent from './CodeBlockContent'; @@ -28,9 +28,9 @@ import StackedLayoutMain from './StackedLayoutMain'; import StackedLayoutMessageStatus from './StackedLayoutMessageStatus'; import StackedLayoutRoot from './StackedLayoutRoot'; import StackedLayoutStatus from './StackedLayoutStatus'; -import { useGetLogicalGroupKey } from '../providers/ActivityLogicalGrouping'; import styles from './StackedLayout.module.css'; +import getFirstBaseOfSoftwareSourceCode from '../Utils/orgSchema/getFirstBaseOfSoftwareSourceCode'; const { useAvatarForBot, useAvatarForUser, useLocalizer, useGetKeyByActivity, useStyleOptions } = hooks; @@ -73,7 +73,7 @@ const StackedLayoutInner = memo( return ( - {!!(hasDisplayText || messageThing?.abstract) && ( + {!!(hasDisplayText || messageThing?.abstract[0]) && (
- {renderBubbleContent(messageThing?.abstract)} + {renderBubbleContent(messageThing?.abstract[0])}
@@ -164,13 +164,13 @@ const StackedLayout = ({ const showAvatar = showCallout && hasAvatar && !!renderAvatar; const showNub = !isInGroup && showCallout && hasNub && (topAlignedCallout || !attachments?.length); - const showStatus = !!messageThing?.creativeWorkStatus || isInGroup; + const showStatus = !!messageThing?.creativeWorkStatus[0] || isInGroup; const renderMainBubbleContent = useCallback( (title = '', withStatus = true) => (
{withStatus && showStatus && ( - + )} {title &&
{title}
} {activityDisplayText && @@ -209,24 +209,28 @@ const StackedLayout = ({ ); } - if (isCollapsible && isBasedOnSoftwareSourceCode(messageThing)) { - syntheticAttachments.push( - - - - ); + showBubble={false} + > + + + ); + } } return syntheticAttachments.concat( @@ -261,7 +265,7 @@ const StackedLayout = ({ const renderCollapsibleBubbleContent = useCallback( (title = '') => (
- {showStatus && } + {showStatus && } action.result ? action - : { + : parse(orgSchemaActionSchema, { ...action, result: { '@type': 'UserReview', description: deprecatedFeedbackLoopChannelData?.disclaimer } - } + }) ); } @@ -141,7 +141,9 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { } const voteActions = Object.freeze( - graph.filter(({ type }) => type === 'https://schema.org/VoteAction').map(parseAction) + graph + .filter(({ type }) => type === 'https://schema.org/VoteAction') + .map(action => parse(orgSchemaActionSchema, action)) // TODO: Instead of processing VoteAction, convert it to LikeAction/DislikeAction. // .map(action => ({ // ...action, @@ -162,14 +164,15 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { useMemo(() => { const activeOrCompletedAction = rawActions.find( - (action): action is OrgSchemaAction & { actionStatus: 'ActiveActionStatus' | 'CompletedActionStatus' } => - action.actionStatus === 'ActiveActionStatus' || action.actionStatus === 'CompletedActionStatus' + (action): action is OrgSchemaAction & { actionStatus: ['ActiveActionStatus' | 'CompletedActionStatus'] } => + action.actionStatus?.length === 1 && + (action.actionStatus[0] === 'ActiveActionStatus' || action.actionStatus[0] === 'CompletedActionStatus') ); actionStateRef.current = activeOrCompletedAction ? { actionId: activeOrCompletedAction['@id'], - actionStatus: activeOrCompletedAction.actionStatus + actionStatus: activeOrCompletedAction.actionStatus?.[0] } : undefined; }, [rawActions]); @@ -177,15 +180,15 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { // Workaround ESLint on saying actionStateRef.current is redundant when using it directly. const actionStateForActions = actionStateRef.current; - const actions = useMemo( + const actions = useMemo( () => Object.freeze( rawActions.map(action => actionStateForActions && actionStateForActions.actionId === action['@id'] - ? Object.freeze({ ...action, actionStatus: actionStateForActions.actionStatus }) - : action.actionStatus === 'PotentialActionStatus' + ? Object.freeze({ ...action, actionStatus: [actionStateForActions.actionStatus] } satisfies OrgSchemaAction) + : action.actionStatus?.length === 1 && action.actionStatus?.[0] === 'PotentialActionStatus' ? action - : Object.freeze({ ...action, actionStatus: 'PotentialActionStatus' }) + : Object.freeze({ ...action, actionStatus: ['PotentialActionStatus'] } satisfies OrgSchemaAction) ) ), [actionStateForActions, rawActions] @@ -196,7 +199,8 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { const postActivity = usePostActivity(); const hasSubmitted = useMemo( - () => actions.some(action => action.actionStatus === 'CompletedActionStatus'), + () => + actions.some(action => action.actionStatus?.length === 1 && action.actionStatus?.[0] === 'CompletedActionStatus'), [actions] ); @@ -248,7 +252,9 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { const selectedAction = useMemo( () => actions.find( - ({ actionStatus }) => actionStatus === 'ActiveActionStatus' || actionStatus === 'CompletedActionStatus' + ({ actionStatus }) => + actionStatus?.length === 1 && + (actionStatus[0] === 'ActiveActionStatus' || actionStatus[0] === 'CompletedActionStatus') ), [actions] ); diff --git a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx index da35f46059..a20658c46f 100644 --- a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx +++ b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx @@ -3,13 +3,14 @@ import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import { hooks } from 'botframework-webchat-api'; import { getOrgSchemaMessage, + orgSchemaActionSchema, + orgSchemaClaimSchema, OrgSchemaProject, - parseAction, - parseClaim, type WebChatActivity } from 'botframework-webchat-core'; import cx from 'classnames'; import React, { memo, useMemo } from 'react'; +import { parse } from 'valibot'; import ActivityFeedback from '../ActivityFeedback/ActivityFeedback'; import dereferenceBlankNodes from '../Utils/JSONLinkedData/dereferenceBlankNodes'; @@ -38,23 +39,28 @@ const OthersActivityStatus = memo(({ activity, className, slotted }: Props) => { const claimInterpreter = useMemo(() => { try { if (messageThing) { - return parseClaim((messageThing?.citation || [])[0])?.claimInterpreter; + return parse(orgSchemaClaimSchema, (messageThing?.citation || [])[0])?.claimInterpreter?.[0]; } - const [firstClaim] = graph.filter(({ type }) => type === 'https://schema.org/Claim').map(parseClaim); + const [firstClaim] = graph + .filter(({ type }) => type === 'https://schema.org/Claim') + .map(claim => parse(orgSchemaClaimSchema, claim)); if (firstClaim) { warnRootLevelThings(); - return firstClaim?.claimInterpreter; + return firstClaim?.claimInterpreter?.[0]; } - const replyAction = parseAction(graph.find(({ type }) => type === 'https://schema.org/ReplyAction')); + const replyAction = parse( + orgSchemaActionSchema, + graph.find(({ type }) => type === 'https://schema.org/ReplyAction') + ); if (replyAction) { warnRootLevelThings(); - return replyAction?.provider; + return replyAction?.provider?.[0]; } } catch { // Intentionally left blank. diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index bcdb25687a..15aba971fd 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -4,14 +4,14 @@ import { hooks } from 'botframework-webchat-api'; import { getOrgSchemaMessage, onErrorResumeNext, - parseClaim, + orgSchemaClaimSchema, type OrgSchemaClaim, type WebChatActivity } from 'botframework-webchat-core'; import cx from 'classnames'; import React, { memo, useCallback, useMemo, useRef, type MouseEventHandler } from 'react'; import { useRefFrom } from 'use-ref-from'; -import { custom, object, optional, pipe, readonly, string, type InferInput } from 'valibot'; +import { custom, object, optional, parse, pipe, readonly, string, type InferInput } from 'valibot'; import ActivityFeedback from '../../../ActivityFeedback/ActivityFeedback'; import { LinkDefinitionItem, LinkDefinitions } from '../../../LinkDefinition/index'; @@ -21,17 +21,16 @@ import useStreamingMarkdownWithDefinitions, { type MarkdownLinkDefinition } from '../../../hooks/useStreamingMarkdownWithDefinitions'; import useShowModal from '../../../providers/ModalDialog/useShowModal'; -import { type PropsOf } from '../../../types/PropsOf'; import ActivityCopyButton from './ActivityCopyButton'; import ActivityViewCodeButton from './ActivityViewCodeButton'; import CitationModalContext from './CitationModalContent'; import MessageSensitivityLabel, { type MessageSensitivityLabelProps } from './MessageSensitivityLabel'; import isAIGeneratedActivity from './isAIGeneratedActivity'; -import isBasedOnSoftwareSourceCode from './isBasedOnSoftwareSourceCode'; import isHTMLButtonElement from './isHTMLButtonElement'; -import citationModalStyles from './CitationModal.module.css'; +import getFirstBaseOfSoftwareSourceCode from '../../../Utils/orgSchema/getFirstBaseOfSoftwareSourceCode'; import textContentStyles from '../TextContent.module.css'; +import citationModalStyles from './CitationModal.module.css'; const { useLocalizer, useStyleOptions } = hooks; @@ -73,7 +72,7 @@ function isCitingInline(claim: OrgSchemaClaim): claim is OrgSchemaClaim & { url?: undefined; }; } { - return !!claim.appearance && !claim.appearance.url; + return !!claim.appearance?.length && !claim.appearance?.[0].url; } function MarkdownTextContent(props: MarkdownTextContentProps) { @@ -116,13 +115,13 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { markdownDefinitions .map(markdownDefinition => { let messageCitation: OrgSchemaClaim | undefined = messageThing?.citation - ?.map(parseClaim) - .find(({ position }) => '' + position === markdownDefinition.identifier); + ?.map(claim => parse(orgSchemaClaimSchema, claim)) + .find(({ position }) => '' + position?.[0] === markdownDefinition.identifier); if (!messageCitation) { const rootLevelClaim = graph .filter(({ type }) => type === 'https://schema.org/Claim') - .map(parseClaim) + .map(claim => parse(orgSchemaClaimSchema, claim)) .find(({ '@id': id }) => id === markdownDefinition.url); if (rootLevelClaim) { @@ -130,22 +129,24 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { 'botframework-webchat: Root-level `Claim` thing is deprecated, please use `Message[@id=""].citation[@type="Claim"]` instead. It will be removed on or after 2027-08-29.' ); - messageCitation = { + messageCitation = parse(orgSchemaClaimSchema, { '@context': 'https://schema.org', '@id': markdownDefinition.url, '@type': 'Claim', alternateName: rootLevelClaim.alternateName, - appearance: isCitationURL(rootLevelClaim['@id']) - ? { - '@type': 'DigitalDocument', - name: rootLevelClaim.name, - text: rootLevelClaim.text - } - : { - '@type': 'DigitalDocument', - url: markdownDefinition.url - } - }; + appearance: [ + isCitationURL(rootLevelClaim['@id']) + ? { + '@type': 'DigitalDocument', + name: rootLevelClaim.name[0], + text: rootLevelClaim.text[0] + } + : { + '@type': 'DigitalDocument', + url: [markdownDefinition.url] + } + ] + } satisfies InferInput); } } @@ -165,8 +166,8 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { key: url, handleClick: () => showClaimModal( - appearance.name ?? markdownDefinition.title, - appearance.text, + appearance[0]?.name[0] ?? markdownDefinition.title[0], + appearance[0]?.text[0], messageCitation.alternateName ), markdownDefinition @@ -175,14 +176,14 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { // Not inline citation, we care about the URL. // Warn if it break single source of truth principle, we still use the URL from Markdown. - if (messageCitation.appearance?.url && messageCitation.appearance.url !== url) { + if (messageCitation.appearance?.[0]?.url?.[0] && messageCitation.appearance?.[0]?.url?.[0] !== url) { console.warn( 'botframework-webchat: When "Message.citation[].url" is set in entities, it must match its corresponding URL in Markdown link reference definition', { citation: messageCitation, markdownDefinition, url: { - citation: messageCitation.appearance.url, + citation: messageCitation.appearance[0]?.url[0], markdown: url } } @@ -242,35 +243,37 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { [entriesRef] ); - const messageSensitivityLabelProps = useMemo | undefined>(() => { - const usageInfo = messageThing?.usageInfo; + const messageSensitivityLabelProps = useMemo(() => { + const usageInfo = messageThing?.usageInfo?.[0]; if (usageInfo) { - const { pattern } = usageInfo; + const pattern = usageInfo?.pattern?.[0]; const encryptionStatus = !!usageInfo.keywords?.find(keyword => keyword === 'encrypted-content'); return { color: pattern && - pattern.inDefinedTermSet === 'https://www.w3.org/TR/css-color-4/' && - pattern.name === 'color' && - pattern.termCode, + pattern.inDefinedTermSet?.[0] === 'https://www.w3.org/TR/css-color-4/' && + pattern.name?.[0] === 'color' && + pattern.termCode?.[0], isEncrypted: encryptionStatus, - name: usageInfo.name, - title: usageInfo.description - }; + name: usageInfo.name?.[0], + title: usageInfo.description?.[0] + } satisfies MessageSensitivityLabelProps; } }, [messageThing]); // The main text of the citation entry (e.g. the title of the document). Used as the content of the main link and, if it exists, the header of the popup window. - const getEntryMainText = (entry: Entry) => - entry.claim?.name ?? entry.claim?.appearance?.name ?? (entry.markdownDefinition.title || undefined); + const getEntryMainText = (entry: Entry): string | undefined => + entry.claim?.name?.[0] ?? entry.claim?.appearance?.[0]?.name?.[0] ?? (entry.markdownDefinition.title || undefined); // Optional alternate name for the entry, used as a subtitle beneath the link - const getEntryBadgeName = (entry: Entry) => entry.claim?.appearance?.usageInfo?.name; + const getEntryBadgeName = (entry: Entry) => entry.claim?.appearance?.[0]?.usageInfo?.[0]?.name?.[0]; // Secondary text describing the citation, used in the a11y description (i.e. the div's title attribute) - const getEntryDescription = (entry: Entry) => entry.claim?.appearance?.usageInfo?.description; + const getEntryDescription = (entry: Entry) => entry.claim?.appearance?.[0]?.usageInfo?.[0]?.description?.[0]; + + const firstSoftwareSourceCodeBase = useMemo(() => getFirstBaseOfSoftwareSourceCode(messageThing), [messageThing]); return (
@@ -296,15 +299,14 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { )}
{activity.type === 'message' && - isBasedOnSoftwareSourceCode(messageThing) && - messageThing.isBasedOn.text && + firstSoftwareSourceCodeBase?.text && !messageThing.keywords?.includes?.('Collapsible') ? ( ) : null} {activity.type === 'message' && activity.text && messageThing?.keywords?.includes('AllowCopy') ? ( diff --git a/packages/component/src/Attachment/Text/private/isBasedOnSoftwareSourceCode.ts b/packages/component/src/Attachment/Text/private/isBasedOnSoftwareSourceCode.ts deleted file mode 100644 index 37f192caa8..0000000000 --- a/packages/component/src/Attachment/Text/private/isBasedOnSoftwareSourceCode.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { type OrgSchemaCreativeWork } from 'botframework-webchat-core'; - -/** - * Type guard to check if the isBasedOn field is of type SoftwareSourceCode - * @param messageEntity The message entity to check - * @returns True if isBasedOn is of type SoftwareSourceCode, false otherwise - */ -export default function isBasedOnSoftwareSourceCode( - messageEntity?: OrgSchemaCreativeWork -): messageEntity is OrgSchemaCreativeWork & { isBasedOn: SoftwareSourceCode } { - return messageEntity?.isBasedOn?.['@type'] === 'SoftwareSourceCode'; -} - -interface SoftwareSourceCode { - '@type': 'SoftwareSourceCode'; - programmingLanguage: string; - text: string; -} diff --git a/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx b/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx index 7eaaa1ea5e..543e20ebf6 100644 --- a/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx +++ b/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx @@ -4,7 +4,9 @@ import { createActivityPolymiddlewareFromLegacy, type Polymiddleware } from 'bot import { getActivityLivestreamingMetadata, getOrgSchemaMessage, - isVoiceTranscriptActivity + isVoiceTranscriptActivity, + type OrgSchemaCreativeWork, + type WebChatActivity } from 'botframework-webchat-core'; import React from 'react'; @@ -12,7 +14,7 @@ import CarouselLayout from '../../Activity/CarouselLayout'; import StackedLayout from '../../Activity/StackedLayout'; // TODO: [P4] Can we simplify these if-statement to something more readable? -function shouldFilterActivity(activity, messageThing) { +function shouldFilterActivity(activity: WebChatActivity, messageThing: OrgSchemaCreativeWork): boolean { const { type } = activity; if ( type === 'conversationUpdate' || @@ -21,14 +23,14 @@ function shouldFilterActivity(activity, messageThing) { // Do not show content for contentless livestream interims, or finalized activity without content. (type === 'typing' && (getActivityLivestreamingMetadata(activity)?.type === 'contentless' || - !(activity['text'] || activity.attachments?.length > 0 || messageThing?.abstract))) || + !(activity['text'] || activity.attachments?.length > 0 || messageThing?.abstract.length))) || (type === 'message' && // Do not show postback (activity.channelData?.postBack || // Do not show messageBack if displayText is undefined (activity.channelData?.messageBack && !activity.channelData.messageBack.displayText) || // Do not show empty bubbles (no text and attachments) - !(activity.text || activity.attachments?.length || messageThing?.abstract))) + !(activity.text || activity.attachments?.length || messageThing?.abstract.length))) ) { return true; } diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx index 211b992c31..696ee2b7f4 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx @@ -50,7 +50,7 @@ function PartGrouping(props: PartGroupingProps) { [activities, lastActivity] ); - const isGroup = activities.length > 1 || safeParse(IdentifierSchema, lastMessage?.isPartOf?.['@id']).success; + const isGroup = activities.length > 1 || safeParse(IdentifierSchema, lastMessage?.isPartOf[0]?.['@id']).success; return isGroup ? ( {children} diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx index d960e53675..38b7943e0a 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx @@ -168,7 +168,7 @@ function PartGroupingActivity(props: PartGroupingActivityProps) { const lastActivity = activities.at(-1); const currentMessage = useMemo( - () => messages.find(message => message.creativeWorkStatus === 'Incomplete') || lastMessage, + () => messages.find(message => message.creativeWorkStatus[0] === 'Incomplete') || lastMessage, [messages, lastMessage] ); @@ -184,14 +184,13 @@ function PartGroupingActivity(props: PartGroupingActivityProps) { // The HowTo entity (the group root) may carry an explicit `creativeWorkStatus` and `abstract`. // When present, it takes precedence over status derived from individual messages. - const [howToAbstract, howToStatus] = useMemo(() => { - const howToMessage = messages.find(message => message.isPartOf?.creativeWorkStatus); - const howTo = howToMessage?.isPartOf; + const [howToAbstract, howToStatus] = useMemo<[string | undefined, string | undefined]>(() => { + const howTo = messages.find(message => message.isPartOf[0]?.creativeWorkStatus)?.isPartOf[0]; - return [howTo?.abstract, howTo?.creativeWorkStatus]; + return [howTo?.abstract[0], howTo?.creativeWorkStatus[0]]; }, [messages]); - const defaultWorkStatus = useMemo( + const defaultWorkStatus = useMemo<'Incomplete' | undefined>( () => (messages.some(message => 'creativeWorkStatus' in message) ? 'Incomplete' : undefined), [messages] ); @@ -200,7 +199,8 @@ function PartGroupingActivity(props: PartGroupingActivityProps) { // 1. If the HowTo entity has an explicit `creativeWorkStatus`, use it. // 2. Otherwise, derive from the active message: find the first 'Incomplete' message's status. // 3. Fall back to `defaultWorkStatus` which is 'Incomplete' if any message has a `creativeWorkStatus` property. - const currentGroupStatus = howToStatus || currentMessage?.creativeWorkStatus || defaultWorkStatus; + const currentGroupStatus: string | undefined = + howToStatus || currentMessage?.creativeWorkStatus[0] || defaultWorkStatus; /** * The idea behind group header is that it displays the state of the entire group: diff --git a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts new file mode 100644 index 0000000000..286b7a0c0b --- /dev/null +++ b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts @@ -0,0 +1,24 @@ +import { + orgSchemaSoftwareSourceCodeSchema, + type OrgSchemaCreativeWork, + type OrgSchemaSoftwareSourceCode +} from 'botframework-webchat-core'; +import { safeParse } from 'valibot'; + +/** + * Finds the first `isBasedOf` element that is of type `SoftwareSourceCode`. + * + * @param messageThing The `CreativeWork` to find. + * @returns A `SoftwareSourceCode` if found, otherwise, `undefined`. + */ +export default function getFirstBaseOfSoftwareSourceCode( + messageThing: OrgSchemaCreativeWork +): OrgSchemaSoftwareSourceCode | undefined { + for (const base of messageThing.isBasedOn) { + const result = safeParse(orgSchemaSoftwareSourceCodeSchema, base); + + if (result.success) { + return result.output; + } + } +} diff --git a/packages/component/src/hooks/internal/useFeedbackActions.ts b/packages/component/src/hooks/internal/useFeedbackActions.ts index f7c533f076..a3ad9dca7f 100644 --- a/packages/component/src/hooks/internal/useFeedbackActions.ts +++ b/packages/component/src/hooks/internal/useFeedbackActions.ts @@ -1,6 +1,12 @@ -import { getOrgSchemaMessage, OrgSchemaAction, parseAction, WebChatActivity } from 'botframework-webchat-core'; +import { + getOrgSchemaMessage, + OrgSchemaAction, + orgSchemaActionSchema, + WebChatActivity +} from 'botframework-webchat-core'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useRefFrom } from 'use-ref-from'; +import { parse } from 'valibot'; import dereferenceBlankNodes from '../../Utils/JSONLinkedData/dereferenceBlankNodes'; export default function useFeedbackActions(initialActivity: WebChatActivity): { @@ -34,7 +40,9 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { } const voteActions = Object.freeze( - graph.filter(({ type }) => type === 'https://schema.org/VoteAction').map(parseAction) + graph + .filter(({ type }) => type === 'https://schema.org/VoteAction') + .map(action => parse(orgSchemaActionSchema, action)) ); if (voteActions.length) { @@ -48,7 +56,7 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { }); const isCompleted = useMemo( - () => actions.some(action => action.actionStatus === 'CompletedActionStatus'), + () => actions.some(action => action.actionStatus?.[0] === 'CompletedActionStatus'), [actions] ); @@ -66,9 +74,9 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { Object.freeze( actions.map(action => action === target - ? Object.freeze({ ...action, actionStatus: 'ActiveActionStatus' }) - : action.actionStatus === 'ActiveActionStatus' - ? Object.freeze({ ...action, actionStatus: 'PotentialActionStatus' }) + ? Object.freeze({ ...action, actionStatus: ['ActiveActionStatus'] } satisfies OrgSchemaAction) + : action.actionStatus?.[0] === 'ActiveActionStatus' + ? Object.freeze({ ...action, actionStatus: ['PotentialActionStatus'] } satisfies OrgSchemaAction) : action ) ) @@ -88,7 +96,9 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { setActions(actions => Object.freeze( actions.map(action => - action === target ? Object.freeze({ ...action, actionStatus: 'CompletedActionStatus' }) : action + action === target + ? Object.freeze({ ...action, actionStatus: ['CompletedActionStatus'] } satisfies OrgSchemaAction) + : action ) ) ); @@ -99,7 +109,8 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { const selectedAction = useMemo( () => actions.find( - ({ actionStatus }) => actionStatus === 'ActiveActionStatus' || actionStatus === 'CompletedActionStatus' + ({ actionStatus }) => + actionStatus?.[0] === 'ActiveActionStatus' || actionStatus?.[0] === 'CompletedActionStatus' ), [actions] ); diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 4376cfe3c4..0fa0c32ddd 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -116,6 +116,10 @@ export { projectSchema as orgSchemaProjectSchema, type ProjectOutput as OrgSchemaProject } from './types/external/OrgSchema/Project'; +export { + softwareSourceCodeSchema as orgSchemaSoftwareSourceCodeSchema, + type SoftwareSourceCodeOutput as OrgSchemaSoftwareSourceCode +} from './types/external/OrgSchema/SoftwareSourceCode'; export { thingSchema as orgSchemaThingSchema, type ThingOutput as OrgSchemaThing diff --git a/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts b/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts index cdc387c149..7cf6ed0dc5 100644 --- a/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts +++ b/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts @@ -1,18 +1,6 @@ -import { IdentifierSchema } from '@msinternal/botframework-webchat-core-graph'; -import { array, literal, number, object, optional, safeParse, string, union } from 'valibot'; import type { WebChatActivity } from '../../../../types/WebChatActivity'; import getOrgSchemaMessage from '../../../../utils/getOrgSchemaMessage'; -// TODO: [P0] Need to fix `getOrgSchemaMessage` before we can move to `NodeReferenceSchema`. -// It is introducing new properties, should be relaxed. -const IsPartOfNodeReferenceSchema = object({ '@id': IdentifierSchema, '@type': string() }); - -const MessageIsPartOfSchema = object({ - '@type': literal('Message'), - isPartOf: union([IsPartOfNodeReferenceSchema, array(IsPartOfNodeReferenceSchema)]), - position: optional(number()) -}); - type PartGroupingMetadataMapEntry = { readonly groupingId: string; readonly position: number | undefined; @@ -24,18 +12,13 @@ function getPartGroupingMetadataMap(activity: WebChatActivity): ReadonlyMap = intersect([ diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index e1ac7650a6..51e875d7c0 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -44,14 +44,14 @@ type ClaimOutput = CreativeWorkOutput & { * * @see https://schema.org/appearance. */ - readonly appearance?: readonly CreativeWorkOutput[] | undefined; + readonly appearance: readonly CreativeWorkOutput[]; /** * For a [Claim](https://schema.org/Claim) interpreted from [MediaObject](https://schema.org/MediaObject) content sed to indicate a claim contained, implied or refined from the content of a [MediaObject](https://schema.org/MediaObject). * * @see https://schema.org/claimInterpreter. */ - readonly claimInterpreter?: readonly ProjectOutput[] | undefined; + readonly claimInterpreter: readonly ProjectOutput[]; }; const claimSchema: GenericSchema = intersect([ diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 768eba6d42..3c35416980 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -62,40 +62,47 @@ type CreativeWorkInput = ThingInput & { */ readonly isBasedOn?: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; + /** + * Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. + * + * @see https://schema.org/isPartOf + */ + readonly isPartOf?: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; + /** * Keywords or tags used to describe some item. Multiple textual entries in a keywords list are typically delimited by commas, or by repeating the property. * * @see https://schema.org/keywords */ - readonly keywords: DefinedTermInput | string | readonly (DefinedTermInput | string)[] | undefined; + readonly keywords?: DefinedTermInput | string | readonly (DefinedTermInput | string)[] | undefined; /** * A pattern that something has, for example 'polka dot', 'striped', 'Canadian flag'. Values are typically expressed as text, although links to controlled value schemes are also supported. * * @see https://schema.org/pattern */ - readonly pattern: DefinedTermInput | readonly DefinedTermInput[] | undefined; + readonly pattern?: DefinedTermInput | readonly DefinedTermInput[] | undefined; /** * The position of an item in a series or sequence of items. * * @see https://schema.org/position */ - readonly position: number | string | readonly (number | string)[] | undefined; + readonly position?: number | string | readonly (number | string)[] | undefined; /** * The textual content of this CreativeWork. * * @see https://schema.org/text */ - readonly text: string | readonly string[] | undefined; + readonly text?: string | readonly string[] | undefined; /** * The schema.org [usageInfo](https://schema.org/usageInfo) property indicates further information about a [CreativeWork](https://schema.org/CreativeWork). This property is applicable both to works that are freely available and to those that require payment or other transactions. It can reference additional information, e.g. community expectations on preferred linking and citation conventions, as well as purchasing details. For something that can be commercially licensed, usageInfo can provide detailed, resource-specific information about licensing options. * * This property can be used alongside the license property which indicates license(s) applicable to some piece of content. The usageInfo property can provide information about other licensing options, e.g. acquiring commercial usage rights for an image that is also available under non-commercial creative commons licenses. */ - readonly usageInfo: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; + readonly usageInfo?: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; }; /** @@ -111,68 +118,75 @@ type CreativeWorkOutput = ThingOutput & { * * @see https://schema.org/abstract */ - readonly abstract?: readonly string[] | undefined; + readonly abstract: readonly string[]; /** * The author of this content or rating. Please note that author is special in that HTML 5 provides a special mechanism for indicating authorship via the rel tag. That is equivalent to this and may be used interchangeably. * * @see https://schema.org/author */ - readonly author?: readonly (PersonOutput | string)[] | undefined; + readonly author: readonly (PersonOutput | string)[]; /** * A citation or reference to another creative work, such as another publication, web page, scholarly article, etc. * * @see https://schema.org/citation */ - readonly citation?: readonly CreativeWorkOutput[] | undefined; + readonly citation: readonly CreativeWorkOutput[]; /** * The status of the creative work, such as whether it is incomplete or published. * * @see https://schema.org/creativeWorkStatus */ - readonly creativeWorkStatus?: readonly CreativeWorkStatusOutput[] | undefined; + readonly creativeWorkStatus: readonly CreativeWorkStatusOutput[]; /** * The schema.org [isBasedOn](https://schema.org/isBasedOn) property provides a resource from which this work is derived or from which it is a modification or adaptation. */ - readonly isBasedOn?: readonly CreativeWorkOutput[] | undefined; + readonly isBasedOn: readonly CreativeWorkOutput[]; + + /** + * Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. + * + * @see https://schema.org/isPartOf + */ + readonly isPartOf: readonly CreativeWorkOutput[]; /** * Keywords or tags used to describe some item. Multiple textual entries in a keywords list are typically delimited by commas, or by repeating the property. * * @see https://schema.org/keywords */ - readonly keywords: readonly (DefinedTermOutput | string)[] | undefined; + readonly keywords: readonly (DefinedTermOutput | string)[]; /** * A pattern that something has, for example 'polka dot', 'striped', 'Canadian flag'. Values are typically expressed as text, although links to controlled value schemes are also supported. * * @see https://schema.org/pattern */ - readonly pattern: readonly DefinedTermOutput[] | undefined; + readonly pattern: readonly DefinedTermOutput[]; /** * The position of an item in a series or sequence of items. * * @see https://schema.org/position */ - readonly position: readonly (number | string)[] | undefined; + readonly position: readonly (number | string)[]; /** * The textual content of this CreativeWork. * * @see https://schema.org/text */ - readonly text: readonly string[] | undefined; + readonly text: readonly string[]; /** * The schema.org [usageInfo](https://schema.org/usageInfo) property indicates further information about a [CreativeWork](https://schema.org/CreativeWork). This property is applicable both to works that are freely available and to those that require payment or other transactions. It can reference additional information, e.g. community expectations on preferred linking and citation conventions, as well as purchasing details. For something that can be commercially licensed, usageInfo can provide detailed, resource-specific information about licensing options. * * This property can be used alongside the license property which indicates license(s) applicable to some piece of content. The usageInfo property can provide information about other licensing options, e.g. acquiring commercial usage rights for an image that is also available under non-commercial creative commons licenses. */ - readonly usageInfo: readonly CreativeWorkOutput[] | undefined; + readonly usageInfo: readonly CreativeWorkOutput[]; }; const creativeWorkSchema: GenericSchema = intersect([ @@ -187,6 +201,7 @@ const creativeWorkSchema: GenericSchema = citation: orgSchemaProperties(lazy(() => creativeWorkSchema)), creativeWorkStatus: orgSchemaProperties(creativeWorkStatusSchema), isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema)), + isPartOf: orgSchemaProperties(lazy(() => creativeWorkSchema)), keywords: orgSchemaProperties(union([lazy(() => definedTermSchema), string()])), pattern: orgSchemaProperties(lazy(() => definedTermSchema)), position: orgSchemaProperties(union([number(), string()])), diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index 1fab65fa3f..5112beaa1e 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -39,14 +39,14 @@ type DefinedTermOutput = ThingOutput & { * * @see https://schema.org/inDefinedTermSet */ - readonly inDefinedTermSet?: readonly string[] | undefined; + readonly inDefinedTermSet: readonly string[]; /** * A code that identifies this [DefinedTerm](https://schema.org/DefinedTerm) within a [DefinedTermSet](https://schema.org/DefinedTermSet). * * @see https://schema.org/termCode */ - readonly termCode?: readonly string[] | undefined; + readonly termCode: readonly string[]; }; const definedTermSchema: GenericSchema = intersect([ diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index f81dd629fd..7b826d27ed 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -2,16 +2,40 @@ import { intersect, lazy, looseObject, parse, pipe, readonly, string, type Gener import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; +/** + * A person (alive, dead, undead, or fictional). + * + * This is partial implementation of https://schema.org/Person. + * + * @see https://schema.org/Person + */ type PersonInput = ThingInput & { - readonly description?: string | readonly string[] | undefined; + /** + * An image of the item. This can be a [URL](https://schema.org/URL) or a fully described [ImageObject](https://schema.org/ImageObject). + * + * Note: `ImageObject` is not supported. + * + * @see https://schema.org/image + */ readonly image?: string | readonly string[] | undefined; - readonly name?: string | readonly string[] | undefined; }; +/** + * A person (alive, dead, undead, or fictional). + * + * This is partial implementation of https://schema.org/Person. + * + * @see https://schema.org/Person + */ type PersonOutput = ThingOutput & { - readonly description?: readonly string[] | undefined; - readonly image?: readonly string[] | undefined; - readonly name?: readonly string[] | undefined; + /** + * An image of the item. This can be a [URL](https://schema.org/URL) or a fully described [ImageObject](https://schema.org/ImageObject). + * + * Note: `ImageObject` is not supported. + * + * @see https://schema.org/image + */ + readonly image: readonly string[]; }; const personSchema: GenericSchema = intersect([ diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index febf05b51e..de3588831f 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -16,7 +16,7 @@ type ProjectInput = ThingInput & { * * @see https://schema.org/slogan */ - readonly slogan: string | readonly string[] | undefined; + readonly slogan?: string | readonly string[] | undefined; }; /** @@ -32,7 +32,7 @@ type ProjectOutput = ThingOutput & { * * @see https://schema.org/slogan */ - readonly slogan: readonly string[] | undefined; + readonly slogan: readonly string[]; }; /** diff --git a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts new file mode 100644 index 0000000000..ca3b0ca5bc --- /dev/null +++ b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts @@ -0,0 +1,48 @@ +import { intersect, lazy, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; + +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; +import orgSchemaProperties from './private/orgSchemaProperties'; + +/** + * Computer programming source code. Example: Full (compile ready) solutions, code snippet samples, scripts, templates. + * + * This is partial implementation of https://schema.org/SoftwareSourceCode. + * + * @see https://schema.org/SoftwareSourceCode + */ +type SoftwareSourceCodeInput = CreativeWorkInput & { + /** + * The computer programming language. + * + * @see https://schema.org/programmingLanguage + */ + readonly programmingLanguage?: string | readonly string[] | undefined; +}; + +/** + * Computer programming source code. Example: Full (compile ready) solutions, code snippet samples, scripts, templates. + * + * This is partial implementation of https://schema.org/SoftwareSourceCode. + * + * @see https://schema.org/SoftwareSourceCode + */ +type SoftwareSourceCodeOutput = CreativeWorkOutput & { + /** + * The computer programming language. + * + * @see https://schema.org/programmingLanguage + */ + readonly programmingLanguage: readonly string[]; +}; + +const softwareSourceCodeSchema: GenericSchema = intersect([ + lazy(() => creativeWorkSchema), + pipe( + looseObject({ + programmingLanguage: orgSchemaProperties(string()) + }), + readonly() + ) +]); + +export { softwareSourceCodeSchema, type SoftwareSourceCodeInput, type SoftwareSourceCodeOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index 2d288ff2ce..1c87b7a2c8 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -56,13 +56,6 @@ type ThingInput = { * @see https://schema.org/url */ readonly url?: string | readonly string[] | undefined; - - /** - * Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. - * - * @see https://schema.org/isPartOf - */ - readonly isPartOf?: ThingInput | readonly ThingInput[] | undefined; }; /** @@ -82,49 +75,42 @@ type ThingOutput = { * * @see https://schema.org/additionalType */ - readonly additionalType?: readonly string[] | undefined; + readonly additionalType: readonly string[]; /** * An alias for the item. * * @see https://schema.org/alternateName */ - readonly alternateName?: readonly string[] | undefined; + readonly alternateName: readonly string[]; /** * A description of the item. * * @see https://schema.org/description */ - readonly description?: readonly string[] | undefined; + readonly description: readonly string[]; /** * The name of the item. * * @see https://schema.org/name */ - readonly name?: readonly string[] | undefined; + readonly name: readonly string[]; /** * Indicates a potential Action, which describes an idealized action in which this thing would play an 'object' role. * * @see https://schema.org/potentialAction */ - readonly potentialAction?: readonly ActionOutput[] | undefined; + readonly potentialAction: readonly ActionOutput[]; /** * URL of the item. * * @see https://schema.org/url */ - readonly url?: readonly string[] | undefined; - - /** - * Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. - * - * @see https://schema.org/isPartOf - */ - readonly isPartOf?: readonly ThingOutput[] | undefined; + readonly url: readonly string[]; }; /** @@ -152,7 +138,6 @@ const thingSchema: GenericSchema = additionalType: orgSchemaProperties(string()), alternateName: orgSchemaProperties(string()), description: orgSchemaProperties(string()), - isPartOf: orgSchemaProperties(lazy(() => thingSchema)), name: orgSchemaProperties(string()), potentialAction: orgSchemaProperties(lazy(() => actionSchema)), url: orgSchemaProperties(string()) diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index a6c3a00a06..6ad7802365 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -1,6 +1,6 @@ import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; -import orgSchemaProperty from './private/orgSchemaProperty'; +import orgSchemaProperties from './private/orgSchemaProperties'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** @@ -28,14 +28,14 @@ type UserReviewOutput = ThingOutput & { /** * This Review or Rating is relevant to this part or facet of the itemReviewed. */ - readonly reviewAspect?: string | readonly string[] | undefined; + readonly reviewAspect: readonly string[]; }; const userReviewSchema: GenericSchema = intersect([ lazy(() => thingSchema), pipe( looseObject({ - reviewAspect: orgSchemaProperty(string()) + reviewAspect: orgSchemaProperties(string()) }), readonly() ) diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index 6dd03df907..a5ee5c33ee 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -36,7 +36,7 @@ type VoteActionOutput = ActionOutput & { * * @see https://schema.org/VoteAction */ - readonly actionOption?: readonly string[] | undefined; + readonly actionOption: readonly string[]; }; const voteActionSchema: GenericSchema = intersect([ diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts index 4775340590..9d100b15e6 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts @@ -1,8 +1,10 @@ import { array, fallback, + optional, parse, pipe, + readonly, transform, type BaseSchema, type Fallback, @@ -12,19 +14,29 @@ import { } from 'valibot'; type SingularToArraySchema> = GenericSchema< - InferInput | InferInput[] | undefined, - InferOutput[] | undefined + InferInput | readonly InferInput[] | undefined, + readonly InferOutput[] | undefined >; +const EMPTY_ARRAY = Object.freeze([]); + const singularToArray = >( schema: T -): GenericSchema | InferInput[] | undefined, InferOutput[] | undefined> => - fallback, Fallback>>( - pipe( - array(schema), - transform(value => value.filter(value => typeof value !== 'undefined')) +): GenericSchema | readonly InferInput[] | undefined, readonly InferOutput[] | undefined> => + optional( + fallback, Fallback>>( + pipe( + // If it is an array. + array(schema), + // Filter out all `undefined` value. + transform(value => Object.freeze(value.filter(value => typeof value !== 'undefined'))), + // If it is empty, return our empty flywheel. + transform(value => (value.length ? value : EMPTY_ARRAY)), + readonly() + ), + value => (value?.value ? Object.freeze([parse(schema, value?.value) as InferOutput]) : EMPTY_ARRAY) ), - value => (value?.value ? [parse(schema, value?.value) as InferOutput] : undefined) + EMPTY_ARRAY ); export default function orgSchemaProperties>( diff --git a/packages/core/src/utils/getActivityLivestreamingMetadata.ts b/packages/core/src/utils/getActivityLivestreamingMetadata.ts index 30f211c2a6..00923f8998 100644 --- a/packages/core/src/utils/getActivityLivestreamingMetadata.ts +++ b/packages/core/src/utils/getActivityLivestreamingMetadata.ts @@ -183,7 +183,7 @@ export default function getActivityLivestreamingMetadata(activity: WebChatActivi type: !( output.text || output.attachments?.length || - ('entities' in output && getOrgSchemaMessage(output.entities)?.abstract) + ('entities' in output && getOrgSchemaMessage(output.entities)?.abstract[0]) ) ? 'contentless' : livestreamMetadata.streamType === 'informative' diff --git a/packages/core/src/utils/getOrgSchemaMessage.spec.ts b/packages/core/src/utils/getOrgSchemaMessage.spec.ts index a45af71ba0..b60f1202e8 100644 --- a/packages/core/src/utils/getOrgSchemaMessage.spec.ts +++ b/packages/core/src/utils/getOrgSchemaMessage.spec.ts @@ -1,3 +1,4 @@ +import { expect, test } from '@jest/globals'; import getOrgSchemaMessage from './getOrgSchemaMessage'; test('should get message', () => { diff --git a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx index 487f712fba..98cbc9509e 100644 --- a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx +++ b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx @@ -40,7 +40,7 @@ function PartGroupingDecorator(props: PartGroupingDecoratorProps) { const isInGroup = useMemo( () => restActivities.length > 0 || - !!(activity?.entities && getOrgSchemaMessage(activity.entities)?.isPartOf?.[0]?.['@id']), + !!(activity?.entities && getOrgSchemaMessage(activity.entities)?.isPartOf[0]?.['@id']), [activity, restActivities.length] ); diff --git a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts index 353ea260b2..89d500a02c 100644 --- a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts +++ b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts @@ -5,9 +5,7 @@ import { parse } from 'valibot'; export default function useActivityAuthor(activity?: WebChatActivity | undefined): OrgSchemaPerson | undefined { return useMemo(() => { - const entity = getOrgSchemaMessage(activity?.entities || []); - - const [firstAuthor] = entity?.author ?? []; + const firstAuthor = getOrgSchemaMessage(activity?.entities || [])?.author[0]; return typeof firstAuthor === 'string' ? parse(orgSchemaPersonSchema, { From 786271546a77880c36b538234500e470a3c9ddf3 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 22:41:05 +0000 Subject: [PATCH 034/108] Fix Schema.org typings --- .../private/FeedbackVoteButton.tsx | 18 ++++++++++--- .../private/getDisclaimerFromReviewAction.ts | 11 ++++---- .../src/ActivityStatus/private/Originator.tsx | 21 ++++------------ .../ui/PartGrouping/CollapsibleGrouping.tsx | 2 +- .../src/Styles/StyleSet/SuggestedAction.ts | 14 +---------- packages/core/src/index.ts | 25 ++++++++----------- 6 files changed, 38 insertions(+), 53 deletions(-) diff --git a/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx b/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx index 89988604ac..95b073afde 100644 --- a/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx +++ b/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx @@ -1,9 +1,21 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { hooks } from 'botframework-webchat-api'; -import { onErrorResumeNext, parseVoteAction, type OrgSchemaAction } from 'botframework-webchat-core'; +import { onErrorResumeNext, orgSchemaVoteActionSchema, type OrgSchemaAction } from 'botframework-webchat-core'; import React, { memo, useCallback, useMemo, useRef } from 'react'; import { useRefFrom } from 'use-ref-from'; -import { custom, literal, object, optional, pipe, readonly, safeParse, string, union, type InferInput } from 'valibot'; +import { + custom, + literal, + object, + optional, + parse, + pipe, + readonly, + safeParse, + string, + union, + type InferInput +} from 'valibot'; import { useListenToActivityFeedbackFocus } from '../providers/private/FocusPropagation'; import useActivityFeedbackHooks from '../providers/useActivityFeedbackHooks'; @@ -52,7 +64,7 @@ function FeedbackVoteButton(props: FeedbackVoteButtonProps) { if ( action['@type'] === 'DislikeAction' || (action['@type'] === 'VoteAction' && - onErrorResumeNext(() => parseVoteAction(action))?.actionOption === 'downvote') + onErrorResumeNext(() => parse(orgSchemaVoteActionSchema, action))?.actionOption[0] === 'downvote') ) { return 'down'; } diff --git a/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts b/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts index 3568644b85..00f434bd40 100644 --- a/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts +++ b/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts @@ -1,9 +1,8 @@ -import { type OrgSchemaAction, type OrgSchemaThing, type OrgSchemaUserReview } from 'botframework-webchat-core'; - -function isUserReview(thing: OrgSchemaThing | undefined): thing is OrgSchemaUserReview { - return thing?.['@type'] === 'UserReview'; -} +import { orgSchemaUserReviewSchema, type OrgSchemaAction } from 'botframework-webchat-core'; +import { safeParse } from 'valibot'; export default function getDisclaimerFromActivity(action: OrgSchemaAction): string | undefined { - return isUserReview(action.result) ? action.result.reviewAspect : undefined; + const userReview = safeParse(orgSchemaUserReviewSchema, action.result); + + return userReview.success ? userReview.output.reviewAspect[0] : undefined; } diff --git a/packages/component/src/ActivityStatus/private/Originator.tsx b/packages/component/src/ActivityStatus/private/Originator.tsx index 9b8fccdd18..18255ad39c 100644 --- a/packages/component/src/ActivityStatus/private/Originator.tsx +++ b/packages/component/src/ActivityStatus/private/Originator.tsx @@ -1,9 +1,9 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; -import { type OrgSchemaProject } from 'botframework-webchat-core'; +import { orgSchemaProjectSchema } from 'botframework-webchat-core'; import cx from 'classnames'; import React, { memo } from 'react'; -import { custom, object, optional, pipe, readonly, safeParse, string, type InferInput } from 'valibot'; +import { object, pipe, readonly, type InferInput } from 'valibot'; import useSanitizeHrefCallback from '../../hooks/internal/useSanitizeHrefCallback'; @@ -11,18 +11,7 @@ import styles from '../ActivityStatus.module.css'; const originatorPropsSchema = pipe( object({ - // TODO: [P1] We should build this schema into `OrgSchemaProject` instead, or build a Schema.org query library. - project: custom( - value => - safeParse( - object({ - name: optional(string()), - slogan: optional(string()), - url: optional(string()) - }), - value - ).success - ) + project: orgSchemaProjectSchema }), readonly() ); @@ -39,8 +28,8 @@ const Originator = memo(function Originator(props: OriginatorProps) { const sanitizeHref = useSanitizeHrefCallback(); const classNames = useStyles(styles); - const { sanitizedHref } = sanitizeHref(url); - const text = slogan || name; + const { sanitizedHref } = sanitizeHref(url[0]); + const text = slogan[0] || name[0]; return sanitizedHref ? ( // Link is sanitized. diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.tsx index c57f49adbf..edc93320c6 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.tsx @@ -20,7 +20,7 @@ const collapsibleGroupingPropsSchema = pipe( className: optional(string()), header: optional(reactNode()), isOpen: optional(boolean()), - onToggle: optional(pipe(custom<(isOpen: boolean) => void>(toggle => typeof toggle === 'function')), readonly()) + onToggle: optional(custom<(isOpen: boolean) => void>(toggle => typeof toggle === 'function')) }), readonly() ); diff --git a/packages/component/src/Styles/StyleSet/SuggestedAction.ts b/packages/component/src/Styles/StyleSet/SuggestedAction.ts index 97b4d7d4a2..456dcb457c 100644 --- a/packages/component/src/Styles/StyleSet/SuggestedAction.ts +++ b/packages/component/src/Styles/StyleSet/SuggestedAction.ts @@ -48,19 +48,11 @@ export default function createSuggestedActionStyle({ suggestedActionHeight, suggestedActionImageHeight, suggestedActionsStackedLayoutButtonMaxHeight, - subtle, - - // Deprecated - suggestedActionActiveBackground, - suggestedActionBackground, - suggestedActionDisabledBackground, - suggestedActionFocusBackground, - suggestedActionHoverBackground + subtle }: StrictStyleOptions) { return { '&.webchat__suggested-action': { alignItems: 'center', - background: suggestedActionBackground, // Deprecated as of 4.15.0. Remove on or after 2021-09-16. backgroundColor: suggestedActionBackgroundColor, borderColor: suggestedActionBorderColor || accent, borderRadius: suggestedActionBorderRadius, @@ -82,7 +74,6 @@ export default function createSuggestedActionStyle({ // Order of style preferences (based on effort of user gesture): disabled > active > hover > focus. // Keyboard focus indicator styles applied by :focus-visible do not conflict with :active/:hover/:focus, so it is not included here. '&:disabled, &[aria-disabled="true"]': { - background: suggestedActionDisabledBackground, backgroundColor: suggestedActionBackgroundColorOnDisabled, borderColor: suggestedActionBorderColorOnDisabled, borderStyle: suggestedActionBorderStyleOnDisabled, @@ -92,7 +83,6 @@ export default function createSuggestedActionStyle({ '&:not(:disabled):not([aria-disabled="true"])': { '&:active': { - background: suggestedActionActiveBackground, backgroundColor: suggestedActionBackgroundColorOnActive, borderColor: suggestedActionBorderColorOnActive, borderStyle: suggestedActionBorderStyleOnActive, @@ -102,7 +92,6 @@ export default function createSuggestedActionStyle({ '&:not(:active)': { '&:hover': { - background: suggestedActionHoverBackground, backgroundColor: suggestedActionBackgroundColorOnHover, borderColor: suggestedActionBorderColorOnHover, borderStyle: suggestedActionBorderStyleOnHover, @@ -112,7 +101,6 @@ export default function createSuggestedActionStyle({ '&:not(:hover)': { '&:focus': { - background: suggestedActionFocusBackground, backgroundColor: suggestedActionBackgroundColorOnFocus, borderColor: suggestedActionBorderColorOnFocus, borderStyle: suggestedActionBorderStyleOnFocus, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 0fa0c32ddd..6a0cfb78c8 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -38,13 +38,6 @@ import createStore, { withDevTools as createStoreWithDevTools, withOptions as createStoreWithOptions } from './createStore'; -import { parseAction } from './types/external/OrgSchema/Action'; -import { parseClaim } from './types/external/OrgSchema/Claim'; -import { parseCreativeWork } from './types/external/OrgSchema/CreativeWork'; -import { parseDefinedTerm } from './types/external/OrgSchema/DefinedTerm'; -import { parseProject } from './types/external/OrgSchema/Project'; -import { parseThing } from './types/external/OrgSchema/Thing'; -import { parseVoteAction } from './types/external/OrgSchema/VoteAction'; import getActivityLivestreamingMetadata from './utils/getActivityLivestreamingMetadata'; import getOrgSchemaMessage from './utils/getOrgSchemaMessage'; import onErrorResumeNext from './utils/onErrorResumeNext'; @@ -94,18 +87,22 @@ import type { Observable } from './types/external/Observable'; // #region Schema.org export { actionSchema as orgSchemaActionSchema, + parseAction, type ActionOutput as OrgSchemaAction } from './types/external/OrgSchema/Action'; export { claimSchema as orgSchemaClaimSchema, + parseClaim, type ClaimOutput as OrgSchemaClaim } from './types/external/OrgSchema/Claim'; export { creativeWorkSchema as orgSchemaCreativeWorkSchema, + parseCreativeWork, type CreativeWorkOutput as OrgSchemaCreativeWork } from './types/external/OrgSchema/CreativeWork'; export { definedTermSchema as orgSchemaDefinedTermSchema, + parseDefinedTerm, type DefinedTermOutput as OrgSchemaDefinedTerm } from './types/external/OrgSchema/DefinedTerm'; export { @@ -114,6 +111,7 @@ export { } from './types/external/OrgSchema/Person'; export { projectSchema as orgSchemaProjectSchema, + parseProject, type ProjectOutput as OrgSchemaProject } from './types/external/OrgSchema/Project'; export { @@ -122,12 +120,18 @@ export { } from './types/external/OrgSchema/SoftwareSourceCode'; export { thingSchema as orgSchemaThingSchema, + parseThing, type ThingOutput as OrgSchemaThing } from './types/external/OrgSchema/Thing'; export { userReviewSchema as orgSchemaUserReviewSchema, type UserReviewOutput as OrgSchemaUserReview } from './types/external/OrgSchema/UserReview'; +export { + voteActionSchema as orgSchemaVoteActionSchema, + parseVoteAction, + type VoteActionOutput as OrgSchemaVoteAction +} from './types/external/OrgSchema/VoteAction'; // #endregion /** @deprecated */ @@ -153,13 +157,6 @@ export { markActivity, muteVoiceRecording, onErrorResumeNext, - parseAction, - parseClaim, - parseCreativeWork, - parseDefinedTerm, - parseProject, - parseThing, - parseVoteAction, postActivity, postVoiceActivity, registerVoiceHandler, From 8d2715a7f09f904eb4be3e0facc5e3eded8a870a Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 23 Apr 2026 22:41:44 +0000 Subject: [PATCH 035/108] Export as HTMLElement --- .../customElements/CodeBlock.ts | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/packages/component/src/providers/CustomElements/customElements/CodeBlock.ts b/packages/component/src/providers/CustomElements/customElements/CodeBlock.ts index a0f210d4c9..b984c31f28 100644 --- a/packages/component/src/providers/CustomElements/customElements/CodeBlock.ts +++ b/packages/component/src/providers/CustomElements/customElements/CodeBlock.ts @@ -1,5 +1,4 @@ /* eslint-disable class-methods-use-this */ -// eslint-disable-next-line max-classes-per-file import { hooks } from 'botframework-webchat-api'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import { ReactNode, useMemo, useRef } from 'react'; @@ -12,24 +11,11 @@ import styles from './CodeBlock.module.css'; const { useStyleOptions, useLocalizer } = hooks; -abstract class CodeBlockBase extends HTMLElement { - copyButtonElement: HTMLElement; - - abstract get code(): string; - abstract get theme(): string; - abstract set theme(value: string); - abstract get language(): string; - abstract set language(value: string); - abstract get options(): { readonly theme: string }; - - abstract scheduleUpdate(): void; - abstract update(): void; - abstract highlightCode(...args: Parameters): DocumentFragment | string; -} - -class CodeBlock extends CodeBlockBase { +class CodeBlock extends HTMLElement { static observedAttributes = ['theme', 'language']; + copyButtonElement: HTMLElement; + #connected = false; #originalFragment: DocumentFragment = undefined; #updateTask?: Promise; @@ -163,12 +149,12 @@ const useCodeBlockProps = (copyButtonTagName: string) => { ); }; -export default function useReactCodeBlockClass(copyButtonTagName: string) { +export default function useReactCodeBlockClass(copyButtonTagName: string): typeof HTMLElement { const [codeBlockTarget, codeBlockPropsRef] = useCodeBlockProps(copyButtonTagName); const classNames = useStyles(styles); - return useMemo( + return useMemo( () => class ReactCodeBlock extends CodeBlock { static observedAttributes = CodeBlock.observedAttributes; From bf45e2730ab38693b2c82c1bc69252e475ee4e42 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 00:40:48 +0000 Subject: [PATCH 036/108] Fix looseObject --- .../ActivityStatus/OthersActivityStatus.tsx | 7 ++- .../src/ActivityStatus/private/Originator.tsx | 15 +++-- .../getFirstBaseOfSoftwareSourceCode.ts | 4 +- .../src/types/external/OrgSchema/Action.ts | 4 +- .../src/types/external/OrgSchema/Claim.ts | 4 +- .../types/external/OrgSchema/CreativeWork.ts | 48 ++++++---------- .../types/external/OrgSchema/DefinedTerm.ts | 4 +- .../src/types/external/OrgSchema/Person.ts | 4 +- .../OrgSchema/Project.parseProject.spec.ts | 1 + .../src/types/external/OrgSchema/Project.ts | 4 +- .../external/OrgSchema/SoftwareSourceCode.ts | 4 +- .../src/types/external/OrgSchema/Thing.ts | 57 +++++++++++++++---- .../types/external/OrgSchema/UserReview.ts | 4 +- .../types/external/OrgSchema/VoteAction.ts | 4 +- .../OrgSchema/private/orgSchemaProperties.ts | 46 +++++++-------- .../core/src/utils/getOrgSchemaMessage.ts | 29 ++++++---- 16 files changed, 131 insertions(+), 108 deletions(-) diff --git a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx index a20658c46f..5235316e8c 100644 --- a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx +++ b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx @@ -78,7 +78,12 @@ const OthersActivityStatus = memo(({ activity, className, slotted }: Props) => { )} {claimInterpreter && ( - + )} {feedbackActionsPlacement === 'activity-status' && ( diff --git a/packages/component/src/ActivityStatus/private/Originator.tsx b/packages/component/src/ActivityStatus/private/Originator.tsx index 18255ad39c..b559b2481f 100644 --- a/packages/component/src/ActivityStatus/private/Originator.tsx +++ b/packages/component/src/ActivityStatus/private/Originator.tsx @@ -1,9 +1,8 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; -import { orgSchemaProjectSchema } from 'botframework-webchat-core'; import cx from 'classnames'; import React, { memo } from 'react'; -import { object, pipe, readonly, type InferInput } from 'valibot'; +import { object, pipe, readonly, string, undefinedable, type InferInput } from 'valibot'; import useSanitizeHrefCallback from '../../hooks/internal/useSanitizeHrefCallback'; @@ -11,7 +10,9 @@ import styles from '../ActivityStatus.module.css'; const originatorPropsSchema = pipe( object({ - project: orgSchemaProjectSchema + name: undefinedable(string()), + slogan: undefinedable(string()), + url: undefinedable(string()) }), readonly() ); @@ -21,15 +22,13 @@ type OriginatorProps = InferInput; // Regular function is better for React function component. // eslint-disable-next-line prefer-arrow-callback const Originator = memo(function Originator(props: OriginatorProps) { - const { - project: { name, slogan, url } - } = validateProps(originatorPropsSchema, props); + const { name, slogan, url } = validateProps(originatorPropsSchema, props); const sanitizeHref = useSanitizeHrefCallback(); const classNames = useStyles(styles); - const { sanitizedHref } = sanitizeHref(url[0]); - const text = slogan[0] || name[0]; + const { sanitizedHref } = sanitizeHref(url); + const text = slogan || name; return sanitizedHref ? ( // Link is sanitized. diff --git a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts index 286b7a0c0b..aee4b7d03d 100644 --- a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts +++ b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts @@ -12,9 +12,9 @@ import { safeParse } from 'valibot'; * @returns A `SoftwareSourceCode` if found, otherwise, `undefined`. */ export default function getFirstBaseOfSoftwareSourceCode( - messageThing: OrgSchemaCreativeWork + messageThing: OrgSchemaCreativeWork | undefined ): OrgSchemaSoftwareSourceCode | undefined { - for (const base of messageThing.isBasedOn) { + for (const base of messageThing?.isBasedOn ?? []) { const result = safeParse(orgSchemaSoftwareSourceCodeSchema, base); if (result.success) { diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index 1f5dab7eb6..c0a922d4bb 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -79,7 +79,7 @@ type ActionOutput = ThingOutput & { const actionSchema: GenericSchema = intersect([ lazy(() => thingSchema), pipe( - looseObject({ + object({ actionOption: orgSchemaProperties(string()), actionStatus: orgSchemaProperties(actionStatusSchema), provider: orgSchemaProperties(lazy(() => projectSchema)), diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index 51e875d7c0..f0bdc3f87c 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, parse, pipe, readonly, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, pipe, readonly, type GenericSchema } from 'valibot'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; @@ -57,7 +57,7 @@ type ClaimOutput = CreativeWorkOutput & { const claimSchema: GenericSchema = intersect([ lazy(() => creativeWorkSchema), pipe( - looseObject({ + object({ appearance: orgSchemaProperties(lazy(() => creativeWorkSchema)), claimInterpreter: orgSchemaProperties(lazy(() => projectSchema)) }), diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 3c35416980..6d47837ffb 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -1,15 +1,4 @@ -import { - intersect, - lazy, - looseObject, - number, - parse, - pipe, - readonly, - string, - union, - type GenericSchema -} from 'valibot'; +import { intersect, lazy, number, object, parse, string, union, type GenericSchema } from 'valibot'; import { creativeWorkStatusSchema, @@ -191,25 +180,22 @@ type CreativeWorkOutput = ThingOutput & { const creativeWorkSchema: GenericSchema = intersect([ lazy(() => thingSchema), - pipe( - looseObject({ - // For forward compatibility, we did not enforce @type must be "CreativeWork" or any other subtypes. - // In future, if Schema.org introduced a new subtype of CreativeWork, we should still able to parse that one as a CreativeWork. - - abstract: orgSchemaProperties(string()), - author: orgSchemaProperties(union([personSchema, string()])), - citation: orgSchemaProperties(lazy(() => creativeWorkSchema)), - creativeWorkStatus: orgSchemaProperties(creativeWorkStatusSchema), - isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema)), - isPartOf: orgSchemaProperties(lazy(() => creativeWorkSchema)), - keywords: orgSchemaProperties(union([lazy(() => definedTermSchema), string()])), - pattern: orgSchemaProperties(lazy(() => definedTermSchema)), - position: orgSchemaProperties(union([number(), string()])), - text: orgSchemaProperties(string()), - usageInfo: orgSchemaProperties(lazy(() => creativeWorkSchema)) - }), - readonly() - ) + object({ + // For forward compatibility, we did not enforce @type must be "CreativeWork" or any other subtypes. + // In future, if Schema.org introduced a new subtype of CreativeWork, we should still able to parse that one as a CreativeWork. + + abstract: orgSchemaProperties(string()), + author: orgSchemaProperties(union([lazy(() => personSchema), string()])), + citation: orgSchemaProperties(lazy(() => creativeWorkSchema)), + creativeWorkStatus: orgSchemaProperties(creativeWorkStatusSchema), + isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema)), + isPartOf: orgSchemaProperties(lazy(() => creativeWorkSchema)), + keywords: orgSchemaProperties(union([lazy(() => definedTermSchema), string()])), + pattern: orgSchemaProperties(lazy(() => definedTermSchema)), + position: orgSchemaProperties(union([number(), string()])), + text: orgSchemaProperties(string()), + usageInfo: orgSchemaProperties(lazy(() => creativeWorkSchema)) + }) ]); /** @deprecated Use Valibot.parse(creativeWorkSchema) instead. Will be removed on or after 2028-04-23. */ diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index 5112beaa1e..6b6e4d8dd6 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -52,7 +52,7 @@ type DefinedTermOutput = ThingOutput & { const definedTermSchema: GenericSchema = intersect([ lazy(() => thingSchema), pipe( - looseObject({ + object({ inDefinedTermSet: orgSchemaProperties(string()), termCode: orgSchemaProperties(string()) }), diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index 7b826d27ed..9f395e91a5 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -41,7 +41,7 @@ type PersonOutput = ThingOutput & { const personSchema: GenericSchema = intersect([ lazy(() => thingSchema), pipe( - looseObject({ + object({ description: orgSchemaProperties(string()), image: orgSchemaProperties(string()), name: orgSchemaProperties(string()) diff --git a/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts b/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts index 2b6841a81d..0d227323ba 100644 --- a/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from '@jest/globals'; import { parseProject } from './Project'; describe('Project', () => { diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index de3588831f..89238150eb 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, parse, pipe, readonly, string } from 'valibot'; +import { intersect, lazy, object, parse, pipe, readonly, string } from 'valibot'; import orgSchemaProperties from './private/orgSchemaProperties'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -45,7 +45,7 @@ type ProjectOutput = ThingOutput & { const projectSchema = intersect([ lazy(() => thingSchema), pipe( - looseObject({ + object({ /** * A slogan or motto associated with the item. * diff --git a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts index ca3b0ca5bc..ca8b6c092e 100644 --- a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts +++ b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, pipe, readonly, string, type GenericSchema } from 'valibot'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -38,7 +38,7 @@ type SoftwareSourceCodeOutput = CreativeWorkOutput & { const softwareSourceCodeSchema: GenericSchema = intersect([ lazy(() => creativeWorkSchema), pipe( - looseObject({ + object({ programmingLanguage: orgSchemaProperties(string()) }), readonly() diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index 1c87b7a2c8..d413feec34 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -1,4 +1,4 @@ -import { lazy, literal, looseObject, optional, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { lazy, literal, object, optional, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -121,20 +121,53 @@ type ThingOutput = { * @see https://schema.org/Thing */ const thingSchema: GenericSchema = - // Forward compatibility is the reason why we use looseObject() here and not adhere to JSON-LD which drop unknown fields. - // - // Example: - // - CreativeWork.editor must be type of Person (or any of its subtypes, Patient) - // - Without looseObject(), when we parse the CreativeWork, we will drop Patient.diagnosis - // - That means, CreativeWork.editor.diagnosis will be unset despite CreativeWork.editor is of type Patient - // - // We can drop looseObject() if there is a way to keep CreativeWork.editor.diagnosis. - // It is okay to drop future/unsupported properties. But not today/supported properties. + // We cannot use looseObject() to futureproof properties. + + // The following code will result in error: + + // parse( + // intersect([ + // looseObject({ one: number() }), + // looseObject({ + // two: pipe( + // number(), + // transform(value => '' + value) + // ) + // }) + // ]), + // { + // one: 1, + // two: 2 + // } + // ); + + // { + // kind: 'schema', + // type: 'intersect', + // input: { + // one: 1, + // two: 2 + // }, + // expected: 'Object', + // received: 'unknown', + // message: 'Invalid type: Expected Object but received unknown' + // }; + + // This is due to how intersect works. + // Intersection kicks-in after both looseObject() is done. + // When trying to intersect { one: 1, two: 2 } and { one: 1, two: '2' }, it would fail. + + // In our code, we are literally doing `intersect(lazy(() => looseObject({})), looseObject({}))`. + + // We cannot use object().entries because we need to use lazy() which requires GenericSchema. + // We could write out the GenericSchema as ObjectSchema but it will be very cumbersome. + // At the end of the day, it is easier to keep object() than looseObject(). + pipe( - looseObject({ + object({ '@context': optional(pipe(literal('https://schema.org'))), '@id': optional(string()), - '@type': string(), + '@type': optional(string()), additionalType: orgSchemaProperties(string()), alternateName: orgSchemaProperties(string()), description: orgSchemaProperties(string()), diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index 6ad7802365..9ef29823c5 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import orgSchemaProperties from './private/orgSchemaProperties'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -34,7 +34,7 @@ type UserReviewOutput = ThingOutput & { const userReviewSchema: GenericSchema = intersect([ lazy(() => thingSchema), pipe( - looseObject({ + object({ reviewAspect: orgSchemaProperties(string()) }), readonly() diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index a5ee5c33ee..b95577a4f1 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -42,7 +42,7 @@ type VoteActionOutput = ActionOutput & { const voteActionSchema: GenericSchema = intersect([ lazy(() => actionSchema), pipe( - looseObject({ + object({ actionOption: orgSchemaProperties(string()) }), readonly() diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts index 9d100b15e6..d7d27a1f24 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts @@ -1,46 +1,40 @@ import { array, - fallback, optional, - parse, pipe, - readonly, transform, + union, type BaseSchema, - type Fallback, type GenericSchema, type InferInput, type InferOutput } from 'valibot'; -type SingularToArraySchema> = GenericSchema< - InferInput | readonly InferInput[] | undefined, - readonly InferOutput[] | undefined ->; - const EMPTY_ARRAY = Object.freeze([]); -const singularToArray = >( +export default function orgSchemaProperties>( schema: T -): GenericSchema | readonly InferInput[] | undefined, readonly InferOutput[] | undefined> => - optional( - fallback, Fallback>>( +): GenericSchema | readonly InferInput[] | undefined, readonly InferOutput[] | undefined> { + return optional( + union([ + // If it is an array. pipe( - // If it is an array. array(schema), - // Filter out all `undefined` value. - transform(value => Object.freeze(value.filter(value => typeof value !== 'undefined'))), - // If it is empty, return our empty flywheel. - transform(value => (value.length ? value : EMPTY_ARRAY)), - readonly() + transform(value => { + // Filter out all `undefined` value. + const result = value.filter(value => typeof value !== 'undefined'); + + // If it is non-empty, return the frozen array, otherwise, return our empty flywheel. + return result.length ? Object.freeze(result) : EMPTY_ARRAY; + }) ), - value => (value?.value ? Object.freeze([parse(schema, value?.value) as InferOutput]) : EMPTY_ARRAY) - ), + pipe( + // Otherwise, it must match the schema + schema, + // Put it in a frozen array tuple. + transform(value => Object.freeze([value])) + ) + ]), EMPTY_ARRAY ); - -export default function orgSchemaProperties>( - schema: T -): GenericSchema | readonly InferInput[] | undefined, readonly InferOutput[] | undefined> { - return singularToArray(schema); } diff --git a/packages/core/src/utils/getOrgSchemaMessage.ts b/packages/core/src/utils/getOrgSchemaMessage.ts index 431154f99c..a9c62d3055 100644 --- a/packages/core/src/utils/getOrgSchemaMessage.ts +++ b/packages/core/src/utils/getOrgSchemaMessage.ts @@ -1,22 +1,27 @@ -import { parse } from 'valibot'; +import { parse, safeParse } from 'valibot'; import { creativeWorkSchema, type CreativeWorkOutput } from '../types/external/OrgSchema/CreativeWork'; -import { thingSchema } from '../types/external/OrgSchema/Thing'; import { type WebChatActivity } from '../types/WebChatActivity'; type EntityType = NonNullable[number]; export default function getOrgSchemaMessage(graph: readonly EntityType[]): CreativeWorkOutput | undefined { - const messageEntity = (graph || []).find(entity => { - const isThing = entity.type?.startsWith('https://schema.org/'); + for (const entity of graph ?? []) { + const isPossiblySelfMessage = + entity && + typeof entity === 'object' && + 'type' in entity && + entity.type?.startsWith('https://schema.org/') && + '@id' in entity && + entity['@id'] === ''; - if (isThing) { - const thing = parse(thingSchema, entity); + if (isPossiblySelfMessage) { + try { + return parse(creativeWorkSchema, entity); + } catch (error) { + console.error(safeParse(creativeWorkSchema, entity).issues); - return thing['@id'] === ''; + throw error; + } } - }); - - const message = messageEntity && parse(creativeWorkSchema, messageEntity); - - return message && parse(creativeWorkSchema, message); + } } From 3557ff0d0c79d1a0cd9498a75614bbbd71286dad Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 01:37:14 +0000 Subject: [PATCH 037/108] Fix Schema.org accessors --- .../component/src/Activity/StackedLayout.tsx | 13 +++--- .../providers/ActivityFeedbackComposer.tsx | 4 +- .../ActivityStatus/OthersActivityStatus.tsx | 4 +- .../Text/private/MarkdownTextContent.tsx | 44 ++++++++++--------- .../Text/private/isAIGeneratedActivity.ts | 2 +- .../private/PartGroupingActivity.tsx | 2 +- .../src/hooks/internal/useFeedbackActions.ts | 4 +- .../activity/private/isAIGeneratedActivity.ts | 2 +- .../isPreChatMessageActivity.ts | 2 +- 9 files changed, 37 insertions(+), 40 deletions(-) diff --git a/packages/component/src/Activity/StackedLayout.tsx b/packages/component/src/Activity/StackedLayout.tsx index 63808cafba..48581b5e0d 100644 --- a/packages/component/src/Activity/StackedLayout.tsx +++ b/packages/component/src/Activity/StackedLayout.tsx @@ -136,6 +136,7 @@ const StackedLayout = ({ const messageThing = useMemo(() => getOrgSchemaMessage(activity.entities), [activity]); const isCollapsible = useMemo(() => messageThing?.keywords?.includes('Collapsible'), [messageThing]); + const creativeWorkStatus = messageThing?.creativeWorkStatus[0]; const isLivestreaming = !!getActivityLivestreamingMetadata(activity); const activityDisplayText = isMessageOrTyping ? messageBackDisplayText || activity.text @@ -164,14 +165,12 @@ const StackedLayout = ({ const showAvatar = showCallout && hasAvatar && !!renderAvatar; const showNub = !isInGroup && showCallout && hasNub && (topAlignedCallout || !attachments?.length); - const showStatus = !!messageThing?.creativeWorkStatus[0] || isInGroup; + const showStatus = !!creativeWorkStatus || isInGroup; const renderMainBubbleContent = useCallback( (title = '', withStatus = true) => (
- {withStatus && showStatus && ( - - )} + {withStatus && showStatus && } {title &&
{title}
} {activityDisplayText && renderAttachment({ @@ -183,7 +182,7 @@ const StackedLayout = ({ })}
), - [activity, activityDisplayText, classNames, messageThing?.creativeWorkStatus, renderAttachment, showStatus] + [activity, activityDisplayText, classNames, creativeWorkStatus, renderAttachment, showStatus] ); const attachmentChildren = useMemo(() => { @@ -265,7 +264,7 @@ const StackedLayout = ({ const renderCollapsibleBubbleContent = useCallback( (title = '') => (
- {showStatus && } + {showStatus && }
), - [attachmentChildren, classNames, messageThing?.creativeWorkStatus, showStatus] + [attachmentChildren, classNames, creativeWorkStatus, showStatus] ); const renderBubbleContent = isCollapsible ? renderCollapsibleBubbleContent : renderMainBubbleContent; diff --git a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx index df2c045cab..95dbf04542 100644 --- a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +++ b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx @@ -131,9 +131,7 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { const messageThing = getOrgSchemaMessage(graph); const reactActions = Object.freeze( - (messageThing?.potentialAction || []).filter( - ({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction' - ) + messageThing?.potentialAction.filter(({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction') ); if (reactActions.length) { diff --git a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx index 5235316e8c..f6539080ad 100644 --- a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx +++ b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx @@ -39,7 +39,7 @@ const OthersActivityStatus = memo(({ activity, className, slotted }: Props) => { const claimInterpreter = useMemo(() => { try { if (messageThing) { - return parse(orgSchemaClaimSchema, (messageThing?.citation || [])[0])?.claimInterpreter?.[0]; + return parse(orgSchemaClaimSchema, messageThing?.citation[0])?.claimInterpreter[0]; } const [firstClaim] = graph @@ -49,7 +49,7 @@ const OthersActivityStatus = memo(({ activity, className, slotted }: Props) => { if (firstClaim) { warnRootLevelThings(); - return firstClaim?.claimInterpreter?.[0]; + return firstClaim?.claimInterpreter[0]; } const replyAction = parse( diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index 15aba971fd..19317071d8 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -6,6 +6,7 @@ import { onErrorResumeNext, orgSchemaClaimSchema, type OrgSchemaClaim, + type OrgSchemaCreativeWork, type WebChatActivity } from 'botframework-webchat-core'; import cx from 'classnames'; @@ -68,11 +69,9 @@ function isCitationURL(url: string): boolean { } function isCitingInline(claim: OrgSchemaClaim): claim is OrgSchemaClaim & { - appearance: { - url?: undefined; - }; + appearance: [OrgSchemaCreativeWork & { readonly url: never[] }]; } { - return !!claim.appearance?.length && !claim.appearance?.[0].url; + return !!claim.appearance.length && !claim.appearance[0].url.length; } function MarkdownTextContent(props: MarkdownTextContentProps) { @@ -98,7 +97,7 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { const citationModalDialogLabel = localize('CITATION_MODEL_DIALOG_ALT'); const showClaimModal = useCallback( - (title, text, altText) => { + (title: string | undefined, text: string, altText: string | undefined) => { showModal(() => , { 'aria-label': altText || title || citationModalDialogLabel, className: citationModalClassNames['citation-modal-dialog'] @@ -115,8 +114,9 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { markdownDefinitions .map(markdownDefinition => { let messageCitation: OrgSchemaClaim | undefined = messageThing?.citation - ?.map(claim => parse(orgSchemaClaimSchema, claim)) - .find(({ position }) => '' + position?.[0] === markdownDefinition.identifier); + // .filter(claim => claim['@type'] === 'Claim') + .map(claim => parse(orgSchemaClaimSchema, claim)) + .find(({ position }) => '' + position[0] === markdownDefinition.identifier); if (!messageCitation) { const rootLevelClaim = graph @@ -138,8 +138,8 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { isCitationURL(rootLevelClaim['@id']) ? { '@type': 'DigitalDocument', - name: rootLevelClaim.name[0], - text: rootLevelClaim.text[0] + name: rootLevelClaim.name, + text: rootLevelClaim.text } : { '@type': 'DigitalDocument', @@ -153,6 +153,8 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { const { url } = markdownDefinition; const { sanitizedHref } = sanitizeHref(markdownDefinition.url); + console.log('------------', { messageCitation, sanitizedHref, url }); + // After HTML content transform (or sanitization), the link could be gone. // In that case, Markdown will not render the link. We also need to remove it from citation. if (messageCitation) { @@ -166,9 +168,9 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { key: url, handleClick: () => showClaimModal( - appearance[0]?.name[0] ?? markdownDefinition.title[0], + appearance[0]?.name[0] ?? markdownDefinition.title, appearance[0]?.text[0], - messageCitation.alternateName + messageCitation.alternateName[0] ), markdownDefinition }; @@ -176,7 +178,7 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { // Not inline citation, we care about the URL. // Warn if it break single source of truth principle, we still use the URL from Markdown. - if (messageCitation.appearance?.[0]?.url?.[0] && messageCitation.appearance?.[0]?.url?.[0] !== url) { + if (messageCitation.appearance[0]?.url[0] && messageCitation.appearance[0]?.url[0] !== url) { console.warn( 'botframework-webchat: When "Message.citation[].url" is set in entities, it must match its corresponding URL in Markdown link reference definition', { @@ -244,21 +246,21 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { ); const messageSensitivityLabelProps = useMemo(() => { - const usageInfo = messageThing?.usageInfo?.[0]; + const usageInfo = messageThing?.usageInfo[0]; if (usageInfo) { - const pattern = usageInfo?.pattern?.[0]; + const [pattern] = usageInfo.pattern; const encryptionStatus = !!usageInfo.keywords?.find(keyword => keyword === 'encrypted-content'); return { color: pattern && - pattern.inDefinedTermSet?.[0] === 'https://www.w3.org/TR/css-color-4/' && - pattern.name?.[0] === 'color' && - pattern.termCode?.[0], + pattern.inDefinedTermSet[0] === 'https://www.w3.org/TR/css-color-4/' && + pattern.name[0] === 'color' && + pattern.termCode[0], isEncrypted: encryptionStatus, - name: usageInfo.name?.[0], - title: usageInfo.description?.[0] + name: usageInfo.name[0], + title: usageInfo.description[0] } satisfies MessageSensitivityLabelProps; } }, [messageThing]); @@ -300,7 +302,7 @@ function MarkdownTextContent(props: MarkdownTextContentProps) {
{activity.type === 'message' && firstSoftwareSourceCodeBase?.text && - !messageThing.keywords?.includes?.('Collapsible') ? ( + !messageThing?.keywords.includes?.('Collapsible') ? ( ) : null} - {activity.type === 'message' && activity.text && messageThing?.keywords?.includes('AllowCopy') ? ( + {activity.type === 'message' && activity.text && messageThing?.keywords.includes('AllowCopy') ? ( ) : null} {activity.type === 'message' && feedbackActionsPlacement === 'activity-actions' && ( diff --git a/packages/component/src/Attachment/Text/private/isAIGeneratedActivity.ts b/packages/component/src/Attachment/Text/private/isAIGeneratedActivity.ts index 5a43c99ec4..2251357633 100644 --- a/packages/component/src/Attachment/Text/private/isAIGeneratedActivity.ts +++ b/packages/component/src/Attachment/Text/private/isAIGeneratedActivity.ts @@ -1,5 +1,5 @@ import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core'; export default function isAIGeneratedActivity(activity: undefined | WebChatActivity) { - return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords?.includes('AIGeneratedContent')); + return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords.includes('AIGeneratedContent')); } diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx index 38b7943e0a..67989e8da8 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx @@ -147,7 +147,7 @@ function PartGroupingActivity(props: PartGroupingActivityProps) { const [isGroupOpen, setIsGroupOpen] = useState(partGroupDefaultOpen); const messages = useMemo( - () => activities.map(activity => getOrgSchemaMessage(activity.entities)).filter(message => !!message), + () => activities.map(activity => getOrgSchemaMessage(activity.entities)).filter(Boolean), [activities] ); // eslint-disable-next-line no-magic-numbers diff --git a/packages/component/src/hooks/internal/useFeedbackActions.ts b/packages/component/src/hooks/internal/useFeedbackActions.ts index a3ad9dca7f..79eab3fa26 100644 --- a/packages/component/src/hooks/internal/useFeedbackActions.ts +++ b/packages/component/src/hooks/internal/useFeedbackActions.ts @@ -30,9 +30,7 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { const messageThing = getOrgSchemaMessage(graph); const reactActions = Object.freeze( - (messageThing?.potentialAction || []).filter( - ({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction' - ) + messageThing?.potentialAction.filter(({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction') ); if (reactActions.length) { diff --git a/packages/fluent-theme/src/components/activity/private/isAIGeneratedActivity.ts b/packages/fluent-theme/src/components/activity/private/isAIGeneratedActivity.ts index 43924ffdc5..60688d986a 100644 --- a/packages/fluent-theme/src/components/activity/private/isAIGeneratedActivity.ts +++ b/packages/fluent-theme/src/components/activity/private/isAIGeneratedActivity.ts @@ -1,5 +1,5 @@ import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal'; export default function isAIGeneratedActivity(activity: undefined | WebChatActivity) { - return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords?.includes('AIGeneratedContent')); + return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords.includes('AIGeneratedContent')); } diff --git a/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts b/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts index 754fad510d..be5e3c1077 100644 --- a/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts +++ b/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts @@ -3,5 +3,5 @@ import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/ export default function isPreChatMessageActivity( activity: undefined | WebChatActivity ): activity is WebChatActivity & { type: 'message' } { - return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords?.includes('PreChatMessage')); + return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords.includes('PreChatMessage')); } From 6e272985bc2f106a4d9e03d2d6a7a8565cbd9910 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 02:26:27 +0000 Subject: [PATCH 038/108] Fix marker check --- packages/api/src/decorator/DecoratorComposer.tsx | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/api/src/decorator/DecoratorComposer.tsx b/packages/api/src/decorator/DecoratorComposer.tsx index 469d41c3bc..5435983aea 100644 --- a/packages/api/src/decorator/DecoratorComposer.tsx +++ b/packages/api/src/decorator/DecoratorComposer.tsx @@ -15,15 +15,7 @@ const decoratorComposerPropsSchema = pipe( ); const warnInvalidMiddlewarePropsSchema = optional( - array( - custom( - value => - !!value && - typeof value === 'object' && - middlewareFactoryMarker in value && - value[middlewareFactoryMarker satisfies symbol] === middlewareFactoryMarker - ) - ) + array(custom(value => value && value[middlewareFactoryMarker satisfies symbol] === middlewareFactoryMarker)) ); type DecoratorComposerProps = Omit, 'middleware'> & { From 639030417946b1a6e64724499246deaee30225a7 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 02:27:37 +0000 Subject: [PATCH 039/108] Modern normalizeStyleOptions --- packages/api/src/normalizeStyleOptions.ts | 31 +++++++++++++++++-- .../patchStyleOptionsFromDeprecatedProps.js | 23 -------------- .../private/rectifyStyleOptions.ts | 3 +- .../SendBoxToolbar/BasicSendBoxToolbar.tsx | 2 +- 4 files changed, 30 insertions(+), 29 deletions(-) delete mode 100644 packages/api/src/patchStyleOptionsFromDeprecatedProps.js diff --git a/packages/api/src/normalizeStyleOptions.ts b/packages/api/src/normalizeStyleOptions.ts index 7946d2e6fb..3acfd4059f 100644 --- a/packages/api/src/normalizeStyleOptions.ts +++ b/packages/api/src/normalizeStyleOptions.ts @@ -15,6 +15,12 @@ const bubbleMinWidthDeprecation = warnOnce( '"styleOptions.bubbleMinWidth" has been deprecated. Use "styleOptions.bubbleAttachmentMinWidth" and "styleOptions.bubbleMessageMinWidth" instead. This deprecation migration will be removed on or after 2026-07-05.' ); +const hideUploadButtonDeprecation = warnOnce( + '`styleOptions.hideUploadButton` is being deprecated in favor of `styleOptions.disableFileUpload`. The option will be removed on or after 2027-07-14.' +); + +const slowConnectionAfterInvalidValue = warnOnce('"slowConnectionAfter" cannot be negative, will set to 0.'); + // TODO: [P4] We should add a notice for people who want to use "styleSet" instead of "styleOptions". // "styleSet" is actually CSS stylesheet and it is based on the DOM tree. // DOM tree may change from time to time, thus, maintaining "styleSet" becomes a constant effort. @@ -23,7 +29,9 @@ export default function normalizeStyleOptions({ bubbleImageHeight, bubbleMaxWidth, bubbleMinWidth, - hideUploadButton: _hideUploadButton, + disableFileUpload, + hideUploadButton, + slowConnectionAfter, ...options }: StyleOptions = {}): StrictStyleOptions { const filledOptions: Required = { @@ -58,7 +66,7 @@ export default function normalizeStyleOptions({ normalizedBubbleNubOffset = bubbleNubOffset; } - if (emojiSet === true) { + if (emojiSet === true || typeof emojiSet === 'undefined') { normalizedEmojiSet = { ':)': '😊', ':-)': '😊', @@ -86,6 +94,8 @@ export default function normalizeStyleOptions({ ' 0); - } - - // Rectify deprecated "hideUploadButton" into "disableFileUpload" - if (styleOptions.hideUploadButton !== undefined) { - console.warn( - 'botframework-webchat: `styleOptions.hideUploadButton` is being deprecated in favor of `styleOptions.disableFileUpload`. The option will be removed on or after 2027-07-14.' - ); - - styleOptions = updateIn(styleOptions, ['disableFileUpload'], () => !!styleOptions.hideUploadButton); - } - - return styleOptions; -} diff --git a/packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts b/packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts index ae0da6edae..f2e1dfc846 100644 --- a/packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts +++ b/packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts @@ -1,7 +1,6 @@ import type { StrictStyleOptions, StyleOptions } from '../../../StyleOptions'; import normalizeStyleOptions from '../../../normalizeStyleOptions'; -import patchStyleOptionsFromDeprecatedProps from '../../../patchStyleOptionsFromDeprecatedProps'; export default function rectifyStyleOptions(styleOptions: StyleOptions): StrictStyleOptions { - return normalizeStyleOptions(patchStyleOptionsFromDeprecatedProps(styleOptions)); + return normalizeStyleOptions(styleOptions); } diff --git a/packages/component/src/SendBoxToolbar/BasicSendBoxToolbar.tsx b/packages/component/src/SendBoxToolbar/BasicSendBoxToolbar.tsx index 0c945bf922..366cdfb2ab 100644 --- a/packages/component/src/SendBoxToolbar/BasicSendBoxToolbar.tsx +++ b/packages/component/src/SendBoxToolbar/BasicSendBoxToolbar.tsx @@ -6,7 +6,7 @@ import UploadButton from './UploadButton'; const { useStyleOptions } = hooks; // NOTE: "hideUploadButton" is deprecated. Use "disableFileUpload" instead. -// Rectification logic is handled in patchStyleOptionsFromDeprecatedProps.js +// Rectification logic is handled in normalizeStyleOptions.ts function BasicSendBoxToolbar({ className }: SendBoxToolbarMiddlewareProps) { const [{ disableFileUpload }] = useStyleOptions(); From 2d7f569617b2e4208c533d646fe81449d0e3bd0d Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 02:30:34 +0000 Subject: [PATCH 040/108] Transpile Redux devtools extension --- __tests__/unit.setup/jest.config.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/__tests__/unit.setup/jest.config.js b/__tests__/unit.setup/jest.config.js index fedb0e222f..ad0006f20e 100644 --- a/__tests__/unit.setup/jest.config.js +++ b/__tests__/unit.setup/jest.config.js @@ -45,7 +45,10 @@ const TRANSFORM_IGNORE_PACKAGES = [ // Related to Adaptive Cards 'adaptivecards', - 'swiper' + 'swiper', + + // Related to Redux + '@redux-devtools/extension' ]; module.exports = { From 3e0ae98c349650d309f3c6f5cfda1a5b01f45f69 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 02:31:27 +0000 Subject: [PATCH 041/108] Fix ESLint for deps --- packages/react-hooks/src/useMemoWithPrevious.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-hooks/src/useMemoWithPrevious.ts b/packages/react-hooks/src/useMemoWithPrevious.ts index ceb92cbf79..cdc0cdf284 100644 --- a/packages/react-hooks/src/useMemoWithPrevious.ts +++ b/packages/react-hooks/src/useMemoWithPrevious.ts @@ -3,7 +3,7 @@ import { useEffect, useMemo, useRef, type DependencyList } from 'react'; export default function useMemoWithPrevious(factory: (prevValue: T | undefined) => T, deps: DependencyList): T { const prevValueRef = useRef(); // We are building a `useMemo`-like hook, `deps` is passed as-is and `factory` is not one fo the dependencies. - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo const value = useMemo(() => factory(prevValueRef.current), deps); useEffect(() => { From 8d7f238ec28fbea24e1b9f7a7fb93a7c1571bc68 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 02:42:43 +0000 Subject: [PATCH 042/108] Remove console.log --- .../src/Attachment/Text/private/MarkdownTextContent.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index 19317071d8..061d423911 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -153,8 +153,6 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { const { url } = markdownDefinition; const { sanitizedHref } = sanitizeHref(markdownDefinition.url); - console.log('------------', { messageCitation, sanitizedHref, url }); - // After HTML content transform (or sanitization), the link could be gone. // In that case, Markdown will not render the link. We also need to remove it from citation. if (messageCitation) { From d3bdb6fdc364c48a409491d75911835a3d52dfca Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 02:52:39 +0000 Subject: [PATCH 043/108] Remove DictateState type --- packages/core/src/actions/setDictateState.ts | 4 +--- packages/core/src/constants/DictateState.ts | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/core/src/actions/setDictateState.ts b/packages/core/src/actions/setDictateState.ts index b0ae68c1dd..b1c963fa15 100644 --- a/packages/core/src/actions/setDictateState.ts +++ b/packages/core/src/actions/setDictateState.ts @@ -1,8 +1,6 @@ -import type { DictateState } from '../constants/DictateState'; - const SET_DICTATE_STATE = 'WEB_CHAT/SET_DICTATE_STATE'; -export default function setDictateState(dictateState: DictateState) { +export default function setDictateState(dictateState: number) { return { type: SET_DICTATE_STATE, payload: { dictateState } diff --git a/packages/core/src/constants/DictateState.ts b/packages/core/src/constants/DictateState.ts index dac7eb8263..23674bc5f4 100644 --- a/packages/core/src/constants/DictateState.ts +++ b/packages/core/src/constants/DictateState.ts @@ -7,6 +7,4 @@ const DICTATING = 3 as const; // eslint-disable-next-line no-magic-numbers const STOPPING = 4 as const; -type DictateState = typeof DICTATING | typeof IDLE | typeof STARTING | typeof STOPPING | typeof WILL_START; - -export { DICTATING, IDLE, STARTING, STOPPING, WILL_START, type DictateState }; +export { DICTATING, IDLE, STARTING, STOPPING, WILL_START }; From a92af0d9e2ef5416179fcfafdda0a5219fc0cbe0 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 03:07:08 +0000 Subject: [PATCH 044/108] Sort --- packages/component/src/Activity/StackedLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/component/src/Activity/StackedLayout.tsx b/packages/component/src/Activity/StackedLayout.tsx index 48581b5e0d..edb5865e4d 100644 --- a/packages/component/src/Activity/StackedLayout.tsx +++ b/packages/component/src/Activity/StackedLayout.tsx @@ -17,6 +17,7 @@ import React, { memo, useCallback, useMemo, type ReactNode } from 'react'; import ScreenReaderText from '../ScreenReaderText'; import isZeroOrPositive from '../Utils/isZeroOrPositive'; +import getFirstBaseOfSoftwareSourceCode from '../Utils/orgSchema/getFirstBaseOfSoftwareSourceCode'; import textFormatToContentType from '../Utils/textFormatToContentType'; import useUniqueId from '../hooks/internal/useUniqueId'; import { useGetLogicalGroupKey } from '../providers/ActivityLogicalGrouping'; @@ -30,7 +31,6 @@ import StackedLayoutRoot from './StackedLayoutRoot'; import StackedLayoutStatus from './StackedLayoutStatus'; import styles from './StackedLayout.module.css'; -import getFirstBaseOfSoftwareSourceCode from '../Utils/orgSchema/getFirstBaseOfSoftwareSourceCode'; const { useAvatarForBot, useAvatarForUser, useLocalizer, useGetKeyByActivity, useStyleOptions } = hooks; From fa57522b2dec13ec18fe697ef4e0a0c860ad1df0 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 03:56:58 +0000 Subject: [PATCH 045/108] Clean up --- packages/api/src/decorator/DecoratorComposer.tsx | 2 +- .../providers/ActivityFeedbackComposer.tsx | 14 +++++--------- .../src/ActivityStatus/OthersActivityStatus.tsx | 4 ++-- .../Text/private/MarkdownTextContent.tsx | 14 +++++++------- .../src/hooks/internal/useFeedbackActions.ts | 7 +++---- packages/core/src/utils/getOrgSchemaMessage.ts | 8 +------- 6 files changed, 19 insertions(+), 30 deletions(-) diff --git a/packages/api/src/decorator/DecoratorComposer.tsx b/packages/api/src/decorator/DecoratorComposer.tsx index 5435983aea..f78367f451 100644 --- a/packages/api/src/decorator/DecoratorComposer.tsx +++ b/packages/api/src/decorator/DecoratorComposer.tsx @@ -15,7 +15,7 @@ const decoratorComposerPropsSchema = pipe( ); const warnInvalidMiddlewarePropsSchema = optional( - array(custom(value => value && value[middlewareFactoryMarker satisfies symbol] === middlewareFactoryMarker)) + array(custom(value => value[middlewareFactoryMarker satisfies symbol] === middlewareFactoryMarker)) ); type DecoratorComposerProps = Omit, 'middleware'> & { diff --git a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx index 95dbf04542..85c70e17d1 100644 --- a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +++ b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx @@ -163,14 +163,13 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { useMemo(() => { const activeOrCompletedAction = rawActions.find( (action): action is OrgSchemaAction & { actionStatus: ['ActiveActionStatus' | 'CompletedActionStatus'] } => - action.actionStatus?.length === 1 && - (action.actionStatus[0] === 'ActiveActionStatus' || action.actionStatus[0] === 'CompletedActionStatus') + action.actionStatus[0] === 'ActiveActionStatus' || action.actionStatus[0] === 'CompletedActionStatus' ); actionStateRef.current = activeOrCompletedAction ? { actionId: activeOrCompletedAction['@id'], - actionStatus: activeOrCompletedAction.actionStatus?.[0] + actionStatus: activeOrCompletedAction.actionStatus[0] } : undefined; }, [rawActions]); @@ -184,7 +183,7 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { rawActions.map(action => actionStateForActions && actionStateForActions.actionId === action['@id'] ? Object.freeze({ ...action, actionStatus: [actionStateForActions.actionStatus] } satisfies OrgSchemaAction) - : action.actionStatus?.length === 1 && action.actionStatus?.[0] === 'PotentialActionStatus' + : action.actionStatus[0] === 'PotentialActionStatus' ? action : Object.freeze({ ...action, actionStatus: ['PotentialActionStatus'] } satisfies OrgSchemaAction) ) @@ -197,8 +196,7 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { const postActivity = usePostActivity(); const hasSubmitted = useMemo( - () => - actions.some(action => action.actionStatus?.length === 1 && action.actionStatus?.[0] === 'CompletedActionStatus'), + () => actions.some(action => action.actionStatus[0] === 'CompletedActionStatus'), [actions] ); @@ -250,9 +248,7 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { const selectedAction = useMemo( () => actions.find( - ({ actionStatus }) => - actionStatus?.length === 1 && - (actionStatus[0] === 'ActiveActionStatus' || actionStatus[0] === 'CompletedActionStatus') + ({ actionStatus }) => actionStatus[0] === 'ActiveActionStatus' || actionStatus[0] === 'CompletedActionStatus' ), [actions] ); diff --git a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx index f6539080ad..1620c85dfb 100644 --- a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx +++ b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx @@ -39,7 +39,7 @@ const OthersActivityStatus = memo(({ activity, className, slotted }: Props) => { const claimInterpreter = useMemo(() => { try { if (messageThing) { - return parse(orgSchemaClaimSchema, messageThing?.citation[0])?.claimInterpreter[0]; + return parse(orgSchemaClaimSchema, messageThing?.citation[0]).claimInterpreter[0]; } const [firstClaim] = graph @@ -60,7 +60,7 @@ const OthersActivityStatus = memo(({ activity, className, slotted }: Props) => { if (replyAction) { warnRootLevelThings(); - return replyAction?.provider?.[0]; + return replyAction?.provider[0]; } } catch { // Intentionally left blank. diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index 061d423911..ea0d8bad6b 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -17,6 +17,7 @@ import { custom, object, optional, parse, pipe, readonly, string, type InferInpu import ActivityFeedback from '../../../ActivityFeedback/ActivityFeedback'; import { LinkDefinitionItem, LinkDefinitions } from '../../../LinkDefinition/index'; import dereferenceBlankNodes from '../../../Utils/JSONLinkedData/dereferenceBlankNodes'; +import getFirstBaseOfSoftwareSourceCode from '../../../Utils/orgSchema/getFirstBaseOfSoftwareSourceCode'; import useSanitizeHrefCallback from '../../../hooks/internal/useSanitizeHrefCallback'; import useStreamingMarkdownWithDefinitions, { type MarkdownLinkDefinition @@ -29,7 +30,6 @@ import MessageSensitivityLabel, { type MessageSensitivityLabelProps } from './Me import isAIGeneratedActivity from './isAIGeneratedActivity'; import isHTMLButtonElement from './isHTMLButtonElement'; -import getFirstBaseOfSoftwareSourceCode from '../../../Utils/orgSchema/getFirstBaseOfSoftwareSourceCode'; import textContentStyles from '../TextContent.module.css'; import citationModalStyles from './CitationModal.module.css'; @@ -114,7 +114,6 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { markdownDefinitions .map(markdownDefinition => { let messageCitation: OrgSchemaClaim | undefined = messageThing?.citation - // .filter(claim => claim['@type'] === 'Claim') .map(claim => parse(orgSchemaClaimSchema, claim)) .find(({ position }) => '' + position[0] === markdownDefinition.identifier); @@ -143,7 +142,7 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { } : { '@type': 'DigitalDocument', - url: [markdownDefinition.url] + url: markdownDefinition.url } ] } satisfies InferInput); @@ -265,13 +264,14 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { // The main text of the citation entry (e.g. the title of the document). Used as the content of the main link and, if it exists, the header of the popup window. const getEntryMainText = (entry: Entry): string | undefined => - entry.claim?.name?.[0] ?? entry.claim?.appearance?.[0]?.name?.[0] ?? (entry.markdownDefinition.title || undefined); + entry.claim?.name[0] ?? entry.claim?.appearance[0]?.name[0] ?? (entry.markdownDefinition.title || undefined); // Optional alternate name for the entry, used as a subtitle beneath the link - const getEntryBadgeName = (entry: Entry) => entry.claim?.appearance?.[0]?.usageInfo?.[0]?.name?.[0]; + const getEntryBadgeName = (entry: Entry): string | undefined => entry.claim?.appearance[0]?.usageInfo[0]?.name[0]; // Secondary text describing the citation, used in the a11y description (i.e. the div's title attribute) - const getEntryDescription = (entry: Entry) => entry.claim?.appearance?.[0]?.usageInfo?.[0]?.description?.[0]; + const getEntryDescription = (entry: Entry): string | undefined => + entry.claim?.appearance[0]?.usageInfo[0]?.description[0]; const firstSoftwareSourceCodeBase = useMemo(() => getFirstBaseOfSoftwareSourceCode(messageThing), [messageThing]); @@ -300,7 +300,7 @@ function MarkdownTextContent(props: MarkdownTextContentProps) {
{activity.type === 'message' && firstSoftwareSourceCodeBase?.text && - !messageThing?.keywords.includes?.('Collapsible') ? ( + !messageThing?.keywords.includes('Collapsible') ? ( ( - () => actions.some(action => action.actionStatus?.[0] === 'CompletedActionStatus'), + () => actions.some(action => action.actionStatus[0] === 'CompletedActionStatus'), [actions] ); @@ -73,7 +73,7 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { actions.map(action => action === target ? Object.freeze({ ...action, actionStatus: ['ActiveActionStatus'] } satisfies OrgSchemaAction) - : action.actionStatus?.[0] === 'ActiveActionStatus' + : action.actionStatus[0] === 'ActiveActionStatus' ? Object.freeze({ ...action, actionStatus: ['PotentialActionStatus'] } satisfies OrgSchemaAction) : action ) @@ -107,8 +107,7 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { const selectedAction = useMemo( () => actions.find( - ({ actionStatus }) => - actionStatus?.[0] === 'ActiveActionStatus' || actionStatus?.[0] === 'CompletedActionStatus' + ({ actionStatus }) => actionStatus[0] === 'ActiveActionStatus' || actionStatus[0] === 'CompletedActionStatus' ), [actions] ); diff --git a/packages/core/src/utils/getOrgSchemaMessage.ts b/packages/core/src/utils/getOrgSchemaMessage.ts index a9c62d3055..86b093c74f 100644 --- a/packages/core/src/utils/getOrgSchemaMessage.ts +++ b/packages/core/src/utils/getOrgSchemaMessage.ts @@ -15,13 +15,7 @@ export default function getOrgSchemaMessage(graph: readonly EntityType[]): Creat entity['@id'] === ''; if (isPossiblySelfMessage) { - try { - return parse(creativeWorkSchema, entity); - } catch (error) { - console.error(safeParse(creativeWorkSchema, entity).issues); - - throw error; - } + return parse(creativeWorkSchema, entity); } } } From fca8d69588abbdb95cf78239b75bf0938de4d255 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 04:00:15 +0000 Subject: [PATCH 046/108] Clean up --- .../src/components/activity/CopilotMessageHeader.tsx | 4 ++-- .../components/preChatActivity/PreChatMessageActivity.tsx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx index 24e0962f96..d73e5e78d6 100644 --- a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx +++ b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx @@ -37,8 +37,8 @@ function CopilotMessageHeader(props: CopilotMessageHeaderProps) { ); const author = useActivityAuthor(activity); - const avatarImage = author?.image?.[0] || botAvatarImage; - const botTitle = author?.name?.[0] || activity?.from?.name?.[0]; + const avatarImage = author?.image[0] || botAvatarImage; + const botTitle = author?.name[0] || activity?.from?.name; return (
diff --git a/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx b/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx index c0bfa4ca37..6955f95b7d 100644 --- a/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx +++ b/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx @@ -21,7 +21,7 @@ const PreChatMessageActivity = ({ activity }: Props) => { const author = useActivityAuthor(activity); const html = useMemo( - () => (renderMarkdownAsHTML ? { __html: renderMarkdownAsHTML(author?.description?.[0] || '') } : { __html: '' }), + () => (renderMarkdownAsHTML ? { __html: renderMarkdownAsHTML(author?.description[0] || '') } : { __html: '' }), [author?.description, renderMarkdownAsHTML] ); @@ -36,9 +36,9 @@ const PreChatMessageActivity = ({ activity }: Props) => { > {author.image && ( {localize('AVATAR_ALT', )} {author.name &&

{author.name}

} From 0b4d1df9874912321ed57402ff89d7ba89f614d0 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 18:27:22 +0000 Subject: [PATCH 047/108] Add xxxEntries --- .../Text/private/MarkdownTextContent.tsx | 4 +- .../src/types/external/OrgSchema/Action.ts | 27 +++---- .../src/types/external/OrgSchema/Claim.ts | 28 ++++--- .../types/external/OrgSchema/CreativeWork.ts | 45 ++++++----- .../types/external/OrgSchema/DefinedTerm.ts | 26 +++--- .../src/types/external/OrgSchema/Person.ts | 23 +++--- .../src/types/external/OrgSchema/Project.ts | 33 +++----- .../external/OrgSchema/SoftwareSourceCode.ts | 29 ++++--- .../src/types/external/OrgSchema/Thing.ts | 81 ++++--------------- .../types/external/OrgSchema/UserReview.ts | 24 +++--- .../types/external/OrgSchema/VoteAction.ts | 24 +++--- .../core/src/utils/getOrgSchemaMessage.ts | 2 +- 12 files changed, 141 insertions(+), 205 deletions(-) diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index ea0d8bad6b..e3cb76f682 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -121,7 +121,7 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { const rootLevelClaim = graph .filter(({ type }) => type === 'https://schema.org/Claim') .map(claim => parse(orgSchemaClaimSchema, claim)) - .find(({ '@id': id }) => id === markdownDefinition.url); + .find(claim => claim['@id'] === markdownDefinition.url); if (rootLevelClaim) { console.warn( @@ -247,7 +247,7 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { if (usageInfo) { const [pattern] = usageInfo.pattern; - const encryptionStatus = !!usageInfo.keywords?.find(keyword => keyword === 'encrypted-content'); + const encryptionStatus = !!usageInfo.keywords.find(keyword => keyword === 'encrypted-content'); return { color: diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index c0a922d4bb..6d9e23e25c 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -1,9 +1,9 @@ -import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; import orgSchemaProperties from './private/orgSchemaProperties'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview'; /** @@ -76,20 +76,17 @@ type ActionOutput = ThingOutput & { readonly result: readonly (ThingOutput | UserReviewOutput)[]; }; -const actionSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - pipe( - object({ - actionOption: orgSchemaProperties(string()), - actionStatus: orgSchemaProperties(actionStatusSchema), - provider: orgSchemaProperties(lazy(() => projectSchema)), - result: orgSchemaProperties(userReviewSchema) - }), - readonly() - ) -]); +const actionEntries = { + ...thingEntries, + actionOption: orgSchemaProperties(string()), + actionStatus: orgSchemaProperties(actionStatusSchema), + provider: orgSchemaProperties(lazy(() => projectSchema)), + result: orgSchemaProperties(userReviewSchema) +}; + +const actionSchema: GenericSchema = pipe(looseObject(actionEntries), readonly()); /** @deprecated Use Valibot.parse(actionSchema) instead. Will be removed on or after 2028-04-23. */ const parseAction = (action: ActionInput): ActionOutput => parse(actionSchema, action); -export { actionSchema, parseAction, type ActionInput, type ActionOutput }; +export { actionEntries, actionSchema, parseAction, type ActionInput, type ActionOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index f0bdc3f87c..bc2da5f95b 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -1,6 +1,11 @@ -import { intersect, lazy, object, parse, pipe, readonly, type GenericSchema } from 'valibot'; +import { lazy, looseObject, parse, pipe, readonly, type GenericSchema } from 'valibot'; -import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; +import { + creativeWorkEntries, + creativeWorkSchema, + type CreativeWorkInput, + type CreativeWorkOutput +} from './CreativeWork'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -54,18 +59,15 @@ type ClaimOutput = CreativeWorkOutput & { readonly claimInterpreter: readonly ProjectOutput[]; }; -const claimSchema: GenericSchema = intersect([ - lazy(() => creativeWorkSchema), - pipe( - object({ - appearance: orgSchemaProperties(lazy(() => creativeWorkSchema)), - claimInterpreter: orgSchemaProperties(lazy(() => projectSchema)) - }), - readonly() - ) -]); +const claimEntries = { + ...creativeWorkEntries, + appearance: orgSchemaProperties(lazy(() => creativeWorkSchema)), + claimInterpreter: orgSchemaProperties(lazy(() => projectSchema)) +}; + +const claimSchema: GenericSchema = pipe(looseObject(claimEntries), readonly()); /** @deprecated Use Valibot.parse(claimSchema) instead. Will be removed on or after 2028-04-23. */ const parseClaim = (claim: ClaimInput): ClaimOutput => parse(claimSchema, claim); -export { claimSchema, parseClaim, type ClaimInput, type ClaimOutput }; +export { claimEntries, claimSchema, parseClaim, type ClaimInput, type ClaimOutput }; diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 6d47837ffb..fe1894e813 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, number, object, parse, string, union, type GenericSchema } from 'valibot'; +import { lazy, looseObject, number, parse, pipe, readonly, string, union, type GenericSchema } from 'valibot'; import { creativeWorkStatusSchema, @@ -8,7 +8,7 @@ import { import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm'; import { personSchema, type PersonInput, type PersonOutput } from './Person'; import orgSchemaProperties from './private/orgSchemaProperties'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; /** * The most generic kind of creative work, including books, movies, photographs, software programs, etc. @@ -178,28 +178,29 @@ type CreativeWorkOutput = ThingOutput & { readonly usageInfo: readonly CreativeWorkOutput[]; }; -const creativeWorkSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - object({ - // For forward compatibility, we did not enforce @type must be "CreativeWork" or any other subtypes. - // In future, if Schema.org introduced a new subtype of CreativeWork, we should still able to parse that one as a CreativeWork. - - abstract: orgSchemaProperties(string()), - author: orgSchemaProperties(union([lazy(() => personSchema), string()])), - citation: orgSchemaProperties(lazy(() => creativeWorkSchema)), - creativeWorkStatus: orgSchemaProperties(creativeWorkStatusSchema), - isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema)), - isPartOf: orgSchemaProperties(lazy(() => creativeWorkSchema)), - keywords: orgSchemaProperties(union([lazy(() => definedTermSchema), string()])), - pattern: orgSchemaProperties(lazy(() => definedTermSchema)), - position: orgSchemaProperties(union([number(), string()])), - text: orgSchemaProperties(string()), - usageInfo: orgSchemaProperties(lazy(() => creativeWorkSchema)) - }) -]); +// Cyclic dependency. +// eslint-disable-next-line prefer-const +let creativeWorkSchema: GenericSchema; + +const creativeWorkEntries = { + ...thingEntries, + abstract: orgSchemaProperties(string()), + author: orgSchemaProperties(union([lazy(() => personSchema), string()])), + citation: orgSchemaProperties(lazy(() => creativeWorkSchema)), + creativeWorkStatus: orgSchemaProperties(creativeWorkStatusSchema), + isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema)), + isPartOf: orgSchemaProperties(lazy(() => creativeWorkSchema)), + keywords: orgSchemaProperties(union([lazy(() => definedTermSchema), string()])), + pattern: orgSchemaProperties(lazy(() => definedTermSchema)), + position: orgSchemaProperties(union([number(), string()])), + text: orgSchemaProperties(string()), + usageInfo: orgSchemaProperties(lazy(() => creativeWorkSchema)) +}; + +creativeWorkSchema = pipe(looseObject(creativeWorkEntries), readonly()); /** @deprecated Use Valibot.parse(creativeWorkSchema) instead. Will be removed on or after 2028-04-23. */ const parseCreativeWork = (creativeWork: CreativeWorkInput): CreativeWorkOutput => parse(creativeWorkSchema, creativeWork); -export { creativeWorkSchema, parseCreativeWork, type CreativeWorkInput, type CreativeWorkOutput }; +export { creativeWorkEntries, creativeWorkSchema, parseCreativeWork, type CreativeWorkInput, type CreativeWorkOutput }; diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index 6b6e4d8dd6..9a634440a2 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -1,6 +1,6 @@ -import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; /** @@ -49,18 +49,18 @@ type DefinedTermOutput = ThingOutput & { readonly termCode: readonly string[]; }; -const definedTermSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - pipe( - object({ - inDefinedTermSet: orgSchemaProperties(string()), - termCode: orgSchemaProperties(string()) - }), - readonly() - ) -]); +const definedTermEntries = { + ...thingEntries, + inDefinedTermSet: orgSchemaProperties(string()), + termCode: orgSchemaProperties(string()) +}; + +const definedTermSchema: GenericSchema = pipe( + looseObject(definedTermEntries), + readonly() +); /** @deprecated Use Valibot.parse(definedTermSchema) instead. Will be removed on or after 2028-04-23. */ const parseDefinedTerm = (definedTerm: DefinedTermInput): DefinedTermOutput => parse(definedTermSchema, definedTerm); -export { definedTermSchema, parseDefinedTerm, type DefinedTermInput, type DefinedTermOutput }; +export { definedTermEntries, definedTermSchema, parseDefinedTerm, type DefinedTermInput, type DefinedTermOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index 9f395e91a5..0cdf0aa06a 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -1,5 +1,5 @@ -import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; import orgSchemaProperties from './private/orgSchemaProperties'; /** @@ -38,17 +38,14 @@ type PersonOutput = ThingOutput & { readonly image: readonly string[]; }; -const personSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - pipe( - object({ - description: orgSchemaProperties(string()), - image: orgSchemaProperties(string()), - name: orgSchemaProperties(string()) - }), - readonly() - ) -]); +const personEntries = { + ...thingEntries, + description: orgSchemaProperties(string()), + image: orgSchemaProperties(string()), + name: orgSchemaProperties(string()) +}; + +const personSchema: GenericSchema = pipe(looseObject(personEntries), readonly()); /** @deprecated Use Valibot.parse(personSchema) instead. Will be removed on or after 2028-04-23. */ const parsePerson = (person: PersonInput): PersonOutput => parse(personSchema, person); diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index 89238150eb..02daa253b6 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -1,7 +1,7 @@ -import { intersect, lazy, object, parse, pipe, readonly, string } from 'valibot'; +import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import orgSchemaProperties from './private/orgSchemaProperties'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; /** * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. @@ -35,29 +35,14 @@ type ProjectOutput = ThingOutput & { readonly slogan: readonly string[]; }; -/** - * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. - * - * This is partial implementation of https://schema.org/Project. - * - * @see https://schema.org/Project - */ -const projectSchema = intersect([ - lazy(() => thingSchema), - pipe( - object({ - /** - * A slogan or motto associated with the item. - * - * @see https://schema.org/slogan - */ - slogan: orgSchemaProperties(string()) - }), - readonly() - ) -]); +const projectEntries = { + ...thingEntries, + slogan: orgSchemaProperties(string()) +}; + +const projectSchema: GenericSchema = pipe(looseObject(projectEntries), readonly()); /** @deprecated Use Valibot.parse(projectSchema) instead. Will be removed on or after 2028-04-23. */ const parseProject = (project: ProjectInput): ProjectOutput => parse(projectSchema, project); -export { parseProject, projectSchema, type ProjectInput, type ProjectOutput }; +export { projectEntries, parseProject, projectSchema, type ProjectInput, type ProjectOutput }; diff --git a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts index ca8b6c092e..843bd795b5 100644 --- a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts +++ b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts @@ -1,6 +1,6 @@ -import { intersect, lazy, object, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; -import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; +import { creativeWorkEntries, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import orgSchemaProperties from './private/orgSchemaProperties'; /** @@ -35,14 +35,19 @@ type SoftwareSourceCodeOutput = CreativeWorkOutput & { readonly programmingLanguage: readonly string[]; }; -const softwareSourceCodeSchema: GenericSchema = intersect([ - lazy(() => creativeWorkSchema), - pipe( - object({ - programmingLanguage: orgSchemaProperties(string()) - }), - readonly() - ) -]); +const softwareSourceCodeEntries = { + ...creativeWorkEntries, + programmingLanguage: orgSchemaProperties(string()) +}; + +const softwareSourceCodeSchema: GenericSchema = pipe( + looseObject(softwareSourceCodeEntries), + readonly() +); -export { softwareSourceCodeSchema, type SoftwareSourceCodeInput, type SoftwareSourceCodeOutput }; +export { + softwareSourceCodeEntries, + softwareSourceCodeSchema, + type SoftwareSourceCodeInput, + type SoftwareSourceCodeOutput +}; diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index d413feec34..3c6b10292e 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -1,4 +1,4 @@ -import { lazy, literal, object, optional, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { lazy, literal, looseObject, optional, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; import orgSchemaProperties from './private/orgSchemaProperties'; @@ -113,72 +113,21 @@ type ThingOutput = { readonly url: readonly string[]; }; -/** - * The most generic type of item. - * - * This is partial implementation of https://schema.org/Thing. - * - * @see https://schema.org/Thing - */ -const thingSchema: GenericSchema = - // We cannot use looseObject() to futureproof properties. - - // The following code will result in error: - - // parse( - // intersect([ - // looseObject({ one: number() }), - // looseObject({ - // two: pipe( - // number(), - // transform(value => '' + value) - // ) - // }) - // ]), - // { - // one: 1, - // two: 2 - // } - // ); - - // { - // kind: 'schema', - // type: 'intersect', - // input: { - // one: 1, - // two: 2 - // }, - // expected: 'Object', - // received: 'unknown', - // message: 'Invalid type: Expected Object but received unknown' - // }; - - // This is due to how intersect works. - // Intersection kicks-in after both looseObject() is done. - // When trying to intersect { one: 1, two: 2 } and { one: 1, two: '2' }, it would fail. - - // In our code, we are literally doing `intersect(lazy(() => looseObject({})), looseObject({}))`. - - // We cannot use object().entries because we need to use lazy() which requires GenericSchema. - // We could write out the GenericSchema as ObjectSchema but it will be very cumbersome. - // At the end of the day, it is easier to keep object() than looseObject(). - - pipe( - object({ - '@context': optional(pipe(literal('https://schema.org'))), - '@id': optional(string()), - '@type': optional(string()), - additionalType: orgSchemaProperties(string()), - alternateName: orgSchemaProperties(string()), - description: orgSchemaProperties(string()), - name: orgSchemaProperties(string()), - potentialAction: orgSchemaProperties(lazy(() => actionSchema)), - url: orgSchemaProperties(string()) - }), - readonly() - ); +const thingEntries = { + '@context': optional(pipe(literal('https://schema.org'))), + '@id': optional(string()), + '@type': optional(string()), + additionalType: orgSchemaProperties(string()), + alternateName: orgSchemaProperties(string()), + description: orgSchemaProperties(string()), + name: orgSchemaProperties(string()), + potentialAction: orgSchemaProperties(lazy(() => actionSchema)), + url: orgSchemaProperties(string()) +}; + +const thingSchema: GenericSchema = pipe(looseObject(thingEntries), readonly()); /** @deprecated Use Valibot.parse(thingSchema) instead. Will be removed on or after 2028-04-23. */ const parseThing = (thing: ThingInput): ThingOutput => parse(thingSchema, thing); -export { parseThing, thingSchema, type ThingInput, type ThingOutput }; +export { parseThing, thingEntries, thingSchema, type ThingInput, type ThingOutput }; diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index 9ef29823c5..2088845d9a 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -1,7 +1,7 @@ -import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; import orgSchemaProperties from './private/orgSchemaProperties'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; /** * A review created by an end-user (e.g. consumer, purchaser, attendee etc.), in contrast with [`CriticReview`](https://schema.org/CriticReview). @@ -31,17 +31,17 @@ type UserReviewOutput = ThingOutput & { readonly reviewAspect: readonly string[]; }; -const userReviewSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - pipe( - object({ - reviewAspect: orgSchemaProperties(string()) - }), - readonly() - ) -]); +const userReviewEntries = { + ...thingEntries, + reviewAspect: orgSchemaProperties(string()) +}; + +const userReviewSchema: GenericSchema = pipe( + looseObject(userReviewEntries), + readonly() +); /** @deprecated Use Valibot.parse(userReviewSchema) instead. Will be removed on or after 2028-04-23. */ const parseUserReview = (userReview: UserReviewInput): UserReviewOutput => parse(userReviewSchema, userReview); -export { parseUserReview, userReviewSchema, type UserReviewInput, type UserReviewOutput }; +export { parseUserReview, userReviewEntries, userReviewSchema, type UserReviewInput, type UserReviewOutput }; diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index b95577a4f1..bbd06a0d90 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,6 +1,6 @@ -import { intersect, lazy, object, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; -import { actionSchema, type ActionInput, type ActionOutput } from './Action'; +import { actionEntries, type ActionInput, type ActionOutput } from './Action'; import orgSchemaProperties from './private/orgSchemaProperties'; /** @@ -39,17 +39,17 @@ type VoteActionOutput = ActionOutput & { readonly actionOption: readonly string[]; }; -const voteActionSchema: GenericSchema = intersect([ - lazy(() => actionSchema), - pipe( - object({ - actionOption: orgSchemaProperties(string()) - }), - readonly() - ) -]); +const voteActionEntries = { + ...actionEntries, + actionOption: orgSchemaProperties(string()) +}; + +const voteActionSchema: GenericSchema = pipe( + looseObject(voteActionEntries), + readonly() +); /** @deprecated Use Valibot.parse(voteActionSchema) instead. Will be removed on or after 2028-04-23. */ const parseVoteAction = (voteAction: VoteActionInput): VoteActionOutput => parse(voteActionSchema, voteAction); -export { parseVoteAction, voteActionSchema, type VoteActionInput, type VoteActionOutput }; +export { parseVoteAction, voteActionEntries, voteActionSchema, type VoteActionInput, type VoteActionOutput }; diff --git a/packages/core/src/utils/getOrgSchemaMessage.ts b/packages/core/src/utils/getOrgSchemaMessage.ts index 86b093c74f..d36dd162ad 100644 --- a/packages/core/src/utils/getOrgSchemaMessage.ts +++ b/packages/core/src/utils/getOrgSchemaMessage.ts @@ -1,4 +1,4 @@ -import { parse, safeParse } from 'valibot'; +import { parse } from 'valibot'; import { creativeWorkSchema, type CreativeWorkOutput } from '../types/external/OrgSchema/CreativeWork'; import { type WebChatActivity } from '../types/WebChatActivity'; From a9e6d3c4aa48db1c230db52514eb792448f461e0 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 19:12:27 +0000 Subject: [PATCH 048/108] Fix tests --- .../types/external/OrgSchema/Action.spec.ts | 14 +++-- .../types/external/OrgSchema/Claim.spec.ts | 51 +++++++++++++++---- .../CreativeWork.parseCreativeWork.spec.ts | 34 ++++++++++--- .../OrgSchema/Project.parseProject.spec.ts | 10 ++-- .../OrgSchema/Thing.parseThing.spec.ts | 12 +++-- .../external/OrgSchema/VoteAction.spec.ts | 14 +++-- .../private/orgSchemaProperties.spec.ts | 6 +-- .../OrgSchema/private/orgSchemaProperties.ts | 51 ++++++++++++------- .../private/orgSchemaProperty.spec.ts | 22 -------- .../OrgSchema/private/orgSchemaProperty.ts | 33 ------------ 10 files changed, 141 insertions(+), 106 deletions(-) delete mode 100644 packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.spec.ts delete mode 100644 packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.ts diff --git a/packages/core/src/types/external/OrgSchema/Action.spec.ts b/packages/core/src/types/external/OrgSchema/Action.spec.ts index dc68c20b18..541b350f31 100644 --- a/packages/core/src/types/external/OrgSchema/Action.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Action.spec.ts @@ -1,4 +1,8 @@ -import { parseAction } from './Action'; +import { describe, expect, test } from '@jest/globals'; +import { actionSchema, parseAction } from './Action'; +import { parse } from 'valibot'; + +const actionTemplate = parse(actionSchema, {}); describe('Action', () => { describe('actionStatus', () => { @@ -9,8 +13,9 @@ describe('Action', () => { actionStatus: 'ActiveActionStatus' }) ).toEqual({ + ...actionTemplate, '@type': 'Action', - actionStatus: 'ActiveActionStatus' + actionStatus: ['ActiveActionStatus'] })); test('should change invalid into undefined', () => { @@ -18,14 +23,17 @@ describe('Action', () => { expect( parseAction({ '@type': 'Action', + // @ts-expect-error actionStatus: 'ABC' }) ).toEqual({ + ...actionTemplate, '@type': 'Action', - actionStatus: undefined + actionStatus: [] }); } catch (err) { console.error(err); + // @ts-expect-error console.error(err.issues[0].input); throw err; diff --git a/packages/core/src/types/external/OrgSchema/Claim.spec.ts b/packages/core/src/types/external/OrgSchema/Claim.spec.ts index 5a38e9e51e..c53c615df4 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.spec.ts @@ -1,6 +1,12 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; import { claimSchema } from './Claim'; +import { creativeWorkSchema } from './CreativeWork'; +import { projectSchema } from './Project'; + +const claimTemplate = parse(claimSchema, {}); +const creativeWorkTemplate = parse(creativeWorkSchema, {}); +const projectTemplate = parse(projectSchema, {}); describe('Claim', () => { test('should parse appearance', () => @@ -13,11 +19,15 @@ describe('Claim', () => { } }) ).toEqual({ + ...claimTemplate, '@type': 'Claim', - appearance: { - '@type': 'Book', - name: 'Business @ the Speed of Thought' - } + appearance: [ + { + ...creativeWorkTemplate, + '@type': 'Book', + name: ['Business @ the Speed of Thought'] + } + ] })); test('should parse claimInterpreter', () => @@ -30,21 +40,40 @@ describe('Claim', () => { } }) ).toEqual({ + ...claimTemplate, '@type': 'Claim', - claimInterpreter: { - '@type': 'Project', - slogan: 'Empower every person and every organization on the planet to achieve more.' - } + claimInterpreter: [ + { + ...projectTemplate, + '@type': 'Project', + slogan: ['Empower every person and every organization on the planet to achieve more.'] + } + ] })); describe('should parse position', () => { test('as a number', () => - expect(parse(claimSchema, { '@type': 'Claim', position: 1 })).toEqual({ '@type': 'Claim', position: 1 })); + expect( + parse(claimSchema, { + '@type': 'Claim', + position: 1 + }) + ).toEqual({ + ...claimTemplate, + '@type': 'Claim', + position: [1] + })); test('as a string', () => - expect(parse(claimSchema, { '@type': 'Claim', position: 'First' })).toEqual({ + expect( + parse(claimSchema, { + '@type': 'Claim', + position: 'First' + }) + ).toEqual({ + ...claimTemplate, '@type': 'Claim', - position: 'First' + position: ['First'] })); }); }); diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts index 9dff5c0162..14436cf206 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts @@ -1,4 +1,8 @@ -import { parseCreativeWork } from './CreativeWork'; +import { describe, expect, test } from '@jest/globals'; +import { creativeWorkSchema, parseCreativeWork } from './CreativeWork'; +import { parse } from 'valibot'; + +const creativeWorkTemplate = parse(creativeWorkSchema, {}); describe('CreativeWork', () => { test('should parse properties from Thing', () => @@ -8,8 +12,9 @@ describe('CreativeWork', () => { name: 'Business @ the Speed of Thought' }) ).toEqual({ + ...creativeWorkTemplate, '@type': 'CreativeWork', - name: 'Business @ the Speed of Thought' + name: ['Business @ the Speed of Thought'] })); test('should parse thing of Book type', () => @@ -19,8 +24,9 @@ describe('CreativeWork', () => { name: 'Business @ the Speed of Thought' }) ).toEqual({ + ...creativeWorkTemplate, '@type': 'Book', - name: 'Business @ the Speed of Thought' + name: ['Business @ the Speed of Thought'] })); test('should parse citation (singular)', () => @@ -31,9 +37,16 @@ describe('CreativeWork', () => { citation: { '@type': 'Book', name: 'The Road Ahead' } }) ).toEqual({ + ...creativeWorkTemplate, '@type': 'Book', - name: 'Business @ the Speed of Thought', - citation: [{ '@type': 'Book', name: 'The Road Ahead' }] + name: ['Business @ the Speed of Thought'], + citation: [ + { + ...creativeWorkTemplate, + '@type': 'Book', + name: ['The Road Ahead'] + } + ] })); test('should parse citation (plural)', () => @@ -44,8 +57,15 @@ describe('CreativeWork', () => { citation: [{ '@type': 'Book', name: 'The Road Ahead' }] }) ).toEqual({ + ...creativeWorkTemplate, '@type': 'Book', - name: 'Business @ the Speed of Thought', - citation: [{ '@type': 'Book', name: 'The Road Ahead' }] + name: ['Business @ the Speed of Thought'], + citation: [ + { + ...creativeWorkTemplate, + '@type': 'Book', + name: ['The Road Ahead'] + } + ] })); }); diff --git a/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts b/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts index 0d227323ba..b7ac478ac5 100644 --- a/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts @@ -1,5 +1,8 @@ import { describe, expect, test } from '@jest/globals'; -import { parseProject } from './Project'; +import { parseProject, projectSchema } from './Project'; +import { parse } from 'valibot'; + +const projectTemplate = parse(projectSchema, {}); describe('Project', () => { test('should parse', () => { @@ -10,9 +13,10 @@ describe('Project', () => { slogan: 'Empower every person and every organization on the planet to achieve more.' }) ).toEqual({ + ...projectTemplate, '@type': 'Project', - name: 'Microsoft', - slogan: 'Empower every person and every organization on the planet to achieve more.' + name: ['Microsoft'], + slogan: ['Empower every person and every organization on the planet to achieve more.'] }); }); }); diff --git a/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts b/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts index a0fbdf8de7..c9d4492b67 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts @@ -2,6 +2,8 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; import { thingSchema } from './Thing'; +const thingTemplate = parse(thingSchema, {}); + describe('Thing', () => { test('should parse', () => { expect( @@ -10,8 +12,9 @@ describe('Thing', () => { name: 'John Doe' }) ).toEqual({ + ...thingTemplate, '@type': 'Thing', - name: 'John Doe' + name: ['John Doe'] }); }); @@ -22,8 +25,9 @@ describe('Thing', () => { name: 'John Doe' }) ).toEqual({ + ...thingTemplate, '@type': 'Unknown', - name: 'John Doe' + name: ['John Doe'] }); }); @@ -37,6 +41,7 @@ describe('Thing', () => { something: 1 }) ).toEqual({ + ...thingTemplate, '@type': 'Thing', something: 1 }); @@ -49,8 +54,9 @@ describe('Thing', () => { name: 1 }) ).toEqual({ + ...thingTemplate, '@type': 'Thing', - name: undefined + name: [] }); }); }); diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.spec.ts b/packages/core/src/types/external/OrgSchema/VoteAction.spec.ts index 76cf89730b..e4029cd2a7 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.spec.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.spec.ts @@ -1,4 +1,8 @@ -import { parseVoteAction } from './VoteAction'; +import { describe, expect, test } from '@jest/globals'; +import { parseVoteAction, voteActionSchema } from './VoteAction'; +import { parse } from 'valibot'; + +const voteActionTemplate = parse(voteActionSchema, {}); describe('VoteAction', () => { describe('actionOption', () => { @@ -9,8 +13,9 @@ describe('VoteAction', () => { actionOption: 'upvote' }) ).toEqual({ + ...voteActionTemplate, '@type': 'VoteAction', - actionOption: 'upvote' + actionOption: ['upvote'] })); test('should change invalid into undefined', () => { @@ -18,14 +23,17 @@ describe('VoteAction', () => { expect( parseVoteAction({ '@type': 'Action', + // @ts-expect-error actionOption: 123 }) ).toEqual({ + ...voteActionTemplate, '@type': 'Action', - actionOption: undefined + actionOption: [] }); } catch (err) { console.error(err); + // @ts-expect-error console.error(err.issues[0].input); throw err; diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts index eb25caff33..7592867191 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts @@ -10,15 +10,15 @@ describe('orgSchemaProperties', () => { }); test('should turn item of invalid type into undefined', () => { - expect(parse(orgSchemaProperties(string()), 0)).toBeUndefined(); + expect(parse(orgSchemaProperties(string()), 0)).toEqual([]); }); test('should turn null into undefined', () => { - expect(parse(orgSchemaProperties(string()), null)).toBeUndefined(); + expect(parse(orgSchemaProperties(string()), null)).toEqual([]); }); test('should keep undefined as-is', () => { - expect(parse(orgSchemaProperties(string()), undefined)).toBeUndefined(); + expect(parse(orgSchemaProperties(string()), undefined)).toEqual([]); }); }); diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts index d7d27a1f24..e07cebf537 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts @@ -1,7 +1,11 @@ import { + any, array, + fallback, + is, optional, pipe, + safeParse, transform, union, type BaseSchema, @@ -16,25 +20,36 @@ export default function orgSchemaProperties | readonly InferInput[] | undefined, readonly InferOutput[] | undefined> { return optional( - union([ - // If it is an array. - pipe( - array(schema), - transform(value => { - // Filter out all `undefined` value. - const result = value.filter(value => typeof value !== 'undefined'); + fallback( + union([ + // If it is an array. + pipe( + array(any()), + transform(value => { + // Filter out all `undefined` and invalid values. + const result = value.reduce((output, value) => { + if (typeof value !== 'undefined') { + const result = safeParse(schema, value); - // If it is non-empty, return the frozen array, otherwise, return our empty flywheel. - return result.length ? Object.freeze(result) : EMPTY_ARRAY; - }) - ), - pipe( - // Otherwise, it must match the schema - schema, - // Put it in a frozen array tuple. - transform(value => Object.freeze([value])) - ) - ]), + result.success && output.push(result.output); + } + + return output; + }, []); + + // If it is non-empty, return the frozen array, otherwise, return our empty flywheel. + return result.length ? Object.freeze(result) : EMPTY_ARRAY; + }) + ), + pipe( + // Otherwise, it must match the schema + schema, + // Put it in a frozen array tuple. + transform(value => Object.freeze([value])) + ) + ]), + () => EMPTY_ARRAY + ), EMPTY_ARRAY ); } diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.spec.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.spec.ts deleted file mode 100644 index 8495ccf4ab..0000000000 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { describe, expect, test } from '@jest/globals'; -import { parse, string } from 'valibot'; - -import orgSchemaProperty from './orgSchemaProperty'; - -describe('orgSchemaProperty', () => { - test('should keep valid type as-is', () => { - expect(parse(orgSchemaProperty(string()), 'abc')).toBe('abc'); - }); - - test('should keep undefined as-is', () => { - expect(parse(orgSchemaProperty(string()), undefined)).toBeUndefined(); - }); - - test('should convert invalid type to undefined', () => { - expect(parse(orgSchemaProperty(string()), null)).toBeUndefined(); - }); - - test('should take the first item from an array', () => { - expect(parse(orgSchemaProperty(string()), ['abc', 'def', 'xyz'])).toBe('abc'); - }); -}); diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.ts deleted file mode 100644 index e3821a03ab..0000000000 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperty.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - array, - fallback, - optional, - pipe, - transform, - union, - type BaseSchema, - type Fallback, - type GenericSchema, - type InferOutput -} from 'valibot'; - -type ArrayToSingularSchema> = GenericSchema< - InferOutput | InferOutput[] | undefined, - InferOutput | undefined ->; - -const orgSchemaProperty = >(schema: T): ArrayToSingularSchema => - fallback, Fallback>>( - optional( - union([ - pipe( - array(schema), - transform(array => array[0]) - ), - schema - ]) - ), - undefined - ); - -export default orgSchemaProperty; From 9fd04de004962ca3936a3dc27aec52645585391c Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 19:45:51 +0000 Subject: [PATCH 049/108] Add schema.js export --- .../html2/simple/fatModule/fluentTheme.html | 1 + packages/bundle/esbuild.static.mjs | 1 + packages/bundle/package.json | 10 +++++++++ packages/bundle/src/boot/actual/schema.ts | 22 +++++++++++++++++++ packages/bundle/src/boot/exports/schema.ts | 1 + packages/bundle/tsup.config.ts | 8 ++++--- .../types/external/OrgSchema/CreativeWork.ts | 17 ++++++++------ .../activity/private/useActivityAuthor.ts | 2 +- 8 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 packages/bundle/src/boot/actual/schema.ts create mode 100644 packages/bundle/src/boot/exports/schema.ts diff --git a/__tests__/html2/simple/fatModule/fluentTheme.html b/__tests__/html2/simple/fatModule/fluentTheme.html index fff45cf0ad..4288a2e29a 100644 --- a/__tests__/html2/simple/fatModule/fluentTheme.html +++ b/__tests__/html2/simple/fatModule/fluentTheme.html @@ -22,6 +22,7 @@ "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/schema": "/__dist__/packages/bundle/static/botframework-webchat/schema.js", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js", diff --git a/packages/bundle/esbuild.static.mjs b/packages/bundle/esbuild.static.mjs index 863974e53e..22126b7360 100644 --- a/packages/bundle/esbuild.static.mjs +++ b/packages/bundle/esbuild.static.mjs @@ -165,6 +165,7 @@ const IGNORED_OWN_PACKAGES = [ 'botframework-webchat/hook': './src/boot/exports/hook.ts', 'botframework-webchat/internal': './src/boot/exports/internal.ts', 'botframework-webchat/middleware': './src/boot/exports/middleware.ts', + 'botframework-webchat/schema': './src/boot/exports/schema.ts', // TODO: [P2] We can remove the `Array.from()` after bumping Node.js. ...Array.from(allOwnExports.keys()).reduce((entryPoints, key) => ({ ...entryPoints, [key]: key }), {}) }; diff --git a/packages/bundle/package.json b/packages/bundle/package.json index 851811f05b..726b81c89c 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -65,6 +65,16 @@ "default": "./dist/botframework-webchat.middleware.js" } }, + "./schema": { + "import": { + "types": "./dist/botframework-webchat.schema.d.mts", + "default": "./dist/botframework-webchat.schema.mjs" + }, + "require": { + "types": "./dist/botframework-webchat.schema.d.ts", + "default": "./dist/botframework-webchat.schema.js" + } + }, "./static/*": "./static/*" }, "publishConfig": { diff --git a/packages/bundle/src/boot/actual/schema.ts b/packages/bundle/src/boot/actual/schema.ts new file mode 100644 index 0000000000..37699525c1 --- /dev/null +++ b/packages/bundle/src/boot/actual/schema.ts @@ -0,0 +1,22 @@ +export { + orgSchemaActionSchema, + orgSchemaClaimSchema, + orgSchemaCreativeWorkSchema, + orgSchemaDefinedTermSchema, + orgSchemaPersonSchema, + orgSchemaProjectSchema, + orgSchemaSoftwareSourceCodeSchema, + orgSchemaUserReviewSchema, + orgSchemaVoteActionSchema, + orgSchemaThingSchema, + type OrgSchemaThing, + type OrgSchemaAction, + type OrgSchemaClaim, + type OrgSchemaCreativeWork, + type OrgSchemaDefinedTerm, + type OrgSchemaPerson, + type OrgSchemaProject, + type OrgSchemaSoftwareSourceCode, + type OrgSchemaUserReview, + type OrgSchemaVoteAction +} from 'botframework-webchat-core'; diff --git a/packages/bundle/src/boot/exports/schema.ts b/packages/bundle/src/boot/exports/schema.ts new file mode 100644 index 0000000000..903da15447 --- /dev/null +++ b/packages/bundle/src/boot/exports/schema.ts @@ -0,0 +1 @@ +export * from '../actual/schema'; diff --git a/packages/bundle/tsup.config.ts b/packages/bundle/tsup.config.ts index f10dedd7dc..307d6ed5e7 100644 --- a/packages/bundle/tsup.config.ts +++ b/packages/bundle/tsup.config.ts @@ -1,4 +1,5 @@ import { injectCSSPlugin } from '@msinternal/botframework-webchat-styles/build'; +import type { PluginBuild } from 'esbuild'; import path from 'path'; import { defineConfig } from 'tsup'; @@ -8,7 +9,7 @@ import { bundleStyleContent as bundleStyleContentPlaceholder } from './src/style // Redirect import paths for "react" and "react-dom" const resolveReact = { name: 'isomorphic-react', - setup(build) { + setup(build: PluginBuild) { // ESBuild use Go regular expressions and does not understand Unicode flag. // eslint-disable-next-line require-unicode-regexp build.onResolve({ filter: /^(react|react-dom)$/ }, ({ path: pkgName }) => ({ @@ -25,7 +26,8 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat.decorator': './src/boot/exports/decorator.ts', 'botframework-webchat.hook': './src/boot/exports/hook.ts', 'botframework-webchat.internal': './src/boot/exports/internal.ts', - 'botframework-webchat.middleware': './src/boot/exports/middleware.ts' + 'botframework-webchat.middleware': './src/boot/exports/middleware.ts', + 'botframework-webchat.schema': './src/boot/exports/schema.ts' }, env: { ...config.env, @@ -52,7 +54,7 @@ const commonConfig = applyConfig(config => ({ ...(config.esbuildPlugins ?? []), injectCSSPlugin({ ignoreCSSEntries: ['dist/botframework-webchat.component.css'], - stylesPlaceholder: bundleStyleContentPlaceholder, + stylesPlaceholder: bundleStyleContentPlaceholder }) ] })); diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index fe1894e813..116201b4fe 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -180,27 +180,30 @@ type CreativeWorkOutput = ThingOutput & { // Cyclic dependency. // eslint-disable-next-line prefer-const -let creativeWorkSchema: GenericSchema; +let creativeWorkSchema_: GenericSchema; const creativeWorkEntries = { ...thingEntries, abstract: orgSchemaProperties(string()), author: orgSchemaProperties(union([lazy(() => personSchema), string()])), - citation: orgSchemaProperties(lazy(() => creativeWorkSchema)), + citation: orgSchemaProperties(lazy(() => creativeWorkSchema_)), creativeWorkStatus: orgSchemaProperties(creativeWorkStatusSchema), - isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema)), - isPartOf: orgSchemaProperties(lazy(() => creativeWorkSchema)), + isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema_)), + isPartOf: orgSchemaProperties(lazy(() => creativeWorkSchema_)), keywords: orgSchemaProperties(union([lazy(() => definedTermSchema), string()])), pattern: orgSchemaProperties(lazy(() => definedTermSchema)), position: orgSchemaProperties(union([number(), string()])), text: orgSchemaProperties(string()), - usageInfo: orgSchemaProperties(lazy(() => creativeWorkSchema)) + usageInfo: orgSchemaProperties(lazy(() => creativeWorkSchema_)) }; -creativeWorkSchema = pipe(looseObject(creativeWorkEntries), readonly()); +creativeWorkSchema_ = pipe(looseObject(creativeWorkEntries), readonly()); + +// Constantize here, so we are exporting a const than a let. +const creativeWorkSchema = creativeWorkSchema_; /** @deprecated Use Valibot.parse(creativeWorkSchema) instead. Will be removed on or after 2028-04-23. */ const parseCreativeWork = (creativeWork: CreativeWorkInput): CreativeWorkOutput => - parse(creativeWorkSchema, creativeWork); + parse(creativeWorkSchema_, creativeWork); export { creativeWorkEntries, creativeWorkSchema, parseCreativeWork, type CreativeWorkInput, type CreativeWorkOutput }; diff --git a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts index 89d500a02c..c1af6cfd59 100644 --- a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts +++ b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts @@ -1,5 +1,5 @@ -import { orgSchemaPersonSchema, type OrgSchemaPerson } from 'botframework-webchat-core'; import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal'; +import { orgSchemaPersonSchema, type OrgSchemaPerson } from 'botframework-webchat/schema'; import { useMemo } from 'react'; import { parse } from 'valibot'; From 075ed9ff5555246c85cb84c5b74d80a6766d6295 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 22:58:36 +0000 Subject: [PATCH 050/108] Suffix static with .js --- __tests__/html2/activity/message-status.html | 5 +- .../attachment/adaptiveCard/custom.skip.html | 9 ++-- .../html2/boot/deprecation/hooks.new.html | 2 +- __tests__/html2/citation/url.html | 5 +- .../html2/fluentTheme/maxMessageLength.html | 5 +- .../html2/hooks/useActivities.getter.html | 3 +- .../html2/hooks/useActivities.setter.html | 3 +- ...daptiveCardsHostConfig.getter.default.html | 3 +- .../useAdaptiveCardsHostConfig.getter.html | 3 +- .../useAdaptiveCardsHostConfig.setter.html | 3 +- ...seAdaptiveCardsPackage.getter.default.html | 3 +- .../hooks/useAdaptiveCardsPackage.getter.html | 3 +- .../hooks/useAdaptiveCardsPackage.setter.html | 3 +- .../html2/hooks/useAvatarForBot.getter.html | 3 +- .../html2/hooks/useAvatarForBot.setter.html | 3 +- .../html2/hooks/useAvatarForUser.getter.html | 3 +- .../html2/hooks/useAvatarForUser.setter.html | 3 +- __tests__/html2/hooks/useByteFormatter.html | 3 +- __tests__/html2/hooks/useCapabilities.html | 3 +- .../hooks/useConnectivityStatus.getter.html | 3 +- .../hooks/useConnectivityStatus.setter.html | 3 +- .../html2/hooks/useDateFormatter.en.html | 3 +- .../html2/hooks/useDateFormatter.yue.html | 3 +- .../hooks/useDictateInterims.getter.html | 3 +- .../hooks/useDictateInterims.setter.html | 3 +- .../hooks/useDisabled.getter.default.html | 3 +- __tests__/html2/hooks/useDisabled.getter.html | 3 +- __tests__/html2/hooks/useDisabled.setter.html | 3 +- .../html2/hooks/useDismissNotification.html | 3 +- .../html2/hooks/useFocus.sendBox.pure.html | 3 +- .../hooks/useGrammars.getter.default.html | 3 +- __tests__/html2/hooks/useGrammars.getter.html | 3 +- __tests__/html2/hooks/useGrammars.setter.html | 3 +- .../useGroupTimestamp.getter.default.html | 3 +- .../hooks/useGroupTimestamp.getter.false.html | 3 +- .../html2/hooks/useGroupTimestamp.getter.html | 3 +- .../html2/hooks/useGroupTimestamp.setter.html | 3 +- .../useInjectStylesElements/withNonce.html | 5 +- .../hooks/useLanguage.getter.default.html | 3 +- .../hooks/useLanguage.getter.speech.html | 3 +- .../html2/hooks/useLanguage.getter.xx-YY.html | 3 +- .../html2/hooks/useLanguage.getter.yue.html | 3 +- .../hooks/useLanguage.getter.zh-YUE.html | 3 +- __tests__/html2/hooks/useLanguage.setter.html | 3 +- .../html2/hooks/useLocalizer.default.html | 3 +- .../html2/hooks/useLocalizer.nonExistent.html | 3 +- .../hooks/useLocalizer.overrideStrings.html | 3 +- ...ocalizer.plural.firstArgumentIsString.html | 3 +- .../html2/hooks/useLocalizer.plural.one.html | 3 +- .../useLocalizer.plural.otherFallback.html | 3 +- .../useLocalizer.plural.throw.idOfString.html | 3 +- ...eLocalizer.plural.throw.idOneOfNumber.html | 3 +- ...izer.plural.throw.idOtherNotUndefined.html | 3 +- .../useLocalizer.plural.throw.idUnknown.html | 3 +- .../html2/hooks/useLocalizer.plural.two.html | 3 +- .../hooks/useLocalizer.throwOnInvalidId.html | 3 +- __tests__/html2/hooks/useLocalizer.yue.html | 3 +- .../html2/hooks/useLocalizer.yue.plural.html | 3 +- .../html2/hooks/useMarkActivityAsSpoken.html | 3 +- .../html2/hooks/useMicrophoneButtonClick.html | 3 +- .../html2/hooks/usePerformCardAction.html | 3 +- __tests__/html2/hooks/usePostActivity.html | 3 +- .../html2/hooks/useRelativeTimeFormatter.html | 3 +- .../hooks/useRenderMarkdownAsHTML.custom.html | 3 +- .../useRenderMarkdownAsHTML.default.html | 3 +- .../useRenderMarkdownAsHTML.externalLink.html | 3 +- ...RenderMarkdownAsHTML.externalLink.yue.html | 3 +- .../hooks/useRenderMarkdownAsHTML.null.html | 3 +- ...echInterimsVisible.getter.recognition.html | 3 +- ...peechInterimsVisible.getter.synthesis.html | 3 +- ...seSendBoxSpeechInterimsVisible.setter.html | 3 +- .../html2/hooks/useSendBoxValue.getter.html | 3 +- .../html2/hooks/useSendBoxValue.setter.html | 3 +- __tests__/html2/hooks/useSendFiles.html | 3 +- __tests__/html2/hooks/useSendMessage.html | 3 +- __tests__/html2/hooks/useSendMessageBack.html | 3 +- __tests__/html2/hooks/useSendPostBack.html | 3 +- __tests__/html2/hooks/useSetNotification.html | 3 +- .../useShouldSpeakIncomingActivity.false.html | 3 +- .../useShouldSpeakIncomingActivity.true.html | 3 +- __tests__/html2/hooks/useStartDictate.html | 3 +- __tests__/html2/hooks/useStopDictate.html | 3 +- .../html2/hooks/useStyleOptions.getter.html | 3 +- .../html2/hooks/useStyleOptions.setter.html | 3 +- __tests__/html2/hooks/useStyleSet.getter.html | 3 +- __tests__/html2/hooks/useStyleSet.setter.html | 3 +- __tests__/html2/hooks/useSubmitSendBox.html | 3 +- .../html2/hooks/useSuggestedActions.html | 3 +- __tests__/html2/hooks/useTextBoxValue.html | 3 +- .../hooks/useTimeoutForSend.default.html | 3 +- .../html2/hooks/useTimeoutForSend.getter.html | 3 +- .../html2/hooks/useTimeoutForSend.setter.html | 3 +- __tests__/html2/hooks/useTrackDimension.html | 3 +- ...seTrackDimension.invalidDimensionName.html | 3 +- ...eTrackDimension.invalidDimensionValue.html | 3 +- .../html2/hooks/useTrackEvent.debug.html | 3 +- .../hooks/useTrackEvent.error.complex.html | 3 +- __tests__/html2/hooks/useTrackEvent.html | 3 +- __tests__/html2/hooks/useTrackEvent.info.html | 3 +- .../useTrackEvent.invalid.booleanData.html | 3 +- .../hooks/useTrackEvent.invalid.complex.html | 3 +- .../hooks/useTrackEvent.invalid.name.html | 3 +- .../hooks/useTrackEvent.warn.numeric.html | 3 +- __tests__/html2/hooks/useTrackException.html | 3 +- .../hooks/useTrackException.nonFatal.html | 3 +- .../html2/hooks/useUserID.getter.default.html | 3 +- __tests__/html2/hooks/useUserID.getter.html | 3 +- __tests__/html2/hooks/useUserID.setter.html | 3 +- .../hooks/useUsername.getter.default.html | 3 +- __tests__/html2/hooks/useUsername.getter.html | 3 +- __tests__/html2/hooks/useUsername.setter.html | 3 +- __tests__/html2/hooks/useVoiceSelector.html | 3 +- .../useWebSpeechPonyfill.getter.bypass.html | 3 +- .../hooks/useWebSpeechPonyfill.getter.html | 3 +- .../hooks/useWebSpeechPonyfill.setter.html | 3 +- .../markdown/vnext/markdownStreaming.html | 5 +- .../supportPolymiddleware.reactDOMRender.html | 3 +- ...dleware.reactDOMRender.withCreateRoot.html | 3 +- .../supportPolymiddleware.renderWebChat.html | 3 +- .../simple/fatModule/esm.sh/fluentTheme.html | 5 +- .../fatModule/esm.sh/tsx/fluentTheme.html | 5 +- .../simple/fatModule/esm.sh/tsx/simple.html | 3 +- ...dleware.reactDOMRender.withCreateRoot.html | 3 +- .../html2/simple/fatModule/fluentTheme.html | 6 +-- .../simple/fatModule/simple.runHook.html | 3 +- .../supportPolymiddleware.reactDOMRender.html | 3 +- .../supportPolymiddleware.renderWebChat.html | 3 +- __tests__/html2/themeProvider/override.html | 5 +- docs/CAPABILITIES.md | 2 +- docs/MIDDLEWARE.md | 4 +- .../api-graph/src/private/GraphProvider.tsx | 2 +- packages/api/package.json | 40 ++++++++++++++ packages/api/src/boot/deprecated/decorator.ts | 5 ++ packages/api/src/boot/deprecated/graph.ts | 5 ++ packages/api/src/boot/deprecated/hook.ts | 5 ++ packages/api/src/boot/deprecated/internal.ts | 5 ++ .../api/src/boot/deprecated/middleware.ts | 5 ++ .../ActivitySendStatusComposer.tsx | 2 +- .../ActivityTyping/ActivityTypingComposer.tsx | 2 +- .../private/useReduceActivities.spec.tsx | 2 +- .../createDefaultGroupActivitiesMiddleware.ts | 4 +- packages/api/tsup.config.ts | 8 ++- packages/bundle/esbuild.static.mjs | 9 +++- packages/bundle/package.json | 52 ++++++++++++++++++- .../Attachment/AdaptiveCardRenderer.tsx | 2 +- .../src/boot/actual/component/minimal.ts | 2 +- packages/bundle/src/boot/actual/decorator.ts | 4 +- .../bundle/src/boot/actual/hook/minimal.ts | 2 +- packages/bundle/src/boot/actual/internal.ts | 4 +- packages/bundle/src/boot/actual/middleware.ts | 10 ++-- .../src/boot/exports/deprecated/component.ts | 5 ++ .../src/boot/exports/deprecated/decorator.ts | 5 ++ .../src/boot/exports/deprecated/hook.ts | 5 ++ .../src/boot/exports/deprecated/internal.ts | 5 ++ .../src/boot/exports/deprecated/middleware.ts | 5 ++ .../src/boot/exports/deprecated/minimal.ts | 5 ++ .../src/codeHighlighter/ShikiComposer.tsx | 2 +- .../middleware/createSanitizeMiddleware.ts | 2 +- .../betterLinkDocumentMod.ariaLabel.spec.ts | 2 +- .../betterLinkDocumentMod.asButton.spec.ts | 2 +- .../betterLinkDocumentMod.className.spec.ts | 2 +- ...etterLinkDocumentMod.iconClassName.spec.ts | 2 +- .../private/betterLinkDocumentMod.rel.spec.ts | 2 +- .../betterLinkDocumentMod.selector.spec.ts | 2 +- .../betterLinkDocumentMod.target.spec.ts | 2 +- .../betterLinkDocumentMod.title.spec.ts | 2 +- ...LinkDocumentMod.wrapZeroWidthSpace.spec.ts | 2 +- .../bundle/src/markdown/renderMarkdown.ts | 2 +- .../src/stylesheet/BundleStylesheet.tsx | 4 +- packages/bundle/tsup.config.ts | 14 ++++- packages/component/package.json | 40 ++++++++++++++ .../component/src/Activity/StackedLayout.tsx | 2 +- .../RestrictedActivityDebugAPI.ts | 2 +- packages/component/src/BuiltInDecorator.tsx | 2 +- packages/component/src/Composer.tsx | 6 +-- packages/component/src/Dictation.js | 2 +- .../defaultActivityPolymiddleware.tsx | 2 +- ...ultActivityGroupingDecoratorMiddleware.tsx | 2 +- .../ui/LegacyActivityBridgeComposer.tsx | 2 +- .../ui/PartGrouping/PartGrouping.tsx | 2 +- .../createDefaultAvatarPolymiddleware.tsx | 2 +- packages/component/src/SendBox/TextBox.tsx | 2 +- .../Styles/CSSCustomPropertiesContainer.tsx | 2 +- .../component/src/Transcript/ActivityTree.tsx | 2 +- .../hooks/useRenderActivityProps.ts | 2 +- .../src/boot/deprecated/component.ts | 5 ++ .../src/boot/deprecated/decorator.ts | 5 ++ .../component/src/boot/deprecated/hook.ts | 5 ++ .../component/src/boot/deprecated/internal.ts | 5 ++ packages/component/src/boot/hook.ts | 2 +- packages/component/src/boot/internal.ts | 2 +- .../decorator/private/WebChatDecorator.tsx | 2 +- .../stylesheet/DecoratorStylesheet.tsx | 2 +- .../RenderingActivitiesComposer.tsx | 2 +- .../private/RenderingActivitiesContext.ts | 2 +- .../useActivityRendererMap.ts | 2 +- .../src/providers/Theme/ThemeProvider.tsx | 4 +- .../src/providers/Theme/private/Context.ts | 2 +- .../src/stylesheet/ComponentStylesheet.tsx | 2 +- packages/component/tsup.config.ts | 21 ++++++-- packages/core/package.json | 30 +++++++++++ .../{activity/index.ts => boot/activity.ts} | 0 packages/core/src/boot/deprecated/activity.ts | 5 ++ packages/core/src/boot/deprecated/graph.ts | 5 ++ packages/core/src/boot/deprecated/internal.ts | 5 ++ .../src/{graph/index.ts => boot/graph.ts} | 2 +- .../{internal/index.ts => boot/internal.ts} | 4 +- packages/core/src/createStore.ts | 2 +- .../core/src/graph/createGraphFromStore.ts | 3 +- packages/core/src/types/WebChatActivity.ts | 2 +- packages/core/tsup.config.ts | 10 ++-- packages/debug-theme/src/DebugProvider.tsx | 2 +- .../activity/CopilotMessageHeader.tsx | 2 +- .../activity/PartGroupingDecorator.tsx | 2 +- .../activity/private/isAIGeneratedActivity.ts | 2 +- .../activity/private/useActivityAuthor.ts | 4 +- .../private/useActivityStyleOptions.ts | 2 +- .../VoiceTranscriptActivityStatus.tsx | 4 +- .../src/components/icon/FluentIcon.tsx | 2 +- .../linerActivity/private/LinerActivity.tsx | 2 +- .../private/isLinerMessageActivity.ts | 2 +- .../PreChatMessageActivity.tsx | 2 +- .../StarterPromptsCardAction.tsx | 2 +- .../preChatActivity/StarterPromptsToolbar.tsx | 2 +- .../isPreChatMessageActivity.ts | 2 +- .../src/components/sendBox/ErrorMessage.tsx | 2 +- .../src/components/sendBox/SendBox.tsx | 2 +- .../suggestedActions/SuggestedAction.tsx | 2 +- .../private/computeSuggestedActionText.ts | 2 +- .../{decorator.ts => decorator.js.ts} | 0 .../{hook.ts => hook.js.ts} | 0 .../{internal.ts => internal.js.ts} | 0 .../{middleware.ts => middleware.js.ts} | 0 .../{component.ts => component.js.ts} | 0 .../{decorator.ts => decorator.js.ts} | 0 .../{hook.ts => hook.js.ts} | 0 .../{internal.ts => internal.js.ts} | 0 .../src/private/FluentThemeProvider.tsx | 6 +-- .../src/stylesheet/FluentThemeStylesheet.tsx | 4 +- .../SuggestedActionsComposer.tsx | 2 +- 240 files changed, 528 insertions(+), 383 deletions(-) create mode 100644 packages/api/src/boot/deprecated/decorator.ts create mode 100644 packages/api/src/boot/deprecated/graph.ts create mode 100644 packages/api/src/boot/deprecated/hook.ts create mode 100644 packages/api/src/boot/deprecated/internal.ts create mode 100644 packages/api/src/boot/deprecated/middleware.ts create mode 100644 packages/bundle/src/boot/exports/deprecated/component.ts create mode 100644 packages/bundle/src/boot/exports/deprecated/decorator.ts create mode 100644 packages/bundle/src/boot/exports/deprecated/hook.ts create mode 100644 packages/bundle/src/boot/exports/deprecated/internal.ts create mode 100644 packages/bundle/src/boot/exports/deprecated/middleware.ts create mode 100644 packages/bundle/src/boot/exports/deprecated/minimal.ts create mode 100644 packages/component/src/boot/deprecated/component.ts create mode 100644 packages/component/src/boot/deprecated/decorator.ts create mode 100644 packages/component/src/boot/deprecated/hook.ts create mode 100644 packages/component/src/boot/deprecated/internal.ts rename packages/core/src/{activity/index.ts => boot/activity.ts} (100%) create mode 100644 packages/core/src/boot/deprecated/activity.ts create mode 100644 packages/core/src/boot/deprecated/graph.ts create mode 100644 packages/core/src/boot/deprecated/internal.ts rename packages/core/src/{graph/index.ts => boot/graph.ts} (81%) rename packages/core/src/{internal/index.ts => boot/internal.ts} (67%) rename packages/fluent-theme/src/external.umd/botframework-webchat-api/{decorator.ts => decorator.js.ts} (100%) rename packages/fluent-theme/src/external.umd/botframework-webchat-api/{hook.ts => hook.js.ts} (100%) rename packages/fluent-theme/src/external.umd/botframework-webchat-api/{internal.ts => internal.js.ts} (100%) rename packages/fluent-theme/src/external.umd/botframework-webchat-api/{middleware.ts => middleware.js.ts} (100%) rename packages/fluent-theme/src/external.umd/botframework-webchat-component/{component.ts => component.js.ts} (100%) rename packages/fluent-theme/src/external.umd/botframework-webchat-component/{decorator.ts => decorator.js.ts} (100%) rename packages/fluent-theme/src/external.umd/botframework-webchat-component/{hook.ts => hook.js.ts} (100%) rename packages/fluent-theme/src/external.umd/botframework-webchat-component/{internal.ts => internal.js.ts} (100%) diff --git a/__tests__/html2/activity/message-status.html b/__tests__/html2/activity/message-status.html index 1ddffec38b..8bae7eec24 100644 --- a/__tests__/html2/activity/message-status.html +++ b/__tests__/html2/activity/message-status.html @@ -11,10 +11,7 @@ "@fluentui/tokens": "/__dist__/packages/test/test-assets/out/@fluentui/tokens.js", "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/attachment/adaptiveCard/custom.skip.html b/__tests__/html2/attachment/adaptiveCard/custom.skip.html index 3ccbc3f4d6..68ab6d64fa 100644 --- a/__tests__/html2/attachment/adaptiveCard/custom.skip.html +++ b/__tests__/html2/attachment/adaptiveCard/custom.skip.html @@ -13,10 +13,7 @@ "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", "bot-bundle-chat-adapter": "https://cdn.jsdelivr.net/gh/compulim/experiment-mockbot@v0.0.4/esm/bot-bundle-chat-adapter.js", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "/__dist__/packages/test/test-assets/out/react.js", "react-dom": "/__dist__/packages/test/test-assets/out/react-dom.js", @@ -116,7 +113,7 @@ conversationStartProperties: { locale: navigator.language } }); - + run(async () => { await host.windowSize(800, 800, document.body); @@ -183,4 +180,4 @@ }); - \ No newline at end of file + diff --git a/__tests__/html2/boot/deprecation/hooks.new.html b/__tests__/html2/boot/deprecation/hooks.new.html index feb94450f0..078cff777d 100644 --- a/__tests__/html2/boot/deprecation/hooks.new.html +++ b/__tests__/html2/boot/deprecation/hooks.new.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" diff --git a/__tests__/html2/citation/url.html b/__tests__/html2/citation/url.html index a0174a9403..85de43733d 100644 --- a/__tests__/html2/citation/url.html +++ b/__tests__/html2/citation/url.html @@ -11,10 +11,7 @@ "@fluentui/tokens": "/__dist__/packages/test/test-assets/out/@fluentui/tokens.js", "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/fluentTheme/maxMessageLength.html b/__tests__/html2/fluentTheme/maxMessageLength.html index a04f661eeb..662e1ccd68 100644 --- a/__tests__/html2/fluentTheme/maxMessageLength.html +++ b/__tests__/html2/fluentTheme/maxMessageLength.html @@ -13,10 +13,7 @@ "@fluentui/react-components": "https://esm.sh/@fluentui/react-components?deps=react@18,react-dom@18&exports=FluentProvider,createDarkTheme,webLightTheme", "@testduet/wait-for": "https://esm.sh/@testduet/wait-for", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useActivities.getter.html b/__tests__/html2/hooks/useActivities.getter.html index c2d7c52fa2..39cce35285 100644 --- a/__tests__/html2/hooks/useActivities.getter.html +++ b/__tests__/html2/hooks/useActivities.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useActivities.setter.html b/__tests__/html2/hooks/useActivities.setter.html index 085dcff462..6520ff35e2 100644 --- a/__tests__/html2/hooks/useActivities.setter.html +++ b/__tests__/html2/hooks/useActivities.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.default.html b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.default.html index c76b0a04d7..740d7f44f9 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.default.html +++ b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html index d1f926db1a..58003d92fa 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html +++ b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html index 4180ad61c7..05b25859da 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html +++ b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.default.html b/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.default.html index 9ae675527e..9108316cd4 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.default.html +++ b/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.html b/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.html index 9aab89daa2..9379780600 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.html +++ b/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAdaptiveCardsPackage.setter.html b/__tests__/html2/hooks/useAdaptiveCardsPackage.setter.html index 0ceb2e8650..71d405f9f2 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsPackage.setter.html +++ b/__tests__/html2/hooks/useAdaptiveCardsPackage.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAvatarForBot.getter.html b/__tests__/html2/hooks/useAvatarForBot.getter.html index acfefe7836..5590d58005 100644 --- a/__tests__/html2/hooks/useAvatarForBot.getter.html +++ b/__tests__/html2/hooks/useAvatarForBot.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAvatarForBot.setter.html b/__tests__/html2/hooks/useAvatarForBot.setter.html index fb1f316f19..c71c7dd623 100644 --- a/__tests__/html2/hooks/useAvatarForBot.setter.html +++ b/__tests__/html2/hooks/useAvatarForBot.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAvatarForUser.getter.html b/__tests__/html2/hooks/useAvatarForUser.getter.html index fe2a4d0f53..c7bea2d55c 100644 --- a/__tests__/html2/hooks/useAvatarForUser.getter.html +++ b/__tests__/html2/hooks/useAvatarForUser.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useAvatarForUser.setter.html b/__tests__/html2/hooks/useAvatarForUser.setter.html index 3fe650a66e..b4749efc0c 100644 --- a/__tests__/html2/hooks/useAvatarForUser.setter.html +++ b/__tests__/html2/hooks/useAvatarForUser.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useByteFormatter.html b/__tests__/html2/hooks/useByteFormatter.html index a3feacc9d0..6d322f002b 100644 --- a/__tests__/html2/hooks/useByteFormatter.html +++ b/__tests__/html2/hooks/useByteFormatter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useCapabilities.html b/__tests__/html2/hooks/useCapabilities.html index 9d5e5e6f61..7cf43cfb89 100644 --- a/__tests__/html2/hooks/useCapabilities.html +++ b/__tests__/html2/hooks/useCapabilities.html @@ -10,8 +10,7 @@ "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useConnectivityStatus.getter.html b/__tests__/html2/hooks/useConnectivityStatus.getter.html index d2fd7487e3..89eb2a003d 100644 --- a/__tests__/html2/hooks/useConnectivityStatus.getter.html +++ b/__tests__/html2/hooks/useConnectivityStatus.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useConnectivityStatus.setter.html b/__tests__/html2/hooks/useConnectivityStatus.setter.html index 713e2e3c67..abb931a0c7 100644 --- a/__tests__/html2/hooks/useConnectivityStatus.setter.html +++ b/__tests__/html2/hooks/useConnectivityStatus.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useDateFormatter.en.html b/__tests__/html2/hooks/useDateFormatter.en.html index a8fd37a9d0..5616f76d71 100644 --- a/__tests__/html2/hooks/useDateFormatter.en.html +++ b/__tests__/html2/hooks/useDateFormatter.en.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useDateFormatter.yue.html b/__tests__/html2/hooks/useDateFormatter.yue.html index 1af8a6b323..0bcf3d40fe 100644 --- a/__tests__/html2/hooks/useDateFormatter.yue.html +++ b/__tests__/html2/hooks/useDateFormatter.yue.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useDictateInterims.getter.html b/__tests__/html2/hooks/useDictateInterims.getter.html index 958d21dc4f..2b554fe8e2 100644 --- a/__tests__/html2/hooks/useDictateInterims.getter.html +++ b/__tests__/html2/hooks/useDictateInterims.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useDictateInterims.setter.html b/__tests__/html2/hooks/useDictateInterims.setter.html index 90e2fcaffd..92c444a1c4 100644 --- a/__tests__/html2/hooks/useDictateInterims.setter.html +++ b/__tests__/html2/hooks/useDictateInterims.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useDisabled.getter.default.html b/__tests__/html2/hooks/useDisabled.getter.default.html index a23fd08776..e07f0579db 100644 --- a/__tests__/html2/hooks/useDisabled.getter.default.html +++ b/__tests__/html2/hooks/useDisabled.getter.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useDisabled.getter.html b/__tests__/html2/hooks/useDisabled.getter.html index 34e4e5ee8a..5f664345e1 100644 --- a/__tests__/html2/hooks/useDisabled.getter.html +++ b/__tests__/html2/hooks/useDisabled.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useDisabled.setter.html b/__tests__/html2/hooks/useDisabled.setter.html index 3197e1c975..42d981f715 100644 --- a/__tests__/html2/hooks/useDisabled.setter.html +++ b/__tests__/html2/hooks/useDisabled.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useDismissNotification.html b/__tests__/html2/hooks/useDismissNotification.html index a3954019d7..09ba8cae79 100644 --- a/__tests__/html2/hooks/useDismissNotification.html +++ b/__tests__/html2/hooks/useDismissNotification.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useFocus.sendBox.pure.html b/__tests__/html2/hooks/useFocus.sendBox.pure.html index 5fa87851c2..739080a9ea 100644 --- a/__tests__/html2/hooks/useFocus.sendBox.pure.html +++ b/__tests__/html2/hooks/useFocus.sendBox.pure.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useGrammars.getter.default.html b/__tests__/html2/hooks/useGrammars.getter.default.html index 57a86cf911..e02779c6fc 100644 --- a/__tests__/html2/hooks/useGrammars.getter.default.html +++ b/__tests__/html2/hooks/useGrammars.getter.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useGrammars.getter.html b/__tests__/html2/hooks/useGrammars.getter.html index 12484f2f53..75a91eb8de 100644 --- a/__tests__/html2/hooks/useGrammars.getter.html +++ b/__tests__/html2/hooks/useGrammars.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useGrammars.setter.html b/__tests__/html2/hooks/useGrammars.setter.html index ede84880ee..0b90e5febe 100644 --- a/__tests__/html2/hooks/useGrammars.setter.html +++ b/__tests__/html2/hooks/useGrammars.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useGroupTimestamp.getter.default.html b/__tests__/html2/hooks/useGroupTimestamp.getter.default.html index 59f48eb640..c6dca91ca4 100644 --- a/__tests__/html2/hooks/useGroupTimestamp.getter.default.html +++ b/__tests__/html2/hooks/useGroupTimestamp.getter.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useGroupTimestamp.getter.false.html b/__tests__/html2/hooks/useGroupTimestamp.getter.false.html index 9353b6d366..60fb43daba 100644 --- a/__tests__/html2/hooks/useGroupTimestamp.getter.false.html +++ b/__tests__/html2/hooks/useGroupTimestamp.getter.false.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useGroupTimestamp.getter.html b/__tests__/html2/hooks/useGroupTimestamp.getter.html index 218cc26836..10919aa87e 100644 --- a/__tests__/html2/hooks/useGroupTimestamp.getter.html +++ b/__tests__/html2/hooks/useGroupTimestamp.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useGroupTimestamp.setter.html b/__tests__/html2/hooks/useGroupTimestamp.setter.html index 44ae287e15..d1aa2800f9 100644 --- a/__tests__/html2/hooks/useGroupTimestamp.setter.html +++ b/__tests__/html2/hooks/useGroupTimestamp.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useInjectStylesElements/withNonce.html b/__tests__/html2/hooks/useInjectStylesElements/withNonce.html index c65a5f900e..95d6797a78 100644 --- a/__tests__/html2/hooks/useInjectStylesElements/withNonce.html +++ b/__tests__/html2/hooks/useInjectStylesElements/withNonce.html @@ -6,10 +6,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js", diff --git a/__tests__/html2/hooks/useLanguage.getter.default.html b/__tests__/html2/hooks/useLanguage.getter.default.html index 32cf680ef2..ef9b1adb82 100644 --- a/__tests__/html2/hooks/useLanguage.getter.default.html +++ b/__tests__/html2/hooks/useLanguage.getter.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLanguage.getter.speech.html b/__tests__/html2/hooks/useLanguage.getter.speech.html index 95c719de9c..11f3350e80 100644 --- a/__tests__/html2/hooks/useLanguage.getter.speech.html +++ b/__tests__/html2/hooks/useLanguage.getter.speech.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLanguage.getter.xx-YY.html b/__tests__/html2/hooks/useLanguage.getter.xx-YY.html index 9cc3214b2f..1438718de6 100644 --- a/__tests__/html2/hooks/useLanguage.getter.xx-YY.html +++ b/__tests__/html2/hooks/useLanguage.getter.xx-YY.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLanguage.getter.yue.html b/__tests__/html2/hooks/useLanguage.getter.yue.html index 0e1713e9fc..faa9d38d51 100644 --- a/__tests__/html2/hooks/useLanguage.getter.yue.html +++ b/__tests__/html2/hooks/useLanguage.getter.yue.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLanguage.getter.zh-YUE.html b/__tests__/html2/hooks/useLanguage.getter.zh-YUE.html index 3fd9d1baa7..47ad62e30a 100644 --- a/__tests__/html2/hooks/useLanguage.getter.zh-YUE.html +++ b/__tests__/html2/hooks/useLanguage.getter.zh-YUE.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLanguage.setter.html b/__tests__/html2/hooks/useLanguage.setter.html index 763d8fab13..7d094ad0b0 100644 --- a/__tests__/html2/hooks/useLanguage.setter.html +++ b/__tests__/html2/hooks/useLanguage.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.default.html b/__tests__/html2/hooks/useLocalizer.default.html index ad210c9a1a..70bc9111b3 100644 --- a/__tests__/html2/hooks/useLocalizer.default.html +++ b/__tests__/html2/hooks/useLocalizer.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.nonExistent.html b/__tests__/html2/hooks/useLocalizer.nonExistent.html index 6f39455cb7..350a21d597 100644 --- a/__tests__/html2/hooks/useLocalizer.nonExistent.html +++ b/__tests__/html2/hooks/useLocalizer.nonExistent.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.overrideStrings.html b/__tests__/html2/hooks/useLocalizer.overrideStrings.html index ea672a7956..38034f2adc 100644 --- a/__tests__/html2/hooks/useLocalizer.overrideStrings.html +++ b/__tests__/html2/hooks/useLocalizer.overrideStrings.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.plural.firstArgumentIsString.html b/__tests__/html2/hooks/useLocalizer.plural.firstArgumentIsString.html index d8cf281e30..62a9d9049d 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.firstArgumentIsString.html +++ b/__tests__/html2/hooks/useLocalizer.plural.firstArgumentIsString.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.plural.one.html b/__tests__/html2/hooks/useLocalizer.plural.one.html index ee36813041..c147d524d5 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.one.html +++ b/__tests__/html2/hooks/useLocalizer.plural.one.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.plural.otherFallback.html b/__tests__/html2/hooks/useLocalizer.plural.otherFallback.html index 5e8326019d..7db5465d9d 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.otherFallback.html +++ b/__tests__/html2/hooks/useLocalizer.plural.otherFallback.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html b/__tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html index a5a3e992f2..c8d4ef816e 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html +++ b/__tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html b/__tests__/html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html index 8933144232..32d7fb4e9e 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html +++ b/__tests__/html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.plural.throw.idOtherNotUndefined.html b/__tests__/html2/hooks/useLocalizer.plural.throw.idOtherNotUndefined.html index 43aeecc836..dd7ef8b6af 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.throw.idOtherNotUndefined.html +++ b/__tests__/html2/hooks/useLocalizer.plural.throw.idOtherNotUndefined.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html b/__tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html index 46c1ee7677..477c41b0fd 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html +++ b/__tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.plural.two.html b/__tests__/html2/hooks/useLocalizer.plural.two.html index ae5b5aef92..ee53fdf2f5 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.two.html +++ b/__tests__/html2/hooks/useLocalizer.plural.two.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.throwOnInvalidId.html b/__tests__/html2/hooks/useLocalizer.throwOnInvalidId.html index d7690e818a..a6b11d1332 100644 --- a/__tests__/html2/hooks/useLocalizer.throwOnInvalidId.html +++ b/__tests__/html2/hooks/useLocalizer.throwOnInvalidId.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.yue.html b/__tests__/html2/hooks/useLocalizer.yue.html index c7b024f121..ac2b2e2113 100644 --- a/__tests__/html2/hooks/useLocalizer.yue.html +++ b/__tests__/html2/hooks/useLocalizer.yue.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useLocalizer.yue.plural.html b/__tests__/html2/hooks/useLocalizer.yue.plural.html index bfa3b8cf9b..03687d08b3 100644 --- a/__tests__/html2/hooks/useLocalizer.yue.plural.html +++ b/__tests__/html2/hooks/useLocalizer.yue.plural.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useMarkActivityAsSpoken.html b/__tests__/html2/hooks/useMarkActivityAsSpoken.html index 741ab7b7ea..ee3528f4dd 100644 --- a/__tests__/html2/hooks/useMarkActivityAsSpoken.html +++ b/__tests__/html2/hooks/useMarkActivityAsSpoken.html @@ -10,8 +10,7 @@ "imports": { "@testduet/wait-for": "https://esm.sh/@testduet/wait-for", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useMicrophoneButtonClick.html b/__tests__/html2/hooks/useMicrophoneButtonClick.html index 21209967a1..b17c55f021 100644 --- a/__tests__/html2/hooks/useMicrophoneButtonClick.html +++ b/__tests__/html2/hooks/useMicrophoneButtonClick.html @@ -10,8 +10,7 @@ "imports": { "@testduet/wait-for": "https://esm.sh/@testduet/wait-for", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/usePerformCardAction.html b/__tests__/html2/hooks/usePerformCardAction.html index bf31373b15..12cfb7831b 100644 --- a/__tests__/html2/hooks/usePerformCardAction.html +++ b/__tests__/html2/hooks/usePerformCardAction.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/usePostActivity.html b/__tests__/html2/hooks/usePostActivity.html index d29486d2d6..7f81b0c4aa 100644 --- a/__tests__/html2/hooks/usePostActivity.html +++ b/__tests__/html2/hooks/usePostActivity.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useRelativeTimeFormatter.html b/__tests__/html2/hooks/useRelativeTimeFormatter.html index 473a83b75d..7bb2b2392d 100644 --- a/__tests__/html2/hooks/useRelativeTimeFormatter.html +++ b/__tests__/html2/hooks/useRelativeTimeFormatter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html index dda1e3c3df..f989d56e6f 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.default.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.default.html index a478d35498..5cb76815c7 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.default.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html index 66227b007e..f63e9da749 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html index 75599e408a..e19247f3a3 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.null.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.null.html index 6568b166c8..bca9bb8975 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.null.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.null.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.recognition.html b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.recognition.html index 481b573643..ca02f4b86d 100644 --- a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.recognition.html +++ b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.recognition.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html index 5564408277..82759d5674 100644 --- a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html +++ b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.setter.html b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.setter.html index b59b7d8baa..38ee19edea 100644 --- a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.setter.html +++ b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useSendBoxValue.getter.html b/__tests__/html2/hooks/useSendBoxValue.getter.html index 044dac0f73..41d06f126d 100644 --- a/__tests__/html2/hooks/useSendBoxValue.getter.html +++ b/__tests__/html2/hooks/useSendBoxValue.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSendBoxValue.setter.html b/__tests__/html2/hooks/useSendBoxValue.setter.html index 3217880c71..fbff5cdf0c 100644 --- a/__tests__/html2/hooks/useSendBoxValue.setter.html +++ b/__tests__/html2/hooks/useSendBoxValue.setter.html @@ -10,8 +10,7 @@ "imports": { "@testduet/wait-for": "https://esm.sh/@testduet/wait-for", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSendFiles.html b/__tests__/html2/hooks/useSendFiles.html index 41aa80bb1f..b182f48093 100644 --- a/__tests__/html2/hooks/useSendFiles.html +++ b/__tests__/html2/hooks/useSendFiles.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSendMessage.html b/__tests__/html2/hooks/useSendMessage.html index 6ce3fba85a..13b6926eaf 100644 --- a/__tests__/html2/hooks/useSendMessage.html +++ b/__tests__/html2/hooks/useSendMessage.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSendMessageBack.html b/__tests__/html2/hooks/useSendMessageBack.html index 587805596b..65a952ed57 100644 --- a/__tests__/html2/hooks/useSendMessageBack.html +++ b/__tests__/html2/hooks/useSendMessageBack.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSendPostBack.html b/__tests__/html2/hooks/useSendPostBack.html index c4746f0168..be3b1e5226 100644 --- a/__tests__/html2/hooks/useSendPostBack.html +++ b/__tests__/html2/hooks/useSendPostBack.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSetNotification.html b/__tests__/html2/hooks/useSetNotification.html index 373db1e772..cf4eb5aa44 100644 --- a/__tests__/html2/hooks/useSetNotification.html +++ b/__tests__/html2/hooks/useSetNotification.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html b/__tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html index 68837f28db..02a99c53ce 100644 --- a/__tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html +++ b/__tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html b/__tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html index 86bcac4fdc..a8bbec5429 100644 --- a/__tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html +++ b/__tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useStartDictate.html b/__tests__/html2/hooks/useStartDictate.html index e1febc70e4..23e8c89388 100644 --- a/__tests__/html2/hooks/useStartDictate.html +++ b/__tests__/html2/hooks/useStartDictate.html @@ -10,8 +10,7 @@ "imports": { "@testduet/wait-for": "https://esm.sh/@testduet/wait-for", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useStopDictate.html b/__tests__/html2/hooks/useStopDictate.html index 789dcf22a1..9625772ac6 100644 --- a/__tests__/html2/hooks/useStopDictate.html +++ b/__tests__/html2/hooks/useStopDictate.html @@ -10,8 +10,7 @@ "imports": { "@testduet/wait-for": "https://esm.sh/@testduet/wait-for", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useStyleOptions.getter.html b/__tests__/html2/hooks/useStyleOptions.getter.html index 5713a76db1..ef4bf21a5d 100644 --- a/__tests__/html2/hooks/useStyleOptions.getter.html +++ b/__tests__/html2/hooks/useStyleOptions.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useStyleOptions.setter.html b/__tests__/html2/hooks/useStyleOptions.setter.html index 715840fa1d..bb0db7d4bd 100644 --- a/__tests__/html2/hooks/useStyleOptions.setter.html +++ b/__tests__/html2/hooks/useStyleOptions.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useStyleSet.getter.html b/__tests__/html2/hooks/useStyleSet.getter.html index b537afeb60..72d0c50411 100644 --- a/__tests__/html2/hooks/useStyleSet.getter.html +++ b/__tests__/html2/hooks/useStyleSet.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useStyleSet.setter.html b/__tests__/html2/hooks/useStyleSet.setter.html index 68ba34f31e..8ff8f45b45 100644 --- a/__tests__/html2/hooks/useStyleSet.setter.html +++ b/__tests__/html2/hooks/useStyleSet.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSubmitSendBox.html b/__tests__/html2/hooks/useSubmitSendBox.html index b150b3f1d4..7f1b72996b 100644 --- a/__tests__/html2/hooks/useSubmitSendBox.html +++ b/__tests__/html2/hooks/useSubmitSendBox.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useSuggestedActions.html b/__tests__/html2/hooks/useSuggestedActions.html index afd3cdfa39..c5a4acd217 100644 --- a/__tests__/html2/hooks/useSuggestedActions.html +++ b/__tests__/html2/hooks/useSuggestedActions.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useTextBoxValue.html b/__tests__/html2/hooks/useTextBoxValue.html index b0a69b981d..5cd6c83154 100644 --- a/__tests__/html2/hooks/useTextBoxValue.html +++ b/__tests__/html2/hooks/useTextBoxValue.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useTimeoutForSend.default.html b/__tests__/html2/hooks/useTimeoutForSend.default.html index 270c3fffe0..800ce74181 100644 --- a/__tests__/html2/hooks/useTimeoutForSend.default.html +++ b/__tests__/html2/hooks/useTimeoutForSend.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useTimeoutForSend.getter.html b/__tests__/html2/hooks/useTimeoutForSend.getter.html index 4cb25241f1..8aa2ea7e47 100644 --- a/__tests__/html2/hooks/useTimeoutForSend.getter.html +++ b/__tests__/html2/hooks/useTimeoutForSend.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useTimeoutForSend.setter.html b/__tests__/html2/hooks/useTimeoutForSend.setter.html index b691a2d685..492b073d6d 100644 --- a/__tests__/html2/hooks/useTimeoutForSend.setter.html +++ b/__tests__/html2/hooks/useTimeoutForSend.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useTrackDimension.html b/__tests__/html2/hooks/useTrackDimension.html index 746b7380b0..ad43c89e9f 100644 --- a/__tests__/html2/hooks/useTrackDimension.html +++ b/__tests__/html2/hooks/useTrackDimension.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackDimension.invalidDimensionName.html b/__tests__/html2/hooks/useTrackDimension.invalidDimensionName.html index cc63966724..9c40a45f85 100644 --- a/__tests__/html2/hooks/useTrackDimension.invalidDimensionName.html +++ b/__tests__/html2/hooks/useTrackDimension.invalidDimensionName.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackDimension.invalidDimensionValue.html b/__tests__/html2/hooks/useTrackDimension.invalidDimensionValue.html index 1f7b724159..545deff478 100644 --- a/__tests__/html2/hooks/useTrackDimension.invalidDimensionValue.html +++ b/__tests__/html2/hooks/useTrackDimension.invalidDimensionValue.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackEvent.debug.html b/__tests__/html2/hooks/useTrackEvent.debug.html index 3b26a8c748..ccf60129fc 100644 --- a/__tests__/html2/hooks/useTrackEvent.debug.html +++ b/__tests__/html2/hooks/useTrackEvent.debug.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackEvent.error.complex.html b/__tests__/html2/hooks/useTrackEvent.error.complex.html index 8e0190e385..13ff82e28e 100644 --- a/__tests__/html2/hooks/useTrackEvent.error.complex.html +++ b/__tests__/html2/hooks/useTrackEvent.error.complex.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackEvent.html b/__tests__/html2/hooks/useTrackEvent.html index 16b7891ad3..d7825c3ded 100644 --- a/__tests__/html2/hooks/useTrackEvent.html +++ b/__tests__/html2/hooks/useTrackEvent.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackEvent.info.html b/__tests__/html2/hooks/useTrackEvent.info.html index cb07d704ec..4d9e395919 100644 --- a/__tests__/html2/hooks/useTrackEvent.info.html +++ b/__tests__/html2/hooks/useTrackEvent.info.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackEvent.invalid.booleanData.html b/__tests__/html2/hooks/useTrackEvent.invalid.booleanData.html index be9fa1ddc2..b8d57a2b14 100644 --- a/__tests__/html2/hooks/useTrackEvent.invalid.booleanData.html +++ b/__tests__/html2/hooks/useTrackEvent.invalid.booleanData.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackEvent.invalid.complex.html b/__tests__/html2/hooks/useTrackEvent.invalid.complex.html index 9c2284906b..1146ce9e16 100644 --- a/__tests__/html2/hooks/useTrackEvent.invalid.complex.html +++ b/__tests__/html2/hooks/useTrackEvent.invalid.complex.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackEvent.invalid.name.html b/__tests__/html2/hooks/useTrackEvent.invalid.name.html index 4b1f8da645..f9426bb517 100644 --- a/__tests__/html2/hooks/useTrackEvent.invalid.name.html +++ b/__tests__/html2/hooks/useTrackEvent.invalid.name.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackEvent.warn.numeric.html b/__tests__/html2/hooks/useTrackEvent.warn.numeric.html index fb470eba71..00c16f54c8 100644 --- a/__tests__/html2/hooks/useTrackEvent.warn.numeric.html +++ b/__tests__/html2/hooks/useTrackEvent.warn.numeric.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackException.html b/__tests__/html2/hooks/useTrackException.html index 8822fcf821..89081c0af1 100644 --- a/__tests__/html2/hooks/useTrackException.html +++ b/__tests__/html2/hooks/useTrackException.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useTrackException.nonFatal.html b/__tests__/html2/hooks/useTrackException.nonFatal.html index d3ba3fa539..87765993b7 100644 --- a/__tests__/html2/hooks/useTrackException.nonFatal.html +++ b/__tests__/html2/hooks/useTrackException.nonFatal.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/hooks/useUserID.getter.default.html b/__tests__/html2/hooks/useUserID.getter.default.html index f25809a8c4..5a109320a0 100644 --- a/__tests__/html2/hooks/useUserID.getter.default.html +++ b/__tests__/html2/hooks/useUserID.getter.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useUserID.getter.html b/__tests__/html2/hooks/useUserID.getter.html index d7c8d14e44..293f611d2b 100644 --- a/__tests__/html2/hooks/useUserID.getter.html +++ b/__tests__/html2/hooks/useUserID.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useUserID.setter.html b/__tests__/html2/hooks/useUserID.setter.html index c4b67a566b..8e38d056c9 100644 --- a/__tests__/html2/hooks/useUserID.setter.html +++ b/__tests__/html2/hooks/useUserID.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useUsername.getter.default.html b/__tests__/html2/hooks/useUsername.getter.default.html index 2e787e7bf0..d4d5b2cfb3 100644 --- a/__tests__/html2/hooks/useUsername.getter.default.html +++ b/__tests__/html2/hooks/useUsername.getter.default.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useUsername.getter.html b/__tests__/html2/hooks/useUsername.getter.html index 88f175d49d..06d8744131 100644 --- a/__tests__/html2/hooks/useUsername.getter.html +++ b/__tests__/html2/hooks/useUsername.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useUsername.setter.html b/__tests__/html2/hooks/useUsername.setter.html index 893cf70cb7..8775d71f1e 100644 --- a/__tests__/html2/hooks/useUsername.setter.html +++ b/__tests__/html2/hooks/useUsername.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useVoiceSelector.html b/__tests__/html2/hooks/useVoiceSelector.html index ca4481bf49..a276d65d46 100644 --- a/__tests__/html2/hooks/useVoiceSelector.html +++ b/__tests__/html2/hooks/useVoiceSelector.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html b/__tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html index 175b0de176..c15b128739 100644 --- a/__tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html +++ b/__tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/hooks/useWebSpeechPonyfill.getter.html b/__tests__/html2/hooks/useWebSpeechPonyfill.getter.html index 536730e6fe..08c9d35ae8 100644 --- a/__tests__/html2/hooks/useWebSpeechPonyfill.getter.html +++ b/__tests__/html2/hooks/useWebSpeechPonyfill.getter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/hooks/useWebSpeechPonyfill.setter.html b/__tests__/html2/hooks/useWebSpeechPonyfill.setter.html index 02addfc772..714cff1122 100644 --- a/__tests__/html2/hooks/useWebSpeechPonyfill.setter.html +++ b/__tests__/html2/hooks/useWebSpeechPonyfill.setter.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "https://esm.sh/react@18", "react-dictate-button": "https://esm.sh/react-dictate-button", diff --git a/__tests__/html2/markdown/vnext/markdownStreaming.html b/__tests__/html2/markdown/vnext/markdownStreaming.html index a742fc4cfc..b7b05c05ed 100644 --- a/__tests__/html2/markdown/vnext/markdownStreaming.html +++ b/__tests__/html2/markdown/vnext/markdownStreaming.html @@ -19,10 +19,7 @@ "@fluentui/react-provider": "/__dist__/packages/test/test-assets/out/@fluentui/react-provider.js", "@fluentui/tokens": "/__dist__/packages/test/test-assets/out/@fluentui/tokens.js", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-core": "/__dist__/packages/bundle/static/botframework-webchat-core.js", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "eventsource-parser": "https://esm.sh/eventsource-parser", diff --git a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.html b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.html index 3be1a0f7d4..ecdbbe9174 100644 --- a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.html +++ b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://cdn.jsdelivr.net/npm/react@18.3.1/+esm", "react-dom": "https://cdn.jsdelivr.net/npm/react-dom@18.3.1/+esm", "react-dom/client": "https://cdn.jsdelivr.net/npm/react-dom@18.3.1/client/+esm" diff --git a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.withCreateRoot.html b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.withCreateRoot.html index 17f4374d31..831e7116bd 100644 --- a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.withCreateRoot.html +++ b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.withCreateRoot.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://cdn.jsdelivr.net/npm/react@18.3.1/+esm", "react-dom": "https://cdn.jsdelivr.net/npm/react-dom@18.3.1/+esm", "react-dom/client": "https://cdn.jsdelivr.net/npm/react-dom@18.3.1/client/+esm" diff --git a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.renderWebChat.html b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.renderWebChat.html index 3da0804c59..b2540d09d9 100644 --- a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.renderWebChat.html +++ b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.renderWebChat.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://cdn.jsdelivr.net/npm/react@18.3.1/+esm", "react-dom": "https://cdn.jsdelivr.net/npm/react-dom@18.3.1/+esm", "react-dom/client": "https://cdn.jsdelivr.net/npm/react-dom@18.3.1/client/+esm" diff --git a/__tests__/html2/simple/fatModule/esm.sh/fluentTheme.html b/__tests__/html2/simple/fatModule/esm.sh/fluentTheme.html index 6552952d5f..2e5b897b13 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/fluentTheme.html +++ b/__tests__/html2/simple/fatModule/esm.sh/fluentTheme.html @@ -17,10 +17,7 @@ "imports": { "@fluentui/react-components": "https://esm.sh/@fluentui/react-components?deps=react@18,react-dom@18&exports=FluentProvider,webLightTheme", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html b/__tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html index c636082a02..76e8b17d07 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html +++ b/__tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html @@ -19,10 +19,7 @@ "#test-page-object": "/test-page-object.mjs", "@fluentui/react-components": "https://esm.sh/@fluentui/react-components?deps=react@18,react-dom@18&exports=FluentProvider,createDarkTheme,webLightTheme", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", diff --git a/__tests__/html2/simple/fatModule/esm.sh/tsx/simple.html b/__tests__/html2/simple/fatModule/esm.sh/tsx/simple.html index 09c6665160..b796180880 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/tsx/simple.html +++ b/__tests__/html2/simple/fatModule/esm.sh/tsx/simple.html @@ -11,8 +11,7 @@ "#test-harness": "/test-harness.mjs", "#test-page-object": "/test-page-object.mjs", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html b/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html index 55fc6be33c..be0315d053 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html +++ b/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html @@ -11,8 +11,7 @@ "#test-harness": "/test-harness.mjs", "#test-page-object": "/test-page-object.mjs", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/simple/fatModule/fluentTheme.html b/__tests__/html2/simple/fatModule/fluentTheme.html index 4288a2e29a..6238de1235 100644 --- a/__tests__/html2/simple/fatModule/fluentTheme.html +++ b/__tests__/html2/simple/fatModule/fluentTheme.html @@ -18,11 +18,7 @@ "imports": { "@fluentui/react-components": "https://esm.sh/@fluentui/react-components?deps=react@18.3.1,react-dom@18.3.1&exports=FluentProvider,createDarkTheme,webLightTheme", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", - "botframework-webchat/schema": "/__dist__/packages/bundle/static/botframework-webchat/schema.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js", diff --git a/__tests__/html2/simple/fatModule/simple.runHook.html b/__tests__/html2/simple/fatModule/simple.runHook.html index 5ef69db4bf..0a3466d5ad 100644 --- a/__tests__/html2/simple/fatModule/simple.runHook.html +++ b/__tests__/html2/simple/fatModule/simple.runHook.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html b/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html index 4572e40369..fa102a4f9f 100644 --- a/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html +++ b/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html b/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html index c6b8622e1e..84904c72b4 100644 --- a/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html +++ b/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/themeProvider/override.html b/__tests__/html2/themeProvider/override.html index 1b83ac515c..a7b84ed453 100644 --- a/__tests__/html2/themeProvider/override.html +++ b/__tests__/html2/themeProvider/override.html @@ -18,10 +18,7 @@ "imports": { "@fluentui/react-components": "https://esm.sh/@fluentui/react-components?deps=react@18.3.1,react-dom@18.3.1&exports=FluentProvider,createDarkTheme,webLightTheme", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "jest-mock": "https://esm.sh/jest-mock", "react": "/__dist__/packages/bundle/static/react.js", diff --git a/docs/CAPABILITIES.md b/docs/CAPABILITIES.md index af0b672d9f..9d656fc1f7 100644 --- a/docs/CAPABILITIES.md +++ b/docs/CAPABILITIES.md @@ -7,7 +7,7 @@ Web Chat supports dynamic capability discovery from adapters. Capabilities allow Use the `useCapabilities` hook with a selector to access specific capabilities: ```js -import { useCapabilities } from 'botframework-webchat/hook'; +import { useCapabilities } from 'botframework-webchat/hook.js'; // Get voice configuration const voiceConfig = useCapabilities(caps => caps.voiceConfiguration); diff --git a/docs/MIDDLEWARE.md b/docs/MIDDLEWARE.md index 906c047921..e0e9fc6a20 100644 --- a/docs/MIDDLEWARE.md +++ b/docs/MIDDLEWARE.md @@ -87,7 +87,7 @@ import { activityComponent, createActivityPolymiddleware, type ActivityPolymiddlewareProps -} from 'botframework-webchat/middleware'; +} from 'botframework-webchat/middleware.js'; import React, { memo } from 'react'; import { render } from 'react-dom'; @@ -138,7 +138,7 @@ import { createActivityPolymiddleware, type ActivityPolymiddlewareProps, type ActivityPolymiddlewareRenderer -} from 'botframework-webchat/middleware'; +} from 'botframework-webchat/middleware.js'; import React, { Fragment, memo, useMemo } from 'react'; import { render } from 'react-dom'; diff --git a/packages/api-graph/src/private/GraphProvider.tsx b/packages/api-graph/src/private/GraphProvider.tsx index 7f23dc060e..5cf5a8975b 100644 --- a/packages/api-graph/src/private/GraphProvider.tsx +++ b/packages/api-graph/src/private/GraphProvider.tsx @@ -1,7 +1,7 @@ import type { DirectLineActivityNode } from '@msinternal/botframework-webchat-core-graph'; import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { createStore, WebChatActivity } from 'botframework-webchat-core'; -import { createGraphFromStore, isOfType, type GraphSubscriber, type Identifier } from 'botframework-webchat-core/graph'; +import { createGraphFromStore, isOfType, type GraphSubscriber, type Identifier } from 'botframework-webchat-core/graph.js'; import React, { memo, useEffect, useMemo, useState } from 'react'; import { custom, function_, object, optional, parse, pipe, readonly, safeParse, type InferInput } from 'valibot'; diff --git a/packages/api/package.json b/packages/api/package.json index 1d024cdd3b..65da092ad3 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -16,6 +16,16 @@ } }, "./decorator": { + "import": { + "types": "./dist/botframework-webchat-api.deprecated.decorator.d.mts", + "default": "./dist/botframework-webchat-api.deprecated.decorator.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-api.deprecated.decorator.d.ts", + "default": "./dist/botframework-webchat-api.deprecated.decorator.js" + } + }, + "./decorator.js": { "import": { "types": "./dist/botframework-webchat-api.decorator.d.mts", "default": "./dist/botframework-webchat-api.decorator.mjs" @@ -26,6 +36,16 @@ } }, "./hook": { + "import": { + "types": "./dist/botframework-webchat-api.deprecated.hook.d.mts", + "default": "./dist/botframework-webchat-api.deprecated.hook.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-api.deprecated.hook.d.ts", + "default": "./dist/botframework-webchat-api.deprecated.hook.js" + } + }, + "./hook.js": { "import": { "types": "./dist/botframework-webchat-api.hook.d.mts", "default": "./dist/botframework-webchat-api.hook.mjs" @@ -36,6 +56,16 @@ } }, "./internal": { + "import": { + "types": "./dist/botframework-webchat-api.deprecated.internal.d.mts", + "default": "./dist/botframework-webchat-api.deprecated.internal.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-api.deprecated.internal.d.ts", + "default": "./dist/botframework-webchat-api.deprecated.internal.js" + } + }, + "./internal.js": { "import": { "types": "./dist/botframework-webchat-api.internal.d.mts", "default": "./dist/botframework-webchat-api.internal.mjs" @@ -46,6 +76,16 @@ } }, "./middleware": { + "import": { + "types": "./dist/botframework-webchat-api.deprecated.middleware.d.mts", + "default": "./dist/botframework-webchat-api.deprecated.middleware.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-api.deprecated.middleware.d.ts", + "default": "./dist/botframework-webchat-api.deprecated.middleware.js" + } + }, + "./middleware.js": { "import": { "types": "./dist/botframework-webchat-api.middleware.d.mts", "default": "./dist/botframework-webchat-api.middleware.mjs" diff --git a/packages/api/src/boot/deprecated/decorator.ts b/packages/api/src/boot/deprecated/decorator.ts new file mode 100644 index 0000000000..72b09ad1ed --- /dev/null +++ b/packages/api/src/boot/deprecated/decorator.ts @@ -0,0 +1,5 @@ +export * from '../decorator'; + +console.warn( + 'Import from "botframework-webchat-api/decorator" is being deprecated, please import from "botframework-webchat-api/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/api/src/boot/deprecated/graph.ts b/packages/api/src/boot/deprecated/graph.ts new file mode 100644 index 0000000000..643a02e1d6 --- /dev/null +++ b/packages/api/src/boot/deprecated/graph.ts @@ -0,0 +1,5 @@ +export * from '../graph'; + +console.warn( + 'Import from "botframework-webchat-api/graph" is deprecated, please import from "botframework-webchat-api/graph.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/api/src/boot/deprecated/hook.ts b/packages/api/src/boot/deprecated/hook.ts new file mode 100644 index 0000000000..f4d410bd5b --- /dev/null +++ b/packages/api/src/boot/deprecated/hook.ts @@ -0,0 +1,5 @@ +export * from '../hook'; + +console.warn( + 'Import from "botframework-webchat-api/hook" is deprecated, please import from "botframework-webchat-api/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/api/src/boot/deprecated/internal.ts b/packages/api/src/boot/deprecated/internal.ts new file mode 100644 index 0000000000..f4bdafefd4 --- /dev/null +++ b/packages/api/src/boot/deprecated/internal.ts @@ -0,0 +1,5 @@ +export * from '../internal'; + +console.warn( + 'Import from "botframework-webchat-api/internal" is deprecated, please import from "botframework-webchat-api/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/api/src/boot/deprecated/middleware.ts b/packages/api/src/boot/deprecated/middleware.ts new file mode 100644 index 0000000000..ad158792ee --- /dev/null +++ b/packages/api/src/boot/deprecated/middleware.ts @@ -0,0 +1,5 @@ +export * from '../middleware'; + +console.warn( + 'Import from "botframework-webchat-api/middleware" is deprecated, please import from "botframework-webchat-api/middleware.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/api/src/providers/ActivitySendStatus/ActivitySendStatusComposer.tsx b/packages/api/src/providers/ActivitySendStatus/ActivitySendStatusComposer.tsx index 8bcbad8148..aa8de37675 100644 --- a/packages/api/src/providers/ActivitySendStatus/ActivitySendStatusComposer.tsx +++ b/packages/api/src/providers/ActivitySendStatus/ActivitySendStatusComposer.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useMemo, useRef, type ReactNode } from 'react'; -import { querySendStatusFromOutgoingActivity } from 'botframework-webchat-core/activity'; +import { querySendStatusFromOutgoingActivity } from 'botframework-webchat-core/activity.js'; import { useActivities, usePonyfill } from '../../hooks/index'; import useForceRender from '../../hooks/internal/useForceRender'; diff --git a/packages/api/src/providers/ActivityTyping/ActivityTypingComposer.tsx b/packages/api/src/providers/ActivityTyping/ActivityTypingComposer.tsx index 6dda9f0e2d..eeb986414d 100644 --- a/packages/api/src/providers/ActivityTyping/ActivityTypingComposer.tsx +++ b/packages/api/src/providers/ActivityTyping/ActivityTypingComposer.tsx @@ -1,5 +1,5 @@ import { getActivityLivestreamingMetadata, type WebChatActivity } from 'botframework-webchat-core'; -import { queryReceivedAtFromActivity } from 'botframework-webchat-core/activity'; +import { queryReceivedAtFromActivity } from 'botframework-webchat-core/activity.js'; import { iteratorFind } from 'iter-fest'; import React, { memo, useCallback, useMemo, type ReactNode } from 'react'; diff --git a/packages/api/src/providers/ActivityTyping/private/useReduceActivities.spec.tsx b/packages/api/src/providers/ActivityTyping/private/useReduceActivities.spec.tsx index 977822826e..949e96260b 100644 --- a/packages/api/src/providers/ActivityTyping/private/useReduceActivities.spec.tsx +++ b/packages/api/src/providers/ActivityTyping/private/useReduceActivities.spec.tsx @@ -4,7 +4,7 @@ import { render, type RenderResult } from '@testing-library/react'; import type { WebChatActivity } from 'botframework-webchat-core'; -import type { LocalId } from 'botframework-webchat-core/activity'; +import type { LocalId } from 'botframework-webchat-core/activity.js'; import React, { type ComponentType } from 'react'; import { type useActivities as UseActivitiesType } from '../../../hooks'; import type UseReduceActivitiesType from './useReduceActivities'; diff --git a/packages/api/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts b/packages/api/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts index 9d1ad3de62..94bc841c70 100644 --- a/packages/api/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts +++ b/packages/api/src/providers/GroupActivities/private/createDefaultGroupActivitiesMiddleware.ts @@ -1,8 +1,8 @@ import { getOrgSchemaMessage, type GlobalScopePonyfill, type WebChatActivity } from 'botframework-webchat-core'; -import { IdentifierSchema } from 'botframework-webchat-core/graph'; +import { IdentifierSchema } from 'botframework-webchat-core/graph.js'; import { safeParse } from 'valibot'; -import { querySendStatusFromOutgoingActivity } from 'botframework-webchat-core/activity'; +import { querySendStatusFromOutgoingActivity } from 'botframework-webchat-core/activity.js'; import type GroupActivitiesMiddleware from '../../../types/GroupActivitiesMiddleware'; import { type SendStatus } from '../../../types/SendStatus'; diff --git a/packages/api/tsup.config.ts b/packages/api/tsup.config.ts index ef99ac1eed..9b34328dfe 100644 --- a/packages/api/tsup.config.ts +++ b/packages/api/tsup.config.ts @@ -10,7 +10,13 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat-api.graph': './src/boot/graph.ts', 'botframework-webchat-api.hook': './src/boot/hook.ts', 'botframework-webchat-api.internal': './src/boot/internal.ts', - 'botframework-webchat-api.middleware': './src/boot/middleware.ts' + 'botframework-webchat-api.middleware': './src/boot/middleware.ts', + // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. + 'botframework-webchat-api.deprecated.decorator': './src/boot/deprecated/decorator.ts', + 'botframework-webchat-api.deprecated.graph': './src/boot/deprecated/graph.ts', + 'botframework-webchat-api.deprecated.hook': './src/boot/deprecated/hook.ts', + 'botframework-webchat-api.deprecated.internal': './src/boot/deprecated/internal.ts', + 'botframework-webchat-api.deprecated.middleware': './src/boot/deprecated/middleware.ts' } })); diff --git a/packages/bundle/esbuild.static.mjs b/packages/bundle/esbuild.static.mjs index 22126b7360..c0d03bc646 100644 --- a/packages/bundle/esbuild.static.mjs +++ b/packages/bundle/esbuild.static.mjs @@ -148,7 +148,14 @@ const IGNORED_OWN_PACKAGES = [ } for (const key of getKeysRecursive(packageJson.exports)) { - key.startsWith('.') && allOwnExports.add(`${packageJson.name}${key.slice(1)}`); + if (key.startsWith('.')) { + if (key === '.') { + allOwnExports.add(`${packageJson.name}`); + } else if (key.endsWith('.js')) { + // ./filename.js -> /filename + allOwnExports.add(`${packageJson.name}${key.slice(1, -3)}`); + } + } } } diff --git a/packages/bundle/package.json b/packages/bundle/package.json index 726b81c89c..d3c4d104b8 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -16,6 +16,16 @@ } }, "./component": { + "import": { + "types": "./dist/botframework-webchat.deprecated.component.d.mts", + "default": "./dist/botframework-webchat.deprecated.component.mjs" + }, + "require": { + "types": "./dist/botframework-webchat.deprecated.component.d.ts", + "default": "./dist/botframework-webchat.deprecated.component.js" + } + }, + "./component.js": { "import": { "types": "./dist/botframework-webchat.component.d.mts", "default": "./dist/botframework-webchat.component.mjs" @@ -26,6 +36,16 @@ } }, "./decorator": { + "import": { + "types": "./dist/botframework-webchat.deprecated.decorator.d.mts", + "default": "./dist/botframework-webchat.deprecated.decorator.mjs" + }, + "require": { + "types": "./dist/botframework-webchat.deprecated.decorator.d.ts", + "default": "./dist/botframework-webchat.deprecated.decorator.js" + } + }, + "./decorator.js": { "import": { "types": "./dist/botframework-webchat.decorator.d.mts", "default": "./dist/botframework-webchat.decorator.mjs" @@ -36,6 +56,16 @@ } }, "./hook": { + "import": { + "types": "./dist/botframework-webchat.deprecated.hook.d.mts", + "default": "./dist/botframework-webchat.deprecated.hook.mjs" + }, + "require": { + "types": "./dist/botframework-webchat.deprecated.hook.d.ts", + "default": "./dist/botframework-webchat.deprecated.hook.js" + } + }, + "./hook.js": { "import": { "types": "./dist/botframework-webchat.hook.d.mts", "default": "./dist/botframework-webchat.hook.mjs" @@ -46,6 +76,16 @@ } }, "./internal": { + "import": { + "types": "./dist/botframework-webchat.deprecated.internal.d.mts", + "default": "./dist/botframework-webchat.deprecated.internal.mjs" + }, + "require": { + "types": "./dist/botframework-webchat.deprecated.internal.d.ts", + "default": "./dist/botframework-webchat.deprecated.internal.js" + } + }, + "./internal.js": { "import": { "types": "./dist/botframework-webchat.internal.d.mts", "default": "./dist/botframework-webchat.internal.mjs" @@ -56,6 +96,16 @@ } }, "./middleware": { + "import": { + "types": "./dist/botframework-webchat.deprecated.middleware.d.mts", + "default": "./dist/botframework-webchat.deprecated.middleware.mjs" + }, + "require": { + "types": "./dist/botframework-webchat.deprecated.middleware.d.ts", + "default": "./dist/botframework-webchat.deprecated.middleware.js" + } + }, + "./middleware.js": { "import": { "types": "./dist/botframework-webchat.middleware.d.mts", "default": "./dist/botframework-webchat.middleware.mjs" @@ -65,7 +115,7 @@ "default": "./dist/botframework-webchat.middleware.js" } }, - "./schema": { + "./schema.js": { "import": { "types": "./dist/botframework-webchat.schema.d.mts", "default": "./dist/botframework-webchat.schema.mjs" diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx b/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx index 8cc7967c5c..866c954677 100644 --- a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx +++ b/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx @@ -3,7 +3,7 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import { type Action as AdaptiveCardAction, type OpenUrlAction, type SubmitAction } from 'adaptivecards'; -import { ErrorBoxPolymiddlewareProxy } from 'botframework-webchat-api/middleware'; +import { ErrorBoxPolymiddlewareProxy } from 'botframework-webchat-api/middleware.js'; import { getTabIndex, hooks } from 'botframework-webchat-component'; import { type DirectLineCardAction } from 'botframework-webchat-core'; import React, { diff --git a/packages/bundle/src/boot/actual/component/minimal.ts b/packages/bundle/src/boot/actual/component/minimal.ts index 23abbd7585..ceadf00b3b 100644 --- a/packages/bundle/src/boot/actual/component/minimal.ts +++ b/packages/bundle/src/boot/actual/component/minimal.ts @@ -35,4 +35,4 @@ export { type BasicWebChatProps, type ComposerProps, type ReactWebChatProps -} from 'botframework-webchat-component/component'; +} from 'botframework-webchat-component/component.js'; diff --git a/packages/bundle/src/boot/actual/decorator.ts b/packages/bundle/src/boot/actual/decorator.ts index f5a3ea2854..7052e86704 100644 --- a/packages/bundle/src/boot/actual/decorator.ts +++ b/packages/bundle/src/boot/actual/decorator.ts @@ -9,5 +9,5 @@ export { type ActivityBorderDecoratorProps, type DecoratorMiddleware, type InferDecoratorRequest -} from 'botframework-webchat-api/decorator'; -export { BorderFlair, BorderLoader, WebChatDecorator } from 'botframework-webchat-component/decorator'; +} from 'botframework-webchat-api/decorator.js'; +export { BorderFlair, BorderLoader, WebChatDecorator } from 'botframework-webchat-component/decorator.js'; diff --git a/packages/bundle/src/boot/actual/hook/minimal.ts b/packages/bundle/src/boot/actual/hook/minimal.ts index 5b7e344151..7716ddba9b 100644 --- a/packages/bundle/src/boot/actual/hook/minimal.ts +++ b/packages/bundle/src/boot/actual/hook/minimal.ts @@ -101,4 +101,4 @@ export { useVoiceState, useWebSpeechPonyfill, type SendBoxFocusOptions -} from 'botframework-webchat-component/hook'; +} from 'botframework-webchat-component/hook.js'; diff --git a/packages/bundle/src/boot/actual/internal.ts b/packages/bundle/src/boot/actual/internal.ts index 5949642426..4f69ec34e2 100644 --- a/packages/bundle/src/boot/actual/internal.ts +++ b/packages/bundle/src/boot/actual/internal.ts @@ -4,7 +4,7 @@ export { type ActivityStatusMiddleware, type TypingIndicatorMiddleware } from 'botframework-webchat-api'; -export { usePostVoiceActivity, useShouldShowMicrophoneButton } from 'botframework-webchat-api/internal'; +export { usePostVoiceActivity, useShouldShowMicrophoneButton } from 'botframework-webchat-api/internal.js'; export { CodeHighlighterComposer, createIconComponent, @@ -17,7 +17,7 @@ export { useCodeHighlighter, useLiveRegion, type HighlightCodeFn -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; export { getOrgSchemaMessage, getVoiceActivityRole, diff --git a/packages/bundle/src/boot/actual/middleware.ts b/packages/bundle/src/boot/actual/middleware.ts index 39662aec03..c839139d1f 100644 --- a/packages/bundle/src/boot/actual/middleware.ts +++ b/packages/bundle/src/boot/actual/middleware.ts @@ -11,9 +11,9 @@ export { type ActivityPolymiddlewareRenderer, type ActivityPolymiddlewareRequest, type Polymiddleware -} from 'botframework-webchat-api/middleware'; +} from 'botframework-webchat-api/middleware.js'; -export { createActivityPolymiddlewareFromLegacy } from 'botframework-webchat-api/middleware'; +export { createActivityPolymiddlewareFromLegacy } from 'botframework-webchat-api/middleware.js'; export { createErrorBoxPolymiddleware, @@ -27,7 +27,7 @@ export { type ErrorBoxPolymiddlewareProxyProps, type ErrorBoxPolymiddlewareRenderer, type ErrorBoxPolymiddlewareRequest -} from 'botframework-webchat-api/middleware'; +} from 'botframework-webchat-api/middleware.js'; export { avatarComponent, @@ -41,6 +41,6 @@ export { type AvatarPolymiddlewareProxyProps, type AvatarPolymiddlewareRenderer, type AvatarPolymiddlewareRequest -} from 'botframework-webchat-api/middleware'; +} from 'botframework-webchat-api/middleware.js'; -export { createAvatarPolymiddlewareFromLegacy } from 'botframework-webchat-api/middleware'; +export { createAvatarPolymiddlewareFromLegacy } from 'botframework-webchat-api/middleware.js'; diff --git a/packages/bundle/src/boot/exports/deprecated/component.ts b/packages/bundle/src/boot/exports/deprecated/component.ts new file mode 100644 index 0000000000..27960fa7bb --- /dev/null +++ b/packages/bundle/src/boot/exports/deprecated/component.ts @@ -0,0 +1,5 @@ +export * from '../component'; + +console.warn( + 'Import from "botframework-webchat/component" is deprecated, please import from "botframework-webchat/component.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/bundle/src/boot/exports/deprecated/decorator.ts b/packages/bundle/src/boot/exports/deprecated/decorator.ts new file mode 100644 index 0000000000..dc98f55704 --- /dev/null +++ b/packages/bundle/src/boot/exports/deprecated/decorator.ts @@ -0,0 +1,5 @@ +export * from '../decorator'; + +console.warn( + 'Import from "botframework-webchat/decorator" is deprecated, please import from "botframework-webchat/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/bundle/src/boot/exports/deprecated/hook.ts b/packages/bundle/src/boot/exports/deprecated/hook.ts new file mode 100644 index 0000000000..fbef585f2f --- /dev/null +++ b/packages/bundle/src/boot/exports/deprecated/hook.ts @@ -0,0 +1,5 @@ +export * from '../hook'; + +console.warn( + 'Import from "botframework-webchat/hook" is deprecated, please import from "botframework-webchat/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/bundle/src/boot/exports/deprecated/internal.ts b/packages/bundle/src/boot/exports/deprecated/internal.ts new file mode 100644 index 0000000000..346b5be04b --- /dev/null +++ b/packages/bundle/src/boot/exports/deprecated/internal.ts @@ -0,0 +1,5 @@ +export * from '../internal'; + +console.warn( + 'Import from "botframework-webchat/internal" is deprecated, please import from "botframework-webchat/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/bundle/src/boot/exports/deprecated/middleware.ts b/packages/bundle/src/boot/exports/deprecated/middleware.ts new file mode 100644 index 0000000000..6fd569d069 --- /dev/null +++ b/packages/bundle/src/boot/exports/deprecated/middleware.ts @@ -0,0 +1,5 @@ +export * from '../middleware'; + +console.warn( + 'Import from "botframework-webchat/middleware" is deprecated, please import from "botframework-webchat/middleware.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/bundle/src/boot/exports/deprecated/minimal.ts b/packages/bundle/src/boot/exports/deprecated/minimal.ts new file mode 100644 index 0000000000..8b291a4a98 --- /dev/null +++ b/packages/bundle/src/boot/exports/deprecated/minimal.ts @@ -0,0 +1,5 @@ +export * from '../minimal'; + +console.warn( + 'Import from "botframework-webchat/minimal" is deprecated, please import from "botframework-webchat/minimal.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/bundle/src/codeHighlighter/ShikiComposer.tsx b/packages/bundle/src/codeHighlighter/ShikiComposer.tsx index 4ddad77b7f..ad0bb7fb86 100644 --- a/packages/bundle/src/codeHighlighter/ShikiComposer.tsx +++ b/packages/bundle/src/codeHighlighter/ShikiComposer.tsx @@ -1,4 +1,4 @@ -import { CodeHighlighterComposer, type HighlightCodeFn } from 'botframework-webchat-component/internal'; +import { CodeHighlighterComposer, type HighlightCodeFn } from 'botframework-webchat-component/internal.js'; import React, { memo, ReactNode, useEffect, useState } from 'react'; import { type HighlighterCore } from 'shiki'; diff --git a/packages/bundle/src/markdown/middleware/createSanitizeMiddleware.ts b/packages/bundle/src/markdown/middleware/createSanitizeMiddleware.ts index 2e7a5b6e7b..dcfe7a7b46 100644 --- a/packages/bundle/src/markdown/middleware/createSanitizeMiddleware.ts +++ b/packages/bundle/src/markdown/middleware/createSanitizeMiddleware.ts @@ -2,7 +2,7 @@ import { type HTMLContentTransformMiddleware } from 'botframework-webchat-compon import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import sanitizeHTML from 'sanitize-html'; const BASE_SANITIZE_HTML_OPTIONS = Object.freeze({ diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.ariaLabel.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.ariaLabel.spec.ts index 9b5c328ecf..efcc44f596 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.ariaLabel.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.ariaLabel.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.asButton.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.asButton.spec.ts index 41d13c0ad3..4e467dddd3 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.asButton.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.asButton.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.className.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.className.spec.ts index 4ff3762d4c..0d5893e61f 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.className.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.className.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.iconClassName.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.iconClassName.spec.ts index f0da4da2cc..38d1d3bd3a 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.iconClassName.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.iconClassName.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.rel.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.rel.spec.ts index e29e3a878d..aa6c9cc230 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.rel.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.rel.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.selector.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.selector.spec.ts index 356c76f0fd..121ee6f62e 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.selector.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.selector.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.target.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.target.spec.ts index 980a124f53..ed1eec252f 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.target.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.target.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.title.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.title.spec.ts index 602791cf11..eeeff6ce0c 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.title.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.title.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.wrapZeroWidthSpace.spec.ts b/packages/bundle/src/markdown/private/betterLinkDocumentMod.wrapZeroWidthSpace.spec.ts index 9e224faee7..08d4c6b6a1 100644 --- a/packages/bundle/src/markdown/private/betterLinkDocumentMod.wrapZeroWidthSpace.spec.ts +++ b/packages/bundle/src/markdown/private/betterLinkDocumentMod.wrapZeroWidthSpace.spec.ts @@ -4,7 +4,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import { micromark } from 'micromark'; import betterLinkDocumentMod, { type BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; diff --git a/packages/bundle/src/markdown/renderMarkdown.ts b/packages/bundle/src/markdown/renderMarkdown.ts index b23a3bba46..e6586c9b12 100644 --- a/packages/bundle/src/markdown/renderMarkdown.ts +++ b/packages/bundle/src/markdown/renderMarkdown.ts @@ -2,7 +2,7 @@ import { parseDocumentFragmentFromString, serializeDocumentFragmentIntoString, type HighlightCodeFn -} from 'botframework-webchat-component/internal'; +} from 'botframework-webchat-component/internal.js'; import katex from 'katex'; import { micromark } from 'micromark'; import { gfm, gfmHtml } from 'micromark-extension-gfm'; diff --git a/packages/bundle/src/stylesheet/BundleStylesheet.tsx b/packages/bundle/src/stylesheet/BundleStylesheet.tsx index 86693c5bd2..5f82e8ab52 100644 --- a/packages/bundle/src/stylesheet/BundleStylesheet.tsx +++ b/packages/bundle/src/stylesheet/BundleStylesheet.tsx @@ -1,7 +1,7 @@ // TODO: [P2] This component can be replaced by `bindProps`. import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; -import { InjectStyleElements, injectStyleElementsPropsSchema } from 'botframework-webchat-component/internal'; -import { useStyleOptions } from 'botframework-webchat-component/hook'; +import { InjectStyleElements, injectStyleElementsPropsSchema } from 'botframework-webchat-component/internal.js'; +import { useStyleOptions } from 'botframework-webchat-component/hook.js'; import React, { memo, type FunctionComponent } from 'react'; import { never, object, optional, pipe, readonly, string, undefinedable, type InferInput } from 'valibot'; diff --git a/packages/bundle/tsup.config.ts b/packages/bundle/tsup.config.ts index 307d6ed5e7..e74cd1df4b 100644 --- a/packages/bundle/tsup.config.ts +++ b/packages/bundle/tsup.config.ts @@ -27,7 +27,13 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat.hook': './src/boot/exports/hook.ts', 'botframework-webchat.internal': './src/boot/exports/internal.ts', 'botframework-webchat.middleware': './src/boot/exports/middleware.ts', - 'botframework-webchat.schema': './src/boot/exports/schema.ts' + 'botframework-webchat.schema': './src/boot/exports/schema.ts', + // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. + 'botframework-webchat.deprecated.component': './src/boot/exports/deprecated/component.ts', + 'botframework-webchat.deprecated.decorator': './src/boot/exports/deprecated/decorator.ts', + 'botframework-webchat.deprecated.hook': './src/boot/exports/deprecated/hook.ts', + 'botframework-webchat.deprecated.internal': './src/boot/exports/deprecated/internal.ts', + 'botframework-webchat.deprecated.middleware': './src/boot/exports/deprecated/middleware.ts' }, env: { ...config.env, @@ -53,7 +59,11 @@ const commonConfig = applyConfig(config => ({ esbuildPlugins: [ ...(config.esbuildPlugins ?? []), injectCSSPlugin({ - ignoreCSSEntries: ['dist/botframework-webchat.component.css'], + ignoreCSSEntries: [ + 'dist/botframework-webchat.component.css', + // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. + 'dist/botframework-webchat.deprecated.component.css' + ], stylesPlaceholder: bundleStyleContentPlaceholder }) ] diff --git a/packages/component/package.json b/packages/component/package.json index 67f5ad0fa1..2b44b96fc8 100644 --- a/packages/component/package.json +++ b/packages/component/package.json @@ -16,6 +16,16 @@ } }, "./component": { + "import": { + "types": "./dist/botframework-webchat-component.deprecated.component.d.mts", + "default": "./dist/botframework-webchat-component.deprecated.component.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-component.deprecated.component.d.ts", + "default": "./dist/botframework-webchat-component.deprecated.component.js" + } + }, + "./component.js": { "import": { "types": "./dist/botframework-webchat-component.component.d.mts", "default": "./dist/botframework-webchat-component.component.mjs" @@ -26,6 +36,16 @@ } }, "./decorator": { + "import": { + "types": "./dist/botframework-webchat-component.deprecated.decorator.d.mts", + "default": "./dist/botframework-webchat-component.deprecated.decorator.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-component.deprecated.decorator.d.ts", + "default": "./dist/botframework-webchat-component.deprecated.decorator.js" + } + }, + "./decorator.js": { "import": { "types": "./dist/botframework-webchat-component.decorator.d.mts", "default": "./dist/botframework-webchat-component.decorator.mjs" @@ -36,6 +56,16 @@ } }, "./hook": { + "import": { + "types": "./dist/botframework-webchat-component.deprecated.hook.d.mts", + "default": "./dist/botframework-webchat-component.deprecated.hook.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-component.deprecated.hook.d.ts", + "default": "./dist/botframework-webchat-component.deprecated.hook.js" + } + }, + "./hook.js": { "import": { "types": "./dist/botframework-webchat-component.hook.d.mts", "default": "./dist/botframework-webchat-component.hook.mjs" @@ -46,6 +76,16 @@ } }, "./internal": { + "import": { + "types": "./dist/botframework-webchat-component.deprecated.internal.d.mts", + "default": "./dist/botframework-webchat-component.deprecated.internal.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-component.deprecated.internal.d.ts", + "default": "./dist/botframework-webchat-component.deprecated.internal.js" + } + }, + "./internal.js": { "import": { "types": "./dist/botframework-webchat-component.internal.d.mts", "default": "./dist/botframework-webchat-component.internal.mjs" diff --git a/packages/component/src/Activity/StackedLayout.tsx b/packages/component/src/Activity/StackedLayout.tsx index edb5865e4d..e5219be34d 100644 --- a/packages/component/src/Activity/StackedLayout.tsx +++ b/packages/component/src/Activity/StackedLayout.tsx @@ -3,7 +3,7 @@ import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import type { RenderAttachment } from 'botframework-webchat-api'; import { hooks } from 'botframework-webchat-api'; -import { ActivityBorderDecorator } from 'botframework-webchat-api/decorator'; +import { ActivityBorderDecorator } from 'botframework-webchat-api/decorator.js'; import { getActivityLivestreamingMetadata, getOrgSchemaMessage, diff --git a/packages/component/src/ActivityDebug/RestrictedActivityDebugAPI.ts b/packages/component/src/ActivityDebug/RestrictedActivityDebugAPI.ts index cf86dda36a..bcea7f5614 100644 --- a/packages/component/src/ActivityDebug/RestrictedActivityDebugAPI.ts +++ b/packages/component/src/ActivityDebug/RestrictedActivityDebugAPI.ts @@ -1,4 +1,4 @@ -import { RestrictedDebugAPI } from 'botframework-webchat-core/internal'; +import { RestrictedDebugAPI } from 'botframework-webchat-core/internal.js'; import type { ArrayElement } from 'type-fest'; const BREAKPOINT_NAMES = ['render'] as const; diff --git a/packages/component/src/BuiltInDecorator.tsx b/packages/component/src/BuiltInDecorator.tsx index cc9c230317..a9ca2402ab 100644 --- a/packages/component/src/BuiltInDecorator.tsx +++ b/packages/component/src/BuiltInDecorator.tsx @@ -1,4 +1,4 @@ -import { LowPriorityDecoratorComposer } from 'botframework-webchat-api/internal'; +import { LowPriorityDecoratorComposer } from 'botframework-webchat-api/internal.js'; import React, { memo, type ReactNode } from 'react'; import createDefaultActivityGroupingDecoratorMiddleware from './Middleware/ActivityGrouping/createDefaultActivityGroupingDecoratorMiddleware'; diff --git a/packages/component/src/Composer.tsx b/packages/component/src/Composer.tsx index 3495d8af33..23a3bd7f21 100644 --- a/packages/component/src/Composer.tsx +++ b/packages/component/src/Composer.tsx @@ -20,9 +20,9 @@ import { type ToastMiddleware, type TypingIndicatorMiddleware } from 'botframework-webchat-api'; -import { DecoratorComposer, type DecoratorMiddleware } from 'botframework-webchat-api/decorator'; -import { type LegacyActivityMiddleware, type Polymiddleware } from 'botframework-webchat-api/middleware'; -import { StoreDebugAPIRegistry, type StoreDebugAPI } from 'botframework-webchat-core/internal'; +import { DecoratorComposer, type DecoratorMiddleware } from 'botframework-webchat-api/decorator.js'; +import { type LegacyActivityMiddleware, type Polymiddleware } from 'botframework-webchat-api/middleware.js'; +import { StoreDebugAPIRegistry, type StoreDebugAPI } from 'botframework-webchat-core/internal.js'; import classNames from 'classnames'; import MarkdownIt from 'markdown-it'; import PropTypes from 'prop-types'; diff --git a/packages/component/src/Dictation.js b/packages/component/src/Dictation.js index 48a1efecd4..3c203e3a4c 100644 --- a/packages/component/src/Dictation.js +++ b/packages/component/src/Dictation.js @@ -1,6 +1,6 @@ import { hooks } from 'botframework-webchat-api'; // TODO: [P1] #3350 No import from internal, we need to move setDictateState from bf-wc-core (Redux) to React Context. -import { useSetDictateState } from 'botframework-webchat-api/internal'; +import { useSetDictateState } from 'botframework-webchat-api/internal.js'; import { Constants } from 'botframework-webchat-core'; import PropTypes from 'prop-types'; import React, { useCallback, useEffect } from 'react'; diff --git a/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx b/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx index 543e20ebf6..4524ef816b 100644 --- a/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx +++ b/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx @@ -1,6 +1,6 @@ /* eslint complexity: ["error", 21] */ import { ActivityMiddleware } from 'botframework-webchat-api'; -import { createActivityPolymiddlewareFromLegacy, type Polymiddleware } from 'botframework-webchat-api/middleware'; +import { createActivityPolymiddlewareFromLegacy, type Polymiddleware } from 'botframework-webchat-api/middleware.js'; import { getActivityLivestreamingMetadata, getOrgSchemaMessage, diff --git a/packages/component/src/Middleware/ActivityGrouping/createDefaultActivityGroupingDecoratorMiddleware.tsx b/packages/component/src/Middleware/ActivityGrouping/createDefaultActivityGroupingDecoratorMiddleware.tsx index 7940ccc6e4..96231a0e8b 100644 --- a/packages/component/src/Middleware/ActivityGrouping/createDefaultActivityGroupingDecoratorMiddleware.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/createDefaultActivityGroupingDecoratorMiddleware.tsx @@ -1,4 +1,4 @@ -import { createActivityGroupingMiddleware, type DecoratorMiddleware } from 'botframework-webchat-api/decorator'; +import { createActivityGroupingMiddleware, type DecoratorMiddleware } from 'botframework-webchat-api/decorator.js'; import PartGrouping from './ui/PartGrouping/PartGrouping'; import RenderActivityGrouping from './ui/RenderActivityGrouping'; import SenderGrouping from './ui/SenderGrouping/SenderGrouping'; diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx index 63a444ed5e..f004412995 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx @@ -1,6 +1,6 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { hooks } from 'botframework-webchat-api'; -import { LegacyActivityContextProvider, type LegacyActivityContextType } from 'botframework-webchat-api/internal'; +import { LegacyActivityContextProvider, type LegacyActivityContextType } from 'botframework-webchat-api/internal.js'; import { type WebChatActivity } from 'botframework-webchat-core'; import React, { memo, useMemo } from 'react'; import { custom, object, optional, pipe, readonly, safeParse, type InferInput } from 'valibot'; diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx index 696ee2b7f4..fcc1343594 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx @@ -1,6 +1,6 @@ import { reactNode } from '@msinternal/botframework-webchat-react-valibot'; import { getActivityLivestreamingMetadata, getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core'; -import { IdentifierSchema } from 'botframework-webchat-core/graph'; +import { IdentifierSchema } from 'botframework-webchat-core/graph.js'; import React, { Fragment, memo, useMemo } from 'react'; import { array, diff --git a/packages/component/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx b/packages/component/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx index 5f182aee98..b4d4b21bf6 100644 --- a/packages/component/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx +++ b/packages/component/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx @@ -4,7 +4,7 @@ import { createAvatarPolymiddleware, // Required but unused, for type portability. type __INTERNAL_DO_NOT_USE__avatarPolymiddlewareRequestStyleOptionsSymbol -} from 'botframework-webchat-api/middleware'; +} from 'botframework-webchat-api/middleware.js'; import DefaultAvatar from './DefaultAvatar'; function createDefaultAvatarMiddleware(styleOptions: StyleOptions | undefined) { diff --git a/packages/component/src/SendBox/TextBox.tsx b/packages/component/src/SendBox/TextBox.tsx index 0198cbfe01..a64a48f0e2 100644 --- a/packages/component/src/SendBox/TextBox.tsx +++ b/packages/component/src/SendBox/TextBox.tsx @@ -1,5 +1,5 @@ import { hooks } from 'botframework-webchat-api'; -import { usePonyfill } from 'botframework-webchat-api/hook'; +import { usePonyfill } from 'botframework-webchat-api/hook.js'; import classNames from 'classnames'; import React, { useCallback, useMemo, useRef } from 'react'; diff --git a/packages/component/src/Styles/CSSCustomPropertiesContainer.tsx b/packages/component/src/Styles/CSSCustomPropertiesContainer.tsx index 7998a2adac..78a4413720 100644 --- a/packages/component/src/Styles/CSSCustomPropertiesContainer.tsx +++ b/packages/component/src/Styles/CSSCustomPropertiesContainer.tsx @@ -1,7 +1,7 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { makeCreateStyles } from '@msinternal/botframework-webchat-styles'; import { InjectStyleElements } from '@msinternal/botframework-webchat-styles/react'; -import { useStyleOptions } from 'botframework-webchat-api/hook'; +import { useStyleOptions } from 'botframework-webchat-api/hook.js'; import classNames from 'classnames'; import random from 'math-random'; import React, { forwardRef, memo, useMemo, type Ref } from 'react'; diff --git a/packages/component/src/Transcript/ActivityTree.tsx b/packages/component/src/Transcript/ActivityTree.tsx index d6b50504a3..a2ef44b9fd 100644 --- a/packages/component/src/Transcript/ActivityTree.tsx +++ b/packages/component/src/Transcript/ActivityTree.tsx @@ -1,4 +1,4 @@ -import { ActivityGroupingDecorator } from 'botframework-webchat-api/decorator'; +import { ActivityGroupingDecorator } from 'botframework-webchat-api/decorator.js'; import React, { Fragment, memo } from 'react'; import { type GroupedRenderingActivities } from '../providers/GroupedRenderingActivities/GroupedRenderingActivities'; diff --git a/packages/component/src/Transcript/hooks/useRenderActivityProps.ts b/packages/component/src/Transcript/hooks/useRenderActivityProps.ts index 4785f6cba0..cd1a6baa02 100644 --- a/packages/component/src/Transcript/hooks/useRenderActivityProps.ts +++ b/packages/component/src/Transcript/hooks/useRenderActivityProps.ts @@ -1,5 +1,5 @@ import { hooks } from 'botframework-webchat-api'; -import { useBuildRenderAvatarCallback } from 'botframework-webchat-api/middleware'; +import { useBuildRenderAvatarCallback } from 'botframework-webchat-api/middleware.js'; import { type WebChatActivity } from 'botframework-webchat-core'; import { useMemo, type ReactNode } from 'react'; diff --git a/packages/component/src/boot/deprecated/component.ts b/packages/component/src/boot/deprecated/component.ts new file mode 100644 index 0000000000..33ae183e0c --- /dev/null +++ b/packages/component/src/boot/deprecated/component.ts @@ -0,0 +1,5 @@ +export * from '../component'; + +console.warn( + 'Import from "botframework-webchat-component/component" is deprecated, please import from "botframework-webchat-component/component.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/component/src/boot/deprecated/decorator.ts b/packages/component/src/boot/deprecated/decorator.ts new file mode 100644 index 0000000000..4915f0028a --- /dev/null +++ b/packages/component/src/boot/deprecated/decorator.ts @@ -0,0 +1,5 @@ +export * from '../decorator'; + +console.warn( + 'Import from "botframework-webchat-component/decorator" is deprecated, please import from "botframework-webchat-component/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/component/src/boot/deprecated/hook.ts b/packages/component/src/boot/deprecated/hook.ts new file mode 100644 index 0000000000..4abac54c5a --- /dev/null +++ b/packages/component/src/boot/deprecated/hook.ts @@ -0,0 +1,5 @@ +export * from '../hook'; + +console.warn( + 'Import from "botframework-webchat-component/hook" is deprecated, please import from "botframework-webchat-component/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/component/src/boot/deprecated/internal.ts b/packages/component/src/boot/deprecated/internal.ts new file mode 100644 index 0000000000..a9aa52e2e9 --- /dev/null +++ b/packages/component/src/boot/deprecated/internal.ts @@ -0,0 +1,5 @@ +export * from '../internal'; + +console.warn( + 'Import from "botframework-webchat-component/internal" is deprecated, please import from "botframework-webchat-component/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/component/src/boot/hook.ts b/packages/component/src/boot/hook.ts index 38f37d1659..3cb3531284 100644 --- a/packages/component/src/boot/hook.ts +++ b/packages/component/src/boot/hook.ts @@ -77,7 +77,7 @@ export { useVoiceRecordingMuted, useVoiceSelector, useVoiceState -} from 'botframework-webchat-api/hook'; +} from 'botframework-webchat-api/hook.js'; // #region Overrides export { diff --git a/packages/component/src/boot/internal.ts b/packages/component/src/boot/internal.ts index 1dc92dd9f6..7e2ea3d536 100644 --- a/packages/component/src/boot/internal.ts +++ b/packages/component/src/boot/internal.ts @@ -12,4 +12,4 @@ export { default as parseDocumentFragmentFromString } from '../Utils/parseDocume export { default as serializeDocumentFragmentIntoString } from '../Utils/serializeDocumentFragmentIntoString'; // For type portability -export { type __INTERNAL_DO_NOT_USE__avatarPolymiddlewareRequestStyleOptionsSymbol } from 'botframework-webchat-api/internal'; +export { type __INTERNAL_DO_NOT_USE__avatarPolymiddlewareRequestStyleOptionsSymbol } from 'botframework-webchat-api/internal.js'; diff --git a/packages/component/src/decorator/private/WebChatDecorator.tsx b/packages/component/src/decorator/private/WebChatDecorator.tsx index edce239b69..3cac590ca1 100644 --- a/packages/component/src/decorator/private/WebChatDecorator.tsx +++ b/packages/component/src/decorator/private/WebChatDecorator.tsx @@ -4,7 +4,7 @@ import { createActivityBorderMiddleware, DecoratorComposer, type DecoratorMiddleware -} from 'botframework-webchat-api/decorator'; +} from 'botframework-webchat-api/decorator.js'; import React, { Fragment, memo } from 'react'; import { object, optional, pipe, readonly, string, type InferInput } from 'valibot'; diff --git a/packages/component/src/decorator/stylesheet/DecoratorStylesheet.tsx b/packages/component/src/decorator/stylesheet/DecoratorStylesheet.tsx index f4db0fb070..a0482961e7 100644 --- a/packages/component/src/decorator/stylesheet/DecoratorStylesheet.tsx +++ b/packages/component/src/decorator/stylesheet/DecoratorStylesheet.tsx @@ -1,7 +1,7 @@ // TODO: [P2] This component can be replaced by `bindProps`. import { InjectStyleElements } from '@msinternal/botframework-webchat-styles/react'; import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; -import { useStyleOptions } from 'botframework-webchat-api/hook'; +import { useStyleOptions } from 'botframework-webchat-api/hook.js'; import React, { memo, type FunctionComponent } from 'react'; import { never, object, optional, pipe, readonly, string, undefinedable, type InferInput } from 'valibot'; diff --git a/packages/component/src/providers/RenderingActivities/RenderingActivitiesComposer.tsx b/packages/component/src/providers/RenderingActivities/RenderingActivitiesComposer.tsx index 6724b30557..21dc300f29 100644 --- a/packages/component/src/providers/RenderingActivities/RenderingActivitiesComposer.tsx +++ b/packages/component/src/providers/RenderingActivities/RenderingActivitiesComposer.tsx @@ -1,7 +1,7 @@ import { useBuildRenderActivityCallback, type ActivityPolymiddlewareRenderer -} from 'botframework-webchat-api/middleware'; +} from 'botframework-webchat-api/middleware.js'; import { hooks } from 'botframework-webchat-api'; import { type WebChatActivity } from 'botframework-webchat-core'; import React, { memo, useCallback, useMemo, type ReactNode } from 'react'; diff --git a/packages/component/src/providers/RenderingActivities/private/RenderingActivitiesContext.ts b/packages/component/src/providers/RenderingActivities/private/RenderingActivitiesContext.ts index 21afa9e512..8afa81f670 100644 --- a/packages/component/src/providers/RenderingActivities/private/RenderingActivitiesContext.ts +++ b/packages/component/src/providers/RenderingActivities/private/RenderingActivitiesContext.ts @@ -1,4 +1,4 @@ -import { type ActivityPolymiddlewareRenderer } from 'botframework-webchat-api/middleware'; +import { type ActivityPolymiddlewareRenderer } from 'botframework-webchat-api/middleware.js'; import { type WebChatActivity } from 'botframework-webchat-core'; import createContextAndHook from '../../createContextAndHook'; diff --git a/packages/component/src/providers/RenderingActivities/useActivityRendererMap.ts b/packages/component/src/providers/RenderingActivities/useActivityRendererMap.ts index a8c089fbcd..d85e93f843 100644 --- a/packages/component/src/providers/RenderingActivities/useActivityRendererMap.ts +++ b/packages/component/src/providers/RenderingActivities/useActivityRendererMap.ts @@ -1,4 +1,4 @@ -import { type ActivityPolymiddlewareRenderer } from 'botframework-webchat-api/middleware'; +import { type ActivityPolymiddlewareRenderer } from 'botframework-webchat-api/middleware.js'; import { type WebChatActivity } from 'botframework-webchat-core'; import { useRenderingActivitiesContext } from './private/RenderingActivitiesContext'; diff --git a/packages/component/src/providers/Theme/ThemeProvider.tsx b/packages/component/src/providers/Theme/ThemeProvider.tsx index b9f97e71cb..7b3bd06ef6 100644 --- a/packages/component/src/providers/Theme/ThemeProvider.tsx +++ b/packages/component/src/providers/Theme/ThemeProvider.tsx @@ -17,8 +17,8 @@ import { type ToastMiddleware, type TypingIndicatorMiddleware } from 'botframework-webchat-api'; -import { StyleOptionsComposer } from 'botframework-webchat-api/internal'; -import { type Polymiddleware } from 'botframework-webchat-api/middleware'; +import { StyleOptionsComposer } from 'botframework-webchat-api/internal.js'; +import { type Polymiddleware } from 'botframework-webchat-api/middleware.js'; import React, { memo, useContext, useMemo, type ReactNode } from 'react'; import { array, custom, function_, object, optional, pipe, readonly, safeParse } from 'valibot'; diff --git a/packages/component/src/providers/Theme/private/Context.ts b/packages/component/src/providers/Theme/private/Context.ts index 8884b6ac65..e2bb01542d 100644 --- a/packages/component/src/providers/Theme/private/Context.ts +++ b/packages/component/src/providers/Theme/private/Context.ts @@ -12,7 +12,7 @@ import type { ToastMiddleware, TypingIndicatorMiddleware } from 'botframework-webchat-api'; -import { type Polymiddleware } from 'botframework-webchat-api/middleware'; +import { type Polymiddleware } from 'botframework-webchat-api/middleware.js'; import { createContext } from 'react'; const EMPTY_ARRAY = Object.freeze([] as const); diff --git a/packages/component/src/stylesheet/ComponentStylesheet.tsx b/packages/component/src/stylesheet/ComponentStylesheet.tsx index 1669487f97..c7d15e74b3 100644 --- a/packages/component/src/stylesheet/ComponentStylesheet.tsx +++ b/packages/component/src/stylesheet/ComponentStylesheet.tsx @@ -1,7 +1,7 @@ // TODO: [P2] This component can be replaced by `bindProps`. import { InjectStyleElements } from '@msinternal/botframework-webchat-styles/react'; import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; -import { useStyleOptions } from 'botframework-webchat-api/hook'; +import { useStyleOptions } from 'botframework-webchat-api/hook.js'; import React, { memo, type FunctionComponent } from 'react'; import { never, object, optional, pipe, readonly, string, undefinedable, type InferInput } from 'valibot'; diff --git a/packages/component/tsup.config.ts b/packages/component/tsup.config.ts index 23963b16b0..0b32480db1 100644 --- a/packages/component/tsup.config.ts +++ b/packages/component/tsup.config.ts @@ -12,17 +12,32 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat-component.component': './src/boot/component.ts', 'botframework-webchat-component.decorator': './src/boot/decorator.ts', 'botframework-webchat-component.hook': './src/boot/hook.ts', - 'botframework-webchat-component.internal': './src/boot/internal.ts' + 'botframework-webchat-component.internal': './src/boot/internal.ts', + // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. + 'botframework-webchat-component.deprecated.component': './src/boot/deprecated/component.ts', + 'botframework-webchat-component.deprecated.decorator': './src/boot/deprecated/decorator.ts', + 'botframework-webchat-component.deprecated.hook': './src/boot/deprecated/hook.ts', + 'botframework-webchat-component.deprecated.internal': './src/boot/deprecated/internal.ts' }, esbuildPlugins: [ ...(config.esbuildPlugins ?? []), injectCSSPlugin({ // esbuild does not fully support CSS code splitting, every entry point has its own CSS file. // Related to https://github.com/evanw/esbuild/issues/608. - ignoreCSSEntries: ['dist/botframework-webchat-component.component.css'], + ignoreCSSEntries: [ + 'dist/botframework-webchat-component.component.css', + // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. + 'dist/botframework-webchat-component.deprecated.component.css' + ], stylesPlaceholder: componentStyleContentPlaceholder }), - injectCSSPlugin({ stylesPlaceholder: decoratorStyleContentPlaceholder }) + injectCSSPlugin({ + ignoreCSSEntries: [ + // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. + 'dist/botframework-webchat-component.deprecated.decorator.css' + ], + stylesPlaceholder: decoratorStyleContentPlaceholder + }) ] })); diff --git a/packages/core/package.json b/packages/core/package.json index 78777f4cee..8c31a7c6a7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -16,6 +16,16 @@ } }, "./activity": { + "import": { + "types": "./dist/botframework-webchat-core.deprecated.activity.d.mts", + "default": "./dist/botframework-webchat-core.deprecated.activity.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-core.deprecated.activity.d.ts", + "default": "./dist/botframework-webchat-core.deprecated.activity.js" + } + }, + "./activity.js": { "import": { "types": "./dist/botframework-webchat-core.activity.d.mts", "default": "./dist/botframework-webchat-core.activity.mjs" @@ -26,6 +36,16 @@ } }, "./graph": { + "import": { + "types": "./dist/botframework-webchat-core.deprecated.graph.d.mts", + "default": "./dist/botframework-webchat-core.deprecated.graph.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-core.deprecated.graph.d.ts", + "default": "./dist/botframework-webchat-core.deprecated.graph.js" + } + }, + "./graph.js": { "import": { "types": "./dist/botframework-webchat-core.graph.d.mts", "default": "./dist/botframework-webchat-core.graph.mjs" @@ -36,6 +56,16 @@ } }, "./internal": { + "import": { + "types": "./dist/botframework-webchat-core.deprecated.internal.d.mts", + "default": "./dist/botframework-webchat-core.deprecated.internal.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-core.deprecated.internal.d.ts", + "default": "./dist/botframework-webchat-core.deprecated.internal.js" + } + }, + "./internal.js": { "import": { "types": "./dist/botframework-webchat-core.internal.d.mts", "default": "./dist/botframework-webchat-core.internal.mjs" diff --git a/packages/core/src/activity/index.ts b/packages/core/src/boot/activity.ts similarity index 100% rename from packages/core/src/activity/index.ts rename to packages/core/src/boot/activity.ts diff --git a/packages/core/src/boot/deprecated/activity.ts b/packages/core/src/boot/deprecated/activity.ts new file mode 100644 index 0000000000..e5e01864d7 --- /dev/null +++ b/packages/core/src/boot/deprecated/activity.ts @@ -0,0 +1,5 @@ +export * from '../activity'; + +console.warn( + 'Import from "botframework-webchat-core/activity" is deprecated, please import from "botframework-webchat-core/activity.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/core/src/boot/deprecated/graph.ts b/packages/core/src/boot/deprecated/graph.ts new file mode 100644 index 0000000000..d2520aa4c1 --- /dev/null +++ b/packages/core/src/boot/deprecated/graph.ts @@ -0,0 +1,5 @@ +export * from '../graph'; + +console.warn( + 'Import from "botframework-webchat-core/graph" is deprecated, please import from "botframework-webchat-core/graph.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/core/src/boot/deprecated/internal.ts b/packages/core/src/boot/deprecated/internal.ts new file mode 100644 index 0000000000..253a0301d3 --- /dev/null +++ b/packages/core/src/boot/deprecated/internal.ts @@ -0,0 +1,5 @@ +export * from '../internal'; + +console.warn( + 'Import from "botframework-webchat-core/internal" is deprecated, please import from "botframework-webchat-core/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/core/src/graph/index.ts b/packages/core/src/boot/graph.ts similarity index 81% rename from packages/core/src/graph/index.ts rename to packages/core/src/boot/graph.ts index f7b59f50d8..0b992d1253 100644 --- a/packages/core/src/graph/index.ts +++ b/packages/core/src/boot/graph.ts @@ -15,4 +15,4 @@ export { type SlantNode, type WritableGraph } from '@msinternal/botframework-webchat-core-graph'; -export { default as createGraphFromStore } from './createGraphFromStore'; +export { default as createGraphFromStore } from '../graph/createGraphFromStore'; diff --git a/packages/core/src/internal/index.ts b/packages/core/src/boot/internal.ts similarity index 67% rename from packages/core/src/internal/index.ts rename to packages/core/src/boot/internal.ts index 75c39b5f43..1e814e4c8f 100644 --- a/packages/core/src/internal/index.ts +++ b/packages/core/src/boot/internal.ts @@ -3,9 +3,9 @@ export { default as setRawState, setRawStateActionSchema, type SetRawStateAction -} from './actions/setRawState'; +} from '../internal/actions/setRawState'; -export { default as StoreDebugAPIRegistry } from './StoreDebugAPIRegistry'; +export { default as StoreDebugAPIRegistry } from '../internal/StoreDebugAPIRegistry'; export { type StoreDebugAPI } from '../types/StoreDebugAPI'; export { RestrictedDebugAPI, type InferPublic } from '@msinternal/botframework-webchat-core-debug-api'; diff --git a/packages/core/src/createStore.ts b/packages/core/src/createStore.ts index fd523b8e43..324c0b3931 100644 --- a/packages/core/src/createStore.ts +++ b/packages/core/src/createStore.ts @@ -8,7 +8,7 @@ import createSagas from './createSagas'; import { RestrictedStoreDebugAPI } from './types/StoreDebugAPI'; import type { GlobalScopePonyfill } from './types/GlobalScopePonyfill'; -import { StoreDebugAPIRegistry } from './internal'; +import StoreDebugAPIRegistry from './internal/StoreDebugAPIRegistry'; type CreateStoreOptions = { /** diff --git a/packages/core/src/graph/createGraphFromStore.ts b/packages/core/src/graph/createGraphFromStore.ts index fa86efd3e2..8436473028 100644 --- a/packages/core/src/graph/createGraphFromStore.ts +++ b/packages/core/src/graph/createGraphFromStore.ts @@ -1,8 +1,9 @@ import { SlantGraph, SlantNodeSchema } from '@msinternal/botframework-webchat-core-graph'; import { parse } from 'valibot'; import type createStore from '../createStore'; +import { getLocalIdFromActivity } from '../reducers/activities/sort/property/LocalId'; +import { getPositionFromActivity } from '../reducers/activities/sort/property/Position'; import type { Activity } from '../reducers/activities/sort/types'; -import { getLocalIdFromActivity, getPositionFromActivity } from '../activity'; function createGraphFromStore(store: ReturnType): SlantGraph { const graph = new SlantGraph(); diff --git a/packages/core/src/types/WebChatActivity.ts b/packages/core/src/types/WebChatActivity.ts index ec9efa2984..903de2bf47 100644 --- a/packages/core/src/types/WebChatActivity.ts +++ b/packages/core/src/types/WebChatActivity.ts @@ -7,7 +7,7 @@ // - However, we do not expect the server to return "localTimestamp" as they may not have capability to store this information // - "conversationUpdate" activity is never sent to Web Chat, thus, it is not defined -import type { LocalId } from '../activity/index'; +import type { LocalId } from '../reducers/activities/sort/property/LocalId'; import type { AnyAnd } from './AnyAnd'; // import type { AsEntity, Thing } from './external/OrgSchema/Thing'; import type { DirectLineAttachment } from './external/DirectLineAttachment'; diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts index bde073ebde..70176fc933 100644 --- a/packages/core/tsup.config.ts +++ b/packages/core/tsup.config.ts @@ -6,9 +6,13 @@ const commonConfig = applyConfig(config => ({ ...config, entry: { 'botframework-webchat-core': './src/index.ts', - 'botframework-webchat-core.activity': './src/activity/index.ts', - 'botframework-webchat-core.graph': './src/graph/index.ts', - 'botframework-webchat-core.internal': './src/internal/index.ts' + 'botframework-webchat-core.activity': './src/boot/activity.ts', + 'botframework-webchat-core.graph': './src/boot/graph.ts', + 'botframework-webchat-core.internal': './src/boot/internal.ts', + // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. + 'botframework-webchat-core.deprecated.activity': './src/boot/deprecated/activity.ts', + 'botframework-webchat-core.deprecated.graph': './src/boot/deprecated/graph.ts', + 'botframework-webchat-core.deprecated.internal': './src/boot/deprecated/internal.ts' } })); diff --git a/packages/debug-theme/src/DebugProvider.tsx b/packages/debug-theme/src/DebugProvider.tsx index a5d85cd9b3..e78254d36e 100644 --- a/packages/debug-theme/src/DebugProvider.tsx +++ b/packages/debug-theme/src/DebugProvider.tsx @@ -1,5 +1,5 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; -import { createErrorBoxPolymiddleware, errorBoxComponent } from 'botframework-webchat-api/middleware'; +import { createErrorBoxPolymiddleware, errorBoxComponent } from 'botframework-webchat-api/middleware.js'; import { Components } from 'botframework-webchat-component'; import React, { memo, useMemo } from 'react'; import { object, optional, pipe, type InferInput } from 'valibot'; diff --git a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx index d73e5e78d6..9e20844fa5 100644 --- a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx +++ b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx @@ -1,6 +1,6 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { hooks } from 'botframework-webchat'; -import { type WebChatActivity } from 'botframework-webchat/internal'; +import { type WebChatActivity } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, useMemo, type CSSProperties } from 'react'; import { custom, object, optional, pipe, readonly, safeParse, string, type InferInput } from 'valibot'; diff --git a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx index 98cbc9509e..46aaee2ca3 100644 --- a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx +++ b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx @@ -4,7 +4,7 @@ import { getVoiceActivityRole, PartGrouping, type WebChatActivity -} from 'botframework-webchat/internal'; +} from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, useMemo, type ReactNode } from 'react'; import { array, custom, object, optional, pipe, readonly, safeParse } from 'valibot'; diff --git a/packages/fluent-theme/src/components/activity/private/isAIGeneratedActivity.ts b/packages/fluent-theme/src/components/activity/private/isAIGeneratedActivity.ts index 60688d986a..82c6564de3 100644 --- a/packages/fluent-theme/src/components/activity/private/isAIGeneratedActivity.ts +++ b/packages/fluent-theme/src/components/activity/private/isAIGeneratedActivity.ts @@ -1,4 +1,4 @@ -import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal'; +import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal.js'; export default function isAIGeneratedActivity(activity: undefined | WebChatActivity) { return !!(activity && getOrgSchemaMessage(activity?.entities || [])?.keywords.includes('AIGeneratedContent')); diff --git a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts index c1af6cfd59..44a3e54552 100644 --- a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts +++ b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts @@ -1,5 +1,5 @@ -import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal'; -import { orgSchemaPersonSchema, type OrgSchemaPerson } from 'botframework-webchat/schema'; +import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal.js'; +import { orgSchemaPersonSchema, type OrgSchemaPerson } from 'botframework-webchat/schema.js'; import { useMemo } from 'react'; import { parse } from 'valibot'; diff --git a/packages/fluent-theme/src/components/activity/private/useActivityStyleOptions.ts b/packages/fluent-theme/src/components/activity/private/useActivityStyleOptions.ts index 4dce5f70ec..adb3ffd4c7 100644 --- a/packages/fluent-theme/src/components/activity/private/useActivityStyleOptions.ts +++ b/packages/fluent-theme/src/components/activity/private/useActivityStyleOptions.ts @@ -1,5 +1,5 @@ import { type StrictStyleOptions, hooks } from 'botframework-webchat'; -import { type WebChatActivity } from 'botframework-webchat/internal'; +import { type WebChatActivity } from 'botframework-webchat/internal.js'; import { useMemo } from 'react'; const { useStyleOptions } = hooks; diff --git a/packages/fluent-theme/src/components/activityStatus/VoiceTranscriptActivityStatus.tsx b/packages/fluent-theme/src/components/activityStatus/VoiceTranscriptActivityStatus.tsx index 28f9202f0b..bac530872d 100644 --- a/packages/fluent-theme/src/components/activityStatus/VoiceTranscriptActivityStatus.tsx +++ b/packages/fluent-theme/src/components/activityStatus/VoiceTranscriptActivityStatus.tsx @@ -1,6 +1,6 @@ import { hooks } from 'botframework-webchat'; -import { Timestamp } from 'botframework-webchat/component'; -import { getVoiceActivityRole, getVoiceActivityText, type WebChatActivity } from 'botframework-webchat/internal'; +import { Timestamp } from 'botframework-webchat/component.js'; +import { getVoiceActivityRole, getVoiceActivityText, type WebChatActivity } from 'botframework-webchat/internal.js'; import React, { Fragment, memo } from 'react'; import { useStyles } from '../../styles'; diff --git a/packages/fluent-theme/src/components/icon/FluentIcon.tsx b/packages/fluent-theme/src/components/icon/FluentIcon.tsx index d0e46ccf67..416796237a 100644 --- a/packages/fluent-theme/src/components/icon/FluentIcon.tsx +++ b/packages/fluent-theme/src/components/icon/FluentIcon.tsx @@ -1,6 +1,6 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; -import { createIconComponent } from 'botframework-webchat/internal'; +import { createIconComponent } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, useMemo, type CSSProperties } from 'react'; import { object, optional, pipe, readonly, string, union, type InferInput } from 'valibot'; diff --git a/packages/fluent-theme/src/components/linerActivity/private/LinerActivity.tsx b/packages/fluent-theme/src/components/linerActivity/private/LinerActivity.tsx index e708423966..b78e89cf9d 100644 --- a/packages/fluent-theme/src/components/linerActivity/private/LinerActivity.tsx +++ b/packages/fluent-theme/src/components/linerActivity/private/LinerActivity.tsx @@ -1,4 +1,4 @@ -import { type WebChatActivity } from 'botframework-webchat/internal'; +import { type WebChatActivity } from 'botframework-webchat/internal.js'; import React, { memo } from 'react'; import { useStyles } from '../../../styles/index.js'; diff --git a/packages/fluent-theme/src/components/linerActivity/private/isLinerMessageActivity.ts b/packages/fluent-theme/src/components/linerActivity/private/isLinerMessageActivity.ts index eaf135461b..00317323f1 100644 --- a/packages/fluent-theme/src/components/linerActivity/private/isLinerMessageActivity.ts +++ b/packages/fluent-theme/src/components/linerActivity/private/isLinerMessageActivity.ts @@ -1,4 +1,4 @@ -import { type WebChatActivity } from 'botframework-webchat/internal'; +import { type WebChatActivity } from 'botframework-webchat/internal.js'; export default function isLinerMessageActivity( activity: undefined | WebChatActivity diff --git a/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx b/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx index 6955f95b7d..21a78cc36a 100644 --- a/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx +++ b/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx @@ -1,5 +1,5 @@ import { hooks } from 'botframework-webchat'; -import { type WebChatActivity } from 'botframework-webchat/internal'; +import { type WebChatActivity } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, useMemo } from 'react'; diff --git a/packages/fluent-theme/src/components/preChatActivity/StarterPromptsCardAction.tsx b/packages/fluent-theme/src/components/preChatActivity/StarterPromptsCardAction.tsx index b0b4955056..f4e66c94ff 100644 --- a/packages/fluent-theme/src/components/preChatActivity/StarterPromptsCardAction.tsx +++ b/packages/fluent-theme/src/components/preChatActivity/StarterPromptsCardAction.tsx @@ -1,5 +1,5 @@ import { hooks } from 'botframework-webchat'; -import { type DirectLineCardAction } from 'botframework-webchat/internal'; +import { type DirectLineCardAction } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, useCallback, useMemo } from 'react'; import { useRefFrom } from 'use-ref-from'; diff --git a/packages/fluent-theme/src/components/preChatActivity/StarterPromptsToolbar.tsx b/packages/fluent-theme/src/components/preChatActivity/StarterPromptsToolbar.tsx index 2d2dd4f356..0b4b433f85 100644 --- a/packages/fluent-theme/src/components/preChatActivity/StarterPromptsToolbar.tsx +++ b/packages/fluent-theme/src/components/preChatActivity/StarterPromptsToolbar.tsx @@ -1,5 +1,5 @@ import { hooks } from 'botframework-webchat'; -import { type DirectLineCardAction } from 'botframework-webchat/internal'; +import { type DirectLineCardAction } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo } from 'react'; diff --git a/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts b/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts index be5e3c1077..3579143880 100644 --- a/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts +++ b/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts @@ -1,4 +1,4 @@ -import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal'; +import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal.js'; export default function isPreChatMessageActivity( activity: undefined | WebChatActivity diff --git a/packages/fluent-theme/src/components/sendBox/ErrorMessage.tsx b/packages/fluent-theme/src/components/sendBox/ErrorMessage.tsx index 1e61f7d6f4..c46cf6be03 100644 --- a/packages/fluent-theme/src/components/sendBox/ErrorMessage.tsx +++ b/packages/fluent-theme/src/components/sendBox/ErrorMessage.tsx @@ -1,4 +1,4 @@ -import { useLiveRegion } from 'botframework-webchat/internal'; +import { useLiveRegion } from 'botframework-webchat/internal.js'; import React, { memo } from 'react'; import { useStyles } from '../../styles'; diff --git a/packages/fluent-theme/src/components/sendBox/SendBox.tsx b/packages/fluent-theme/src/components/sendBox/SendBox.tsx index 05fb2bf184..7d0cfc3379 100644 --- a/packages/fluent-theme/src/components/sendBox/SendBox.tsx +++ b/packages/fluent-theme/src/components/sendBox/SendBox.tsx @@ -1,5 +1,5 @@ import { Components, hooks } from 'botframework-webchat'; -import { usePostVoiceActivity, useShouldShowMicrophoneButton } from 'botframework-webchat/internal'; +import { usePostVoiceActivity, useShouldShowMicrophoneButton } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, diff --git a/packages/fluent-theme/src/components/suggestedActions/SuggestedAction.tsx b/packages/fluent-theme/src/components/suggestedActions/SuggestedAction.tsx index 0210b98e76..038ed5506d 100644 --- a/packages/fluent-theme/src/components/suggestedActions/SuggestedAction.tsx +++ b/packages/fluent-theme/src/components/suggestedActions/SuggestedAction.tsx @@ -1,5 +1,5 @@ import { hooks } from 'botframework-webchat'; -import { type DirectLineCardAction } from 'botframework-webchat/internal'; +import { type DirectLineCardAction } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { MouseEventHandler, memo, useCallback } from 'react'; diff --git a/packages/fluent-theme/src/components/suggestedActions/private/computeSuggestedActionText.ts b/packages/fluent-theme/src/components/suggestedActions/private/computeSuggestedActionText.ts index 3936ea40d7..dcd530eb29 100644 --- a/packages/fluent-theme/src/components/suggestedActions/private/computeSuggestedActionText.ts +++ b/packages/fluent-theme/src/components/suggestedActions/private/computeSuggestedActionText.ts @@ -1,4 +1,4 @@ -import { type DirectLineCardAction } from 'botframework-webchat/internal'; +import { type DirectLineCardAction } from 'botframework-webchat/internal.js'; // Please refer to this article to find out how to compute the "button text" for suggested action. // https://github.com/Microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#card-action diff --git a/packages/fluent-theme/src/external.umd/botframework-webchat-api/decorator.ts b/packages/fluent-theme/src/external.umd/botframework-webchat-api/decorator.js.ts similarity index 100% rename from packages/fluent-theme/src/external.umd/botframework-webchat-api/decorator.ts rename to packages/fluent-theme/src/external.umd/botframework-webchat-api/decorator.js.ts diff --git a/packages/fluent-theme/src/external.umd/botframework-webchat-api/hook.ts b/packages/fluent-theme/src/external.umd/botframework-webchat-api/hook.js.ts similarity index 100% rename from packages/fluent-theme/src/external.umd/botframework-webchat-api/hook.ts rename to packages/fluent-theme/src/external.umd/botframework-webchat-api/hook.js.ts diff --git a/packages/fluent-theme/src/external.umd/botframework-webchat-api/internal.ts b/packages/fluent-theme/src/external.umd/botframework-webchat-api/internal.js.ts similarity index 100% rename from packages/fluent-theme/src/external.umd/botframework-webchat-api/internal.ts rename to packages/fluent-theme/src/external.umd/botframework-webchat-api/internal.js.ts diff --git a/packages/fluent-theme/src/external.umd/botframework-webchat-api/middleware.ts b/packages/fluent-theme/src/external.umd/botframework-webchat-api/middleware.js.ts similarity index 100% rename from packages/fluent-theme/src/external.umd/botframework-webchat-api/middleware.ts rename to packages/fluent-theme/src/external.umd/botframework-webchat-api/middleware.js.ts diff --git a/packages/fluent-theme/src/external.umd/botframework-webchat-component/component.ts b/packages/fluent-theme/src/external.umd/botframework-webchat-component/component.js.ts similarity index 100% rename from packages/fluent-theme/src/external.umd/botframework-webchat-component/component.ts rename to packages/fluent-theme/src/external.umd/botframework-webchat-component/component.js.ts diff --git a/packages/fluent-theme/src/external.umd/botframework-webchat-component/decorator.ts b/packages/fluent-theme/src/external.umd/botframework-webchat-component/decorator.js.ts similarity index 100% rename from packages/fluent-theme/src/external.umd/botframework-webchat-component/decorator.ts rename to packages/fluent-theme/src/external.umd/botframework-webchat-component/decorator.js.ts diff --git a/packages/fluent-theme/src/external.umd/botframework-webchat-component/hook.ts b/packages/fluent-theme/src/external.umd/botframework-webchat-component/hook.js.ts similarity index 100% rename from packages/fluent-theme/src/external.umd/botframework-webchat-component/hook.ts rename to packages/fluent-theme/src/external.umd/botframework-webchat-component/hook.js.ts diff --git a/packages/fluent-theme/src/external.umd/botframework-webchat-component/internal.ts b/packages/fluent-theme/src/external.umd/botframework-webchat-component/internal.js.ts similarity index 100% rename from packages/fluent-theme/src/external.umd/botframework-webchat-component/internal.ts rename to packages/fluent-theme/src/external.umd/botframework-webchat-component/internal.js.ts diff --git a/packages/fluent-theme/src/private/FluentThemeProvider.tsx b/packages/fluent-theme/src/private/FluentThemeProvider.tsx index 1166fcdea1..2e30b70ab9 100644 --- a/packages/fluent-theme/src/private/FluentThemeProvider.tsx +++ b/packages/fluent-theme/src/private/FluentThemeProvider.tsx @@ -1,19 +1,19 @@ /* eslint-disable prefer-arrow-callback */ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; -import { ThemeProvider } from 'botframework-webchat/component'; +import { ThemeProvider } from 'botframework-webchat/component.js'; import { createActivityBorderMiddleware, createActivityGroupingMiddleware, DecoratorComposer, WebChatDecorator, type DecoratorMiddleware -} from 'botframework-webchat/decorator'; +} from 'botframework-webchat/decorator.js'; import { isVoiceTranscriptActivity, type ActivityMiddleware, type ActivityStatusMiddleware, type TypingIndicatorMiddleware -} from 'botframework-webchat/internal'; +} from 'botframework-webchat/internal.js'; import React, { memo, useMemo } from 'react'; import { custom, object, optional, pipe, readonly, string, type InferInput } from 'valibot'; diff --git a/packages/fluent-theme/src/stylesheet/FluentThemeStylesheet.tsx b/packages/fluent-theme/src/stylesheet/FluentThemeStylesheet.tsx index 16ac838eed..a0de45a524 100644 --- a/packages/fluent-theme/src/stylesheet/FluentThemeStylesheet.tsx +++ b/packages/fluent-theme/src/stylesheet/FluentThemeStylesheet.tsx @@ -1,7 +1,7 @@ // TODO: [P2] This component can be replaced by `bindProps`. import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; -import { useStyleOptions } from 'botframework-webchat/hook'; -import { InjectStyleElements } from 'botframework-webchat/internal'; +import { useStyleOptions } from 'botframework-webchat/hook.js'; +import { InjectStyleElements } from 'botframework-webchat/internal.js'; import React, { memo, type FunctionComponent } from 'react'; import { never, object, optional, pipe, readonly, string, undefinedable, type InferInput } from 'valibot'; diff --git a/packages/redux-store/src/suggestedActions/SuggestedActionsComposer.tsx b/packages/redux-store/src/suggestedActions/SuggestedActionsComposer.tsx index 205c82b0c0..515634b93b 100644 --- a/packages/redux-store/src/suggestedActions/SuggestedActionsComposer.tsx +++ b/packages/redux-store/src/suggestedActions/SuggestedActionsComposer.tsx @@ -5,7 +5,7 @@ import { WebChatActivity, type DirectLineCardAction } from 'botframework-webchat-core'; -import { setRawState } from 'botframework-webchat-core/internal'; +import { setRawState } from 'botframework-webchat-core/internal.js'; import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import React, { memo, useCallback, useEffect, useMemo, useState } from 'react'; import { type Action } from 'redux'; From 1073aa928041438f7c54edb2a1393080b6d75555 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 23:12:01 +0000 Subject: [PATCH 051/108] Clean up --- .../src/types/external/OrgSchema/private/orgSchemaProperties.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts index e07cebf537..f6169ee19c 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts +++ b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts @@ -2,7 +2,6 @@ import { any, array, fallback, - is, optional, pipe, safeParse, From 0b3a1b40e2142e8d6bcf3dc17cea4ca5c436baca Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 23:17:09 +0000 Subject: [PATCH 052/108] Fix tests --- .../sort/private/getPartGroupingMetadataMap.spec.ts | 6 +++--- packages/core/src/utils/getOrgSchemaMessage.spec.ts | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.spec.ts b/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.spec.ts index d8202cc344..55a43505ad 100644 --- a/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.spec.ts +++ b/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.spec.ts @@ -1,5 +1,6 @@ /* eslint-disable no-restricted-globals */ +import { expect } from '@jest/globals'; import { scenario } from '@testduet/given-when-then'; import type { WebChatActivity } from '../../../../types/WebChatActivity'; import type { LocalId } from '../property/LocalId'; @@ -83,9 +84,8 @@ scenario('getPartGroupingMetadataMap with multiple part grouping', bdd => { .then('should return part grouping metadata', (_, actual) => { expect(actual).toEqual( new Map([ - ['Conversation', { groupingId: '_:conv:00001', position: 1 }] - // TODO: [P0] Currently, it only return the first part grouping. - // ['HowTo', { groupingId: '_:how-to:00001', position: 1 }] + ['Conversation', { groupingId: '_:conv:00001', position: 1 }], + ['HowTo', { groupingId: '_:how-to:00001', position: 1 }] ]) satisfies ReturnType ); }); diff --git a/packages/core/src/utils/getOrgSchemaMessage.spec.ts b/packages/core/src/utils/getOrgSchemaMessage.spec.ts index b60f1202e8..18bebbfeb2 100644 --- a/packages/core/src/utils/getOrgSchemaMessage.spec.ts +++ b/packages/core/src/utils/getOrgSchemaMessage.spec.ts @@ -1,4 +1,6 @@ import { expect, test } from '@jest/globals'; +import { parse } from 'valibot'; +import { creativeWorkSchema } from '../types/external/OrgSchema/CreativeWork'; import getOrgSchemaMessage from './getOrgSchemaMessage'; test('should get message', () => { @@ -9,7 +11,7 @@ test('should get message', () => { type: 'https://schema.org/Message' }; - expect(getOrgSchemaMessage([expected])).toEqual(expected); + expect(getOrgSchemaMessage([expected])).toEqual(parse(creativeWorkSchema, expected)); }); test('should not get message without @id of empty string', () => { From df16efcd1ba5d8ac912cd5d3b0ee22369fda8894 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 24 Apr 2026 23:31:20 +0000 Subject: [PATCH 053/108] Suffix import path with .js --- CHANGELOG.md | 2 +- __tests__/assets/esm/createRenderHook.js | 2 +- __tests__/html2/boot/deprecation/components.html | 2 +- __tests__/html2/boot/deprecation/components.new.html | 2 +- __tests__/html2/boot/deprecation/hooks.html | 2 +- __tests__/html2/boot/deprecation/hooks.new.html | 2 +- __tests__/html2/hooks/useActivities.getter.html | 2 +- __tests__/html2/hooks/useActivities.setter.html | 2 +- .../html2/hooks/useAdaptiveCardsHostConfig.getter.default.html | 2 +- __tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html | 2 +- __tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html | 2 +- .../html2/hooks/useAdaptiveCardsPackage.getter.default.html | 2 +- __tests__/html2/hooks/useAdaptiveCardsPackage.getter.html | 2 +- __tests__/html2/hooks/useAdaptiveCardsPackage.setter.html | 2 +- __tests__/html2/hooks/useAvatarForBot.getter.html | 2 +- __tests__/html2/hooks/useAvatarForBot.setter.html | 2 +- __tests__/html2/hooks/useAvatarForUser.getter.html | 2 +- __tests__/html2/hooks/useAvatarForUser.setter.html | 2 +- __tests__/html2/hooks/useByteFormatter.html | 2 +- __tests__/html2/hooks/useCapabilities.html | 2 +- __tests__/html2/hooks/useConnectivityStatus.getter.html | 2 +- __tests__/html2/hooks/useConnectivityStatus.setter.html | 2 +- __tests__/html2/hooks/useDateFormatter.en.html | 2 +- __tests__/html2/hooks/useDateFormatter.yue.html | 2 +- __tests__/html2/hooks/useDictateInterims.getter.html | 2 +- __tests__/html2/hooks/useDictateInterims.setter.html | 2 +- __tests__/html2/hooks/useDisabled.getter.default.html | 2 +- __tests__/html2/hooks/useDisabled.getter.html | 2 +- __tests__/html2/hooks/useDisabled.setter.html | 2 +- __tests__/html2/hooks/useDismissNotification.html | 2 +- __tests__/html2/hooks/useFocus.sendBox.pure.html | 2 +- __tests__/html2/hooks/useGrammars.getter.default.html | 2 +- __tests__/html2/hooks/useGrammars.getter.html | 2 +- __tests__/html2/hooks/useGrammars.setter.html | 2 +- __tests__/html2/hooks/useGroupTimestamp.getter.default.html | 2 +- __tests__/html2/hooks/useGroupTimestamp.getter.false.html | 2 +- __tests__/html2/hooks/useGroupTimestamp.getter.html | 2 +- __tests__/html2/hooks/useGroupTimestamp.setter.html | 2 +- __tests__/html2/hooks/useLanguage.getter.default.html | 2 +- __tests__/html2/hooks/useLanguage.getter.speech.html | 2 +- __tests__/html2/hooks/useLanguage.getter.xx-YY.html | 2 +- __tests__/html2/hooks/useLanguage.getter.yue.html | 2 +- __tests__/html2/hooks/useLanguage.getter.zh-YUE.html | 2 +- __tests__/html2/hooks/useLanguage.setter.html | 2 +- __tests__/html2/hooks/useLocalizer.default.html | 2 +- __tests__/html2/hooks/useLocalizer.nonExistent.html | 2 +- __tests__/html2/hooks/useLocalizer.overrideStrings.html | 2 +- .../html2/hooks/useLocalizer.plural.firstArgumentIsString.html | 2 +- __tests__/html2/hooks/useLocalizer.plural.one.html | 2 +- __tests__/html2/hooks/useLocalizer.plural.otherFallback.html | 2 +- __tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html | 2 +- .../html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html | 2 +- .../hooks/useLocalizer.plural.throw.idOtherNotUndefined.html | 2 +- __tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html | 2 +- __tests__/html2/hooks/useLocalizer.plural.two.html | 2 +- __tests__/html2/hooks/useLocalizer.throwOnInvalidId.html | 2 +- __tests__/html2/hooks/useLocalizer.yue.html | 2 +- __tests__/html2/hooks/useLocalizer.yue.plural.html | 2 +- __tests__/html2/hooks/useMarkActivityAsSpoken.html | 2 +- __tests__/html2/hooks/useMicrophoneButtonClick.html | 2 +- __tests__/html2/hooks/usePerformCardAction.html | 2 +- __tests__/html2/hooks/usePostActivity.html | 2 +- __tests__/html2/hooks/useRelativeTimeFormatter.html | 2 +- __tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html | 2 +- __tests__/html2/hooks/useRenderMarkdownAsHTML.default.html | 2 +- __tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html | 2 +- .../html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html | 2 +- __tests__/html2/hooks/useRenderMarkdownAsHTML.null.html | 2 +- .../useSendBoxSpeechInterimsVisible.getter.recognition.html | 2 +- .../hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html | 2 +- .../html2/hooks/useSendBoxSpeechInterimsVisible.setter.html | 2 +- __tests__/html2/hooks/useSendBoxValue.getter.html | 2 +- __tests__/html2/hooks/useSendBoxValue.setter.html | 2 +- __tests__/html2/hooks/useSendFiles.html | 2 +- __tests__/html2/hooks/useSendMessage.html | 2 +- __tests__/html2/hooks/useSendMessageBack.html | 2 +- __tests__/html2/hooks/useSendPostBack.html | 2 +- __tests__/html2/hooks/useSetNotification.html | 2 +- __tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html | 2 +- __tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html | 2 +- __tests__/html2/hooks/useStartDictate.html | 2 +- __tests__/html2/hooks/useStopDictate.html | 2 +- __tests__/html2/hooks/useStyleOptions.getter.html | 2 +- __tests__/html2/hooks/useStyleOptions.setter.html | 2 +- __tests__/html2/hooks/useStyleSet.getter.html | 2 +- __tests__/html2/hooks/useStyleSet.setter.html | 2 +- __tests__/html2/hooks/useSubmitSendBox.html | 2 +- __tests__/html2/hooks/useSuggestedActions.html | 2 +- __tests__/html2/hooks/useTextBoxValue.html | 2 +- __tests__/html2/hooks/useTimeoutForSend.default.html | 2 +- __tests__/html2/hooks/useTimeoutForSend.getter.html | 2 +- __tests__/html2/hooks/useTimeoutForSend.setter.html | 2 +- __tests__/html2/hooks/useTrackDimension.html | 2 +- .../html2/hooks/useTrackDimension.invalidDimensionName.html | 2 +- .../html2/hooks/useTrackDimension.invalidDimensionValue.html | 2 +- __tests__/html2/hooks/useTrackEvent.debug.html | 2 +- __tests__/html2/hooks/useTrackEvent.error.complex.html | 2 +- __tests__/html2/hooks/useTrackEvent.html | 2 +- __tests__/html2/hooks/useTrackEvent.info.html | 2 +- __tests__/html2/hooks/useTrackEvent.invalid.booleanData.html | 2 +- 100 files changed, 100 insertions(+), 100 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cdf19a7750..228823bea1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -145,7 +145,7 @@ Breaking changes in this release: - Added support for `botframework-webchat-fluent-theme` package, by [@compulim](https://github.com/compulim) in PR [#5593](https://github.com/microsoft/BotFramework-WebChat/pull/5593) - Bundling vendor chunks, by [@compulim](https://github.com/compulim) in PR [#5595](https://github.com/microsoft/BotFramework-WebChat/pull/5595) - Added deprecation notes for legacy imports, by [@compulim](https://github.com/compulim) in PR [#5600](https://github.com/microsoft/BotFramework-WebChat/pull/5600) - - `import { hooks } from 'botframework-webchat'` should be replaced by `import * as hooks from 'botframework-webchat/hook'` + - `import { hooks } from 'botframework-webchat'` should be replaced by `import * as hooks from 'botframework-webchat/hook.js'` - Added target to Chrome 100 and re-enable Lightning CSS for ESM builds, by [@compulim](https://github.com/compulim) in PR [#5602](https://github.com/microsoft/BotFramework-WebChat/pull/5602) - Relaxed `role` prop to allow any string instead of ARIA landmark roles, in PR [#5561](https://github.com/microsoft/BotFramework-WebChat/pull/5561), by [@compulim](https://github.com/compulim) - Cleaned up `` and various CSS related code, in PR [#5611](https://github.com/microsoft/BotFramework-WebChat/pull/5611), by [@compulim](https://github.com/compulim) diff --git a/__tests__/assets/esm/createRenderHook.js b/__tests__/assets/esm/createRenderHook.js index 98944bba1a..7428b9976d 100644 --- a/__tests__/assets/esm/createRenderHook.js +++ b/__tests__/assets/esm/createRenderHook.js @@ -1,4 +1,4 @@ -import { BasicWebChat, Composer } from 'botframework-webchat/component'; +import { BasicWebChat, Composer } from 'botframework-webchat/component.js'; import { createElement } from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/__tests__/html2/boot/deprecation/components.html b/__tests__/html2/boot/deprecation/components.html index f81c39b750..961ac8cd84 100644 --- a/__tests__/html2/boot/deprecation/components.html +++ b/__tests__/html2/boot/deprecation/components.html @@ -36,7 +36,7 @@ // THEN: Should show deprecation note. expect(console.warn).toHaveBeenCalledTimes(1); expect(console.warn).toHaveBeenLastCalledWith( - "botframework-webchat: `import { Components } from 'botframework-webchat'` has been deprecated, use `import { %s } from 'botframework-webchat/component'` instead.", + "botframework-webchat: `import { Components } from 'botframework-webchat'` has been deprecated, use `import { %s } from 'botframework-webchat/component.js'` instead.", 'BasicWebChat' ); diff --git a/__tests__/html2/boot/deprecation/components.new.html b/__tests__/html2/boot/deprecation/components.new.html index 4d2183bbe6..9cb6e0edcd 100644 --- a/__tests__/html2/boot/deprecation/components.new.html +++ b/__tests__/html2/boot/deprecation/components.new.html @@ -26,7 +26,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, renderWebChat } from 'botframework-webchat'; - import * as Components from 'botframework-webchat/component'; + import * as Components from 'botframework-webchat/component.js'; import { version } from 'react'; run(async function () { diff --git a/__tests__/html2/boot/deprecation/hooks.html b/__tests__/html2/boot/deprecation/hooks.html index f2e0c3ef8b..860dd53131 100644 --- a/__tests__/html2/boot/deprecation/hooks.html +++ b/__tests__/html2/boot/deprecation/hooks.html @@ -36,7 +36,7 @@ // THEN: Should show deprecation note. expect(console.warn).toHaveBeenCalledTimes(1); expect(console.warn).toHaveBeenLastCalledWith( - "botframework-webchat: `import { hooks } from 'botframework-webchat'` has been deprecated, use `import { %s } from 'botframework-webchat/hook'` instead.", + "botframework-webchat: `import { hooks } from 'botframework-webchat'` has been deprecated, use `import { %s } from 'botframework-webchat/hook.js'` instead.", 'useStyleOptions' ); diff --git a/__tests__/html2/boot/deprecation/hooks.new.html b/__tests__/html2/boot/deprecation/hooks.new.html index 078cff777d..f8130e1e2f 100644 --- a/__tests__/html2/boot/deprecation/hooks.new.html +++ b/__tests__/html2/boot/deprecation/hooks.new.html @@ -26,7 +26,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, renderWebChat } from 'botframework-webchat'; - import * as hooks from 'botframework-webchat/hook'; + import * as hooks from 'botframework-webchat/hook.js'; import { version } from 'react'; run(async function () { diff --git a/__tests__/html2/hooks/useActivities.getter.html b/__tests__/html2/hooks/useActivities.getter.html index 39cce35285..de2d7c76eb 100644 --- a/__tests__/html2/hooks/useActivities.getter.html +++ b/__tests__/html2/hooks/useActivities.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useActivities } from 'botframework-webchat/hook'; + import { useActivities } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useActivities.setter.html b/__tests__/html2/hooks/useActivities.setter.html index 6520ff35e2..8f3c4dddc0 100644 --- a/__tests__/html2/hooks/useActivities.setter.html +++ b/__tests__/html2/hooks/useActivities.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useActivities } from 'botframework-webchat/hook'; + import { useActivities } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.default.html b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.default.html index 740d7f44f9..c6744ef5bf 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.default.html +++ b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAdaptiveCardsHostConfig } from 'botframework-webchat/hook'; + import { useAdaptiveCardsHostConfig } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html index 58003d92fa..7079a8b828 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html +++ b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAdaptiveCardsHostConfig } from 'botframework-webchat/hook'; + import { useAdaptiveCardsHostConfig } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html index 05b25859da..178b015ec0 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html +++ b/__tests__/html2/hooks/useAdaptiveCardsHostConfig.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAdaptiveCardsHostConfig } from 'botframework-webchat/hook'; + import { useAdaptiveCardsHostConfig } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.default.html b/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.default.html index 9108316cd4..2bdf30d677 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.default.html +++ b/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAdaptiveCardsPackage } from 'botframework-webchat/hook'; + import { useAdaptiveCardsPackage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.html b/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.html index 9379780600..57835d0d28 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.html +++ b/__tests__/html2/hooks/useAdaptiveCardsPackage.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAdaptiveCardsPackage } from 'botframework-webchat/hook'; + import { useAdaptiveCardsPackage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAdaptiveCardsPackage.setter.html b/__tests__/html2/hooks/useAdaptiveCardsPackage.setter.html index 71d405f9f2..dc0cc595a8 100644 --- a/__tests__/html2/hooks/useAdaptiveCardsPackage.setter.html +++ b/__tests__/html2/hooks/useAdaptiveCardsPackage.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAdaptiveCardsPackage } from 'botframework-webchat/hook'; + import { useAdaptiveCardsPackage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAvatarForBot.getter.html b/__tests__/html2/hooks/useAvatarForBot.getter.html index 5590d58005..f904590dbb 100644 --- a/__tests__/html2/hooks/useAvatarForBot.getter.html +++ b/__tests__/html2/hooks/useAvatarForBot.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAvatarForBot } from 'botframework-webchat/hook'; + import { useAvatarForBot } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAvatarForBot.setter.html b/__tests__/html2/hooks/useAvatarForBot.setter.html index c71c7dd623..774cd4031a 100644 --- a/__tests__/html2/hooks/useAvatarForBot.setter.html +++ b/__tests__/html2/hooks/useAvatarForBot.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAvatarForBot } from 'botframework-webchat/hook'; + import { useAvatarForBot } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAvatarForUser.getter.html b/__tests__/html2/hooks/useAvatarForUser.getter.html index c7bea2d55c..4712fbbe86 100644 --- a/__tests__/html2/hooks/useAvatarForUser.getter.html +++ b/__tests__/html2/hooks/useAvatarForUser.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAvatarForUser } from 'botframework-webchat/hook'; + import { useAvatarForUser } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useAvatarForUser.setter.html b/__tests__/html2/hooks/useAvatarForUser.setter.html index b4749efc0c..06a0196ba9 100644 --- a/__tests__/html2/hooks/useAvatarForUser.setter.html +++ b/__tests__/html2/hooks/useAvatarForUser.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useAvatarForUser } from 'botframework-webchat/hook'; + import { useAvatarForUser } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useByteFormatter.html b/__tests__/html2/hooks/useByteFormatter.html index 6d322f002b..b8006c5c24 100644 --- a/__tests__/html2/hooks/useByteFormatter.html +++ b/__tests__/html2/hooks/useByteFormatter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useByteFormatter } from 'botframework-webchat/hook'; + import { useByteFormatter } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useCapabilities.html b/__tests__/html2/hooks/useCapabilities.html index 7cf43cfb89..3371572b28 100644 --- a/__tests__/html2/hooks/useCapabilities.html +++ b/__tests__/html2/hooks/useCapabilities.html @@ -23,7 +23,7 @@ import { waitFor } from '@testduet/wait-for'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useCapabilities } from 'botframework-webchat/hook'; + import { useCapabilities } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useConnectivityStatus.getter.html b/__tests__/html2/hooks/useConnectivityStatus.getter.html index 89eb2a003d..be3172c153 100644 --- a/__tests__/html2/hooks/useConnectivityStatus.getter.html +++ b/__tests__/html2/hooks/useConnectivityStatus.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useConnectivityStatus } from 'botframework-webchat/hook'; + import { useConnectivityStatus } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useConnectivityStatus.setter.html b/__tests__/html2/hooks/useConnectivityStatus.setter.html index abb931a0c7..d55e0c5620 100644 --- a/__tests__/html2/hooks/useConnectivityStatus.setter.html +++ b/__tests__/html2/hooks/useConnectivityStatus.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useConnectivityStatus } from 'botframework-webchat/hook'; + import { useConnectivityStatus } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useDateFormatter.en.html b/__tests__/html2/hooks/useDateFormatter.en.html index 5616f76d71..8b6daeecfd 100644 --- a/__tests__/html2/hooks/useDateFormatter.en.html +++ b/__tests__/html2/hooks/useDateFormatter.en.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useDateFormatter } from 'botframework-webchat/hook'; + import { useDateFormatter } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useDateFormatter.yue.html b/__tests__/html2/hooks/useDateFormatter.yue.html index 0bcf3d40fe..b250466756 100644 --- a/__tests__/html2/hooks/useDateFormatter.yue.html +++ b/__tests__/html2/hooks/useDateFormatter.yue.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useDateFormatter } from 'botframework-webchat/hook'; + import { useDateFormatter } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useDictateInterims.getter.html b/__tests__/html2/hooks/useDictateInterims.getter.html index 2b554fe8e2..7f358cdb1a 100644 --- a/__tests__/html2/hooks/useDictateInterims.getter.html +++ b/__tests__/html2/hooks/useDictateInterims.getter.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useDictateInterims } from 'botframework-webchat/hook'; + import { useDictateInterims } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useDictateInterims.setter.html b/__tests__/html2/hooks/useDictateInterims.setter.html index 92c444a1c4..fc4884c2ce 100644 --- a/__tests__/html2/hooks/useDictateInterims.setter.html +++ b/__tests__/html2/hooks/useDictateInterims.setter.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useDictateInterims } from 'botframework-webchat/hook'; + import { useDictateInterims } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useDisabled.getter.default.html b/__tests__/html2/hooks/useDisabled.getter.default.html index e07f0579db..68d9eb8bdc 100644 --- a/__tests__/html2/hooks/useDisabled.getter.default.html +++ b/__tests__/html2/hooks/useDisabled.getter.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useDisabled } from 'botframework-webchat/hook'; + import { useDisabled } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useDisabled.getter.html b/__tests__/html2/hooks/useDisabled.getter.html index 5f664345e1..8bd836d0d2 100644 --- a/__tests__/html2/hooks/useDisabled.getter.html +++ b/__tests__/html2/hooks/useDisabled.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useDisabled } from 'botframework-webchat/hook'; + import { useDisabled } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useDisabled.setter.html b/__tests__/html2/hooks/useDisabled.setter.html index 42d981f715..884596865e 100644 --- a/__tests__/html2/hooks/useDisabled.setter.html +++ b/__tests__/html2/hooks/useDisabled.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useDisabled } from 'botframework-webchat/hook'; + import { useDisabled } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useDismissNotification.html b/__tests__/html2/hooks/useDismissNotification.html index 09ba8cae79..2a2a06d35e 100644 --- a/__tests__/html2/hooks/useDismissNotification.html +++ b/__tests__/html2/hooks/useDismissNotification.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useDismissNotification } from 'botframework-webchat/hook'; + import { useDismissNotification } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useFocus.sendBox.pure.html b/__tests__/html2/hooks/useFocus.sendBox.pure.html index 739080a9ea..91c80a225e 100644 --- a/__tests__/html2/hooks/useFocus.sendBox.pure.html +++ b/__tests__/html2/hooks/useFocus.sendBox.pure.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useFocus } from 'botframework-webchat/hook'; + import { useFocus } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useGrammars.getter.default.html b/__tests__/html2/hooks/useGrammars.getter.default.html index e02779c6fc..003faf1cdb 100644 --- a/__tests__/html2/hooks/useGrammars.getter.default.html +++ b/__tests__/html2/hooks/useGrammars.getter.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useGrammars } from 'botframework-webchat/hook'; + import { useGrammars } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useGrammars.getter.html b/__tests__/html2/hooks/useGrammars.getter.html index 75a91eb8de..82f383ca75 100644 --- a/__tests__/html2/hooks/useGrammars.getter.html +++ b/__tests__/html2/hooks/useGrammars.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useGrammars } from 'botframework-webchat/hook'; + import { useGrammars } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useGrammars.setter.html b/__tests__/html2/hooks/useGrammars.setter.html index 0b90e5febe..1a009da2b6 100644 --- a/__tests__/html2/hooks/useGrammars.setter.html +++ b/__tests__/html2/hooks/useGrammars.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useGrammars } from 'botframework-webchat/hook'; + import { useGrammars } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useGroupTimestamp.getter.default.html b/__tests__/html2/hooks/useGroupTimestamp.getter.default.html index c6dca91ca4..cc24414248 100644 --- a/__tests__/html2/hooks/useGroupTimestamp.getter.default.html +++ b/__tests__/html2/hooks/useGroupTimestamp.getter.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useGroupTimestamp } from 'botframework-webchat/hook'; + import { useGroupTimestamp } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useGroupTimestamp.getter.false.html b/__tests__/html2/hooks/useGroupTimestamp.getter.false.html index 60fb43daba..f6bda6754f 100644 --- a/__tests__/html2/hooks/useGroupTimestamp.getter.false.html +++ b/__tests__/html2/hooks/useGroupTimestamp.getter.false.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useGroupTimestamp } from 'botframework-webchat/hook'; + import { useGroupTimestamp } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useGroupTimestamp.getter.html b/__tests__/html2/hooks/useGroupTimestamp.getter.html index 10919aa87e..c7111349ae 100644 --- a/__tests__/html2/hooks/useGroupTimestamp.getter.html +++ b/__tests__/html2/hooks/useGroupTimestamp.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useGroupTimestamp } from 'botframework-webchat/hook'; + import { useGroupTimestamp } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useGroupTimestamp.setter.html b/__tests__/html2/hooks/useGroupTimestamp.setter.html index d1aa2800f9..5f7ce2db04 100644 --- a/__tests__/html2/hooks/useGroupTimestamp.setter.html +++ b/__tests__/html2/hooks/useGroupTimestamp.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useGroupTimestamp } from 'botframework-webchat/hook'; + import { useGroupTimestamp } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLanguage.getter.default.html b/__tests__/html2/hooks/useLanguage.getter.default.html index ef9b1adb82..ac750e69d5 100644 --- a/__tests__/html2/hooks/useLanguage.getter.default.html +++ b/__tests__/html2/hooks/useLanguage.getter.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLanguage } from 'botframework-webchat/hook'; + import { useLanguage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLanguage.getter.speech.html b/__tests__/html2/hooks/useLanguage.getter.speech.html index 11f3350e80..aab0511385 100644 --- a/__tests__/html2/hooks/useLanguage.getter.speech.html +++ b/__tests__/html2/hooks/useLanguage.getter.speech.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLanguage } from 'botframework-webchat/hook'; + import { useLanguage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLanguage.getter.xx-YY.html b/__tests__/html2/hooks/useLanguage.getter.xx-YY.html index 1438718de6..becf5d6dd1 100644 --- a/__tests__/html2/hooks/useLanguage.getter.xx-YY.html +++ b/__tests__/html2/hooks/useLanguage.getter.xx-YY.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLanguage } from 'botframework-webchat/hook'; + import { useLanguage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLanguage.getter.yue.html b/__tests__/html2/hooks/useLanguage.getter.yue.html index faa9d38d51..6d7ee844f8 100644 --- a/__tests__/html2/hooks/useLanguage.getter.yue.html +++ b/__tests__/html2/hooks/useLanguage.getter.yue.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLanguage } from 'botframework-webchat/hook'; + import { useLanguage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLanguage.getter.zh-YUE.html b/__tests__/html2/hooks/useLanguage.getter.zh-YUE.html index 47ad62e30a..ff5aef5830 100644 --- a/__tests__/html2/hooks/useLanguage.getter.zh-YUE.html +++ b/__tests__/html2/hooks/useLanguage.getter.zh-YUE.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLanguage } from 'botframework-webchat/hook'; + import { useLanguage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLanguage.setter.html b/__tests__/html2/hooks/useLanguage.setter.html index 7d094ad0b0..689eedca7b 100644 --- a/__tests__/html2/hooks/useLanguage.setter.html +++ b/__tests__/html2/hooks/useLanguage.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLanguage } from 'botframework-webchat/hook'; + import { useLanguage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.default.html b/__tests__/html2/hooks/useLocalizer.default.html index 70bc9111b3..d48e110411 100644 --- a/__tests__/html2/hooks/useLocalizer.default.html +++ b/__tests__/html2/hooks/useLocalizer.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.nonExistent.html b/__tests__/html2/hooks/useLocalizer.nonExistent.html index 350a21d597..a225e394cd 100644 --- a/__tests__/html2/hooks/useLocalizer.nonExistent.html +++ b/__tests__/html2/hooks/useLocalizer.nonExistent.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.overrideStrings.html b/__tests__/html2/hooks/useLocalizer.overrideStrings.html index 38034f2adc..0d8e76d176 100644 --- a/__tests__/html2/hooks/useLocalizer.overrideStrings.html +++ b/__tests__/html2/hooks/useLocalizer.overrideStrings.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.plural.firstArgumentIsString.html b/__tests__/html2/hooks/useLocalizer.plural.firstArgumentIsString.html index 62a9d9049d..c69cacb9fb 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.firstArgumentIsString.html +++ b/__tests__/html2/hooks/useLocalizer.plural.firstArgumentIsString.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.plural.one.html b/__tests__/html2/hooks/useLocalizer.plural.one.html index c147d524d5..895d862c4e 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.one.html +++ b/__tests__/html2/hooks/useLocalizer.plural.one.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.plural.otherFallback.html b/__tests__/html2/hooks/useLocalizer.plural.otherFallback.html index 7db5465d9d..d25b7f353f 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.otherFallback.html +++ b/__tests__/html2/hooks/useLocalizer.plural.otherFallback.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html b/__tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html index c8d4ef816e..176365ffa3 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html +++ b/__tests__/html2/hooks/useLocalizer.plural.throw.idOfString.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html b/__tests__/html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html index 32d7fb4e9e..8a84dd07d5 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html +++ b/__tests__/html2/hooks/useLocalizer.plural.throw.idOneOfNumber.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.plural.throw.idOtherNotUndefined.html b/__tests__/html2/hooks/useLocalizer.plural.throw.idOtherNotUndefined.html index dd7ef8b6af..d16fa3163f 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.throw.idOtherNotUndefined.html +++ b/__tests__/html2/hooks/useLocalizer.plural.throw.idOtherNotUndefined.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html b/__tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html index 477c41b0fd..c20764ba19 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html +++ b/__tests__/html2/hooks/useLocalizer.plural.throw.idUnknown.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.plural.two.html b/__tests__/html2/hooks/useLocalizer.plural.two.html index ee53fdf2f5..26d6e59020 100644 --- a/__tests__/html2/hooks/useLocalizer.plural.two.html +++ b/__tests__/html2/hooks/useLocalizer.plural.two.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.throwOnInvalidId.html b/__tests__/html2/hooks/useLocalizer.throwOnInvalidId.html index a6b11d1332..ea4fedfc9b 100644 --- a/__tests__/html2/hooks/useLocalizer.throwOnInvalidId.html +++ b/__tests__/html2/hooks/useLocalizer.throwOnInvalidId.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.yue.html b/__tests__/html2/hooks/useLocalizer.yue.html index ac2b2e2113..81afeeb83c 100644 --- a/__tests__/html2/hooks/useLocalizer.yue.html +++ b/__tests__/html2/hooks/useLocalizer.yue.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useLocalizer.yue.plural.html b/__tests__/html2/hooks/useLocalizer.yue.plural.html index 03687d08b3..8908d2da73 100644 --- a/__tests__/html2/hooks/useLocalizer.yue.plural.html +++ b/__tests__/html2/hooks/useLocalizer.yue.plural.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLocalizer } from 'botframework-webchat/hook'; + import { useLocalizer } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useMarkActivityAsSpoken.html b/__tests__/html2/hooks/useMarkActivityAsSpoken.html index ee3528f4dd..80532f74b5 100644 --- a/__tests__/html2/hooks/useMarkActivityAsSpoken.html +++ b/__tests__/html2/hooks/useMarkActivityAsSpoken.html @@ -26,7 +26,7 @@ import { waitFor } from '@testduet/wait-for'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useActivities, useMarkActivityAsSpoken } from 'botframework-webchat/hook'; + import { useActivities, useMarkActivityAsSpoken } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actSpeak, diff --git a/__tests__/html2/hooks/useMicrophoneButtonClick.html b/__tests__/html2/hooks/useMicrophoneButtonClick.html index b17c55f021..32172d5d3a 100644 --- a/__tests__/html2/hooks/useMicrophoneButtonClick.html +++ b/__tests__/html2/hooks/useMicrophoneButtonClick.html @@ -26,7 +26,7 @@ import { waitFor } from '@testduet/wait-for'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useMicrophoneButtonClick, useMicrophoneButtonDisabled } from 'botframework-webchat/hook'; + import { useMicrophoneButtonClick, useMicrophoneButtonDisabled } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/usePerformCardAction.html b/__tests__/html2/hooks/usePerformCardAction.html index 12cfb7831b..f8c2023399 100644 --- a/__tests__/html2/hooks/usePerformCardAction.html +++ b/__tests__/html2/hooks/usePerformCardAction.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { usePerformCardAction } from 'botframework-webchat/hook'; + import { usePerformCardAction } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/usePostActivity.html b/__tests__/html2/hooks/usePostActivity.html index 7f81b0c4aa..1f7979ab42 100644 --- a/__tests__/html2/hooks/usePostActivity.html +++ b/__tests__/html2/hooks/usePostActivity.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { usePostActivity } from 'botframework-webchat/hook'; + import { usePostActivity } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useRelativeTimeFormatter.html b/__tests__/html2/hooks/useRelativeTimeFormatter.html index 7bb2b2392d..3e50c79849 100644 --- a/__tests__/html2/hooks/useRelativeTimeFormatter.html +++ b/__tests__/html2/hooks/useRelativeTimeFormatter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useRelativeTimeFormatter } from 'botframework-webchat/hook'; + import { useRelativeTimeFormatter } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html index f989d56e6f..4f89020420 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.custom.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook'; + import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.default.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.default.html index 5cb76815c7..7f791f4810 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.default.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook'; + import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html index f63e9da749..888dc37d42 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook'; + import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html index e19247f3a3..d480cf7e23 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.externalLink.yue.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook'; + import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useRenderMarkdownAsHTML.null.html b/__tests__/html2/hooks/useRenderMarkdownAsHTML.null.html index bca9bb8975..1a28a797ac 100644 --- a/__tests__/html2/hooks/useRenderMarkdownAsHTML.null.html +++ b/__tests__/html2/hooks/useRenderMarkdownAsHTML.null.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook'; + import { useRenderMarkdownAsHTML } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.recognition.html b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.recognition.html index ca02f4b86d..3bd9e7a42c 100644 --- a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.recognition.html +++ b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.recognition.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendBoxSpeechInterimsVisible } from 'botframework-webchat/hook'; + import { useSendBoxSpeechInterimsVisible } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html index 82759d5674..0ffa2efdde 100644 --- a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html +++ b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.getter.synthesis.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendBoxSpeechInterimsVisible } from 'botframework-webchat/hook'; + import { useSendBoxSpeechInterimsVisible } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actSpeak, diff --git a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.setter.html b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.setter.html index 38ee19edea..cfc335b474 100644 --- a/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.setter.html +++ b/__tests__/html2/hooks/useSendBoxSpeechInterimsVisible.setter.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendBoxSpeechInterimsVisible } from 'botframework-webchat/hook'; + import { useSendBoxSpeechInterimsVisible } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useSendBoxValue.getter.html b/__tests__/html2/hooks/useSendBoxValue.getter.html index 41d06f126d..64c97d39d1 100644 --- a/__tests__/html2/hooks/useSendBoxValue.getter.html +++ b/__tests__/html2/hooks/useSendBoxValue.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendBoxValue } from 'botframework-webchat/hook'; + import { useSendBoxValue } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useSendBoxValue.setter.html b/__tests__/html2/hooks/useSendBoxValue.setter.html index fbff5cdf0c..371578b4ba 100644 --- a/__tests__/html2/hooks/useSendBoxValue.setter.html +++ b/__tests__/html2/hooks/useSendBoxValue.setter.html @@ -23,7 +23,7 @@ import { waitFor } from '@testduet/wait-for'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendBoxValue } from 'botframework-webchat/hook'; + import { useSendBoxValue } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useSendFiles.html b/__tests__/html2/hooks/useSendFiles.html index b182f48093..74b21e72ff 100644 --- a/__tests__/html2/hooks/useSendFiles.html +++ b/__tests__/html2/hooks/useSendFiles.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendFiles } from 'botframework-webchat/hook'; + import { useSendFiles } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { diff --git a/__tests__/html2/hooks/useSendMessage.html b/__tests__/html2/hooks/useSendMessage.html index 13b6926eaf..3ae3231701 100644 --- a/__tests__/html2/hooks/useSendMessage.html +++ b/__tests__/html2/hooks/useSendMessage.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendMessage } from 'botframework-webchat/hook'; + import { useSendMessage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { diff --git a/__tests__/html2/hooks/useSendMessageBack.html b/__tests__/html2/hooks/useSendMessageBack.html index 65a952ed57..f7b01931b2 100644 --- a/__tests__/html2/hooks/useSendMessageBack.html +++ b/__tests__/html2/hooks/useSendMessageBack.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendMessageBack } from 'botframework-webchat/hook'; + import { useSendMessageBack } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { diff --git a/__tests__/html2/hooks/useSendPostBack.html b/__tests__/html2/hooks/useSendPostBack.html index be3b1e5226..5a09b4e2c9 100644 --- a/__tests__/html2/hooks/useSendPostBack.html +++ b/__tests__/html2/hooks/useSendPostBack.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSendPostBack } from 'botframework-webchat/hook'; + import { useSendPostBack } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { diff --git a/__tests__/html2/hooks/useSetNotification.html b/__tests__/html2/hooks/useSetNotification.html index cf4eb5aa44..9d283f8ef1 100644 --- a/__tests__/html2/hooks/useSetNotification.html +++ b/__tests__/html2/hooks/useSetNotification.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSetNotification } from 'botframework-webchat/hook'; + import { useSetNotification } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html b/__tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html index 02a99c53ce..7b8d40da02 100644 --- a/__tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html +++ b/__tests__/html2/hooks/useShouldSpeakIncomingActivity.false.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useShouldSpeakIncomingActivity } from 'botframework-webchat/hook'; + import { useShouldSpeakIncomingActivity } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html b/__tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html index a8bbec5429..c4e94dca1a 100644 --- a/__tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html +++ b/__tests__/html2/hooks/useShouldSpeakIncomingActivity.true.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useShouldSpeakIncomingActivity } from 'botframework-webchat/hook'; + import { useShouldSpeakIncomingActivity } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { createWebSpeechPonyfill, sendMessageViaMicrophone } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useStartDictate.html b/__tests__/html2/hooks/useStartDictate.html index 23e8c89388..404855a509 100644 --- a/__tests__/html2/hooks/useStartDictate.html +++ b/__tests__/html2/hooks/useStartDictate.html @@ -26,7 +26,7 @@ import { waitFor } from '@testduet/wait-for'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useStartDictate } from 'botframework-webchat/hook'; + import { useStartDictate } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useStopDictate.html b/__tests__/html2/hooks/useStopDictate.html index 9625772ac6..ee8ac16151 100644 --- a/__tests__/html2/hooks/useStopDictate.html +++ b/__tests__/html2/hooks/useStopDictate.html @@ -26,7 +26,7 @@ import { waitFor } from '@testduet/wait-for'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useStopDictate } from 'botframework-webchat/hook'; + import { useStopDictate } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useStyleOptions.getter.html b/__tests__/html2/hooks/useStyleOptions.getter.html index ef4bf21a5d..c131d98738 100644 --- a/__tests__/html2/hooks/useStyleOptions.getter.html +++ b/__tests__/html2/hooks/useStyleOptions.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useStyleOptions } from 'botframework-webchat/hook'; + import { useStyleOptions } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useStyleOptions.setter.html b/__tests__/html2/hooks/useStyleOptions.setter.html index bb0db7d4bd..7d1ff78d61 100644 --- a/__tests__/html2/hooks/useStyleOptions.setter.html +++ b/__tests__/html2/hooks/useStyleOptions.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useStyleOptions } from 'botframework-webchat/hook'; + import { useStyleOptions } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useStyleSet.getter.html b/__tests__/html2/hooks/useStyleSet.getter.html index 72d0c50411..c45ea2ee44 100644 --- a/__tests__/html2/hooks/useStyleSet.getter.html +++ b/__tests__/html2/hooks/useStyleSet.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useStyleSet } from 'botframework-webchat/hook'; + import { useStyleSet } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useStyleSet.setter.html b/__tests__/html2/hooks/useStyleSet.setter.html index 8ff8f45b45..03a13405a6 100644 --- a/__tests__/html2/hooks/useStyleSet.setter.html +++ b/__tests__/html2/hooks/useStyleSet.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useStyleSet } from 'botframework-webchat/hook'; + import { useStyleSet } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useSubmitSendBox.html b/__tests__/html2/hooks/useSubmitSendBox.html index 7f1b72996b..a2661c5fdc 100644 --- a/__tests__/html2/hooks/useSubmitSendBox.html +++ b/__tests__/html2/hooks/useSubmitSendBox.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSubmitSendBox } from 'botframework-webchat/hook'; + import { useSubmitSendBox } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { diff --git a/__tests__/html2/hooks/useSuggestedActions.html b/__tests__/html2/hooks/useSuggestedActions.html index c5a4acd217..e46bba6ed6 100644 --- a/__tests__/html2/hooks/useSuggestedActions.html +++ b/__tests__/html2/hooks/useSuggestedActions.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useSuggestedActions } from 'botframework-webchat/hook'; + import { useSuggestedActions } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { diff --git a/__tests__/html2/hooks/useTextBoxValue.html b/__tests__/html2/hooks/useTextBoxValue.html index 5cd6c83154..1588c53179 100644 --- a/__tests__/html2/hooks/useTextBoxValue.html +++ b/__tests__/html2/hooks/useTextBoxValue.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTextBoxValue } from 'botframework-webchat/hook'; + import { useTextBoxValue } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useTimeoutForSend.default.html b/__tests__/html2/hooks/useTimeoutForSend.default.html index 800ce74181..5d8a5b828a 100644 --- a/__tests__/html2/hooks/useTimeoutForSend.default.html +++ b/__tests__/html2/hooks/useTimeoutForSend.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTimeoutForSend } from 'botframework-webchat/hook'; + import { useTimeoutForSend } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useTimeoutForSend.getter.html b/__tests__/html2/hooks/useTimeoutForSend.getter.html index 8aa2ea7e47..b096317aa9 100644 --- a/__tests__/html2/hooks/useTimeoutForSend.getter.html +++ b/__tests__/html2/hooks/useTimeoutForSend.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTimeoutForSend } from 'botframework-webchat/hook'; + import { useTimeoutForSend } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useTimeoutForSend.setter.html b/__tests__/html2/hooks/useTimeoutForSend.setter.html index 492b073d6d..dcd399f33c 100644 --- a/__tests__/html2/hooks/useTimeoutForSend.setter.html +++ b/__tests__/html2/hooks/useTimeoutForSend.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTimeoutForSend } from 'botframework-webchat/hook'; + import { useTimeoutForSend } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useTrackDimension.html b/__tests__/html2/hooks/useTrackDimension.html index ad43c89e9f..8ca0328884 100644 --- a/__tests__/html2/hooks/useTrackDimension.html +++ b/__tests__/html2/hooks/useTrackDimension.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackDimension.invalidDimensionName.html b/__tests__/html2/hooks/useTrackDimension.invalidDimensionName.html index 9c40a45f85..659fb5f0d9 100644 --- a/__tests__/html2/hooks/useTrackDimension.invalidDimensionName.html +++ b/__tests__/html2/hooks/useTrackDimension.invalidDimensionName.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackDimension.invalidDimensionValue.html b/__tests__/html2/hooks/useTrackDimension.invalidDimensionValue.html index 545deff478..7c3b9980d7 100644 --- a/__tests__/html2/hooks/useTrackDimension.invalidDimensionValue.html +++ b/__tests__/html2/hooks/useTrackDimension.invalidDimensionValue.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackEvent.debug.html b/__tests__/html2/hooks/useTrackEvent.debug.html index ccf60129fc..59d78d642f 100644 --- a/__tests__/html2/hooks/useTrackEvent.debug.html +++ b/__tests__/html2/hooks/useTrackEvent.debug.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackEvent.error.complex.html b/__tests__/html2/hooks/useTrackEvent.error.complex.html index 13ff82e28e..f835ee3215 100644 --- a/__tests__/html2/hooks/useTrackEvent.error.complex.html +++ b/__tests__/html2/hooks/useTrackEvent.error.complex.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackEvent.html b/__tests__/html2/hooks/useTrackEvent.html index d7825c3ded..5aa3162630 100644 --- a/__tests__/html2/hooks/useTrackEvent.html +++ b/__tests__/html2/hooks/useTrackEvent.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackEvent.info.html b/__tests__/html2/hooks/useTrackEvent.info.html index 4d9e395919..12595b9ffb 100644 --- a/__tests__/html2/hooks/useTrackEvent.info.html +++ b/__tests__/html2/hooks/useTrackEvent.info.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackEvent.invalid.booleanData.html b/__tests__/html2/hooks/useTrackEvent.invalid.booleanData.html index b8d57a2b14..928192278f 100644 --- a/__tests__/html2/hooks/useTrackEvent.invalid.booleanData.html +++ b/__tests__/html2/hooks/useTrackEvent.invalid.booleanData.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; From e3593f823914bec1681a87deece424a5af1d3da9 Mon Sep 17 00:00:00 2001 From: William Wong Date: Sat, 25 Apr 2026 02:28:44 +0000 Subject: [PATCH 054/108] Fix tests --- __tests__/html2/hooks/useUsername.getter.default.html | 2 +- __tests__/html2/hooks/useUsername.getter.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/__tests__/html2/hooks/useUsername.getter.default.html b/__tests__/html2/hooks/useUsername.getter.default.html index d4d5b2cfb3..77182b1116 100644 --- a/__tests__/html2/hooks/useUsername.getter.default.html +++ b/__tests__/html2/hooks/useUsername.getter.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useUsername } from 'botframework-webchat/hook'; + import { useUsername } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useUsername.getter.html b/__tests__/html2/hooks/useUsername.getter.html index 06d8744131..6c3ba952ac 100644 --- a/__tests__/html2/hooks/useUsername.getter.html +++ b/__tests__/html2/hooks/useUsername.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useUsername } from 'botframework-webchat/hook'; + import { useUsername } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; From 9415182737f1879fbc2c5f12ec134bdcaa5c59e2 Mon Sep 17 00:00:00 2001 From: William Wong Date: Sat, 25 Apr 2026 02:32:28 +0000 Subject: [PATCH 055/108] Fix tests --- __tests__/html2/hooks/useInjectStylesElements/withNonce.html | 2 +- __tests__/html2/middleware/avatar/backwardCompatibility.html | 2 +- .../avatar/legacyAvatarMiddleware/addOrReplace.html | 2 +- .../middleware/avatar/legacyAvatarMiddleware/changing.html | 2 +- .../middleware/avatar/legacyAvatarMiddleware/decorate.html | 2 +- .../middleware/avatar/legacyAvatarMiddleware/delete.html | 2 +- .../avatar/legacyAvatarMiddleware/styleOptions.html | 2 +- .../html2/middleware/avatar/polymiddleware/addOrReplace.html | 2 +- .../html2/middleware/avatar/polymiddleware/changing.html | 2 +- .../html2/middleware/avatar/polymiddleware/decorate.html | 2 +- .../avatar/polymiddleware/defaultAvatar.styleOptions.html | 2 +- __tests__/html2/middleware/avatar/polymiddleware/delete.html | 2 +- __tests__/html2/middleware/avatar/renderProxy.html | 4 ++-- .../html2/middleware/avatar/useBuildRenderAvatarCallback.html | 4 ++-- __tests__/html2/samples/boot/exports.tsx | 2 +- __tests__/html2/samples/middleware/channelMessage.tsx | 2 +- __tests__/html2/samples/middleware/decorateMessage.tsx | 2 +- .../esm.run/supportPolymiddleware.reactDOMRender.html | 4 ++-- .../supportPolymiddleware.reactDOMRender.withCreateRoot.html | 4 ++-- .../esm.run/supportPolymiddleware.renderWebChat.html | 4 ++-- .../esm.sh/supportPolymiddleware.reactDOMRender.html | 2 +- .../supportPolymiddleware.reactDOMRender.withCreateRoot.html | 2 +- .../fatModule/esm.sh/supportPolymiddleware.renderWebChat.html | 2 +- .../supportPolymiddleware.reactDOMRender.withCreateRoot.html | 4 ++-- .../fatModule/supportPolymiddleware.reactDOMRender.html | 4 ++-- .../simple/fatModule/supportPolymiddleware.renderWebChat.html | 4 ++-- __tests__/html2/themeProvider/override.html | 4 ++-- 27 files changed, 36 insertions(+), 36 deletions(-) diff --git a/__tests__/html2/hooks/useInjectStylesElements/withNonce.html b/__tests__/html2/hooks/useInjectStylesElements/withNonce.html index 95d6797a78..8ecdd5bedd 100644 --- a/__tests__/html2/hooks/useInjectStylesElements/withNonce.html +++ b/__tests__/html2/hooks/useInjectStylesElements/withNonce.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, ReactWebChat } from 'botframework-webchat'; - import { InjectStyleElements } from 'botframework-webchat/internal'; + import { InjectStyleElements } from 'botframework-webchat/internal.js'; import { spyOn } from 'jest-mock'; import { createElement } from 'react'; import { flushSync } from 'react-dom'; diff --git a/__tests__/html2/middleware/avatar/backwardCompatibility.html b/__tests__/html2/middleware/avatar/backwardCompatibility.html index dc68db8921..91b4797977 100644 --- a/__tests__/html2/middleware/avatar/backwardCompatibility.html +++ b/__tests__/html2/middleware/avatar/backwardCompatibility.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html index d59fbb4909..c3a8c42695 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/changing.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/changing.html index cd931bb706..6144a2e965 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/changing.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/changing.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html index d59fbb4909..c3a8c42695 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/delete.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/delete.html index b69192cbbc..d1d13426ab 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/delete.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/delete.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html index 8bc9afd476..2330f35238 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/polymiddleware/addOrReplace.html b/__tests__/html2/middleware/avatar/polymiddleware/addOrReplace.html index 1f9619e39e..a0a04cb3c4 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/addOrReplace.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/addOrReplace.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/polymiddleware/changing.html b/__tests__/html2/middleware/avatar/polymiddleware/changing.html index 783390da4e..9899626e59 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/changing.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/changing.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/polymiddleware/decorate.html b/__tests__/html2/middleware/avatar/polymiddleware/decorate.html index 4fe1d7b380..787d5dd4ab 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/decorate.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/decorate.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html b/__tests__/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html index ccc94f8126..b22d95fbd5 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/polymiddleware/delete.html b/__tests__/html2/middleware/avatar/polymiddleware/delete.html index d78f89e630..b4b243e406 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/delete.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/delete.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware'; + import { avatarComponent, createAvatarPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/middleware/avatar/renderProxy.html b/__tests__/html2/middleware/avatar/renderProxy.html index 3a65c0257e..655c6ffd20 100644 --- a/__tests__/html2/middleware/avatar/renderProxy.html +++ b/__tests__/html2/middleware/avatar/renderProxy.html @@ -22,12 +22,12 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { Composer } from 'botframework-webchat/component'; + import { Composer } from 'botframework-webchat/component.js'; import { AvatarPolymiddlewareProxy, avatarComponent, createAvatarPolymiddleware - } from 'botframework-webchat/middleware'; + } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/__tests__/html2/middleware/avatar/useBuildRenderAvatarCallback.html b/__tests__/html2/middleware/avatar/useBuildRenderAvatarCallback.html index 6ea4ce540d..56c41a3a3a 100644 --- a/__tests__/html2/middleware/avatar/useBuildRenderAvatarCallback.html +++ b/__tests__/html2/middleware/avatar/useBuildRenderAvatarCallback.html @@ -22,12 +22,12 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, renderWebChat, testIds } from 'botframework-webchat'; - import { Composer } from 'botframework-webchat/component'; + import { Composer } from 'botframework-webchat/component.js'; import { avatarComponent, createAvatarPolymiddleware, useBuildRenderAvatarCallback - } from 'botframework-webchat/middleware'; + } from 'botframework-webchat/middleware.js'; import { createElement, memo } from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/__tests__/html2/samples/boot/exports.tsx b/__tests__/html2/samples/boot/exports.tsx index 0ff01adb74..554e893368 100644 --- a/__tests__/html2/samples/boot/exports.tsx +++ b/__tests__/html2/samples/boot/exports.tsx @@ -14,7 +14,7 @@ import ReactWebChat, { createBrowserWebSpeechPonyfillFactory, decorator } from 'botframework-webchat'; -import { activityComponent } from 'botframework-webchat/middleware'; +import { activityComponent } from 'botframework-webchat/middleware.js'; run(() => { // THEN: It should have "ReactWebChat". diff --git a/__tests__/html2/samples/middleware/channelMessage.tsx b/__tests__/html2/samples/middleware/channelMessage.tsx index 8fe2754dba..9b78a2e1c2 100644 --- a/__tests__/html2/samples/middleware/channelMessage.tsx +++ b/__tests__/html2/samples/middleware/channelMessage.tsx @@ -12,7 +12,7 @@ import { activityComponent, createActivityPolymiddleware, type ActivityPolymiddlewareProps -} from 'botframework-webchat/middleware'; +} from 'botframework-webchat/middleware.js'; import React, { memo } from 'react'; import { render } from 'react-dom'; // #endregion Sample code diff --git a/__tests__/html2/samples/middleware/decorateMessage.tsx b/__tests__/html2/samples/middleware/decorateMessage.tsx index db7f4ec5c9..c80c61762a 100644 --- a/__tests__/html2/samples/middleware/decorateMessage.tsx +++ b/__tests__/html2/samples/middleware/decorateMessage.tsx @@ -12,7 +12,7 @@ import { createActivityPolymiddleware, type ActivityPolymiddlewareProps, type ActivityPolymiddlewareRenderer -} from 'botframework-webchat/middleware'; +} from 'botframework-webchat/middleware.js'; import React, { Fragment, memo, useMemo } from 'react'; import { render } from 'react-dom'; diff --git a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.html b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.html index ecdbbe9174..ee9d2b61f8 100644 --- a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.html +++ b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.html @@ -21,8 +21,8 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, ReactWebChat } from 'botframework-webchat'; - import { useStyleOptions } from 'botframework-webchat/hook'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { useStyleOptions } from 'botframework-webchat/hook.js'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; import { render } from 'react-dom'; diff --git a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.withCreateRoot.html b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.withCreateRoot.html index 831e7116bd..333d432483 100644 --- a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.withCreateRoot.html +++ b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.reactDOMRender.withCreateRoot.html @@ -21,8 +21,8 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, ReactWebChat } from 'botframework-webchat'; - import { useStyleOptions } from 'botframework-webchat/hook'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { useStyleOptions } from 'botframework-webchat/hook.js'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.renderWebChat.html b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.renderWebChat.html index b2540d09d9..5db8af2ce9 100644 --- a/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.renderWebChat.html +++ b/__tests__/html2/simple/fatModule/esm.run/supportPolymiddleware.renderWebChat.html @@ -21,8 +21,8 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, renderWebChat } from 'botframework-webchat'; - import { useStyleOptions } from 'botframework-webchat/hook'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { useStyleOptions } from 'botframework-webchat/hook.js'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html index 4b92f4ea35..e4b4d13f88 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html +++ b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, ReactWebChat } from 'botframework-webchat'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; import { render } from 'react-dom'; diff --git a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.withCreateRoot.html b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.withCreateRoot.html index 837652e5a9..0babbb5416 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.withCreateRoot.html +++ b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.withCreateRoot.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, ReactWebChat } from 'botframework-webchat'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.renderWebChat.html b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.renderWebChat.html index a71cf8415f..31f0273e96 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.renderWebChat.html +++ b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.renderWebChat.html @@ -20,7 +20,7 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, renderWebChat } from 'botframework-webchat'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { useStyleOptions } = hooks; diff --git a/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html b/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html index be0315d053..15853a8cb1 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html +++ b/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html @@ -24,8 +24,8 @@ import '#test-page-object'; import { createDirectLine, createStoreWithOptions, hooks, ReactWebChat } from 'botframework-webchat'; - import { useStyleOptions } from 'botframework-webchat/hook'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { useStyleOptions } from 'botframework-webchat/hook.js'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; import { createRoot } from 'react-dom/client'; diff --git a/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html b/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html index fa102a4f9f..a5293ab4f0 100644 --- a/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html +++ b/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html @@ -20,8 +20,8 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, ReactWebChat } from 'botframework-webchat'; - import { useStyleOptions } from 'botframework-webchat/hook'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { useStyleOptions } from 'botframework-webchat/hook.js'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; import { render } from 'react-dom'; diff --git a/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html b/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html index 84904c72b4..1d7acf2091 100644 --- a/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html +++ b/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html @@ -20,8 +20,8 @@ import '/test-page-object.mjs'; import { createDirectLine, createStoreWithOptions, hooks, renderWebChat } from 'botframework-webchat'; - import { useStyleOptions } from 'botframework-webchat/hook'; - import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware'; + import { useStyleOptions } from 'botframework-webchat/hook.js'; + import { activityComponent, createActivityPolymiddleware } from 'botframework-webchat/middleware.js'; import { createElement } from 'react'; const { diff --git a/__tests__/html2/themeProvider/override.html b/__tests__/html2/themeProvider/override.html index a7b84ed453..ca18774bb9 100644 --- a/__tests__/html2/themeProvider/override.html +++ b/__tests__/html2/themeProvider/override.html @@ -36,8 +36,8 @@ import { FluentProvider, webLightTheme } from '@fluentui/react-components'; import { createDirectLine, createStoreWithOptions, hooks, ReactWebChat } from 'botframework-webchat'; - import { ThemeProvider } from 'botframework-webchat/component'; - import { InjectStyleElements } from 'botframework-webchat/internal'; + import { ThemeProvider } from 'botframework-webchat/component.js'; + import { InjectStyleElements } from 'botframework-webchat/internal.js'; import { FluentThemeProvider } from 'botframework-webchat-fluent-theme'; import { spyOn } from 'jest-mock'; import { createElement, Fragment } from 'react'; From 998a52c5ba043106a21c84030c3a006f475f3601 Mon Sep 17 00:00:00 2001 From: William Wong Date: Mon, 27 Apr 2026 18:19:59 +0000 Subject: [PATCH 056/108] Fix position logic --- .../activities/sort/private/getPartGroupingMetadataMap.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts b/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts index 7cf6ed0dc5..1d37f7b22d 100644 --- a/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts +++ b/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts @@ -13,12 +13,14 @@ function getPartGroupingMetadataMap(activity: WebChatActivity): ReadonlyMap Date: Mon, 27 Apr 2026 18:56:36 +0000 Subject: [PATCH 057/108] Suffix with .js --- __tests__/html2/hooks/useTrackEvent.invalid.complex.html | 2 +- __tests__/html2/hooks/useTrackEvent.invalid.name.html | 2 +- __tests__/html2/hooks/useTrackEvent.warn.numeric.html | 2 +- __tests__/html2/hooks/useTrackException.html | 2 +- __tests__/html2/hooks/useTrackException.nonFatal.html | 2 +- __tests__/html2/hooks/useUserID.getter.default.html | 2 +- __tests__/html2/hooks/useUserID.getter.html | 2 +- __tests__/html2/hooks/useUserID.setter.html | 2 +- __tests__/html2/hooks/useUsername.setter.html | 2 +- __tests__/html2/hooks/useVoiceSelector.html | 2 +- __tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html | 2 +- __tests__/html2/hooks/useWebSpeechPonyfill.getter.html | 2 +- __tests__/html2/hooks/useWebSpeechPonyfill.setter.html | 2 +- __tests__/html2/simple/fatModule/simple.runHook.html | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/__tests__/html2/hooks/useTrackEvent.invalid.complex.html b/__tests__/html2/hooks/useTrackEvent.invalid.complex.html index 1146ce9e16..16b97a32c3 100644 --- a/__tests__/html2/hooks/useTrackEvent.invalid.complex.html +++ b/__tests__/html2/hooks/useTrackEvent.invalid.complex.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackEvent.invalid.name.html b/__tests__/html2/hooks/useTrackEvent.invalid.name.html index f9426bb517..ac77fb8da9 100644 --- a/__tests__/html2/hooks/useTrackEvent.invalid.name.html +++ b/__tests__/html2/hooks/useTrackEvent.invalid.name.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackEvent.warn.numeric.html b/__tests__/html2/hooks/useTrackEvent.warn.numeric.html index 00c16f54c8..f321ce0f60 100644 --- a/__tests__/html2/hooks/useTrackEvent.warn.numeric.html +++ b/__tests__/html2/hooks/useTrackEvent.warn.numeric.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackEvent } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackException.html b/__tests__/html2/hooks/useTrackException.html index 89081c0af1..12d8a6e527 100644 --- a/__tests__/html2/hooks/useTrackException.html +++ b/__tests__/html2/hooks/useTrackException.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackException } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackException } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useTrackException.nonFatal.html b/__tests__/html2/hooks/useTrackException.nonFatal.html index 87765993b7..0672d16086 100644 --- a/__tests__/html2/hooks/useTrackException.nonFatal.html +++ b/__tests__/html2/hooks/useTrackException.nonFatal.html @@ -22,7 +22,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useTrackDimension, useTrackException } from 'botframework-webchat/hook'; + import { useTrackDimension, useTrackException } from 'botframework-webchat/hook.js'; import { fn } from 'jest-mock'; import createRenderHook from '/assets/esm/createRenderHook.js'; diff --git a/__tests__/html2/hooks/useUserID.getter.default.html b/__tests__/html2/hooks/useUserID.getter.default.html index 5a109320a0..f54413ebb2 100644 --- a/__tests__/html2/hooks/useUserID.getter.default.html +++ b/__tests__/html2/hooks/useUserID.getter.default.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useUserID } from 'botframework-webchat/hook'; + import { useUserID } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useUserID.getter.html b/__tests__/html2/hooks/useUserID.getter.html index 293f611d2b..6b7f569142 100644 --- a/__tests__/html2/hooks/useUserID.getter.html +++ b/__tests__/html2/hooks/useUserID.getter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useUserID } from 'botframework-webchat/hook'; + import { useUserID } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useUserID.setter.html b/__tests__/html2/hooks/useUserID.setter.html index 8e38d056c9..9c50305cc7 100644 --- a/__tests__/html2/hooks/useUserID.setter.html +++ b/__tests__/html2/hooks/useUserID.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useUserID } from 'botframework-webchat/hook'; + import { useUserID } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useUsername.setter.html b/__tests__/html2/hooks/useUsername.setter.html index 8775d71f1e..7a108e9d40 100644 --- a/__tests__/html2/hooks/useUsername.setter.html +++ b/__tests__/html2/hooks/useUsername.setter.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useUsername } from 'botframework-webchat/hook'; + import { useUsername } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useVoiceSelector.html b/__tests__/html2/hooks/useVoiceSelector.html index a276d65d46..f8597d5036 100644 --- a/__tests__/html2/hooks/useVoiceSelector.html +++ b/__tests__/html2/hooks/useVoiceSelector.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useVoiceSelector } from 'botframework-webchat/hook'; + import { useVoiceSelector } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html b/__tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html index c15b128739..acec4a60b7 100644 --- a/__tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html +++ b/__tests__/html2/hooks/useWebSpeechPonyfill.getter.bypass.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useWebSpeechPonyfill } from 'botframework-webchat/hook'; + import { useWebSpeechPonyfill } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; diff --git a/__tests__/html2/hooks/useWebSpeechPonyfill.getter.html b/__tests__/html2/hooks/useWebSpeechPonyfill.getter.html index 08c9d35ae8..d49b45925c 100644 --- a/__tests__/html2/hooks/useWebSpeechPonyfill.getter.html +++ b/__tests__/html2/hooks/useWebSpeechPonyfill.getter.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useWebSpeechPonyfill } from 'botframework-webchat/hook'; + import { useWebSpeechPonyfill } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/hooks/useWebSpeechPonyfill.setter.html b/__tests__/html2/hooks/useWebSpeechPonyfill.setter.html index 714cff1122..76aa627235 100644 --- a/__tests__/html2/hooks/useWebSpeechPonyfill.setter.html +++ b/__tests__/html2/hooks/useWebSpeechPonyfill.setter.html @@ -24,7 +24,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useWebSpeechPonyfill } from 'botframework-webchat/hook'; + import { useWebSpeechPonyfill } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; import { actRecognizeOnce, createWebSpeechPonyfill } from '/assets/esm/speech/speechPageObjects.js'; diff --git a/__tests__/html2/simple/fatModule/simple.runHook.html b/__tests__/html2/simple/fatModule/simple.runHook.html index 0a3466d5ad..35b9ad5d67 100644 --- a/__tests__/html2/simple/fatModule/simple.runHook.html +++ b/__tests__/html2/simple/fatModule/simple.runHook.html @@ -21,7 +21,7 @@ import '/test-page-object.mjs'; import { createStoreWithOptions, testIds } from 'botframework-webchat'; - import { useLanguage } from 'botframework-webchat/hook'; + import { useLanguage } from 'botframework-webchat/hook.js'; import createRenderHook from '/assets/esm/createRenderHook.js'; const { createDirectLineEmulator } = window.testHelpers; From 5087ad73ff80d7261d509bc838040335a4e675f6 Mon Sep 17 00:00:00 2001 From: William Wong Date: Mon, 27 Apr 2026 19:57:03 +0000 Subject: [PATCH 058/108] Fix ESLint --- packages/api-graph/src/private/GraphProvider.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/api-graph/src/private/GraphProvider.tsx b/packages/api-graph/src/private/GraphProvider.tsx index 5cf5a8975b..6a963943d9 100644 --- a/packages/api-graph/src/private/GraphProvider.tsx +++ b/packages/api-graph/src/private/GraphProvider.tsx @@ -1,7 +1,12 @@ import type { DirectLineActivityNode } from '@msinternal/botframework-webchat-core-graph'; import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { createStore, WebChatActivity } from 'botframework-webchat-core'; -import { createGraphFromStore, isOfType, type GraphSubscriber, type Identifier } from 'botframework-webchat-core/graph.js'; +import { + createGraphFromStore, + isOfType, + type GraphSubscriber, + type Identifier +} from 'botframework-webchat-core/graph.js'; import React, { memo, useEffect, useMemo, useState } from 'react'; import { custom, function_, object, optional, parse, pipe, readonly, safeParse, type InferInput } from 'valibot'; From fd3a306f3dbab487151664b79fed505e4073a42e Mon Sep 17 00:00:00 2001 From: William Wong Date: Mon, 27 Apr 2026 20:26:04 +0000 Subject: [PATCH 059/108] Fix import map --- __tests__/html2/boot/deprecation/components.new.html | 2 +- __tests__/html2/middleware/avatar/backwardCompatibility.html | 2 +- .../middleware/avatar/legacyAvatarMiddleware/addOrReplace.html | 2 +- .../middleware/avatar/legacyAvatarMiddleware/changing.html | 2 +- .../middleware/avatar/legacyAvatarMiddleware/decorate.html | 2 +- .../html2/middleware/avatar/legacyAvatarMiddleware/delete.html | 2 +- .../middleware/avatar/legacyAvatarMiddleware/styleOptions.html | 2 +- .../html2/middleware/avatar/polymiddleware/addOrReplace.html | 2 +- __tests__/html2/middleware/avatar/polymiddleware/changing.html | 2 +- __tests__/html2/middleware/avatar/polymiddleware/decorate.html | 2 +- .../avatar/polymiddleware/defaultAvatar.styleOptions.html | 2 +- __tests__/html2/middleware/avatar/polymiddleware/delete.html | 2 +- __tests__/html2/middleware/avatar/renderProxy.html | 3 +-- .../html2/middleware/avatar/useBuildRenderAvatarCallback.html | 3 +-- .../fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html | 2 +- .../supportPolymiddleware.reactDOMRender.withCreateRoot.html | 2 +- .../fatModule/esm.sh/supportPolymiddleware.renderWebChat.html | 2 +- 17 files changed, 17 insertions(+), 19 deletions(-) diff --git a/__tests__/html2/boot/deprecation/components.new.html b/__tests__/html2/boot/deprecation/components.new.html index 9cb6e0edcd..8030c6a8f9 100644 --- a/__tests__/html2/boot/deprecation/components.new.html +++ b/__tests__/html2/boot/deprecation/components.new.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "jest-mock": "https://esm.sh/jest-mock", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" diff --git a/__tests__/html2/middleware/avatar/backwardCompatibility.html b/__tests__/html2/middleware/avatar/backwardCompatibility.html index 91b4797977..c1df5f8971 100644 --- a/__tests__/html2/middleware/avatar/backwardCompatibility.html +++ b/__tests__/html2/middleware/avatar/backwardCompatibility.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html index c3a8c42695..2da4bad78d 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/changing.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/changing.html index 6144a2e965..a194772910 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/changing.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/changing.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html index c3a8c42695..2da4bad78d 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/delete.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/delete.html index d1d13426ab..7454bd609e 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/delete.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/delete.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html index 2330f35238..17d075a48d 100644 --- a/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html +++ b/__tests__/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/polymiddleware/addOrReplace.html b/__tests__/html2/middleware/avatar/polymiddleware/addOrReplace.html index a0a04cb3c4..82de8c9a07 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/addOrReplace.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/addOrReplace.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/polymiddleware/changing.html b/__tests__/html2/middleware/avatar/polymiddleware/changing.html index 9899626e59..20f6db9964 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/changing.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/changing.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/polymiddleware/decorate.html b/__tests__/html2/middleware/avatar/polymiddleware/decorate.html index 787d5dd4ab..743e3adb5d 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/decorate.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/decorate.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html b/__tests__/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html index b22d95fbd5..1c56c51b8c 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/polymiddleware/delete.html b/__tests__/html2/middleware/avatar/polymiddleware/delete.html index b4b243e406..b6f57fdbee 100644 --- a/__tests__/html2/middleware/avatar/polymiddleware/delete.html +++ b/__tests__/html2/middleware/avatar/polymiddleware/delete.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js" } diff --git a/__tests__/html2/middleware/avatar/renderProxy.html b/__tests__/html2/middleware/avatar/renderProxy.html index 655c6ffd20..8e258df1cf 100644 --- a/__tests__/html2/middleware/avatar/renderProxy.html +++ b/__tests__/html2/middleware/avatar/renderProxy.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js", "react-dom/client": "/__dist__/packages/bundle/static/react-dom/client.js" diff --git a/__tests__/html2/middleware/avatar/useBuildRenderAvatarCallback.html b/__tests__/html2/middleware/avatar/useBuildRenderAvatarCallback.html index 56c41a3a3a..60199cc9b4 100644 --- a/__tests__/html2/middleware/avatar/useBuildRenderAvatarCallback.html +++ b/__tests__/html2/middleware/avatar/useBuildRenderAvatarCallback.html @@ -9,8 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js", "react-dom/client": "/__dist__/packages/bundle/static/react-dom/client.js" diff --git a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html index e4b4d13f88..dc97c9d137 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html +++ b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18" } diff --git a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.withCreateRoot.html b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.withCreateRoot.html index 0babbb5416..5fdb87c966 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.withCreateRoot.html +++ b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.reactDOMRender.withCreateRoot.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" diff --git a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.renderWebChat.html b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.renderWebChat.html index 31f0273e96..3bf2102636 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.renderWebChat.html +++ b/__tests__/html2/simple/fatModule/esm.sh/supportPolymiddleware.renderWebChat.html @@ -9,7 +9,7 @@ { "imports": { "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/middleware": "/__dist__/packages/bundle/static/botframework-webchat/middleware.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", "react-dom": "https://esm.sh/react-dom@18" } From 78181e1ae3d8710eebfe242ed4574872710dfbb8 Mon Sep 17 00:00:00 2001 From: William Wong Date: Tue, 28 Apr 2026 20:00:55 +0000 Subject: [PATCH 060/108] Fix recursive schema --- .../src/types/external/OrgSchema/Action.ts | 25 +-- .../src/types/external/OrgSchema/Claim.ts | 23 ++- .../OrgSchema/CreativeWork.test.spec.ts | 155 ++++++++++++++++++ .../types/external/OrgSchema/CreativeWork.ts | 38 +++-- .../types/external/OrgSchema/DefinedTerm.ts | 21 +-- .../external/OrgSchema/JSONLinkedData.ts | 26 +++ .../src/types/external/OrgSchema/Person.ts | 20 ++- .../src/types/external/OrgSchema/Project.ts | 18 +- .../external/OrgSchema/SoftwareSourceCode.ts | 19 ++- .../src/types/external/OrgSchema/Thing.ts | 35 ++-- .../types/external/OrgSchema/UserReview.ts | 19 ++- .../types/external/OrgSchema/VoteAction.ts | 20 ++- ...spec.ts => jsonLinkedDataProperty.spec.ts} | 20 +-- .../private/jsonLinkedDataProperty.ts | 71 ++++++++ .../OrgSchema/private/orgSchemaProperties.ts | 54 ------ 15 files changed, 387 insertions(+), 177 deletions(-) create mode 100644 packages/core/src/types/external/OrgSchema/CreativeWork.test.spec.ts create mode 100644 packages/core/src/types/external/OrgSchema/JSONLinkedData.ts rename packages/core/src/types/external/OrgSchema/private/{orgSchemaProperties.spec.ts => jsonLinkedDataProperty.spec.ts} (50%) create mode 100644 packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts delete mode 100644 packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index 6d9e23e25c..56d386c889 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -1,9 +1,10 @@ -import { lazy, looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { any, intersect, lazy, objectWithRest, parse, string, type GenericSchema } from 'valibot'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; -import orgSchemaProperties from './private/orgSchemaProperties'; -import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; -import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { projectSchema, type ProjectInput } from './Project'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview'; /** @@ -68,7 +69,6 @@ type ActionOutput = ThingOutput & { * * @see https://schema.org/provider */ - readonly provider: readonly ProjectOutput[]; /** * The result produced in the action. E.g. John wrote *a book*. @@ -77,14 +77,17 @@ type ActionOutput = ThingOutput & { }; const actionEntries = { - ...thingEntries, - actionOption: orgSchemaProperties(string()), - actionStatus: orgSchemaProperties(actionStatusSchema), - provider: orgSchemaProperties(lazy(() => projectSchema)), - result: orgSchemaProperties(userReviewSchema) + ...jsonLinkedDataEntries, + actionOption: jsonLinkedDataProperty(string()), + actionStatus: jsonLinkedDataProperty(actionStatusSchema), + provider: jsonLinkedDataProperty(lazy(() => projectSchema)), + result: jsonLinkedDataProperty(userReviewSchema) }; -const actionSchema: GenericSchema = pipe(looseObject(actionEntries), readonly()); +const actionSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + objectWithRest(actionEntries, jsonLinkedDataProperty(any())) +]); /** @deprecated Use Valibot.parse(actionSchema) instead. Will be removed on or after 2028-04-23. */ const parseAction = (action: ActionInput): ActionOutput => parse(actionSchema, action); diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index bc2da5f95b..b95e994647 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -1,13 +1,9 @@ -import { lazy, looseObject, parse, pipe, readonly, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, type GenericSchema } from 'valibot'; -import { - creativeWorkEntries, - creativeWorkSchema, - type CreativeWorkInput, - type CreativeWorkOutput -} from './CreativeWork'; +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; -import orgSchemaProperties from './private/orgSchemaProperties'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews. @@ -60,12 +56,15 @@ type ClaimOutput = CreativeWorkOutput & { }; const claimEntries = { - ...creativeWorkEntries, - appearance: orgSchemaProperties(lazy(() => creativeWorkSchema)), - claimInterpreter: orgSchemaProperties(lazy(() => projectSchema)) + ...jsonLinkedDataEntries, + appearance: jsonLinkedDataProperty(lazy(() => creativeWorkSchema)), + claimInterpreter: jsonLinkedDataProperty(lazy(() => projectSchema)) }; -const claimSchema: GenericSchema = pipe(looseObject(claimEntries), readonly()); +const claimSchema: GenericSchema = intersect([ + lazy(() => creativeWorkSchema), + object(claimEntries) +]); /** @deprecated Use Valibot.parse(claimSchema) instead. Will be removed on or after 2028-04-23. */ const parseClaim = (claim: ClaimInput): ClaimOutput => parse(claimSchema, claim); diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.test.spec.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.test.spec.ts new file mode 100644 index 0000000000..19fc3cab2b --- /dev/null +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.test.spec.ts @@ -0,0 +1,155 @@ +import { expect, test } from '@jest/globals'; +import { parse } from 'valibot'; +import { creativeWorkSchema } from './CreativeWork'; + +// test('Testing', () => { +// const one = object({ +// number: optional(arrayize(number())) +// }); + +// const two = intersect([ +// one, +// objectWithRest( +// { +// string: optional(arrayize(string())) +// }, +// arrayize() +// ) +// ]); + +// try { +// console.log( +// parse(two, { +// boolean: true, +// number: [1], +// string: 'abc' +// }) +// ); +// } catch (error) { +// console.error(error.issues); + +// throw error; +// } +// }); + +// test('Test 2', () => { +// try { +// console.log( +// parse(creativeWorkSchema, { +// '@type': 'CreativeWork', +// name: 'Alice in the Wonderland' +// }) +// ); +// } catch (error) { +// console.error(error.issues); + +// throw error; +// } +// }); + +// test('valibot bug', () => { +// console.log( +// parse( +// intersect([ +// union([ +// pipe( +// any(), +// // looseObject({ one: number() }), +// transform(value => Object.freeze(value)) +// ) +// ]), +// union([ +// pipe( +// any(), +// // looseObject({ two: number() }), +// transform(value => Object.freeze(value)) +// ) +// ]) +// ]), +// Object.freeze({ one: 1, two: 2 }) +// ) +// ); +// }); + +test('Should parse recursively into claimInterpreter', () => { + expect( + parse(creativeWorkSchema, { + '@context': 'https://schema.org', + '@id': '', + '@type': 'Message', + keywords: ['AllowCopy'], + type: 'https://schema.org/Message', + citation: { + '@id': 'https://bing.com/', + '@type': 'Claim', + claimInterpreter: { + '@type': 'Project', + slogan: 'Surfaced with Azure OpenAI', + url: 'https://www.microsoft.com/en-us/ai/responsible-ai' + }, + position: '1' + } + }) + ).toEqual({ + '@context': 'https://schema.org', + '@id': '', + '@type': 'Message', + additionalType: [], + alternateName: [], + citation: [ + { + '@id': 'https://bing.com/', + '@type': 'Claim', + abstract: [], + additionalType: [], + alternateName: [], + appearance: [], + author: [], + citation: [], + claimInterpreter: [ + { + '@type': 'Project', + additionalType: [], + alternateName: [], + description: [], + name: [], + potentialAction: [], + slogan: ['Surfaced with Azure OpenAI'], + url: ['https://www.microsoft.com/en-us/ai/responsible-ai'] + } + ], + creativeWorkStatus: [], + description: [], + isBasedOn: [], + isPartOf: [], + keywords: [], + name: [], + pattern: [], + position: ['1'], + potentialAction: [], + text: [], + url: [], + usageInfo: [] + } + ], + abstract: [], + author: [], + creativeWorkStatus: [], + description: [], + isBasedOn: [], + isPartOf: [], + keywords: ['AllowCopy'], + name: [], + pattern: [], + position: [], + potentialAction: [], + text: [], + url: [], + // type: ['https://schema.org/Message'], + usageInfo: [] + }); +}); + +// test('theory', () => { +// console.log(parse(intersect([ +// }); diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 116201b4fe..79c14f977a 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -1,14 +1,16 @@ -import { lazy, looseObject, number, parse, pipe, readonly, string, union, type GenericSchema } from 'valibot'; +import { intersect, lazy, number, object, parse, string, union, type GenericSchema } from 'valibot'; +import { claimSchema } from './Claim'; import { creativeWorkStatusSchema, type CreativeWorkStatusInput, type CreativeWorkStatusOutput } from './CreativeWorkStatus'; import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; import { personSchema, type PersonInput, type PersonOutput } from './Person'; -import orgSchemaProperties from './private/orgSchemaProperties'; -import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** * The most generic kind of creative work, including books, movies, photographs, software programs, etc. @@ -183,21 +185,25 @@ type CreativeWorkOutput = ThingOutput & { let creativeWorkSchema_: GenericSchema; const creativeWorkEntries = { - ...thingEntries, - abstract: orgSchemaProperties(string()), - author: orgSchemaProperties(union([lazy(() => personSchema), string()])), - citation: orgSchemaProperties(lazy(() => creativeWorkSchema_)), - creativeWorkStatus: orgSchemaProperties(creativeWorkStatusSchema), - isBasedOn: orgSchemaProperties(lazy(() => creativeWorkSchema_)), - isPartOf: orgSchemaProperties(lazy(() => creativeWorkSchema_)), - keywords: orgSchemaProperties(union([lazy(() => definedTermSchema), string()])), - pattern: orgSchemaProperties(lazy(() => definedTermSchema)), - position: orgSchemaProperties(union([number(), string()])), - text: orgSchemaProperties(string()), - usageInfo: orgSchemaProperties(lazy(() => creativeWorkSchema_)) + ...jsonLinkedDataEntries, + abstract: jsonLinkedDataProperty(string()), + author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), + citation: jsonLinkedDataProperty(lazy(() => claimSchema)), + creativeWorkStatus: jsonLinkedDataProperty(creativeWorkStatusSchema), + isBasedOn: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), + isPartOf: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), + keywords: jsonLinkedDataProperty(union([lazy(() => definedTermSchema), string()])), + pattern: jsonLinkedDataProperty(lazy(() => definedTermSchema)), + position: jsonLinkedDataProperty(union([number(), string()])), + text: jsonLinkedDataProperty(string()), + usageInfo: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)) }; -creativeWorkSchema_ = pipe(looseObject(creativeWorkEntries), readonly()); +creativeWorkSchema_ = intersect([ + lazy(() => thingSchema), + object(creativeWorkEntries) + // objectWithRest(creativeWorkEntries, jsonLinkedDataProperty(any(), 'CREATIVE WORK')) +]); // Constantize here, so we are exporting a const than a let. const creativeWorkSchema = creativeWorkSchema_; diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index 9a634440a2..bba3f94013 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -1,7 +1,8 @@ -import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; -import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; -import orgSchemaProperties from './private/orgSchemaProperties'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term. @@ -50,15 +51,15 @@ type DefinedTermOutput = ThingOutput & { }; const definedTermEntries = { - ...thingEntries, - inDefinedTermSet: orgSchemaProperties(string()), - termCode: orgSchemaProperties(string()) + ...jsonLinkedDataEntries, + inDefinedTermSet: jsonLinkedDataProperty(string()), + termCode: jsonLinkedDataProperty(string()) }; -const definedTermSchema: GenericSchema = pipe( - looseObject(definedTermEntries), - readonly() -); +const definedTermSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object(definedTermEntries) +]); /** @deprecated Use Valibot.parse(definedTermSchema) instead. Will be removed on or after 2028-04-23. */ const parseDefinedTerm = (definedTerm: DefinedTermInput): DefinedTermOutput => parse(definedTermSchema, definedTerm); diff --git a/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts b/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts new file mode 100644 index 0000000000..cc213cd193 --- /dev/null +++ b/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts @@ -0,0 +1,26 @@ +import { literal, optional, string } from 'valibot'; +// import jsonLinkedDataProperties from './private/jsonLinkedDataProperties'; + +type JSONLinkedDataInput = { + readonly '@context'?: 'https://schema.org' | undefined; + readonly '@id'?: string | string[] | undefined; + // readonly '@type'?: string | string[] | undefined; + readonly '@type'?: string | string[] | undefined; +}; + +type JSONLinkedDataOutput = { + readonly '@context'?: 'https://schema.org' | undefined; + readonly '@id'?: string | undefined; + // readonly '@type'?: string[]; + readonly '@type'?: string | undefined; +}; + +const jsonLinkedDataEntries = { + '@context': optional(literal('https://schema.org')), + '@id': optional(string()), + // We should move to multiple @type soon. + // '@type': jsonLinkedDataProperties(string()) + '@type': optional(string()) +}; + +export { jsonLinkedDataEntries, type JSONLinkedDataInput, type JSONLinkedDataOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index 0cdf0aa06a..5a4c1332a1 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -1,6 +1,7 @@ -import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; -import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; -import orgSchemaProperties from './private/orgSchemaProperties'; +import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; /** * A person (alive, dead, undead, or fictional). @@ -39,13 +40,16 @@ type PersonOutput = ThingOutput & { }; const personEntries = { - ...thingEntries, - description: orgSchemaProperties(string()), - image: orgSchemaProperties(string()), - name: orgSchemaProperties(string()) + ...jsonLinkedDataEntries, + description: jsonLinkedDataProperty(string()), + image: jsonLinkedDataProperty(string()), + name: jsonLinkedDataProperty(string()) }; -const personSchema: GenericSchema = pipe(looseObject(personEntries), readonly()); +const personSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object(personEntries) +]); /** @deprecated Use Valibot.parse(personSchema) instead. Will be removed on or after 2028-04-23. */ const parsePerson = (person: PersonInput): PersonOutput => parse(personSchema, person); diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index 02daa253b6..580232fd85 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -1,7 +1,8 @@ -import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; -import orgSchemaProperties from './private/orgSchemaProperties'; -import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. @@ -36,13 +37,16 @@ type ProjectOutput = ThingOutput & { }; const projectEntries = { - ...thingEntries, - slogan: orgSchemaProperties(string()) + ...jsonLinkedDataEntries, + slogan: jsonLinkedDataProperty(string()) }; -const projectSchema: GenericSchema = pipe(looseObject(projectEntries), readonly()); +const projectSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object(projectEntries) +]); /** @deprecated Use Valibot.parse(projectSchema) instead. Will be removed on or after 2028-04-23. */ const parseProject = (project: ProjectInput): ProjectOutput => parse(projectSchema, project); -export { projectEntries, parseProject, projectSchema, type ProjectInput, type ProjectOutput }; +export { parseProject, projectEntries, projectSchema, type ProjectInput, type ProjectOutput }; diff --git a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts index 843bd795b5..56796439f7 100644 --- a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts +++ b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts @@ -1,7 +1,8 @@ -import { looseObject, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { any, intersect, lazy, objectWithRest, string, type GenericSchema } from 'valibot'; -import { creativeWorkEntries, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; -import orgSchemaProperties from './private/orgSchemaProperties'; +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * Computer programming source code. Example: Full (compile ready) solutions, code snippet samples, scripts, templates. @@ -36,14 +37,14 @@ type SoftwareSourceCodeOutput = CreativeWorkOutput & { }; const softwareSourceCodeEntries = { - ...creativeWorkEntries, - programmingLanguage: orgSchemaProperties(string()) + ...jsonLinkedDataEntries, + programmingLanguage: jsonLinkedDataProperty(string()) }; -const softwareSourceCodeSchema: GenericSchema = pipe( - looseObject(softwareSourceCodeEntries), - readonly() -); +const softwareSourceCodeSchema: GenericSchema = intersect([ + lazy(() => creativeWorkSchema), + objectWithRest(softwareSourceCodeEntries, jsonLinkedDataProperty(any())) +]); export { softwareSourceCodeEntries, diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index 3c6b10292e..89da7608b6 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -1,7 +1,8 @@ -import { lazy, literal, looseObject, optional, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { lazy, object, parse, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; -import orgSchemaProperties from './private/orgSchemaProperties'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { jsonLinkedDataEntries, type JSONLinkedDataInput, type JSONLinkedDataOutput } from './JSONLinkedData'; /** * The most generic type of item. @@ -10,11 +11,7 @@ import orgSchemaProperties from './private/orgSchemaProperties'; * * @see https://schema.org/Thing */ -type ThingInput = { - readonly '@context'?: 'https://schema.org' | undefined; - readonly '@id'?: string | undefined; - readonly '@type'?: string | undefined; - +type ThingInput = JSONLinkedDataInput & { /** * An additional type for the item, typically used for adding more specific types from external vocabularies in microdata syntax. This is a relationship between something and a class that the thing is in. Typically the value is a URI-identified RDF class, and in this case corresponds to the use of rdf:type in RDF. Text values can be used sparingly, for cases where useful information can be added without their being an appropriate schema to reference. In the case of text values, the class label should follow the schema.org [style guide](https://schema.org/docs/styleguide.html). * @@ -65,11 +62,7 @@ type ThingInput = { * * @see https://schema.org/Thing */ -type ThingOutput = { - readonly '@context'?: 'https://schema.org' | undefined; - readonly '@id'?: string | undefined; - readonly '@type'?: string | undefined; - +type ThingOutput = JSONLinkedDataOutput & { /** * An additional type for the item, typically used for adding more specific types from external vocabularies in microdata syntax. This is a relationship between something and a class that the thing is in. Typically the value is a URI-identified RDF class, and in this case corresponds to the use of rdf:type in RDF. Text values can be used sparingly, for cases where useful information can be added without their being an appropriate schema to reference. In the case of text values, the class label should follow the schema.org [style guide](https://schema.org/docs/styleguide.html). * @@ -114,18 +107,16 @@ type ThingOutput = { }; const thingEntries = { - '@context': optional(pipe(literal('https://schema.org'))), - '@id': optional(string()), - '@type': optional(string()), - additionalType: orgSchemaProperties(string()), - alternateName: orgSchemaProperties(string()), - description: orgSchemaProperties(string()), - name: orgSchemaProperties(string()), - potentialAction: orgSchemaProperties(lazy(() => actionSchema)), - url: orgSchemaProperties(string()) + ...jsonLinkedDataEntries, + additionalType: jsonLinkedDataProperty(string()), + alternateName: jsonLinkedDataProperty(string()), + description: jsonLinkedDataProperty(string()), + name: jsonLinkedDataProperty(string()), + potentialAction: jsonLinkedDataProperty(lazy(() => actionSchema)), + url: jsonLinkedDataProperty(string()) }; -const thingSchema: GenericSchema = pipe(looseObject(thingEntries), readonly()); +const thingSchema: GenericSchema = object(thingEntries); /** @deprecated Use Valibot.parse(thingSchema) instead. Will be removed on or after 2028-04-23. */ const parseThing = (thing: ThingInput): ThingOutput => parse(thingSchema, thing); diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index 2088845d9a..1de33b93d1 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -1,7 +1,8 @@ -import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; -import orgSchemaProperties from './private/orgSchemaProperties'; -import { thingEntries, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * A review created by an end-user (e.g. consumer, purchaser, attendee etc.), in contrast with [`CriticReview`](https://schema.org/CriticReview). @@ -32,14 +33,14 @@ type UserReviewOutput = ThingOutput & { }; const userReviewEntries = { - ...thingEntries, - reviewAspect: orgSchemaProperties(string()) + ...jsonLinkedDataEntries, + reviewAspect: jsonLinkedDataProperty(string()) }; -const userReviewSchema: GenericSchema = pipe( - looseObject(userReviewEntries), - readonly() -); +const userReviewSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object(userReviewEntries) +]); /** @deprecated Use Valibot.parse(userReviewSchema) instead. Will be removed on or after 2028-04-23. */ const parseUserReview = (userReview: UserReviewInput): UserReviewOutput => parse(userReviewSchema, userReview); diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index bbd06a0d90..86822707d2 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,7 +1,8 @@ -import { looseObject, parse, pipe, readonly, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; -import { actionEntries, type ActionInput, type ActionOutput } from './Action'; -import orgSchemaProperties from './private/orgSchemaProperties'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. @@ -40,14 +41,15 @@ type VoteActionOutput = ActionOutput & { }; const voteActionEntries = { - ...actionEntries, - actionOption: orgSchemaProperties(string()) + ...jsonLinkedDataEntries, + // ...actionEntries, + actionOption: jsonLinkedDataProperty(string()) }; -const voteActionSchema: GenericSchema = pipe( - looseObject(voteActionEntries), - readonly() -); +const voteActionSchema: GenericSchema = intersect([ + lazy(() => actionSchema), + object(voteActionEntries) +]); /** @deprecated Use Valibot.parse(voteActionSchema) instead. Will be removed on or after 2028-04-23. */ const parseVoteAction = (voteAction: VoteActionInput): VoteActionOutput => parse(voteActionSchema, voteAction); diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts b/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.spec.ts similarity index 50% rename from packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts rename to packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.spec.ts index 7592867191..b9825a262a 100644 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.spec.ts +++ b/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.spec.ts @@ -1,42 +1,42 @@ import { describe, expect, test } from '@jest/globals'; import { parse, string } from 'valibot'; -import orgSchemaProperties from './orgSchemaProperties'; +import jsonLinkedDataProperty from './jsonLinkedDataProperty'; -describe('orgSchemaProperties', () => { +describe('jsonLinkedDataProperty', () => { describe('singular', () => { test('should transform into plural', () => { - expect(parse(orgSchemaProperties(string()), 'abc')).toEqual(['abc']); + expect(parse(jsonLinkedDataProperty(string()), 'abc')).toEqual(['abc']); }); test('should turn item of invalid type into undefined', () => { - expect(parse(orgSchemaProperties(string()), 0)).toEqual([]); + expect(parse(jsonLinkedDataProperty(string()), 0)).toEqual([]); }); test('should turn null into undefined', () => { - expect(parse(orgSchemaProperties(string()), null)).toEqual([]); + expect(parse(jsonLinkedDataProperty(string()), null)).toEqual([]); }); test('should keep undefined as-is', () => { - expect(parse(orgSchemaProperties(string()), undefined)).toEqual([]); + expect(parse(jsonLinkedDataProperty(string()), undefined)).toEqual([]); }); }); describe('plural', () => { test('should keep as-is', () => { - expect(parse(orgSchemaProperties(string()), ['abc', 'xyz'])).toEqual(['abc', 'xyz']); + expect(parse(jsonLinkedDataProperty(string()), ['abc', 'xyz'])).toEqual(['abc', 'xyz']); }); test('should keep empty array as-is', () => { - expect(parse(orgSchemaProperties(string()), [])).toEqual([]); + expect(parse(jsonLinkedDataProperty(string()), [])).toEqual([]); }); test('should remove items with invalid type (all)', () => { - expect(parse(orgSchemaProperties(string()), [0])).toEqual([]); + expect(parse(jsonLinkedDataProperty(string()), [0])).toEqual([]); }); test('should remove items with invalid type (some)', () => { - expect(parse(orgSchemaProperties(string()), ['abc', 0, 'xyz'])).toEqual(['abc', 'xyz']); + expect(parse(jsonLinkedDataProperty(string()), ['abc', 0, 'xyz'])).toEqual(['abc', 'xyz']); }); }); }); diff --git a/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts b/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts new file mode 100644 index 0000000000..bf41c83e2a --- /dev/null +++ b/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts @@ -0,0 +1,71 @@ +import { + any, + optional, + pipe, + readonly, + safeParse, + transform, + type BaseIssue, + type BaseSchema, + type GenericSchema, + type InferInput, + type InferOutput +} from 'valibot'; + +const EMPTY_ARRAY = Object.freeze([]); + +// JSON-LD property characteristics: +// - Every property value can be singular or plural (value) +// - Every property is optional + +// Our interpretation of its characteristics: +// - Every property is an array +// - This simplify our code, instead of `book.author[0] ?? book.author`, it will become `book.author[0]` +// - Optional property is an empty array +// - This simplify our code, instead of `book.author?.[0]?.name?.[0]`, it will become `book.author[0]?.name[0]` +// - Invalid value is removed +// - This simplify our code: validated input is key to simpler code +// - Unknown value is removed +// - It is very difficult to keep unknown value +// - If the unknown value is an object but not a JSON-LD object, we should not turn it into array +// - Field such as @id should not be turned into array, maybe more rules in JSON-LD playbook + +export default function jsonLinkedDataProperty>>( + schema: T +): GenericSchema | readonly InferInput[] | undefined, readonly InferOutput[]> { + type TOutput = InferOutput; + + return optional( + pipe( + // any() is okay, we will remove invalid value from the output array. + any(), + transform((value: TOutput | readonly TOutput[]): readonly TOutput[] => { + if (typeof value === 'undefined') { + return EMPTY_ARRAY; + } + + let nextValue: readonly TOutput[]; + + if (Array.isArray(value)) { + nextValue = value; + } else { + nextValue = [value]; + } + + nextValue = nextValue.reduce((result, item) => { + if (typeof item !== 'undefined') { + const parseResult = safeParse(schema, item); + + parseResult.success && result.push(parseResult.output); + } + + return result; + }, []); + + return nextValue.length ? Object.freeze(nextValue) : EMPTY_ARRAY; + }), + readonly() + ), + EMPTY_ARRAY + ); +} diff --git a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts b/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts deleted file mode 100644 index f6169ee19c..0000000000 --- a/packages/core/src/types/external/OrgSchema/private/orgSchemaProperties.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { - any, - array, - fallback, - optional, - pipe, - safeParse, - transform, - union, - type BaseSchema, - type GenericSchema, - type InferInput, - type InferOutput -} from 'valibot'; - -const EMPTY_ARRAY = Object.freeze([]); - -export default function orgSchemaProperties>( - schema: T -): GenericSchema | readonly InferInput[] | undefined, readonly InferOutput[] | undefined> { - return optional( - fallback( - union([ - // If it is an array. - pipe( - array(any()), - transform(value => { - // Filter out all `undefined` and invalid values. - const result = value.reduce((output, value) => { - if (typeof value !== 'undefined') { - const result = safeParse(schema, value); - - result.success && output.push(result.output); - } - - return output; - }, []); - - // If it is non-empty, return the frozen array, otherwise, return our empty flywheel. - return result.length ? Object.freeze(result) : EMPTY_ARRAY; - }) - ), - pipe( - // Otherwise, it must match the schema - schema, - // Put it in a frozen array tuple. - transform(value => Object.freeze([value])) - ) - ]), - () => EMPTY_ARRAY - ), - EMPTY_ARRAY - ); -} From 1812bd44fe2b2db13970420c285480fd7b669266 Mon Sep 17 00:00:00 2001 From: William Wong Date: Tue, 28 Apr 2026 22:19:07 +0000 Subject: [PATCH 061/108] Temporarily don't use freeze --- .../types/external/OrgSchema/private/jsonLinkedDataProperty.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts b/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts index bf41c83e2a..763088e161 100644 --- a/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts +++ b/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts @@ -62,7 +62,8 @@ export default function jsonLinkedDataProperty Date: Wed, 29 Apr 2026 06:51:52 +0000 Subject: [PATCH 062/108] Fix CreativeWork.isBasedOn --- .../Text/private/ActivityViewCodeButton.tsx | 2 +- .../Text/private/MarkdownTextContent.tsx | 9 ++++++++- .../getFirstBaseOfSoftwareSourceCode.ts | 17 ++++------------- .../types/external/OrgSchema/CreativeWork.ts | 11 ++++++++--- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/packages/component/src/Attachment/Text/private/ActivityViewCodeButton.tsx b/packages/component/src/Attachment/Text/private/ActivityViewCodeButton.tsx index 81df30912c..1727a9e470 100644 --- a/packages/component/src/Attachment/Text/private/ActivityViewCodeButton.tsx +++ b/packages/component/src/Attachment/Text/private/ActivityViewCodeButton.tsx @@ -19,7 +19,7 @@ const activityViewCodeButtonPropsSchema = pipe( code: string(), language: optional(string()), isAIGenerated: boolean(), - title: string() + title: optional(string()) }), readonly() ); diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index e3cb76f682..94a774a5fd 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -7,6 +7,7 @@ import { orgSchemaClaimSchema, type OrgSchemaClaim, type OrgSchemaCreativeWork, + type OrgSchemaSoftwareSourceCode, type WebChatActivity } from 'botframework-webchat-core'; import cx from 'classnames'; @@ -273,7 +274,13 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { const getEntryDescription = (entry: Entry): string | undefined => entry.claim?.appearance[0]?.usageInfo[0]?.description[0]; - const firstSoftwareSourceCodeBase = useMemo(() => getFirstBaseOfSoftwareSourceCode(messageThing), [messageThing]); + const firstSoftwareSourceCodeBase = useMemo(() => { + const firstSoftwareSourceCodeBase = getFirstBaseOfSoftwareSourceCode(messageThing); + + if (firstSoftwareSourceCodeBase?.programmingLanguage[0]) { + return firstSoftwareSourceCodeBase; + } + }, [messageThing]); return (
diff --git a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts index aee4b7d03d..4402cdee6e 100644 --- a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts +++ b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts @@ -1,9 +1,4 @@ -import { - orgSchemaSoftwareSourceCodeSchema, - type OrgSchemaCreativeWork, - type OrgSchemaSoftwareSourceCode -} from 'botframework-webchat-core'; -import { safeParse } from 'valibot'; +import { type OrgSchemaCreativeWork, type OrgSchemaSoftwareSourceCode } from 'botframework-webchat-core'; /** * Finds the first `isBasedOf` element that is of type `SoftwareSourceCode`. @@ -14,11 +9,7 @@ import { safeParse } from 'valibot'; export default function getFirstBaseOfSoftwareSourceCode( messageThing: OrgSchemaCreativeWork | undefined ): OrgSchemaSoftwareSourceCode | undefined { - for (const base of messageThing?.isBasedOn ?? []) { - const result = safeParse(orgSchemaSoftwareSourceCodeSchema, base); - - if (result.success) { - return result.output; - } - } + return (messageThing?.isBasedOn ?? []).find( + ({ '@type': jsonLinkedDataType }) => jsonLinkedDataType === 'SoftwareSourceCode' + ); } diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 79c14f977a..67df17e136 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -10,6 +10,11 @@ import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from import { jsonLinkedDataEntries } from './JSONLinkedData'; import { personSchema, type PersonInput, type PersonOutput } from './Person'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { + softwareSourceCodeSchema, + type SoftwareSourceCodeInput, + type SoftwareSourceCodeOutput +} from './SoftwareSourceCode'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** @@ -51,7 +56,7 @@ type CreativeWorkInput = ThingInput & { /** * The schema.org [isBasedOn](https://schema.org/isBasedOn) property provides a resource from which this work is derived or from which it is a modification or adaptation. */ - readonly isBasedOn?: CreativeWorkInput | readonly CreativeWorkInput[] | undefined; + readonly isBasedOn?: SoftwareSourceCodeInput | readonly SoftwareSourceCodeInput[] | undefined; /** * Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. @@ -135,7 +140,7 @@ type CreativeWorkOutput = ThingOutput & { /** * The schema.org [isBasedOn](https://schema.org/isBasedOn) property provides a resource from which this work is derived or from which it is a modification or adaptation. */ - readonly isBasedOn: readonly CreativeWorkOutput[]; + readonly isBasedOn: readonly SoftwareSourceCodeOutput[]; /** * Indicates an item or CreativeWork that this item, or CreativeWork (in some sense), is part of. @@ -190,7 +195,7 @@ const creativeWorkEntries = { author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), citation: jsonLinkedDataProperty(lazy(() => claimSchema)), creativeWorkStatus: jsonLinkedDataProperty(creativeWorkStatusSchema), - isBasedOn: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), + isBasedOn: jsonLinkedDataProperty(lazy(() => softwareSourceCodeSchema)), isPartOf: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), keywords: jsonLinkedDataProperty(union([lazy(() => definedTermSchema), string()])), pattern: jsonLinkedDataProperty(lazy(() => definedTermSchema)), From 8d731af6ca94ffe36f3872fc5e1ae134d822176e Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 07:06:53 +0000 Subject: [PATCH 063/108] Fix currentMessage.abstract --- .../ui/PartGrouping/private/PartGroupingActivity.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx index 67989e8da8..c9644850a2 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx @@ -222,7 +222,7 @@ function PartGroupingActivity(props: PartGroupingActivityProps) { )} {currentGroupStatus === 'Incomplete' || howToAbstract - ? howToAbstract || currentMessage?.abstract || localize('COLLAPSIBLE_GROUPING_TITLE') + ? howToAbstract || currentMessage?.abstract[0] || localize('COLLAPSIBLE_GROUPING_TITLE') : localize('COLLAPSIBLE_GROUPING_TITLE')} From e7906eaae44059f13e32b73aeff212b2f4f065fa Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 08:46:29 +0000 Subject: [PATCH 064/108] Fix howToStatus --- .../ui/PartGrouping/private/PartGroupingActivity.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx index c9644850a2..0dc0f7c1fa 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx @@ -185,7 +185,7 @@ function PartGroupingActivity(props: PartGroupingActivityProps) { // The HowTo entity (the group root) may carry an explicit `creativeWorkStatus` and `abstract`. // When present, it takes precedence over status derived from individual messages. const [howToAbstract, howToStatus] = useMemo<[string | undefined, string | undefined]>(() => { - const howTo = messages.find(message => message.isPartOf[0]?.creativeWorkStatus)?.isPartOf[0]; + const howTo = messages.find(message => message.isPartOf[0]?.creativeWorkStatus[0])?.isPartOf[0]; return [howTo?.abstract[0], howTo?.creativeWorkStatus[0]]; }, [messages]); From 13144bbae9cca6713e201d210c308199646748ac Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 09:18:25 +0000 Subject: [PATCH 065/108] Fix defaultWorkStatus --- .../ui/PartGrouping/private/PartGroupingActivity.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx index 0dc0f7c1fa..b1089d9d3b 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx @@ -191,7 +191,7 @@ function PartGroupingActivity(props: PartGroupingActivityProps) { }, [messages]); const defaultWorkStatus = useMemo<'Incomplete' | undefined>( - () => (messages.some(message => 'creativeWorkStatus' in message) ? 'Incomplete' : undefined), + () => (messages.some(message => message.creativeWorkStatus[0]) ? 'Incomplete' : undefined), [messages] ); From 44a464d5d40a240e961f9af0e24e76fd76e5c7c2 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 18:58:29 +0000 Subject: [PATCH 066/108] Clean up --- .../types/external/OrgSchema/Action.spec.ts | 15 +++++++++ .../src/types/external/OrgSchema/Action.ts | 20 +++++------ .../src/types/external/OrgSchema/Claim.ts | 14 ++++---- .../types/external/OrgSchema/CreativeWork.ts | 33 +++++++++---------- .../types/external/OrgSchema/DefinedTerm.ts | 14 ++++---- .../src/types/external/OrgSchema/Person.ts | 14 ++++---- .../src/types/external/OrgSchema/Project.ts | 12 +++---- .../src/types/external/OrgSchema/Thing.ts | 8 ++--- .../types/external/OrgSchema/UserReview.ts | 12 +++---- .../types/external/OrgSchema/VoteAction.ts | 15 ++++----- 10 files changed, 76 insertions(+), 81 deletions(-) diff --git a/packages/core/src/types/external/OrgSchema/Action.spec.ts b/packages/core/src/types/external/OrgSchema/Action.spec.ts index 541b350f31..d3332f0c0f 100644 --- a/packages/core/src/types/external/OrgSchema/Action.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Action.spec.ts @@ -39,5 +39,20 @@ describe('Action', () => { throw err; } }); + + test('should match snapshot', () => { + expect( + parse(actionSchema, { + '@type': 'LikeAction', + actionStatus: 'PotentialActionStatus', + result: [ + { + '@type': 'UserReview', + reviewAspect: 'Hello, World!' + } + ] + }) + ).toEqual({}); + }); }); }); diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index 56d386c889..0cc5f1a976 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -1,4 +1,4 @@ -import { any, intersect, lazy, objectWithRest, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; import { jsonLinkedDataEntries } from './JSONLinkedData'; import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; @@ -76,20 +76,18 @@ type ActionOutput = ThingOutput & { readonly result: readonly (ThingOutput | UserReviewOutput)[]; }; -const actionEntries = { - ...jsonLinkedDataEntries, - actionOption: jsonLinkedDataProperty(string()), - actionStatus: jsonLinkedDataProperty(actionStatusSchema), - provider: jsonLinkedDataProperty(lazy(() => projectSchema)), - result: jsonLinkedDataProperty(userReviewSchema) -}; - const actionSchema: GenericSchema = intersect([ lazy(() => thingSchema), - objectWithRest(actionEntries, jsonLinkedDataProperty(any())) + object({ + ...jsonLinkedDataEntries, + actionOption: jsonLinkedDataProperty(string()), + actionStatus: jsonLinkedDataProperty(actionStatusSchema), + provider: jsonLinkedDataProperty(lazy(() => projectSchema)), + result: jsonLinkedDataProperty(userReviewSchema) + }) ]); /** @deprecated Use Valibot.parse(actionSchema) instead. Will be removed on or after 2028-04-23. */ const parseAction = (action: ActionInput): ActionOutput => parse(actionSchema, action); -export { actionEntries, actionSchema, parseAction, type ActionInput, type ActionOutput }; +export { actionSchema, parseAction, type ActionInput, type ActionOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index b95e994647..6007123631 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -55,18 +55,16 @@ type ClaimOutput = CreativeWorkOutput & { readonly claimInterpreter: readonly ProjectOutput[]; }; -const claimEntries = { - ...jsonLinkedDataEntries, - appearance: jsonLinkedDataProperty(lazy(() => creativeWorkSchema)), - claimInterpreter: jsonLinkedDataProperty(lazy(() => projectSchema)) -}; - const claimSchema: GenericSchema = intersect([ lazy(() => creativeWorkSchema), - object(claimEntries) + object({ + ...jsonLinkedDataEntries, + appearance: jsonLinkedDataProperty(lazy(() => creativeWorkSchema)), + claimInterpreter: jsonLinkedDataProperty(lazy(() => projectSchema)) + }) ]); /** @deprecated Use Valibot.parse(claimSchema) instead. Will be removed on or after 2028-04-23. */ const parseClaim = (claim: ClaimInput): ClaimOutput => parse(claimSchema, claim); -export { claimEntries, claimSchema, parseClaim, type ClaimInput, type ClaimOutput }; +export { claimSchema, parseClaim, type ClaimInput, type ClaimOutput }; diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 67df17e136..fb374322ee 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -189,25 +189,22 @@ type CreativeWorkOutput = ThingOutput & { // eslint-disable-next-line prefer-const let creativeWorkSchema_: GenericSchema; -const creativeWorkEntries = { - ...jsonLinkedDataEntries, - abstract: jsonLinkedDataProperty(string()), - author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), - citation: jsonLinkedDataProperty(lazy(() => claimSchema)), - creativeWorkStatus: jsonLinkedDataProperty(creativeWorkStatusSchema), - isBasedOn: jsonLinkedDataProperty(lazy(() => softwareSourceCodeSchema)), - isPartOf: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), - keywords: jsonLinkedDataProperty(union([lazy(() => definedTermSchema), string()])), - pattern: jsonLinkedDataProperty(lazy(() => definedTermSchema)), - position: jsonLinkedDataProperty(union([number(), string()])), - text: jsonLinkedDataProperty(string()), - usageInfo: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)) -}; - creativeWorkSchema_ = intersect([ lazy(() => thingSchema), - object(creativeWorkEntries) - // objectWithRest(creativeWorkEntries, jsonLinkedDataProperty(any(), 'CREATIVE WORK')) + object({ + ...jsonLinkedDataEntries, + abstract: jsonLinkedDataProperty(string()), + author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), + citation: jsonLinkedDataProperty(lazy(() => claimSchema)), + creativeWorkStatus: jsonLinkedDataProperty(creativeWorkStatusSchema), + isBasedOn: jsonLinkedDataProperty(lazy(() => softwareSourceCodeSchema)), + isPartOf: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), + keywords: jsonLinkedDataProperty(union([lazy(() => definedTermSchema), string()])), + pattern: jsonLinkedDataProperty(lazy(() => definedTermSchema)), + position: jsonLinkedDataProperty(union([number(), string()])), + text: jsonLinkedDataProperty(string()), + usageInfo: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)) + }) ]); // Constantize here, so we are exporting a const than a let. @@ -217,4 +214,4 @@ const creativeWorkSchema = creativeWorkSchema_; const parseCreativeWork = (creativeWork: CreativeWorkInput): CreativeWorkOutput => parse(creativeWorkSchema_, creativeWork); -export { creativeWorkEntries, creativeWorkSchema, parseCreativeWork, type CreativeWorkInput, type CreativeWorkOutput }; +export { creativeWorkSchema, parseCreativeWork, type CreativeWorkInput, type CreativeWorkOutput }; diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index bba3f94013..dc555ad447 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -50,18 +50,16 @@ type DefinedTermOutput = ThingOutput & { readonly termCode: readonly string[]; }; -const definedTermEntries = { - ...jsonLinkedDataEntries, - inDefinedTermSet: jsonLinkedDataProperty(string()), - termCode: jsonLinkedDataProperty(string()) -}; - const definedTermSchema: GenericSchema = intersect([ lazy(() => thingSchema), - object(definedTermEntries) + object({ + ...jsonLinkedDataEntries, + inDefinedTermSet: jsonLinkedDataProperty(string()), + termCode: jsonLinkedDataProperty(string()) + }) ]); /** @deprecated Use Valibot.parse(definedTermSchema) instead. Will be removed on or after 2028-04-23. */ const parseDefinedTerm = (definedTerm: DefinedTermInput): DefinedTermOutput => parse(definedTermSchema, definedTerm); -export { definedTermEntries, definedTermSchema, parseDefinedTerm, type DefinedTermInput, type DefinedTermOutput }; +export { definedTermSchema, parseDefinedTerm, type DefinedTermInput, type DefinedTermOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index 5a4c1332a1..106135f5aa 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -39,16 +39,14 @@ type PersonOutput = ThingOutput & { readonly image: readonly string[]; }; -const personEntries = { - ...jsonLinkedDataEntries, - description: jsonLinkedDataProperty(string()), - image: jsonLinkedDataProperty(string()), - name: jsonLinkedDataProperty(string()) -}; - const personSchema: GenericSchema = intersect([ lazy(() => thingSchema), - object(personEntries) + object({ + ...jsonLinkedDataEntries, + description: jsonLinkedDataProperty(string()), + image: jsonLinkedDataProperty(string()), + name: jsonLinkedDataProperty(string()) + }) ]); /** @deprecated Use Valibot.parse(personSchema) instead. Will be removed on or after 2028-04-23. */ diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index 580232fd85..b75756c175 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -36,17 +36,15 @@ type ProjectOutput = ThingOutput & { readonly slogan: readonly string[]; }; -const projectEntries = { - ...jsonLinkedDataEntries, - slogan: jsonLinkedDataProperty(string()) -}; - const projectSchema: GenericSchema = intersect([ lazy(() => thingSchema), - object(projectEntries) + object({ + ...jsonLinkedDataEntries, + slogan: jsonLinkedDataProperty(string()) + }) ]); /** @deprecated Use Valibot.parse(projectSchema) instead. Will be removed on or after 2028-04-23. */ const parseProject = (project: ProjectInput): ProjectOutput => parse(projectSchema, project); -export { parseProject, projectEntries, projectSchema, type ProjectInput, type ProjectOutput }; +export { parseProject, projectSchema, type ProjectInput, type ProjectOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index 89da7608b6..25671006c6 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -106,7 +106,7 @@ type ThingOutput = JSONLinkedDataOutput & { readonly url: readonly string[]; }; -const thingEntries = { +const thingSchema: GenericSchema = object({ ...jsonLinkedDataEntries, additionalType: jsonLinkedDataProperty(string()), alternateName: jsonLinkedDataProperty(string()), @@ -114,11 +114,9 @@ const thingEntries = { name: jsonLinkedDataProperty(string()), potentialAction: jsonLinkedDataProperty(lazy(() => actionSchema)), url: jsonLinkedDataProperty(string()) -}; - -const thingSchema: GenericSchema = object(thingEntries); +}); /** @deprecated Use Valibot.parse(thingSchema) instead. Will be removed on or after 2028-04-23. */ const parseThing = (thing: ThingInput): ThingOutput => parse(thingSchema, thing); -export { parseThing, thingEntries, thingSchema, type ThingInput, type ThingOutput }; +export { parseThing, thingSchema, type ThingInput, type ThingOutput }; diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index 1de33b93d1..9bec06bfe3 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -32,17 +32,15 @@ type UserReviewOutput = ThingOutput & { readonly reviewAspect: readonly string[]; }; -const userReviewEntries = { - ...jsonLinkedDataEntries, - reviewAspect: jsonLinkedDataProperty(string()) -}; - const userReviewSchema: GenericSchema = intersect([ lazy(() => thingSchema), - object(userReviewEntries) + object({ + ...jsonLinkedDataEntries, + reviewAspect: jsonLinkedDataProperty(string()) + }) ]); /** @deprecated Use Valibot.parse(userReviewSchema) instead. Will be removed on or after 2028-04-23. */ const parseUserReview = (userReview: UserReviewInput): UserReviewOutput => parse(userReviewSchema, userReview); -export { parseUserReview, userReviewEntries, userReviewSchema, type UserReviewInput, type UserReviewOutput }; +export { parseUserReview, userReviewSchema, type UserReviewInput, type UserReviewOutput }; diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index 86822707d2..16e4bd1747 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,8 +1,8 @@ import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; import { jsonLinkedDataEntries } from './JSONLinkedData'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. @@ -40,18 +40,15 @@ type VoteActionOutput = ActionOutput & { readonly actionOption: readonly string[]; }; -const voteActionEntries = { - ...jsonLinkedDataEntries, - // ...actionEntries, - actionOption: jsonLinkedDataProperty(string()) -}; - const voteActionSchema: GenericSchema = intersect([ lazy(() => actionSchema), - object(voteActionEntries) + object({ + ...jsonLinkedDataEntries, + actionOption: jsonLinkedDataProperty(string()) + }) ]); /** @deprecated Use Valibot.parse(voteActionSchema) instead. Will be removed on or after 2028-04-23. */ const parseVoteAction = (voteAction: VoteActionInput): VoteActionOutput => parse(voteActionSchema, voteAction); -export { parseVoteAction, voteActionEntries, voteActionSchema, type VoteActionInput, type VoteActionOutput }; +export { parseVoteAction, voteActionSchema, type VoteActionInput, type VoteActionOutput }; From 27d11328e25faa50e76d8719a691c78951b8b162 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 18:58:44 +0000 Subject: [PATCH 067/108] Fix feedback form --- .../component/src/ActivityFeedback/ActivityFeedback.tsx | 2 +- .../src/ActivityFeedback/private/hasFeedbackLoop.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/component/src/ActivityFeedback/ActivityFeedback.tsx b/packages/component/src/ActivityFeedback/ActivityFeedback.tsx index 4e9e2d0db0..1289438fe6 100644 --- a/packages/component/src/ActivityFeedback/ActivityFeedback.tsx +++ b/packages/component/src/ActivityFeedback/ActivityFeedback.tsx @@ -57,7 +57,7 @@ function InternalActivityFeedback() { // Hide feedback form if feedback has already been submitted or it does not require UserReview. const isExpanded = useMemo( - () => !hasSubmitted && selectedAction?.result?.['@type'] === 'UserReview', + () => !hasSubmitted && selectedAction?.result[0]?.['@type'] === 'UserReview', [hasSubmitted, selectedAction] ); diff --git a/packages/component/src/ActivityFeedback/private/hasFeedbackLoop.ts b/packages/component/src/ActivityFeedback/private/hasFeedbackLoop.ts index 8b490a364c..23b50abaaf 100644 --- a/packages/component/src/ActivityFeedback/private/hasFeedbackLoop.ts +++ b/packages/component/src/ActivityFeedback/private/hasFeedbackLoop.ts @@ -1,5 +1,5 @@ import { type WebChatActivity } from 'botframework-webchat-core'; -import { literal, object, optional, safeParse, string, union, type InferOutput } from 'valibot'; +import { is, literal, object, optional, string, union, type InferOutput } from 'valibot'; const activityWithFeedbackLoopSchemaWithDisclaimer = object({ channelData: object({ @@ -31,12 +31,12 @@ type FeedbackActivity = WebChatActivity & InferOutput export function hasDisclaimer( activity: WebChatActivity ): activity is WebChatActivity & InferOutput { - return safeParse(activityWithFeedbackLoopSchemaWithDisclaimer, activity).success; + return is(activityWithFeedbackLoopSchemaWithDisclaimer, activity); } /** * @deprecated This helper function should only use for patching the service. After patching, should use `isActionRequireReview` instead. */ export default function hasFeedbackLoop(activity: WebChatActivity): activity is FeedbackActivity { - return safeParse(feedbackLoopSchema, activity).success; + return is(feedbackLoopSchema, activity); } From faba458605fb2a9ced87bc5017e0fdd22d622eb5 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 20:26:43 +0000 Subject: [PATCH 068/108] Fix actions for feedback --- .../private/FeedbackVoteButton.tsx | 38 ++++---- .../providers/ActivityFeedbackComposer.tsx | 87 ++++++++++++------- 2 files changed, 73 insertions(+), 52 deletions(-) diff --git a/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx b/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx index 95b073afde..194784f0ec 100644 --- a/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx +++ b/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx @@ -1,18 +1,18 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { hooks } from 'botframework-webchat-api'; -import { onErrorResumeNext, orgSchemaVoteActionSchema, type OrgSchemaAction } from 'botframework-webchat-core'; +import { onErrorResumeNext, orgSchemaActionSchema, orgSchemaVoteActionSchema } from 'botframework-webchat-core'; import React, { memo, useCallback, useMemo, useRef } from 'react'; import { useRefFrom } from 'use-ref-from'; import { - custom, + intersect, literal, object, - optional, parse, + picklist, pipe, readonly, - safeParse, string, + tuple, union, type InferInput } from 'valibot'; @@ -27,21 +27,21 @@ const { useLocalizer, useStyleOptions } = hooks; const feedbackVoteButtonPropsSchema = pipe( object({ - action: custom( - value => - safeParse( - union([ - object({ - '@type': union([literal('DislikeAction'), literal('LikeAction')]) - }), - object({ - '@type': literal('VoteAction'), - actionOption: optional(union([literal('downvote'), literal('upvote')])) - }) - ]), - value - ).success - ), + action: union([ + intersect([ + orgSchemaActionSchema, + object({ + '@type': picklist(['DislikeAction', 'LikeAction']) + }) + ]), + intersect([ + orgSchemaVoteActionSchema, + object({ + '@type': literal('VoteAction'), + actionOption: tuple([picklist(['downvote', 'upvote'])]) + }) + ]) + ]), as: union([literal('button'), literal('radio')]), name: string() }), diff --git a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx index 85c70e17d1..c0a9ddd799 100644 --- a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +++ b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx @@ -40,6 +40,41 @@ type ActionState = Readonly<{ const DEBOUNCE_TIMEOUT = 500; +/** + * Patch `OrgSchemaAction` for simpler logic down the road: + * + * 1. If no `@id`, generate a random `@id` + * 2. If `channelData.feedbackLoop.disclaimer` presents (a deprecated property), move it to `action.result.description` + * + * @param activity Activity to read `channelData` + * @param actions Actions to patch + * @returns New instances of patched actions + */ +function patchActions(activity: WebChatActivity, actions: readonly OrgSchemaAction[]): readonly OrgSchemaAction[] { + actions = actions.map(action => + // eslint-disable-next-line no-magic-numbers + action['@id'] ? action : Object.freeze({ ...action, '@id': `_:${random().toString(36).substring(2, 7)}` }) + ); + + const deprecatedFeedbackLoopChannelData = activity.channelData?.feedbackLoop; + + if (deprecatedFeedbackLoopChannelData) { + actions = actions.map(action => + action.result + ? action + : parse(orgSchemaActionSchema, { + ...action, + result: { + '@type': 'UserReview', + description: deprecatedFeedbackLoopChannelData?.disclaimer + } + }) + ); + } + + return Object.freeze(actions); +} + function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { const { children, activity: activityFromProps } = validateProps(activityFeedbackComposerPropsSchema, props); @@ -101,47 +136,32 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { ); const rawActions = useMemo(() => { - function patchActions(actions: readonly OrgSchemaAction[]) { - actions = actions.map(action => - // eslint-disable-next-line no-magic-numbers - action['@id'] ? action : Object.freeze({ ...action, '@id': `_:${random().toString(36).substring(2, 7)}` }) - ); - - const deprecatedFeedbackLoopChannelData = activity.channelData?.feedbackLoop; - - if (deprecatedFeedbackLoopChannelData) { - actions = actions.map(action => - action.result - ? action - : parse(orgSchemaActionSchema, { - ...action, - result: { - '@type': 'UserReview', - description: deprecatedFeedbackLoopChannelData?.disclaimer - } - }) - ); - } - - return actions; - } - try { const graph = dereferenceBlankNodes(activity.entities || []); const messageThing = getOrgSchemaMessage(graph); - const reactActions = Object.freeze( - messageThing?.potentialAction.filter(({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction') + const reactActions: readonly OrgSchemaAction[] = Object.freeze( + messageThing?.potentialAction.filter( + ({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction' + ) ?? [] ); if (reactActions.length) { - return patchActions(reactActions); + return patchActions(activity, reactActions); } const voteActions = Object.freeze( - graph - .filter(({ type }) => type === 'https://schema.org/VoteAction') - .map(action => parse(orgSchemaActionSchema, action)) + graph.reduce((result, item) => { + const parseResult = safeParse(orgSchemaActionSchema, item); + + if (parseResult.success) { + const { output } = parseResult; + + output.actionOption[0] && result.push(output); + } + + return result; + }, []) // TODO: Instead of processing VoteAction, convert it to LikeAction/DislikeAction. // .map(action => ({ // ...action, @@ -151,10 +171,11 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { if (voteActions.length) { // VoteAction is deprecated and was never published publicly. - return patchActions(voteActions); + return patchActions(activity, voteActions); } - } catch { + } catch (error) { // Intentionally left blank. + console.warn('botframework-webchat: Internal error in ', error); } return Object.freeze([]); From 38e2be4fbd9e30c94e3f7e0d3728b08a157ba160 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 21:34:17 +0000 Subject: [PATCH 069/108] Fix reading disclaimer --- .../private/getDisclaimerFromFeedbackLoop.ts | 2 +- .../private/getDisclaimerFromReviewAction.ts | 6 +++--- .../providers/ActivityFeedbackComposer.tsx | 7 ++++++- .../core/src/types/external/OrgSchema/JSONLinkedData.ts | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/component/src/ActivityFeedback/private/getDisclaimerFromFeedbackLoop.ts b/packages/component/src/ActivityFeedback/private/getDisclaimerFromFeedbackLoop.ts index b91da3e5db..062514f706 100644 --- a/packages/component/src/ActivityFeedback/private/getDisclaimerFromFeedbackLoop.ts +++ b/packages/component/src/ActivityFeedback/private/getDisclaimerFromFeedbackLoop.ts @@ -5,6 +5,6 @@ import { hasDisclaimer } from './hasFeedbackLoop'; /** * @deprecated This helper function should only use for patching the service. After patching, should use `getDisclaimerFromReviewAction` instead. */ -export default function getDisclaimer(activity: WebChatActivity): string | undefined { +export default function getDisclaimerFromFeedbackLoop(activity: WebChatActivity): string | undefined { return hasDisclaimer(activity) ? activity.channelData.feedbackLoop.disclaimer : undefined; } diff --git a/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts b/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts index 00f434bd40..20bd5ed713 100644 --- a/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts +++ b/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts @@ -1,8 +1,8 @@ -import { orgSchemaUserReviewSchema, type OrgSchemaAction } from 'botframework-webchat-core'; +import { orgSchemaUserReviewSchema, type OrgSchemaAction, type OrgSchemaThing } from 'botframework-webchat-core'; import { safeParse } from 'valibot'; export default function getDisclaimerFromActivity(action: OrgSchemaAction): string | undefined { - const userReview = safeParse(orgSchemaUserReviewSchema, action.result); + const parseResult = safeParse(orgSchemaUserReviewSchema, action.result[0] satisfies OrgSchemaThing); - return userReview.success ? userReview.output.reviewAspect[0] : undefined; + return parseResult.success ? parseResult.output.reviewAspect[0] : undefined; } diff --git a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx index c0a9ddd799..17885d3cc0 100644 --- a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +++ b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx @@ -59,6 +59,11 @@ function patchActions(activity: WebChatActivity, actions: readonly OrgSchemaActi const deprecatedFeedbackLoopChannelData = activity.channelData?.feedbackLoop; if (deprecatedFeedbackLoopChannelData) { + // TODO: Find the date we deprecated the channelData. + console.warn( + 'botframework-webchat: `channelData.feedbackLoop` is deprecated, use `entities[@type="Message"][@id=""].potentialAction[@type="Action"].result[@type="UserReview"].description instead. It will be removed on or after YYYY-MM-DD.' + ); + actions = actions.map(action => action.result ? action @@ -66,7 +71,7 @@ function patchActions(activity: WebChatActivity, actions: readonly OrgSchemaActi ...action, result: { '@type': 'UserReview', - description: deprecatedFeedbackLoopChannelData?.disclaimer + reviewAspect: deprecatedFeedbackLoopChannelData.disclaimer } }) ); diff --git a/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts b/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts index cc213cd193..8b1de1cafb 100644 --- a/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts +++ b/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts @@ -5,7 +5,7 @@ type JSONLinkedDataInput = { readonly '@context'?: 'https://schema.org' | undefined; readonly '@id'?: string | string[] | undefined; // readonly '@type'?: string | string[] | undefined; - readonly '@type'?: string | string[] | undefined; + readonly '@type'?: string | undefined; }; type JSONLinkedDataOutput = { From 28fc5309ac549cb13edd758ec0ea93bb37c92d2b Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 21:36:37 +0000 Subject: [PATCH 070/108] Fix action require review check --- .../src/ActivityFeedback/private/isActionRequireReview.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/component/src/ActivityFeedback/private/isActionRequireReview.ts b/packages/component/src/ActivityFeedback/private/isActionRequireReview.ts index 4838378dd9..a1b94bb389 100644 --- a/packages/component/src/ActivityFeedback/private/isActionRequireReview.ts +++ b/packages/component/src/ActivityFeedback/private/isActionRequireReview.ts @@ -3,5 +3,5 @@ import { type OrgSchemaAction } from 'botframework-webchat-core'; export default function isActionRequireReview( action: OrgSchemaAction | undefined ): action is OrgSchemaAction & { result: { '@type': 'UserReview' } } { - return action?.result?.['@type'] === 'UserReview'; + return action?.result[0]?.['@type'] === 'UserReview'; } From 95c8753e2ee0573f8e4db60223bd5f85bcd5e4d9 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 22:58:31 +0000 Subject: [PATCH 071/108] Fix deprecation message --- packages/bundle/src/boot/exports/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bundle/src/boot/exports/index.ts b/packages/bundle/src/boot/exports/index.ts index 5882def253..cadc5d0d02 100644 --- a/packages/bundle/src/boot/exports/index.ts +++ b/packages/bundle/src/boot/exports/index.ts @@ -20,7 +20,7 @@ import * as hooks from '../actual/hook/full'; const deprecatedHooks = deprecateObject( hooks, - "`import { hooks } from 'botframework-webchat'` has been deprecated, use `import { %s } from 'botframework-webchat/hook'` instead." + "`import { hooks } from 'botframework-webchat'` has been deprecated, use `import { %s } from 'botframework-webchat/hook.js'` instead." ) as typeof hooks; // Need explicit type casting. export { deprecatedHooks as hooks }; @@ -29,7 +29,7 @@ import * as Components from '../actual/component/full'; const deprecatedComponents = deprecateObject( Components, - "`import { Components } from 'botframework-webchat'` has been deprecated, use `import { %s } from 'botframework-webchat/component'` instead." + "`import { Components } from 'botframework-webchat'` has been deprecated, use `import { %s } from 'botframework-webchat/component.js'` instead." ) as typeof Components; // Need explicit type casting. export { deprecatedComponents as Components }; From a5f5fb7383f9d9ea2ca50efa94e65466d5242885 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 23:03:49 +0000 Subject: [PATCH 072/108] Add react/* to import map --- __tests__/html2/fluentTheme/maxMessageLength.html | 1 + __tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html | 1 + __tests__/html2/simple/fatModule/esm.sh/tsx/simple.html | 1 + .../tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html | 1 + 4 files changed, 4 insertions(+) diff --git a/__tests__/html2/fluentTheme/maxMessageLength.html b/__tests__/html2/fluentTheme/maxMessageLength.html index 662e1ccd68..1db3483a70 100644 --- a/__tests__/html2/fluentTheme/maxMessageLength.html +++ b/__tests__/html2/fluentTheme/maxMessageLength.html @@ -16,6 +16,7 @@ "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "https://esm.sh/react@18", + "react/": "https://esm.sh/react@18/", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" } diff --git a/__tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html b/__tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html index 76e8b17d07..8b8d06cfa4 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html +++ b/__tests__/html2/simple/fatModule/esm.sh/tsx/fluentTheme.html @@ -22,6 +22,7 @@ "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "https://esm.sh/react@18", + "react/": "https://esm.sh/react@18/", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" } diff --git a/__tests__/html2/simple/fatModule/esm.sh/tsx/simple.html b/__tests__/html2/simple/fatModule/esm.sh/tsx/simple.html index b796180880..299f5aa6cd 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/tsx/simple.html +++ b/__tests__/html2/simple/fatModule/esm.sh/tsx/simple.html @@ -13,6 +13,7 @@ "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", + "react/": "https://esm.sh/react@18/", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" } diff --git a/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html b/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html index 15853a8cb1..d7e62ff4c8 100644 --- a/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html +++ b/__tests__/html2/simple/fatModule/esm.sh/tsx/supportPolymiddleware.reactDOMRender.withCreateRoot.html @@ -13,6 +13,7 @@ "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "react": "https://esm.sh/react@18", + "react/": "https://esm.sh/react@18/", "react-dom": "https://esm.sh/react-dom@18", "react-dom/": "https://esm.sh/react-dom@18/" } From 4615ec89a865e0aa7044b8c03613d945094c2fca Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 29 Apr 2026 23:46:09 +0000 Subject: [PATCH 073/108] Fix outgoing type --- .../feedbackActivityStatus.click.html | 16 ++++++++-------- .../providers/ActivityFeedbackComposer.tsx | 10 +++++++++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/__tests__/html2/feedbackStatus/feedbackActivityStatus.click.html b/__tests__/html2/feedbackStatus/feedbackActivityStatus.click.html index f45b602055..b426f1d3fb 100644 --- a/__tests__/html2/feedbackStatus/feedbackActivityStatus.click.html +++ b/__tests__/html2/feedbackStatus/feedbackActivityStatus.click.html @@ -70,12 +70,12 @@ 'activity', expect.objectContaining({ entities: expect.arrayContaining([ - { + expect.objectContaining({ '@context': 'https://schema.org', '@type': 'VoteAction', - type: 'https://schema.org/VoteAction', - actionOption: 'upvote' - } + actionOption: 'upvote', + type: 'https://schema.org/VoteAction' + }) ]), name: 'webchat:activity-status/feedback', type: 'event' @@ -97,12 +97,12 @@ 'activity', expect.objectContaining({ entities: expect.arrayContaining([ - { + expect.objectContaining({ '@context': 'https://schema.org', '@type': 'VoteAction', type: 'https://schema.org/VoteAction', actionOption: 'downvote' - } + }) ]), name: 'webchat:activity-status/feedback', type: 'event' @@ -125,12 +125,12 @@ 'activity', expect.objectContaining({ entities: expect.arrayContaining([ - { + expect.objectContaining({ '@context': 'https://schema.org', '@type': 'VoteAction', type: 'https://schema.org/VoteAction', actionOption: 'downvote' - } + }) ]), name: 'webchat:activity-status/feedback', type: 'event' diff --git a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx index 17885d3cc0..19a6d60475 100644 --- a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +++ b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx @@ -261,8 +261,16 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { } } as any); } else { + const entity = isLegacyAction ? rest : action; + postActivity({ - entities: [isLegacyAction ? rest : action], + entities: [ + { + ...entity, + actionOption: entity.actionOption[0], // TODO: Service should accept plural. + type: new URL(entity['@type'] ?? '', entity['@context'] ?? 'https://schema.org').href + } + ], name: 'webchat:activity-status/feedback', type: 'event' } as any); From 8d3e8d8c96073f05f5ef36d99ed2c123049fe82d Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 01:12:37 +0000 Subject: [PATCH 074/108] Fix debug theme bundling --- packages/debug-theme/tsup.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/debug-theme/tsup.config.ts b/packages/debug-theme/tsup.config.ts index 329296705e..a9bd0944bd 100644 --- a/packages/debug-theme/tsup.config.ts +++ b/packages/debug-theme/tsup.config.ts @@ -21,7 +21,7 @@ const umdResolvePlugin = { // ESBuild use Go regular expressions and does not understand Unicode flag. // eslint-disable-next-line require-unicode-regexp - build.onResolve({ filter: /^botframework-webchat-api\/middleware$/ }, () => ({ + build.onResolve({ filter: /^botframework-webchat-api\/middleware\.js$/ }, () => ({ path: join(fileURLToPath(import.meta.url), '../src/external.umd/botframework-webchat-api/middleware.ts') })); @@ -33,7 +33,7 @@ const umdResolvePlugin = { // ESBuild use Go regular expressions and does not understand Unicode flag. // eslint-disable-next-line require-unicode-regexp - build.onResolve({ filter: /^botframework-webchat-component\/internal$/ }, () => ({ + build.onResolve({ filter: /^botframework-webchat-component\/internal\.js$/ }, () => ({ path: join(fileURLToPath(import.meta.url), '../src/external.umd/botframework-webchat-component/internal.ts') })); } From 903d0282f4de2107b81de914c7d865456c15ffba Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 01:23:55 +0000 Subject: [PATCH 075/108] Replace safeParse().success with is() --- AGENTS.md | 2 +- .../api-graph/src/private/GraphProvider.tsx | 4 +- .../src/PolymiddlewareComposer.tsx | 15 +------ .../src/activityPolymiddleware.tsx | 4 +- .../src/avatarPolymiddleware.tsx | 4 +- .../src/private/templatePolymiddleware.tsx | 10 ++--- .../api/src/decorator/DecoratorComposer.tsx | 4 +- ...createActivityPolymiddlewareFromLegacy.tsx | 10 ++--- .../createAvatarPolymiddlewareFromLegacy.tsx | 4 +- .../middleware/AvatarPolymiddlewareProxy.tsx | 4 +- .../middleware/private/templateMiddleware.tsx | 4 +- .../StyleOptions/StyleOptionsComposer.tsx | 4 +- .../providers/ActivityFeedbackComposer.tsx | 4 +- .../src/Attachment/ImageAttachment.tsx | 35 ++++++++-------- .../src/Attachment/Text/TextAttachment.tsx | 4 +- .../Text/private/ActivityButton.tsx | 4 +- .../ui/LegacyActivityBridgeComposer.tsx | 4 +- .../ui/PartGrouping/PartGrouping.tsx | 6 +-- .../private/PartGroupingActivity.tsx | 17 ++------ .../ui/RenderActivityGrouping.tsx | 4 +- .../AttachmentBar/AttachmentBarItem.tsx | 4 +- packages/component/src/SendBox/IconButton.tsx | 15 +------ .../component/src/Utils/AccessibleButton.tsx | 4 +- .../component/src/Utils/FocusRedirector.tsx | 4 +- .../RovingTabIndex/RovingTabIndexComposer.tsx | 4 +- .../src/providers/Theme/ThemeProvider.tsx | 42 +++++++------------ .../src/types/internal/mutableRefObject.ts | 4 +- .../component/src/types/internal/refObject.ts | 4 +- .../src/private/schemas/flattenNodeObject.ts | 4 +- .../core/src/actions/registerActionSink.ts | 4 +- .../core/src/actions/setSuggestedActions.ts | 6 +-- .../core/src/actions/unregisterActionSink.ts | 4 +- .../utils/voiceActivity/isVoiceActivity.ts | 4 +- .../isVoiceTranscriptActivity.ts | 4 +- .../activity/CopilotMessageHeader.tsx | 4 +- .../activity/PartGroupingDecorator.tsx | 4 +- packages/react-valibot/src/validateProps.ts | 4 +- .../src/private/reduxStoreSchema.ts | 12 +++--- 38 files changed, 115 insertions(+), 163 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index b469f44c1c..410f82e8ef 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -46,7 +46,7 @@ - All optional properties must be `undefined`-able, i.e. use `value?: number | undefined` over `value?: number` - For functions exported outside of current file, make sure all arguments and return value are typed - If need to look inside the object to check for types, use `valibot` - - E.g. `if (obj && typeof obj === 'object' && 'value' in obj && typeof obj.value === 'string')` should be replaced with `safeParse(object({ value: string }), obj).success` + - E.g. `if (obj && typeof obj === 'object' && 'value' in obj && typeof obj.value === 'string')` should be replaced with `is(object({ value: string }), obj)` - Use `{ readonly value: string }` instead of `Readonly<{ value: string }>` - Use as much `readonly` as possible diff --git a/packages/api-graph/src/private/GraphProvider.tsx b/packages/api-graph/src/private/GraphProvider.tsx index 6a963943d9..d4e7b46a96 100644 --- a/packages/api-graph/src/private/GraphProvider.tsx +++ b/packages/api-graph/src/private/GraphProvider.tsx @@ -8,7 +8,7 @@ import { type Identifier } from 'botframework-webchat-core/graph.js'; import React, { memo, useEffect, useMemo, useState } from 'react'; -import { custom, function_, object, optional, parse, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { custom, function_, is, object, optional, parse, pipe, readonly, type InferInput } from 'valibot'; import GraphContext, { graphContextSchema, GraphContextType } from './GraphContext'; @@ -18,7 +18,7 @@ const graphProviderPropsSchema = pipe( object({ children: optional(reactNode()), store: custom>( - value => safeParse(object({ getState: function_(), subscribe: function_() }), value).success + value => is(object({ getState: function_(), subscribe: function_() }), value) ) }), readonly() diff --git a/packages/api-middleware/src/PolymiddlewareComposer.tsx b/packages/api-middleware/src/PolymiddlewareComposer.tsx index 79c6179f4f..dcafc13703 100644 --- a/packages/api-middleware/src/PolymiddlewareComposer.tsx +++ b/packages/api-middleware/src/PolymiddlewareComposer.tsx @@ -1,18 +1,7 @@ import { useMemoIterable } from '@msinternal/botframework-webchat-react-hooks'; import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import React, { memo, useMemo } from 'react'; -import { - array, - custom, - function_, - object, - optional, - pipe, - readonly, - safeParse, - transform, - type InferInput -} from 'valibot'; +import { array, custom, function_, is, object, optional, pipe, readonly, transform, type InferInput } from 'valibot'; import { ActivityPolymiddlewareProvider, extractActivityEnhancer } from './activityPolymiddleware'; import { AvatarPolymiddlewareProvider, extractAvatarEnhancer } from './avatarPolymiddleware'; @@ -23,7 +12,7 @@ const polymiddlewareComposerPropsSchema = pipe( object({ children: optional(reactNode()), polymiddleware: pipe( - custom(value => safeParse(array(function_()), value).success), + custom(value => is(array(function_()), value)), transform(value => Object.freeze(Array.from(value))) ) }), diff --git a/packages/api-middleware/src/activityPolymiddleware.tsx b/packages/api-middleware/src/activityPolymiddleware.tsx index 39cc8f3bad..f375555899 100644 --- a/packages/api-middleware/src/activityPolymiddleware.tsx +++ b/packages/api-middleware/src/activityPolymiddleware.tsx @@ -1,7 +1,7 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { type WebChatActivity } from 'botframework-webchat-core'; import React, { memo, useMemo } from 'react'; -import { custom, object, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { custom, is, object, pipe, readonly, type InferInput } from 'valibot'; import createErrorBoundaryMiddleware from './private/createErrorBoundaryMiddleware'; import templatePolymiddleware, { @@ -33,7 +33,7 @@ type ActivityPolymiddlewareProviderProps = InferProviderProps; const activityPolymiddlewareProxyPropsSchema = pipe( object({ - activity: custom>(value => safeParse(object({}), value).success) + activity: custom>(value => is(object({}), value)) }), readonly() ); diff --git a/packages/api-middleware/src/avatarPolymiddleware.tsx b/packages/api-middleware/src/avatarPolymiddleware.tsx index d57e789425..2f55146980 100644 --- a/packages/api-middleware/src/avatarPolymiddleware.tsx +++ b/packages/api-middleware/src/avatarPolymiddleware.tsx @@ -1,7 +1,7 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { type WebChatActivity } from 'botframework-webchat-core'; import React, { memo, useMemo } from 'react'; -import { any, custom, object, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { any, custom, is, object, pipe, readonly, type InferInput } from 'valibot'; import templatePolymiddleware, { type InferHandler, @@ -44,7 +44,7 @@ type AvatarPolymiddlewareProviderProps = InferProviderProps>(value => safeParse(object({}), value).success) + activity: custom>(value => is(object({}), value)) }), readonly() ); diff --git a/packages/api-middleware/src/private/templatePolymiddleware.tsx b/packages/api-middleware/src/private/templatePolymiddleware.tsx index db84af06b7..bdab9e4f9f 100644 --- a/packages/api-middleware/src/private/templatePolymiddleware.tsx +++ b/packages/api-middleware/src/private/templatePolymiddleware.tsx @@ -11,12 +11,12 @@ import { type ProviderProps, type ProxyProps } from 'react-chain-of-responsibility/preview'; -import { array, check, function_, literal, parse, pipe, safeParse, union, type InferOutput } from 'valibot'; +import { array, check, function_, is, literal, parse, pipe, union, type InferOutput } from 'valibot'; const arrayOfFunctionSchema = array(function_()); const isArrayOfFunction = (middleware: unknown): middleware is InferOutput => - safeParse(arrayOfFunctionSchema, middleware).success; + is(arrayOfFunctionSchema, middleware); const BYPASS_ENHANCER: Enhancer = next => request => next(request); const DEBUG_ENHANCER_SYMBOL = Symbol('OriginalEnhancer'); @@ -43,9 +43,7 @@ function templatePolymiddleware(name: string) { function_(), check(value => value === BYPASS_ENHANCER || middlewareFactoryTag in value) ), - literal(false) - ]); - + literal(false)true const createMiddleware = (enhancer: TemplatedEnhancer): TemplatedMiddleware => { parse(function_(`botframework-webchat: ${name} enhancer must be of type function.`), enhancer); @@ -89,7 +87,7 @@ function templatePolymiddleware(name: string) { console.warn(`botframework-webchat: ${name}.middleware must return enhancer function or false`); return false; - } else if (!safeParse(middlewareSchema, result).success) { + } else if (!is(middlewareSchema, result)) { console.warn(`botframework-webchat: ${name}.middleware must be created using factory function`); return false; diff --git a/packages/api/src/decorator/DecoratorComposer.tsx b/packages/api/src/decorator/DecoratorComposer.tsx index f78367f451..ac82fc2b63 100644 --- a/packages/api/src/decorator/DecoratorComposer.tsx +++ b/packages/api/src/decorator/DecoratorComposer.tsx @@ -1,6 +1,6 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import React, { Fragment, memo, useMemo } from 'react'; -import { array, custom, object, optional, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { array, custom, is, object, optional, pipe, readonly, type InferInput } from 'valibot'; import { middlewareFactoryMarker } from '../middleware/private/templateMiddleware'; import InternalDecoratorComposer from './internal/InternalDecoratorComposer'; @@ -29,7 +29,7 @@ function DecoratorComposer(props: DecoratorComposerProps) { const { children, middleware } = validateProps(decoratorComposerPropsSchema, props); useMemo(() => { - if (!safeParse(warnInvalidMiddlewarePropsSchema, middleware).success) { + if (!is(warnInvalidMiddlewarePropsSchema, middleware)) { console.warn( 'botframework-webchat: "middleware" props passed to should be created using createXXXMiddleware() functions.', { middleware } diff --git a/packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx b/packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx index a1f8c1e076..9b0d73ddb7 100644 --- a/packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx +++ b/packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx @@ -14,13 +14,13 @@ import { boolean, custom, function_, + is, literal, never, object, optional, pipe, readonly, - safeParse, union, type InferInput } from 'valibot'; @@ -28,7 +28,7 @@ import { import LegacyActivityBridge from './LegacyActivityBridge'; const DEBUG_ORIGINAL_LEGACY_MIDDLEWARE_SYMBOL = Symbol('OriginalLegacyMiddleware'); -const webChatActivitySchema = custom(value => safeParse(object({}), value).success); +const webChatActivitySchema = custom(value => is(object({}), value)); type LegacyRenderFunction = ( renderAttachment: LegacyRenderAttachment, @@ -44,17 +44,17 @@ const legacyActivityBridgeComponentPropsSchema = pipe( object({ activity: webChatActivitySchema, children: optional(never()), - render: custom(value => safeParse(function_(), value).success), + render: custom(value => is(function_(), value)), // The following extraneous props should be removed once `useCreateActivityRenderer()` is removed. hideTimestamp: optional(boolean()), renderActivityStatus: optional( - custom<(options: { hideTimestamp: boolean }) => ReactNode>(value => safeParse(function_(), value).success) + custom<(options: { hideTimestamp: boolean }) => ReactNode>(value => is(function_(), value)) ), renderAvatar: optional( union([ literal(false), - custom<() => Exclude>(value => safeParse(function_(), value).success) + custom<() => Exclude>(value => is(function_(), value)) ]) ), showCallout: optional(boolean()) diff --git a/packages/api/src/legacy/createAvatarPolymiddlewareFromLegacy.tsx b/packages/api/src/legacy/createAvatarPolymiddlewareFromLegacy.tsx index fd3b9f31e5..e6e0cb254c 100644 --- a/packages/api/src/legacy/createAvatarPolymiddlewareFromLegacy.tsx +++ b/packages/api/src/legacy/createAvatarPolymiddlewareFromLegacy.tsx @@ -8,14 +8,14 @@ import { import { type LegacyAvatarMiddleware } from '@msinternal/botframework-webchat-api-middleware/legacy'; import { composeEnhancer } from 'handler-chain'; import React, { Fragment, memo, type ReactNode } from 'react'; -import { custom, function_, never, object, optional, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { custom, function_, is, never, object, optional, pipe, readonly, type InferInput } from 'valibot'; type LegacyAvatarRenderFunction = () => Exclude; const legacyAvatarBridgeComponentPropsSchema = pipe( object({ children: optional(never()), - renderFn: custom(value => safeParse(function_(), value).success) + renderFn: custom(value => is(function_(), value)) }), readonly() ); diff --git a/packages/api/src/middleware/AvatarPolymiddlewareProxy.tsx b/packages/api/src/middleware/AvatarPolymiddlewareProxy.tsx index 3d9908b205..471f2b4985 100644 --- a/packages/api/src/middleware/AvatarPolymiddlewareProxy.tsx +++ b/packages/api/src/middleware/AvatarPolymiddlewareProxy.tsx @@ -13,12 +13,12 @@ import { import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import type { WebChatActivity } from 'botframework-webchat-core'; import React, { memo, useMemo } from 'react'; -import { custom, object, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { custom, is, object, pipe, readonly, type InferInput } from 'valibot'; import { useStyleOptions } from '../hooks'; const avatarPolymiddlewareProxyPropsSchema = pipe( object({ - activity: custom>(value => safeParse(object({}), value).success) + activity: custom>(value => is(object({}), value)) }), readonly() ); diff --git a/packages/api/src/middleware/private/templateMiddleware.tsx b/packages/api/src/middleware/private/templateMiddleware.tsx index 7e8dc6da01..2ab0a3fcc4 100644 --- a/packages/api/src/middleware/private/templateMiddleware.tsx +++ b/packages/api/src/middleware/private/templateMiddleware.tsx @@ -1,7 +1,7 @@ import { warnOnce } from '@msinternal/botframework-webchat-base/utils'; import React, { memo, type ReactNode } from 'react'; import { createChainOfResponsibility, type ComponentMiddleware } from 'react-chain-of-responsibility'; -import { array, function_, safeParse, type InferOutput } from 'valibot'; +import { array, function_, is, type InferOutput } from 'valibot'; type MiddlewareWithInit, I> = (init: I) => ReturnType | false; @@ -11,7 +11,7 @@ const arrayOfFunctionSchema = array(function_()); const middlewareFactoryMarker = Symbol(); const isArrayOfFunction = (middleware: unknown): middleware is InferOutput => - safeParse(arrayOfFunctionSchema, middleware).success; + is(arrayOfFunctionSchema, middleware); const EMPTY_ARRAY = Object.freeze([]); diff --git a/packages/api/src/providers/StyleOptions/StyleOptionsComposer.tsx b/packages/api/src/providers/StyleOptions/StyleOptionsComposer.tsx index 095e3636dd..7585c43c94 100644 --- a/packages/api/src/providers/StyleOptions/StyleOptionsComposer.tsx +++ b/packages/api/src/providers/StyleOptions/StyleOptionsComposer.tsx @@ -1,6 +1,6 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import React, { memo, useMemo } from 'react'; -import { custom, object, optional, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { custom, is, object, optional, pipe, readonly, type InferInput } from 'valibot'; import { type StyleOptions } from '../../StyleOptions'; import StyleOptionsContext, { StyleOptionsContextType, useStyleOptionsContext } from './private/StyleOptionsContext'; @@ -9,7 +9,7 @@ import rectifyStyleOptions from './private/rectifyStyleOptions'; const styleOptionsComposerPropsSchema = pipe( object({ children: optional(reactNode()), - styleOptions: optional(custom(value => safeParse(object({}), value).success)) + styleOptions: optional(custom(value => is(object({}), value))) }), readonly() ); diff --git a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx index 19a6d60475..299950e814 100644 --- a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +++ b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx @@ -11,7 +11,7 @@ import React, { memo, useCallback, useMemo, useRef, useState, type Dispatch, typ import { wrapWith } from 'react-wrap-with'; import { useRefFrom } from 'use-ref-from'; import { useStateWithRef } from 'use-state-with-ref'; -import { custom, object, optional, parse, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { custom, is, object, optional, parse, pipe, readonly, safeParse, type InferInput } from 'valibot'; import dereferenceBlankNodes from '../../Utils/JSONLinkedData/dereferenceBlankNodes'; import canActionResubmit from '../private/canActionResubmit'; @@ -25,7 +25,7 @@ const { usePonyfill, usePostActivity } = hooks; const activityFeedbackComposerPropsSchema = pipe( object({ - activity: custom(value => safeParse(object({}), value).success), + activity: custom(value => is(object({}), value)), children: optional(reactNode()) }), readonly() diff --git a/packages/component/src/Attachment/ImageAttachment.tsx b/packages/component/src/Attachment/ImageAttachment.tsx index 425b01cf01..0cd2b08840 100644 --- a/packages/component/src/Attachment/ImageAttachment.tsx +++ b/packages/component/src/Attachment/ImageAttachment.tsx @@ -1,6 +1,6 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import React, { memo } from 'react'; -import { custom, object, optional, pipe, readonly, safeParse, string, union, type InferInput } from 'valibot'; +import { custom, is, object, optional, pipe, readonly, string, union, type InferInput } from 'valibot'; import readDataURIToBlob from '../Utils/readDataURIToBlob'; import ImageContent from './ImageContent'; @@ -8,23 +8,22 @@ import { type WebChatAttachment } from './private/types/WebChatAttachment'; const imageAttachmentPropsSchema = pipe( object({ - attachment: custom( - value => - safeParse( - union([ - object({ - contentUrl: string(), - name: optional(string()), - thumbnailUrl: optional(string()) - }), - object({ - contentUrl: optional(string()), - name: optional(string()), - thumbnailUrl: string() - }) - ]), - value - ).success + attachment: custom(value => + is( + union([ + object({ + contentUrl: string(), + name: optional(string()), + thumbnailUrl: optional(string()) + }), + object({ + contentUrl: optional(string()), + name: optional(string()), + thumbnailUrl: string() + }) + ]), + value + ) ) }), readonly() diff --git a/packages/component/src/Attachment/Text/TextAttachment.tsx b/packages/component/src/Attachment/Text/TextAttachment.tsx index d0a0ff550c..ddd70686be 100644 --- a/packages/component/src/Attachment/Text/TextAttachment.tsx +++ b/packages/component/src/Attachment/Text/TextAttachment.tsx @@ -1,6 +1,6 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import React, { memo } from 'react'; -import { any, custom, object, optional, pipe, readonly, safeParse, startsWith, string, type InferInput } from 'valibot'; +import { any, custom, is, object, optional, pipe, readonly, startsWith, string, type InferInput } from 'valibot'; import TextContent from './TextContent'; @@ -21,7 +21,7 @@ const textAttachmentPropsSchema = pipe( attachment: pipe( object({ ...directLineAttachmentSchema.entries, - contentType: custom<`text/${string}`>(value => safeParse(pipe(string(), startsWith('text/')), value).success) + contentType: custom<`text/${string}`>(value => is(pipe(string(), startsWith('text/')), value)) }), readonly() ) diff --git a/packages/component/src/Attachment/Text/private/ActivityButton.tsx b/packages/component/src/Attachment/Text/private/ActivityButton.tsx index 9cc0130ab4..811f8eff35 100644 --- a/packages/component/src/Attachment/Text/private/ActivityButton.tsx +++ b/packages/component/src/Attachment/Text/private/ActivityButton.tsx @@ -7,11 +7,11 @@ import { boolean, custom, function_, + is, object, optional, pipe, readonly, - safeParse, string, type InferInput } from 'valibot'; @@ -30,7 +30,7 @@ const activityButtonPropsSchema = pipe( 'data-testid': optional(string()), disabled: optional(boolean()), icon: componentIconPropsSchema.entries.icon, - onClick: optional(custom<() => void>(value => safeParse(function_(), value).success)), + onClick: optional(custom<() => void>(value => is(function_(), value))), text: optional(string()) }), readonly() diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx index f004412995..7d4ede0bdb 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx @@ -3,7 +3,7 @@ import { hooks } from 'botframework-webchat-api'; import { LegacyActivityContextProvider, type LegacyActivityContextType } from 'botframework-webchat-api/internal.js'; import { type WebChatActivity } from 'botframework-webchat-core'; import React, { memo, useMemo } from 'react'; -import { custom, object, optional, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { custom, is, object, optional, pipe, readonly, type InferInput } from 'valibot'; import isZeroOrPositive from '../../../Utils/isZeroOrPositive'; import useFirstActivityInSenderGroup from '../../ActivityGrouping/ui/SenderGrouping/useFirstActivity'; @@ -13,7 +13,7 @@ import useLastActivityInStatusGroup from '../../ActivityGrouping/ui/StatusGroupi const { useStyleOptions } = hooks; -const webChatActivitySchema = custom(value => safeParse(object({}), value).success); +const webChatActivitySchema = custom(value => is(object({}), value)); const legacyActivityComposerPropsSchema = pipe( object({ diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx index fcc1343594..3851b839be 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx @@ -5,13 +5,13 @@ import React, { Fragment, memo, useMemo } from 'react'; import { array, custom, + is, minLength, object, optional, parse, pipe, readonly, - safeParse, type InferOutput } from 'valibot'; @@ -20,7 +20,7 @@ import PartGroupingActivity from './private/PartGroupingActivity'; const partGroupingPropsSchema = pipe( object({ activities: pipe( - array(custom>(value => safeParse(object({}), value).success)), + array(custom>(value => is(object({}), value))), minLength(1, 'botframework-webchat: "activities" must have at least 1 activity'), readonly() ), @@ -50,7 +50,7 @@ function PartGrouping(props: PartGroupingProps) { [activities, lastActivity] ); - const isGroup = activities.length > 1 || safeParse(IdentifierSchema, lastMessage?.isPartOf[0]?.['@id']).success; + const isGroup = activities.length > 1 || is(IdentifierSchema, lastMessage?.isPartOf[0]?.['@id']); return isGroup ? ( {children} diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx index b1089d9d3b..4b221a11c4 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx @@ -4,18 +4,7 @@ import { hooks } from 'botframework-webchat-api'; import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core'; import React, { Fragment, memo, useCallback, useMemo, useState, type MouseEventHandler } from 'react'; import cx from 'classnames'; -import { - array, - custom, - minLength, - object, - optional, - pipe, - readonly, - safeParse, - string, - type InferOutput -} from 'valibot'; +import { array, custom, is, minLength, object, optional, pipe, readonly, string, type InferOutput } from 'valibot'; import StackedLayoutMain from '../../../../../Activity/StackedLayoutMain'; import StackedLayoutMessageStatus from '../../../../../Activity/StackedLayoutMessageStatus'; @@ -48,7 +37,7 @@ const { useAvatarForBot, useGetKeyByActivity, useLocalizer, useStyleOptions } = const partGroupingActivityPropsSchema = pipe( object({ activities: pipe( - array(pipe(custom>(value => safeParse(object({}), value).success))), + array(pipe(custom>(value => is(object({}), value)))), minLength(1, 'botframework-webchat: "activities" must have at least 1 activity'), readonly() ), @@ -61,7 +50,7 @@ type PartGroupingActivityProps = InferOutput(value => safeParse(object({}), value).success), + activity: custom(value => is(object({}), value)), children: optional(reactNode()), className: optional(string()), groupKey: string() diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/RenderActivityGrouping.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/RenderActivityGrouping.tsx index 86814d97d5..c805c63f23 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/RenderActivityGrouping.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/RenderActivityGrouping.tsx @@ -2,7 +2,7 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { hooks } from 'botframework-webchat-api'; import { type WebChatActivity } from 'botframework-webchat-core'; import React, { Fragment, memo } from 'react'; -import { array, custom, object, pipe, readonly, safeParse, type InferInput } from 'valibot'; +import { array, custom, is, object, pipe, readonly, type InferInput } from 'valibot'; import useActivityRendererMap from '../../../providers/RenderingActivities/useActivityRendererMap'; import RenderActivity from './RenderActivity'; @@ -11,7 +11,7 @@ const { useGetKeyByActivity } = hooks; const renderActivityGroupingPropsSchema = pipe( object({ - activities: pipe(array(custom(value => safeParse(object({}), value).success)), readonly()) + activities: pipe(array(custom(value => is(object({}), value))), readonly()) }), readonly() ); diff --git a/packages/component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx b/packages/component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx index 3f5893a9f7..d5ca828ad9 100644 --- a/packages/component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx +++ b/packages/component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx @@ -9,12 +9,12 @@ import { custom, function_, instance, + is, object, optional, picklist, pipe, readonly, - safeParse, union, type InferInput } from 'valibot'; @@ -39,7 +39,7 @@ const sendBoxAttachmentBarItemPropsSchema = pipe( mode: picklist(['list item', 'thumbnail']), onDelete: optional( custom<(event: Readonly<{ attachment: SendBoxAttachment }>) => void>( - value => safeParse(function_(), value).success + value => is(function_(), value) ) ) }), diff --git a/packages/component/src/SendBox/IconButton.tsx b/packages/component/src/SendBox/IconButton.tsx index c0c9d333c6..5b80419e9c 100644 --- a/packages/component/src/SendBox/IconButton.tsx +++ b/packages/component/src/SendBox/IconButton.tsx @@ -2,18 +2,7 @@ import { hooks } from 'botframework-webchat-api'; import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import classNames from 'classnames'; import React, { memo, useRef, type MouseEventHandler } from 'react'; -import { - boolean, - custom, - function_, - object, - optional, - pipe, - readonly, - safeParse, - string, - type InferInput -} from 'valibot'; +import { boolean, custom, function_, is, object, optional, pipe, readonly, string, type InferInput } from 'valibot'; import useFocusVisible from '../hooks/internal/useFocusVisible'; import useStyleSet from '../hooks/useStyleSet'; @@ -28,7 +17,7 @@ const iconButtonPropsSchema = pipe( className: optional(string()), 'data-testid': optional(string()), disabled: optional(boolean()), - onClick: optional(custom>(value => safeParse(function_(), value).success)) + onClick: optional(custom>(value => is(function_(), value))) }), readonly() ); diff --git a/packages/component/src/Utils/AccessibleButton.tsx b/packages/component/src/Utils/AccessibleButton.tsx index fafa125b58..2285a27212 100644 --- a/packages/component/src/Utils/AccessibleButton.tsx +++ b/packages/component/src/Utils/AccessibleButton.tsx @@ -6,13 +6,13 @@ import { boolean, custom, function_, + is, literal, number, object, optional, pipe, readonly, - safeParse, string, type InferInput } from 'valibot'; @@ -27,7 +27,7 @@ const accessibleButtonPropsSchema = pipe( className: optional(string()), 'data-testid': optional(string()), disabled: optional(boolean()), - onClick: custom>(value => safeParse(function_(), value).success), + onClick: custom>(value => is(function_(), value)), tabIndex: optional(number()), title: optional(string()), type: literal('button') diff --git a/packages/component/src/Utils/FocusRedirector.tsx b/packages/component/src/Utils/FocusRedirector.tsx index 97dd79f8ff..8835381f56 100644 --- a/packages/component/src/Utils/FocusRedirector.tsx +++ b/packages/component/src/Utils/FocusRedirector.tsx @@ -4,12 +4,12 @@ import { custom, function_, instance, + is, nullable, object, optional, pipe, readonly, - safeParse, string, type InferInput } from 'valibot'; @@ -28,7 +28,7 @@ import mutableRefObject from '../types/internal/mutableRefObject'; const focusRedirectorPropsSchema = pipe( object({ className: optional(string()), - onFocus: optional(custom<() => void>(value => safeParse(function_(), value).success)), + onFocus: optional(custom<() => void>(value => is(function_(), value))), redirectRef: optional(mutableRefObject(nullable(instance(HTMLElement)))) }), readonly() diff --git a/packages/component/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx b/packages/component/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx index 99b781d91f..f59cc43876 100644 --- a/packages/component/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx +++ b/packages/component/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx @@ -5,12 +5,12 @@ import React, { memo, useCallback, useEffect, useMemo, useRef, type MutableRefOb import { custom, function_, + is, literal, object, optional, pipe, readonly, - safeParse, union, type InferInput } from 'valibot'; @@ -22,7 +22,7 @@ type ItemRef = MutableRefObject; const rovingTabIndexContextProps = pipe( object({ children: optional(reactNode()), - onEscapeKey: optional(custom<() => void>(value => safeParse(function_(), value).success)), + onEscapeKey: optional(custom<() => void>(value => is(function_(), value))), orientation: optional(union([literal('horizontal'), literal('vertical')]), 'horizontal') }), readonly() diff --git a/packages/component/src/providers/Theme/ThemeProvider.tsx b/packages/component/src/providers/Theme/ThemeProvider.tsx index 7b3bd06ef6..7f2c47a775 100644 --- a/packages/component/src/providers/Theme/ThemeProvider.tsx +++ b/packages/component/src/providers/Theme/ThemeProvider.tsx @@ -20,47 +20,35 @@ import { import { StyleOptionsComposer } from 'botframework-webchat-api/internal.js'; import { type Polymiddleware } from 'botframework-webchat-api/middleware.js'; import React, { memo, useContext, useMemo, type ReactNode } from 'react'; -import { array, custom, function_, object, optional, pipe, readonly, safeParse } from 'valibot'; +import { array, custom, function_, is, object, optional, pipe, readonly } from 'valibot'; import Context, { type ThemeContextType } from './private/Context'; const themeProviderPropsSchema = pipe( object({ children: optional(reactNode()), - styleOptions: optional(custom(value => safeParse(object({}), value).success)), + styleOptions: optional(custom(value => is(object({}), value))), /** @deprecated Use `polymiddleware` instead, this will be removed on or after 2027-08-16. */ - activityMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) - ), - activityStatusMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) - ), + activityMiddleware: optional(pipe(array(custom(value => is(function_(), value))))), + activityStatusMiddleware: optional(pipe(array(custom(value => is(function_(), value))))), attachmentForScreenReaderMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) - ), - attachmentMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) - ), - avatarMiddleware: optional(pipe(array(custom(value => safeParse(function_(), value).success)))), - cardActionMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) + pipe(array(custom(value => is(function_(), value)))) ), + attachmentMiddleware: optional(pipe(array(custom(value => is(function_(), value))))), + avatarMiddleware: optional(pipe(array(custom(value => is(function_(), value))))), + cardActionMiddleware: optional(pipe(array(custom(value => is(function_(), value))))), groupActivitiesMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) + pipe(array(custom(value => is(function_(), value)))) ), - polymiddleware: optional(pipe(array(custom(value => safeParse(function_(), value).success)))), + polymiddleware: optional(pipe(array(custom(value => is(function_(), value))))), scrollToEndButtonMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) - ), - sendBoxMiddleware: optional(pipe(array(custom(value => safeParse(function_(), value).success)))), - sendBoxToolbarMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) + pipe(array(custom(value => is(function_(), value)))) ), - toastMiddleware: optional(pipe(array(custom(value => safeParse(function_(), value).success)))), - typingIndicatorMiddleware: optional( - pipe(array(custom(value => safeParse(function_(), value).success))) - ) + sendBoxMiddleware: optional(pipe(array(custom(value => is(function_(), value))))), + sendBoxToolbarMiddleware: optional(pipe(array(custom(value => is(function_(), value))))), + toastMiddleware: optional(pipe(array(custom(value => is(function_(), value))))), + typingIndicatorMiddleware: optional(pipe(array(custom(value => is(function_(), value))))) }), readonly() ); diff --git a/packages/component/src/types/internal/mutableRefObject.ts b/packages/component/src/types/internal/mutableRefObject.ts index 714e01fdcb..e66e0a4cd9 100644 --- a/packages/component/src/types/internal/mutableRefObject.ts +++ b/packages/component/src/types/internal/mutableRefObject.ts @@ -2,9 +2,9 @@ import { type MutableRefObject } from 'react'; import { any, check, + is, object, pipe, - safeParse, type BaseIssue, type BaseSchema, type ErrorMessage, @@ -33,7 +33,7 @@ function mutableRefObject< ): BaseSchema>, MutableRefObject>, BaseIssue> { return pipe( any(), - check(value => safeParse(object({ current: baseSchema }, message), value).success) + check(value => is(object({ current: baseSchema }, message), value)) ); } diff --git a/packages/component/src/types/internal/refObject.ts b/packages/component/src/types/internal/refObject.ts index 12b19ceb94..13c66663e8 100644 --- a/packages/component/src/types/internal/refObject.ts +++ b/packages/component/src/types/internal/refObject.ts @@ -1,10 +1,10 @@ import { any, check, + is, object, pipe, readonly, - safeParse, type BaseIssue, type BaseSchema, type ErrorMessage, @@ -33,7 +33,7 @@ function refObject< ): BaseSchema }, BaseIssue> { return pipe( any(), - check(value => safeParse(pipe(object({ current: baseSchema }, message), readonly()), value).success) + check(value => is(pipe(object({ current: baseSchema }, message), readonly()), value)) ); } diff --git a/packages/core-graph/src/private/schemas/flattenNodeObject.ts b/packages/core-graph/src/private/schemas/flattenNodeObject.ts index 1b9d805276..78f147430a 100644 --- a/packages/core-graph/src/private/schemas/flattenNodeObject.ts +++ b/packages/core-graph/src/private/schemas/flattenNodeObject.ts @@ -1,7 +1,7 @@ // TODO: [P0] This flattening can probably fold into `colorNode()` as it has slanted view of the system. import { v4 } from 'uuid'; -import { assert, check, looseObject, object, optional, parse, pipe, safeParse } from 'valibot'; +import { assert, check, is, looseObject, object, optional, parse, pipe, safeParse } from 'valibot'; import { FlatNodeObjectSchema, type FlatNodeObject, type FlatNodeObjectPropertyValue } from './FlatNodeObject'; import { IdentifierSchema, type Identifier } from './Identifier'; @@ -75,7 +75,7 @@ function flattenNodeObject_( input = input as object; // Array is allowed by valibot.object({}), we need to check for plain object first. - if (!isPlainObject(input) || !safeParse(object({}), input).success) { + if (!isPlainObject(input) || !is(object({}), input)) { // TODO: [P0] For "undefined", maybe we just want to remove it or just set it to null. // Or we should consolidate `colorNode` here as `colorNode` will handle that. const error = new Error( diff --git a/packages/core/src/actions/registerActionSink.ts b/packages/core/src/actions/registerActionSink.ts index caafb96735..e3dc63ee38 100644 --- a/packages/core/src/actions/registerActionSink.ts +++ b/packages/core/src/actions/registerActionSink.ts @@ -1,5 +1,5 @@ import { type Action } from 'redux'; -import { custom, function_, literal, object, pipe, readonly, safeParse, type InferOutput } from 'valibot'; +import { custom, function_, is, literal, object, pipe, readonly, type InferOutput } from 'valibot'; const REGISTER_ACTION_SINK = 'WEB_CHAT_INTERNAL/REGISTER_ACTION_SINK' as const; @@ -7,7 +7,7 @@ const registerActionSinkActionSchema = pipe( object({ payload: pipe( object({ - sink: custom<(action: Action) => void>(value => safeParse(function_(), value).success) + sink: custom<(action: Action) => void>(value => is(function_(), value)) }), readonly() ), diff --git a/packages/core/src/actions/setSuggestedActions.ts b/packages/core/src/actions/setSuggestedActions.ts index 75d228c80b..6105a7420a 100644 --- a/packages/core/src/actions/setSuggestedActions.ts +++ b/packages/core/src/actions/setSuggestedActions.ts @@ -1,4 +1,4 @@ -import { array, custom, literal, object, optional, pipe, readonly, safeParse, type InferOutput } from 'valibot'; +import { array, custom, is, literal, object, optional, pipe, readonly, type InferOutput } from 'valibot'; import { type DirectLineCardAction } from '../types/external/DirectLineCardAction'; import { type WebChatActivity } from '../types/WebChatActivity'; @@ -10,9 +10,9 @@ const setSuggestedActionsActionSchema = pipe( object({ payload: pipe( object({ - originActivity: optional(custom(value => safeParse(object({}), value).success)), + originActivity: optional(custom(value => is(object({}), value))), suggestedActions: pipe( - array(custom(value => safeParse(object({}), value).success)), + array(custom(value => is(object({}), value))), readonly() ) }), diff --git a/packages/core/src/actions/unregisterActionSink.ts b/packages/core/src/actions/unregisterActionSink.ts index 1d4dc0705c..c2c7f6b94c 100644 --- a/packages/core/src/actions/unregisterActionSink.ts +++ b/packages/core/src/actions/unregisterActionSink.ts @@ -1,5 +1,5 @@ import { type Action } from 'redux'; -import { custom, function_, literal, object, pipe, readonly, safeParse, type InferOutput } from 'valibot'; +import { custom, function_, is, literal, object, pipe, readonly, type InferOutput } from 'valibot'; const UNREGISTER_ACTION_SINK = 'WEB_CHAT_INTERNAL/UNREGISTER_ACTION_SINK' as const; @@ -7,7 +7,7 @@ const unregisterActionSinkActionSchema = pipe( object({ payload: pipe( object({ - sink: custom<(action: Action) => void>(value => safeParse(function_(), value).success) + sink: custom<(action: Action) => void>(value => is(function_(), value)) }), readonly() ), diff --git a/packages/core/src/utils/voiceActivity/isVoiceActivity.ts b/packages/core/src/utils/voiceActivity/isVoiceActivity.ts index f6c86b8dcc..bafb73392b 100644 --- a/packages/core/src/utils/voiceActivity/isVoiceActivity.ts +++ b/packages/core/src/utils/voiceActivity/isVoiceActivity.ts @@ -1,4 +1,4 @@ -import { check, literal, looseObject, object, pipe, safeParse, string, type InferOutput } from 'valibot'; +import { check, is, literal, looseObject, object, pipe, string, type InferOutput } from 'valibot'; import { WebChatActivity } from '../../types/WebChatActivity'; @@ -17,6 +17,6 @@ const VoiceActivitySchema = object({ const isVoiceActivity = ( activity: WebChatActivity ): activity is WebChatActivity & InferOutput => - safeParse(VoiceActivitySchema, activity).success; + is(VoiceActivitySchema, activity); export default isVoiceActivity; diff --git a/packages/core/src/utils/voiceActivity/isVoiceTranscriptActivity.ts b/packages/core/src/utils/voiceActivity/isVoiceTranscriptActivity.ts index 8b861d1783..13ba31f039 100644 --- a/packages/core/src/utils/voiceActivity/isVoiceTranscriptActivity.ts +++ b/packages/core/src/utils/voiceActivity/isVoiceTranscriptActivity.ts @@ -1,4 +1,4 @@ -import { check, literal, object, picklist, pipe, safeParse, string, type InferOutput } from 'valibot'; +import { check, is, literal, object, picklist, pipe, string, type InferOutput } from 'valibot'; import { WebChatActivity } from '../../types/WebChatActivity'; @@ -19,6 +19,6 @@ const VoiceTranscriptActivitySchema = object({ const isVoiceTranscriptActivity = ( activity: WebChatActivity ): activity is WebChatActivity & InferOutput => - safeParse(VoiceTranscriptActivitySchema, activity).success; + is(VoiceTranscriptActivitySchema, activity); export default isVoiceTranscriptActivity; diff --git a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx index 9e20844fa5..1f55808424 100644 --- a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx +++ b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx @@ -3,7 +3,7 @@ import { hooks } from 'botframework-webchat'; import { type WebChatActivity } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, useMemo, type CSSProperties } from 'react'; -import { custom, object, optional, pipe, readonly, safeParse, string, type InferInput } from 'valibot'; +import { custom, is, object, optional, pipe, readonly, string, type InferInput } from 'valibot'; import { useStyles } from '../../styles'; import styles from './CopilotMessageHeader.module.css'; @@ -15,7 +15,7 @@ const { useLocalizer } = hooks; const copilotMessageHeaderPropsSchema = pipe( object({ - activity: optional(custom>(value => safeParse(object({}), value).success)), + activity: optional(custom>(value => is(object({}), value))), className: optional(string()) }), readonly() diff --git a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx index 46aaee2ca3..392596598b 100644 --- a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx +++ b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx @@ -7,7 +7,7 @@ import { } from 'botframework-webchat/internal.js'; import cx from 'classnames'; import React, { memo, useMemo, type ReactNode } from 'react'; -import { array, custom, object, optional, pipe, readonly, safeParse } from 'valibot'; +import { array, custom, is, object, optional, pipe, readonly } from 'valibot'; import { useStyles, useVariantClassName } from '../../styles'; @@ -15,7 +15,7 @@ import styles from './PartGroupingDecorator.module.css'; const partGroupingDecoratorPropsSchema = pipe( object({ - activities: pipe(array(custom(value => safeParse(object({}), value).success)), readonly()), + activities: pipe(array(custom(value => is(object({}), value))), readonly()), children: optional(reactNode()), header: optional(reactNode()) }), diff --git a/packages/react-valibot/src/validateProps.ts b/packages/react-valibot/src/validateProps.ts index ceb2d684a5..8ce8f7ed6c 100644 --- a/packages/react-valibot/src/validateProps.ts +++ b/packages/react-valibot/src/validateProps.ts @@ -1,4 +1,4 @@ -import { parse, safeParse, type BaseIssue, type BaseSchema, type InferInput, type InferOutput } from 'valibot'; +import { is, parse, type BaseIssue, type BaseSchema, type InferInput, type InferOutput } from 'valibot'; /** * Specifies the props isolation mode. @@ -52,7 +52,7 @@ export default function validateProps; } - if (isolationMode !== 'strict' && safeParse(propsSchema, props).success) { + if (isolationMode !== 'strict' && is(propsSchema, props)) { return props as unknown as InferInput; } diff --git a/packages/redux-store/src/private/reduxStoreSchema.ts b/packages/redux-store/src/private/reduxStoreSchema.ts index 5b7c206790..b1cdf77379 100644 --- a/packages/redux-store/src/private/reduxStoreSchema.ts +++ b/packages/redux-store/src/private/reduxStoreSchema.ts @@ -1,16 +1,16 @@ import { type Store } from 'redux'; -import { custom, function_, object, safeParse } from 'valibot'; +import { custom, function_, is, object } from 'valibot'; const reduxStoreSchema = custom( value => - safeParse( + is( object({ - dispatch: custom(value => safeParse(function_(), value).success), - getState: custom(value => safeParse(function_(), value).success), - subscribe: custom(value => safeParse(function_(), value).success) + dispatch: custom(value => is(function_(), value)), + getState: custom(value => is(function_(), value)), + subscribe: custom(value => is(function_(), value)) }), value - ).success + ) ); export default reduxStoreSchema; From c88fb4f4536ac60cd763ca57cfa03900db360c80 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 01:38:19 +0000 Subject: [PATCH 076/108] Fix find and replace --- .../api-middleware/src/private/templatePolymiddleware.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/api-middleware/src/private/templatePolymiddleware.tsx b/packages/api-middleware/src/private/templatePolymiddleware.tsx index bdab9e4f9f..e160d9940d 100644 --- a/packages/api-middleware/src/private/templatePolymiddleware.tsx +++ b/packages/api-middleware/src/private/templatePolymiddleware.tsx @@ -43,7 +43,9 @@ function templatePolymiddleware(name: string) { function_(), check(value => value === BYPASS_ENHANCER || middlewareFactoryTag in value) ), - literal(false)true + literal(false) + ]); + const createMiddleware = (enhancer: TemplatedEnhancer): TemplatedMiddleware => { parse(function_(`botframework-webchat: ${name} enhancer must be of type function.`), enhancer); @@ -87,7 +89,7 @@ function templatePolymiddleware(name: string) { console.warn(`botframework-webchat: ${name}.middleware must return enhancer function or false`); return false; - } else if (!is(middlewareSchema, result)) { + } else if (!is(middlewareSchema, result) satisfies boolean) { console.warn(`botframework-webchat: ${name}.middleware must be created using factory function`); return false; From c8dcafcbcfda4d0c2690991be17e58c11a42af14 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 04:06:20 +0000 Subject: [PATCH 077/108] Fix flakiness --- __tests__/html2/hooks/useSubmitSendBox.html | 1 + 1 file changed, 1 insertion(+) diff --git a/__tests__/html2/hooks/useSubmitSendBox.html b/__tests__/html2/hooks/useSubmitSendBox.html index a2661c5fdc..dbdc61359d 100644 --- a/__tests__/html2/hooks/useSubmitSendBox.html +++ b/__tests__/html2/hooks/useSubmitSendBox.html @@ -47,6 +47,7 @@ submitSendBox(); await pageConditions.numActivitiesShown(2); + await pageConditions.allOutgoingActivitiesSent(); await host.snapshot('local'); }); From fbd6f97dd9113662c5cc073d48ec6cd42d378582 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 04:06:31 +0000 Subject: [PATCH 078/108] Fix ESLint --- .../component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx b/packages/component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx index d5ca828ad9..8e5a3cb028 100644 --- a/packages/component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx +++ b/packages/component/src/SendBox/AttachmentBar/AttachmentBarItem.tsx @@ -38,9 +38,7 @@ const sendBoxAttachmentBarItemPropsSchema = pipe( ), mode: picklist(['list item', 'thumbnail']), onDelete: optional( - custom<(event: Readonly<{ attachment: SendBoxAttachment }>) => void>( - value => is(function_(), value) - ) + custom<(event: Readonly<{ attachment: SendBoxAttachment }>) => void>(value => is(function_(), value)) ) }), readonly() From cbc6a2d0240280d1c018efbe7f6a10c1a9977851 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 04:14:09 +0000 Subject: [PATCH 079/108] Remove deprecated test --- .../styleOptions.deprecated.html | 10 ----- .../styleOptions.deprecated.html.snap-1.png | Bin 13264 -> 0 bytes .../styleOptions.deprecated.html.snap-2.png | Bin 13080 -> 0 bytes .../styleOptions.deprecated.html.snap-3.png | Bin 14261 -> 0 bytes .../styleOptions.deprecated.html.snap-4.png | Bin 13985 -> 0 bytes .../styleOptions.deprecated.html.snap-5.png | Bin 14245 -> 0 bytes .../styleOptions.deprecated.html.snap-6.png | Bin 13288 -> 0 bytes .../html2/suggestedActions/styleOptions.html | 42 +----------------- 8 files changed, 1 insertion(+), 51 deletions(-) delete mode 100644 __tests__/html2/suggestedActions/styleOptions.deprecated.html delete mode 100644 __tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-1.png delete mode 100644 __tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-2.png delete mode 100644 __tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-3.png delete mode 100644 __tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-4.png delete mode 100644 __tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-5.png delete mode 100644 __tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-6.png diff --git a/__tests__/html2/suggestedActions/styleOptions.deprecated.html b/__tests__/html2/suggestedActions/styleOptions.deprecated.html deleted file mode 100644 index 7809f2d985..0000000000 --- a/__tests__/html2/suggestedActions/styleOptions.deprecated.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - diff --git a/__tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-1.png b/__tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-1.png deleted file mode 100644 index d44011c6ffa8492ddd9b1e0cf84c9bcb631828f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13264 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 R2Yf=Ms-&e@E^it1-vEF6A-Vtn diff --git a/__tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-3.png b/__tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-3.png deleted file mode 100644 index 90c246ca122ef26d57cf85237a22f7492b2470ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14261 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 diff --git a/__tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-4.png b/__tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-4.png deleted file mode 100644 index 938a7a20bbf5432fa4799c1c8576f37f06004d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13985 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%0APX;0~-2Tkm{RdX~FAAQs-}lJ0K0 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 diff --git a/__tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-5.png b/__tests__/html2/suggestedActions/styleOptions.deprecated.html.snap-5.png deleted file mode 100644 index 5dfbe331722bd649470170bac8c354406af6a288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14245 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 diff --git a/__tests__/html2/suggestedActions/styleOptions.html b/__tests__/html2/suggestedActions/styleOptions.html index 6a99a409d9..df87a02c4f 100644 --- a/__tests__/html2/suggestedActions/styleOptions.html +++ b/__tests__/html2/suggestedActions/styleOptions.html @@ -1,4 +1,4 @@ - + @@ -94,46 +94,6 @@ styleOptions: { ...(preset === 'default' ? {} - : preset === 'deprecated' - ? { - suggestedActionBorderRadius: 5, - - suggestedActionKeyboardFocusIndicatorInset: 4, - suggestedActionKeyboardFocusIndicatorBorderColor: '#00F', - suggestedActionKeyboardFocusIndicatorBorderRadius: '100px', - suggestedActionKeyboardFocusIndicatorBorderStyle: 'dashed', - suggestedActionKeyboardFocusIndicatorBorderWidth: 2, - - suggestedActionBackground: 'rgba(255, 0, 0, .1)', - suggestedActionBorderColor: 'rgba(255, 0, 0, .9)', - suggestedActionBorderStyle: 'dashed', - suggestedActionBorderWidth: 1, - suggestedActionTextColor: 'rgba(128, 0, 0, 1)', - - suggestedActionActiveBackground: 'rgba(255, 0, 255, .1)', - suggestedActionBorderColorOnActive: 'rgba(255, 0, 255, .9)', - suggestedActionBorderStyleOnActive: 'dotted', - suggestedActionBorderWidthOnActive: 3, - suggestedActionTextColorOnActive: 'rgba(128, 0, 128, 1)', - - suggestedActionDisabledBackground: 'rgba(255, 255, 0, .1)', - suggestedActionDisabledBorderColor: 'rgba(255, 255, 0, .9)', - suggestedActionDisabledBorderStyle: 'dotted', - suggestedActionDisabledBorderWidth: 3, - suggestedActionDisabledTextColor: 'rgba(128, 128, 0, 1)', - - suggestedActionFocusBackground: 'rgba(0, 255, 0, .1)', - suggestedActionBorderColorOnFocus: 'rgba(0, 255, 0, .9)', - suggestedActionBorderStyleOnFocus: 'dotted', - suggestedActionBorderWidthOnFocus: 3, - suggestedActionTextColorOnFocus: 'rgba(0, 128, 0, 1)', - - suggestedActionHoverBackground: 'rgba(0, 0, 255, .1)', - suggestedActionBorderColorOnHover: 'rgba(0, 0, 255, .9)', - suggestedActionBorderStyleOnHover: 'dotted', - suggestedActionBorderWidthOnHover: 3, - suggestedActionTextColorOnHover: 'rgba(0, 0, 128, 1)' - } : { suggestedActionBorderRadius: 5, From af96c3a68c74211033b227ca7c3d9416147b95f0 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 08:00:24 +0000 Subject: [PATCH 080/108] Use /* in import map --- __tests__/html2/accessibility/sendBox/ariaLabel.fluent.html | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/__tests__/html2/accessibility/sendBox/ariaLabel.fluent.html b/__tests__/html2/accessibility/sendBox/ariaLabel.fluent.html index 0889865ec1..6e0b4da036 100644 --- a/__tests__/html2/accessibility/sendBox/ariaLabel.fluent.html +++ b/__tests__/html2/accessibility/sendBox/ariaLabel.fluent.html @@ -18,10 +18,7 @@ "imports": { "@fluentui/react-components": "https://esm.sh/@fluentui/react-components?deps=react@18.3.1,react-dom@18.3.1&exports=FluentProvider,createDarkTheme,webLightTheme", "botframework-webchat": "/__dist__/packages/bundle/static/botframework-webchat.js", - "botframework-webchat/component": "/__dist__/packages/bundle/static/botframework-webchat/component.js", - "botframework-webchat/decorator": "/__dist__/packages/bundle/static/botframework-webchat/decorator.js", - "botframework-webchat/hook": "/__dist__/packages/bundle/static/botframework-webchat/hook.js", - "botframework-webchat/internal": "/__dist__/packages/bundle/static/botframework-webchat/internal.js", + "botframework-webchat/": "/__dist__/packages/bundle/static/botframework-webchat/", "botframework-webchat-fluent-theme": "/__dist__/packages/fluent-theme/static/botframework-webchat-fluent-theme.js", "react": "/__dist__/packages/bundle/static/react.js", "react-dom": "/__dist__/packages/bundle/static/react-dom.js", From 561860d57ce01970d2520f52c25f7ca99c726281 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 19:57:34 +0000 Subject: [PATCH 081/108] Fix Prettier --- .../api-graph/src/private/GraphProvider.tsx | 4 ++-- .../Text/private/ActivityButton.tsx | 13 +------------ .../ui/PartGrouping/PartGrouping.tsx | 13 +------------ .../RovingTabIndex/RovingTabIndexComposer.tsx | 13 +------------ .../src/private/reduxStoreSchema.ts | 19 +++++++++---------- 5 files changed, 14 insertions(+), 48 deletions(-) diff --git a/packages/api-graph/src/private/GraphProvider.tsx b/packages/api-graph/src/private/GraphProvider.tsx index d4e7b46a96..7872eaf540 100644 --- a/packages/api-graph/src/private/GraphProvider.tsx +++ b/packages/api-graph/src/private/GraphProvider.tsx @@ -17,8 +17,8 @@ const EMPTY_ARRAY = Object.freeze([]); const graphProviderPropsSchema = pipe( object({ children: optional(reactNode()), - store: custom>( - value => is(object({ getState: function_(), subscribe: function_() }), value) + store: custom>(value => + is(object({ getState: function_(), subscribe: function_() }), value) ) }), readonly() diff --git a/packages/component/src/Attachment/Text/private/ActivityButton.tsx b/packages/component/src/Attachment/Text/private/ActivityButton.tsx index 811f8eff35..bbe7006545 100644 --- a/packages/component/src/Attachment/Text/private/ActivityButton.tsx +++ b/packages/component/src/Attachment/Text/private/ActivityButton.tsx @@ -3,18 +3,7 @@ import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import cx from 'classnames'; import React, { forwardRef, memo, useCallback } from 'react'; import { useRefFrom } from 'use-ref-from'; -import { - boolean, - custom, - function_, - is, - object, - optional, - pipe, - readonly, - string, - type InferInput -} from 'valibot'; +import { boolean, custom, function_, is, object, optional, pipe, readonly, string, type InferInput } from 'valibot'; import { ComponentIcon, componentIconPropsSchema } from '../../../Icon'; diff --git a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx index 3851b839be..a6f89dd010 100644 --- a/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx +++ b/packages/component/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx @@ -2,18 +2,7 @@ import { reactNode } from '@msinternal/botframework-webchat-react-valibot'; import { getActivityLivestreamingMetadata, getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core'; import { IdentifierSchema } from 'botframework-webchat-core/graph.js'; import React, { Fragment, memo, useMemo } from 'react'; -import { - array, - custom, - is, - minLength, - object, - optional, - parse, - pipe, - readonly, - type InferOutput -} from 'valibot'; +import { array, custom, is, minLength, object, optional, parse, pipe, readonly, type InferOutput } from 'valibot'; import PartGroupingActivity from './private/PartGroupingActivity'; diff --git a/packages/component/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx b/packages/component/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx index f59cc43876..a141d069b8 100644 --- a/packages/component/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx +++ b/packages/component/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx @@ -2,18 +2,7 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import React, { memo, useCallback, useEffect, useMemo, useRef, type MutableRefObject } from 'react'; -import { - custom, - function_, - is, - literal, - object, - optional, - pipe, - readonly, - union, - type InferInput -} from 'valibot'; +import { custom, function_, is, literal, object, optional, pipe, readonly, union, type InferInput } from 'valibot'; import RovingTabIndexContext, { type RovingTabIndexContextType } from './private/Context'; diff --git a/packages/redux-store/src/private/reduxStoreSchema.ts b/packages/redux-store/src/private/reduxStoreSchema.ts index b1cdf77379..4d8cb70d9d 100644 --- a/packages/redux-store/src/private/reduxStoreSchema.ts +++ b/packages/redux-store/src/private/reduxStoreSchema.ts @@ -1,16 +1,15 @@ import { type Store } from 'redux'; import { custom, function_, is, object } from 'valibot'; -const reduxStoreSchema = custom( - value => - is( - object({ - dispatch: custom(value => is(function_(), value)), - getState: custom(value => is(function_(), value)), - subscribe: custom(value => is(function_(), value)) - }), - value - ) +const reduxStoreSchema = custom(value => + is( + object({ + dispatch: custom(value => is(function_(), value)), + getState: custom(value => is(function_(), value)), + subscribe: custom(value => is(function_(), value)) + }), + value + ) ); export default reduxStoreSchema; From 0a1063e1810cda2bfb32b386e5b752366802674d Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 20:17:31 +0000 Subject: [PATCH 082/108] Fix test and clean up entries --- .../src/types/external/OrgSchema/Action.ts | 2 -- .../src/types/external/OrgSchema/Claim.ts | 2 -- .../CreativeWork.parseCreativeWork.spec.ts | 8 ++++--- .../types/external/OrgSchema/CreativeWork.ts | 6 ++--- .../types/external/OrgSchema/DefinedTerm.ts | 2 -- .../external/OrgSchema/JSONLinkedData.ts | 8 +++---- .../src/types/external/OrgSchema/Person.ts | 2 -- .../src/types/external/OrgSchema/Project.ts | 2 -- .../external/OrgSchema/SoftwareSourceCode.ts | 19 ++++----------- .../src/types/external/OrgSchema/Thing.ts | 24 ++++++++++--------- .../types/external/OrgSchema/UserReview.ts | 2 -- .../types/external/OrgSchema/VoteAction.ts | 2 -- .../private/jsonLinkedDataProperty.ts | 3 +++ 13 files changed, 32 insertions(+), 50 deletions(-) diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index 0cc5f1a976..d1577627d1 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -1,6 +1,5 @@ import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; import { projectSchema, type ProjectInput } from './Project'; @@ -79,7 +78,6 @@ type ActionOutput = ThingOutput & { const actionSchema: GenericSchema = intersect([ lazy(() => thingSchema), object({ - ...jsonLinkedDataEntries, actionOption: jsonLinkedDataProperty(string()), actionStatus: jsonLinkedDataProperty(actionStatusSchema), provider: jsonLinkedDataProperty(lazy(() => projectSchema)), diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index 6007123631..f136e66e12 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -3,7 +3,6 @@ import { intersect, lazy, object, parse, type GenericSchema } from 'valibot'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews. @@ -58,7 +57,6 @@ type ClaimOutput = CreativeWorkOutput & { const claimSchema: GenericSchema = intersect([ lazy(() => creativeWorkSchema), object({ - ...jsonLinkedDataEntries, appearance: jsonLinkedDataProperty(lazy(() => creativeWorkSchema)), claimInterpreter: jsonLinkedDataProperty(lazy(() => projectSchema)) }) diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts index 14436cf206..52d86d8841 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts @@ -1,7 +1,9 @@ import { describe, expect, test } from '@jest/globals'; -import { creativeWorkSchema, parseCreativeWork } from './CreativeWork'; import { parse } from 'valibot'; +import { claimSchema } from './Claim'; +import { creativeWorkSchema, parseCreativeWork } from './CreativeWork'; +const claimTemplate = parse(claimSchema, {}); const creativeWorkTemplate = parse(creativeWorkSchema, {}); describe('CreativeWork', () => { @@ -42,7 +44,7 @@ describe('CreativeWork', () => { name: ['Business @ the Speed of Thought'], citation: [ { - ...creativeWorkTemplate, + ...claimTemplate, '@type': 'Book', name: ['The Road Ahead'] } @@ -62,7 +64,7 @@ describe('CreativeWork', () => { name: ['Business @ the Speed of Thought'], citation: [ { - ...creativeWorkTemplate, + ...claimTemplate, '@type': 'Book', name: ['The Road Ahead'] } diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index fb374322ee..9ff364f1a9 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -7,7 +7,6 @@ import { type CreativeWorkStatusOutput } from './CreativeWorkStatus'; import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; import { personSchema, type PersonInput, type PersonOutput } from './Person'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; import { @@ -185,14 +184,13 @@ type CreativeWorkOutput = ThingOutput & { readonly usageInfo: readonly CreativeWorkOutput[]; }; -// Cyclic dependency. -// eslint-disable-next-line prefer-const let creativeWorkSchema_: GenericSchema; +// This is for cyclic dependency. +// eslint-disable-next-line prefer-const creativeWorkSchema_ = intersect([ lazy(() => thingSchema), object({ - ...jsonLinkedDataEntries, abstract: jsonLinkedDataProperty(string()), author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), citation: jsonLinkedDataProperty(lazy(() => claimSchema)), diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index dc555ad447..c6def8c809 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -2,7 +2,6 @@ import { intersect, lazy, object, parse, string, type GenericSchema } from 'vali import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term. @@ -53,7 +52,6 @@ type DefinedTermOutput = ThingOutput & { const definedTermSchema: GenericSchema = intersect([ lazy(() => thingSchema), object({ - ...jsonLinkedDataEntries, inDefinedTermSet: jsonLinkedDataProperty(string()), termCode: jsonLinkedDataProperty(string()) }) diff --git a/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts b/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts index 8b1de1cafb..ddf95d8e3e 100644 --- a/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts +++ b/packages/core/src/types/external/OrgSchema/JSONLinkedData.ts @@ -1,4 +1,4 @@ -import { literal, optional, string } from 'valibot'; +import { literal, object, optional, string } from 'valibot'; // import jsonLinkedDataProperties from './private/jsonLinkedDataProperties'; type JSONLinkedDataInput = { @@ -15,12 +15,12 @@ type JSONLinkedDataOutput = { readonly '@type'?: string | undefined; }; -const jsonLinkedDataEntries = { +const jsonLinkedDataSchema = object({ '@context': optional(literal('https://schema.org')), '@id': optional(string()), // We should move to multiple @type soon. // '@type': jsonLinkedDataProperties(string()) '@type': optional(string()) -}; +}); -export { jsonLinkedDataEntries, type JSONLinkedDataInput, type JSONLinkedDataOutput }; +export { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index 106135f5aa..499671c136 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -1,5 +1,4 @@ import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; @@ -42,7 +41,6 @@ type PersonOutput = ThingOutput & { const personSchema: GenericSchema = intersect([ lazy(() => thingSchema), object({ - ...jsonLinkedDataEntries, description: jsonLinkedDataProperty(string()), image: jsonLinkedDataProperty(string()), name: jsonLinkedDataProperty(string()) diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index b75756c175..7d65ca44cd 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -2,7 +2,6 @@ import { intersect, lazy, object, parse, string, type GenericSchema } from 'vali import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. @@ -39,7 +38,6 @@ type ProjectOutput = ThingOutput & { const projectSchema: GenericSchema = intersect([ lazy(() => thingSchema), object({ - ...jsonLinkedDataEntries, slogan: jsonLinkedDataProperty(string()) }) ]); diff --git a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts index 56796439f7..bcffc28f8f 100644 --- a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts +++ b/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts @@ -1,8 +1,7 @@ -import { any, intersect, lazy, objectWithRest, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, string, type GenericSchema } from 'valibot'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * Computer programming source code. Example: Full (compile ready) solutions, code snippet samples, scripts, templates. @@ -36,19 +35,11 @@ type SoftwareSourceCodeOutput = CreativeWorkOutput & { readonly programmingLanguage: readonly string[]; }; -const softwareSourceCodeEntries = { - ...jsonLinkedDataEntries, - programmingLanguage: jsonLinkedDataProperty(string()) -}; - const softwareSourceCodeSchema: GenericSchema = intersect([ lazy(() => creativeWorkSchema), - objectWithRest(softwareSourceCodeEntries, jsonLinkedDataProperty(any())) + object({ + programmingLanguage: jsonLinkedDataProperty(string()) + }) ]); -export { - softwareSourceCodeEntries, - softwareSourceCodeSchema, - type SoftwareSourceCodeInput, - type SoftwareSourceCodeOutput -}; +export { softwareSourceCodeSchema, type SoftwareSourceCodeInput, type SoftwareSourceCodeOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index 25671006c6..7f2e477cf9 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -1,8 +1,8 @@ -import { lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { jsonLinkedDataEntries, type JSONLinkedDataInput, type JSONLinkedDataOutput } from './JSONLinkedData'; +import { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from './JSONLinkedData'; /** * The most generic type of item. @@ -106,15 +106,17 @@ type ThingOutput = JSONLinkedDataOutput & { readonly url: readonly string[]; }; -const thingSchema: GenericSchema = object({ - ...jsonLinkedDataEntries, - additionalType: jsonLinkedDataProperty(string()), - alternateName: jsonLinkedDataProperty(string()), - description: jsonLinkedDataProperty(string()), - name: jsonLinkedDataProperty(string()), - potentialAction: jsonLinkedDataProperty(lazy(() => actionSchema)), - url: jsonLinkedDataProperty(string()) -}); +const thingSchema: GenericSchema = intersect([ + lazy(() => jsonLinkedDataSchema), + object({ + additionalType: jsonLinkedDataProperty(string()), + alternateName: jsonLinkedDataProperty(string()), + description: jsonLinkedDataProperty(string()), + name: jsonLinkedDataProperty(string()), + potentialAction: jsonLinkedDataProperty(lazy(() => actionSchema)), + url: jsonLinkedDataProperty(string()) + }) +]); /** @deprecated Use Valibot.parse(thingSchema) instead. Will be removed on or after 2028-04-23. */ const parseThing = (thing: ThingInput): ThingOutput => parse(thingSchema, thing); diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index 9bec06bfe3..f5643fc15e 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -2,7 +2,6 @@ import { intersect, lazy, object, parse, string, type GenericSchema } from 'vali import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; /** * A review created by an end-user (e.g. consumer, purchaser, attendee etc.), in contrast with [`CriticReview`](https://schema.org/CriticReview). @@ -35,7 +34,6 @@ type UserReviewOutput = ThingOutput & { const userReviewSchema: GenericSchema = intersect([ lazy(() => thingSchema), object({ - ...jsonLinkedDataEntries, reviewAspect: jsonLinkedDataProperty(string()) }) ]); diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index 16e4bd1747..d1c6bda0a1 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,7 +1,6 @@ import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; -import { jsonLinkedDataEntries } from './JSONLinkedData'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; /** @@ -43,7 +42,6 @@ type VoteActionOutput = ActionOutput & { const voteActionSchema: GenericSchema = intersect([ lazy(() => actionSchema), object({ - ...jsonLinkedDataEntries, actionOption: jsonLinkedDataProperty(string()) }) ]); diff --git a/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts b/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts index 763088e161..fb02e977fd 100644 --- a/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts +++ b/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts @@ -63,6 +63,9 @@ export default function jsonLinkedDataProperty Date: Thu, 30 Apr 2026 21:02:25 +0000 Subject: [PATCH 083/108] Remove unneeded test --- .../OrgSchema/CreativeWork.test.spec.ts | 155 ------------------ 1 file changed, 155 deletions(-) delete mode 100644 packages/core/src/types/external/OrgSchema/CreativeWork.test.spec.ts diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.test.spec.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.test.spec.ts deleted file mode 100644 index 19fc3cab2b..0000000000 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.test.spec.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { expect, test } from '@jest/globals'; -import { parse } from 'valibot'; -import { creativeWorkSchema } from './CreativeWork'; - -// test('Testing', () => { -// const one = object({ -// number: optional(arrayize(number())) -// }); - -// const two = intersect([ -// one, -// objectWithRest( -// { -// string: optional(arrayize(string())) -// }, -// arrayize() -// ) -// ]); - -// try { -// console.log( -// parse(two, { -// boolean: true, -// number: [1], -// string: 'abc' -// }) -// ); -// } catch (error) { -// console.error(error.issues); - -// throw error; -// } -// }); - -// test('Test 2', () => { -// try { -// console.log( -// parse(creativeWorkSchema, { -// '@type': 'CreativeWork', -// name: 'Alice in the Wonderland' -// }) -// ); -// } catch (error) { -// console.error(error.issues); - -// throw error; -// } -// }); - -// test('valibot bug', () => { -// console.log( -// parse( -// intersect([ -// union([ -// pipe( -// any(), -// // looseObject({ one: number() }), -// transform(value => Object.freeze(value)) -// ) -// ]), -// union([ -// pipe( -// any(), -// // looseObject({ two: number() }), -// transform(value => Object.freeze(value)) -// ) -// ]) -// ]), -// Object.freeze({ one: 1, two: 2 }) -// ) -// ); -// }); - -test('Should parse recursively into claimInterpreter', () => { - expect( - parse(creativeWorkSchema, { - '@context': 'https://schema.org', - '@id': '', - '@type': 'Message', - keywords: ['AllowCopy'], - type: 'https://schema.org/Message', - citation: { - '@id': 'https://bing.com/', - '@type': 'Claim', - claimInterpreter: { - '@type': 'Project', - slogan: 'Surfaced with Azure OpenAI', - url: 'https://www.microsoft.com/en-us/ai/responsible-ai' - }, - position: '1' - } - }) - ).toEqual({ - '@context': 'https://schema.org', - '@id': '', - '@type': 'Message', - additionalType: [], - alternateName: [], - citation: [ - { - '@id': 'https://bing.com/', - '@type': 'Claim', - abstract: [], - additionalType: [], - alternateName: [], - appearance: [], - author: [], - citation: [], - claimInterpreter: [ - { - '@type': 'Project', - additionalType: [], - alternateName: [], - description: [], - name: [], - potentialAction: [], - slogan: ['Surfaced with Azure OpenAI'], - url: ['https://www.microsoft.com/en-us/ai/responsible-ai'] - } - ], - creativeWorkStatus: [], - description: [], - isBasedOn: [], - isPartOf: [], - keywords: [], - name: [], - pattern: [], - position: ['1'], - potentialAction: [], - text: [], - url: [], - usageInfo: [] - } - ], - abstract: [], - author: [], - creativeWorkStatus: [], - description: [], - isBasedOn: [], - isPartOf: [], - keywords: ['AllowCopy'], - name: [], - pattern: [], - position: [], - potentialAction: [], - text: [], - url: [], - // type: ['https://schema.org/Message'], - usageInfo: [] - }); -}); - -// test('theory', () => { -// console.log(parse(intersect([ -// }); From 697fa5c0f05514b4e9eb5efb1240d48a54de934c Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 21:08:11 +0000 Subject: [PATCH 084/108] Move deprecated entrypoint into their barrel file --- packages/api/boot/deprecated/decorator.js | 7 +++ packages/api/boot/deprecated/decorator.mjs | 5 +++ packages/api/boot/deprecated/graph.js | 7 +++ .../graph.ts => boot/deprecated/graph.mjs} | 2 +- packages/api/boot/deprecated/hook.js | 7 +++ .../hook.ts => boot/deprecated/hook.mjs} | 2 +- packages/api/boot/deprecated/internal.js | 7 +++ .../deprecated/internal.mjs} | 2 +- packages/api/boot/deprecated/middleware.js | 7 +++ .../deprecated/middleware.mjs} | 2 +- packages/api/package.json | 43 ++++++++++++------- packages/api/src/boot/deprecated/decorator.ts | 5 --- packages/api/tsup.config.ts | 8 +--- packages/bundle/boot/deprecated/component.js | 7 +++ .../deprecated/component.mjs} | 2 +- packages/bundle/boot/deprecated/decorator.js | 7 +++ .../deprecated/decorator.mjs} | 2 +- packages/bundle/boot/deprecated/hook.js | 7 +++ .../hook.ts => boot/deprecated/hook.mjs} | 2 +- packages/bundle/boot/deprecated/internal.js | 7 +++ .../deprecated/internal.mjs} | 2 +- packages/bundle/boot/deprecated/middleware.js | 7 +++ .../deprecated/middleware.mjs} | 2 +- packages/bundle/package.json | 31 +++++-------- .../src/boot/exports/deprecated/minimal.ts | 5 --- packages/bundle/tsup.config.ts | 8 +--- .../component/boot/deprecated/component.js | 7 +++ .../deprecated/component.mjs} | 2 +- .../component/boot/deprecated/decorator.js | 7 +++ .../deprecated/decorator.mjs} | 2 +- packages/component/boot/deprecated/hook.js | 7 +++ .../hook.ts => boot/deprecated/hook.mjs} | 2 +- .../component/boot/deprecated/internal.js | 7 +++ .../deprecated/internal.mjs} | 2 +- packages/component/package.json | 25 ++++------- packages/component/tsup.config.ts | 7 +-- packages/core/boot/deprecated/activity.js | 7 +++ .../deprecated/activity.mjs} | 2 +- packages/core/boot/deprecated/graph.js | 7 +++ .../graph.ts => boot/deprecated/graph.mjs} | 2 +- packages/core/boot/deprecated/internal.js | 7 +++ .../deprecated/internal.mjs} | 2 +- packages/core/package.json | 19 +++----- packages/core/tsup.config.ts | 6 +-- 44 files changed, 198 insertions(+), 115 deletions(-) create mode 100644 packages/api/boot/deprecated/decorator.js create mode 100644 packages/api/boot/deprecated/decorator.mjs create mode 100644 packages/api/boot/deprecated/graph.js rename packages/api/{src/boot/deprecated/graph.ts => boot/deprecated/graph.mjs} (77%) create mode 100644 packages/api/boot/deprecated/hook.js rename packages/api/{src/boot/deprecated/hook.ts => boot/deprecated/hook.mjs} (77%) create mode 100644 packages/api/boot/deprecated/internal.js rename packages/api/{src/boot/deprecated/internal.ts => boot/deprecated/internal.mjs} (76%) create mode 100644 packages/api/boot/deprecated/middleware.js rename packages/api/{src/boot/deprecated/middleware.ts => boot/deprecated/middleware.mjs} (76%) delete mode 100644 packages/api/src/boot/deprecated/decorator.ts create mode 100644 packages/bundle/boot/deprecated/component.js rename packages/bundle/{src/boot/exports/deprecated/component.ts => boot/deprecated/component.mjs} (77%) create mode 100644 packages/bundle/boot/deprecated/decorator.js rename packages/bundle/{src/boot/exports/deprecated/decorator.ts => boot/deprecated/decorator.mjs} (77%) create mode 100644 packages/bundle/boot/deprecated/hook.js rename packages/bundle/{src/boot/exports/deprecated/hook.ts => boot/deprecated/hook.mjs} (77%) create mode 100644 packages/bundle/boot/deprecated/internal.js rename packages/bundle/{src/boot/exports/deprecated/internal.ts => boot/deprecated/internal.mjs} (77%) create mode 100644 packages/bundle/boot/deprecated/middleware.js rename packages/bundle/{src/boot/exports/deprecated/middleware.ts => boot/deprecated/middleware.mjs} (76%) delete mode 100644 packages/bundle/src/boot/exports/deprecated/minimal.ts create mode 100644 packages/component/boot/deprecated/component.js rename packages/component/{src/boot/deprecated/component.ts => boot/deprecated/component.mjs} (76%) create mode 100644 packages/component/boot/deprecated/decorator.js rename packages/component/{src/boot/deprecated/decorator.ts => boot/deprecated/decorator.mjs} (76%) create mode 100644 packages/component/boot/deprecated/hook.js rename packages/component/{src/boot/deprecated/hook.ts => boot/deprecated/hook.mjs} (76%) create mode 100644 packages/component/boot/deprecated/internal.js rename packages/component/{src/boot/deprecated/internal.ts => boot/deprecated/internal.mjs} (76%) create mode 100644 packages/core/boot/deprecated/activity.js rename packages/core/{src/boot/deprecated/activity.ts => boot/deprecated/activity.mjs} (76%) create mode 100644 packages/core/boot/deprecated/graph.js rename packages/core/{src/boot/deprecated/graph.ts => boot/deprecated/graph.mjs} (76%) create mode 100644 packages/core/boot/deprecated/internal.js rename packages/core/{src/boot/deprecated/internal.ts => boot/deprecated/internal.mjs} (76%) diff --git a/packages/api/boot/deprecated/decorator.js b/packages/api/boot/deprecated/decorator.js new file mode 100644 index 0000000000..51ae6a71b4 --- /dev/null +++ b/packages/api/boot/deprecated/decorator.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-api.decorator.js'); + +console.warn( + `require('botframework-webchat-api/decorator') is deprecated, please use require('botframework-webchat-api/decorator.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/api/boot/deprecated/decorator.mjs b/packages/api/boot/deprecated/decorator.mjs new file mode 100644 index 0000000000..af6d10b234 --- /dev/null +++ b/packages/api/boot/deprecated/decorator.mjs @@ -0,0 +1,5 @@ +export * from '../dist/botframework-webchat-api.decorator.mjs'; + +console.warn( + 'Import from "botframework-webchat-api/decorator" is deprecated, please import from "botframework-webchat-api/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' +); diff --git a/packages/api/boot/deprecated/graph.js b/packages/api/boot/deprecated/graph.js new file mode 100644 index 0000000000..28cda0fbb4 --- /dev/null +++ b/packages/api/boot/deprecated/graph.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-api.graph.js'); + +console.warn( + `require('botframework-webchat-api/graph') is deprecated, please use require('botframework-webchat-api/graph.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/api/src/boot/deprecated/graph.ts b/packages/api/boot/deprecated/graph.mjs similarity index 77% rename from packages/api/src/boot/deprecated/graph.ts rename to packages/api/boot/deprecated/graph.mjs index 643a02e1d6..b2709d99d9 100644 --- a/packages/api/src/boot/deprecated/graph.ts +++ b/packages/api/boot/deprecated/graph.mjs @@ -1,4 +1,4 @@ -export * from '../graph'; +export * from '../dist/botframework-webchat-api.graph.mjs'; console.warn( 'Import from "botframework-webchat-api/graph" is deprecated, please import from "botframework-webchat-api/graph.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/api/boot/deprecated/hook.js b/packages/api/boot/deprecated/hook.js new file mode 100644 index 0000000000..12db0b55f8 --- /dev/null +++ b/packages/api/boot/deprecated/hook.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-api.hook.js'); + +console.warn( + `require('botframework-webchat-api/hook') is deprecated, please use require('botframework-webchat-api/hook.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/api/src/boot/deprecated/hook.ts b/packages/api/boot/deprecated/hook.mjs similarity index 77% rename from packages/api/src/boot/deprecated/hook.ts rename to packages/api/boot/deprecated/hook.mjs index f4d410bd5b..c4562e37cf 100644 --- a/packages/api/src/boot/deprecated/hook.ts +++ b/packages/api/boot/deprecated/hook.mjs @@ -1,4 +1,4 @@ -export * from '../hook'; +export * from '../dist/botframework-webchat-api.hook.mjs'; console.warn( 'Import from "botframework-webchat-api/hook" is deprecated, please import from "botframework-webchat-api/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/api/boot/deprecated/internal.js b/packages/api/boot/deprecated/internal.js new file mode 100644 index 0000000000..eb8e34f67d --- /dev/null +++ b/packages/api/boot/deprecated/internal.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-api.internal.js'); + +console.warn( + `require('botframework-webchat-api/internal') is deprecated, please use require('botframework-webchat-api/internal.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/api/src/boot/deprecated/internal.ts b/packages/api/boot/deprecated/internal.mjs similarity index 76% rename from packages/api/src/boot/deprecated/internal.ts rename to packages/api/boot/deprecated/internal.mjs index f4bdafefd4..720509d899 100644 --- a/packages/api/src/boot/deprecated/internal.ts +++ b/packages/api/boot/deprecated/internal.mjs @@ -1,4 +1,4 @@ -export * from '../internal'; +export * from '../dist/botframework-webchat-api.internal.mjs'; console.warn( 'Import from "botframework-webchat-api/internal" is deprecated, please import from "botframework-webchat-api/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/api/boot/deprecated/middleware.js b/packages/api/boot/deprecated/middleware.js new file mode 100644 index 0000000000..535f867ff1 --- /dev/null +++ b/packages/api/boot/deprecated/middleware.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-api.middleware.js'); + +console.warn( + `require('botframework-webchat-api/middleware') is deprecated, please use require('botframework-webchat-api/middleware.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/api/src/boot/deprecated/middleware.ts b/packages/api/boot/deprecated/middleware.mjs similarity index 76% rename from packages/api/src/boot/deprecated/middleware.ts rename to packages/api/boot/deprecated/middleware.mjs index ad158792ee..66b6690832 100644 --- a/packages/api/src/boot/deprecated/middleware.ts +++ b/packages/api/boot/deprecated/middleware.mjs @@ -1,4 +1,4 @@ -export * from '../middleware'; +export * from '../dist/botframework-webchat-api.middleware.mjs'; console.warn( 'Import from "botframework-webchat-api/middleware" is deprecated, please import from "botframework-webchat-api/middleware.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/api/package.json b/packages/api/package.json index 65da092ad3..134b80d3f2 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -17,12 +17,10 @@ }, "./decorator": { "import": { - "types": "./dist/botframework-webchat-api.deprecated.decorator.d.mts", - "default": "./dist/botframework-webchat-api.deprecated.decorator.mjs" + "default": "./boot/deprecated/decorator.mjs" }, "require": { - "types": "./dist/botframework-webchat-api.deprecated.decorator.d.ts", - "default": "./dist/botframework-webchat-api.deprecated.decorator.js" + "default": "./boot/deprecated/decorator.js" } }, "./decorator.js": { @@ -35,14 +33,30 @@ "default": "./dist/botframework-webchat-api.decorator.js" } }, + "./graph": { + "import": { + "default": "./boot/deprecated/graph.mjs" + }, + "require": { + "default": "./boot/deprecated/graph.js" + } + }, + "./graph.js": { + "import": { + "types": "./dist/botframework-webchat-api.graph.d.mts", + "default": "./dist/botframework-webchat-api.graph.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-api.graph.d.ts", + "default": "./dist/botframework-webchat-api.graph.js" + } + }, "./hook": { "import": { - "types": "./dist/botframework-webchat-api.deprecated.hook.d.mts", - "default": "./dist/botframework-webchat-api.deprecated.hook.mjs" + "default": "./boot/deprecated/hook.mjs" }, "require": { - "types": "./dist/botframework-webchat-api.deprecated.hook.d.ts", - "default": "./dist/botframework-webchat-api.deprecated.hook.js" + "default": "./boot/deprecated/hook.js" } }, "./hook.js": { @@ -57,12 +71,10 @@ }, "./internal": { "import": { - "types": "./dist/botframework-webchat-api.deprecated.internal.d.mts", - "default": "./dist/botframework-webchat-api.deprecated.internal.mjs" + "default": "./boot/deprecated/internal.mjs" }, "require": { - "types": "./dist/botframework-webchat-api.deprecated.internal.d.ts", - "default": "./dist/botframework-webchat-api.deprecated.internal.js" + "default": "./boot/deprecated/internal.js" } }, "./internal.js": { @@ -77,12 +89,10 @@ }, "./middleware": { "import": { - "types": "./dist/botframework-webchat-api.deprecated.middleware.d.mts", - "default": "./dist/botframework-webchat-api.deprecated.middleware.mjs" + "default": "./boot/deprecated/middleware.mjs" }, "require": { - "types": "./dist/botframework-webchat-api.deprecated.middleware.d.ts", - "default": "./dist/botframework-webchat-api.deprecated.middleware.js" + "default": "./boot/deprecated/middleware.js" } }, "./middleware.js": { @@ -110,6 +120,7 @@ }, "files": [ "./*.js", + "./boot/**/*", "./dist/**/*", "./src/**/*" ], diff --git a/packages/api/src/boot/deprecated/decorator.ts b/packages/api/src/boot/deprecated/decorator.ts deleted file mode 100644 index 72b09ad1ed..0000000000 --- a/packages/api/src/boot/deprecated/decorator.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from '../decorator'; - -console.warn( - 'Import from "botframework-webchat-api/decorator" is being deprecated, please import from "botframework-webchat-api/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' -); diff --git a/packages/api/tsup.config.ts b/packages/api/tsup.config.ts index 9b34328dfe..ef99ac1eed 100644 --- a/packages/api/tsup.config.ts +++ b/packages/api/tsup.config.ts @@ -10,13 +10,7 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat-api.graph': './src/boot/graph.ts', 'botframework-webchat-api.hook': './src/boot/hook.ts', 'botframework-webchat-api.internal': './src/boot/internal.ts', - 'botframework-webchat-api.middleware': './src/boot/middleware.ts', - // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. - 'botframework-webchat-api.deprecated.decorator': './src/boot/deprecated/decorator.ts', - 'botframework-webchat-api.deprecated.graph': './src/boot/deprecated/graph.ts', - 'botframework-webchat-api.deprecated.hook': './src/boot/deprecated/hook.ts', - 'botframework-webchat-api.deprecated.internal': './src/boot/deprecated/internal.ts', - 'botframework-webchat-api.deprecated.middleware': './src/boot/deprecated/middleware.ts' + 'botframework-webchat-api.middleware': './src/boot/middleware.ts' } })); diff --git a/packages/bundle/boot/deprecated/component.js b/packages/bundle/boot/deprecated/component.js new file mode 100644 index 0000000000..8c90d20fd8 --- /dev/null +++ b/packages/bundle/boot/deprecated/component.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat.component.js'); + +console.warn( + `require('botframework-webchat/component') is deprecated, please use require('botframework-webchat/component.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/bundle/src/boot/exports/deprecated/component.ts b/packages/bundle/boot/deprecated/component.mjs similarity index 77% rename from packages/bundle/src/boot/exports/deprecated/component.ts rename to packages/bundle/boot/deprecated/component.mjs index 27960fa7bb..b4ec399c64 100644 --- a/packages/bundle/src/boot/exports/deprecated/component.ts +++ b/packages/bundle/boot/deprecated/component.mjs @@ -1,4 +1,4 @@ -export * from '../component'; +export * from '../dist/botframework-webchat.component.mjs'; console.warn( 'Import from "botframework-webchat/component" is deprecated, please import from "botframework-webchat/component.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/decorator.js b/packages/bundle/boot/deprecated/decorator.js new file mode 100644 index 0000000000..a96d62cc3d --- /dev/null +++ b/packages/bundle/boot/deprecated/decorator.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat.decorator.js'); + +console.warn( + `require('botframework-webchat/decorator') is deprecated, please use require('botframework-webchat/decorator.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/bundle/src/boot/exports/deprecated/decorator.ts b/packages/bundle/boot/deprecated/decorator.mjs similarity index 77% rename from packages/bundle/src/boot/exports/deprecated/decorator.ts rename to packages/bundle/boot/deprecated/decorator.mjs index dc98f55704..8a7167398f 100644 --- a/packages/bundle/src/boot/exports/deprecated/decorator.ts +++ b/packages/bundle/boot/deprecated/decorator.mjs @@ -1,4 +1,4 @@ -export * from '../decorator'; +export * from '../dist/botframework-webchat.decorator.mjs'; console.warn( 'Import from "botframework-webchat/decorator" is deprecated, please import from "botframework-webchat/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/hook.js b/packages/bundle/boot/deprecated/hook.js new file mode 100644 index 0000000000..8dd6ff5eaf --- /dev/null +++ b/packages/bundle/boot/deprecated/hook.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat.hook.js'); + +console.warn( + `require('botframework-webchat/hook') is deprecated, please use require('botframework-webchat/hook.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/bundle/src/boot/exports/deprecated/hook.ts b/packages/bundle/boot/deprecated/hook.mjs similarity index 77% rename from packages/bundle/src/boot/exports/deprecated/hook.ts rename to packages/bundle/boot/deprecated/hook.mjs index fbef585f2f..4ba4301e6d 100644 --- a/packages/bundle/src/boot/exports/deprecated/hook.ts +++ b/packages/bundle/boot/deprecated/hook.mjs @@ -1,4 +1,4 @@ -export * from '../hook'; +export * from '../dist/botframework-webchat.hook.mjs'; console.warn( 'Import from "botframework-webchat/hook" is deprecated, please import from "botframework-webchat/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/internal.js b/packages/bundle/boot/deprecated/internal.js new file mode 100644 index 0000000000..4975bb9ada --- /dev/null +++ b/packages/bundle/boot/deprecated/internal.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat.internal.js'); + +console.warn( + `require('botframework-webchat/internal') is deprecated, please use require('botframework-webchat/internal.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/bundle/src/boot/exports/deprecated/internal.ts b/packages/bundle/boot/deprecated/internal.mjs similarity index 77% rename from packages/bundle/src/boot/exports/deprecated/internal.ts rename to packages/bundle/boot/deprecated/internal.mjs index 346b5be04b..f9f3d82ef4 100644 --- a/packages/bundle/src/boot/exports/deprecated/internal.ts +++ b/packages/bundle/boot/deprecated/internal.mjs @@ -1,4 +1,4 @@ -export * from '../internal'; +export * from '../dist/botframework-webchat.internal.mjs'; console.warn( 'Import from "botframework-webchat/internal" is deprecated, please import from "botframework-webchat/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/middleware.js b/packages/bundle/boot/deprecated/middleware.js new file mode 100644 index 0000000000..9d46a3d9dd --- /dev/null +++ b/packages/bundle/boot/deprecated/middleware.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat.middleware.js'); + +console.warn( + `require('botframework-webchat/middleware') is deprecated, please use require('botframework-webchat/middleware.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/bundle/src/boot/exports/deprecated/middleware.ts b/packages/bundle/boot/deprecated/middleware.mjs similarity index 76% rename from packages/bundle/src/boot/exports/deprecated/middleware.ts rename to packages/bundle/boot/deprecated/middleware.mjs index 6fd569d069..87f84e4f5d 100644 --- a/packages/bundle/src/boot/exports/deprecated/middleware.ts +++ b/packages/bundle/boot/deprecated/middleware.mjs @@ -1,4 +1,4 @@ -export * from '../middleware'; +export * from '../dist/botframework-webchat.middleware.mjs'; console.warn( 'Import from "botframework-webchat/middleware" is deprecated, please import from "botframework-webchat/middleware.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/package.json b/packages/bundle/package.json index d3c4d104b8..ebb251fbc0 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -17,12 +17,10 @@ }, "./component": { "import": { - "types": "./dist/botframework-webchat.deprecated.component.d.mts", - "default": "./dist/botframework-webchat.deprecated.component.mjs" + "default": "./boot/deprecated/component.mjs" }, "require": { - "types": "./dist/botframework-webchat.deprecated.component.d.ts", - "default": "./dist/botframework-webchat.deprecated.component.js" + "default": "./boot/deprecated/component.js" } }, "./component.js": { @@ -37,12 +35,10 @@ }, "./decorator": { "import": { - "types": "./dist/botframework-webchat.deprecated.decorator.d.mts", - "default": "./dist/botframework-webchat.deprecated.decorator.mjs" + "default": "./boot/deprecated/decorator.mjs" }, "require": { - "types": "./dist/botframework-webchat.deprecated.decorator.d.ts", - "default": "./dist/botframework-webchat.deprecated.decorator.js" + "default": "./boot/deprecated/decorator.js" } }, "./decorator.js": { @@ -57,12 +53,10 @@ }, "./hook": { "import": { - "types": "./dist/botframework-webchat.deprecated.hook.d.mts", - "default": "./dist/botframework-webchat.deprecated.hook.mjs" + "default": "./boot/deprecated/hook.mjs" }, "require": { - "types": "./dist/botframework-webchat.deprecated.hook.d.ts", - "default": "./dist/botframework-webchat.deprecated.hook.js" + "default": "./boot/deprecated/hook.js" } }, "./hook.js": { @@ -77,12 +71,10 @@ }, "./internal": { "import": { - "types": "./dist/botframework-webchat.deprecated.internal.d.mts", - "default": "./dist/botframework-webchat.deprecated.internal.mjs" + "default": "./boot/deprecated/internal.mjs" }, "require": { - "types": "./dist/botframework-webchat.deprecated.internal.d.ts", - "default": "./dist/botframework-webchat.deprecated.internal.js" + "default": "./boot/deprecated/internal.js" } }, "./internal.js": { @@ -97,12 +89,10 @@ }, "./middleware": { "import": { - "types": "./dist/botframework-webchat.deprecated.middleware.d.mts", - "default": "./dist/botframework-webchat.deprecated.middleware.mjs" + "default": "./boot/deprecated/middleware.mjs" }, "require": { - "types": "./dist/botframework-webchat.deprecated.middleware.d.ts", - "default": "./dist/botframework-webchat.deprecated.middleware.js" + "default": "./boot/deprecated/middleware.js" } }, "./middleware.js": { @@ -142,6 +132,7 @@ "homepage": "https://github.com/microsoft/BotFramework-WebChat/#readme", "files": [ "./*.js", + "./boot/**/*", "./dist/**/*", "./src/**/*", "./static/**/*" diff --git a/packages/bundle/src/boot/exports/deprecated/minimal.ts b/packages/bundle/src/boot/exports/deprecated/minimal.ts deleted file mode 100644 index 8b291a4a98..0000000000 --- a/packages/bundle/src/boot/exports/deprecated/minimal.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from '../minimal'; - -console.warn( - 'Import from "botframework-webchat/minimal" is deprecated, please import from "botframework-webchat/minimal.js" instead. This entrypoint will be removed on or after 2028-04-24.' -); diff --git a/packages/bundle/tsup.config.ts b/packages/bundle/tsup.config.ts index e74cd1df4b..9d34a31789 100644 --- a/packages/bundle/tsup.config.ts +++ b/packages/bundle/tsup.config.ts @@ -27,13 +27,7 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat.hook': './src/boot/exports/hook.ts', 'botframework-webchat.internal': './src/boot/exports/internal.ts', 'botframework-webchat.middleware': './src/boot/exports/middleware.ts', - 'botframework-webchat.schema': './src/boot/exports/schema.ts', - // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. - 'botframework-webchat.deprecated.component': './src/boot/exports/deprecated/component.ts', - 'botframework-webchat.deprecated.decorator': './src/boot/exports/deprecated/decorator.ts', - 'botframework-webchat.deprecated.hook': './src/boot/exports/deprecated/hook.ts', - 'botframework-webchat.deprecated.internal': './src/boot/exports/deprecated/internal.ts', - 'botframework-webchat.deprecated.middleware': './src/boot/exports/deprecated/middleware.ts' + 'botframework-webchat.schema': './src/boot/exports/schema.ts' }, env: { ...config.env, diff --git a/packages/component/boot/deprecated/component.js b/packages/component/boot/deprecated/component.js new file mode 100644 index 0000000000..f6878d2fdb --- /dev/null +++ b/packages/component/boot/deprecated/component.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-component.component.js'); + +console.warn( + `require('botframework-webchat-component/component') is deprecated, please use require('botframework-webchat-component/component.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/component/src/boot/deprecated/component.ts b/packages/component/boot/deprecated/component.mjs similarity index 76% rename from packages/component/src/boot/deprecated/component.ts rename to packages/component/boot/deprecated/component.mjs index 33ae183e0c..85d31db3a8 100644 --- a/packages/component/src/boot/deprecated/component.ts +++ b/packages/component/boot/deprecated/component.mjs @@ -1,4 +1,4 @@ -export * from '../component'; +export * from '../dist/botframework-webchat-component.component.mjs'; console.warn( 'Import from "botframework-webchat-component/component" is deprecated, please import from "botframework-webchat-component/component.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/component/boot/deprecated/decorator.js b/packages/component/boot/deprecated/decorator.js new file mode 100644 index 0000000000..e4fbbca203 --- /dev/null +++ b/packages/component/boot/deprecated/decorator.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-component.decorator.js'); + +console.warn( + `require('botframework-webchat-component/decorator') is deprecated, please use require('botframework-webchat-component/decorator.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/component/src/boot/deprecated/decorator.ts b/packages/component/boot/deprecated/decorator.mjs similarity index 76% rename from packages/component/src/boot/deprecated/decorator.ts rename to packages/component/boot/deprecated/decorator.mjs index 4915f0028a..29b27ebf31 100644 --- a/packages/component/src/boot/deprecated/decorator.ts +++ b/packages/component/boot/deprecated/decorator.mjs @@ -1,4 +1,4 @@ -export * from '../decorator'; +export * from '../dist/botframework-webchat-component.decorator.mjs'; console.warn( 'Import from "botframework-webchat-component/decorator" is deprecated, please import from "botframework-webchat-component/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/component/boot/deprecated/hook.js b/packages/component/boot/deprecated/hook.js new file mode 100644 index 0000000000..44ad36dc82 --- /dev/null +++ b/packages/component/boot/deprecated/hook.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-component.hook.js'); + +console.warn( + `require('botframework-webchat-component/hook') is deprecated, please use require('botframework-webchat-component/hook.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/component/src/boot/deprecated/hook.ts b/packages/component/boot/deprecated/hook.mjs similarity index 76% rename from packages/component/src/boot/deprecated/hook.ts rename to packages/component/boot/deprecated/hook.mjs index 4abac54c5a..e42241a235 100644 --- a/packages/component/src/boot/deprecated/hook.ts +++ b/packages/component/boot/deprecated/hook.mjs @@ -1,4 +1,4 @@ -export * from '../hook'; +export * from '../dist/botframework-webchat-component.hook.mjs'; console.warn( 'Import from "botframework-webchat-component/hook" is deprecated, please import from "botframework-webchat-component/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/component/boot/deprecated/internal.js b/packages/component/boot/deprecated/internal.js new file mode 100644 index 0000000000..b56482d5d3 --- /dev/null +++ b/packages/component/boot/deprecated/internal.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-component.internal.js'); + +console.warn( + `require('botframework-webchat-component/internal') is deprecated, please use require('botframework-webchat-component/internal.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/component/src/boot/deprecated/internal.ts b/packages/component/boot/deprecated/internal.mjs similarity index 76% rename from packages/component/src/boot/deprecated/internal.ts rename to packages/component/boot/deprecated/internal.mjs index a9aa52e2e9..707c0a65b3 100644 --- a/packages/component/src/boot/deprecated/internal.ts +++ b/packages/component/boot/deprecated/internal.mjs @@ -1,4 +1,4 @@ -export * from '../internal'; +export * from '../dist/botframework-webchat-component.internal.mjs'; console.warn( 'Import from "botframework-webchat-component/internal" is deprecated, please import from "botframework-webchat-component/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/component/package.json b/packages/component/package.json index 2b44b96fc8..453c64fa11 100644 --- a/packages/component/package.json +++ b/packages/component/package.json @@ -17,12 +17,10 @@ }, "./component": { "import": { - "types": "./dist/botframework-webchat-component.deprecated.component.d.mts", - "default": "./dist/botframework-webchat-component.deprecated.component.mjs" + "default": "./boot/deprecated/component.mjs" }, "require": { - "types": "./dist/botframework-webchat-component.deprecated.component.d.ts", - "default": "./dist/botframework-webchat-component.deprecated.component.js" + "default": "./boot/deprecated/component.js" } }, "./component.js": { @@ -37,12 +35,10 @@ }, "./decorator": { "import": { - "types": "./dist/botframework-webchat-component.deprecated.decorator.d.mts", - "default": "./dist/botframework-webchat-component.deprecated.decorator.mjs" + "default": "./boot/deprecated/decorator.mjs" }, "require": { - "types": "./dist/botframework-webchat-component.deprecated.decorator.d.ts", - "default": "./dist/botframework-webchat-component.deprecated.decorator.js" + "default": "./boot/deprecated/decorator.js" } }, "./decorator.js": { @@ -57,12 +53,10 @@ }, "./hook": { "import": { - "types": "./dist/botframework-webchat-component.deprecated.hook.d.mts", - "default": "./dist/botframework-webchat-component.deprecated.hook.mjs" + "default": "./boot/deprecated/hook.mjs" }, "require": { - "types": "./dist/botframework-webchat-component.deprecated.hook.d.ts", - "default": "./dist/botframework-webchat-component.deprecated.hook.js" + "default": "./boot/deprecated/hook.js" } }, "./hook.js": { @@ -77,12 +71,10 @@ }, "./internal": { "import": { - "types": "./dist/botframework-webchat-component.deprecated.internal.d.mts", - "default": "./dist/botframework-webchat-component.deprecated.internal.mjs" + "default": "./boot/deprecated/internal.mjs" }, "require": { - "types": "./dist/botframework-webchat-component.deprecated.internal.d.ts", - "default": "./dist/botframework-webchat-component.deprecated.internal.js" + "default": "./boot/deprecated/internal.js" } }, "./internal.js": { @@ -110,6 +102,7 @@ }, "files": [ "./*.js", + "./boot/**/*", "./dist/**/*", "./src/**/*" ], diff --git a/packages/component/tsup.config.ts b/packages/component/tsup.config.ts index 0b32480db1..90a9370a5d 100644 --- a/packages/component/tsup.config.ts +++ b/packages/component/tsup.config.ts @@ -12,12 +12,7 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat-component.component': './src/boot/component.ts', 'botframework-webchat-component.decorator': './src/boot/decorator.ts', 'botframework-webchat-component.hook': './src/boot/hook.ts', - 'botframework-webchat-component.internal': './src/boot/internal.ts', - // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. - 'botframework-webchat-component.deprecated.component': './src/boot/deprecated/component.ts', - 'botframework-webchat-component.deprecated.decorator': './src/boot/deprecated/decorator.ts', - 'botframework-webchat-component.deprecated.hook': './src/boot/deprecated/hook.ts', - 'botframework-webchat-component.deprecated.internal': './src/boot/deprecated/internal.ts' + 'botframework-webchat-component.internal': './src/boot/internal.ts' }, esbuildPlugins: [ ...(config.esbuildPlugins ?? []), diff --git a/packages/core/boot/deprecated/activity.js b/packages/core/boot/deprecated/activity.js new file mode 100644 index 0000000000..9ff61428ff --- /dev/null +++ b/packages/core/boot/deprecated/activity.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-core.activity.js'); + +console.warn( + `require('botframework-webchat-core/activity') is deprecated, please use require('botframework-webchat-core/activity.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/core/src/boot/deprecated/activity.ts b/packages/core/boot/deprecated/activity.mjs similarity index 76% rename from packages/core/src/boot/deprecated/activity.ts rename to packages/core/boot/deprecated/activity.mjs index e5e01864d7..eadfa8ea03 100644 --- a/packages/core/src/boot/deprecated/activity.ts +++ b/packages/core/boot/deprecated/activity.mjs @@ -1,4 +1,4 @@ -export * from '../activity'; +export * from '../dist/botframework-webchat-core.activity.mjs'; console.warn( 'Import from "botframework-webchat-core/activity" is deprecated, please import from "botframework-webchat-core/activity.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/core/boot/deprecated/graph.js b/packages/core/boot/deprecated/graph.js new file mode 100644 index 0000000000..3449fa945f --- /dev/null +++ b/packages/core/boot/deprecated/graph.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-core.graph.js'); + +console.warn( + `require('botframework-webchat-core/graph') is deprecated, please use require('botframework-webchat-core/graph.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/core/src/boot/deprecated/graph.ts b/packages/core/boot/deprecated/graph.mjs similarity index 76% rename from packages/core/src/boot/deprecated/graph.ts rename to packages/core/boot/deprecated/graph.mjs index d2520aa4c1..f91de47f34 100644 --- a/packages/core/src/boot/deprecated/graph.ts +++ b/packages/core/boot/deprecated/graph.mjs @@ -1,4 +1,4 @@ -export * from '../graph'; +export * from '../dist/botframework-webchat-core.graph.mjs'; console.warn( 'Import from "botframework-webchat-core/graph" is deprecated, please import from "botframework-webchat-core/graph.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/core/boot/deprecated/internal.js b/packages/core/boot/deprecated/internal.js new file mode 100644 index 0000000000..96d6bd0472 --- /dev/null +++ b/packages/core/boot/deprecated/internal.js @@ -0,0 +1,7 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('../../dist/botframework-webchat-core.internal.js'); + +console.warn( + `require('botframework-webchat-core/internal') is deprecated, please use require('botframework-webchat-core/internal.js') instead. This entrypoint will be removed on or after 2028-04-24.` +); diff --git a/packages/core/src/boot/deprecated/internal.ts b/packages/core/boot/deprecated/internal.mjs similarity index 76% rename from packages/core/src/boot/deprecated/internal.ts rename to packages/core/boot/deprecated/internal.mjs index 253a0301d3..47a686df68 100644 --- a/packages/core/src/boot/deprecated/internal.ts +++ b/packages/core/boot/deprecated/internal.mjs @@ -1,4 +1,4 @@ -export * from '../internal'; +export * from '../dist/botframework-webchat-core.internal.mjs'; console.warn( 'Import from "botframework-webchat-core/internal" is deprecated, please import from "botframework-webchat-core/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/core/package.json b/packages/core/package.json index 8c31a7c6a7..b722baa1ef 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -17,12 +17,10 @@ }, "./activity": { "import": { - "types": "./dist/botframework-webchat-core.deprecated.activity.d.mts", - "default": "./dist/botframework-webchat-core.deprecated.activity.mjs" + "default": "./boot/deprecated/activity.mjs" }, "require": { - "types": "./dist/botframework-webchat-core.deprecated.activity.d.ts", - "default": "./dist/botframework-webchat-core.deprecated.activity.js" + "default": "./boot/deprecated/activity.js" } }, "./activity.js": { @@ -37,12 +35,10 @@ }, "./graph": { "import": { - "types": "./dist/botframework-webchat-core.deprecated.graph.d.mts", - "default": "./dist/botframework-webchat-core.deprecated.graph.mjs" + "default": "./boot/deprecated/graph.mjs" }, "require": { - "types": "./dist/botframework-webchat-core.deprecated.graph.d.ts", - "default": "./dist/botframework-webchat-core.deprecated.graph.js" + "default": "./boot/deprecated/graph.js" } }, "./graph.js": { @@ -57,12 +53,10 @@ }, "./internal": { "import": { - "types": "./dist/botframework-webchat-core.deprecated.internal.d.mts", - "default": "./dist/botframework-webchat-core.deprecated.internal.mjs" + "default": "./boot/deprecated/internal.mjs" }, "require": { - "types": "./dist/botframework-webchat-core.deprecated.internal.d.ts", - "default": "./dist/botframework-webchat-core.deprecated.internal.js" + "default": "./boot/deprecated/internal.js" } }, "./internal.js": { @@ -90,6 +84,7 @@ }, "files": [ "./*.js", + "./boot/**/*", "./dist/**/*", "./src/**/*" ], diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts index 70176fc933..1415416ea6 100644 --- a/packages/core/tsup.config.ts +++ b/packages/core/tsup.config.ts @@ -8,11 +8,7 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat-core': './src/index.ts', 'botframework-webchat-core.activity': './src/boot/activity.ts', 'botframework-webchat-core.graph': './src/boot/graph.ts', - 'botframework-webchat-core.internal': './src/boot/internal.ts', - // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. - 'botframework-webchat-core.deprecated.activity': './src/boot/deprecated/activity.ts', - 'botframework-webchat-core.deprecated.graph': './src/boot/deprecated/graph.ts', - 'botframework-webchat-core.deprecated.internal': './src/boot/deprecated/internal.ts' + 'botframework-webchat-core.internal': './src/boot/internal.ts' } })); From c7ae32f202b54ee5a27d34d66f1e9acb9a3c6b3f Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 21:14:48 +0000 Subject: [PATCH 085/108] Moved to /boot/ --- .../test-d/direct-line-activity-from-user-send-failed.test-d.ts | 2 +- .../test-d/direct-line-activity-from-user-sending.test-d.ts | 2 +- .../core/test-d/direct-line-activity-from-user-sent.test-d.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/test-d/direct-line-activity-from-user-send-failed.test-d.ts b/packages/core/test-d/direct-line-activity-from-user-send-failed.test-d.ts index 2332a4c54b..b212568fdb 100644 --- a/packages/core/test-d/direct-line-activity-from-user-send-failed.test-d.ts +++ b/packages/core/test-d/direct-line-activity-from-user-send-failed.test-d.ts @@ -1,6 +1,6 @@ import { expectAssignable } from 'tsd'; -import type { LocalId } from '../src/activity'; +import type { LocalId } from '../src/boot/activity'; import { type WebChatActivity } from '../src/index'; // All activities that failed to send, are activities that never reach the server (a.k.a. activity-in-transit). diff --git a/packages/core/test-d/direct-line-activity-from-user-sending.test-d.ts b/packages/core/test-d/direct-line-activity-from-user-sending.test-d.ts index d169ac9045..e016ee2bde 100644 --- a/packages/core/test-d/direct-line-activity-from-user-sending.test-d.ts +++ b/packages/core/test-d/direct-line-activity-from-user-sending.test-d.ts @@ -1,6 +1,6 @@ import { expectAssignable } from 'tsd'; -import type { LocalId } from '../src/activity'; +import type { LocalId } from '../src/boot/activity'; import { type WebChatActivity } from '../src/index'; // All activities that are sending, are activities that did not reach the server yet (a.k.a. activity-in-transit). diff --git a/packages/core/test-d/direct-line-activity-from-user-sent.test-d.ts b/packages/core/test-d/direct-line-activity-from-user-sent.test-d.ts index 411e6ae67e..5786270362 100644 --- a/packages/core/test-d/direct-line-activity-from-user-sent.test-d.ts +++ b/packages/core/test-d/direct-line-activity-from-user-sent.test-d.ts @@ -1,6 +1,6 @@ import { expectAssignable } from 'tsd'; -import type { LocalId } from '../src/activity'; +import type { LocalId } from '../src/boot/activity'; import { type WebChatActivity } from '../src/index'; // All activities which are "sent", must be from server. From 652591c415b5b7a815bb9446d243cf3722504144 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 21:18:07 +0000 Subject: [PATCH 086/108] Fix paths --- packages/api/boot/deprecated/decorator.mjs | 2 +- packages/api/boot/deprecated/graph.mjs | 2 +- packages/api/boot/deprecated/hook.mjs | 2 +- packages/api/boot/deprecated/internal.mjs | 2 +- packages/api/boot/deprecated/middleware.mjs | 2 +- packages/bundle/boot/deprecated/component.mjs | 2 +- packages/bundle/boot/deprecated/decorator.mjs | 2 +- packages/bundle/boot/deprecated/hook.mjs | 2 +- packages/bundle/boot/deprecated/internal.mjs | 2 +- packages/bundle/boot/deprecated/middleware.mjs | 2 +- packages/component/boot/deprecated/component.mjs | 2 +- packages/component/boot/deprecated/decorator.mjs | 2 +- packages/component/boot/deprecated/hook.mjs | 2 +- packages/component/boot/deprecated/internal.mjs | 2 +- packages/core/boot/deprecated/activity.mjs | 2 +- packages/core/boot/deprecated/graph.mjs | 2 +- packages/core/boot/deprecated/internal.mjs | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/api/boot/deprecated/decorator.mjs b/packages/api/boot/deprecated/decorator.mjs index af6d10b234..a5c969255d 100644 --- a/packages/api/boot/deprecated/decorator.mjs +++ b/packages/api/boot/deprecated/decorator.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-api.decorator.mjs'; +export * from '../../dist/botframework-webchat-api.decorator.mjs'; console.warn( 'Import from "botframework-webchat-api/decorator" is deprecated, please import from "botframework-webchat-api/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/api/boot/deprecated/graph.mjs b/packages/api/boot/deprecated/graph.mjs index b2709d99d9..43213b93b8 100644 --- a/packages/api/boot/deprecated/graph.mjs +++ b/packages/api/boot/deprecated/graph.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-api.graph.mjs'; +export * from '../../dist/botframework-webchat-api.graph.mjs'; console.warn( 'Import from "botframework-webchat-api/graph" is deprecated, please import from "botframework-webchat-api/graph.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/api/boot/deprecated/hook.mjs b/packages/api/boot/deprecated/hook.mjs index c4562e37cf..a919827465 100644 --- a/packages/api/boot/deprecated/hook.mjs +++ b/packages/api/boot/deprecated/hook.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-api.hook.mjs'; +export * from '../../dist/botframework-webchat-api.hook.mjs'; console.warn( 'Import from "botframework-webchat-api/hook" is deprecated, please import from "botframework-webchat-api/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/api/boot/deprecated/internal.mjs b/packages/api/boot/deprecated/internal.mjs index 720509d899..a1957e345e 100644 --- a/packages/api/boot/deprecated/internal.mjs +++ b/packages/api/boot/deprecated/internal.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-api.internal.mjs'; +export * from '../../dist/botframework-webchat-api.internal.mjs'; console.warn( 'Import from "botframework-webchat-api/internal" is deprecated, please import from "botframework-webchat-api/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/api/boot/deprecated/middleware.mjs b/packages/api/boot/deprecated/middleware.mjs index 66b6690832..2effbed98d 100644 --- a/packages/api/boot/deprecated/middleware.mjs +++ b/packages/api/boot/deprecated/middleware.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-api.middleware.mjs'; +export * from '../../dist/botframework-webchat-api.middleware.mjs'; console.warn( 'Import from "botframework-webchat-api/middleware" is deprecated, please import from "botframework-webchat-api/middleware.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/component.mjs b/packages/bundle/boot/deprecated/component.mjs index b4ec399c64..9365d63553 100644 --- a/packages/bundle/boot/deprecated/component.mjs +++ b/packages/bundle/boot/deprecated/component.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat.component.mjs'; +export * from '../../dist/botframework-webchat.component.mjs'; console.warn( 'Import from "botframework-webchat/component" is deprecated, please import from "botframework-webchat/component.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/decorator.mjs b/packages/bundle/boot/deprecated/decorator.mjs index 8a7167398f..e21d8523d5 100644 --- a/packages/bundle/boot/deprecated/decorator.mjs +++ b/packages/bundle/boot/deprecated/decorator.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat.decorator.mjs'; +export * from '../../dist/botframework-webchat.decorator.mjs'; console.warn( 'Import from "botframework-webchat/decorator" is deprecated, please import from "botframework-webchat/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/hook.mjs b/packages/bundle/boot/deprecated/hook.mjs index 4ba4301e6d..526525f3d0 100644 --- a/packages/bundle/boot/deprecated/hook.mjs +++ b/packages/bundle/boot/deprecated/hook.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat.hook.mjs'; +export * from '../../dist/botframework-webchat.hook.mjs'; console.warn( 'Import from "botframework-webchat/hook" is deprecated, please import from "botframework-webchat/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/internal.mjs b/packages/bundle/boot/deprecated/internal.mjs index f9f3d82ef4..f7db41346c 100644 --- a/packages/bundle/boot/deprecated/internal.mjs +++ b/packages/bundle/boot/deprecated/internal.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat.internal.mjs'; +export * from '../../dist/botframework-webchat.internal.mjs'; console.warn( 'Import from "botframework-webchat/internal" is deprecated, please import from "botframework-webchat/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/bundle/boot/deprecated/middleware.mjs b/packages/bundle/boot/deprecated/middleware.mjs index 87f84e4f5d..609b540a58 100644 --- a/packages/bundle/boot/deprecated/middleware.mjs +++ b/packages/bundle/boot/deprecated/middleware.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat.middleware.mjs'; +export * from '../../dist/botframework-webchat.middleware.mjs'; console.warn( 'Import from "botframework-webchat/middleware" is deprecated, please import from "botframework-webchat/middleware.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/component/boot/deprecated/component.mjs b/packages/component/boot/deprecated/component.mjs index 85d31db3a8..a2d9825bfc 100644 --- a/packages/component/boot/deprecated/component.mjs +++ b/packages/component/boot/deprecated/component.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-component.component.mjs'; +export * from '../../dist/botframework-webchat-component.component.mjs'; console.warn( 'Import from "botframework-webchat-component/component" is deprecated, please import from "botframework-webchat-component/component.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/component/boot/deprecated/decorator.mjs b/packages/component/boot/deprecated/decorator.mjs index 29b27ebf31..3abebf913a 100644 --- a/packages/component/boot/deprecated/decorator.mjs +++ b/packages/component/boot/deprecated/decorator.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-component.decorator.mjs'; +export * from '../../dist/botframework-webchat-component.decorator.mjs'; console.warn( 'Import from "botframework-webchat-component/decorator" is deprecated, please import from "botframework-webchat-component/decorator.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/component/boot/deprecated/hook.mjs b/packages/component/boot/deprecated/hook.mjs index e42241a235..8462e99d6c 100644 --- a/packages/component/boot/deprecated/hook.mjs +++ b/packages/component/boot/deprecated/hook.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-component.hook.mjs'; +export * from '../../dist/botframework-webchat-component.hook.mjs'; console.warn( 'Import from "botframework-webchat-component/hook" is deprecated, please import from "botframework-webchat-component/hook.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/component/boot/deprecated/internal.mjs b/packages/component/boot/deprecated/internal.mjs index 707c0a65b3..3abab5d608 100644 --- a/packages/component/boot/deprecated/internal.mjs +++ b/packages/component/boot/deprecated/internal.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-component.internal.mjs'; +export * from '../../dist/botframework-webchat-component.internal.mjs'; console.warn( 'Import from "botframework-webchat-component/internal" is deprecated, please import from "botframework-webchat-component/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/core/boot/deprecated/activity.mjs b/packages/core/boot/deprecated/activity.mjs index eadfa8ea03..476b23762a 100644 --- a/packages/core/boot/deprecated/activity.mjs +++ b/packages/core/boot/deprecated/activity.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-core.activity.mjs'; +export * from '../../dist/botframework-webchat-core.activity.mjs'; console.warn( 'Import from "botframework-webchat-core/activity" is deprecated, please import from "botframework-webchat-core/activity.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/core/boot/deprecated/graph.mjs b/packages/core/boot/deprecated/graph.mjs index f91de47f34..984d54b401 100644 --- a/packages/core/boot/deprecated/graph.mjs +++ b/packages/core/boot/deprecated/graph.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-core.graph.mjs'; +export * from '../../dist/botframework-webchat-core.graph.mjs'; console.warn( 'Import from "botframework-webchat-core/graph" is deprecated, please import from "botframework-webchat-core/graph.js" instead. This entrypoint will be removed on or after 2028-04-24.' diff --git a/packages/core/boot/deprecated/internal.mjs b/packages/core/boot/deprecated/internal.mjs index 47a686df68..809e7f2020 100644 --- a/packages/core/boot/deprecated/internal.mjs +++ b/packages/core/boot/deprecated/internal.mjs @@ -1,4 +1,4 @@ -export * from '../dist/botframework-webchat-core.internal.mjs'; +export * from '../../dist/botframework-webchat-core.internal.mjs'; console.warn( 'Import from "botframework-webchat-core/internal" is deprecated, please import from "botframework-webchat-core/internal.js" instead. This entrypoint will be removed on or after 2028-04-24.' From 0dc0593de4e31e8dd3a2df3a2f53d9d6fb6bd49c Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 21:21:54 +0000 Subject: [PATCH 087/108] Remove ignoreCSS for deprecated --- packages/bundle/tsup.config.ts | 6 +----- packages/component/tsup.config.ts | 11 ++--------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/packages/bundle/tsup.config.ts b/packages/bundle/tsup.config.ts index 9d34a31789..307d6ed5e7 100644 --- a/packages/bundle/tsup.config.ts +++ b/packages/bundle/tsup.config.ts @@ -53,11 +53,7 @@ const commonConfig = applyConfig(config => ({ esbuildPlugins: [ ...(config.esbuildPlugins ?? []), injectCSSPlugin({ - ignoreCSSEntries: [ - 'dist/botframework-webchat.component.css', - // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. - 'dist/botframework-webchat.deprecated.component.css' - ], + ignoreCSSEntries: ['dist/botframework-webchat.component.css'], stylesPlaceholder: bundleStyleContentPlaceholder }) ] diff --git a/packages/component/tsup.config.ts b/packages/component/tsup.config.ts index 90a9370a5d..fb1fe94b61 100644 --- a/packages/component/tsup.config.ts +++ b/packages/component/tsup.config.ts @@ -19,18 +19,11 @@ const commonConfig = applyConfig(config => ({ injectCSSPlugin({ // esbuild does not fully support CSS code splitting, every entry point has its own CSS file. // Related to https://github.com/evanw/esbuild/issues/608. - ignoreCSSEntries: [ - 'dist/botframework-webchat-component.component.css', - // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. - 'dist/botframework-webchat-component.deprecated.component.css' - ], + ignoreCSSEntries: ['dist/botframework-webchat-component.component.css'], stylesPlaceholder: componentStyleContentPlaceholder }), injectCSSPlugin({ - ignoreCSSEntries: [ - // Deprecated entrypoint without .js, to be removed on or after 2028-04-24. - 'dist/botframework-webchat-component.deprecated.decorator.css' - ], + ignoreCSSEntries: [], stylesPlaceholder: decoratorStyleContentPlaceholder }) ] From 2cfe5d6f4c98e8aff6c81641efd48095ed9ba49e Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 30 Apr 2026 21:32:46 +0000 Subject: [PATCH 088/108] Revert --- packages/component/tsup.config.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/component/tsup.config.ts b/packages/component/tsup.config.ts index fb1fe94b61..23963b16b0 100644 --- a/packages/component/tsup.config.ts +++ b/packages/component/tsup.config.ts @@ -22,10 +22,7 @@ const commonConfig = applyConfig(config => ({ ignoreCSSEntries: ['dist/botframework-webchat-component.component.css'], stylesPlaceholder: componentStyleContentPlaceholder }), - injectCSSPlugin({ - ignoreCSSEntries: [], - stylesPlaceholder: decoratorStyleContentPlaceholder - }) + injectCSSPlugin({ stylesPlaceholder: decoratorStyleContentPlaceholder }) ] })); From 34e5819888903c076c0a4dcf36fa53da9fbfb757 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 05:10:20 +0000 Subject: [PATCH 089/108] Patch dtsroll output --- packages/api/package.json | 2 +- packages/bundle/package.json | 2 +- packages/component/package.json | 2 +- packages/core/package.json | 2 +- packages/fluent-theme/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index 134b80d3f2..8711527ac6 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -128,7 +128,7 @@ "scripts": { "build": "npm run --if-present build:pre && npm run build:run && npm run --if-present build:post", "build:post": "npm run build:post:dtsroll && npm run build:post:validate:dts", - "build:post:dtsroll": "dtsroll ./dist/*.d.*", + "build:post:dtsroll": "dtsroll ./dist/*.d.* && sed -E -i 's/^([[:space:]]*export[[:space:]]+)type[[:space:]]+(\\{[[:space:]]+type[[:space:]]+)/\\1\\2/' ./dist/*.d.ts", "build:post:validate:dts": "vg ast-check dist-types ./dist/*.d.*", "build:pre": "npm run build:pre:local-dependencies && npm run build:pre:watch && npm run build:pre:globalize", "build:pre:globalize": "node scripts/createPrecompiledGlobalize.mjs", diff --git a/packages/bundle/package.json b/packages/bundle/package.json index ebb251fbc0..e83be3b242 100644 --- a/packages/bundle/package.json +++ b/packages/bundle/package.json @@ -152,7 +152,7 @@ "scripts": { "build": "npm run --if-present build:pre && npm run build:run && npm run --if-present build:post", "build:post": "npm run build:post:dtsroll && npm run build:post:validate", - "build:post:dtsroll": "dtsroll ./dist/*.d.*", + "build:post:dtsroll": "dtsroll ./dist/*.d.* && sed -E -i 's/^([[:space:]]*export[[:space:]]+)type[[:space:]]+(\\{[[:space:]]+type[[:space:]]+)/\\1\\2/' ./dist/*.d.ts", "build:post:validate": "npm run build:post:validate:css && npm run build:post:validate:inject-css && npm run build:post:validate:dts", "build:post:validate:css": "vg ast-check lightning-css ./dist/*.css", "build:post:validate:dts": "vg ast-check dist-types ./dist/*.d.*", diff --git a/packages/component/package.json b/packages/component/package.json index 453c64fa11..ce8b1487f7 100644 --- a/packages/component/package.json +++ b/packages/component/package.json @@ -110,7 +110,7 @@ "scripts": { "build": "npm run --if-present build:pre && npm run build:run && npm run --if-present build:post", "build:post": "npm run build:post:dtsroll && npm run build:post:validate", - "build:post:dtsroll": "dtsroll ./dist/*.d.*", + "build:post:dtsroll": "dtsroll ./dist/*.d.* && sed -E -i 's/^([[:space:]]*export[[:space:]]+)type[[:space:]]+(\\{[[:space:]]+type[[:space:]]+)/\\1\\2/' ./dist/*.d.ts", "build:post:validate": "npm run build:post:validate:css && npm run build:post:validate:inject-css && npm run build:post:validate:dts", "build:post:validate:css": "vg ast-check lightning-css ./dist/*.css", "build:post:validate:dts": "vg ast-check dist-types ./dist/*.d.*", diff --git a/packages/core/package.json b/packages/core/package.json index b722baa1ef..1efa08ccb7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -104,7 +104,7 @@ "scripts": { "build": "npm run --if-present build:pre && npm run build:run && npm run --if-present build:post", "build:post": "npm run build:post:dtsroll && npm run build:post:validate:dts", - "build:post:dtsroll": "dtsroll ./dist/*.d.*", + "build:post:dtsroll": "dtsroll ./dist/*.d.* && sed -E -i 's/^([[:space:]]*export[[:space:]]+)type[[:space:]]+(\\{[[:space:]]+type[[:space:]]+)/\\1\\2/' ./dist/*.d.ts", "build:post:validate:dts": "vg ast-check dist-types ./dist/*.d.*", "build:pre": "npm run build:pre:local-dependencies && npm run build:pre:watch", "build:pre:local-dependencies": "../../scripts/npm/build-local-dependencies.sh", diff --git a/packages/fluent-theme/package.json b/packages/fluent-theme/package.json index fcbbc539f9..6414561715 100644 --- a/packages/fluent-theme/package.json +++ b/packages/fluent-theme/package.json @@ -42,7 +42,7 @@ "scripts": { "build": "npm run --if-present build:pre && npm run build:run && npm run --if-present build:post", "build:post": "npm run build:post:dtsroll && npm run build:post:validate", - "build:post:dtsroll": "dtsroll ./dist/*.d.*", + "build:post:dtsroll": "dtsroll ./dist/*.d.* && sed -E -i 's/^([[:space:]]*export[[:space:]]+)type[[:space:]]+(\\{[[:space:]]+type[[:space:]]+)/\\1\\2/' ./dist/*.d.ts", "build:post:validate": "npm run build:post:validate:css && npm run build:post:validate:inject-css && npm run build:post:validate:dts", "build:post:validate:css": "vg ast-check lightning-css ./dist/*.css", "build:post:validate:dts": "vg ast-check dist-types ./dist/*.d.*", From 2beecfa46ea3e704a1a7e969a217eba321ed4ffc Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 05:42:40 +0000 Subject: [PATCH 090/108] Warn on unknown action thing --- .../private/FeedbackVoteButton.tsx | 50 ++++++------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx b/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx index 194784f0ec..029689e9cc 100644 --- a/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx +++ b/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx @@ -1,21 +1,9 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { hooks } from 'botframework-webchat-api'; -import { onErrorResumeNext, orgSchemaActionSchema, orgSchemaVoteActionSchema } from 'botframework-webchat-core'; +import { orgSchemaActionSchema, orgSchemaVoteActionSchema } from 'botframework-webchat-core'; import React, { memo, useCallback, useMemo, useRef } from 'react'; import { useRefFrom } from 'use-ref-from'; -import { - intersect, - literal, - object, - parse, - picklist, - pipe, - readonly, - string, - tuple, - union, - type InferInput -} from 'valibot'; +import { literal, object, pipe, readonly, string, union, type InferInput } from 'valibot'; import { useListenToActivityFeedbackFocus } from '../providers/private/FocusPropagation'; import useActivityFeedbackHooks from '../providers/useActivityFeedbackHooks'; @@ -27,21 +15,7 @@ const { useLocalizer, useStyleOptions } = hooks; const feedbackVoteButtonPropsSchema = pipe( object({ - action: union([ - intersect([ - orgSchemaActionSchema, - object({ - '@type': picklist(['DislikeAction', 'LikeAction']) - }) - ]), - intersect([ - orgSchemaVoteActionSchema, - object({ - '@type': literal('VoteAction'), - actionOption: tuple([picklist(['downvote', 'upvote'])]) - }) - ]) - ]), + action: union([orgSchemaActionSchema, orgSchemaVoteActionSchema]), as: union([literal('button'), literal('radio')]), name: string() }), @@ -61,14 +35,22 @@ function FeedbackVoteButton(props: FeedbackVoteButtonProps) { const actionRef = useRefFrom(action); const buttonRef = useRef(null); const direction = useMemo(() => { - if ( - action['@type'] === 'DislikeAction' || - (action['@type'] === 'VoteAction' && - onErrorResumeNext(() => parse(orgSchemaVoteActionSchema, action))?.actionOption[0] === 'downvote') - ) { + if (action['@type'] === 'DislikeAction') { return 'down'; + } else if (action['@type'] === 'LikeAction') { + return 'up'; + } else if (action['@type'] === 'VoteAction') { + if (action.actionOption[0] === 'downvote') { + return 'down'; + } else if (action.actionOption[0] === 'upvote') { + return 'up'; + } } + console.warn( + 'botframework-webchat: supports `DislikeAction`, `LikeAction`, and `VoteAction` with `actionOption` of "downvote" and "upvote" only.' + ); + return 'up'; }, [action]); const localize = useLocalizer(); From 0dff92fd04bd23c4eb396480c596a0849a23506e Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 05:43:31 +0000 Subject: [PATCH 091/108] Fix test --- .../src/types/external/OrgSchema/Thing.parseThing.spec.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts b/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts index c9d4492b67..17e81b4b78 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts @@ -31,10 +31,7 @@ describe('Thing', () => { }); }); - // This is an intentional drift from JSON-LD. - // Assuming expecting an object of Thing while the actual is CreativeWork. - // If unknown properties are removed, we will remove properties that are solely for CreativeWork. - test('should not remove unknown properties', () => { + test('should remove unknown properties', () => { expect( parse(thingSchema, { '@type': 'Thing', @@ -42,8 +39,7 @@ describe('Thing', () => { }) ).toEqual({ ...thingTemplate, - '@type': 'Thing', - something: 1 + '@type': 'Thing' }); }); From 5ced01921568630849787cc48f90cd83ce78931b Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 06:02:59 +0000 Subject: [PATCH 092/108] Fix provider --- packages/core/src/types/external/OrgSchema/Action.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index d1577627d1..f401417e7d 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -2,7 +2,7 @@ import { intersect, lazy, object, parse, string, type GenericSchema } from 'vali import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { projectSchema, type ProjectInput } from './Project'; +import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview'; @@ -68,6 +68,7 @@ type ActionOutput = ThingOutput & { * * @see https://schema.org/provider */ + readonly provider: readonly ProjectOutput[]; /** * The result produced in the action. E.g. John wrote *a book*. From f1e1170caab6490820244d04437d1474685add46 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 06:05:02 +0000 Subject: [PATCH 093/108] Fix test --- .../types/external/OrgSchema/Action.spec.ts | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/core/src/types/external/OrgSchema/Action.spec.ts b/packages/core/src/types/external/OrgSchema/Action.spec.ts index d3332f0c0f..de6deedec3 100644 --- a/packages/core/src/types/external/OrgSchema/Action.spec.ts +++ b/packages/core/src/types/external/OrgSchema/Action.spec.ts @@ -1,8 +1,10 @@ import { describe, expect, test } from '@jest/globals'; import { actionSchema, parseAction } from './Action'; import { parse } from 'valibot'; +import { userReviewSchema } from './UserReview'; const actionTemplate = parse(actionSchema, {}); +const userReviewTemplate = parse(userReviewSchema, {}); describe('Action', () => { describe('actionStatus', () => { @@ -45,14 +47,23 @@ describe('Action', () => { parse(actionSchema, { '@type': 'LikeAction', actionStatus: 'PotentialActionStatus', - result: [ - { - '@type': 'UserReview', - reviewAspect: 'Hello, World!' - } - ] + result: { + '@type': 'UserReview', + reviewAspect: 'Hello, World!' + } }) - ).toEqual({}); + ).toEqual({ + ...actionTemplate, + '@type': 'LikeAction', + actionStatus: ['PotentialActionStatus'], + result: [ + { + ...userReviewTemplate, + '@type': 'UserReview', + reviewAspect: ['Hello, World!'] + } + ] + }); }); }); }); From f7e59de9f0dd77c5386a1c1c6a05b8261ff5af25 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 06:28:09 +0000 Subject: [PATCH 094/108] Fix Prettier --- packages/core/src/actions/setSuggestedActions.ts | 5 +---- packages/core/src/utils/voiceActivity/isVoiceActivity.ts | 3 +-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/core/src/actions/setSuggestedActions.ts b/packages/core/src/actions/setSuggestedActions.ts index 6105a7420a..cc79353edc 100644 --- a/packages/core/src/actions/setSuggestedActions.ts +++ b/packages/core/src/actions/setSuggestedActions.ts @@ -11,10 +11,7 @@ const setSuggestedActionsActionSchema = pipe( payload: pipe( object({ originActivity: optional(custom(value => is(object({}), value))), - suggestedActions: pipe( - array(custom(value => is(object({}), value))), - readonly() - ) + suggestedActions: pipe(array(custom(value => is(object({}), value))), readonly()) }), readonly() ), diff --git a/packages/core/src/utils/voiceActivity/isVoiceActivity.ts b/packages/core/src/utils/voiceActivity/isVoiceActivity.ts index bafb73392b..758a169f81 100644 --- a/packages/core/src/utils/voiceActivity/isVoiceActivity.ts +++ b/packages/core/src/utils/voiceActivity/isVoiceActivity.ts @@ -16,7 +16,6 @@ const VoiceActivitySchema = object({ const isVoiceActivity = ( activity: WebChatActivity -): activity is WebChatActivity & InferOutput => - is(VoiceActivitySchema, activity); +): activity is WebChatActivity & InferOutput => is(VoiceActivitySchema, activity); export default isVoiceActivity; From 124e95512dc18831045347a54ce16626c0adb605 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 06:40:25 +0000 Subject: [PATCH 095/108] Fix flakiness --- __tests__/html2/rtl/unknownCommand.html | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/__tests__/html2/rtl/unknownCommand.html b/__tests__/html2/rtl/unknownCommand.html index c562f10a83..e52d361529 100644 --- a/__tests__/html2/rtl/unknownCommand.html +++ b/__tests__/html2/rtl/unknownCommand.html @@ -8,6 +8,7 @@ From 192f63d707c0426e1990ec1b21670e411fa558d9 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 20:39:13 +0000 Subject: [PATCH 098/108] Add comment --- packages/bundle/esbuild.static.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/bundle/esbuild.static.mjs b/packages/bundle/esbuild.static.mjs index c0d03bc646..f8cdb59cc2 100644 --- a/packages/bundle/esbuild.static.mjs +++ b/packages/bundle/esbuild.static.mjs @@ -152,6 +152,7 @@ const IGNORED_OWN_PACKAGES = [ if (key === '.') { allOwnExports.add(`${packageJson.name}`); } else if (key.endsWith('.js')) { + // We need to remove .js suffix otherwise, esbuild will emit filename.js.js. // ./filename.js -> /filename allOwnExports.add(`${packageJson.name}${key.slice(1, -3)}`); } From 6c24e65861893cc8f1c34696ee4b7546b1ae29e0 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 20:39:21 +0000 Subject: [PATCH 099/108] Rename variable --- .../Attachment/Text/private/MarkdownTextContent.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index 94a774a5fd..7ec4111ebf 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -247,15 +247,15 @@ function MarkdownTextContent(props: MarkdownTextContentProps) { const usageInfo = messageThing?.usageInfo[0]; if (usageInfo) { - const [pattern] = usageInfo.pattern; + const [firstPattern] = usageInfo.pattern; const encryptionStatus = !!usageInfo.keywords.find(keyword => keyword === 'encrypted-content'); return { color: - pattern && - pattern.inDefinedTermSet[0] === 'https://www.w3.org/TR/css-color-4/' && - pattern.name[0] === 'color' && - pattern.termCode[0], + firstPattern && + firstPattern.inDefinedTermSet[0] === 'https://www.w3.org/TR/css-color-4/' && + firstPattern.name[0] === 'color' && + firstPattern.termCode[0], isEncrypted: encryptionStatus, name: usageInfo.name[0], title: usageInfo.description[0] From 85175fbe1a36e42d94376369ea7cb8aa94f7d052 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 20:41:28 +0000 Subject: [PATCH 100/108] Use parser --- packages/core/src/types/external/OrgSchema/Action.ts | 4 ++-- packages/core/src/types/external/OrgSchema/Claim.ts | 4 ++-- packages/core/src/types/external/OrgSchema/CreativeWork.ts | 5 ++--- packages/core/src/types/external/OrgSchema/DefinedTerm.ts | 4 ++-- packages/core/src/types/external/OrgSchema/Person.ts | 4 ++-- packages/core/src/types/external/OrgSchema/Project.ts | 4 ++-- packages/core/src/types/external/OrgSchema/Thing.ts | 4 ++-- packages/core/src/types/external/OrgSchema/UserReview.ts | 4 ++-- packages/core/src/types/external/OrgSchema/VoteAction.ts | 4 ++-- 9 files changed, 18 insertions(+), 19 deletions(-) diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core/src/types/external/OrgSchema/Action.ts index f401417e7d..30136595d4 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core/src/types/external/OrgSchema/Action.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; @@ -87,6 +87,6 @@ const actionSchema: GenericSchema = intersect([ ]); /** @deprecated Use Valibot.parse(actionSchema) instead. Will be removed on or after 2028-04-23. */ -const parseAction = (action: ActionInput): ActionOutput => parse(actionSchema, action); +const parseAction: (action: ActionInput) => ActionOutput = parser(actionSchema); export { actionSchema, parseAction, type ActionInput, type ActionOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core/src/types/external/OrgSchema/Claim.ts index f136e66e12..e0dd0cd96b 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core/src/types/external/OrgSchema/Claim.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parse, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, type GenericSchema } from 'valibot'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; @@ -63,6 +63,6 @@ const claimSchema: GenericSchema = intersect([ ]); /** @deprecated Use Valibot.parse(claimSchema) instead. Will be removed on or after 2028-04-23. */ -const parseClaim = (claim: ClaimInput): ClaimOutput => parse(claimSchema, claim); +const parseClaim: (claim: ClaimInput) => ClaimOutput = parser(claimSchema); export { claimSchema, parseClaim, type ClaimInput, type ClaimOutput }; diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core/src/types/external/OrgSchema/CreativeWork.ts index 9ff364f1a9..2139ae54ff 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core/src/types/external/OrgSchema/CreativeWork.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, number, object, parse, string, union, type GenericSchema } from 'valibot'; +import { intersect, lazy, number, object, parser, string, union, type GenericSchema } from 'valibot'; import { claimSchema } from './Claim'; import { @@ -209,7 +209,6 @@ creativeWorkSchema_ = intersect([ const creativeWorkSchema = creativeWorkSchema_; /** @deprecated Use Valibot.parse(creativeWorkSchema) instead. Will be removed on or after 2028-04-23. */ -const parseCreativeWork = (creativeWork: CreativeWorkInput): CreativeWorkOutput => - parse(creativeWorkSchema_, creativeWork); +const parseCreativeWork: (creativeWork: CreativeWorkInput) => CreativeWorkOutput = parser(creativeWorkSchema); export { creativeWorkSchema, parseCreativeWork, type CreativeWorkInput, type CreativeWorkOutput }; diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts index c6def8c809..71a9949802 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core/src/types/external/OrgSchema/DefinedTerm.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; @@ -58,6 +58,6 @@ const definedTermSchema: GenericSchema = in ]); /** @deprecated Use Valibot.parse(definedTermSchema) instead. Will be removed on or after 2028-04-23. */ -const parseDefinedTerm = (definedTerm: DefinedTermInput): DefinedTermOutput => parse(definedTermSchema, definedTerm); +const parseDefinedTerm: (definedTerm: DefinedTermInput) => DefinedTermOutput = parser(definedTermSchema); export { definedTermSchema, parseDefinedTerm, type DefinedTermInput, type DefinedTermOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core/src/types/external/OrgSchema/Person.ts index 499671c136..ec581d053b 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core/src/types/external/OrgSchema/Person.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; @@ -48,6 +48,6 @@ const personSchema: GenericSchema = intersect([ ]); /** @deprecated Use Valibot.parse(personSchema) instead. Will be removed on or after 2028-04-23. */ -const parsePerson = (person: PersonInput): PersonOutput => parse(personSchema, person); +const parsePerson: (person: PersonInput) => PersonOutput = parser(personSchema); export { parsePerson, personSchema, type PersonInput, type PersonOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core/src/types/external/OrgSchema/Project.ts index 7d65ca44cd..0d00baba81 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core/src/types/external/OrgSchema/Project.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -43,6 +43,6 @@ const projectSchema: GenericSchema = intersect([ ]); /** @deprecated Use Valibot.parse(projectSchema) instead. Will be removed on or after 2028-04-23. */ -const parseProject = (project: ProjectInput): ProjectOutput => parse(projectSchema, project); +const parseProject: (project: ProjectInput) => ProjectOutput = parser(projectSchema); export { parseProject, projectSchema, type ProjectInput, type ProjectOutput }; diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core/src/types/external/OrgSchema/Thing.ts index 7f2e477cf9..72684031ee 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core/src/types/external/OrgSchema/Thing.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; @@ -119,6 +119,6 @@ const thingSchema: GenericSchema = intersect([ ]); /** @deprecated Use Valibot.parse(thingSchema) instead. Will be removed on or after 2028-04-23. */ -const parseThing = (thing: ThingInput): ThingOutput => parse(thingSchema, thing); +const parseThing: (thing: ThingInput) => ThingOutput = parser(thingSchema); export { parseThing, thingSchema, type ThingInput, type ThingOutput }; diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core/src/types/external/OrgSchema/UserReview.ts index f5643fc15e..2851fead8f 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core/src/types/external/OrgSchema/UserReview.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -39,6 +39,6 @@ const userReviewSchema: GenericSchema = inter ]); /** @deprecated Use Valibot.parse(userReviewSchema) instead. Will be removed on or after 2028-04-23. */ -const parseUserReview = (userReview: UserReviewInput): UserReviewOutput => parse(userReviewSchema, userReview); +const parseUserReview: (userReview: UserReviewInput) => UserReviewOutput = parser(userReviewSchema); export { parseUserReview, userReviewSchema, type UserReviewInput, type UserReviewOutput }; diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core/src/types/external/OrgSchema/VoteAction.ts index d1c6bda0a1..52f77c6561 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core/src/types/external/OrgSchema/VoteAction.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parse, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; @@ -47,6 +47,6 @@ const voteActionSchema: GenericSchema = inter ]); /** @deprecated Use Valibot.parse(voteActionSchema) instead. Will be removed on or after 2028-04-23. */ -const parseVoteAction = (voteAction: VoteActionInput): VoteActionOutput => parse(voteActionSchema, voteAction); +const parseVoteAction: (voteAction: VoteActionInput) => VoteActionOutput = parser(voteActionSchema); export { parseVoteAction, voteActionSchema, type VoteActionInput, type VoteActionOutput }; From b979c0a69c8870c9d0bfef67b0fd4525f69f164a Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 20:44:07 +0000 Subject: [PATCH 101/108] Remove needed file --- .../core/src/types/external/OrgSchema/types.ts | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 packages/core/src/types/external/OrgSchema/types.ts diff --git a/packages/core/src/types/external/OrgSchema/types.ts b/packages/core/src/types/external/OrgSchema/types.ts deleted file mode 100644 index bd0574f652..0000000000 --- a/packages/core/src/types/external/OrgSchema/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -export type Inputize< - T extends { - [key in keyof T]?: T[key] extends ReadonlyArray | Array ? never : T[key]; - } -> = { - [key in keyof T]+?: key extends `@${string}` ? T[key] | undefined : T[key] | readonly T[key][] | undefined; -}; - -export type Outputize< - T extends { - [key in keyof T]?: T[key] extends ReadonlyArray | Array ? never : T[key]; - } -> = { - [key in keyof T]+?: key extends `@${string}` ? T[key] | undefined : readonly T[key][] | undefined; -}; From 797198ad63ea854894837d4774f38a2f467f9301 Mon Sep 17 00:00:00 2001 From: William Wong Date: Fri, 1 May 2026 20:47:34 +0000 Subject: [PATCH 102/108] Add comment --- .../src/components/activity/private/useActivityAuthor.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts index 44a3e54552..d97e90e092 100644 --- a/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts +++ b/packages/fluent-theme/src/components/activity/private/useActivityAuthor.ts @@ -3,6 +3,11 @@ import { orgSchemaPersonSchema, type OrgSchemaPerson } from 'botframework-webcha import { useMemo } from 'react'; import { parse } from 'valibot'; +/** + * Returns the first `Message.author` if it is of type `Person` or `string`. + * + * String-based author will be convertewd to `Person` thing. + */ export default function useActivityAuthor(activity?: WebChatActivity | undefined): OrgSchemaPerson | undefined { return useMemo(() => { const firstAuthor = getOrgSchemaMessage(activity?.entities || [])?.author[0]; From 96c876e9b618d4ed417aadae499f23e0a5efa971 Mon Sep 17 00:00:00 2001 From: William Wong Date: Sat, 2 May 2026 00:56:43 +0000 Subject: [PATCH 103/108] Support multiple @type value --- .../chatAdapter/layer/addCopyButton.html | 2 +- .../feedbackActivityStatus.click.html | 6 +- package-lock.json | 14 +++++ package.json | 4 ++ packages/bundle/esbuild.static.mjs | 10 ++-- packages/bundle/src/boot/actual/schema.ts | 2 +- .../src/ActivityFeedback/ActivityFeedback.tsx | 3 +- .../private/FeedbackVoteButton.tsx | 9 +-- .../private/getDisclaimerFromReviewAction.ts | 6 +- .../private/isActionRequireReview.ts | 9 ++- .../providers/ActivityFeedbackComposer.tsx | 17 +++--- .../ActivityStatus/OthersActivityStatus.tsx | 9 +-- .../Text/private/MarkdownTextContent.tsx | 8 +-- .../defaultActivityPolymiddleware.tsx | 2 +- .../getFirstBaseOfSoftwareSourceCode.ts | 4 +- .../src/hooks/internal/useFeedbackActions.ts | 12 ++-- packages/core-json-ld/.eslintrc.yml | 2 + packages/core-json-ld/.gitignore | 4 ++ packages/core-json-ld/package.json | 57 +++++++++++++++++++ packages/core-json-ld/src/JSONLinkedData.ts | 22 +++++++ packages/core-json-ld/src/index.ts | 49 ++++++++++++++++ packages/core-json-ld/src/isOfType.ts | 5 ++ .../src/orgSchema}/Action.spec.ts | 5 +- .../src/orgSchema}/Action.ts | 11 ++-- .../src/orgSchema}/ActionStatus.ts | 0 .../src/orgSchema}/Claim.spec.ts | 6 +- .../src/orgSchema}/Claim.ts | 7 +-- .../CreativeWork.parseCreativeWork.spec.ts | 4 +- .../src/orgSchema}/CreativeWork.ts | 15 +++-- .../src/orgSchema}/CreativeWorkStatus.ts | 0 .../src/orgSchema}/DefinedTerm.ts | 5 +- .../src/orgSchema}/Person.ts | 4 +- .../orgSchema}/Project.parseProject.spec.ts | 2 +- .../src/orgSchema}/Project.ts | 5 +- .../src/orgSchema}/SoftwareSourceCode.ts | 5 +- .../src/orgSchema}/Thing.parseThing.spec.ts | 2 +- .../src/orgSchema}/Thing.ts | 7 +-- .../src/orgSchema}/UserReview.ts | 5 +- .../src/orgSchema}/VoteAction.spec.ts | 2 +- .../src/orgSchema}/VoteAction.ts | 5 +- .../private/jsonLinkedDataProperty.spec.ts | 0 .../src}/private/jsonLinkedDataProperty.ts | 0 packages/core-json-ld/src/tsconfig.json | 3 + packages/core-json-ld/tsup.config.ts | 23 ++++++++ packages/core/json-ld.js | 3 + packages/core/org-schema.js | 3 + packages/core/package.json | 24 +++++++- packages/core/src/boot/json-ld.ts | 6 ++ packages/core/src/boot/org-schema.ts | 29 ++++++++++ packages/core/src/index.ts | 50 ---------------- .../private/getPartGroupingMetadataMap.ts | 18 +++--- .../external/OrgSchema/JSONLinkedData.ts | 26 --------- .../src/utils/getOrgSchemaMessage.spec.ts | 4 +- .../core/src/utils/getOrgSchemaMessage.ts | 8 +-- packages/core/tsup.config.ts | 4 +- 55 files changed, 355 insertions(+), 192 deletions(-) create mode 100644 packages/core-json-ld/.eslintrc.yml create mode 100644 packages/core-json-ld/.gitignore create mode 100644 packages/core-json-ld/package.json create mode 100644 packages/core-json-ld/src/JSONLinkedData.ts create mode 100644 packages/core-json-ld/src/index.ts create mode 100644 packages/core-json-ld/src/isOfType.ts rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Action.spec.ts (92%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Action.ts (95%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/ActionStatus.ts (100%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Claim.spec.ts (92%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Claim.ts (96%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/CreativeWork.parseCreativeWork.spec.ts (97%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/CreativeWork.ts (97%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/CreativeWorkStatus.ts (100%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/DefinedTerm.ts (96%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Person.ts (94%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Project.parseProject.spec.ts (90%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Project.ts (95%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/SoftwareSourceCode.ts (92%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Thing.parseThing.spec.ts (96%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/Thing.ts (96%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/UserReview.ts (94%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/VoteAction.spec.ts (93%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src/orgSchema}/VoteAction.ts (96%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src}/private/jsonLinkedDataProperty.spec.ts (100%) rename packages/{core/src/types/external/OrgSchema => core-json-ld/src}/private/jsonLinkedDataProperty.ts (100%) create mode 100644 packages/core-json-ld/src/tsconfig.json create mode 100644 packages/core-json-ld/tsup.config.ts create mode 100644 packages/core/json-ld.js create mode 100644 packages/core/org-schema.js create mode 100644 packages/core/src/boot/json-ld.ts create mode 100644 packages/core/src/boot/org-schema.ts delete mode 100644 packages/core/src/types/external/OrgSchema/JSONLinkedData.ts diff --git a/__tests__/html2/chatAdapter/layer/addCopyButton.html b/__tests__/html2/chatAdapter/layer/addCopyButton.html index be65af990f..7eaa70e2fb 100644 --- a/__tests__/html2/chatAdapter/layer/addCopyButton.html +++ b/__tests__/html2/chatAdapter/layer/addCopyButton.html @@ -36,7 +36,7 @@ '@id' in entity && entity['@id'] === '' && '@type' in entity && - entity['@type'] === 'Message' + entity['@type'].includes('Message') ) { return entity; } diff --git a/__tests__/html2/feedbackStatus/feedbackActivityStatus.click.html b/__tests__/html2/feedbackStatus/feedbackActivityStatus.click.html index b426f1d3fb..d6e3a15ca3 100644 --- a/__tests__/html2/feedbackStatus/feedbackActivityStatus.click.html +++ b/__tests__/html2/feedbackStatus/feedbackActivityStatus.click.html @@ -72,7 +72,7 @@ entities: expect.arrayContaining([ expect.objectContaining({ '@context': 'https://schema.org', - '@type': 'VoteAction', + '@type': ['VoteAction'], actionOption: 'upvote', type: 'https://schema.org/VoteAction' }) @@ -99,7 +99,7 @@ entities: expect.arrayContaining([ expect.objectContaining({ '@context': 'https://schema.org', - '@type': 'VoteAction', + '@type': ['VoteAction'], type: 'https://schema.org/VoteAction', actionOption: 'downvote' }) @@ -127,7 +127,7 @@ entities: expect.arrayContaining([ expect.objectContaining({ '@context': 'https://schema.org', - '@type': 'VoteAction', + '@type': ['VoteAction'], type: 'https://schema.org/VoteAction', actionOption: 'downvote' }) diff --git a/package-lock.json b/package-lock.json index 10de7273f2..d7fbaef9a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "packages/test/web-server", "packages/core-debug-api", "packages/core-graph", + "packages/core-json-ld", "packages/core", "packages/react-hooks", "packages/react-valibot", @@ -3844,6 +3845,10 @@ "resolved": "packages/core-graph", "link": true }, + "node_modules/@msinternal/botframework-webchat-core-json-ld": { + "resolved": "packages/core-json-ld", + "link": true + }, "node_modules/@msinternal/botframework-webchat-debug-theme": { "resolved": "packages/debug-theme", "link": true @@ -21738,6 +21743,7 @@ "@msinternal/botframework-webchat-base": "0.0.0-0", "@msinternal/botframework-webchat-core-debug-api": "0.0.0-0", "@msinternal/botframework-webchat-core-graph": "0.0.0-0", + "@msinternal/botframework-webchat-core-json-ld": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", "@testduet/given-when-then": "^0.1.0", "@types/jest": "^29.5.14", @@ -21830,6 +21836,14 @@ } } }, + "packages/core-json-ld": { + "name": "@msinternal/botframework-webchat-core-json-ld", + "version": "0.0.0-0", + "license": "MIT", + "devDependencies": { + "@msinternal/botframework-webchat-tsconfig": "^0.0.0-0" + } + }, "packages/core/node_modules/mime": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", diff --git a/package.json b/package.json index aab3783ab1..8315ae3dae 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "packages/test/web-server", "packages/core-debug-api", "packages/core-graph", + "packages/core-json-ld", "packages/core", "packages/react-hooks", "packages/react-valibot", @@ -85,6 +86,7 @@ "precommit:eslint:core": "cd packages && cd core && npm run precommit:eslint", "precommit:eslint:core-debug-api": "cd packages && cd core-debug-api && npm run precommit:eslint", "precommit:eslint:core-graph": "cd packages && cd core-graph && npm run precommit:eslint", + "precommit:eslint:core-json-ld": "cd packages && cd core-json-ld && npm run precommit:eslint", "precommit:eslint:debug-theme": "cd packages && cd debug-theme && npm run precommit:eslint", "precommit:eslint:directlinespeech": "cd packages && cd directlinespeech && npm run precommit:eslint", "precommit:eslint:fluent-theme": "cd packages && cd fluent-theme && npm run precommit:eslint", @@ -122,6 +124,7 @@ "precommit:typecheck:core": "cd packages && cd core && npm run precommit:typecheck", "precommit:typecheck:core-debug-api": "cd packages && cd core-debug-api && npm run precommit:typecheck", "precommit:typecheck:core-graph": "cd packages && cd core-graph && npm run precommit:typecheck", + "precommit:typecheck:core-json-ld": "cd packages && cd core-json-ld && npm run precommit:typecheck", "precommit:typecheck:debug-theme": "cd packages && cd debug-theme && npm run precommit:typecheck", "precommit:typecheck:fluent-theme": "cd packages && cd fluent-theme && npm run precommit:typecheck", "precommit:typecheck:react-hooks": "cd packages && cd react-hooks && npm run precommit:typecheck", @@ -151,6 +154,7 @@ "start:core": "cd packages && cd core && npm start", "start:core-debug-api": "cd packages && cd core-debug-api && npm start", "start:core-graph": "cd packages && cd core-graph && npm start", + "start:core-json-ld": "cd packages && cd core-json-ld && npm start", "start:debug-theme": "cd packages && cd debug-theme && npm start", "start:directlinespeech": "cd packages && cd directlinespeech && npm start", "start:fluent-theme": "cd packages && cd fluent-theme && npm start", diff --git a/packages/bundle/esbuild.static.mjs b/packages/bundle/esbuild.static.mjs index f8cdb59cc2..926bf32d9b 100644 --- a/packages/bundle/esbuild.static.mjs +++ b/packages/bundle/esbuild.static.mjs @@ -137,7 +137,7 @@ const IGNORED_OWN_PACKAGES = [ const { workspaces } = await readPackage({ cwd: resolve(fileURLToPath(import.meta.url), '../../../') }); - const allOwnExports = new Set(); + const allOwnExports = new Map(); for (const path of workspaces) { // eslint-disable-next-line no-await-in-loop @@ -147,14 +147,16 @@ const IGNORED_OWN_PACKAGES = [ continue; } + const { name: packageName } = packageJson; + for (const key of getKeysRecursive(packageJson.exports)) { if (key.startsWith('.')) { if (key === '.') { - allOwnExports.add(`${packageJson.name}`); + allOwnExports.set(packageName, packageName); } else if (key.endsWith('.js')) { // We need to remove .js suffix otherwise, esbuild will emit filename.js.js. // ./filename.js -> /filename - allOwnExports.add(`${packageJson.name}${key.slice(1, -3)}`); + allOwnExports.set(`${packageName}${key.slice(1, -3)}`, `${packageName}${key.slice(1)}`); } } } @@ -175,7 +177,7 @@ const IGNORED_OWN_PACKAGES = [ 'botframework-webchat/middleware': './src/boot/exports/middleware.ts', 'botframework-webchat/schema': './src/boot/exports/schema.ts', // TODO: [P2] We can remove the `Array.from()` after bumping Node.js. - ...Array.from(allOwnExports.keys()).reduce((entryPoints, key) => ({ ...entryPoints, [key]: key }), {}) + ...Object.fromEntries(allOwnExports) }; console.log('Exporting the following own entry points:'); diff --git a/packages/bundle/src/boot/actual/schema.ts b/packages/bundle/src/boot/actual/schema.ts index 37699525c1..5ec0c9bfd6 100644 --- a/packages/bundle/src/boot/actual/schema.ts +++ b/packages/bundle/src/boot/actual/schema.ts @@ -19,4 +19,4 @@ export { type OrgSchemaSoftwareSourceCode, type OrgSchemaUserReview, type OrgSchemaVoteAction -} from 'botframework-webchat-core'; +} from 'botframework-webchat-core/org-schema.js'; diff --git a/packages/component/src/ActivityFeedback/ActivityFeedback.tsx b/packages/component/src/ActivityFeedback/ActivityFeedback.tsx index 1289438fe6..d99500d26a 100644 --- a/packages/component/src/ActivityFeedback/ActivityFeedback.tsx +++ b/packages/component/src/ActivityFeedback/ActivityFeedback.tsx @@ -1,4 +1,5 @@ import { useStyles } from '@msinternal/botframework-webchat-styles/react'; +import { isOfType } from 'botframework-webchat-core/json-ld.js'; import React, { memo, useCallback, useMemo, type FormEventHandler, type KeyboardEventHandler } from 'react'; import { Extract, wrapWith } from 'react-wrap-with'; import { useRefFrom } from 'use-ref-from'; @@ -57,7 +58,7 @@ function InternalActivityFeedback() { // Hide feedback form if feedback has already been submitted or it does not require UserReview. const isExpanded = useMemo( - () => !hasSubmitted && selectedAction?.result[0]?.['@type'] === 'UserReview', + () => !hasSubmitted && isOfType('UserReview', selectedAction?.result[0]), [hasSubmitted, selectedAction] ); diff --git a/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx b/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx index 029689e9cc..b72103af56 100644 --- a/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx +++ b/packages/component/src/ActivityFeedback/private/FeedbackVoteButton.tsx @@ -1,9 +1,10 @@ import { validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { hooks } from 'botframework-webchat-api'; -import { orgSchemaActionSchema, orgSchemaVoteActionSchema } from 'botframework-webchat-core'; +import { orgSchemaActionSchema, orgSchemaVoteActionSchema } from 'botframework-webchat-core/org-schema.js'; import React, { memo, useCallback, useMemo, useRef } from 'react'; import { useRefFrom } from 'use-ref-from'; import { literal, object, pipe, readonly, string, union, type InferInput } from 'valibot'; +import { isOfType } from 'botframework-webchat-core/json-ld.js'; import { useListenToActivityFeedbackFocus } from '../providers/private/FocusPropagation'; import useActivityFeedbackHooks from '../providers/useActivityFeedbackHooks'; @@ -35,11 +36,11 @@ function FeedbackVoteButton(props: FeedbackVoteButtonProps) { const actionRef = useRefFrom(action); const buttonRef = useRef(null); const direction = useMemo(() => { - if (action['@type'] === 'DislikeAction') { + if (isOfType('DislikeAction', action)) { return 'down'; - } else if (action['@type'] === 'LikeAction') { + } else if (isOfType('LikeAction', action)) { return 'up'; - } else if (action['@type'] === 'VoteAction') { + } else if (isOfType('VoteAction', action)) { if (action.actionOption[0] === 'downvote') { return 'down'; } else if (action.actionOption[0] === 'upvote') { diff --git a/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts b/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts index 20bd5ed713..2c17bd7fd1 100644 --- a/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts +++ b/packages/component/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts @@ -1,4 +1,8 @@ -import { orgSchemaUserReviewSchema, type OrgSchemaAction, type OrgSchemaThing } from 'botframework-webchat-core'; +import { + orgSchemaUserReviewSchema, + type OrgSchemaAction, + type OrgSchemaThing +} from 'botframework-webchat-core/org-schema.js'; import { safeParse } from 'valibot'; export default function getDisclaimerFromActivity(action: OrgSchemaAction): string | undefined { diff --git a/packages/component/src/ActivityFeedback/private/isActionRequireReview.ts b/packages/component/src/ActivityFeedback/private/isActionRequireReview.ts index a1b94bb389..05f0f69962 100644 --- a/packages/component/src/ActivityFeedback/private/isActionRequireReview.ts +++ b/packages/component/src/ActivityFeedback/private/isActionRequireReview.ts @@ -1,7 +1,10 @@ -import { type OrgSchemaAction } from 'botframework-webchat-core'; +import { type OrgSchemaAction } from 'botframework-webchat-core/org-schema.js'; +import { isOfType } from 'botframework-webchat-core/json-ld.js'; export default function isActionRequireReview( action: OrgSchemaAction | undefined -): action is OrgSchemaAction & { result: { '@type': 'UserReview' } } { - return action?.result[0]?.['@type'] === 'UserReview'; +): action is OrgSchemaAction & { result: { '@type': 'UserReview'[] } } { + const [firstResult] = action?.result ?? []; + + return isOfType('UserReview', firstResult); } diff --git a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx index 299950e814..b1d19d0f6c 100644 --- a/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +++ b/packages/component/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx @@ -1,11 +1,8 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { hooks } from 'botframework-webchat-api'; -import { - getOrgSchemaMessage, - orgSchemaActionSchema, - type OrgSchemaAction, - type WebChatActivity -} from 'botframework-webchat-core'; +import { orgSchemaActionSchema, type OrgSchemaAction } from 'botframework-webchat-core/org-schema.js'; +import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core'; +import { isOfType } from 'botframework-webchat-core/json-ld.js'; import random from 'math-random'; import React, { memo, useCallback, useMemo, useRef, useState, type Dispatch, type SetStateAction } from 'react'; import { wrapWith } from 'react-wrap-with'; @@ -147,7 +144,7 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { const reactActions: readonly OrgSchemaAction[] = Object.freeze( messageThing?.potentialAction.filter( - ({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction' + action => isOfType('LikeAction', action) || isOfType('DislikeAction', action) ) ?? [] ); @@ -244,7 +241,7 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { const { '@id': _id, actionStatus: _actionStatus, ...rest } = action; const { current: feedbackText } = feedbackTextRef; - const isLegacyAction = action['@type'] === 'VoteAction'; + const isLegacyAction = isOfType('VoteAction', action); // TODO: We should update this to use W3C Hydra.1 if (isActionRequireReview(action)) { @@ -256,7 +253,7 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { actionName: 'feedback', actionValue: { feedback: { feedbackText: feedbackText || '' }, - reaction: action['@type'] === 'LikeAction' ? 'like' : 'dislike' + reaction: isOfType('LikeAction', action) ? 'like' : 'dislike' } } } as any); @@ -268,7 +265,7 @@ function ActivityFeedbackComposer(props: ActivityFeedbackComposerProps) { { ...entity, actionOption: entity.actionOption[0], // TODO: Service should accept plural. - type: new URL(entity['@type'] ?? '', entity['@context'] ?? 'https://schema.org').href + type: new URL(entity['@type'][0] ?? '', entity['@context'] ?? 'https://schema.org').href } ], name: 'webchat:activity-status/feedback', diff --git a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx index 1620c85dfb..8deaf8b8e4 100644 --- a/packages/component/src/ActivityStatus/OthersActivityStatus.tsx +++ b/packages/component/src/ActivityStatus/OthersActivityStatus.tsx @@ -1,13 +1,8 @@ import { warnOnce } from '@msinternal/botframework-webchat-base/utils'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import { hooks } from 'botframework-webchat-api'; -import { - getOrgSchemaMessage, - orgSchemaActionSchema, - orgSchemaClaimSchema, - OrgSchemaProject, - type WebChatActivity -} from 'botframework-webchat-core'; +import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core'; +import { orgSchemaActionSchema, orgSchemaClaimSchema, OrgSchemaProject } from 'botframework-webchat-core/org-schema.js'; import cx from 'classnames'; import React, { memo, useMemo } from 'react'; import { parse } from 'valibot'; diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index 7ec4111ebf..b95e354abf 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -1,15 +1,13 @@ import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot'; import { useStyles } from '@msinternal/botframework-webchat-styles/react'; import { hooks } from 'botframework-webchat-api'; +import { getOrgSchemaMessage, onErrorResumeNext, type WebChatActivity } from 'botframework-webchat-core'; import { - getOrgSchemaMessage, - onErrorResumeNext, orgSchemaClaimSchema, type OrgSchemaClaim, type OrgSchemaCreativeWork, - type OrgSchemaSoftwareSourceCode, - type WebChatActivity -} from 'botframework-webchat-core'; + type OrgSchemaSoftwareSourceCode +} from 'botframework-webchat-core/org-schema.js'; import cx from 'classnames'; import React, { memo, useCallback, useMemo, useRef, type MouseEventHandler } from 'react'; import { useRefFrom } from 'use-ref-from'; diff --git a/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx b/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx index 4524ef816b..c664820e32 100644 --- a/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx +++ b/packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx @@ -5,9 +5,9 @@ import { getActivityLivestreamingMetadata, getOrgSchemaMessage, isVoiceTranscriptActivity, - type OrgSchemaCreativeWork, type WebChatActivity } from 'botframework-webchat-core'; +import { type OrgSchemaCreativeWork } from 'botframework-webchat-core/org-schema.js'; import React from 'react'; import CarouselLayout from '../../Activity/CarouselLayout'; diff --git a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts index 4402cdee6e..c5b6ec28ca 100644 --- a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts +++ b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts @@ -9,7 +9,7 @@ import { type OrgSchemaCreativeWork, type OrgSchemaSoftwareSourceCode } from 'bo export default function getFirstBaseOfSoftwareSourceCode( messageThing: OrgSchemaCreativeWork | undefined ): OrgSchemaSoftwareSourceCode | undefined { - return (messageThing?.isBasedOn ?? []).find( - ({ '@type': jsonLinkedDataType }) => jsonLinkedDataType === 'SoftwareSourceCode' + return (messageThing?.isBasedOn ?? []).find(({ '@type': jsonLinkedDataTypes }) => + jsonLinkedDataTypes.includes('SoftwareSourceCode') ); } diff --git a/packages/component/src/hooks/internal/useFeedbackActions.ts b/packages/component/src/hooks/internal/useFeedbackActions.ts index 757fcd6556..8f0dd630eb 100644 --- a/packages/component/src/hooks/internal/useFeedbackActions.ts +++ b/packages/component/src/hooks/internal/useFeedbackActions.ts @@ -1,9 +1,5 @@ -import { - getOrgSchemaMessage, - OrgSchemaAction, - orgSchemaActionSchema, - WebChatActivity -} from 'botframework-webchat-core'; +import { getOrgSchemaMessage, WebChatActivity } from 'botframework-webchat-core'; +import { OrgSchemaAction, orgSchemaActionSchema } from 'botframework-webchat-core/org-schema.js'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useRefFrom } from 'use-ref-from'; import { parse } from 'valibot'; @@ -30,7 +26,9 @@ export default function useFeedbackActions(initialActivity: WebChatActivity): { const messageThing = getOrgSchemaMessage(graph); const reactActions = Object.freeze( - messageThing?.potentialAction.filter(({ '@type': type }) => type === 'LikeAction' || type === 'DislikeAction') + messageThing?.potentialAction.filter( + ({ '@type': type }) => type.includes('LikeAction') || type.includes('DislikeAction') + ) ); if (reactActions.length) { diff --git a/packages/core-json-ld/.eslintrc.yml b/packages/core-json-ld/.eslintrc.yml new file mode 100644 index 0000000000..d3fd8eaab6 --- /dev/null +++ b/packages/core-json-ld/.eslintrc.yml @@ -0,0 +1,2 @@ +extends: + - ../../.eslintrc.production.yml diff --git a/packages/core-json-ld/.gitignore b/packages/core-json-ld/.gitignore new file mode 100644 index 0000000000..52536cb56d --- /dev/null +++ b/packages/core-json-ld/.gitignore @@ -0,0 +1,4 @@ +/*.tgz +/dist/ +/node_modules/ +/tsup.config.bundled_*.mjs diff --git a/packages/core-json-ld/package.json b/packages/core-json-ld/package.json new file mode 100644 index 0000000000..b63bc86049 --- /dev/null +++ b/packages/core-json-ld/package.json @@ -0,0 +1,57 @@ +{ + "name": "@msinternal/botframework-webchat-core-json-ld", + "version": "0.0.0-0", + "description": "botframework-webchat-core/json-ld package", + "main": "./dist/botframework-webchat-core-json-ld.js", + "types": "./dist/botframework-webchat-core-json-ld.d.ts", + "exports": { + ".": { + "import": { + "types": "./dist/botframework-webchat-core-json-ld.d.mts", + "default": "./dist/botframework-webchat-core-json-ld.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-core-json-ld.d.ts", + "default": "./dist/botframework-webchat-core-json-ld.js" + } + } + }, + "author": "Microsoft Corporation", + "license": "MIT", + "private": true, + "repository": { + "type": "git", + "url": "git+https://github.com/microsoft/BotFramework-WebChat.git" + }, + "bugs": { + "url": "https://github.com/microsoft/BotFramework-WebChat/issues" + }, + "files": [ + "./dist/**/*", + "./src/**/*", + "*.js" + ], + "homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/core-json-ld#readme", + "scripts": { + "build": "npm run --if-present build:pre && npm run build:run && npm run --if-present build:post", + "build:pre": "npm run build:pre:local-dependencies && npm run build:pre:watch", + "build:pre:local-dependencies": "../../scripts/npm/build-local-dependencies.sh", + "build:pre:watch": "../../scripts/npm/build-watch.sh", + "build:run": "tsup", + "bump": "vg bump prod && vg bump dev && vg bump peer && (npm audit fix || exit 0)", + "eslint": "npm run precommit", + "postversion": "../../scripts/npm/postversion.sh", + "precommit": "npm run precommit:eslint -- src && npm run precommit:typecheck", + "precommit:eslint": "../../node_modules/.bin/eslint --report-unused-disable-directives --max-warnings 0", + "precommit:typecheck": "tsc --project ./src --emitDeclarationOnly false --esModuleInterop true --noEmit --pretty false", + "preversion": "../../scripts/npm/preversion.sh", + "start": "../../scripts/npm/notify-build.sh \"src\" \"../tsconfig/package.json\"" + }, + "pinDependencies": {}, + "localDependencies": { + "@msinternal/botframework-webchat-tsconfig": "development" + }, + "devDependencies": { + "@msinternal/botframework-webchat-tsconfig": "^0.0.0-0" + } +} diff --git a/packages/core-json-ld/src/JSONLinkedData.ts b/packages/core-json-ld/src/JSONLinkedData.ts new file mode 100644 index 0000000000..5ac847497f --- /dev/null +++ b/packages/core-json-ld/src/JSONLinkedData.ts @@ -0,0 +1,22 @@ +import { literal, object, optional, string, type GenericSchema } from 'valibot'; +import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; + +type JSONLinkedDataInput = { + readonly '@context'?: 'https://schema.org' | undefined; + readonly '@id'?: string | readonly string[] | undefined; + readonly '@type'?: string | readonly string[] | undefined; +}; + +type JSONLinkedDataOutput = { + readonly '@context'?: 'https://schema.org' | undefined; + readonly '@id'?: string | undefined; + readonly '@type': readonly string[]; +}; + +const jsonLinkedDataSchema: GenericSchema = object({ + '@context': optional(literal('https://schema.org')), + '@id': optional(string()), + '@type': jsonLinkedDataProperty(string()) +}); + +export { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput }; diff --git a/packages/core-json-ld/src/index.ts b/packages/core-json-ld/src/index.ts new file mode 100644 index 0000000000..11a1868eae --- /dev/null +++ b/packages/core-json-ld/src/index.ts @@ -0,0 +1,49 @@ +// #region Schema.org +export { + actionSchema as orgSchemaActionSchema, + parseAction, + type ActionOutput as OrgSchemaAction +} from './orgSchema/Action.js'; +export { + claimSchema as orgSchemaClaimSchema, + parseClaim, + type ClaimOutput as OrgSchemaClaim +} from './orgSchema/Claim.js'; +export { + creativeWorkSchema as orgSchemaCreativeWorkSchema, + parseCreativeWork, + type CreativeWorkOutput as OrgSchemaCreativeWork +} from './orgSchema/CreativeWork.js'; +export { + definedTermSchema as orgSchemaDefinedTermSchema, + parseDefinedTerm, + type DefinedTermOutput as OrgSchemaDefinedTerm +} from './orgSchema/DefinedTerm.js'; +export { personSchema as orgSchemaPersonSchema, type PersonOutput as OrgSchemaPerson } from './orgSchema/Person.js'; +export { + projectSchema as orgSchemaProjectSchema, + parseProject, + type ProjectOutput as OrgSchemaProject +} from './orgSchema/Project.js'; +export { + softwareSourceCodeSchema as orgSchemaSoftwareSourceCodeSchema, + type SoftwareSourceCodeOutput as OrgSchemaSoftwareSourceCode +} from './orgSchema/SoftwareSourceCode.js'; +export { + thingSchema as orgSchemaThingSchema, + parseThing, + type ThingOutput as OrgSchemaThing +} from './orgSchema/Thing.js'; +export { + userReviewSchema as orgSchemaUserReviewSchema, + type UserReviewOutput as OrgSchemaUserReview +} from './orgSchema/UserReview.js'; +export { + voteActionSchema as orgSchemaVoteActionSchema, + parseVoteAction, + type VoteActionOutput as OrgSchemaVoteAction +} from './orgSchema/VoteAction.js'; +// #endregion + +export { default as isOfType } from './isOfType.js'; +export { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from './JSONLinkedData.js'; diff --git a/packages/core-json-ld/src/isOfType.ts b/packages/core-json-ld/src/isOfType.ts new file mode 100644 index 0000000000..2245b30918 --- /dev/null +++ b/packages/core-json-ld/src/isOfType.ts @@ -0,0 +1,5 @@ +import type { JSONLinkedDataOutput } from './JSONLinkedData'; + +export default function isOfType(type: string, thing: JSONLinkedDataOutput): boolean { + return !!thing && thing['@type'].includes(type); +} diff --git a/packages/core/src/types/external/OrgSchema/Action.spec.ts b/packages/core-json-ld/src/orgSchema/Action.spec.ts similarity index 92% rename from packages/core/src/types/external/OrgSchema/Action.spec.ts rename to packages/core-json-ld/src/orgSchema/Action.spec.ts index de6deedec3..5d4585cc92 100644 --- a/packages/core/src/types/external/OrgSchema/Action.spec.ts +++ b/packages/core-json-ld/src/orgSchema/Action.spec.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from '@jest/globals'; -import { actionSchema, parseAction } from './Action'; import { parse } from 'valibot'; -import { userReviewSchema } from './UserReview'; +import { actionSchema, parseAction } from './Action.js'; +import { userReviewSchema } from './UserReview.js'; const actionTemplate = parse(actionSchema, {}); const userReviewTemplate = parse(userReviewSchema, {}); @@ -25,7 +25,6 @@ describe('Action', () => { expect( parseAction({ '@type': 'Action', - // @ts-expect-error actionStatus: 'ABC' }) ).toEqual({ diff --git a/packages/core/src/types/external/OrgSchema/Action.ts b/packages/core-json-ld/src/orgSchema/Action.ts similarity index 95% rename from packages/core/src/types/external/OrgSchema/Action.ts rename to packages/core-json-ld/src/orgSchema/Action.ts index 30136595d4..62c3150c83 100644 --- a/packages/core/src/types/external/OrgSchema/Action.ts +++ b/packages/core-json-ld/src/orgSchema/Action.ts @@ -1,10 +1,9 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; - -import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; -import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview'; +import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { projectSchema, type ProjectInput, type ProjectOutput } from './Project.js'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; +import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview.js'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. diff --git a/packages/core/src/types/external/OrgSchema/ActionStatus.ts b/packages/core-json-ld/src/orgSchema/ActionStatus.ts similarity index 100% rename from packages/core/src/types/external/OrgSchema/ActionStatus.ts rename to packages/core-json-ld/src/orgSchema/ActionStatus.ts diff --git a/packages/core/src/types/external/OrgSchema/Claim.spec.ts b/packages/core-json-ld/src/orgSchema/Claim.spec.ts similarity index 92% rename from packages/core/src/types/external/OrgSchema/Claim.spec.ts rename to packages/core-json-ld/src/orgSchema/Claim.spec.ts index c53c615df4..4149f81761 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.spec.ts +++ b/packages/core-json-ld/src/orgSchema/Claim.spec.ts @@ -1,8 +1,8 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { claimSchema } from './Claim'; -import { creativeWorkSchema } from './CreativeWork'; -import { projectSchema } from './Project'; +import { claimSchema } from './Claim.js'; +import { creativeWorkSchema } from './CreativeWork.js'; +import { projectSchema } from './Project.js'; const claimTemplate = parse(claimSchema, {}); const creativeWorkTemplate = parse(creativeWorkSchema, {}); diff --git a/packages/core/src/types/external/OrgSchema/Claim.ts b/packages/core-json-ld/src/orgSchema/Claim.ts similarity index 96% rename from packages/core/src/types/external/OrgSchema/Claim.ts rename to packages/core-json-ld/src/orgSchema/Claim.ts index e0dd0cd96b..62c086387c 100644 --- a/packages/core/src/types/external/OrgSchema/Claim.ts +++ b/packages/core-json-ld/src/orgSchema/Claim.ts @@ -1,8 +1,7 @@ import { intersect, lazy, object, parser, type GenericSchema } from 'valibot'; - -import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; -import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork.js'; +import { projectSchema, type ProjectInput, type ProjectOutput } from './Project.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; /** * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews. diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts b/packages/core-json-ld/src/orgSchema/CreativeWork.parseCreativeWork.spec.ts similarity index 97% rename from packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts rename to packages/core-json-ld/src/orgSchema/CreativeWork.parseCreativeWork.spec.ts index 52d86d8841..b7fb0e1ceb 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.parseCreativeWork.spec.ts +++ b/packages/core-json-ld/src/orgSchema/CreativeWork.parseCreativeWork.spec.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { claimSchema } from './Claim'; -import { creativeWorkSchema, parseCreativeWork } from './CreativeWork'; +import { claimSchema } from './Claim.js'; +import { creativeWorkSchema, parseCreativeWork } from './CreativeWork.js'; const claimTemplate = parse(claimSchema, {}); const creativeWorkTemplate = parse(creativeWorkSchema, {}); diff --git a/packages/core/src/types/external/OrgSchema/CreativeWork.ts b/packages/core-json-ld/src/orgSchema/CreativeWork.ts similarity index 97% rename from packages/core/src/types/external/OrgSchema/CreativeWork.ts rename to packages/core-json-ld/src/orgSchema/CreativeWork.ts index 2139ae54ff..e07898c21a 100644 --- a/packages/core/src/types/external/OrgSchema/CreativeWork.ts +++ b/packages/core-json-ld/src/orgSchema/CreativeWork.ts @@ -1,20 +1,19 @@ import { intersect, lazy, number, object, parser, string, union, type GenericSchema } from 'valibot'; - -import { claimSchema } from './Claim'; +import { claimSchema } from './Claim.js'; import { creativeWorkStatusSchema, type CreativeWorkStatusInput, type CreativeWorkStatusOutput -} from './CreativeWorkStatus'; -import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm'; -import { personSchema, type PersonInput, type PersonOutput } from './Person'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +} from './CreativeWorkStatus.js'; +import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm.js'; +import { personSchema, type PersonInput, type PersonOutput } from './Person.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; import { softwareSourceCodeSchema, type SoftwareSourceCodeInput, type SoftwareSourceCodeOutput -} from './SoftwareSourceCode'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +} from './SoftwareSourceCode.js'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; /** * The most generic kind of creative work, including books, movies, photographs, software programs, etc. diff --git a/packages/core/src/types/external/OrgSchema/CreativeWorkStatus.ts b/packages/core-json-ld/src/orgSchema/CreativeWorkStatus.ts similarity index 100% rename from packages/core/src/types/external/OrgSchema/CreativeWorkStatus.ts rename to packages/core-json-ld/src/orgSchema/CreativeWorkStatus.ts diff --git a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts b/packages/core-json-ld/src/orgSchema/DefinedTerm.ts similarity index 96% rename from packages/core/src/types/external/OrgSchema/DefinedTerm.ts rename to packages/core-json-ld/src/orgSchema/DefinedTerm.ts index 71a9949802..db63cfc65f 100644 --- a/packages/core/src/types/external/OrgSchema/DefinedTerm.ts +++ b/packages/core-json-ld/src/orgSchema/DefinedTerm.ts @@ -1,7 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; - -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; /** * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term. diff --git a/packages/core/src/types/external/OrgSchema/Person.ts b/packages/core-json-ld/src/orgSchema/Person.ts similarity index 94% rename from packages/core/src/types/external/OrgSchema/Person.ts rename to packages/core-json-ld/src/orgSchema/Person.ts index ec581d053b..c4e1d02208 100644 --- a/packages/core/src/types/external/OrgSchema/Person.ts +++ b/packages/core-json-ld/src/orgSchema/Person.ts @@ -1,6 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; /** * A person (alive, dead, undead, or fictional). diff --git a/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts b/packages/core-json-ld/src/orgSchema/Project.parseProject.spec.ts similarity index 90% rename from packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts rename to packages/core-json-ld/src/orgSchema/Project.parseProject.spec.ts index b7ac478ac5..81fc1f1875 100644 --- a/packages/core/src/types/external/OrgSchema/Project.parseProject.spec.ts +++ b/packages/core-json-ld/src/orgSchema/Project.parseProject.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from '@jest/globals'; -import { parseProject, projectSchema } from './Project'; import { parse } from 'valibot'; +import { parseProject, projectSchema } from './Project.js'; const projectTemplate = parse(projectSchema, {}); diff --git a/packages/core/src/types/external/OrgSchema/Project.ts b/packages/core-json-ld/src/orgSchema/Project.ts similarity index 95% rename from packages/core/src/types/external/OrgSchema/Project.ts rename to packages/core-json-ld/src/orgSchema/Project.ts index 0d00baba81..cc482238d0 100644 --- a/packages/core/src/types/external/OrgSchema/Project.ts +++ b/packages/core-json-ld/src/orgSchema/Project.ts @@ -1,7 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; - -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; /** * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. diff --git a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts b/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts similarity index 92% rename from packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts rename to packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts index bcffc28f8f..8757685fc9 100644 --- a/packages/core/src/types/external/OrgSchema/SoftwareSourceCode.ts +++ b/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts @@ -1,7 +1,6 @@ import { intersect, lazy, object, string, type GenericSchema } from 'valibot'; - -import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; /** * Computer programming source code. Example: Full (compile ready) solutions, code snippet samples, scripts, templates. diff --git a/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts b/packages/core-json-ld/src/orgSchema/Thing.parseThing.spec.ts similarity index 96% rename from packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts rename to packages/core-json-ld/src/orgSchema/Thing.parseThing.spec.ts index 17e81b4b78..1ef4dfea74 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.parseThing.spec.ts +++ b/packages/core-json-ld/src/orgSchema/Thing.parseThing.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { thingSchema } from './Thing'; +import { thingSchema } from './Thing.js'; const thingTemplate = parse(thingSchema, {}); diff --git a/packages/core/src/types/external/OrgSchema/Thing.ts b/packages/core-json-ld/src/orgSchema/Thing.ts similarity index 96% rename from packages/core/src/types/external/OrgSchema/Thing.ts rename to packages/core-json-ld/src/orgSchema/Thing.ts index 72684031ee..12adfc0500 100644 --- a/packages/core/src/types/external/OrgSchema/Thing.ts +++ b/packages/core-json-ld/src/orgSchema/Thing.ts @@ -1,8 +1,7 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; - -import { actionSchema, type ActionInput, type ActionOutput } from './Action'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from './JSONLinkedData'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from '../JSONLinkedData.js'; /** * The most generic type of item. diff --git a/packages/core/src/types/external/OrgSchema/UserReview.ts b/packages/core-json-ld/src/orgSchema/UserReview.ts similarity index 94% rename from packages/core/src/types/external/OrgSchema/UserReview.ts rename to packages/core-json-ld/src/orgSchema/UserReview.ts index 2851fead8f..15035b864d 100644 --- a/packages/core/src/types/external/OrgSchema/UserReview.ts +++ b/packages/core-json-ld/src/orgSchema/UserReview.ts @@ -1,7 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; - -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; /** * A review created by an end-user (e.g. consumer, purchaser, attendee etc.), in contrast with [`CriticReview`](https://schema.org/CriticReview). diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.spec.ts b/packages/core-json-ld/src/orgSchema/VoteAction.spec.ts similarity index 93% rename from packages/core/src/types/external/OrgSchema/VoteAction.spec.ts rename to packages/core-json-ld/src/orgSchema/VoteAction.spec.ts index e4029cd2a7..821277e67c 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.spec.ts +++ b/packages/core-json-ld/src/orgSchema/VoteAction.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from '@jest/globals'; -import { parseVoteAction, voteActionSchema } from './VoteAction'; import { parse } from 'valibot'; +import { parseVoteAction, voteActionSchema } from './VoteAction.js'; const voteActionTemplate = parse(voteActionSchema, {}); diff --git a/packages/core/src/types/external/OrgSchema/VoteAction.ts b/packages/core-json-ld/src/orgSchema/VoteAction.ts similarity index 96% rename from packages/core/src/types/external/OrgSchema/VoteAction.ts rename to packages/core-json-ld/src/orgSchema/VoteAction.ts index 52f77c6561..76c5813d43 100644 --- a/packages/core/src/types/external/OrgSchema/VoteAction.ts +++ b/packages/core-json-ld/src/orgSchema/VoteAction.ts @@ -1,7 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; - -import { actionSchema, type ActionInput, type ActionOutput } from './Action'; -import jsonLinkedDataProperty from './private/jsonLinkedDataProperty'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. diff --git a/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.spec.ts b/packages/core-json-ld/src/private/jsonLinkedDataProperty.spec.ts similarity index 100% rename from packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.spec.ts rename to packages/core-json-ld/src/private/jsonLinkedDataProperty.spec.ts diff --git a/packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts b/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts similarity index 100% rename from packages/core/src/types/external/OrgSchema/private/jsonLinkedDataProperty.ts rename to packages/core-json-ld/src/private/jsonLinkedDataProperty.ts diff --git a/packages/core-json-ld/src/tsconfig.json b/packages/core-json-ld/src/tsconfig.json new file mode 100644 index 0000000000..d0fab377e4 --- /dev/null +++ b/packages/core-json-ld/src/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@msinternal/botframework-webchat-tsconfig/current" +} diff --git a/packages/core-json-ld/tsup.config.ts b/packages/core-json-ld/tsup.config.ts new file mode 100644 index 0000000000..30a6091afe --- /dev/null +++ b/packages/core-json-ld/tsup.config.ts @@ -0,0 +1,23 @@ +import { defineConfig } from 'tsup'; + +import { applyConfig } from '../../tsup.base.config'; + +const commonConfig = applyConfig(config => ({ + ...config, + entry: { + 'botframework-webchat-core-json-ld': './src/index.ts' + } +})); + +export default defineConfig([ + { + ...commonConfig, + format: 'esm', + onSuccess: 'touch ./package.json' + }, + { + ...commonConfig, + format: 'cjs', + target: [...commonConfig.target, 'es2019'] + } +]); diff --git a/packages/core/json-ld.js b/packages/core/json-ld.js new file mode 100644 index 0000000000..8513d11fd8 --- /dev/null +++ b/packages/core/json-ld.js @@ -0,0 +1,3 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('./dist/botframework-webchat-core.json-ld.js'); diff --git a/packages/core/org-schema.js b/packages/core/org-schema.js new file mode 100644 index 0000000000..5c5746cb68 --- /dev/null +++ b/packages/core/org-schema.js @@ -0,0 +1,3 @@ +// This is required for Webpack 4 which does not support named exports. +// eslint-disable-next-line no-undef +module.exports = require('./dist/botframework-webchat-core.org-schema.js'); diff --git a/packages/core/package.json b/packages/core/package.json index 1efa08ccb7..c360686bf1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -68,6 +68,26 @@ "types": "./dist/botframework-webchat-core.internal.d.ts", "default": "./dist/botframework-webchat-core.internal.js" } + }, + "./json-ld.js": { + "import": { + "types": "./dist/botframework-webchat-core.json-ld.d.mts", + "default": "./dist/botframework-webchat-core.json-ld.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-core.json-ld.d.ts", + "default": "./dist/botframework-webchat-core.json-ld.js" + } + }, + "./org-schema.js": { + "import": { + "types": "./dist/botframework-webchat-core.org-schema.d.mts", + "default": "./dist/botframework-webchat-core.org-schema.mjs" + }, + "require": { + "types": "./dist/botframework-webchat-core.org-schema.d.ts", + "default": "./dist/botframework-webchat-core.org-schema.js" + } } }, "publishConfig": { @@ -117,7 +137,7 @@ "precommit:eslint": "../../node_modules/.bin/eslint --report-unused-disable-directives --max-warnings 0", "precommit:typecheck": "tsc --project ./src --emitDeclarationOnly false --esModuleInterop true --noEmit --pretty false", "preversion": "../../scripts/npm/preversion.sh", - "start": "../../scripts/npm/notify-build.sh \"src\" \"../core-debug-api/package.json\" \"../core-graph/package.json\"", + "start": "../../scripts/npm/notify-build.sh \"src\" \"../core-debug-api/package.json\" \"../core-graph/package.json\" \"../core-json-ld/package.json\"", "test:tsd": "tsd" }, "engines": { @@ -141,6 +161,7 @@ "@msinternal/botframework-webchat-base": "development", "@msinternal/botframework-webchat-core-debug-api": "development", "@msinternal/botframework-webchat-core-graph": "development", + "@msinternal/botframework-webchat-core-json-ld": "development", "@msinternal/botframework-webchat-tsconfig": "development" }, "devDependencies": { @@ -151,6 +172,7 @@ "@msinternal/botframework-webchat-base": "0.0.0-0", "@msinternal/botframework-webchat-core-debug-api": "0.0.0-0", "@msinternal/botframework-webchat-core-graph": "0.0.0-0", + "@msinternal/botframework-webchat-core-json-ld": "0.0.0-0", "@msinternal/botframework-webchat-tsconfig": "0.0.0-0", "@testduet/given-when-then": "^0.1.0", "@types/jest": "^29.5.14", diff --git a/packages/core/src/boot/json-ld.ts b/packages/core/src/boot/json-ld.ts new file mode 100644 index 0000000000..c870177370 --- /dev/null +++ b/packages/core/src/boot/json-ld.ts @@ -0,0 +1,6 @@ +export { isOfType } from '@msinternal/botframework-webchat-core-json-ld'; +export { + jsonLinkedDataSchema, + type JSONLinkedDataInput, + type JSONLinkedDataOutput +} from '@msinternal/botframework-webchat-core-json-ld'; diff --git a/packages/core/src/boot/org-schema.ts b/packages/core/src/boot/org-schema.ts new file mode 100644 index 0000000000..14e1644d5c --- /dev/null +++ b/packages/core/src/boot/org-schema.ts @@ -0,0 +1,29 @@ +export { + orgSchemaActionSchema, + orgSchemaClaimSchema, + orgSchemaCreativeWorkSchema, + orgSchemaDefinedTermSchema, + orgSchemaPersonSchema, + orgSchemaProjectSchema, + orgSchemaSoftwareSourceCodeSchema, + orgSchemaThingSchema, + orgSchemaUserReviewSchema, + orgSchemaVoteActionSchema, + parseAction, + parseClaim, + parseCreativeWork, + parseDefinedTerm, + parseProject, + parseThing, + parseVoteAction, + type OrgSchemaAction, + type OrgSchemaClaim, + type OrgSchemaCreativeWork, + type OrgSchemaDefinedTerm, + type OrgSchemaPerson, + type OrgSchemaProject, + type OrgSchemaSoftwareSourceCode, + type OrgSchemaThing, + type OrgSchemaUserReview, + type OrgSchemaVoteAction +} from '@msinternal/botframework-webchat-core-json-ld'; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 6a0cfb78c8..647137bafa 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -84,56 +84,6 @@ import type { DirectLineThumbnailCard } from './types/external/DirectLineThumbna import type { DirectLineVideoCard } from './types/external/DirectLineVideoCard'; import type { Observable } from './types/external/Observable'; -// #region Schema.org -export { - actionSchema as orgSchemaActionSchema, - parseAction, - type ActionOutput as OrgSchemaAction -} from './types/external/OrgSchema/Action'; -export { - claimSchema as orgSchemaClaimSchema, - parseClaim, - type ClaimOutput as OrgSchemaClaim -} from './types/external/OrgSchema/Claim'; -export { - creativeWorkSchema as orgSchemaCreativeWorkSchema, - parseCreativeWork, - type CreativeWorkOutput as OrgSchemaCreativeWork -} from './types/external/OrgSchema/CreativeWork'; -export { - definedTermSchema as orgSchemaDefinedTermSchema, - parseDefinedTerm, - type DefinedTermOutput as OrgSchemaDefinedTerm -} from './types/external/OrgSchema/DefinedTerm'; -export { - personSchema as orgSchemaPersonSchema, - type PersonOutput as OrgSchemaPerson -} from './types/external/OrgSchema/Person'; -export { - projectSchema as orgSchemaProjectSchema, - parseProject, - type ProjectOutput as OrgSchemaProject -} from './types/external/OrgSchema/Project'; -export { - softwareSourceCodeSchema as orgSchemaSoftwareSourceCodeSchema, - type SoftwareSourceCodeOutput as OrgSchemaSoftwareSourceCode -} from './types/external/OrgSchema/SoftwareSourceCode'; -export { - thingSchema as orgSchemaThingSchema, - parseThing, - type ThingOutput as OrgSchemaThing -} from './types/external/OrgSchema/Thing'; -export { - userReviewSchema as orgSchemaUserReviewSchema, - type UserReviewOutput as OrgSchemaUserReview -} from './types/external/OrgSchema/UserReview'; -export { - voteActionSchema as orgSchemaVoteActionSchema, - parseVoteAction, - type VoteActionOutput as OrgSchemaVoteAction -} from './types/external/OrgSchema/VoteAction'; -// #endregion - /** @deprecated */ export { singleToArray, type OneOrMany } from '@msinternal/botframework-webchat-base/utils'; diff --git a/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts b/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts index 1d37f7b22d..43cafcad35 100644 --- a/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts +++ b/packages/core/src/reducers/activities/sort/private/getPartGroupingMetadataMap.ts @@ -13,16 +13,18 @@ function getPartGroupingMetadataMap(activity: WebChatActivity): ReadonlyMap { @@ -11,7 +11,7 @@ test('should get message', () => { type: 'https://schema.org/Message' }; - expect(getOrgSchemaMessage([expected])).toEqual(parse(creativeWorkSchema, expected)); + expect(getOrgSchemaMessage([expected])).toEqual(parse(orgSchemaCreativeWorkSchema, expected)); }); test('should not get message without @id of empty string', () => { diff --git a/packages/core/src/utils/getOrgSchemaMessage.ts b/packages/core/src/utils/getOrgSchemaMessage.ts index d36dd162ad..823e8e84cd 100644 --- a/packages/core/src/utils/getOrgSchemaMessage.ts +++ b/packages/core/src/utils/getOrgSchemaMessage.ts @@ -1,10 +1,10 @@ import { parse } from 'valibot'; -import { creativeWorkSchema, type CreativeWorkOutput } from '../types/external/OrgSchema/CreativeWork'; -import { type WebChatActivity } from '../types/WebChatActivity'; +import { orgSchemaCreativeWorkSchema, type OrgSchemaCreativeWork } from '@msinternal/botframework-webchat-core-json-ld'; +import type { WebChatActivity } from '../types/WebChatActivity'; type EntityType = NonNullable[number]; -export default function getOrgSchemaMessage(graph: readonly EntityType[]): CreativeWorkOutput | undefined { +export default function getOrgSchemaMessage(graph: readonly EntityType[]): OrgSchemaCreativeWork | undefined { for (const entity of graph ?? []) { const isPossiblySelfMessage = entity && @@ -15,7 +15,7 @@ export default function getOrgSchemaMessage(graph: readonly EntityType[]): Creat entity['@id'] === ''; if (isPossiblySelfMessage) { - return parse(creativeWorkSchema, entity); + return parse(orgSchemaCreativeWorkSchema, entity); } } } diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts index 1415416ea6..0d1f57045b 100644 --- a/packages/core/tsup.config.ts +++ b/packages/core/tsup.config.ts @@ -8,7 +8,9 @@ const commonConfig = applyConfig(config => ({ 'botframework-webchat-core': './src/index.ts', 'botframework-webchat-core.activity': './src/boot/activity.ts', 'botframework-webchat-core.graph': './src/boot/graph.ts', - 'botframework-webchat-core.internal': './src/boot/internal.ts' + 'botframework-webchat-core.internal': './src/boot/internal.ts', + 'botframework-webchat-core.json-ld': './src/boot/json-ld.ts', + 'botframework-webchat-core.org-schema': './src/boot/org-schema.ts' } })); From de005516613a3a1ad68b7831f5ff09bceb2f65ad Mon Sep 17 00:00:00 2001 From: William Wong Date: Sat, 2 May 2026 01:17:42 +0000 Subject: [PATCH 104/108] Fix typings --- .../component/src/ActivityFeedback/private/canActionResubmit.ts | 2 +- .../providers/private/ActivityFeedbackContext.ts | 2 +- .../src/ActivityFeedback/providers/private/FocusPropagation.ts | 2 +- .../src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/component/src/ActivityFeedback/private/canActionResubmit.ts b/packages/component/src/ActivityFeedback/private/canActionResubmit.ts index d667c6a296..6d60181cf3 100644 --- a/packages/component/src/ActivityFeedback/private/canActionResubmit.ts +++ b/packages/component/src/ActivityFeedback/private/canActionResubmit.ts @@ -1,4 +1,4 @@ -import { type OrgSchemaAction } from 'botframework-webchat-core'; +import { type OrgSchemaAction } from 'botframework-webchat-core/org-schema.js'; import isActionRequireReview from './isActionRequireReview'; export default function canActionResubmit(action: OrgSchemaAction | undefined): boolean { diff --git a/packages/component/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts b/packages/component/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts index 6c50b1315c..6fa2a9b349 100644 --- a/packages/component/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts +++ b/packages/component/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts @@ -1,4 +1,4 @@ -import { type OrgSchemaAction, type WebChatActivity } from 'botframework-webchat-core'; +import { type OrgSchemaAction, type WebChatActivity } from 'botframework-webchat-core/org-schema.js'; import { createContext, type Dispatch, type SetStateAction } from 'react'; type ActivityFeedbackContextType = Readonly<{ diff --git a/packages/component/src/ActivityFeedback/providers/private/FocusPropagation.ts b/packages/component/src/ActivityFeedback/providers/private/FocusPropagation.ts index 790afbc2b8..3fde4fb163 100644 --- a/packages/component/src/ActivityFeedback/providers/private/FocusPropagation.ts +++ b/packages/component/src/ActivityFeedback/providers/private/FocusPropagation.ts @@ -1,4 +1,4 @@ -import { type OrgSchemaAction } from 'botframework-webchat-core'; +import { type OrgSchemaAction } from 'botframework-webchat-core/org-schema.js'; import { createPropagation } from 'use-propagate'; const { diff --git a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts index c5b6ec28ca..69c9a7f4d5 100644 --- a/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts +++ b/packages/component/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts @@ -1,4 +1,4 @@ -import { type OrgSchemaCreativeWork, type OrgSchemaSoftwareSourceCode } from 'botframework-webchat-core'; +import { type OrgSchemaCreativeWork, type OrgSchemaSoftwareSourceCode } from 'botframework-webchat-core/org-schema.js'; /** * Finds the first `isBasedOf` element that is of type `SoftwareSourceCode`. From 25c9be8a067070f2a8e727bb3a5abfcba6e97157 Mon Sep 17 00:00:00 2001 From: William Wong Date: Sat, 2 May 2026 01:29:06 +0000 Subject: [PATCH 105/108] Fix tests --- .../core-json-ld/src/orgSchema/Action.spec.ts | 13 +++++---- packages/core-json-ld/src/orgSchema/Action.ts | 10 +++---- .../core-json-ld/src/orgSchema/Claim.spec.ts | 18 ++++++------ packages/core-json-ld/src/orgSchema/Claim.ts | 6 ++-- .../CreativeWork.parseCreativeWork.spec.ts | 28 ++++++++++++------- .../src/orgSchema/CreativeWork.ts | 14 +++++----- .../core-json-ld/src/orgSchema/DefinedTerm.ts | 4 +-- packages/core-json-ld/src/orgSchema/Person.ts | 4 +-- .../orgSchema/Project.parseProject.spec.ts | 4 +-- .../core-json-ld/src/orgSchema/Project.ts | 4 +-- .../src/orgSchema/SoftwareSourceCode.ts | 4 +-- .../src/orgSchema/Thing.parseThing.spec.ts | 23 +++++++++++---- packages/core-json-ld/src/orgSchema/Thing.ts | 6 ++-- .../core-json-ld/src/orgSchema/UserReview.ts | 4 +-- .../src/orgSchema/VoteAction.spec.ts | 6 ++-- .../core-json-ld/src/orgSchema/VoteAction.ts | 4 +-- 16 files changed, 87 insertions(+), 65 deletions(-) diff --git a/packages/core-json-ld/src/orgSchema/Action.spec.ts b/packages/core-json-ld/src/orgSchema/Action.spec.ts index 5d4585cc92..78afa60602 100644 --- a/packages/core-json-ld/src/orgSchema/Action.spec.ts +++ b/packages/core-json-ld/src/orgSchema/Action.spec.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { actionSchema, parseAction } from './Action.js'; -import { userReviewSchema } from './UserReview.js'; +import { actionSchema, parseAction } from './Action'; +import { userReviewSchema } from './UserReview'; const actionTemplate = parse(actionSchema, {}); const userReviewTemplate = parse(userReviewSchema, {}); @@ -16,7 +16,7 @@ describe('Action', () => { }) ).toEqual({ ...actionTemplate, - '@type': 'Action', + '@type': ['Action'], actionStatus: ['ActiveActionStatus'] })); @@ -25,11 +25,12 @@ describe('Action', () => { expect( parseAction({ '@type': 'Action', + // @ts-expect-error actionStatus: 'ABC' }) ).toEqual({ ...actionTemplate, - '@type': 'Action', + '@type': ['Action'], actionStatus: [] }); } catch (err) { @@ -53,12 +54,12 @@ describe('Action', () => { }) ).toEqual({ ...actionTemplate, - '@type': 'LikeAction', + '@type': ['LikeAction'], actionStatus: ['PotentialActionStatus'], result: [ { ...userReviewTemplate, - '@type': 'UserReview', + '@type': ['UserReview'], reviewAspect: ['Hello, World!'] } ] diff --git a/packages/core-json-ld/src/orgSchema/Action.ts b/packages/core-json-ld/src/orgSchema/Action.ts index 62c3150c83..90d3fd2118 100644 --- a/packages/core-json-ld/src/orgSchema/Action.ts +++ b/packages/core-json-ld/src/orgSchema/Action.ts @@ -1,9 +1,9 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus.js'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; -import { projectSchema, type ProjectInput, type ProjectOutput } from './Project.js'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; -import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview.js'; +import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. diff --git a/packages/core-json-ld/src/orgSchema/Claim.spec.ts b/packages/core-json-ld/src/orgSchema/Claim.spec.ts index 4149f81761..b4cf7c13f4 100644 --- a/packages/core-json-ld/src/orgSchema/Claim.spec.ts +++ b/packages/core-json-ld/src/orgSchema/Claim.spec.ts @@ -1,8 +1,8 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { claimSchema } from './Claim.js'; -import { creativeWorkSchema } from './CreativeWork.js'; -import { projectSchema } from './Project.js'; +import { claimSchema } from './Claim'; +import { creativeWorkSchema } from './CreativeWork'; +import { projectSchema } from './Project'; const claimTemplate = parse(claimSchema, {}); const creativeWorkTemplate = parse(creativeWorkSchema, {}); @@ -20,11 +20,11 @@ describe('Claim', () => { }) ).toEqual({ ...claimTemplate, - '@type': 'Claim', + '@type': ['Claim'], appearance: [ { ...creativeWorkTemplate, - '@type': 'Book', + '@type': ['Book'], name: ['Business @ the Speed of Thought'] } ] @@ -41,11 +41,11 @@ describe('Claim', () => { }) ).toEqual({ ...claimTemplate, - '@type': 'Claim', + '@type': ['Claim'], claimInterpreter: [ { ...projectTemplate, - '@type': 'Project', + '@type': ['Project'], slogan: ['Empower every person and every organization on the planet to achieve more.'] } ] @@ -60,7 +60,7 @@ describe('Claim', () => { }) ).toEqual({ ...claimTemplate, - '@type': 'Claim', + '@type': ['Claim'], position: [1] })); @@ -72,7 +72,7 @@ describe('Claim', () => { }) ).toEqual({ ...claimTemplate, - '@type': 'Claim', + '@type': ['Claim'], position: ['First'] })); }); diff --git a/packages/core-json-ld/src/orgSchema/Claim.ts b/packages/core-json-ld/src/orgSchema/Claim.ts index 62c086387c..4b0f6ddf8e 100644 --- a/packages/core-json-ld/src/orgSchema/Claim.ts +++ b/packages/core-json-ld/src/orgSchema/Claim.ts @@ -1,7 +1,7 @@ import { intersect, lazy, object, parser, type GenericSchema } from 'valibot'; -import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork.js'; -import { projectSchema, type ProjectInput, type ProjectOutput } from './Project.js'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; +import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; /** * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews. diff --git a/packages/core-json-ld/src/orgSchema/CreativeWork.parseCreativeWork.spec.ts b/packages/core-json-ld/src/orgSchema/CreativeWork.parseCreativeWork.spec.ts index b7fb0e1ceb..cd131e2b53 100644 --- a/packages/core-json-ld/src/orgSchema/CreativeWork.parseCreativeWork.spec.ts +++ b/packages/core-json-ld/src/orgSchema/CreativeWork.parseCreativeWork.spec.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { claimSchema } from './Claim.js'; -import { creativeWorkSchema, parseCreativeWork } from './CreativeWork.js'; +import { claimSchema } from './Claim'; +import { creativeWorkSchema, parseCreativeWork } from './CreativeWork'; const claimTemplate = parse(claimSchema, {}); const creativeWorkTemplate = parse(creativeWorkSchema, {}); @@ -15,7 +15,7 @@ describe('CreativeWork', () => { }) ).toEqual({ ...creativeWorkTemplate, - '@type': 'CreativeWork', + '@type': ['CreativeWork'], name: ['Business @ the Speed of Thought'] })); @@ -27,7 +27,7 @@ describe('CreativeWork', () => { }) ).toEqual({ ...creativeWorkTemplate, - '@type': 'Book', + '@type': ['Book'], name: ['Business @ the Speed of Thought'] })); @@ -36,16 +36,19 @@ describe('CreativeWork', () => { parseCreativeWork({ '@type': 'Book', name: 'Business @ the Speed of Thought', - citation: { '@type': 'Book', name: 'The Road Ahead' } + citation: { + '@type': 'Book', + name: 'The Road Ahead' + } }) ).toEqual({ ...creativeWorkTemplate, - '@type': 'Book', + '@type': ['Book'], name: ['Business @ the Speed of Thought'], citation: [ { ...claimTemplate, - '@type': 'Book', + '@type': ['Book'], name: ['The Road Ahead'] } ] @@ -56,16 +59,21 @@ describe('CreativeWork', () => { parseCreativeWork({ '@type': 'Book', name: 'Business @ the Speed of Thought', - citation: [{ '@type': 'Book', name: 'The Road Ahead' }] + citation: [ + { + '@type': 'Book', + name: 'The Road Ahead' + } + ] }) ).toEqual({ ...creativeWorkTemplate, - '@type': 'Book', + '@type': ['Book'], name: ['Business @ the Speed of Thought'], citation: [ { ...claimTemplate, - '@type': 'Book', + '@type': ['Book'], name: ['The Road Ahead'] } ] diff --git a/packages/core-json-ld/src/orgSchema/CreativeWork.ts b/packages/core-json-ld/src/orgSchema/CreativeWork.ts index e07898c21a..f0c7b31afd 100644 --- a/packages/core-json-ld/src/orgSchema/CreativeWork.ts +++ b/packages/core-json-ld/src/orgSchema/CreativeWork.ts @@ -1,19 +1,19 @@ import { intersect, lazy, number, object, parser, string, union, type GenericSchema } from 'valibot'; -import { claimSchema } from './Claim.js'; +import { claimSchema } from './Claim'; import { creativeWorkStatusSchema, type CreativeWorkStatusInput, type CreativeWorkStatusOutput -} from './CreativeWorkStatus.js'; -import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm.js'; -import { personSchema, type PersonInput, type PersonOutput } from './Person.js'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +} from './CreativeWorkStatus'; +import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm'; +import { personSchema, type PersonInput, type PersonOutput } from './Person'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { softwareSourceCodeSchema, type SoftwareSourceCodeInput, type SoftwareSourceCodeOutput -} from './SoftwareSourceCode.js'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; +} from './SoftwareSourceCode'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** * The most generic kind of creative work, including books, movies, photographs, software programs, etc. diff --git a/packages/core-json-ld/src/orgSchema/DefinedTerm.ts b/packages/core-json-ld/src/orgSchema/DefinedTerm.ts index db63cfc65f..3e5e2d5fe8 100644 --- a/packages/core-json-ld/src/orgSchema/DefinedTerm.ts +++ b/packages/core-json-ld/src/orgSchema/DefinedTerm.ts @@ -1,6 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; /** * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term. diff --git a/packages/core-json-ld/src/orgSchema/Person.ts b/packages/core-json-ld/src/orgSchema/Person.ts index c4e1d02208..d54a32e551 100644 --- a/packages/core-json-ld/src/orgSchema/Person.ts +++ b/packages/core-json-ld/src/orgSchema/Person.ts @@ -1,6 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; /** * A person (alive, dead, undead, or fictional). diff --git a/packages/core-json-ld/src/orgSchema/Project.parseProject.spec.ts b/packages/core-json-ld/src/orgSchema/Project.parseProject.spec.ts index 81fc1f1875..dca70ad01e 100644 --- a/packages/core-json-ld/src/orgSchema/Project.parseProject.spec.ts +++ b/packages/core-json-ld/src/orgSchema/Project.parseProject.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { parseProject, projectSchema } from './Project.js'; +import { parseProject, projectSchema } from './Project'; const projectTemplate = parse(projectSchema, {}); @@ -14,7 +14,7 @@ describe('Project', () => { }) ).toEqual({ ...projectTemplate, - '@type': 'Project', + '@type': ['Project'], name: ['Microsoft'], slogan: ['Empower every person and every organization on the planet to achieve more.'] }); diff --git a/packages/core-json-ld/src/orgSchema/Project.ts b/packages/core-json-ld/src/orgSchema/Project.ts index cc482238d0..5e47ad4885 100644 --- a/packages/core-json-ld/src/orgSchema/Project.ts +++ b/packages/core-json-ld/src/orgSchema/Project.ts @@ -1,6 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures. diff --git a/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts b/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts index 8757685fc9..25032710e2 100644 --- a/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts +++ b/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts @@ -1,6 +1,6 @@ import { intersect, lazy, object, string, type GenericSchema } from 'valibot'; -import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork.js'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; /** * Computer programming source code. Example: Full (compile ready) solutions, code snippet samples, scripts, templates. diff --git a/packages/core-json-ld/src/orgSchema/Thing.parseThing.spec.ts b/packages/core-json-ld/src/orgSchema/Thing.parseThing.spec.ts index 1ef4dfea74..62b839dcae 100644 --- a/packages/core-json-ld/src/orgSchema/Thing.parseThing.spec.ts +++ b/packages/core-json-ld/src/orgSchema/Thing.parseThing.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { thingSchema } from './Thing.js'; +import { thingSchema } from './Thing'; const thingTemplate = parse(thingSchema, {}); @@ -13,7 +13,7 @@ describe('Thing', () => { }) ).toEqual({ ...thingTemplate, - '@type': 'Thing', + '@type': ['Thing'], name: ['John Doe'] }); }); @@ -26,7 +26,7 @@ describe('Thing', () => { }) ).toEqual({ ...thingTemplate, - '@type': 'Unknown', + '@type': ['Unknown'], name: ['John Doe'] }); }); @@ -39,7 +39,7 @@ describe('Thing', () => { }) ).toEqual({ ...thingTemplate, - '@type': 'Thing' + '@type': ['Thing'] }); }); @@ -51,8 +51,21 @@ describe('Thing', () => { }) ).toEqual({ ...thingTemplate, - '@type': 'Thing', + '@type': ['Thing'], name: [] }); }); + + test('should parse multiple types', () => { + expect( + parse(thingSchema, { + '@type': ['Person', 'Thing'], + name: 'John Doe' + }) + ).toEqual({ + ...thingTemplate, + '@type': ['Person', 'Thing'], + name: ['John Doe'] + }); + }); }); diff --git a/packages/core-json-ld/src/orgSchema/Thing.ts b/packages/core-json-ld/src/orgSchema/Thing.ts index 12adfc0500..f3fdf2e942 100644 --- a/packages/core-json-ld/src/orgSchema/Thing.ts +++ b/packages/core-json-ld/src/orgSchema/Thing.ts @@ -1,7 +1,7 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { actionSchema, type ActionInput, type ActionOutput } from './Action.js'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; -import { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from '../JSONLinkedData.js'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from '../JSONLinkedData'; /** * The most generic type of item. diff --git a/packages/core-json-ld/src/orgSchema/UserReview.ts b/packages/core-json-ld/src/orgSchema/UserReview.ts index 15035b864d..05a152a388 100644 --- a/packages/core-json-ld/src/orgSchema/UserReview.ts +++ b/packages/core-json-ld/src/orgSchema/UserReview.ts @@ -1,6 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing.js'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** * A review created by an end-user (e.g. consumer, purchaser, attendee etc.), in contrast with [`CriticReview`](https://schema.org/CriticReview). diff --git a/packages/core-json-ld/src/orgSchema/VoteAction.spec.ts b/packages/core-json-ld/src/orgSchema/VoteAction.spec.ts index 821277e67c..c6daceddb2 100644 --- a/packages/core-json-ld/src/orgSchema/VoteAction.spec.ts +++ b/packages/core-json-ld/src/orgSchema/VoteAction.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from '@jest/globals'; import { parse } from 'valibot'; -import { parseVoteAction, voteActionSchema } from './VoteAction.js'; +import { parseVoteAction, voteActionSchema } from './VoteAction'; const voteActionTemplate = parse(voteActionSchema, {}); @@ -14,7 +14,7 @@ describe('VoteAction', () => { }) ).toEqual({ ...voteActionTemplate, - '@type': 'VoteAction', + '@type': ['VoteAction'], actionOption: ['upvote'] })); @@ -28,7 +28,7 @@ describe('VoteAction', () => { }) ).toEqual({ ...voteActionTemplate, - '@type': 'Action', + '@type': ['Action'], actionOption: [] }); } catch (err) { diff --git a/packages/core-json-ld/src/orgSchema/VoteAction.ts b/packages/core-json-ld/src/orgSchema/VoteAction.ts index 76c5813d43..e462799100 100644 --- a/packages/core-json-ld/src/orgSchema/VoteAction.ts +++ b/packages/core-json-ld/src/orgSchema/VoteAction.ts @@ -1,6 +1,6 @@ import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { actionSchema, type ActionInput, type ActionOutput } from './Action.js'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty.js'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. From a60d0160177c689b96418689c2157ccb4fc4334a Mon Sep 17 00:00:00 2001 From: William Wong Date: Sat, 2 May 2026 02:09:05 +0000 Subject: [PATCH 106/108] Fix typing --- .../providers/private/ActivityFeedbackContext.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/component/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts b/packages/component/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts index 6fa2a9b349..f19a8c9468 100644 --- a/packages/component/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts +++ b/packages/component/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts @@ -1,4 +1,5 @@ -import { type OrgSchemaAction, type WebChatActivity } from 'botframework-webchat-core/org-schema.js'; +import { type WebChatActivity } from 'botframework-webchat-core'; +import { type OrgSchemaAction } from 'botframework-webchat-core/org-schema.js'; import { createContext, type Dispatch, type SetStateAction } from 'react'; type ActivityFeedbackContextType = Readonly<{ From de5145f04f3f87f06596fdffc957e2e518092ec5 Mon Sep 17 00:00:00 2001 From: William Wong Date: Tue, 5 May 2026 01:22:06 +0000 Subject: [PATCH 107/108] Unfreeze and refreeze --- package-lock.json | 18 ++++- packages/core-json-ld/package.json | 3 +- packages/core-json-ld/src/index.ts | 1 + packages/core-json-ld/src/orgSchema/Action.ts | 31 +++++--- packages/core-json-ld/src/orgSchema/Claim.ts | 27 ++++--- .../src/orgSchema/CreativeWork.ts | 57 +++++++++----- .../core-json-ld/src/orgSchema/DefinedTerm.ts | 27 ++++--- packages/core-json-ld/src/orgSchema/Person.ts | 29 +++++--- .../core-json-ld/src/orgSchema/Project.ts | 23 ++++-- .../src/orgSchema/SoftwareSourceCode.ts | 25 +++++-- packages/core-json-ld/src/orgSchema/Thing.ts | 37 ++++++---- .../core-json-ld/src/orgSchema/UserReview.ts | 23 ++++-- .../core-json-ld/src/orgSchema/VoteAction.ts | 25 +++++-- .../src/private/deepFreeze.spec.ts | 74 +++++++++++++++++++ .../core-json-ld/src/private/deepFreeze.ts | 43 +++++++++++ .../src/private/jsonLinkedDataProperty.ts | 8 +- 16 files changed, 342 insertions(+), 109 deletions(-) create mode 100644 packages/core-json-ld/src/private/deepFreeze.spec.ts create mode 100644 packages/core-json-ld/src/private/deepFreeze.ts diff --git a/package-lock.json b/package-lock.json index d7fbaef9a2..e364c8ecba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21841,7 +21841,23 @@ "version": "0.0.0-0", "license": "MIT", "devDependencies": { - "@msinternal/botframework-webchat-tsconfig": "^0.0.0-0" + "@msinternal/botframework-webchat-tsconfig": "^0.0.0-0", + "type-fest": "^5.6.0" + } + }, + "packages/core-json-ld/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", + "dev": true, + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "packages/core/node_modules/mime": { diff --git a/packages/core-json-ld/package.json b/packages/core-json-ld/package.json index b63bc86049..09c3c7505e 100644 --- a/packages/core-json-ld/package.json +++ b/packages/core-json-ld/package.json @@ -52,6 +52,7 @@ "@msinternal/botframework-webchat-tsconfig": "development" }, "devDependencies": { - "@msinternal/botframework-webchat-tsconfig": "^0.0.0-0" + "@msinternal/botframework-webchat-tsconfig": "^0.0.0-0", + "type-fest": "^5.6.0" } } diff --git a/packages/core-json-ld/src/index.ts b/packages/core-json-ld/src/index.ts index 11a1868eae..14728a57d7 100644 --- a/packages/core-json-ld/src/index.ts +++ b/packages/core-json-ld/src/index.ts @@ -47,3 +47,4 @@ export { export { default as isOfType } from './isOfType.js'; export { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from './JSONLinkedData.js'; +export { default as deepFreeze } from './private/deepFreeze.js'; diff --git a/packages/core-json-ld/src/orgSchema/Action.ts b/packages/core-json-ld/src/orgSchema/Action.ts index 90d3fd2118..28d0a93eec 100644 --- a/packages/core-json-ld/src/orgSchema/Action.ts +++ b/packages/core-json-ld/src/orgSchema/Action.ts @@ -1,6 +1,6 @@ -import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; +import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; import { userReviewSchema, type UserReviewInput, type UserReviewOutput } from './UserReview'; @@ -75,15 +75,24 @@ type ActionOutput = ThingOutput & { readonly result: readonly (ThingOutput | UserReviewOutput)[]; }; -const actionSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - object({ - actionOption: jsonLinkedDataProperty(string()), - actionStatus: jsonLinkedDataProperty(actionStatusSchema), - provider: jsonLinkedDataProperty(lazy(() => projectSchema)), - result: jsonLinkedDataProperty(userReviewSchema) - }) -]); +const actionSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => thingSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + actionOption: jsonLinkedDataProperty(string()), + actionStatus: jsonLinkedDataProperty(actionStatusSchema), + provider: jsonLinkedDataProperty(lazy(() => projectSchema)), + result: jsonLinkedDataProperty(userReviewSchema) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); /** @deprecated Use Valibot.parse(actionSchema) instead. Will be removed on or after 2028-04-23. */ const parseAction: (action: ActionInput) => ActionOutput = parser(actionSchema); diff --git a/packages/core-json-ld/src/orgSchema/Claim.ts b/packages/core-json-ld/src/orgSchema/Claim.ts index 4b0f6ddf8e..2c3730b884 100644 --- a/packages/core-json-ld/src/orgSchema/Claim.ts +++ b/packages/core-json-ld/src/orgSchema/Claim.ts @@ -1,7 +1,7 @@ -import { intersect, lazy, object, parser, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, pipe, readonly, transform, type GenericSchema } from 'valibot'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; /** * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews. @@ -53,13 +53,22 @@ type ClaimOutput = CreativeWorkOutput & { readonly claimInterpreter: readonly ProjectOutput[]; }; -const claimSchema: GenericSchema = intersect([ - lazy(() => creativeWorkSchema), - object({ - appearance: jsonLinkedDataProperty(lazy(() => creativeWorkSchema)), - claimInterpreter: jsonLinkedDataProperty(lazy(() => projectSchema)) - }) -]); +const claimSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => creativeWorkSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + appearance: jsonLinkedDataProperty(lazy(() => creativeWorkSchema)), + claimInterpreter: jsonLinkedDataProperty(lazy(() => projectSchema)) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); /** @deprecated Use Valibot.parse(claimSchema) instead. Will be removed on or after 2028-04-23. */ const parseClaim: (claim: ClaimInput) => ClaimOutput = parser(claimSchema); diff --git a/packages/core-json-ld/src/orgSchema/CreativeWork.ts b/packages/core-json-ld/src/orgSchema/CreativeWork.ts index f0c7b31afd..4e5d8dcf55 100644 --- a/packages/core-json-ld/src/orgSchema/CreativeWork.ts +++ b/packages/core-json-ld/src/orgSchema/CreativeWork.ts @@ -1,4 +1,17 @@ -import { intersect, lazy, number, object, parser, string, union, type GenericSchema } from 'valibot'; +import { + intersect, + lazy, + number, + object, + parser, + pipe, + readonly, + string, + transform, + union, + type GenericSchema +} from 'valibot'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { claimSchema } from './Claim'; import { creativeWorkStatusSchema, @@ -7,7 +20,6 @@ import { } from './CreativeWorkStatus'; import { definedTermSchema, type DefinedTermInput, type DefinedTermOutput } from './DefinedTerm'; import { personSchema, type PersonInput, type PersonOutput } from './Person'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { softwareSourceCodeSchema, type SoftwareSourceCodeInput, @@ -187,22 +199,31 @@ let creativeWorkSchema_: GenericSchema; // This is for cyclic dependency. // eslint-disable-next-line prefer-const -creativeWorkSchema_ = intersect([ - lazy(() => thingSchema), - object({ - abstract: jsonLinkedDataProperty(string()), - author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), - citation: jsonLinkedDataProperty(lazy(() => claimSchema)), - creativeWorkStatus: jsonLinkedDataProperty(creativeWorkStatusSchema), - isBasedOn: jsonLinkedDataProperty(lazy(() => softwareSourceCodeSchema)), - isPartOf: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), - keywords: jsonLinkedDataProperty(union([lazy(() => definedTermSchema), string()])), - pattern: jsonLinkedDataProperty(lazy(() => definedTermSchema)), - position: jsonLinkedDataProperty(union([number(), string()])), - text: jsonLinkedDataProperty(string()), - usageInfo: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)) - }) -]); +creativeWorkSchema_ = pipe( + intersect([ + pipe( + lazy(() => thingSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + abstract: jsonLinkedDataProperty(string()), + author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), + citation: jsonLinkedDataProperty(lazy(() => claimSchema)), + creativeWorkStatus: jsonLinkedDataProperty(creativeWorkStatusSchema), + isBasedOn: jsonLinkedDataProperty(lazy(() => softwareSourceCodeSchema)), + isPartOf: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), + keywords: jsonLinkedDataProperty(union([lazy(() => definedTermSchema), string()])), + pattern: jsonLinkedDataProperty(lazy(() => definedTermSchema)), + position: jsonLinkedDataProperty(union([number(), string()])), + text: jsonLinkedDataProperty(string()), + usageInfo: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); // Constantize here, so we are exporting a const than a let. const creativeWorkSchema = creativeWorkSchema_; diff --git a/packages/core-json-ld/src/orgSchema/DefinedTerm.ts b/packages/core-json-ld/src/orgSchema/DefinedTerm.ts index 3e5e2d5fe8..147047bcac 100644 --- a/packages/core-json-ld/src/orgSchema/DefinedTerm.ts +++ b/packages/core-json-ld/src/orgSchema/DefinedTerm.ts @@ -1,6 +1,6 @@ -import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term. @@ -48,13 +48,22 @@ type DefinedTermOutput = ThingOutput & { readonly termCode: readonly string[]; }; -const definedTermSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - object({ - inDefinedTermSet: jsonLinkedDataProperty(string()), - termCode: jsonLinkedDataProperty(string()) - }) -]); +const definedTermSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => thingSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + inDefinedTermSet: jsonLinkedDataProperty(string()), + termCode: jsonLinkedDataProperty(string()) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); /** @deprecated Use Valibot.parse(definedTermSchema) instead. Will be removed on or after 2028-04-23. */ const parseDefinedTerm: (definedTerm: DefinedTermInput) => DefinedTermOutput = parser(definedTermSchema); diff --git a/packages/core-json-ld/src/orgSchema/Person.ts b/packages/core-json-ld/src/orgSchema/Person.ts index d54a32e551..1fc76fdf7e 100644 --- a/packages/core-json-ld/src/orgSchema/Person.ts +++ b/packages/core-json-ld/src/orgSchema/Person.ts @@ -1,6 +1,6 @@ -import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; +import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; /** * A person (alive, dead, undead, or fictional). @@ -38,14 +38,23 @@ type PersonOutput = ThingOutput & { readonly image: readonly string[]; }; -const personSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - object({ - description: jsonLinkedDataProperty(string()), - image: jsonLinkedDataProperty(string()), - name: jsonLinkedDataProperty(string()) - }) -]); +const personSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => thingSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + description: jsonLinkedDataProperty(string()), + image: jsonLinkedDataProperty(string()), + name: jsonLinkedDataProperty(string()) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); /** @deprecated Use Valibot.parse(personSchema) instead. Will be removed on or after 2028-04-23. */ const parsePerson: (person: PersonInput) => PersonOutput = parser(personSchema); diff --git a/packages/core-json-ld/src/orgSchema/Project.ts b/packages/core-json-ld/src/orgSchema/Project.ts index 5e47ad4885..be648b8ca2 100644 --- a/packages/core-json-ld/src/orgSchema/Project.ts +++ b/packages/core-json-ld/src/orgSchema/Project.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -34,12 +34,21 @@ type ProjectOutput = ThingOutput & { readonly slogan: readonly string[]; }; -const projectSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - object({ - slogan: jsonLinkedDataProperty(string()) - }) -]); +const projectSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => thingSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + slogan: jsonLinkedDataProperty(string()) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); /** @deprecated Use Valibot.parse(projectSchema) instead. Will be removed on or after 2028-04-23. */ const parseProject: (project: ProjectInput) => ProjectOutput = parser(projectSchema); diff --git a/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts b/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts index 25032710e2..c1810c9a1b 100644 --- a/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts +++ b/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts @@ -1,6 +1,6 @@ -import { intersect, lazy, object, string, type GenericSchema } from 'valibot'; -import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; +import { intersect, lazy, object, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; /** * Computer programming source code. Example: Full (compile ready) solutions, code snippet samples, scripts, templates. @@ -34,11 +34,20 @@ type SoftwareSourceCodeOutput = CreativeWorkOutput & { readonly programmingLanguage: readonly string[]; }; -const softwareSourceCodeSchema: GenericSchema = intersect([ - lazy(() => creativeWorkSchema), - object({ - programmingLanguage: jsonLinkedDataProperty(string()) - }) -]); +const softwareSourceCodeSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => creativeWorkSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + programmingLanguage: jsonLinkedDataProperty(string()) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); export { softwareSourceCodeSchema, type SoftwareSourceCodeInput, type SoftwareSourceCodeOutput }; diff --git a/packages/core-json-ld/src/orgSchema/Thing.ts b/packages/core-json-ld/src/orgSchema/Thing.ts index f3fdf2e942..26c2658056 100644 --- a/packages/core-json-ld/src/orgSchema/Thing.ts +++ b/packages/core-json-ld/src/orgSchema/Thing.ts @@ -1,7 +1,7 @@ -import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { actionSchema, type ActionInput, type ActionOutput } from './Action'; -import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; import { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from '../JSONLinkedData'; +import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action'; /** * The most generic type of item. @@ -105,17 +105,26 @@ type ThingOutput = JSONLinkedDataOutput & { readonly url: readonly string[]; }; -const thingSchema: GenericSchema = intersect([ - lazy(() => jsonLinkedDataSchema), - object({ - additionalType: jsonLinkedDataProperty(string()), - alternateName: jsonLinkedDataProperty(string()), - description: jsonLinkedDataProperty(string()), - name: jsonLinkedDataProperty(string()), - potentialAction: jsonLinkedDataProperty(lazy(() => actionSchema)), - url: jsonLinkedDataProperty(string()) - }) -]); +const thingSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => jsonLinkedDataSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + additionalType: jsonLinkedDataProperty(string()), + alternateName: jsonLinkedDataProperty(string()), + description: jsonLinkedDataProperty(string()), + name: jsonLinkedDataProperty(string()), + potentialAction: jsonLinkedDataProperty(lazy(() => actionSchema)), + url: jsonLinkedDataProperty(string()) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); /** @deprecated Use Valibot.parse(thingSchema) instead. Will be removed on or after 2028-04-23. */ const parseThing: (thing: ThingInput) => ThingOutput = parser(thingSchema); diff --git a/packages/core-json-ld/src/orgSchema/UserReview.ts b/packages/core-json-ld/src/orgSchema/UserReview.ts index 05a152a388..c4103e48f3 100644 --- a/packages/core-json-ld/src/orgSchema/UserReview.ts +++ b/packages/core-json-ld/src/orgSchema/UserReview.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -30,12 +30,21 @@ type UserReviewOutput = ThingOutput & { readonly reviewAspect: readonly string[]; }; -const userReviewSchema: GenericSchema = intersect([ - lazy(() => thingSchema), - object({ - reviewAspect: jsonLinkedDataProperty(string()) - }) -]); +const userReviewSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => thingSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + reviewAspect: jsonLinkedDataProperty(string()) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); /** @deprecated Use Valibot.parse(userReviewSchema) instead. Will be removed on or after 2028-04-23. */ const parseUserReview: (userReview: UserReviewInput) => UserReviewOutput = parser(userReviewSchema); diff --git a/packages/core-json-ld/src/orgSchema/VoteAction.ts b/packages/core-json-ld/src/orgSchema/VoteAction.ts index e462799100..9e8cfff390 100644 --- a/packages/core-json-ld/src/orgSchema/VoteAction.ts +++ b/packages/core-json-ld/src/orgSchema/VoteAction.ts @@ -1,6 +1,6 @@ -import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; -import { actionSchema, type ActionInput, type ActionOutput } from './Action'; +import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; +import { actionSchema, type ActionInput, type ActionOutput } from './Action'; /** * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role. @@ -38,12 +38,21 @@ type VoteActionOutput = ActionOutput & { readonly actionOption: readonly string[]; }; -const voteActionSchema: GenericSchema = intersect([ - lazy(() => actionSchema), - object({ - actionOption: jsonLinkedDataProperty(string()) - }) -]); +const voteActionSchema: GenericSchema = pipe( + intersect([ + pipe( + lazy(() => actionSchema), + // TODO: `intersect()` seems doesn't like frozen objects. + // Related to https://github.com/open-circle/valibot/pull/1463. + transform(value => ({ ...value })) + ), + object({ + actionOption: jsonLinkedDataProperty(string()) + }) + ]), + readonly(), + transform(value => Object.freeze({ ...value })) +); /** @deprecated Use Valibot.parse(voteActionSchema) instead. Will be removed on or after 2028-04-23. */ const parseVoteAction: (voteAction: VoteActionInput) => VoteActionOutput = parser(voteActionSchema); diff --git a/packages/core-json-ld/src/private/deepFreeze.spec.ts b/packages/core-json-ld/src/private/deepFreeze.spec.ts new file mode 100644 index 0000000000..13ac52ecbd --- /dev/null +++ b/packages/core-json-ld/src/private/deepFreeze.spec.ts @@ -0,0 +1,74 @@ +import { expect, test } from '@jest/globals'; +import deepFreeze from './deepFreeze'; + +test('should freeze object', () => { + const input = { abc: 123 }; + + expect(Object.isFrozen(deepFreeze(input))).toBe(true); +}); + +test('should freeze array', () => { + const input = [123]; + + expect(Object.isFrozen(deepFreeze(input))).toBe(true); +}); + +test('should freeze nested object', () => { + const input = { abc: { value: 123 } }; + const output = deepFreeze(input); + + expect(Object.isFrozen(output)).toBe(true); + expect(Object.isFrozen(output.abc)).toBe(true); +}); + +test('should freeze nested array', () => { + const input = [{ value: 123 }]; + const output = deepFreeze(input); + + expect(Object.isFrozen(output)).toBe(true); + expect(Object.isFrozen(output[0])).toBe(true); +}); + +test('should freeze sparse array', () => { + const input = []; + + input[100] = 789; + + Object.defineProperty(input, 0, { + get() { + // Sparse array, should skip iterating sparse slots. + throw new Error('Should not iterate every item in the sparse array'); + } + }); + + const output = deepFreeze(input); + + expect(Object.isFrozen(output)).toBe(true); + expect(output[100]).toBe(789); +}); + +test('should throw away invalid index', () => { + const input = []; + + input[-1] = 123; + + const output = deepFreeze(input); + + expect(Object.isFrozen(output)).toBe(true); + expect(output[-1]).toBeUndefined(); +}); + +test('should handle reserved keywords without prototype pollution', () => { + const input = { ['__proto__']: { polluted: true }, prototype: undefined }; + const output = deepFreeze(input); + + expect(Object.isFrozen(output)).toBe(true); + expect(Object.getPrototypeOf(output)).toBe(Object.prototype); + expect(({} as { polluted?: boolean }).polluted).toBeUndefined(); +}); + +test('should handle primitive values', () => { + expect(deepFreeze('abc')).toBe('abc'); + expect(deepFreeze(1)).toBe(1); + expect(deepFreeze(true)).toBe(true); +}); diff --git a/packages/core-json-ld/src/private/deepFreeze.ts b/packages/core-json-ld/src/private/deepFreeze.ts new file mode 100644 index 0000000000..8c7958cffb --- /dev/null +++ b/packages/core-json-ld/src/private/deepFreeze.ts @@ -0,0 +1,43 @@ +import type { ReadonlyDeep } from 'type-fest'; + +// Flywheel objects to reduce memory footprint. +const EMPTY_ARRAY = Object.freeze([]); +const EMPTY_OBJECT = Object.freeze({}); + +export default function deepFreeze(value: T): ReadonlyDeep { + if (value && value.constructor === Object) { + const entries = Object.entries(value); + + if (!entries.length) { + // @ts-expect-error TypeScript does not understand ReadonlyDeep + return EMPTY_OBJECT; + } + + const nextEntries: [string, unknown][] = []; + + for (const [key, item] of entries) { + nextEntries.push([key, deepFreeze(item)]); + } + + // @ts-expect-error TypeScript does not understand ReadonlyDeep + return Object.freeze(Object.fromEntries(nextEntries.entries())); + } else if (Array.isArray(value)) { + if (!value.length) { + // @ts-expect-error TypeScript does not understand value.length === 0 means never[]. + return EMPTY_ARRAY; + } + + const nextArray = []; + + // value.entries() does not do sparse iteration. + for (const index in value) { + nextArray[+index] = deepFreeze(value[+index]); + } + + // @ts-expect-error TypeScript does not understand ReadonlyDeep + return Object.freeze(nextArray); + } + + // @ts-expect-error TypeScript does not understand ReadonlyDeep + return value; +} diff --git a/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts b/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts index fb02e977fd..7b20f2a033 100644 --- a/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts +++ b/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts @@ -37,7 +37,7 @@ export default function jsonLinkedDataProperty { if (typeof value === 'undefined') { @@ -62,11 +62,7 @@ export default function jsonLinkedDataProperty Date: Tue, 5 May 2026 04:25:00 +0000 Subject: [PATCH 108/108] Revert --- packages/core-json-ld/src/orgSchema/Action.ts | 29 ++++------ packages/core-json-ld/src/orgSchema/Claim.ts | 25 +++------ .../src/orgSchema/CreativeWork.ts | 55 ++++++------------- .../core-json-ld/src/orgSchema/DefinedTerm.ts | 25 +++------ packages/core-json-ld/src/orgSchema/Person.ts | 27 +++------ .../core-json-ld/src/orgSchema/Project.ts | 23 +++----- .../src/orgSchema/SoftwareSourceCode.ts | 23 +++----- packages/core-json-ld/src/orgSchema/Thing.ts | 33 ++++------- .../core-json-ld/src/orgSchema/UserReview.ts | 23 +++----- .../core-json-ld/src/orgSchema/VoteAction.ts | 23 +++----- .../src/private/jsonLinkedDataProperty.ts | 27 ++++----- 11 files changed, 106 insertions(+), 207 deletions(-) diff --git a/packages/core-json-ld/src/orgSchema/Action.ts b/packages/core-json-ld/src/orgSchema/Action.ts index 28d0a93eec..3710039c24 100644 --- a/packages/core-json-ld/src/orgSchema/Action.ts +++ b/packages/core-json-ld/src/orgSchema/Action.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { actionStatusSchema, type ActionStatusInput, type ActionStatusOutput } from './ActionStatus'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; @@ -75,24 +75,15 @@ type ActionOutput = ThingOutput & { readonly result: readonly (ThingOutput | UserReviewOutput)[]; }; -const actionSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => thingSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - actionOption: jsonLinkedDataProperty(string()), - actionStatus: jsonLinkedDataProperty(actionStatusSchema), - provider: jsonLinkedDataProperty(lazy(() => projectSchema)), - result: jsonLinkedDataProperty(userReviewSchema) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const actionSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object({ + actionOption: jsonLinkedDataProperty(string()), + actionStatus: jsonLinkedDataProperty(actionStatusSchema), + provider: jsonLinkedDataProperty(lazy(() => projectSchema)), + result: jsonLinkedDataProperty(userReviewSchema) + }) +]); /** @deprecated Use Valibot.parse(actionSchema) instead. Will be removed on or after 2028-04-23. */ const parseAction: (action: ActionInput) => ActionOutput = parser(actionSchema); diff --git a/packages/core-json-ld/src/orgSchema/Claim.ts b/packages/core-json-ld/src/orgSchema/Claim.ts index 2c3730b884..d6597c641e 100644 --- a/packages/core-json-ld/src/orgSchema/Claim.ts +++ b/packages/core-json-ld/src/orgSchema/Claim.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, pipe, readonly, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; import { projectSchema, type ProjectInput, type ProjectOutput } from './Project'; @@ -53,22 +53,13 @@ type ClaimOutput = CreativeWorkOutput & { readonly claimInterpreter: readonly ProjectOutput[]; }; -const claimSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => creativeWorkSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - appearance: jsonLinkedDataProperty(lazy(() => creativeWorkSchema)), - claimInterpreter: jsonLinkedDataProperty(lazy(() => projectSchema)) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const claimSchema: GenericSchema = intersect([ + lazy(() => creativeWorkSchema), + object({ + appearance: jsonLinkedDataProperty(lazy(() => creativeWorkSchema)), + claimInterpreter: jsonLinkedDataProperty(lazy(() => projectSchema)) + }) +]); /** @deprecated Use Valibot.parse(claimSchema) instead. Will be removed on or after 2028-04-23. */ const parseClaim: (claim: ClaimInput) => ClaimOutput = parser(claimSchema); diff --git a/packages/core-json-ld/src/orgSchema/CreativeWork.ts b/packages/core-json-ld/src/orgSchema/CreativeWork.ts index 4e5d8dcf55..e671a792ad 100644 --- a/packages/core-json-ld/src/orgSchema/CreativeWork.ts +++ b/packages/core-json-ld/src/orgSchema/CreativeWork.ts @@ -1,16 +1,4 @@ -import { - intersect, - lazy, - number, - object, - parser, - pipe, - readonly, - string, - transform, - union, - type GenericSchema -} from 'valibot'; +import { intersect, lazy, number, object, parser, string, union, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { claimSchema } from './Claim'; import { @@ -199,31 +187,22 @@ let creativeWorkSchema_: GenericSchema; // This is for cyclic dependency. // eslint-disable-next-line prefer-const -creativeWorkSchema_ = pipe( - intersect([ - pipe( - lazy(() => thingSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - abstract: jsonLinkedDataProperty(string()), - author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), - citation: jsonLinkedDataProperty(lazy(() => claimSchema)), - creativeWorkStatus: jsonLinkedDataProperty(creativeWorkStatusSchema), - isBasedOn: jsonLinkedDataProperty(lazy(() => softwareSourceCodeSchema)), - isPartOf: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), - keywords: jsonLinkedDataProperty(union([lazy(() => definedTermSchema), string()])), - pattern: jsonLinkedDataProperty(lazy(() => definedTermSchema)), - position: jsonLinkedDataProperty(union([number(), string()])), - text: jsonLinkedDataProperty(string()), - usageInfo: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +creativeWorkSchema_ = intersect([ + lazy(() => thingSchema), + object({ + abstract: jsonLinkedDataProperty(string()), + author: jsonLinkedDataProperty(union([lazy(() => personSchema), string()])), + citation: jsonLinkedDataProperty(lazy(() => claimSchema)), + creativeWorkStatus: jsonLinkedDataProperty(creativeWorkStatusSchema), + isBasedOn: jsonLinkedDataProperty(lazy(() => softwareSourceCodeSchema)), + isPartOf: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)), + keywords: jsonLinkedDataProperty(union([lazy(() => definedTermSchema), string()])), + pattern: jsonLinkedDataProperty(lazy(() => definedTermSchema)), + position: jsonLinkedDataProperty(union([number(), string()])), + text: jsonLinkedDataProperty(string()), + usageInfo: jsonLinkedDataProperty(lazy(() => creativeWorkSchema_)) + }) +]); // Constantize here, so we are exporting a const than a let. const creativeWorkSchema = creativeWorkSchema_; diff --git a/packages/core-json-ld/src/orgSchema/DefinedTerm.ts b/packages/core-json-ld/src/orgSchema/DefinedTerm.ts index 147047bcac..58064101ed 100644 --- a/packages/core-json-ld/src/orgSchema/DefinedTerm.ts +++ b/packages/core-json-ld/src/orgSchema/DefinedTerm.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -48,22 +48,13 @@ type DefinedTermOutput = ThingOutput & { readonly termCode: readonly string[]; }; -const definedTermSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => thingSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - inDefinedTermSet: jsonLinkedDataProperty(string()), - termCode: jsonLinkedDataProperty(string()) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const definedTermSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object({ + inDefinedTermSet: jsonLinkedDataProperty(string()), + termCode: jsonLinkedDataProperty(string()) + }) +]); /** @deprecated Use Valibot.parse(definedTermSchema) instead. Will be removed on or after 2028-04-23. */ const parseDefinedTerm: (definedTerm: DefinedTermInput) => DefinedTermOutput = parser(definedTermSchema); diff --git a/packages/core-json-ld/src/orgSchema/Person.ts b/packages/core-json-ld/src/orgSchema/Person.ts index 1fc76fdf7e..79e2f89444 100644 --- a/packages/core-json-ld/src/orgSchema/Person.ts +++ b/packages/core-json-ld/src/orgSchema/Person.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -38,23 +38,14 @@ type PersonOutput = ThingOutput & { readonly image: readonly string[]; }; -const personSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => thingSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - description: jsonLinkedDataProperty(string()), - image: jsonLinkedDataProperty(string()), - name: jsonLinkedDataProperty(string()) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const personSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object({ + description: jsonLinkedDataProperty(string()), + image: jsonLinkedDataProperty(string()), + name: jsonLinkedDataProperty(string()) + }) +]); /** @deprecated Use Valibot.parse(personSchema) instead. Will be removed on or after 2028-04-23. */ const parsePerson: (person: PersonInput) => PersonOutput = parser(personSchema); diff --git a/packages/core-json-ld/src/orgSchema/Project.ts b/packages/core-json-ld/src/orgSchema/Project.ts index be648b8ca2..5e47ad4885 100644 --- a/packages/core-json-ld/src/orgSchema/Project.ts +++ b/packages/core-json-ld/src/orgSchema/Project.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -34,21 +34,12 @@ type ProjectOutput = ThingOutput & { readonly slogan: readonly string[]; }; -const projectSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => thingSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - slogan: jsonLinkedDataProperty(string()) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const projectSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object({ + slogan: jsonLinkedDataProperty(string()) + }) +]); /** @deprecated Use Valibot.parse(projectSchema) instead. Will be removed on or after 2028-04-23. */ const parseProject: (project: ProjectInput) => ProjectOutput = parser(projectSchema); diff --git a/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts b/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts index c1810c9a1b..859a0e0c1e 100644 --- a/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts +++ b/packages/core-json-ld/src/orgSchema/SoftwareSourceCode.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { creativeWorkSchema, type CreativeWorkInput, type CreativeWorkOutput } from './CreativeWork'; @@ -34,20 +34,11 @@ type SoftwareSourceCodeOutput = CreativeWorkOutput & { readonly programmingLanguage: readonly string[]; }; -const softwareSourceCodeSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => creativeWorkSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - programmingLanguage: jsonLinkedDataProperty(string()) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const softwareSourceCodeSchema: GenericSchema = intersect([ + lazy(() => creativeWorkSchema), + object({ + programmingLanguage: jsonLinkedDataProperty(string()) + }) +]); export { softwareSourceCodeSchema, type SoftwareSourceCodeInput, type SoftwareSourceCodeOutput }; diff --git a/packages/core-json-ld/src/orgSchema/Thing.ts b/packages/core-json-ld/src/orgSchema/Thing.ts index 26c2658056..1cfd2b80a7 100644 --- a/packages/core-json-ld/src/orgSchema/Thing.ts +++ b/packages/core-json-ld/src/orgSchema/Thing.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import { jsonLinkedDataSchema, type JSONLinkedDataInput, type JSONLinkedDataOutput } from '../JSONLinkedData'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; @@ -105,26 +105,17 @@ type ThingOutput = JSONLinkedDataOutput & { readonly url: readonly string[]; }; -const thingSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => jsonLinkedDataSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - additionalType: jsonLinkedDataProperty(string()), - alternateName: jsonLinkedDataProperty(string()), - description: jsonLinkedDataProperty(string()), - name: jsonLinkedDataProperty(string()), - potentialAction: jsonLinkedDataProperty(lazy(() => actionSchema)), - url: jsonLinkedDataProperty(string()) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const thingSchema: GenericSchema = intersect([ + lazy(() => jsonLinkedDataSchema), + object({ + additionalType: jsonLinkedDataProperty(string()), + alternateName: jsonLinkedDataProperty(string()), + description: jsonLinkedDataProperty(string()), + name: jsonLinkedDataProperty(string()), + potentialAction: jsonLinkedDataProperty(lazy(() => actionSchema)), + url: jsonLinkedDataProperty(string()) + }) +]); /** @deprecated Use Valibot.parse(thingSchema) instead. Will be removed on or after 2028-04-23. */ const parseThing: (thing: ThingInput) => ThingOutput = parser(thingSchema); diff --git a/packages/core-json-ld/src/orgSchema/UserReview.ts b/packages/core-json-ld/src/orgSchema/UserReview.ts index c4103e48f3..05a152a388 100644 --- a/packages/core-json-ld/src/orgSchema/UserReview.ts +++ b/packages/core-json-ld/src/orgSchema/UserReview.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { thingSchema, type ThingInput, type ThingOutput } from './Thing'; @@ -30,21 +30,12 @@ type UserReviewOutput = ThingOutput & { readonly reviewAspect: readonly string[]; }; -const userReviewSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => thingSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - reviewAspect: jsonLinkedDataProperty(string()) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const userReviewSchema: GenericSchema = intersect([ + lazy(() => thingSchema), + object({ + reviewAspect: jsonLinkedDataProperty(string()) + }) +]); /** @deprecated Use Valibot.parse(userReviewSchema) instead. Will be removed on or after 2028-04-23. */ const parseUserReview: (userReview: UserReviewInput) => UserReviewOutput = parser(userReviewSchema); diff --git a/packages/core-json-ld/src/orgSchema/VoteAction.ts b/packages/core-json-ld/src/orgSchema/VoteAction.ts index 9e8cfff390..ce2632e73e 100644 --- a/packages/core-json-ld/src/orgSchema/VoteAction.ts +++ b/packages/core-json-ld/src/orgSchema/VoteAction.ts @@ -1,4 +1,4 @@ -import { intersect, lazy, object, parser, pipe, readonly, string, transform, type GenericSchema } from 'valibot'; +import { intersect, lazy, object, parser, string, type GenericSchema } from 'valibot'; import jsonLinkedDataProperty from '../private/jsonLinkedDataProperty'; import { actionSchema, type ActionInput, type ActionOutput } from './Action'; @@ -38,21 +38,12 @@ type VoteActionOutput = ActionOutput & { readonly actionOption: readonly string[]; }; -const voteActionSchema: GenericSchema = pipe( - intersect([ - pipe( - lazy(() => actionSchema), - // TODO: `intersect()` seems doesn't like frozen objects. - // Related to https://github.com/open-circle/valibot/pull/1463. - transform(value => ({ ...value })) - ), - object({ - actionOption: jsonLinkedDataProperty(string()) - }) - ]), - readonly(), - transform(value => Object.freeze({ ...value })) -); +const voteActionSchema: GenericSchema = intersect([ + lazy(() => actionSchema), + object({ + actionOption: jsonLinkedDataProperty(string()) + }) +]); /** @deprecated Use Valibot.parse(voteActionSchema) instead. Will be removed on or after 2028-04-23. */ const parseVoteAction: (voteAction: VoteActionInput) => VoteActionOutput = parser(voteActionSchema); diff --git a/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts b/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts index 7b20f2a033..87411cd523 100644 --- a/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts +++ b/packages/core-json-ld/src/private/jsonLinkedDataProperty.ts @@ -12,7 +12,10 @@ import { type InferOutput } from 'valibot'; -const EMPTY_ARRAY = Object.freeze([]); +// TODO: [P0] Uncomment `valibot.intersect` works with frozen objects. +// `valibot.intersect` doesn't work with frozen objects yet. +// Related to https://github.com/open-circle/valibot/pull/1463. +// const EMPTY_ARRAY = Object.freeze([]); // JSON-LD property characteristics: // - Every property value can be singular or plural (value) @@ -41,18 +44,12 @@ export default function jsonLinkedDataProperty { if (typeof value === 'undefined') { - return EMPTY_ARRAY; + // TODO: [P0] Uncomment `valibot.intersect` works with frozen objects. + // return EMPTY_ARRAY; + return []; } - let nextValue: readonly TOutput[]; - - if (Array.isArray(value)) { - nextValue = value; - } else { - nextValue = [value]; - } - - nextValue = nextValue.reduce((result, item) => { + const nextValue: TOutput[] = (Array.isArray(value) ? value : [value]).reduce((result, item) => { if (typeof item !== 'undefined') { const parseResult = safeParse(schema, item); @@ -62,10 +59,14 @@ export default function jsonLinkedDataProperty