diff --git a/.github/workflows/pull-request-validation.yml b/.github/workflows/pull-request-validation.yml
index 5fcc046900..08140448bd 100644
--- a/.github/workflows/pull-request-validation.yml
+++ b/.github/workflows/pull-request-validation.yml
@@ -22,7 +22,7 @@ defaults:
env:
CI_PULL_REQUEST: 1 # Skip nightly tests
NODE_ENV: test # Add instrumentation code
- node-version: 18.20 # Need to bump jest@29 to resolve something in https://github.com/facebook/react-native/issues/35701
+ node-version: 22
jobs:
build:
diff --git a/__tests__/html2/simple/fatModule/fluentTheme.html b/__tests__/html2/simple/fatModule/fluentTheme.html
new file mode 100644
index 0000000000..b4cc64287f
--- /dev/null
+++ b/__tests__/html2/simple/fatModule/fluentTheme.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/__tests__/html2/simple/fatModule/fluentTheme.html.snap-1.png b/__tests__/html2/simple/fatModule/fluentTheme.html.snap-1.png
new file mode 100644
index 0000000000..c85067bd9b
Binary files /dev/null and b/__tests__/html2/simple/fatModule/fluentTheme.html.snap-1.png differ
diff --git a/__tests__/html2/simple/fatModule/simple.html b/__tests__/html2/simple/fatModule/simple.html
new file mode 100644
index 0000000000..c49876ffd4
--- /dev/null
+++ b/__tests__/html2/simple/fatModule/simple.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/__tests__/html2/simple/fatModule/simple.html.snap-1.png b/__tests__/html2/simple/fatModule/simple.html.snap-1.png
new file mode 100644
index 0000000000..49d0068b80
Binary files /dev/null and b/__tests__/html2/simple/fatModule/simple.html.snap-1.png differ
diff --git a/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html b/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html
new file mode 100644
index 0000000000..0751f822ed
--- /dev/null
+++ b/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html.snap-1.png b/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html.snap-1.png
new file mode 100644
index 0000000000..927c13385e
Binary files /dev/null and b/__tests__/html2/simple/fatModule/supportPolymiddleware.reactDOMRender.html.snap-1.png differ
diff --git a/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html b/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html
new file mode 100644
index 0000000000..050cc7a676
--- /dev/null
+++ b/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html.snap-1.png b/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html.snap-1.png
new file mode 100644
index 0000000000..927c13385e
Binary files /dev/null and b/__tests__/html2/simple/fatModule/supportPolymiddleware.renderWebChat.html.snap-1.png differ
diff --git a/__tests__/html2/simple.emulator.html b/__tests__/html2/simple/simple.emulator.html
similarity index 100%
rename from __tests__/html2/simple.emulator.html
rename to __tests__/html2/simple/simple.emulator.html
diff --git a/__tests__/html2/simple.html b/__tests__/html2/simple/simple.html
similarity index 100%
rename from __tests__/html2/simple.html
rename to __tests__/html2/simple/simple.html
diff --git a/__tests__/html2/simple.offline.html b/__tests__/html2/simple/simple.offline.html
similarity index 100%
rename from __tests__/html2/simple.offline.html
rename to __tests__/html2/simple/simple.offline.html
diff --git a/jest.legacy.config.js b/jest.legacy.config.js
index 434259abb2..b822fbb663 100644
--- a/jest.legacy.config.js
+++ b/jest.legacy.config.js
@@ -37,6 +37,7 @@ const TRANSFORM_IGNORE_PACKAGES = [
'micromark-util-sanitize-uri',
'micromark-util-subtokenize',
'micromark',
+ 'microsoft-cognitiveservices-speech-sdk',
'mime',
'unist-util-stringify-position',
'uuid'
diff --git a/lint-staged.config.js b/lint-staged.config.js
index 1ced786cde..6e85c0bc87 100644
--- a/lint-staged.config.js
+++ b/lint-staged.config.js
@@ -12,7 +12,6 @@ module.exports = {
'**/*.md': prettierMarkdown,
'packages/**/*.css': ['npm run precommit:biome'],
'packages/api/src/**/*.{mjs,js,ts,tsx}': ['npm run precommit:eslint:api'],
- 'packages/api-middleware/src/**/*.{mjs,js,ts,tsx}': ['npm run precommit:eslint:api-middleware'],
'packages/base/src/**/*.{mjs,js,ts,tsx}': ['npm run precommit:eslint:base'],
'packages/bundle/src/**/*.{mjs,js,ts,tsx}': ['npm run precommit:eslint:bundle'],
'packages/component/src/**/*.{mjs,js,ts,tsx}': ['npm run precommit:eslint:component'],
diff --git a/package-lock.json b/package-lock.json
index fec9f0100c..3a061af165 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -21,7 +21,6 @@
"./packages/styles",
"./packages/support/cldr-data-downloader",
"./packages/support/cldr-data",
- "./packages/api-middleware",
"./packages/api",
"./packages/isomorphic-react",
"./packages/isomorphic-react-dom",
@@ -3539,10 +3538,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@msinternal/botframework-webchat-api-middleware": {
- "resolved": "packages/api-middleware",
- "link": true
- },
"node_modules/@msinternal/botframework-webchat-base": {
"resolved": "packages/base",
"link": true
@@ -4316,6 +4311,63 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@shikijs/core": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz",
+ "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==",
+ "dependencies": {
+ "@shikijs/engine-javascript": "2.5.0",
+ "@shikijs/engine-oniguruma": "2.5.0",
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4",
+ "hast-util-to-html": "^9.0.4"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz",
+ "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==",
+ "dependencies": {
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^3.1.0"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz",
+ "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==",
+ "dependencies": {
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz",
+ "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==",
+ "dependencies": {
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz",
+ "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==",
+ "dependencies": {
+ "@shikijs/types": "2.5.0"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz",
+ "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
"node_modules/@shikijs/vscode-textmate": {
"version": "10.0.2",
"resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
@@ -4869,12 +4921,6 @@
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
"license": "MIT"
},
- "node_modules/@types/uuid": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
- "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
- "dev": true
- },
"node_modules/@types/webrtc": {
"version": "0.0.37",
"resolved": "https://registry.npmjs.org/@types/webrtc/-/webrtc-0.0.37.tgz",
@@ -5876,7 +5922,6 @@
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
"integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "license": "MIT",
"dependencies": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
@@ -5888,7 +5933,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz",
"integrity": "sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==",
- "license": "MIT",
"dependencies": {
"asn1.js-rfc5280": "^3.0.0"
},
@@ -5900,7 +5944,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-3.0.0.tgz",
"integrity": "sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==",
- "license": "MIT",
"dependencies": {
"asn1.js": "^5.0.0"
}
@@ -5909,7 +5952,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-2.1.0.tgz",
"integrity": "sha512-iH+boep2xivfD9wMaZWkywYIURSmsL96d6MoqrC94BnGSvXE4Quf8hnJiHGFYhw/nLeIa1XyRaf4vvcvkwAefg==",
- "license": "MIT",
"dependencies": {
"debug": "^4.1.1",
"heimdalljs": "^0.2.3",
@@ -5927,7 +5969,6 @@
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "license": "MIT",
"dependencies": {
"minimist": "^1.2.6"
},
@@ -6261,7 +6302,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz",
"integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==",
- "license": "MIT",
"engines": {
"node": ">=0.8"
},
@@ -6270,10 +6310,9 @@
}
},
"node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "license": "MIT"
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
+ "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="
},
"node_modules/body-parser": {
"version": "2.2.0",
@@ -8125,7 +8164,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/editions/-/editions-2.3.1.tgz",
"integrity": "sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA==",
- "license": "MIT",
"dependencies": {
"errlop": "^2.0.0",
"semver": "^6.3.0"
@@ -8237,7 +8275,6 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/errlop/-/errlop-2.2.0.tgz",
"integrity": "sha512-e64Qj9+4aZzjzzFpZC7p5kmm/ccCrbLhAJplhsDXQFs87XTsXwOpH4s1Io2s90Tau/8r2j9f4l/thhDevRjzxw==",
- "license": "MIT",
"engines": {
"node": ">=0.8"
},
@@ -8534,6 +8571,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/eslint": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
@@ -10536,7 +10585,6 @@
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz",
"integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==",
- "license": "MIT",
"dependencies": {
"rsvp": "~3.2.1"
}
@@ -10544,8 +10592,7 @@
"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==",
- "license": "MIT"
+ "integrity": "sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg=="
},
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
@@ -11759,7 +11806,6 @@
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.6.0.tgz",
"integrity": "sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==",
- "license": "MIT",
"dependencies": {
"binaryextensions": "^2.1.2",
"editions": "^2.2.0",
@@ -14594,95 +14640,50 @@
}
},
"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==",
+ "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==",
"dependencies": {
+ "@types/webrtc": "^0.0.37",
"agent-base": "^6.0.1",
- "asn1.js-rfc2560": "^5.0.1",
- "asn1.js-rfc5280": "^3.0.0",
- "async-disk-cache": "^2.1.0",
+ "bent": "^7.3.12",
"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/microsoft-cognitiveservices-speech-sdk/node_modules/@angular/common": {
- "version": "18.2.5",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.5.tgz",
- "integrity": "sha512-m+KJrtbFXTE36jP/po6UAMeUR/enQxRHpVGLCRcIcE7VWVH1ZcOvoW1yqh2A6k+KxWXeajlq/Z04nnMhcoxMRw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "tslib": "^2.3.0"
- },
- "engines": {
- "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
- },
- "peerDependencies": {
- "@angular/core": "18.2.5",
- "rxjs": "^6.5.3 || ^7.4.0"
- }
- },
- "node_modules/microsoft-cognitiveservices-speech-sdk/node_modules/@angular/core": {
- "version": "18.2.5",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.5.tgz",
- "integrity": "sha512-5BLVc5gXxzanQkADNS9WPsor3vNF5nQcyIHBi5VScErwM5vVZ7ATH1iZwaOg1ykDEVTFVhKDwD0X1aaqGDbhmQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "tslib": "^2.3.0"
- },
- "engines": {
- "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
- },
- "peerDependencies": {
- "rxjs": "^6.5.3 || ^7.4.0",
- "zone.js": "~0.14.10"
- }
- },
- "node_modules/microsoft-cognitiveservices-speech-sdk/node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "license": "Apache-2.0",
- "peer": true,
- "dependencies": {
- "tslib": "^2.1.0"
+ "uuid": "^9.0.0",
+ "ws": "^8.18.2"
}
},
"node_modules/microsoft-cognitiveservices-speech-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.",
- "license": "MIT",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
"bin": {
- "uuid": "bin/uuid"
+ "uuid": "dist/bin/uuid"
}
},
- "node_modules/microsoft-cognitiveservices-speech-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==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^1.9.2"
+ "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==",
+ "engines": {
+ "node": ">=10.0.0"
},
"peerDependencies": {
- "@angular/common": ">= 5.0.0",
- "@angular/core": ">= 5.0.0"
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
}
},
- "node_modules/microsoft-cognitiveservices-speech-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==",
- "license": "0BSD"
- },
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -14754,8 +14755,7 @@
"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==",
- "license": "ISC"
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
},
"node_modules/minimatch": {
"version": "9.0.5",
@@ -15386,6 +15386,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/oniguruma-to-es": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz",
+ "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==",
+ "dependencies": {
+ "emoji-regex-xs": "^1.0.0",
+ "regex": "^6.0.1",
+ "regex-recursion": "^6.0.2"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -16077,8 +16087,7 @@
"node_modules/querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "license": "MIT"
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
},
"node_modules/queue-microtask": {
"version": "1.2.3",
@@ -16953,7 +16962,6 @@
"version": "4.8.5",
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
"integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "license": "MIT",
"engines": {
"node": "6.* || >= 7.*"
}
@@ -17675,6 +17683,21 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/shiki": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz",
+ "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==",
+ "dependencies": {
+ "@shikijs/core": "2.5.0",
+ "@shikijs/engine-javascript": "2.5.0",
+ "@shikijs/engine-oniguruma": "2.5.0",
+ "@shikijs/langs": "2.5.0",
+ "@shikijs/themes": "2.5.0",
+ "@shikijs/types": "2.5.0",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ }
+ },
"node_modules/side-channel": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
@@ -18692,7 +18715,6 @@
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz",
"integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==",
- "license": "MIT",
"engines": {
"node": ">=0.8"
},
@@ -19717,7 +19739,6 @@
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "license": "MIT",
"dependencies": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
@@ -19781,8 +19802,7 @@
"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==",
- "license": "MIT"
+ "integrity": "sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA=="
},
"node_modules/util-deprecate": {
"version": "1.0.2",
@@ -20590,13 +20610,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/zone.js": {
- "version": "0.14.10",
- "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
- "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
- "license": "MIT",
- "peer": true
- },
"node_modules/zwitch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
@@ -20613,11 +20626,13 @@
"dependencies": {
"botframework-webchat-core": "0.0.0-0",
"globalize": "1.7.0",
+ "handler-chain": "0.1.0",
"iter-fest": "0.3.0",
"math-random": "2.0.1",
"prop-types": "15.8.1",
"react-chain-of-responsibility": "0.4.0-main.c2f17da",
"react-redux": "7.2.9",
+ "react-wrap-with": "0.1.0",
"redux": "5.0.1",
"simple-update-in": "2.2.0",
"use-ref-from": "0.1.0",
@@ -20628,7 +20643,6 @@
"@babel/preset-env": "^7.28.0",
"@babel/preset-react": "^7.27.1",
"@babel/preset-typescript": "^7.27.1",
- "@msinternal/botframework-webchat-api-middleware": "^0.0.0-0",
"@msinternal/botframework-webchat-base": "^0.0.0-0",
"@msinternal/botframework-webchat-cldr-data": "36.0.0-0",
"@msinternal/botframework-webchat-react-hooks": "^0.0.0-0",
@@ -20641,7 +20655,6 @@
"@types/react": "^16.14.65",
"babel-plugin-istanbul": "^7.0.0",
"babel-plugin-transform-inline-environment-variables": "^0.4.4",
- "core-js": "^3.44.0",
"cross-env": "^10.0.0",
"globalize-compiler": "^1.1.1",
"iana-tz-data": "^2019.1.0",
@@ -20649,80 +20662,10 @@
"type-fest": "^4.41.0",
"typescript": "~5.8.3"
},
- "peerDependencies": {
- "react": ">= 16.8.6",
- "react-dom": ">= 16.8.6"
- }
- },
- "packages/api-middleware": {
- "name": "@msinternal/botframework-webchat-api-middleware",
- "version": "0.0.0-0",
- "license": "MIT",
- "dependencies": {
- "handler-chain": "^0.1.0",
- "react-chain-of-responsibility": "0.4.0-main.c2f17da",
- "react-wrap-with": "0.1.0",
- "valibot": "1.1.0"
- },
- "devDependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@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": "^22.13.4",
- "cross-env": "^7.0.3",
- "type-fest": "^4.34.1",
- "typescript": "^5.7.3"
- },
"peerDependencies": {
"react": ">= 16.8.6"
}
},
- "packages/api-middleware/node_modules/@types/node": {
- "version": "22.17.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.1.tgz",
- "integrity": "sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==",
- "dev": true,
- "dependencies": {
- "undici-types": "~6.21.0"
- }
- },
- "packages/api-middleware/node_modules/cross-env": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
- "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.1"
- },
- "bin": {
- "cross-env": "src/bin/cross-env.js",
- "cross-env-shell": "src/bin/cross-env-shell.js"
- },
- "engines": {
- "node": ">=10.14",
- "npm": ">=6",
- "yarn": ">=1"
- }
- },
- "packages/api-middleware/node_modules/type-fest": {
- "version": "4.41.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
- "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
- "dev": true,
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "packages/api-middleware/node_modules/undici-types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
- "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true
- },
"packages/api/node_modules/@jest/expect-utils": {
"version": "30.0.5",
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.5.tgz",
@@ -21015,7 +20958,6 @@
"version": "0.0.0-0",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "7.28.2",
"adaptivecards": "3.0.2",
"botframework-directlinejs": "0.15.6",
"botframework-directlinespeech-sdk": "0.0.0-0",
@@ -21045,28 +20987,11 @@
"whatwg-fetch": "3.6.20"
},
"devDependencies": {
- "@babel/core": "^7.28.0",
- "@babel/plugin-transform-runtime": "^7.28.0",
- "@babel/preset-env": "^7.28.0",
- "@babel/preset-react": "^7.27.1",
- "@babel/preset-typescript": "^7.27.1",
- "@msinternal/botframework-webchat-base": "0.0.0-0",
- "@msinternal/botframework-webchat-react-valibot": "0.0.0-0",
+ "@msinternal/botframework-webchat-base": "^0.0.0-0",
"@msinternal/botframework-webchat-tsconfig": "^0.0.0-0",
"@msinternal/isomorphic-react": "^0.0.0-0",
"@msinternal/isomorphic-react-dom": "^0.0.0-0",
- "@types/dom-speech-recognition": "^0.0.6",
- "@types/mdast": "^4.0.4",
- "@types/node": "^24.1.0",
- "@types/react": "^16.14.65",
- "@types/uuid": "^10.0.0",
- "babel-plugin-istanbul": "^7.0.0",
- "babel-plugin-transform-inline-environment-variables": "^0.4.4",
- "cross-env": "^10.0.0",
- "esbuild": "^0.25.8",
- "micromark-util-types": "^2.0.2",
"tsd": "^0.32.0",
- "type-fest": "^4.41.0",
"typescript": "~5.8.3"
},
"peerDependencies": {
@@ -21074,126 +20999,6 @@
"react-dom": ">= 16.8.6"
}
},
- "packages/bundle/node_modules/@shikijs/core": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz",
- "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==",
- "dependencies": {
- "@shikijs/engine-javascript": "2.5.0",
- "@shikijs/engine-oniguruma": "2.5.0",
- "@shikijs/types": "2.5.0",
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4",
- "hast-util-to-html": "^9.0.4"
- }
- },
- "packages/bundle/node_modules/@shikijs/engine-javascript": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz",
- "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==",
- "dependencies": {
- "@shikijs/types": "2.5.0",
- "@shikijs/vscode-textmate": "^10.0.2",
- "oniguruma-to-es": "^3.1.0"
- }
- },
- "packages/bundle/node_modules/@shikijs/engine-oniguruma": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz",
- "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==",
- "dependencies": {
- "@shikijs/types": "2.5.0",
- "@shikijs/vscode-textmate": "^10.0.2"
- }
- },
- "packages/bundle/node_modules/@shikijs/langs": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz",
- "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==",
- "dependencies": {
- "@shikijs/types": "2.5.0"
- }
- },
- "packages/bundle/node_modules/@shikijs/themes": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz",
- "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==",
- "dependencies": {
- "@shikijs/types": "2.5.0"
- }
- },
- "packages/bundle/node_modules/@shikijs/types": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz",
- "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==",
- "dependencies": {
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
- }
- },
- "packages/bundle/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==",
- "dependencies": {
- "@types/webrtc": "^0.0.37",
- "agent-base": "^6.0.1",
- "bent": "^7.3.12",
- "https-proxy-agent": "^4.0.0",
- "uuid": "^9.0.0",
- "ws": "^8.18.2"
- }
- },
- "packages/bundle/node_modules/microsoft-cognitiveservices-speech-sdk/node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "packages/bundle/node_modules/oniguruma-to-es": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz",
- "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==",
- "dependencies": {
- "emoji-regex-xs": "^1.0.0",
- "regex": "^6.0.1",
- "regex-recursion": "^6.0.2"
- }
- },
- "packages/bundle/node_modules/shiki": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz",
- "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==",
- "dependencies": {
- "@shikijs/core": "2.5.0",
- "@shikijs/engine-javascript": "2.5.0",
- "@shikijs/engine-oniguruma": "2.5.0",
- "@shikijs/langs": "2.5.0",
- "@shikijs/themes": "2.5.0",
- "@shikijs/types": "2.5.0",
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
- }
- },
- "packages/bundle/node_modules/type-fest": {
- "version": "4.41.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
- "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
- "dev": true,
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"packages/bundle/node_modules/typescript": {
"version": "5.9.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
@@ -21207,26 +21012,6 @@
"node": ">=14.17"
}
},
- "packages/bundle/node_modules/ws": {
- "version": "8.18.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
- "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
"packages/component": {
"name": "botframework-webchat-component",
"version": "0.0.0-0",
@@ -21266,10 +21051,10 @@
"@babel/preset-env": "^7.28.0",
"@babel/preset-react": "^7.27.1",
"@babel/preset-typescript": "^7.27.1",
- "@msinternal/botframework-webchat-base": "0.0.0-0",
+ "@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-styles": "^0.0.0-0",
"@msinternal/botframework-webchat-tsconfig": "^0.0.0-0",
"@types/dom-speech-recognition": "^0.0.6",
"@types/jest": "^30.0.0",
@@ -21278,7 +21063,6 @@
"@types/react": "^16.14.65",
"babel-plugin-istanbul": "^7.0.0",
"babel-plugin-transform-inline-environment-variables": "^0.4.4",
- "core-js": "^3.44.0",
"cross-env": "^10.0.0",
"type-fest": "^4.41.0",
"typescript": "~5.8.3"
@@ -21884,6 +21668,47 @@
"node": ">= 10.14.2"
}
},
+ "packages/directlinespeech/node_modules/@angular/common": {
+ "version": "20.3.0",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.0.tgz",
+ "integrity": "sha512-Il0HqdRdrmI8ufLXd49EYaa/BPqfiSqe5uuKrDxhkAdbRXwCXWsxbO/n8AwilwWn3CKLOCrEXQYKwbcFW0nYQQ==",
+ "peer": true,
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@angular/core": "20.3.0",
+ "rxjs": "^6.5.3 || ^7.4.0"
+ }
+ },
+ "packages/directlinespeech/node_modules/@angular/core": {
+ "version": "20.3.0",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.0.tgz",
+ "integrity": "sha512-4uH2TAMm1nXqQ9lcZyyNkjcdQ0Fjcf9Hh0HYrhMOEV6GAUHvM2I8Vr2dSQ40p/UKLEfe9+cpZ78EPocqPQCG6A==",
+ "peer": true,
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@angular/compiler": "20.3.0",
+ "rxjs": "^6.5.3 || ^7.4.0",
+ "zone.js": "~0.15.0"
+ },
+ "peerDependenciesMeta": {
+ "@angular/compiler": {
+ "optional": true
+ },
+ "zone.js": {
+ "optional": true
+ }
+ }
+ },
"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",
@@ -21895,14 +21720,64 @@
"url": "https://github.com/sponsors/mysticatea"
}
},
+ "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": {
+ "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/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-api": "0.0.0-0",
- "botframework-webchat-component": "0.0.0-0",
- "botframework-webchat-core": "0.0.0-0",
+ "botframework-webchat": "0.0.0-0",
"classnames": "2.5.1",
"inject-meta-tag": "0.0.1",
"math-random": "2.0.1",
@@ -21910,12 +21785,13 @@
"valibot": "1.1.0"
},
"devDependencies": {
- "@msinternal/botframework-webchat-base": "0.0.0-0",
- "@msinternal/botframework-webchat-styles": "0.0.0-0",
+ "@msinternal/botframework-webchat-base": "^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": "^24.1.0",
"@types/react": "^16.14.65",
+ "escape-string-regexp": "^5.0.0",
"tsup": "^8.5.0",
"typescript": "~5.8.3"
},
@@ -21988,9 +21864,6 @@
"name": "@msinternal/botframework-webchat-react-valibot",
"version": "0.0.0-0",
"license": "MIT",
- "dependencies": {
- "valibot": "1.1.0"
- },
"devDependencies": {
"@msinternal/botframework-webchat-tsconfig": "^0.0.0-0",
"@types/jest": "^30.0.0",
@@ -21999,7 +21872,8 @@
"typescript": "~5.8.3"
},
"peerDependencies": {
- "react": ">= 16.8.6"
+ "react": ">= 16.8.6",
+ "valibot": "^1.1.0"
}
},
"packages/react-valibot/node_modules/@jest/expect-utils": {
@@ -22230,10 +22104,6 @@
"name": "@msinternal/botframework-webchat-redux-store",
"version": "0.0.0-0",
"license": "MIT",
- "dependencies": {
- "botframework-webchat-core": "0.0.0-0",
- "valibot": "1.1.0"
- },
"devDependencies": {
"@msinternal/botframework-webchat-react-valibot": "^0.0.0-0",
"@msinternal/botframework-webchat-tsconfig": "^0.0.0-0",
@@ -22242,7 +22112,9 @@
"typescript": "~5.8.3"
},
"peerDependencies": {
- "react": ">= 16.8.6"
+ "botframework-webchat-core": "^0.0.0-0",
+ "react": ">= 16.8.6",
+ "valibot": "^1.1.0"
}
},
"packages/styles": {
@@ -22251,7 +22123,7 @@
"license": "MIT",
"devDependencies": {
"@jridgewell/sourcemap-codec": "^1.5.4",
- "@msinternal/botframework-webchat-base": "0.0.0-0",
+ "@msinternal/botframework-webchat-base": "^0.0.0-0",
"@msinternal/botframework-webchat-tsconfig": "^0.0.0-0",
"@types/node": "^24.1.0",
"cross-env": "^10.0.0",
@@ -22726,52 +22598,6 @@
"url": "https://github.com/sponsors/mysticatea"
}
},
- "packages/test/page-object/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==",
- "dependencies": {
- "@types/webrtc": "^0.0.37",
- "agent-base": "^6.0.1",
- "bent": "^7.3.12",
- "https-proxy-agent": "^4.0.0",
- "uuid": "^9.0.0",
- "ws": "^8.18.2"
- }
- },
- "packages/test/page-object/node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "packages/test/page-object/node_modules/ws": {
- "version": "8.18.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
- "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
"packages/test/web-server": {
"name": "@msinternal/test-web-server",
"version": "0.0.0-0",
diff --git a/package.json b/package.json
index a9f213de9c..06389d6edc 100644
--- a/package.json
+++ b/package.json
@@ -27,7 +27,6 @@
"./packages/styles",
"./packages/support/cldr-data-downloader",
"./packages/support/cldr-data",
- "./packages/api-middleware",
"./packages/api",
"./packages/isomorphic-react",
"./packages/isomorphic-react-dom",
@@ -59,7 +58,6 @@
"precommit": "npm run precommit --if-present --workspaces",
"precommit:biome": "npm run biome -- --no-errors-on-unmatched",
"precommit:eslint:api": "cd packages && cd api && npm run precommit:eslint",
- "precommit:eslint:api-middleware": "cd packages && cd api-middleware && npm run precommit:eslint",
"precommit:eslint:base": "cd packages && cd base && npm run precommit:eslint",
"precommit:eslint:bundle": "cd packages && cd bundle && npm run precommit:eslint",
"precommit:eslint:component": "cd packages && cd component && npm run precommit:eslint",
@@ -80,7 +78,6 @@
"precommit:eslint:web-server": "cd packages && cd test && cd web-server && npm run precommit:eslint",
"precommit:typecheck": "concurrently \"npm:precommit:typecheck:*\"",
"precommit:typecheck:api": "cd packages && cd api && npm run precommit:typecheck",
- "precommit:typecheck:api-middleware": "cd packages && cd api-middleware && npm run precommit:typecheck",
"precommit:typecheck:base": "cd packages && cd base && npm run precommit:typecheck",
"precommit:typecheck:bundle": "cd packages && cd bundle && npm run precommit:typecheck",
"precommit:typecheck:component": "cd packages && cd component && npm run precommit:typecheck",
@@ -94,7 +91,6 @@
"prepare": "husky",
"start": "cross-env NODE_OPTIONS=--no-deprecation concurrently --kill-others --prefix-colors \"auto\" \"npm:start:*\"",
"start:api": "cd packages && cd api && npm start",
- "start:api-middleware": "cd packages && cd api-middleware && npm start",
"start:base": "cd packages && cd base && npm start",
"start:bundle": "cd packages && cd bundle && npm start",
"start:component": "cd packages && cd component && npm start",
diff --git a/packages/api-middleware/.eslintrc.yml b/packages/api-middleware/.eslintrc.yml
deleted file mode 100644
index 6ba5244054..0000000000
--- a/packages/api-middleware/.eslintrc.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-extends:
- - ../../.eslintrc.production.yml
- - ../../.eslintrc.react.yml
-
-# This package is compatible with web browser.
-env:
- browser: true
-
-rules:
- # React functional component is better in function style than arrow style.
- prefer-arrow-callback: off
-
- # React already deprecated default props.
- react/require-default-props: off
diff --git a/packages/api-middleware/.gitignore b/packages/api-middleware/.gitignore
deleted file mode 100644
index 515a303349..0000000000
--- a/packages/api-middleware/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-/*.tgz
-/dist/
-/dist.tmp/
-/node_modules/
-/tsup.config.bundled_*.mjs
diff --git a/packages/api-middleware/README.md b/packages/api-middleware/README.md
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/packages/api-middleware/package.json b/packages/api-middleware/package.json
deleted file mode 100644
index 4614784af4..0000000000
--- a/packages/api-middleware/package.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
- "name": "@msinternal/botframework-webchat-api-middleware",
- "version": "0.0.0-0",
- "description": "botframework-webchat-api/middleware package",
- "main": "./dist/botframework-webchat-api-middleware.js",
- "types": "./dist/botframework-webchat-api-middleware.d.ts",
- "exports": {
- "./internal": {
- "import": {
- "types": "./dist/botframework-webchat-api-middleware.internal.d.mts",
- "default": "./dist/botframework-webchat-api-middleware.internal.mjs"
- },
- "require": {
- "types": "./dist/botframework-webchat-api-middleware.internal.d.ts",
- "default": "./dist/botframework-webchat-api-middleware.internal.js"
- }
- },
- "./legacy": {
- "import": {
- "types": "./dist/botframework-webchat-api-middleware.legacy.d.mts",
- "default": "./dist/botframework-webchat-api-middleware.legacy.mjs"
- },
- "require": {
- "types": "./dist/botframework-webchat-api-middleware.legacy.d.ts",
- "default": "./dist/botframework-webchat-api-middleware.legacy.js"
- }
- },
- ".": {
- "import": {
- "types": "./dist/botframework-webchat-api-middleware.d.mts",
- "default": "./dist/botframework-webchat-api-middleware.mjs"
- },
- "require": {
- "types": "./dist/botframework-webchat-api-middleware.d.ts",
- "default": "./dist/botframework-webchat-api-middleware.js"
- }
- },
- "./tsconfig.json": "./src/ts-config/config.json",
- "./env": {
- "types": "./src/env.d.ts"
- }
- },
- "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"
- ],
- "localDependencies": {
- "@msinternal/botframework-webchat-base": "development",
- "@msinternal/botframework-webchat-react-hooks": "development",
- "@msinternal/botframework-webchat-react-valibot": "development"
- },
- "homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/api-middleware#readme",
- "scripts": {
- "build": "tsup --config ./tsup.config.ts",
- "bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
- "bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
- "bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
- "eslint": "npm run precommit",
- "postversion": "cat package.json | jq '.version as $V | (.localDependencies // {} | with_entries(select(.value == \"production\") | { key: .key, value: $V })) as $L1 | (.localDependencies // {} | with_entries(select(.value == \"development\") | { key: .key, value: $V })) as $L2 | ((.dependencies // {}) + $L1 | to_entries | sort_by(.key) | from_entries) as $D1 | ((.devDependencies // {}) + $L2 | to_entries | sort_by(.key) | from_entries) as $D2 | . + { dependencies: $D1, devDependencies: $D2 }' > package-temp.json && mv package-temp.json package.json",
- "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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
- },
- "devDependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@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": "^22.13.4",
- "cross-env": "^7.0.3",
- "type-fest": "^4.34.1",
- "typescript": "^5.7.3"
- },
- "peerDependencies": {
- "react": ">= 16.8.6"
- },
- "dependencies": {
- "handler-chain": "^0.1.0",
- "react-chain-of-responsibility": "0.4.0-main.c2f17da",
- "react-wrap-with": "0.1.0",
- "valibot": "1.1.0"
- }
-}
diff --git a/packages/api-middleware/tsup.config.ts b/packages/api-middleware/tsup.config.ts
deleted file mode 100644
index d2bfd849cf..0000000000
--- a/packages/api-middleware/tsup.config.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { defineConfig } from 'tsup';
-
-import { applyConfig } from '../../tsup.base.config';
-
-// TODO: [P1] Compute this automatically.
-const DEPENDENT_PATHS = ['api/src/index.ts'];
-
-const commonConfig = applyConfig(config => ({
- ...config,
- entry: {
- 'botframework-webchat-api-middleware': './src/index.ts',
- 'botframework-webchat-api-middleware.legacy': './src/legacy.ts'
- },
- onSuccess: `touch ${DEPENDENT_PATHS.map(path => `../${path}`).join(' ')}`
-}));
-
-export default defineConfig([
- {
- ...commonConfig,
- format: 'esm'
- },
- {
- ...commonConfig,
- format: 'cjs',
- target: [...commonConfig.target, 'es2019']
- }
-]);
diff --git a/packages/api/.eslintrc.yml b/packages/api/.eslintrc.yml
index 47380c7dd7..49c1bec8e0 100644
--- a/packages/api/.eslintrc.yml
+++ b/packages/api/.eslintrc.yml
@@ -5,3 +5,7 @@ extends:
# TODO: #3212 When we move to React Native, we should disable this.
env:
browser: true
+
+rules:
+ react/require-default-props:
+ - off
diff --git a/packages/api/package.json b/packages/api/package.json
index 5c5694a30c..a19d65512f 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -65,9 +65,10 @@
],
"homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/component#readme",
"scripts": {
- "build": "npm run build:globalize && npm run build:tsup",
+ "build": "npm run build:globalize && npm run build:tsup && npm run build:validate",
"build:globalize": "node scripts/createPrecompiledGlobalize.mjs",
"build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
@@ -80,7 +81,6 @@
"start": "npm run build:tsup -- --watch"
},
"localDependencies": {
- "@msinternal/botframework-webchat-api-middleware": "development",
"@msinternal/botframework-webchat-base": "development",
"@msinternal/botframework-webchat-cldr-data": "development",
"@msinternal/botframework-webchat-react-hooks": "development",
@@ -108,7 +108,6 @@
"@babel/preset-env": "^7.28.0",
"@babel/preset-react": "^7.27.1",
"@babel/preset-typescript": "^7.27.1",
- "@msinternal/botframework-webchat-api-middleware": "^0.0.0-0",
"@msinternal/botframework-webchat-base": "^0.0.0-0",
"@msinternal/botframework-webchat-cldr-data": "36.0.0-0",
"@msinternal/botframework-webchat-react-hooks": "^0.0.0-0",
@@ -121,7 +120,6 @@
"@types/react": "^16.14.65",
"babel-plugin-istanbul": "^7.0.0",
"babel-plugin-transform-inline-environment-variables": "^0.4.4",
- "core-js": "^3.44.0",
"cross-env": "^10.0.0",
"globalize-compiler": "^1.1.1",
"iana-tz-data": "^2019.1.0",
@@ -132,18 +130,19 @@
"dependencies": {
"botframework-webchat-core": "0.0.0-0",
"globalize": "1.7.0",
+ "handler-chain": "0.1.0",
"iter-fest": "0.3.0",
"math-random": "2.0.1",
"prop-types": "15.8.1",
"react-chain-of-responsibility": "0.4.0-main.c2f17da",
"react-redux": "7.2.9",
+ "react-wrap-with": "0.1.0",
"redux": "5.0.1",
"simple-update-in": "2.2.0",
"use-ref-from": "0.1.0",
"valibot": "1.1.0"
},
"peerDependencies": {
- "react": ">= 16.8.6",
- "react-dom": ">= 16.8.6"
+ "react": ">= 16.8.6"
}
}
diff --git a/packages/api/src/decorator/DecoratorComposer.tsx b/packages/api/src/decorator/DecoratorComposer.tsx
index f78367f451..94d527f3a4 100644
--- a/packages/api/src/decorator/DecoratorComposer.tsx
+++ b/packages/api/src/decorator/DecoratorComposer.tsx
@@ -21,7 +21,7 @@ const warnInvalidMiddlewarePropsSchema = optional(
type DecoratorComposerProps = Omit, 'middleware'> & {
// Mark "middleware" as read-only.
// Otherwise, passing a read-only middleware would fail because we prefer writable.
- // eslint-disable-next-line react/require-default-props, react/no-unused-prop-types
+ // eslint-disable-next-line react/no-unused-prop-types
readonly middleware?: readonly DecoratorMiddleware[] | undefined;
};
diff --git a/packages/api/src/errorBox/errorBoxTelemetryPolymiddleware.ts b/packages/api/src/errorBox/errorBoxTelemetryPolymiddleware.ts
index 7937e21050..804989be55 100644
--- a/packages/api/src/errorBox/errorBoxTelemetryPolymiddleware.ts
+++ b/packages/api/src/errorBox/errorBoxTelemetryPolymiddleware.ts
@@ -1,13 +1,13 @@
-import {
- createErrorBoxPolymiddleware,
- errorBoxComponent,
- ErrorBoxPolymiddlewareHandlerResult
-} from '@msinternal/botframework-webchat-api-middleware';
import { validateProps } from '@msinternal/botframework-webchat-react-valibot';
import { memo, useEffect } from 'react';
import { custom, never, object, optional, pipe, readonly, unknown, type InferInput } from 'valibot';
import { useTrackException } from '../hooks';
+import {
+ createErrorBoxPolymiddleware,
+ errorBoxComponent,
+ ErrorBoxPolymiddlewareHandlerResult
+} from '../package-api-middleware/index';
const errorBoxTelemetryHeadlessPropsSchema = pipe(
object({
diff --git a/packages/api/src/hooks/Composer.tsx b/packages/api/src/hooks/Composer.tsx
index 5d4fc7d1d2..33c871816b 100644
--- a/packages/api/src/hooks/Composer.tsx
+++ b/packages/api/src/hooks/Composer.tsx
@@ -1,8 +1,3 @@
-import { PolymiddlewareComposer, type Polymiddleware } from '@msinternal/botframework-webchat-api-middleware';
-import {
- type LegacyActivityMiddleware,
- type LegacyAttachmentMiddleware
-} from '@msinternal/botframework-webchat-api-middleware/legacy';
import { ReduxStoreComposer } from '@msinternal/botframework-webchat-redux-store';
import {
clearSuggestedActions,
@@ -54,6 +49,8 @@ import {
type SendBoxToolbarMiddleware
} from '../middleware/SendBoxToolbarMiddleware';
import normalizeStyleOptions from '../normalizeStyleOptions';
+import { PolymiddlewareComposer, type Polymiddleware } from '../package-api-middleware/index';
+import { type LegacyActivityMiddleware, type LegacyAttachmentMiddleware } from '../package-api-middleware/legacy';
import patchStyleOptionsFromDeprecatedProps from '../patchStyleOptionsFromDeprecatedProps';
import ActivityAcknowledgementComposer from '../providers/ActivityAcknowledgement/ActivityAcknowledgementComposer';
import ActivityKeyerComposer from '../providers/ActivityKeyer/ActivityKeyerComposer';
@@ -93,8 +90,6 @@ import useMarkAllAsAcknowledged from './useMarkAllAsAcknowledged';
import ErrorBoundary from './utils/ErrorBoundary';
import observableToPromise from './utils/observableToPromise';
import { parseUIState } from './validation/uiState';
-
-// List of Redux actions factory we are hoisting as Web Chat functions
const DISPATCHERS = {
clearSuggestedActions,
dismissNotification,
diff --git a/packages/api/src/hooks/index.ts b/packages/api/src/hooks/index.ts
index f5a1a959d7..f447332a1e 100644
--- a/packages/api/src/hooks/index.ts
+++ b/packages/api/src/hooks/index.ts
@@ -72,8 +72,8 @@ import useUserID from './useUserID';
import useUsername from './useUsername';
import useVoiceSelector from './useVoiceSelector';
-export { useBuildRenderActivityCallback } from '@msinternal/botframework-webchat-api-middleware';
-export { useSuggestedActionsHooks } from '@msinternal/botframework-webchat-redux-store';
+export { useBuildRenderActivityCallback } from '../package-api-middleware/index';
+export { default as useSuggestedActionsHooks } from './useSuggestedActionsHooks';
export {
useActiveTyping,
diff --git a/packages/api/src/hooks/internal/WebChatAPIContext.ts b/packages/api/src/hooks/internal/WebChatAPIContext.ts
index 14dbc1d247..6ea7d9968b 100644
--- a/packages/api/src/hooks/internal/WebChatAPIContext.ts
+++ b/packages/api/src/hooks/internal/WebChatAPIContext.ts
@@ -1,4 +1,3 @@
-import { type LegacyRenderAttachment } from '@msinternal/botframework-webchat-api-middleware/legacy';
import {
type DirectLineJSBotConnection,
type Observable,
@@ -9,6 +8,7 @@ import {
} from 'botframework-webchat-core';
import { createContext } from 'react';
+import { type LegacyRenderAttachment } from '../../package-api-middleware/legacy';
import { StrictStyleOptions } from '../../StyleOptions';
import { RenderActivityStatus } from '../../types/ActivityStatusMiddleware';
import { AttachmentForScreenReaderComponentFactory } from '../../types/AttachmentForScreenReaderMiddleware';
diff --git a/packages/api/src/hooks/middleware/UserlandBoundary.js b/packages/api/src/hooks/middleware/UserlandBoundary.js
index 879135347b..9a961ea792 100644
--- a/packages/api/src/hooks/middleware/UserlandBoundary.js
+++ b/packages/api/src/hooks/middleware/UserlandBoundary.js
@@ -1,7 +1,7 @@
-import { ErrorBoxPolymiddlewareProxy } from '@msinternal/botframework-webchat-api-middleware';
import PropTypes from 'prop-types';
import React, { useCallback, useState } from 'react';
+import { ErrorBoxPolymiddlewareProxy } from '../../package-api-middleware/index';
import ErrorBoundary from '../utils/ErrorBoundary';
const UserlandBoundary = ({ children, type }) => {
diff --git a/packages/api/src/hooks/middleware/activityFallbackPolymiddleware.ts b/packages/api/src/hooks/middleware/activityFallbackPolymiddleware.ts
index 4b3c14def4..979172d8d3 100644
--- a/packages/api/src/hooks/middleware/activityFallbackPolymiddleware.ts
+++ b/packages/api/src/hooks/middleware/activityFallbackPolymiddleware.ts
@@ -1,7 +1,8 @@
-import { activityComponent, createActivityPolymiddleware } from '@msinternal/botframework-webchat-api-middleware';
import { type WebChatActivity } from 'botframework-webchat-core';
import { memo } from 'react';
+import { activityComponent, createActivityPolymiddleware } from '../../package-api-middleware/index';
+
// eslint-disable-next-line prefer-arrow-callback
const NoActivityToRenderComponent = memo(function NoActivityToRenderComponent({
activity
diff --git a/packages/api/src/hooks/middleware/applyMiddleware.js b/packages/api/src/hooks/middleware/applyMiddleware.js
index 06cadf5432..0e0eb9bbd6 100644
--- a/packages/api/src/hooks/middleware/applyMiddleware.js
+++ b/packages/api/src/hooks/middleware/applyMiddleware.js
@@ -1,5 +1,6 @@
-import { ErrorBoxPolymiddlewareProxy } from '@msinternal/botframework-webchat-api-middleware';
import React, { isValidElement } from 'react';
+
+import { ErrorBoxPolymiddlewareProxy } from '../../package-api-middleware/index';
import concatMiddleware from './concatMiddleware';
import UserlandBoundary from './UserlandBoundary';
diff --git a/packages/api/src/hooks/useCreateActivityRenderer.ts b/packages/api/src/hooks/useCreateActivityRenderer.ts
index b36b7505c0..7b3f52cc25 100644
--- a/packages/api/src/hooks/useCreateActivityRenderer.ts
+++ b/packages/api/src/hooks/useCreateActivityRenderer.ts
@@ -1,10 +1,8 @@
-import { useBuildRenderActivityCallback } from '@msinternal/botframework-webchat-api-middleware';
-import {
- type LegacyActivityComponentFactory,
- type LegacyActivityProps
-} from '@msinternal/botframework-webchat-api-middleware/legacy';
import { useCallback } from 'react';
+import { useBuildRenderActivityCallback } from '../package-api-middleware/index';
+import { type LegacyActivityComponentFactory, type LegacyActivityProps } from '../package-api-middleware/legacy';
+
/**
* @deprecated Use useBuildRenderActivityCallback() instead, this hook will be removed on or after 2027-08-16.
*/
diff --git a/packages/api/src/hooks/useRenderAttachment.ts b/packages/api/src/hooks/useRenderAttachment.ts
index 2a97338ebb..9ddbb4a338 100644
--- a/packages/api/src/hooks/useRenderAttachment.ts
+++ b/packages/api/src/hooks/useRenderAttachment.ts
@@ -1,4 +1,4 @@
-import { type LegacyRenderAttachment } from '@msinternal/botframework-webchat-api-middleware/legacy';
+import { type LegacyRenderAttachment } from '../package-api-middleware/legacy';
import useWebChatAPIContext from './internal/useWebChatAPIContext';
export default function useRenderAttachment(): LegacyRenderAttachment | undefined {
diff --git a/packages/api/src/hooks/useSuggestedActionsHooks.ts b/packages/api/src/hooks/useSuggestedActionsHooks.ts
new file mode 100644
index 0000000000..dc3e20c13c
--- /dev/null
+++ b/packages/api/src/hooks/useSuggestedActionsHooks.ts
@@ -0,0 +1,21 @@
+// tsup wrongly included typings from private packages marked as `noExternal` or `devDependencies`.
+// We cannot direct re-export from private packages without rebuilding their types.
+// tsup bug: https://github.com/egoist/tsup/issues/1071
+
+import { useSuggestedActionsHooks as useSuggestedActionsHooks_ } from '@msinternal/botframework-webchat-redux-store';
+import { type DirectLineCardAction, type WebChatActivity } from 'botframework-webchat-core';
+import { type Dispatch, type SetStateAction } from 'react';
+
+type SuggestedActionsContextType = Readonly<{
+ useSuggestedActions: () => readonly [
+ readonly DirectLineCardAction[],
+ Dispatch>,
+ Readonly<{
+ activity: undefined | WebChatActivity;
+ }>
+ ];
+}>;
+
+const useSuggestedActionsHooks = useSuggestedActionsHooks_ as () => SuggestedActionsContextType;
+
+export default useSuggestedActionsHooks;
diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts
index e6cd568e4a..04f42eee75 100644
--- a/packages/api/src/index.ts
+++ b/packages/api/src/index.ts
@@ -1,11 +1,4 @@
// TODO: Move the pattern to re-export.
-import {
- type LegacyActivityComponentFactory,
- type LegacyActivityMiddleware,
- type LegacyAttachmentMiddleware,
- type LegacyRenderAttachment
-} from '@msinternal/botframework-webchat-api-middleware/legacy';
-import StyleOptions, { StrictStyleOptions } from './StyleOptions';
import defaultStyleOptions from './defaultStyleOptions';
import Composer, { ComposerProps } from './hooks/Composer';
import * as hooks from './hooks/index';
@@ -15,6 +8,13 @@ import { type DebouncedNotification, type DebouncedNotifications } from './hooks
import { type PostActivityFile } from './hooks/useSendFiles';
import { localize } from './localization/Localize';
import normalizeStyleOptions from './normalizeStyleOptions';
+import {
+ type LegacyActivityComponentFactory,
+ type LegacyActivityMiddleware,
+ type LegacyAttachmentMiddleware,
+ type LegacyRenderAttachment
+} from './package-api-middleware/legacy';
+import StyleOptions, { StrictStyleOptions } from './StyleOptions';
import { type ActivityStatusMiddleware, type RenderActivityStatus } from './types/ActivityStatusMiddleware';
import AttachmentForScreenReaderMiddleware, {
AttachmentForScreenReaderComponentFactory
diff --git a/packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx b/packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx
index 8135ee1040..dfd23204ea 100644
--- a/packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx
+++ b/packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx
@@ -1,12 +1,3 @@
-import {
- activityComponent,
- createActivityPolymiddleware,
- type ActivityPolymiddleware
-} from '@msinternal/botframework-webchat-api-middleware';
-import {
- type LegacyActivityMiddleware,
- type LegacyRenderAttachment
-} from '@msinternal/botframework-webchat-api-middleware/legacy';
import { type WebChatActivity } from 'botframework-webchat-core';
import { composeEnhancer } from 'handler-chain';
import { type ReactNode } from 'react';
@@ -25,6 +16,12 @@ import {
type InferInput
} from 'valibot';
+import {
+ activityComponent,
+ createActivityPolymiddleware,
+ type ActivityPolymiddleware
+} from '../package-api-middleware/index';
+import { type LegacyActivityMiddleware, type LegacyRenderAttachment } from '../package-api-middleware/legacy';
import LegacyActivityBridge from './LegacyActivityBridge';
const webChatActivitySchema = custom(value => safeParse(object({}), value).success);
diff --git a/packages/api/src/middleware.ts b/packages/api/src/middleware.ts
index a15784a9a2..e436c09264 100644
--- a/packages/api/src/middleware.ts
+++ b/packages/api/src/middleware.ts
@@ -1,4 +1,4 @@
-export { PolymiddlewareComposer, type Polymiddleware } from '@msinternal/botframework-webchat-api-middleware';
+export { PolymiddlewareComposer, type Polymiddleware } from './package-api-middleware/index';
// Separated import sections for easier templating.
@@ -14,7 +14,7 @@ export {
type ActivityPolymiddlewareProxyProps,
type ActivityPolymiddlewareRenderer,
type ActivityPolymiddlewareRequest
-} from '@msinternal/botframework-webchat-api-middleware';
+} from './package-api-middleware/index';
export {
createErrorBoxPolymiddleware,
@@ -28,6 +28,6 @@ export {
type ErrorBoxPolymiddlewareProxyProps,
type ErrorBoxPolymiddlewareRenderer,
type ErrorBoxPolymiddlewareRequest
-} from '@msinternal/botframework-webchat-api-middleware';
+} from './package-api-middleware/index';
export { default as createActivityPolymiddlewareFromLegacy } from './legacy/createActivityPolymiddlewareFromLegacy';
diff --git a/packages/api-middleware/src/PolymiddlewareComposer.tsx b/packages/api/src/package-api-middleware/PolymiddlewareComposer.tsx
similarity index 100%
rename from packages/api-middleware/src/PolymiddlewareComposer.tsx
rename to packages/api/src/package-api-middleware/PolymiddlewareComposer.tsx
diff --git a/packages/api-middleware/src/activityPolymiddleware.tsx b/packages/api/src/package-api-middleware/activityPolymiddleware.tsx
similarity index 94%
rename from packages/api-middleware/src/activityPolymiddleware.tsx
rename to packages/api/src/package-api-middleware/activityPolymiddleware.tsx
index 39cc8f3bad..f201e0b120 100644
--- a/packages/api-middleware/src/activityPolymiddleware.tsx
+++ b/packages/api/src/package-api-middleware/activityPolymiddleware.tsx
@@ -41,6 +41,8 @@ const activityPolymiddlewareProxyPropsSchema = pipe(
type ActivityPolymiddlewareProxyProps = Readonly>;
// A friendlier version than the organic .
+// Use traditional function for component name.
+// eslint-disable-next-line prefer-arrow-callback
const ActivityPolymiddlewareProxy = memo(function ActivityPolymiddlewareProxy(props: ActivityPolymiddlewareProxyProps) {
const { activity } = validateProps(activityPolymiddlewareProxyPropsSchema, props);
@@ -49,6 +51,8 @@ const ActivityPolymiddlewareProxy = memo(function ActivityPolymiddlewareProxy(pr
return ;
});
+// Use traditional function for component name.
+// eslint-disable-next-line prefer-arrow-callback
const ActivityPolymiddlewareProvider = memo(function ActivityPolymiddlewareProvider({
children,
middleware
diff --git a/packages/api-middleware/src/errorBoxPolymiddleware.tsx b/packages/api/src/package-api-middleware/errorBoxPolymiddleware.tsx
similarity index 96%
rename from packages/api-middleware/src/errorBoxPolymiddleware.tsx
rename to packages/api/src/package-api-middleware/errorBoxPolymiddleware.tsx
index 92575e0352..59dd84143a 100644
--- a/packages/api-middleware/src/errorBoxPolymiddleware.tsx
+++ b/packages/api/src/package-api-middleware/errorBoxPolymiddleware.tsx
@@ -42,6 +42,8 @@ const ErrorBoxPolymiddlewareProxyPropsSchema = pipe(
type ErrorBoxPolymiddlewareProxyProps = Readonly>;
// A friendlier version than the organic .
+// Use traditional function for component name.
+// eslint-disable-next-line prefer-arrow-callback
const ErrorBoxPolymiddlewareProxy = memo(function ErrorBoxPolymiddlewareProxy(props: ErrorBoxPolymiddlewareProxyProps) {
const { error, where } = validateProps(ErrorBoxPolymiddlewareProxyPropsSchema, props);
diff --git a/packages/api-middleware/src/index.ts b/packages/api/src/package-api-middleware/index.ts
similarity index 100%
rename from packages/api-middleware/src/index.ts
rename to packages/api/src/package-api-middleware/index.ts
diff --git a/packages/api-middleware/src/legacy.ts b/packages/api/src/package-api-middleware/legacy.ts
similarity index 100%
rename from packages/api-middleware/src/legacy.ts
rename to packages/api/src/package-api-middleware/legacy.ts
diff --git a/packages/api-middleware/src/legacy/activityMiddleware.ts b/packages/api/src/package-api-middleware/legacy/activityMiddleware.ts
similarity index 100%
rename from packages/api-middleware/src/legacy/activityMiddleware.ts
rename to packages/api/src/package-api-middleware/legacy/activityMiddleware.ts
diff --git a/packages/api-middleware/src/legacy/attachmentMiddleware.ts b/packages/api/src/package-api-middleware/legacy/attachmentMiddleware.ts
similarity index 100%
rename from packages/api-middleware/src/legacy/attachmentMiddleware.ts
rename to packages/api/src/package-api-middleware/legacy/attachmentMiddleware.ts
diff --git a/packages/api-middleware/src/private/ErrorBoundary.tsx b/packages/api/src/package-api-middleware/private/ErrorBoundary.tsx
similarity index 100%
rename from packages/api-middleware/src/private/ErrorBoundary.tsx
rename to packages/api/src/package-api-middleware/private/ErrorBoundary.tsx
diff --git a/packages/api-middleware/src/private/ErrorBoundaryForRenderFunction.tsx b/packages/api/src/package-api-middleware/private/ErrorBoundaryForRenderFunction.tsx
similarity index 86%
rename from packages/api-middleware/src/private/ErrorBoundaryForRenderFunction.tsx
rename to packages/api/src/package-api-middleware/private/ErrorBoundaryForRenderFunction.tsx
index 1d2a25f1ae..d5a2f14da1 100644
--- a/packages/api-middleware/src/private/ErrorBoundaryForRenderFunction.tsx
+++ b/packages/api/src/package-api-middleware/private/ErrorBoundaryForRenderFunction.tsx
@@ -7,6 +7,8 @@ type ErrorBoundaryContextType = {
const ErrorBoundaryContext = createContext({} as any);
+// Use traditional function for component name.
+// eslint-disable-next-line prefer-arrow-callback
const ErrorBoundaryBody = memo(function Body(props: Partial) {
const { renderFunction } = useContext(ErrorBoundaryContext);
@@ -18,6 +20,8 @@ type ErrorBoundaryWrapperProps = ErrorBoundaryContextType & {
readonly where: string;
};
+// Use traditional function for component name.
+// eslint-disable-next-line prefer-arrow-callback
const ErrorBoundaryWrapper = memo(function Wrapper({ children, renderFunction, where }: ErrorBoundaryWrapperProps) {
const context = useMemo(
() => Object.freeze({ renderFunction, where }),
diff --git a/packages/api-middleware/src/private/createErrorBoundaryMiddleware.ts b/packages/api/src/package-api-middleware/private/createErrorBoundaryMiddleware.ts
similarity index 100%
rename from packages/api-middleware/src/private/createErrorBoundaryMiddleware.ts
rename to packages/api/src/package-api-middleware/private/createErrorBoundaryMiddleware.ts
diff --git a/packages/api-middleware/src/private/templatePolymiddleware.check.test.tsx b/packages/api/src/package-api-middleware/private/templatePolymiddleware.check.test.tsx
similarity index 100%
rename from packages/api-middleware/src/private/templatePolymiddleware.check.test.tsx
rename to packages/api/src/package-api-middleware/private/templatePolymiddleware.check.test.tsx
diff --git a/packages/api-middleware/src/private/templatePolymiddleware.test.tsx b/packages/api/src/package-api-middleware/private/templatePolymiddleware.test.tsx
similarity index 100%
rename from packages/api-middleware/src/private/templatePolymiddleware.test.tsx
rename to packages/api/src/package-api-middleware/private/templatePolymiddleware.test.tsx
diff --git a/packages/api-middleware/src/private/templatePolymiddleware.tsx b/packages/api/src/package-api-middleware/private/templatePolymiddleware.tsx
similarity index 98%
rename from packages/api-middleware/src/private/templatePolymiddleware.tsx
rename to packages/api/src/package-api-middleware/private/templatePolymiddleware.tsx
index fa5d3ee7ef..bfc7843dfc 100644
--- a/packages/api-middleware/src/private/templatePolymiddleware.tsx
+++ b/packages/api/src/package-api-middleware/private/templatePolymiddleware.tsx
@@ -92,6 +92,8 @@ function templatePolymiddleware(name: string) {
};
// Bind "init" props.
+ // Use traditional function for component name.
+ // eslint-disable-next-line prefer-arrow-callback
const TemplatedProvider = memo(function TemplatedProvider({
children,
middleware
diff --git a/packages/api-middleware/src/private/unwrapIfValiError.ts b/packages/api/src/package-api-middleware/private/unwrapIfValiError.ts
similarity index 100%
rename from packages/api-middleware/src/private/unwrapIfValiError.ts
rename to packages/api/src/package-api-middleware/private/unwrapIfValiError.ts
diff --git a/packages/api-middleware/src/tsconfig.json b/packages/api/src/package-api-middleware/tsconfig.json
similarity index 100%
rename from packages/api-middleware/src/tsconfig.json
rename to packages/api/src/package-api-middleware/tsconfig.json
diff --git a/packages/api-middleware/src/types/LegacyComponentMiddleware.ts b/packages/api/src/package-api-middleware/types/LegacyComponentMiddleware.ts
similarity index 100%
rename from packages/api-middleware/src/types/LegacyComponentMiddleware.ts
rename to packages/api/src/package-api-middleware/types/LegacyComponentMiddleware.ts
diff --git a/packages/api-middleware/src/types/Polymiddleware.ts b/packages/api/src/package-api-middleware/types/Polymiddleware.ts
similarity index 100%
rename from packages/api-middleware/src/types/Polymiddleware.ts
rename to packages/api/src/package-api-middleware/types/Polymiddleware.ts
diff --git a/packages/base/package.json b/packages/base/package.json
index eae50cbffe..022ad8f5fd 100644
--- a/packages/base/package.json
+++ b/packages/base/package.json
@@ -49,7 +49,8 @@
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
"eslint": "npm run precommit",
"postversion": "cat package.json | jq '.version as $V | (.localDependencies // {} | with_entries(select(.value == \"production\") | { key: .key, value: $V })) as $L1 | (.localDependencies // {} | with_entries(select(.value == \"development\") | { key: .key, value: $V })) as $L2 | ((.dependencies // {}) + $L1 | to_entries | sort_by(.key) | from_entries) as $D1 | ((.devDependencies // {}) + $L2 | to_entries | sort_by(.key) | from_entries) as $D2 | . + { dependencies: $D1, devDependencies: $D2 }' > package-temp.json && mv package-temp.json package.json",
- "precommit": "npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit": "npm run precommit:dependencies && npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit:dependencies": "jq -e '(.dependencies // {}) | length == 0' package.json >/dev/null || { echo \"fail: internal packages must have empty dependencies, save to peerDependencies instead\" >&2; exit 1; }",
"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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
diff --git a/packages/base/tsup.config.ts b/packages/base/tsup.config.ts
index d40ab158ec..bd89fbe721 100644
--- a/packages/base/tsup.config.ts
+++ b/packages/base/tsup.config.ts
@@ -5,8 +5,7 @@ import { applyConfig } from '../../tsup.base.config';
// TODO: [P1] Compute this automatically.
const DEPENDENT_PATHS = [
'api/src/index.ts',
- 'api-middleware/src/index.ts',
- 'bundle/src/boot/exports/full.ts',
+ 'bundle/src/full.ts',
'component/src/index.ts',
'core/src/index.ts',
'debug-theme/src/index.ts',
diff --git a/packages/bundle/.eslintrc.yml b/packages/bundle/.eslintrc.yml
index 120e30c270..76d6b5ec33 100644
--- a/packages/bundle/.eslintrc.yml
+++ b/packages/bundle/.eslintrc.yml
@@ -6,11 +6,3 @@ extends:
# When React Native work land, this package will be consumed by both web browser and React Native, via entrypoints.
env:
browser: true
-
-rules:
- no-restricted-imports:
- - error
- - patterns:
- - group:
- - '@msinternal/botframework-webchat-api-*'
- message: 'To prevent duplicated import, @msinternal/botframework-webchat-api-* is only allowed to import in botframework-webchat-api.'
diff --git a/packages/bundle/.gitignore b/packages/bundle/.gitignore
index 515a303349..124b126d1f 100644
--- a/packages/bundle/.gitignore
+++ b/packages/bundle/.gitignore
@@ -1,5 +1,7 @@
/*.tgz
/dist/
/dist.tmp/
+/exports/
+/exports.tmp/
/node_modules/
/tsup.config.bundled_*.mjs
diff --git a/packages/api-middleware/legacy.js b/packages/bundle/internal.js
similarity index 57%
rename from packages/api-middleware/legacy.js
rename to packages/bundle/internal.js
index 838d60e936..fc627c9a36 100644
--- a/packages/api-middleware/legacy.js
+++ b/packages/bundle/internal.js
@@ -1,3 +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-api-middleware.legacy.js');
+module.exports = require('./dist/botframework-webchat.internal.js');
diff --git a/packages/bundle/package.json b/packages/bundle/package.json
index 272e5f2000..606aae4877 100644
--- a/packages/bundle/package.json
+++ b/packages/bundle/package.json
@@ -2,27 +2,40 @@
"name": "botframework-webchat",
"version": "0.0.0-0",
"description": "A highly-customizable web-based chat client for Azure Bot Services.",
- "main": "./dist/botframework-webchat.js",
- "types": "./dist/botframework-webchat.d.ts",
+ "main": "./exports/botframework-webchat.js",
+ "types": "./exports/botframework-webchat.d.ts",
"exports": {
".": {
"import": {
- "types": "./dist/botframework-webchat.d.mts",
- "default": "./dist/botframework-webchat.mjs"
+ "bundle // TODO: [P*] Think if we should export fat/bundled using conditions": "./dist/botframework-webchat.d.mts",
+ "types": "./exports/botframework-webchat.d.mts",
+ "default": "./exports/botframework-webchat.mjs"
},
"require": {
- "types": "./dist/botframework-webchat.d.ts",
- "default": "./dist/botframework-webchat.js"
+ "types": "./exports/botframework-webchat.d.ts",
+ "default": "./exports/botframework-webchat.js"
+ }
+ },
+ "./internal": {
+ "import": {
+ "bundle // TODO: [P*] Think if we should export fat/bundled using conditions": "./dist/botframework-webchat/internal.d.mts",
+ "types": "./exports/botframework-webchat/internal.d.mts",
+ "default": "./exports/botframework-webchat/internal.mjs"
+ },
+ "require": {
+ "types": "./exports/botframework-webchat/internal.d.ts",
+ "default": "./exports/botframework-webchat/internal.js"
}
},
"./middleware": {
"import": {
- "types": "./dist/botframework-webchat.middleware.d.mts",
- "default": "./dist/botframework-webchat.middleware.mjs"
+ "bundle // TODO: [P*] Think if we should export fat/bundled using conditions": "./dist/botframework-webchat/middleware.d.mts",
+ "types": "./exports/botframework-webchat/middleware.d.mts",
+ "default": "./exports/botframework-webchat/middleware.mjs"
},
"require": {
- "types": "./dist/botframework-webchat.middleware.d.ts",
- "default": "./dist/botframework-webchat.middleware.js"
+ "types": "./exports/botframework-webchat/middleware.d.ts",
+ "default": "./exports/botframework-webchat/middleware.js"
}
}
},
@@ -41,6 +54,9 @@
"homepage": "https://github.com/microsoft/BotFramework-WebChat/#readme",
"files": [
"./dist/**/*",
+ "./exports/**/*",
+ "./internal.js",
+ "./middleware.js",
"./src/**/*"
],
"tsd": {
@@ -55,7 +71,11 @@
}
},
"scripts": {
- "build": "tsup",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "npm run build:validate:import && npm run build:validate:internal",
+ "build:validate:import": "if grep -R -n -P --include='*.mjs' '}\\s*from\\s*\"[^.]' ./dist/; then echo '*.mjs files should not import from other packages' >&2; exit 1; fi",
+ "build:validate:internal": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
@@ -65,18 +85,18 @@
"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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch",
+ "test:tsd": "../../node_modules/.bin/tsd"
},
"localDependencies": {
- "@msinternal/botframework-webchat-base": "development",
- "@msinternal/botframework-webchat-react-valibot": "development",
- "@msinternal/botframework-webchat-tsconfig": "development",
- "@msinternal/isomorphic-react": "development",
- "@msinternal/isomorphic-react-dom": "development",
"botframework-directlinespeech-sdk": "production",
"botframework-webchat-api": "production",
"botframework-webchat-component": "production",
- "botframework-webchat-core": "production"
+ "botframework-webchat-core": "production",
+ "@msinternal/botframework-webchat-base": "development",
+ "@msinternal/botframework-webchat-tsconfig": "development",
+ "@msinternal/isomorphic-react": "development",
+ "@msinternal/isomorphic-react-dom": "development"
},
"pinDependencies": {
"@types/react": [
@@ -105,7 +125,6 @@
]
},
"dependencies": {
- "@babel/runtime": "7.28.2",
"adaptivecards": "3.0.2",
"botframework-directlinejs": "0.15.6",
"botframework-directlinespeech-sdk": "0.0.0-0",
@@ -135,28 +154,11 @@
"whatwg-fetch": "3.6.20"
},
"devDependencies": {
- "@babel/core": "^7.28.0",
- "@babel/plugin-transform-runtime": "^7.28.0",
- "@babel/preset-env": "^7.28.0",
- "@babel/preset-react": "^7.27.1",
- "@babel/preset-typescript": "^7.27.1",
- "@msinternal/botframework-webchat-base": "0.0.0-0",
- "@msinternal/botframework-webchat-react-valibot": "0.0.0-0",
+ "@msinternal/botframework-webchat-base": "^0.0.0-0",
"@msinternal/botframework-webchat-tsconfig": "^0.0.0-0",
"@msinternal/isomorphic-react": "^0.0.0-0",
"@msinternal/isomorphic-react-dom": "^0.0.0-0",
- "@types/dom-speech-recognition": "^0.0.6",
- "@types/mdast": "^4.0.4",
- "@types/node": "^24.1.0",
- "@types/react": "^16.14.65",
- "@types/uuid": "^10.0.0",
- "babel-plugin-istanbul": "^7.0.0",
- "babel-plugin-transform-inline-environment-variables": "^0.4.4",
- "cross-env": "^10.0.0",
- "esbuild": "^0.25.8",
- "micromark-util-types": "^2.0.2",
"tsd": "^0.32.0",
- "type-fest": "^4.41.0",
"typescript": "~5.8.3"
},
"peerDependencies": {
diff --git a/packages/bundle/src/boot/actual/full-es5.ts b/packages/bundle/src/boot/actual/full-es5.ts
deleted file mode 100644
index e97ecb1b59..0000000000
--- a/packages/bundle/src/boot/actual/full-es5.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import defaultCreateDirectLine from '../../createDirectLine';
-import defaultCreateDirectLineAppServiceExtension from '../../createDirectLineAppServiceExtension';
-import buildInfo from '../../buildInfo';
-import ReactWebChat from './full';
-
-buildInfo.set('variant', 'full-es5');
-
-const createDirectLine = (options: Omit[0], 'botAgent'>) => {
- (options as any).botAgent &&
- console.warn(
- 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
- );
-
- return defaultCreateDirectLine({ ...options, botAgent: `WebChat/${buildInfo.version} (ES5)` });
-};
-
-const createDirectLineAppServiceExtension = (
- options: Omit[0], 'botAgent'>
-) => {
- (options as any).botAgent &&
- console.warn(
- 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
- );
-
- return defaultCreateDirectLineAppServiceExtension({ ...options, botAgent: `WebChat/${buildInfo.version} (ES5)` });
-};
-
-// #region Re-exports
-export * from './full';
-// #endregion
-
-// #region Local exports
-export default ReactWebChat;
-
-export { createDirectLine, createDirectLineAppServiceExtension };
-// #endregion
diff --git a/packages/bundle/src/boot/actual/minimal.ts b/packages/bundle/src/boot/actual/minimal.ts
deleted file mode 100644
index 015dc36085..0000000000
--- a/packages/bundle/src/boot/actual/minimal.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import * as apiDecorator from 'botframework-webchat-api/decorator';
-import ReactWebChat from 'botframework-webchat-component';
-import * as componentDecorator from 'botframework-webchat-component/decorator';
-import * as internal from 'botframework-webchat-component/internal';
-
-import buildInfo from '../../buildInfo';
-import defaultCreateDirectLine from '../../createDirectLine';
-import defaultCreateDirectLineAppServiceExtension from '../../createDirectLineAppServiceExtension';
-import coreRenderWebChat from '../../renderWebChat';
-
-buildInfo.set('variant', 'minimal');
-
-const { object: buildInfoObject, version } = buildInfo;
-
-const renderWebChat = coreRenderWebChat.bind(null, ReactWebChat);
-
-const createDirectLine = (options: Omit[0], 'botAgent'>) => {
- (options as any).botAgent &&
- console.warn(
- 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
- );
-
- return defaultCreateDirectLine({ ...options, botAgent: `WebChat/${version} (Minimal)` });
-};
-
-const createDirectLineAppServiceExtension = (
- options: Omit[0], 'botAgent'>
-) => {
- (options as any).botAgent &&
- console.warn(
- 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
- );
-
- return defaultCreateDirectLineAppServiceExtension({ ...options, botAgent: `WebChat/${version} (Minimal)` });
-};
-
-const decorator = Object.freeze({
- ...apiDecorator,
- ...componentDecorator
-});
-
-// #region Re-exports
-export { type StrictStyleOptions, type StyleOptions } from 'botframework-webchat-api';
-export {
- Components,
- concatMiddleware,
- createStyleSet,
- hooks,
- testIds,
- withEmoji
-} from 'botframework-webchat-component';
-export { Constants, createStore, createStoreWithDevTools, createStoreWithOptions } from 'botframework-webchat-core';
-export { default as createBrowserWebSpeechPonyfillFactory } from '../../createBrowserWebSpeechPonyfillFactory';
-// #endregion
-
-// #region Local exports
-export default ReactWebChat;
-
-export {
- buildInfoObject as buildInfo,
- createDirectLine,
- createDirectLineAppServiceExtension,
- decorator,
- internal,
- ReactWebChat,
- renderWebChat,
- version
-};
-// #endregion
diff --git a/packages/bundle/src/boot/bundle/full-es5.ts b/packages/bundle/src/boot/bundle/full-es5.ts
deleted file mode 100644
index 93582ad8c0..0000000000
--- a/packages/bundle/src/boot/bundle/full-es5.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-// Importing polyfills required for IE11/ES5.
-import './polyfill/es5';
-
-import buildInfo from '../../buildInfo';
-import * as actual from '../actual/full-es5';
-import * as middleware from '../actual/middleware';
-
-// Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
-const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
-
-window['WebChat'] = Object.freeze({
- ...window['WebChat'],
- ...exports,
- buildInfo: buildInfo.object,
- middleware
-});
diff --git a/packages/bundle/src/boot/bundle/full.ts b/packages/bundle/src/boot/bundle/full.ts
deleted file mode 100644
index 1283e97e9e..0000000000
--- a/packages/bundle/src/boot/bundle/full.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import './polyfill/modern';
-
-import buildInfo from '../../buildInfo';
-import * as actual from '../actual/full';
-import * as middleware from '../actual/middleware';
-
-// Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
-const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
-
-window['WebChat'] = Object.freeze({
- ...window['WebChat'],
- ...exports,
- buildInfo: buildInfo.object,
- middleware
-});
diff --git a/packages/bundle/src/boot/bundle/minimal.ts b/packages/bundle/src/boot/bundle/minimal.ts
deleted file mode 100644
index 52806ba83b..0000000000
--- a/packages/bundle/src/boot/bundle/minimal.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import buildInfo from '../../buildInfo';
-import * as middleware from '../actual/middleware';
-import * as actual from '../actual/minimal.js';
-
-// Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
-const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
-
-window['WebChat'] = Object.freeze({
- ...window['WebChat'],
- ...exports,
- buildInfo: buildInfo.object,
- middleware
-});
diff --git a/packages/bundle/src/boot/bundle/polyfill/modern.ts b/packages/bundle/src/boot/bundle/polyfill/modern.ts
deleted file mode 100644
index 6eaa475bff..0000000000
--- a/packages/bundle/src/boot/bundle/polyfill/modern.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// Set APIs such as .union and .difference are only available
-// starting from Chrome 122 while we need to support Chrome 110.
-import 'core-js/features/set/index.js';
diff --git a/packages/bundle/src/boot/exports/full-es5.ts b/packages/bundle/src/boot/exports/full-es5.ts
deleted file mode 100644
index 912914a4e9..0000000000
--- a/packages/bundle/src/boot/exports/full-es5.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import ReactWebChat from '../actual/full-es5';
-
-export * from '../actual/full-es5';
-export default ReactWebChat;
diff --git a/packages/bundle/src/boot/exports/full.ts b/packages/bundle/src/boot/exports/full.ts
deleted file mode 100644
index 4863d37d12..0000000000
--- a/packages/bundle/src/boot/exports/full.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import ReactWebChat from '../actual/full';
-
-export * from '../actual/full';
-export default ReactWebChat;
diff --git a/packages/bundle/src/boot/exports/middleware.ts b/packages/bundle/src/boot/exports/middleware.ts
deleted file mode 100644
index f80fea9ba1..0000000000
--- a/packages/bundle/src/boot/exports/middleware.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from '../actual/middleware';
diff --git a/packages/bundle/src/boot/exports/minimal.ts b/packages/bundle/src/boot/exports/minimal.ts
deleted file mode 100644
index 398be1341e..0000000000
--- a/packages/bundle/src/boot/exports/minimal.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import ReactWebChat from '../actual/minimal';
-
-export * from '../actual/minimal';
-export default ReactWebChat;
diff --git a/packages/bundle/src/exports/full.ts b/packages/bundle/src/exports/full.ts
new file mode 100644
index 0000000000..1a9506b09c
--- /dev/null
+++ b/packages/bundle/src/exports/full.ts
@@ -0,0 +1,17 @@
+import buildInfo from '../buildInfo';
+import { ReactWebChat } from '../full';
+import createDirectLineAppServiceExtensionWithBotAgent from '../overrides/createDirectLineAppServiceExtensionWithBotAgent';
+import createDirectLineWithBotAgent from '../overrides/createDirectLineWithBotAgent';
+
+buildInfo.set('variant', 'full');
+
+const { object: buildInfoObject } = buildInfo;
+
+const createDirectLine = createDirectLineWithBotAgent(`WebChat/${buildInfo.version} (Full)`);
+const createDirectLineAppServiceExtension = createDirectLineAppServiceExtensionWithBotAgent(
+ `WebChat/${buildInfo.version} (Full)`
+);
+
+export * from '../full';
+export { buildInfoObject as buildInfo, createDirectLine, createDirectLineAppServiceExtension };
+export default ReactWebChat;
diff --git a/packages/bundle/src/exports/internal.ts b/packages/bundle/src/exports/internal.ts
new file mode 100644
index 0000000000..6c1ef95b97
--- /dev/null
+++ b/packages/bundle/src/exports/internal.ts
@@ -0,0 +1,10 @@
+export { type ActivityMiddleware, type TypingIndicatorMiddleware } from 'botframework-webchat-api';
+export {
+ createActivityBorderMiddleware,
+ createActivityGroupingMiddleware,
+ DecoratorComposer,
+ type DecoratorMiddleware
+} from 'botframework-webchat-api/decorator';
+export { WebChatDecorator } from 'botframework-webchat-component/decorator';
+export { createIconComponent, PartGrouping, useLiveRegion } from 'botframework-webchat-component/internal';
+export { getOrgSchemaMessage, type DirectLineCardAction, type WebChatActivity } from 'botframework-webchat-core';
diff --git a/packages/bundle/src/exports/middleware.ts b/packages/bundle/src/exports/middleware.ts
new file mode 100644
index 0000000000..bc2e76cce0
--- /dev/null
+++ b/packages/bundle/src/exports/middleware.ts
@@ -0,0 +1 @@
+export * from '../middleware';
diff --git a/packages/bundle/src/full.ts b/packages/bundle/src/full.ts
new file mode 100644
index 0000000000..19c01a8a23
--- /dev/null
+++ b/packages/bundle/src/full.ts
@@ -0,0 +1,27 @@
+export {
+ buildInfo,
+ Components,
+ concatMiddleware,
+ Constants,
+ createAdaptiveCardsAttachmentForScreenReaderMiddleware,
+ createAdaptiveCardsAttachmentMiddleware,
+ createBrowserWebSpeechPonyfillFactory,
+ createCognitiveServicesSpeechServicesPonyfillFactory,
+ createDirectLineSpeechAdapters,
+ createStore,
+ createStoreWithDevTools,
+ createStoreWithOptions,
+ createStyleSet,
+ decorator,
+ hooks,
+ internal,
+ ReactWebChat,
+ renderMarkdown,
+ renderWebChat,
+ testIds,
+ version,
+ withEmoji,
+ type AdaptiveCardsPackage,
+ type StrictStyleOptions,
+ type StyleOptions
+} from './package-preset/boot/actual/full';
diff --git a/packages/bundle/src/iife.ts b/packages/bundle/src/iife.ts
new file mode 100644
index 0000000000..d7957c495d
--- /dev/null
+++ b/packages/bundle/src/iife.ts
@@ -0,0 +1,20 @@
+// // Importing polyfills required for IE11/ES5.
+// import './polyfill/es5';
+
+// import * as actual from '../actual/full-es5';
+// import * as middleware from '../actual/middleware';
+// import addVersion from '../addVersion';
+
+// const buildInfo = Object.freeze({ ...actual.buildInfo, moduleFormat: process.env.module_format });
+
+// // Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
+// const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
+
+// window['WebChat'] = Object.freeze({
+// ...window['WebChat'],
+// ...exports,
+// buildInfo,
+// middleware
+// });
+
+// addVersion(buildInfo);
diff --git a/packages/bundle/src/iife/full-es5.ts b/packages/bundle/src/iife/full-es5.ts
new file mode 100644
index 0000000000..9024490566
--- /dev/null
+++ b/packages/bundle/src/iife/full-es5.ts
@@ -0,0 +1,16 @@
+import buildInfo from '../buildInfo';
+import createDirectLineAppServiceExtensionWithBotAgent from '../overrides/createDirectLineAppServiceExtensionWithBotAgent';
+import createDirectLineWithBotAgent from '../overrides/createDirectLineWithBotAgent';
+import './full';
+import './polyfill/es5';
+
+// TODO: [P*] This would add "full" first, then replace it with "full-es5".
+buildInfo.set('variant', 'full-es5');
+
+window['WebChat'] = Object.freeze({
+ ...window['WebChat'],
+ createDirectLine: createDirectLineWithBotAgent(`WebChat/${buildInfo.version} (ES5)`),
+ createDirectLineAppServiceExtension: createDirectLineAppServiceExtensionWithBotAgent(
+ `WebChat/${buildInfo.version} (ES5)`
+ )
+});
diff --git a/packages/bundle/src/iife/full.ts b/packages/bundle/src/iife/full.ts
new file mode 100644
index 0000000000..2e72c14958
--- /dev/null
+++ b/packages/bundle/src/iife/full.ts
@@ -0,0 +1,27 @@
+import buildInfo from '../buildInfo';
+import * as actual from '../full';
+import * as middleware from '../middleware';
+import createDirectLineAppServiceExtensionWithBotAgent from '../overrides/createDirectLineAppServiceExtensionWithBotAgent';
+import createDirectLineWithBotAgent from '../overrides/createDirectLineWithBotAgent';
+
+declare global {
+ interface Window {
+ WebChat: any;
+ }
+}
+
+buildInfo.set('variant', 'full');
+
+// Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
+const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
+
+window['WebChat'] = Object.freeze({
+ ...window['WebChat'],
+ ...exports,
+ buildInfo: buildInfo.object,
+ createDirectLine: createDirectLineWithBotAgent(`WebChat/${buildInfo.version} (Full)`),
+ createDirectLineAppServiceExtension: createDirectLineAppServiceExtensionWithBotAgent(
+ `WebChat/${buildInfo.version} (Full)`
+ ),
+ middleware
+});
diff --git a/packages/bundle/src/iife/minimal.ts b/packages/bundle/src/iife/minimal.ts
new file mode 100644
index 0000000000..c6223298c8
--- /dev/null
+++ b/packages/bundle/src/iife/minimal.ts
@@ -0,0 +1,27 @@
+import buildInfo from '../buildInfo';
+import * as middleware from '../middleware';
+import * as actual from '../minimal';
+import createDirectLineAppServiceExtensionWithBotAgent from '../overrides/createDirectLineAppServiceExtensionWithBotAgent';
+import createDirectLineWithBotAgent from '../overrides/createDirectLineWithBotAgent';
+
+declare global {
+ interface Window {
+ WebChat: any;
+ }
+}
+
+buildInfo.set('variant', 'minimal');
+
+// Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
+const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
+
+window['WebChat'] = Object.freeze({
+ ...window['WebChat'],
+ ...exports,
+ buildInfo: buildInfo.object,
+ createDirectLine: createDirectLineWithBotAgent(`WebChat/${buildInfo.version} (Minimal)`),
+ createDirectLineAppServiceExtension: createDirectLineAppServiceExtensionWithBotAgent(
+ `WebChat/${buildInfo.version} (Minimal)`
+ ),
+ middleware
+});
diff --git a/packages/bundle/src/boot/bundle/polyfill/es5.ts b/packages/bundle/src/iife/polyfill/es5.ts
similarity index 100%
rename from packages/bundle/src/boot/bundle/polyfill/es5.ts
rename to packages/bundle/src/iife/polyfill/es5.ts
diff --git a/packages/bundle/src/iife/polyfill/modern.ts b/packages/bundle/src/iife/polyfill/modern.ts
new file mode 100644
index 0000000000..1932e49c55
--- /dev/null
+++ b/packages/bundle/src/iife/polyfill/modern.ts
@@ -0,0 +1,3 @@
+// // Set APIs such as .union and .difference are only available
+// // starting from Chrome 122 while we need to support Chrome 110.
+// import 'core-js/features/set/index.js';
diff --git a/packages/bundle/src/boot/actual/middleware.ts b/packages/bundle/src/middleware.ts
similarity index 100%
rename from packages/bundle/src/boot/actual/middleware.ts
rename to packages/bundle/src/middleware.ts
diff --git a/packages/bundle/src/minimal.ts b/packages/bundle/src/minimal.ts
new file mode 100644
index 0000000000..3b68c12dea
--- /dev/null
+++ b/packages/bundle/src/minimal.ts
@@ -0,0 +1,21 @@
+export {
+ buildInfo,
+ Components,
+ concatMiddleware,
+ Constants,
+ createBrowserWebSpeechPonyfillFactory,
+ createStore,
+ createStoreWithDevTools,
+ createStoreWithOptions,
+ createStyleSet,
+ decorator,
+ hooks,
+ internal,
+ ReactWebChat,
+ renderWebChat,
+ testIds,
+ version,
+ withEmoji,
+ type StrictStyleOptions,
+ type StyleOptions
+} from './package-preset/boot/actual/minimal';
diff --git a/packages/bundle/src/overrides/createDirectLineAppServiceExtensionWithBotAgent.ts b/packages/bundle/src/overrides/createDirectLineAppServiceExtensionWithBotAgent.ts
new file mode 100644
index 0000000000..9ff61fffda
--- /dev/null
+++ b/packages/bundle/src/overrides/createDirectLineAppServiceExtensionWithBotAgent.ts
@@ -0,0 +1,12 @@
+import defaultCreateDirectLineAppServiceExtension from '../package-preset/createDirectLineAppServiceExtension';
+
+export default function createDirectLineAppServiceExtensionWithBotAgent(botAgent: string) {
+ return (options: Omit[0], 'botAgent'>) => {
+ (options as any).botAgent &&
+ console.warn(
+ 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
+ );
+
+ return defaultCreateDirectLineAppServiceExtension({ ...options, botAgent });
+ };
+}
diff --git a/packages/bundle/src/overrides/createDirectLineWithBotAgent.ts b/packages/bundle/src/overrides/createDirectLineWithBotAgent.ts
new file mode 100644
index 0000000000..2556220b20
--- /dev/null
+++ b/packages/bundle/src/overrides/createDirectLineWithBotAgent.ts
@@ -0,0 +1,12 @@
+import defaultCreateDirectLine from '../package-preset/createDirectLine';
+
+export default function createDirectLineWithBotAgent(botAgent: string) {
+ return (options: Omit[0], 'botAgent'>) => {
+ (options as any).botAgent &&
+ console.warn(
+ 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
+ );
+
+ return defaultCreateDirectLine({ ...options, botAgent });
+ };
+}
diff --git a/packages/bundle/src/AddFullBundle.tsx b/packages/bundle/src/package-preset/AddFullBundle.tsx
similarity index 100%
rename from packages/bundle/src/AddFullBundle.tsx
rename to packages/bundle/src/package-preset/AddFullBundle.tsx
diff --git a/packages/bundle/src/FullComposer.tsx b/packages/bundle/src/package-preset/FullComposer.tsx
similarity index 92%
rename from packages/bundle/src/FullComposer.tsx
rename to packages/bundle/src/package-preset/FullComposer.tsx
index 2d0f440a37..91e97975d3 100644
--- a/packages/bundle/src/FullComposer.tsx
+++ b/packages/bundle/src/package-preset/FullComposer.tsx
@@ -6,7 +6,7 @@ import AddFullBundle, { type AddFullBundleProps } from './AddFullBundle';
const { Composer } = Components;
-type FullComposerProps = ComposerProps & AddFullBundleProps;
+type FullComposerProps = ComposerProps & Omit;
const FullComposer = (props: FullComposerProps) => (
diff --git a/packages/bundle/src/FullReactWebChat.tsx b/packages/bundle/src/package-preset/FullReactWebChat.tsx
similarity index 100%
rename from packages/bundle/src/FullReactWebChat.tsx
rename to packages/bundle/src/package-preset/FullReactWebChat.tsx
diff --git a/packages/bundle/src/__tests__/renderMarkdown.spec.js b/packages/bundle/src/package-preset/__tests__/renderMarkdown.spec.js
similarity index 100%
rename from packages/bundle/src/__tests__/renderMarkdown.spec.js
rename to packages/bundle/src/package-preset/__tests__/renderMarkdown.spec.js
diff --git a/packages/bundle/src/adaptiveCards/AdaptiveCardsComposer.tsx b/packages/bundle/src/package-preset/adaptiveCards/AdaptiveCardsComposer.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/AdaptiveCardsComposer.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/AdaptiveCardsComposer.tsx
diff --git a/packages/bundle/src/adaptiveCards/AdaptiveCardsContext.ts b/packages/bundle/src/package-preset/adaptiveCards/AdaptiveCardsContext.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/AdaptiveCardsContext.ts
rename to packages/bundle/src/package-preset/adaptiveCards/AdaptiveCardsContext.ts
diff --git a/packages/bundle/src/adaptiveCards/AdaptiveCardsStyleOptions.ts b/packages/bundle/src/package-preset/adaptiveCards/AdaptiveCardsStyleOptions.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/AdaptiveCardsStyleOptions.ts
rename to packages/bundle/src/package-preset/adaptiveCards/AdaptiveCardsStyleOptions.ts
diff --git a/packages/bundle/src/adaptiveCards/AdaptiveCardsStyleSet.ts b/packages/bundle/src/package-preset/adaptiveCards/AdaptiveCardsStyleSet.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/AdaptiveCardsStyleSet.ts
rename to packages/bundle/src/package-preset/adaptiveCards/AdaptiveCardsStyleSet.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardAttachment.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardAttachment.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardAttachment.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardAttachment.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardBuilder.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardBuilder.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardBuilder.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardBuilder.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/closest.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/closest.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/closest.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/closest.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/findDOMNodeOwner.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/findDOMNodeOwner.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/findDOMNodeOwner.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/findDOMNodeOwner.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useAdaptiveCardModEffect.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/useAdaptiveCardModEffect.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useAdaptiveCardModEffect.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/useAdaptiveCardModEffect.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useLazyRef.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/useLazyRef.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useLazyRef.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/useLazyRef.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/usePrevious.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/usePrevious.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/usePrevious.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/usePrevious.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useValueRef.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/useValueRef.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useValueRef.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/private/useValueRef.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/useActionShouldBePushButtonModEffect.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/useActionShouldBePushButtonModEffect.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/useActionShouldBePushButtonModEffect.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/useActionShouldBePushButtonModEffect.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/useActiveElementModEffect.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/useActiveElementModEffect.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/useActiveElementModEffect.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/useActiveElementModEffect.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/useDisabledModEffect.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/useDisabledModEffect.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/useDisabledModEffect.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/useDisabledModEffect.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/usePersistValuesModEffect.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/usePersistValuesModEffect.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/usePersistValuesModEffect.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/usePersistValuesModEffect.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/useRoleModEffect.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/useRoleModEffect.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardHacks/useRoleModEffect.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardHacks/useRoleModEffect.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AnimationCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AnimationCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AnimationCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AnimationCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AnimationCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AnimationCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AnimationCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AnimationCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AudioCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AudioCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AudioCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AudioCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/AudioCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/AudioCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/AudioCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/AudioCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/CommonCard.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/CommonCard.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/CommonCard.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/CommonCard.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/HeroCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/HeroCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/HeroCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/HeroCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/HeroCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/HeroCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/HeroCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/HeroCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/OAuthCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/OAuthCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/OAuthCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/OAuthCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/OAuthCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/OAuthCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/OAuthCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/OAuthCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/ReceiptCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/ReceiptCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/ReceiptCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/ReceiptCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/ReceiptCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/ReceiptCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/ReceiptCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/ReceiptCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/SignInCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/SignInCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/SignInCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/SignInCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/SignInCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/SignInCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/SignInCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/SignInCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/ThumbnailCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/ThumbnailCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/ThumbnailCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/ThumbnailCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/ThumbnailCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/ThumbnailCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/ThumbnailCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/ThumbnailCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/VideoCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Attachment/VideoCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/VideoCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/VideoCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Attachment/VideoCardContent.tsx b/packages/bundle/src/package-preset/adaptiveCards/Attachment/VideoCardContent.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/VideoCardContent.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/VideoCardContent.tsx
diff --git a/packages/bundle/src/adaptiveCards/Attachment/private/directLineSchema.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/private/directLineSchema.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/private/directLineSchema.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/private/directLineSchema.ts
diff --git a/packages/bundle/src/adaptiveCards/Attachment/private/renderAdaptiveCard.ts b/packages/bundle/src/package-preset/adaptiveCards/Attachment/private/renderAdaptiveCard.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Attachment/private/renderAdaptiveCard.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Attachment/private/renderAdaptiveCard.ts
diff --git a/packages/bundle/src/adaptiveCards/AttachmentForScreenReader/AdaptiveCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/AttachmentForScreenReader/AdaptiveCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/AttachmentForScreenReader/AdaptiveCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/AttachmentForScreenReader/AdaptiveCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/AttachmentForScreenReader/RichCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/AttachmentForScreenReader/RichCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/AttachmentForScreenReader/RichCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/AttachmentForScreenReader/RichCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/addEventListenerWithUndo.ts b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/addEventListenerWithUndo.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/addEventListenerWithUndo.ts
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/addEventListenerWithUndo.ts
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/bunchUndos.tsx b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/bunchUndos.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/bunchUndos.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/bunchUndos.tsx
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/durableAddClassWithUndo.ts b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/durableAddClassWithUndo.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/durableAddClassWithUndo.ts
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/durableAddClassWithUndo.ts
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/durableDisableInputElementAccessiblyWithUndo.ts b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/durableDisableInputElementAccessiblyWithUndo.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/durableDisableInputElementAccessiblyWithUndo.ts
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/durableDisableInputElementAccessiblyWithUndo.ts
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/private/addClass.tsx b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/private/addClass.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/private/addClass.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/private/addClass.tsx
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/private/getAttributeOrFalse.ts b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/private/getAttributeOrFalse.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/private/getAttributeOrFalse.ts
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/private/getAttributeOrFalse.ts
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/private/noOp.ts b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/private/noOp.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/private/noOp.ts
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/private/noOp.ts
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/private/setOrRemoveAttributeIfFalse.ts b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/private/setOrRemoveAttributeIfFalse.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/private/setOrRemoveAttributeIfFalse.ts
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/private/setOrRemoveAttributeIfFalse.ts
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo.ts b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo.ts
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo.ts
diff --git a/packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/types/UndoFunction.ts b/packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/types/UndoFunction.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/DOMManipulationWithUndo/types/UndoFunction.ts
rename to packages/bundle/src/package-preset/adaptiveCards/DOMManipulationWithUndo/types/UndoFunction.ts
diff --git a/packages/bundle/src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts b/packages/bundle/src/package-preset/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts
diff --git a/packages/bundle/src/adaptiveCards/Styles/StyleSet/AnimationCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Styles/StyleSet/AnimationCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Styles/StyleSet/AnimationCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Styles/StyleSet/AnimationCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Styles/StyleSet/AudioCardAttachment.js b/packages/bundle/src/package-preset/adaptiveCards/Styles/StyleSet/AudioCardAttachment.js
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Styles/StyleSet/AudioCardAttachment.js
rename to packages/bundle/src/package-preset/adaptiveCards/Styles/StyleSet/AudioCardAttachment.js
diff --git a/packages/bundle/src/adaptiveCards/Styles/adaptiveCardHostConfig.ts b/packages/bundle/src/package-preset/adaptiveCards/Styles/adaptiveCardHostConfig.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Styles/adaptiveCardHostConfig.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Styles/adaptiveCardHostConfig.ts
diff --git a/packages/bundle/src/adaptiveCards/Styles/createAdaptiveCardsStyleSet.ts b/packages/bundle/src/package-preset/adaptiveCards/Styles/createAdaptiveCardsStyleSet.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/Styles/createAdaptiveCardsStyleSet.ts
rename to packages/bundle/src/package-preset/adaptiveCards/Styles/createAdaptiveCardsStyleSet.ts
diff --git a/packages/bundle/src/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.tsx b/packages/bundle/src/package-preset/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.tsx
similarity index 100%
rename from packages/bundle/src/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.tsx
diff --git a/packages/bundle/src/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.tsx b/packages/bundle/src/package-preset/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.tsx
similarity index 60%
rename from packages/bundle/src/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.tsx
rename to packages/bundle/src/package-preset/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.tsx
index a831f7d2e7..a9c734ddf8 100644
--- a/packages/bundle/src/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.tsx
+++ b/packages/bundle/src/package-preset/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.tsx
@@ -1,3 +1,5 @@
+/* eslint-disable react/jsx-indent */
+
import React from 'react';
import { AttachmentMiddleware } from 'botframework-webchat-api';
@@ -17,26 +19,36 @@ export default function createAdaptiveCardsAttachmentMiddleware(): AttachmentMid
return () =>
next =>
(...args) => {
- const [{ attachment }] = args;
+ const attachment = args[0]?.attachment;
+
+ if (!attachment || !attachment.content) {
+ return next(...args);
+ }
return attachment.contentType === 'application/vnd.microsoft.card.hero' ? (
) : attachment.contentType === 'application/vnd.microsoft.card.adaptive' ? (
- ) : attachment.contentType === 'application/vnd.microsoft.card.animation' ? (
-
- ) : attachment.contentType === 'application/vnd.microsoft.card.audio' ? (
-
+ ) : attachment.contentType === 'application/vnd.microsoft.card.animation' &&
+ typeof attachment.content === 'object' ? (
+
+ ) : attachment.contentType === 'application/vnd.microsoft.card.audio' &&
+ typeof attachment.content === 'object' ? (
+
) : attachment.contentType === 'application/vnd.microsoft.card.oauth' ? (
- ) : attachment.contentType === 'application/vnd.microsoft.card.receipt' ? (
-
- ) : attachment.contentType === 'application/vnd.microsoft.card.signin' ? (
-
- ) : attachment.contentType === 'application/vnd.microsoft.card.thumbnail' ? (
-
- ) : attachment.contentType === 'application/vnd.microsoft.card.video' ? (
-
+ ) : attachment.contentType === 'application/vnd.microsoft.card.receipt' &&
+ typeof attachment.content === 'object' ? (
+
+ ) : attachment.contentType === 'application/vnd.microsoft.card.signin' &&
+ typeof attachment.content === 'object' ? (
+
+ ) : attachment.contentType === 'application/vnd.microsoft.card.thumbnail' &&
+ typeof attachment.content === 'object' ? (
+
+ ) : attachment.contentType === 'application/vnd.microsoft.card.video' &&
+ typeof attachment.content === 'object' ? (
+
) : (
next(...args)
);
diff --git a/packages/bundle/src/adaptiveCards/defaultStyleOptions.ts b/packages/bundle/src/package-preset/adaptiveCards/defaultStyleOptions.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/defaultStyleOptions.ts
rename to packages/bundle/src/package-preset/adaptiveCards/defaultStyleOptions.ts
diff --git a/packages/bundle/src/adaptiveCards/hooks/internal/useAdaptiveCardsContext.ts b/packages/bundle/src/package-preset/adaptiveCards/hooks/internal/useAdaptiveCardsContext.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/hooks/internal/useAdaptiveCardsContext.ts
rename to packages/bundle/src/package-preset/adaptiveCards/hooks/internal/useAdaptiveCardsContext.ts
diff --git a/packages/bundle/src/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.ts b/packages/bundle/src/package-preset/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.ts
rename to packages/bundle/src/package-preset/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.ts
diff --git a/packages/bundle/src/adaptiveCards/hooks/internal/useUniqueId.ts b/packages/bundle/src/package-preset/adaptiveCards/hooks/internal/useUniqueId.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/hooks/internal/useUniqueId.ts
rename to packages/bundle/src/package-preset/adaptiveCards/hooks/internal/useUniqueId.ts
diff --git a/packages/bundle/src/adaptiveCards/hooks/useAdaptiveCardsHostConfig.ts b/packages/bundle/src/package-preset/adaptiveCards/hooks/useAdaptiveCardsHostConfig.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/hooks/useAdaptiveCardsHostConfig.ts
rename to packages/bundle/src/package-preset/adaptiveCards/hooks/useAdaptiveCardsHostConfig.ts
diff --git a/packages/bundle/src/adaptiveCards/hooks/useAdaptiveCardsPackage.ts b/packages/bundle/src/package-preset/adaptiveCards/hooks/useAdaptiveCardsPackage.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/hooks/useAdaptiveCardsPackage.ts
rename to packages/bundle/src/package-preset/adaptiveCards/hooks/useAdaptiveCardsPackage.ts
diff --git a/packages/bundle/src/adaptiveCards/normalizeStyleOptions.ts b/packages/bundle/src/package-preset/adaptiveCards/normalizeStyleOptions.ts
similarity index 100%
rename from packages/bundle/src/adaptiveCards/normalizeStyleOptions.ts
rename to packages/bundle/src/package-preset/adaptiveCards/normalizeStyleOptions.ts
diff --git a/packages/bundle/src/package-preset/boot/actual/full-es5.ts b/packages/bundle/src/package-preset/boot/actual/full-es5.ts
new file mode 100644
index 0000000000..2682fd5388
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/actual/full-es5.ts
@@ -0,0 +1,33 @@
+// import buildInfo from '../../buildInfo';
+// import defaultCreateDirectLine from '../../createDirectLine';
+// import defaultCreateDirectLineAppServiceExtension from '../../createDirectLineAppServiceExtension';
+
+// buildInfo.set('variant', 'full-es5');
+
+// const createDirectLine = (options: Omit[0], 'botAgent'>) => {
+// (options as any).botAgent &&
+// console.warn(
+// 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
+// );
+
+// return defaultCreateDirectLine({ ...options, botAgent: `WebChat/${buildInfo.version} (ES5)` });
+// };
+
+// const createDirectLineAppServiceExtension = (
+// options: Omit[0], 'botAgent'>
+// ) => {
+// (options as any).botAgent &&
+// console.warn(
+// 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
+// );
+
+// return defaultCreateDirectLineAppServiceExtension({ ...options, botAgent: `WebChat/${buildInfo.version} (ES5)` });
+// };
+
+// // #region Re-exports
+// export * from './full';
+// // #endregion
+
+// // #region Local exports
+// export { createDirectLine, createDirectLineAppServiceExtension };
+// // #endregion
diff --git a/packages/bundle/src/boot/actual/full.ts b/packages/bundle/src/package-preset/boot/actual/full.ts
similarity index 71%
rename from packages/bundle/src/boot/actual/full.ts
rename to packages/bundle/src/package-preset/boot/actual/full.ts
index 3ef23bc76b..b9d3cc8538 100644
--- a/packages/bundle/src/boot/actual/full.ts
+++ b/packages/bundle/src/package-preset/boot/actual/full.ts
@@ -12,8 +12,6 @@ import VideoCardContent from '../../adaptiveCards/Attachment/VideoCardContent';
import useAdaptiveCardsHostConfig from '../../adaptiveCards/hooks/useAdaptiveCardsHostConfig';
import useAdaptiveCardsPackage from '../../adaptiveCards/hooks/useAdaptiveCardsPackage';
import buildInfo from '../../buildInfo';
-import defaultCreateDirectLine from '../../createDirectLine';
-import defaultCreateDirectLineAppServiceExtension from '../../createDirectLineAppServiceExtension';
import useStyleOptions from '../../hooks/useStyleOptions';
import useStyleSet from '../../hooks/useStyleSet';
import coreRenderWebChat from '../../renderWebChat';
@@ -25,26 +23,6 @@ const { object: buildInfoObject, version } = buildInfo;
const renderWebChat = coreRenderWebChat.bind(null, ReactWebChat);
-const createDirectLine = (options: Omit[0], 'botAgent'>) => {
- (options as any).botAgent &&
- console.warn(
- 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
- );
-
- return defaultCreateDirectLine({ ...options, botAgent: `WebChat/${version} (Full)` });
-};
-
-const createDirectLineAppServiceExtension = (
- options: Omit[0], 'botAgent'>
-) => {
- (options as any).botAgent &&
- console.warn(
- 'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'
- );
-
- return defaultCreateDirectLineAppServiceExtension({ ...options, botAgent: `WebChat/${version} (Full)` });
-};
-
const hooks = Object.freeze({
...minimalHooks,
useAdaptiveCardsHostConfig,
@@ -95,16 +73,5 @@ export {
// #endregion
// #region Local exports
-export default ReactWebChat;
-
-export {
- buildInfoObject as buildInfo,
- Components,
- createDirectLine,
- createDirectLineAppServiceExtension,
- hooks,
- ReactWebChat,
- renderWebChat,
- version
-};
+export { buildInfoObject as buildInfo, Components, hooks, ReactWebChat, renderWebChat, version };
// #endregion
diff --git a/packages/bundle/src/package-preset/boot/actual/index.ts b/packages/bundle/src/package-preset/boot/actual/index.ts
new file mode 100644
index 0000000000..6d7afe45d5
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/actual/index.ts
@@ -0,0 +1,2 @@
+export { default as createDirectLine } from '../../createDirectLine';
+export { default as createDirectLineAppServiceExtension } from '../../createDirectLineAppServiceExtension';
diff --git a/packages/bundle/src/package-preset/boot/actual/middleware.ts b/packages/bundle/src/package-preset/boot/actual/middleware.ts
new file mode 100644
index 0000000000..f55c442419
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/actual/middleware.ts
@@ -0,0 +1,30 @@
+// export {
+// activityComponent,
+// ActivityPolymiddlewareProxy,
+// createActivityPolymiddleware,
+// useBuildRenderActivityCallback,
+// type ActivityPolymiddleware,
+// type ActivityPolymiddlewareHandler,
+// type ActivityPolymiddlewareHandlerResult,
+// type ActivityPolymiddlewareProps,
+// type ActivityPolymiddlewareProxyProps,
+// type ActivityPolymiddlewareRenderer,
+// type ActivityPolymiddlewareRequest,
+// type Polymiddleware
+// } from 'botframework-webchat-api/middleware';
+
+// export {
+// createErrorBoxPolymiddleware,
+// errorBoxComponent,
+// ErrorBoxPolymiddlewareProxy,
+// useBuildRenderErrorBoxCallback,
+// type ErrorBoxPolymiddleware,
+// type ErrorBoxPolymiddlewareHandler,
+// type ErrorBoxPolymiddlewareHandlerResult,
+// type ErrorBoxPolymiddlewareProps,
+// type ErrorBoxPolymiddlewareProxyProps,
+// type ErrorBoxPolymiddlewareRenderer,
+// type ErrorBoxPolymiddlewareRequest
+// } from 'botframework-webchat-api/middleware';
+
+// export { createActivityPolymiddlewareFromLegacy } from 'botframework-webchat-api/middleware';
diff --git a/packages/bundle/src/package-preset/boot/actual/minimal.ts b/packages/bundle/src/package-preset/boot/actual/minimal.ts
new file mode 100644
index 0000000000..abc0697510
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/actual/minimal.ts
@@ -0,0 +1,36 @@
+import * as apiDecorator from 'botframework-webchat-api/decorator';
+import ReactWebChat from 'botframework-webchat-component';
+import * as componentDecorator from 'botframework-webchat-component/decorator';
+import * as internal from 'botframework-webchat-component/internal';
+
+import buildInfo from '../../buildInfo';
+import coreRenderWebChat from '../../renderWebChat';
+
+buildInfo.set('variant', 'minimal');
+
+const { object: buildInfoObject, version } = buildInfo;
+
+const renderWebChat = coreRenderWebChat.bind(null, ReactWebChat);
+
+const decorator = Object.freeze({
+ ...apiDecorator,
+ ...componentDecorator
+});
+
+// #region Re-exports
+export { type StrictStyleOptions, type StyleOptions } from 'botframework-webchat-api';
+export {
+ Components,
+ concatMiddleware,
+ createStyleSet,
+ hooks,
+ testIds,
+ withEmoji
+} from 'botframework-webchat-component';
+export { Constants, createStore, createStoreWithDevTools, createStoreWithOptions } from 'botframework-webchat-core';
+export { default as createBrowserWebSpeechPonyfillFactory } from '../../createBrowserWebSpeechPonyfillFactory';
+// #endregion
+
+// #region Local exports
+export { buildInfoObject as buildInfo, decorator, internal, ReactWebChat, renderWebChat, version };
+// #endregion
diff --git a/packages/bundle/src/package-preset/boot/bundle/full-es5.ts b/packages/bundle/src/package-preset/boot/bundle/full-es5.ts
new file mode 100644
index 0000000000..ddb873fc20
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/bundle/full-es5.ts
@@ -0,0 +1,16 @@
+// // Importing polyfills required for IE11/ES5.
+// import './polyfill/es5';
+
+// import buildInfo from '../../buildInfo';
+// import * as actual from '../actual/full-es5';
+// import * as middleware from '../actual/middleware';
+
+// // Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
+// const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
+
+// window['WebChat'] = Object.freeze({
+// ...window['WebChat'],
+// ...exports,
+// buildInfo: buildInfo.object,
+// middleware
+// });
diff --git a/packages/bundle/src/package-preset/boot/bundle/full.ts b/packages/bundle/src/package-preset/boot/bundle/full.ts
new file mode 100644
index 0000000000..1474be7536
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/bundle/full.ts
@@ -0,0 +1,15 @@
+// import './polyfill/modern';
+
+// import buildInfo from '../../buildInfo';
+// import * as actual from '../actual/full';
+// import * as middleware from '../actual/middleware';
+
+// // Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
+// const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
+
+// window['WebChat'] = Object.freeze({
+// ...window['WebChat'],
+// ...exports,
+// buildInfo: buildInfo.object,
+// middleware
+// });
diff --git a/packages/bundle/src/package-preset/boot/bundle/minimal.ts b/packages/bundle/src/package-preset/boot/bundle/minimal.ts
new file mode 100644
index 0000000000..6926970476
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/bundle/minimal.ts
@@ -0,0 +1,13 @@
+// import buildInfo from '../../buildInfo';
+// import * as middleware from '../actual/middleware';
+// import * as actual from '../actual/minimal.js';
+
+// // Until we have a development-specific bundle, we are not shipping createStoreWithDevTools in bundle.
+// const { createStoreWithDevTools: _createStoreWithDevTools, ...exports } = actual;
+
+// window['WebChat'] = Object.freeze({
+// ...window['WebChat'],
+// ...exports,
+// buildInfo: buildInfo.object,
+// middleware
+// });
diff --git a/packages/bundle/src/package-preset/boot/bundle/polyfill/es5.ts b/packages/bundle/src/package-preset/boot/bundle/polyfill/es5.ts
new file mode 100644
index 0000000000..0f8fa241cf
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/bundle/polyfill/es5.ts
@@ -0,0 +1,29 @@
+// // Polyfills for IE11 and other ES5 browsers
+// // To maintain quality, we prefer polyfills without additives
+// // For example, we prefer Promise implementation from "core-js" than "bluebird"
+
+// // To reduce conflicts with hosting app, we should consider using
+// // @babel/plugin-transform-runtime to polyfill in transpiled code directly.
+
+// import 'core-js/features/array/find-index.js';
+// import 'core-js/features/array/find.js';
+// import 'core-js/features/array/from.js';
+// import 'core-js/features/array/includes.js';
+// import 'core-js/features/array/iterator.js';
+// import 'core-js/features/dom-collections/index.js';
+// import 'core-js/features/map/index.js';
+// import 'core-js/features/math/sign.js';
+// import 'core-js/features/number/is-finite.js';
+// import 'core-js/features/object/assign.js';
+// import 'core-js/features/object/entries.js';
+// import 'core-js/features/object/from-entries.js';
+// import 'core-js/features/object/is.js';
+// import 'core-js/features/object/values.js';
+// import 'core-js/features/promise/index.js';
+// import 'core-js/features/promise/finally.js';
+// import 'core-js/features/set/index.js';
+// import 'core-js/features/string/ends-with.js';
+// import 'core-js/features/string/starts-with.js';
+// import 'core-js/features/symbol/index.js';
+// import 'url-search-params-polyfill';
+// import 'whatwg-fetch';
diff --git a/packages/bundle/src/package-preset/boot/bundle/polyfill/modern.ts b/packages/bundle/src/package-preset/boot/bundle/polyfill/modern.ts
new file mode 100644
index 0000000000..1932e49c55
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/bundle/polyfill/modern.ts
@@ -0,0 +1,3 @@
+// // Set APIs such as .union and .difference are only available
+// // starting from Chrome 122 while we need to support Chrome 110.
+// import 'core-js/features/set/index.js';
diff --git a/packages/bundle/src/package-preset/boot/exports/full-es5.ts b/packages/bundle/src/package-preset/boot/exports/full-es5.ts
new file mode 100644
index 0000000000..8c192b74a2
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/exports/full-es5.ts
@@ -0,0 +1,4 @@
+// import ReactWebChat from '../actual/full-es5';
+
+// export * from '../actual/full-es5';
+// export default ReactWebChat;
diff --git a/packages/bundle/src/package-preset/boot/exports/full.ts b/packages/bundle/src/package-preset/boot/exports/full.ts
new file mode 100644
index 0000000000..73b3d64f85
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/exports/full.ts
@@ -0,0 +1,4 @@
+// import ReactWebChat from '../actual/full';
+
+// export * from '../actual/full';
+// export default ReactWebChat;
diff --git a/packages/bundle/src/package-preset/boot/exports/middleware.ts b/packages/bundle/src/package-preset/boot/exports/middleware.ts
new file mode 100644
index 0000000000..80244e2ab2
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/exports/middleware.ts
@@ -0,0 +1 @@
+// export * from '../actual/middleware';
diff --git a/packages/bundle/src/package-preset/boot/exports/minimal.ts b/packages/bundle/src/package-preset/boot/exports/minimal.ts
new file mode 100644
index 0000000000..4e01d67b7e
--- /dev/null
+++ b/packages/bundle/src/package-preset/boot/exports/minimal.ts
@@ -0,0 +1,4 @@
+// import ReactWebChat from '../actual/minimal';
+
+// export * from '../actual/minimal';
+// export default ReactWebChat;
diff --git a/packages/bundle/src/package-preset/buildInfo.ts b/packages/bundle/src/package-preset/buildInfo.ts
new file mode 100644
index 0000000000..8b25a6454a
--- /dev/null
+++ b/packages/bundle/src/package-preset/buildInfo.ts
@@ -0,0 +1,9 @@
+import { createBuildInfo } from '@msinternal/botframework-webchat-base/utils';
+
+const buildInfo = createBuildInfo('botframework-webchat:core');
+
+buildInfo.set('buildTool', globalThis.WEB_CHAT_BUILD_INFO_BUILD_TOOL);
+buildInfo.set('moduleFormat', globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT);
+buildInfo.set('version', globalThis.WEB_CHAT_BUILD_INFO_VERSION);
+
+export default buildInfo;
diff --git a/packages/bundle/src/codeHighlighter/ShikiComposer.tsx b/packages/bundle/src/package-preset/codeHighlighter/ShikiComposer.tsx
similarity index 100%
rename from packages/bundle/src/codeHighlighter/ShikiComposer.tsx
rename to packages/bundle/src/package-preset/codeHighlighter/ShikiComposer.tsx
diff --git a/packages/bundle/src/codeHighlighter/shiki.ts b/packages/bundle/src/package-preset/codeHighlighter/shiki.ts
similarity index 100%
rename from packages/bundle/src/codeHighlighter/shiki.ts
rename to packages/bundle/src/package-preset/codeHighlighter/shiki.ts
diff --git a/packages/bundle/src/createBrowserWebSpeechPonyfillFactory.ts b/packages/bundle/src/package-preset/createBrowserWebSpeechPonyfillFactory.ts
similarity index 100%
rename from packages/bundle/src/createBrowserWebSpeechPonyfillFactory.ts
rename to packages/bundle/src/package-preset/createBrowserWebSpeechPonyfillFactory.ts
diff --git a/packages/bundle/src/createCognitiveServicesSpeechServicesPonyfillFactory.spec.js b/packages/bundle/src/package-preset/createCognitiveServicesSpeechServicesPonyfillFactory.spec.js
similarity index 100%
rename from packages/bundle/src/createCognitiveServicesSpeechServicesPonyfillFactory.spec.js
rename to packages/bundle/src/package-preset/createCognitiveServicesSpeechServicesPonyfillFactory.spec.js
diff --git a/packages/bundle/src/createCognitiveServicesSpeechServicesPonyfillFactory.ts b/packages/bundle/src/package-preset/createCognitiveServicesSpeechServicesPonyfillFactory.ts
similarity index 100%
rename from packages/bundle/src/createCognitiveServicesSpeechServicesPonyfillFactory.ts
rename to packages/bundle/src/package-preset/createCognitiveServicesSpeechServicesPonyfillFactory.ts
diff --git a/packages/bundle/src/createDirectLine.ts b/packages/bundle/src/package-preset/createDirectLine.ts
similarity index 100%
rename from packages/bundle/src/createDirectLine.ts
rename to packages/bundle/src/package-preset/createDirectLine.ts
diff --git a/packages/bundle/src/createDirectLineAppServiceExtension.ts b/packages/bundle/src/package-preset/createDirectLineAppServiceExtension.ts
similarity index 100%
rename from packages/bundle/src/createDirectLineAppServiceExtension.ts
rename to packages/bundle/src/package-preset/createDirectLineAppServiceExtension.ts
diff --git a/packages/bundle/src/createDirectLineSpeechAdapters.ts b/packages/bundle/src/package-preset/createDirectLineSpeechAdapters.ts
similarity index 100%
rename from packages/bundle/src/createDirectLineSpeechAdapters.ts
rename to packages/bundle/src/package-preset/createDirectLineSpeechAdapters.ts
diff --git a/packages/bundle/src/createFullStyleSet.ts b/packages/bundle/src/package-preset/createFullStyleSet.ts
similarity index 100%
rename from packages/bundle/src/createFullStyleSet.ts
rename to packages/bundle/src/package-preset/createFullStyleSet.ts
diff --git a/packages/bundle/src/package-preset/env.d.ts b/packages/bundle/src/package-preset/env.d.ts
new file mode 100644
index 0000000000..082b9e9048
--- /dev/null
+++ b/packages/bundle/src/package-preset/env.d.ts
@@ -0,0 +1,9 @@
+// For adding things to `globalThis`, TypeScript need `var`, not `const` or `let`.
+/* eslint-disable no-var */
+declare global {
+ var WEB_CHAT_BUILD_INFO_BUILD_TOOL: string | undefined;
+ var WEB_CHAT_BUILD_INFO_MODULE_FORMAT: string | undefined;
+ var WEB_CHAT_BUILD_INFO_VERSION: string | undefined;
+}
+
+export {};
diff --git a/packages/bundle/src/fullBundleDefaultStyleOptions.ts b/packages/bundle/src/package-preset/fullBundleDefaultStyleOptions.ts
similarity index 100%
rename from packages/bundle/src/fullBundleDefaultStyleOptions.ts
rename to packages/bundle/src/package-preset/fullBundleDefaultStyleOptions.ts
diff --git a/packages/bundle/src/hooks/useStyleOptions.ts b/packages/bundle/src/package-preset/hooks/useStyleOptions.ts
similarity index 100%
rename from packages/bundle/src/hooks/useStyleOptions.ts
rename to packages/bundle/src/package-preset/hooks/useStyleOptions.ts
diff --git a/packages/bundle/src/hooks/useStyleSet.ts b/packages/bundle/src/package-preset/hooks/useStyleSet.ts
similarity index 100%
rename from packages/bundle/src/hooks/useStyleSet.ts
rename to packages/bundle/src/package-preset/hooks/useStyleSet.ts
diff --git a/packages/bundle/src/markdown/createHTMLContentTransformMiddleware.ts b/packages/bundle/src/package-preset/markdown/createHTMLContentTransformMiddleware.ts
similarity index 100%
rename from packages/bundle/src/markdown/createHTMLContentTransformMiddleware.ts
rename to packages/bundle/src/package-preset/markdown/createHTMLContentTransformMiddleware.ts
diff --git a/packages/bundle/src/markdown/mathExtension/constants.ts b/packages/bundle/src/package-preset/markdown/mathExtension/constants.ts
similarity index 100%
rename from packages/bundle/src/markdown/mathExtension/constants.ts
rename to packages/bundle/src/package-preset/markdown/mathExtension/constants.ts
diff --git a/packages/bundle/src/markdown/mathExtension/index.ts b/packages/bundle/src/package-preset/markdown/mathExtension/index.ts
similarity index 100%
rename from packages/bundle/src/markdown/mathExtension/index.ts
rename to packages/bundle/src/package-preset/markdown/mathExtension/index.ts
diff --git a/packages/bundle/src/markdown/mathExtension/math.ts b/packages/bundle/src/package-preset/markdown/mathExtension/math.ts
similarity index 100%
rename from packages/bundle/src/markdown/mathExtension/math.ts
rename to packages/bundle/src/package-preset/markdown/mathExtension/math.ts
diff --git a/packages/bundle/src/markdown/mathExtension/mathHtml.ts b/packages/bundle/src/package-preset/markdown/mathExtension/mathHtml.ts
similarity index 100%
rename from packages/bundle/src/markdown/mathExtension/mathHtml.ts
rename to packages/bundle/src/package-preset/markdown/mathExtension/mathHtml.ts
diff --git a/packages/bundle/src/markdown/mathExtension/tokenizer.ts b/packages/bundle/src/package-preset/markdown/mathExtension/tokenizer.ts
similarity index 100%
rename from packages/bundle/src/markdown/mathExtension/tokenizer.ts
rename to packages/bundle/src/package-preset/markdown/mathExtension/tokenizer.ts
diff --git a/packages/bundle/src/markdown/middleware/createCodeBlockMiddleware.ts b/packages/bundle/src/package-preset/markdown/middleware/createCodeBlockMiddleware.ts
similarity index 100%
rename from packages/bundle/src/markdown/middleware/createCodeBlockMiddleware.ts
rename to packages/bundle/src/package-preset/markdown/middleware/createCodeBlockMiddleware.ts
diff --git a/packages/bundle/src/markdown/middleware/createSanitizeMiddleware.ts b/packages/bundle/src/package-preset/markdown/middleware/createSanitizeMiddleware.ts
similarity index 100%
rename from packages/bundle/src/markdown/middleware/createSanitizeMiddleware.ts
rename to packages/bundle/src/package-preset/markdown/middleware/createSanitizeMiddleware.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.ariaLabel.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.ariaLabel.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.ariaLabel.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.ariaLabel.spec.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.asButton.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.asButton.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.asButton.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.asButton.spec.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.className.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.className.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.className.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.className.spec.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.iconClassName.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.iconClassName.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.iconClassName.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.iconClassName.spec.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.rel.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.rel.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.rel.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.rel.spec.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.selector.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.selector.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.selector.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.selector.spec.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.target.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.target.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.target.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.target.spec.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.title.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.title.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.title.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.title.spec.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.ts
diff --git a/packages/bundle/src/markdown/private/betterLinkDocumentMod.wrapZeroWidthSpace.spec.ts b/packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.wrapZeroWidthSpace.spec.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/betterLinkDocumentMod.wrapZeroWidthSpace.spec.ts
rename to packages/bundle/src/package-preset/markdown/private/betterLinkDocumentMod.wrapZeroWidthSpace.spec.ts
diff --git a/packages/bundle/src/markdown/private/codeBlockDocumentMod.ts b/packages/bundle/src/package-preset/markdown/private/codeBlockDocumentMod.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/codeBlockDocumentMod.ts
rename to packages/bundle/src/package-preset/markdown/private/codeBlockDocumentMod.ts
diff --git a/packages/bundle/src/markdown/private/iterateLinkDefinitions.ts b/packages/bundle/src/package-preset/markdown/private/iterateLinkDefinitions.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/iterateLinkDefinitions.ts
rename to packages/bundle/src/package-preset/markdown/private/iterateLinkDefinitions.ts
diff --git a/packages/bundle/src/markdown/private/respectCRLF.ts b/packages/bundle/src/package-preset/markdown/private/respectCRLF.ts
similarity index 100%
rename from packages/bundle/src/markdown/private/respectCRLF.ts
rename to packages/bundle/src/package-preset/markdown/private/respectCRLF.ts
diff --git a/packages/bundle/src/markdown/renderMarkdown.ts b/packages/bundle/src/package-preset/markdown/renderMarkdown.ts
similarity index 100%
rename from packages/bundle/src/markdown/renderMarkdown.ts
rename to packages/bundle/src/package-preset/markdown/renderMarkdown.ts
diff --git a/packages/bundle/src/renderWebChat.tsx b/packages/bundle/src/package-preset/renderWebChat.tsx
similarity index 64%
rename from packages/bundle/src/renderWebChat.tsx
rename to packages/bundle/src/package-preset/renderWebChat.tsx
index a702bdd147..56ac550d18 100644
--- a/packages/bundle/src/renderWebChat.tsx
+++ b/packages/bundle/src/package-preset/renderWebChat.tsx
@@ -1,6 +1,6 @@
import React, { ComponentType } from 'react';
-import ReactDOM from 'react-dom';
+import { render } from 'react-dom';
export default function renderWebChat(ReactWebChat: ComponentType, props: any, element: HTMLElement): void {
- ReactDOM.render(, element);
+ render(, element);
}
diff --git a/packages/bundle/src/speech/CustomAudioInputStream.ts b/packages/bundle/src/package-preset/speech/CustomAudioInputStream.ts
similarity index 100%
rename from packages/bundle/src/speech/CustomAudioInputStream.ts
rename to packages/bundle/src/package-preset/speech/CustomAudioInputStream.ts
diff --git a/packages/bundle/src/speech/bytesPerSample.ts b/packages/bundle/src/package-preset/speech/bytesPerSample.ts
similarity index 100%
rename from packages/bundle/src/speech/bytesPerSample.ts
rename to packages/bundle/src/package-preset/speech/bytesPerSample.ts
diff --git a/packages/bundle/src/speech/createAudioConfig.spec.js b/packages/bundle/src/package-preset/speech/createAudioConfig.spec.js
similarity index 100%
rename from packages/bundle/src/speech/createAudioConfig.spec.js
rename to packages/bundle/src/package-preset/speech/createAudioConfig.spec.js
diff --git a/packages/bundle/src/speech/createAudioConfig.ts b/packages/bundle/src/package-preset/speech/createAudioConfig.ts
similarity index 100%
rename from packages/bundle/src/speech/createAudioConfig.ts
rename to packages/bundle/src/package-preset/speech/createAudioConfig.ts
diff --git a/packages/bundle/src/speech/createAudioContext.ts b/packages/bundle/src/package-preset/speech/createAudioContext.ts
similarity index 100%
rename from packages/bundle/src/speech/createAudioContext.ts
rename to packages/bundle/src/package-preset/speech/createAudioContext.ts
diff --git a/packages/bundle/src/speech/createMicrophoneAudioConfigAndAudioContext.ts b/packages/bundle/src/package-preset/speech/createMicrophoneAudioConfigAndAudioContext.ts
similarity index 100%
rename from packages/bundle/src/speech/createMicrophoneAudioConfigAndAudioContext.ts
rename to packages/bundle/src/package-preset/speech/createMicrophoneAudioConfigAndAudioContext.ts
diff --git a/packages/bundle/src/speech/getUserMedia.ts b/packages/bundle/src/package-preset/speech/getUserMedia.ts
similarity index 100%
rename from packages/bundle/src/speech/getUserMedia.ts
rename to packages/bundle/src/package-preset/speech/getUserMedia.ts
diff --git a/packages/bundle/src/types/AdaptiveCardsPackage.ts b/packages/bundle/src/package-preset/types/AdaptiveCardsPackage.ts
similarity index 100%
rename from packages/bundle/src/types/AdaptiveCardsPackage.ts
rename to packages/bundle/src/package-preset/types/AdaptiveCardsPackage.ts
diff --git a/packages/bundle/src/types/CognitiveServicesAudioOutputFormat.ts b/packages/bundle/src/package-preset/types/CognitiveServicesAudioOutputFormat.ts
similarity index 100%
rename from packages/bundle/src/types/CognitiveServicesAudioOutputFormat.ts
rename to packages/bundle/src/package-preset/types/CognitiveServicesAudioOutputFormat.ts
diff --git a/packages/bundle/src/types/CognitiveServicesCredentials.ts b/packages/bundle/src/package-preset/types/CognitiveServicesCredentials.ts
similarity index 100%
rename from packages/bundle/src/types/CognitiveServicesCredentials.ts
rename to packages/bundle/src/package-preset/types/CognitiveServicesCredentials.ts
diff --git a/packages/bundle/src/types/CognitiveServicesTextNormalization.ts b/packages/bundle/src/package-preset/types/CognitiveServicesTextNormalization.ts
similarity index 100%
rename from packages/bundle/src/types/CognitiveServicesTextNormalization.ts
rename to packages/bundle/src/package-preset/types/CognitiveServicesTextNormalization.ts
diff --git a/packages/bundle/src/types/FullBundleStyleOptions.ts b/packages/bundle/src/package-preset/types/FullBundleStyleOptions.ts
similarity index 100%
rename from packages/bundle/src/types/FullBundleStyleOptions.ts
rename to packages/bundle/src/package-preset/types/FullBundleStyleOptions.ts
diff --git a/packages/bundle/src/useComposerProps.ts b/packages/bundle/src/package-preset/useComposerProps.ts
similarity index 100%
rename from packages/bundle/src/useComposerProps.ts
rename to packages/bundle/src/package-preset/useComposerProps.ts
diff --git a/packages/bundle/src/tsconfig.json b/packages/bundle/src/tsconfig.json
index 5b8b7a3ac7..723859c2d6 100644
--- a/packages/bundle/src/tsconfig.json
+++ b/packages/bundle/src/tsconfig.json
@@ -1,6 +1,12 @@
{
"compilerOptions": {
- "types": ["dom-speech-recognition"]
+ "types": ["dom-speech-recognition"],
+
+ // Remove this section once all files are TypeScript.
+ // #region Allow JS
+ "allowJs": true,
+ "checkJs": false
+ // #endregion
},
"extends": "@msinternal/botframework-webchat-tsconfig/legacy"
}
diff --git a/packages/bundle/test-d/fail-once/create-direct-line-invalid-bot-agent.test-d.tsx b/packages/bundle/test-d/fail-once/create-direct-line-invalid-bot-agent.test-d.tsx
index 41356f9fa1..cedad943a7 100644
--- a/packages/bundle/test-d/fail-once/create-direct-line-invalid-bot-agent.test-d.tsx
+++ b/packages/bundle/test-d/fail-once/create-direct-line-invalid-bot-agent.test-d.tsx
@@ -2,7 +2,7 @@ import '../setup';
import { expectNotAssignable } from 'tsd';
-import { createDirectLine } from '../../src/boot/exports/full';
+import { createDirectLine } from '../../src/exports/full';
// "botAgent" is a forbidden option.
type CreateDirectLineInit = Parameters[0];
diff --git a/packages/bundle/test-d/fail-once/create-direct-line-invalid-option.test-d.tsx b/packages/bundle/test-d/fail-once/create-direct-line-invalid-option.test-d.tsx
index 16ad436c62..2bfb8de6a7 100644
--- a/packages/bundle/test-d/fail-once/create-direct-line-invalid-option.test-d.tsx
+++ b/packages/bundle/test-d/fail-once/create-direct-line-invalid-option.test-d.tsx
@@ -2,7 +2,7 @@ import '../setup';
import { expectNotAssignable } from 'tsd';
-import { createDirectLine } from '../../src/boot/exports/full';
+import { createDirectLine } from '../../src/exports/full';
type CreateDirectLineInit = Parameters[0];
diff --git a/packages/bundle/test-d/fail-once/invalid-prop-type-dir.test-d.tsx b/packages/bundle/test-d/fail-once/invalid-prop-type-dir.test-d.tsx
index ade2151bd3..cb4f529864 100644
--- a/packages/bundle/test-d/fail-once/invalid-prop-type-dir.test-d.tsx
+++ b/packages/bundle/test-d/fail-once/invalid-prop-type-dir.test-d.tsx
@@ -3,7 +3,7 @@ import '../setup';
import { type ComponentType } from 'react';
import { expectNotAssignable } from 'tsd';
-import ReactWebChat from '../../src/boot/exports/full';
+import ReactWebChat from '../../src/exports/full';
type PropsOf = T extends ComponentType ? P : never;
diff --git a/packages/bundle/test-d/fail-once/invalid-style-options-suggested-actions-stacked-overflow.test-d.ts b/packages/bundle/test-d/fail-once/invalid-style-options-suggested-actions-stacked-overflow.test-d.ts
index 4d03d6e534..e15f16bb90 100644
--- a/packages/bundle/test-d/fail-once/invalid-style-options-suggested-actions-stacked-overflow.test-d.ts
+++ b/packages/bundle/test-d/fail-once/invalid-style-options-suggested-actions-stacked-overflow.test-d.ts
@@ -2,7 +2,7 @@ import '../setup';
import { expectNotAssignable } from 'tsd';
-import { createStyleSet } from '../../src/boot/exports/full';
+import { createStyleSet } from '../../src/exports/full';
type CreateStyleSetInit = Parameters[0];
diff --git a/packages/bundle/test-d/fail-once/invalid-type-for-use-style-options.test-d.tsx b/packages/bundle/test-d/fail-once/invalid-type-for-use-style-options.test-d.tsx
index da5dcbcac6..412a057e78 100644
--- a/packages/bundle/test-d/fail-once/invalid-type-for-use-style-options.test-d.tsx
+++ b/packages/bundle/test-d/fail-once/invalid-type-for-use-style-options.test-d.tsx
@@ -2,7 +2,7 @@ import '../setup';
import { expectNotAssignable } from 'tsd';
-import { hooks } from '../../src/boot/exports/full';
+import { hooks } from '../../src/exports/full';
const [_styleOptions] = hooks.useStyleOptions();
diff --git a/packages/bundle/test-d/fail-once/no-children-for-react-web-chat-in-minimal.test-d.tsx b/packages/bundle/test-d/fail-once/no-children-for-react-web-chat-in-minimal.test-d.tsx
index 8b4bf6ad31..8d55ece49b 100644
--- a/packages/bundle/test-d/fail-once/no-children-for-react-web-chat-in-minimal.test-d.tsx
+++ b/packages/bundle/test-d/fail-once/no-children-for-react-web-chat-in-minimal.test-d.tsx
@@ -4,7 +4,7 @@ import { expectNotAssignable } from 'tsd';
import React, { type ComponentType } from 'react';
-import ReactWebChat from '../../src/boot/exports/full';
+import ReactWebChat from '../../src/exports/full';
type PropsOf = T extends ComponentType ? P : never;
diff --git a/packages/bundle/test-d/fail-once/no-children-for-react-web-chat.test-d.tsx b/packages/bundle/test-d/fail-once/no-children-for-react-web-chat.test-d.tsx
index 8b4bf6ad31..8d55ece49b 100644
--- a/packages/bundle/test-d/fail-once/no-children-for-react-web-chat.test-d.tsx
+++ b/packages/bundle/test-d/fail-once/no-children-for-react-web-chat.test-d.tsx
@@ -4,7 +4,7 @@ import { expectNotAssignable } from 'tsd';
import React, { type ComponentType } from 'react';
-import ReactWebChat from '../../src/boot/exports/full';
+import ReactWebChat from '../../src/exports/full';
type PropsOf = T extends ComponentType ? P : never;
diff --git a/packages/bundle/test-d/fail-once/no-full-bundle-style-options-in-minimal-for-hooks.test-d.ts b/packages/bundle/test-d/fail-once/no-full-bundle-style-options-in-minimal-for-hooks.test-d.ts
deleted file mode 100644
index f85cc5549d..0000000000
--- a/packages/bundle/test-d/fail-once/no-full-bundle-style-options-in-minimal-for-hooks.test-d.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import '../setup';
-
-import { expectNotAssignable } from 'tsd';
-
-import { hooks } from '../../src/boot/exports/minimal';
-
-type StyleOptions = ReturnType[0];
-
-// const [styleOptions] = hooks.useStyleOptions();
-
-expectNotAssignable({ cardEmphasisBackgroundColor: 'black' });
-
-// Equivalent to: styleOptions.cardEmphasisBackgroundColor = 'black';
diff --git a/packages/bundle/test-d/fail-once/no-full-bundle-style-options-in-minimal.test-d.ts b/packages/bundle/test-d/fail-once/no-full-bundle-style-options-in-minimal.test-d.ts
deleted file mode 100644
index 46a6180aa6..0000000000
--- a/packages/bundle/test-d/fail-once/no-full-bundle-style-options-in-minimal.test-d.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import '../setup';
-
-import { expectNotAssignable } from 'tsd';
-
-import { createStyleSet } from '../../src/boot/exports/minimal';
-
-type CreateStyleSetInit = Parameters[0];
-
-// "cardEmphasisBackgroundColor" is a style options only available in full bundle.
-
-expectNotAssignable({ cardEmphasisBackgroundColor: 'orange' });
-
-// Equivalent to: createStyleSet({ cardEmphasisBackgroundColor: 'orange' });
diff --git a/packages/bundle/test-d/pass/additional-style-options-in-full.test-d.ts b/packages/bundle/test-d/pass/additional-style-options-in-full.test-d.ts
index c2d019668f..ba2d63f0ec 100644
--- a/packages/bundle/test-d/pass/additional-style-options-in-full.test-d.ts
+++ b/packages/bundle/test-d/pass/additional-style-options-in-full.test-d.ts
@@ -1,5 +1,5 @@
import '../setup';
-import { createStyleSet } from '../../src/boot/exports/full';
+import { createStyleSet } from '../../src/exports/full';
createStyleSet({ cardEmphasisBackgroundColor: 'orange' });
diff --git a/packages/bundle/test-d/pass/composition-with-store.test-d.tsx b/packages/bundle/test-d/pass/composition-with-store.test-d.tsx
index b23bfd463d..11f1d07ad4 100644
--- a/packages/bundle/test-d/pass/composition-with-store.test-d.tsx
+++ b/packages/bundle/test-d/pass/composition-with-store.test-d.tsx
@@ -3,7 +3,7 @@ import '../setup';
import React from 'react';
import ReactDOM from 'react-dom';
-import { Components, createStore } from '../../src/boot/exports/full';
+import { Components, createStore } from '../../src/exports/full';
const { BasicWebChat, Composer } = Components;
diff --git a/packages/bundle/test-d/pass/correct-type-dir.test-d.tsx b/packages/bundle/test-d/pass/correct-type-dir.test-d.tsx
index 4e42ed0f1f..72290ad7df 100644
--- a/packages/bundle/test-d/pass/correct-type-dir.test-d.tsx
+++ b/packages/bundle/test-d/pass/correct-type-dir.test-d.tsx
@@ -2,7 +2,7 @@ import '../setup';
import React from 'react';
-import ReactWebChat from '../../src/boot/exports/full';
+import ReactWebChat from '../../src/exports/full';
// eslint-disable-next-line react/jsx-indent
;
diff --git a/packages/bundle/test-d/pass/import-component-send-text-box.test-d.tsx b/packages/bundle/test-d/pass/import-component-send-text-box.test-d.tsx
index a310f3f229..5071418587 100644
--- a/packages/bundle/test-d/pass/import-component-send-text-box.test-d.tsx
+++ b/packages/bundle/test-d/pass/import-component-send-text-box.test-d.tsx
@@ -2,7 +2,7 @@ import '../setup';
import React from 'react';
-import { Components } from '../../src/boot/exports/full';
+import { Components } from '../../src/exports/full';
const { SendTextBox } = Components;
diff --git a/packages/bundle/test-d/pass/import-create-direct-line.test-d.tsx b/packages/bundle/test-d/pass/import-create-direct-line.test-d.tsx
index 1bd321c4fb..92d82edc8a 100644
--- a/packages/bundle/test-d/pass/import-create-direct-line.test-d.tsx
+++ b/packages/bundle/test-d/pass/import-create-direct-line.test-d.tsx
@@ -1,5 +1,5 @@
import '../setup';
-import { createDirectLine } from '../../src/boot/exports/full';
+import { createDirectLine } from '../../src/exports/full';
createDirectLine({ token: 'faketoken' });
diff --git a/packages/bundle/test-d/pass/render-with-minimal-bundle.test-d.tsx b/packages/bundle/test-d/pass/render-with-minimal-bundle.test-d.tsx
deleted file mode 100644
index 96ffcdec21..0000000000
--- a/packages/bundle/test-d/pass/render-with-minimal-bundle.test-d.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import '../setup';
-
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-import ReactWebChat, { createDirectLine } from '../../src/boot/exports/minimal';
-
-const directLine = createDirectLine({ token: '...' });
-const styleOptions = { accent: 'black' };
-
-ReactDOM.render(, document.getElementById('app'));
diff --git a/packages/bundle/test-d/pass/render-with-store.test-d.tsx b/packages/bundle/test-d/pass/render-with-store.test-d.tsx
index b50a77822d..66dead8343 100644
--- a/packages/bundle/test-d/pass/render-with-store.test-d.tsx
+++ b/packages/bundle/test-d/pass/render-with-store.test-d.tsx
@@ -3,7 +3,7 @@ import '../setup';
import React from 'react';
import ReactDOM from 'react-dom';
-import { Components, createStore } from '../../src/boot/exports/full';
+import { Components, createStore } from '../../src/exports/full';
const { Composer } = Components;
diff --git a/packages/bundle/test-d/pass/render-with-style-options.test-d.tsx b/packages/bundle/test-d/pass/render-with-style-options.test-d.tsx
index 11e3f8bf31..55d820d862 100644
--- a/packages/bundle/test-d/pass/render-with-style-options.test-d.tsx
+++ b/packages/bundle/test-d/pass/render-with-style-options.test-d.tsx
@@ -3,7 +3,7 @@ import '../setup';
import React from 'react';
import ReactDOM from 'react-dom';
-import ReactWebChat, { createDirectLine } from '../../src/boot/exports/full';
+import ReactWebChat, { createDirectLine } from '../../src/exports/full';
const directLine = createDirectLine({ token: '...' });
const styleOptions = { accent: 'black', cardEmphasisBackgroundColor: 'orange' };
diff --git a/packages/bundle/test-d/pass/render-with-style-set.test-d.tsx b/packages/bundle/test-d/pass/render-with-style-set.test-d.tsx
index cacf53c4a6..2880bb2e23 100644
--- a/packages/bundle/test-d/pass/render-with-style-set.test-d.tsx
+++ b/packages/bundle/test-d/pass/render-with-style-set.test-d.tsx
@@ -3,7 +3,7 @@ import '../setup';
import React from 'react';
import ReactDOM from 'react-dom';
-import ReactWebChat, { createDirectLine, createStyleSet } from '../../src/boot/exports/minimal';
+import ReactWebChat, { createDirectLine, createStyleSet } from '../../src/exports/full';
const directLine = createDirectLine({ token: '...' });
const styleOptions = { accent: 'black', cardEmphasisBackgroundColor: 'orange' };
diff --git a/packages/bundle/test-d/pass/render.test-d.tsx b/packages/bundle/test-d/pass/render.test-d.tsx
index de1dcb8f21..ea3459de35 100644
--- a/packages/bundle/test-d/pass/render.test-d.tsx
+++ b/packages/bundle/test-d/pass/render.test-d.tsx
@@ -3,7 +3,7 @@ import '../setup';
import React from 'react';
import ReactDOM from 'react-dom';
-import ReactWebChat, { createDirectLine } from '../../src/boot/exports/full';
+import ReactWebChat, { createDirectLine } from '../../src/exports/full';
const directLine = createDirectLine({ token: '...' });
diff --git a/packages/bundle/test-d/pass/use-style-options-with-full-bundle.test-d.ts b/packages/bundle/test-d/pass/use-style-options-with-full-bundle.test-d.ts
index 788da9fe86..a4364e67ca 100644
--- a/packages/bundle/test-d/pass/use-style-options-with-full-bundle.test-d.ts
+++ b/packages/bundle/test-d/pass/use-style-options-with-full-bundle.test-d.ts
@@ -1,6 +1,6 @@
import '../setup';
-import { hooks } from '../../src/boot/exports/full';
+import { hooks } from '../../src/exports/full';
const [styleOptions] = hooks.useStyleOptions();
diff --git a/packages/bundle/test-d/pass/valid-style-options-suggested-actions-stacked-overflow.test-d.ts b/packages/bundle/test-d/pass/valid-style-options-suggested-actions-stacked-overflow.test-d.ts
index e004e2f834..56ea1a2746 100644
--- a/packages/bundle/test-d/pass/valid-style-options-suggested-actions-stacked-overflow.test-d.ts
+++ b/packages/bundle/test-d/pass/valid-style-options-suggested-actions-stacked-overflow.test-d.ts
@@ -1,6 +1,6 @@
import '../setup';
-import { createStyleSet } from '../../src/boot/exports/full';
+import { createStyleSet } from '../../src/exports/full';
// Related to #4081.
createStyleSet({ suggestedActionsStackedOverflow: 'auto' });
diff --git a/packages/bundle/tsup.config.ts b/packages/bundle/tsup.config.ts
index 1d79c21c4c..e4c3520e45 100644
--- a/packages/bundle/tsup.config.ts
+++ b/packages/bundle/tsup.config.ts
@@ -1,21 +1,8 @@
import path from 'path';
-import { defineConfig } from 'tsup';
+import { defineConfig, type Format } from 'tsup';
import { applyConfig } from '../../tsup.base.config';
-// Redirect import paths for "microsoft-cognitiveservices-speech-sdk(...)"
-// to point to es2015 distribution for all importing modules
-const resolveCognitiveServicesToES2015 = {
- name: 'microsoft-cognitiveservices-speech-sdk',
- setup(build) {
- // ESBuild use Go regular expressions and does not understand Unicode flag.
- // eslint-disable-next-line require-unicode-regexp
- build.onResolve({ filter: /microsoft-cognitiveservices-speech-sdk.+/ }, args => ({
- path: path.join(process.cwd(), '../../node_modules', args.path.replace('distrib/lib', 'distrib/es2015'))
- }));
- }
-};
-
// Redirect import paths for "react" and "react-dom"
const resolveReact = {
name: 'isomorphic-react',
@@ -28,76 +15,83 @@ const resolveReact = {
}
};
-const commonConfig = applyConfig(config => ({
- ...config,
- entry: {
- 'botframework-webchat': './src/boot/exports/full.ts',
- 'botframework-webchat.es5': './src/boot/exports/full-es5.ts',
- 'botframework-webchat.middleware': './src/boot/exports/middleware.ts',
- 'botframework-webchat.minimal': './src/boot/exports/minimal.ts'
- },
- env: {
- ...config.env,
- // Followings are required by microsoft-cognitiveservices-speech-sdk:
- NODE_TLS_REJECT_UNAUTHORIZED: '',
- SPEECH_CONDUCT_OCSP_CHECK: '',
- SPEECH_OCSP_CACHE_ROOT: ''
- },
- // Intentionally overriding existing esbuild plugins.
- esbuildPlugins: [resolveCognitiveServicesToES2015],
- noExternal: [
- ...(config.noExternal ?? []),
- '@babel/runtime',
- 'memoize-one',
- 'microsoft-cognitiveservices-speech-sdk',
- 'web-speech-cognitive-services',
- // Belows are the dependency chain related to "regex" where it is named export-only and does not work on Webpack 4/PPUX (CJS cannot import named export).
- // Webpack 4: "Can't import the named export 'rewrite' from non EcmaScript module (only default export is available)"
- 'shiki', // shiki -> @shikijs/core -> @shikijs/engine-javascript -> regex
- // Issues related to Webpack 4 when it tries to statically analyze dependencies.
- // The way `microsoft-cognitiveservices-speech-sdk` imported the `uuid` package (in their `Guid.js`) is causing esbuild/tsup to proxy require() into __require() for dynamic loading.
- // Webpack 4 cannot statically analyze the code and failed with error "Critical dependency: require function is used in a way in which dependencies cannot be statically extracted".
- 'uuid'
- ]
-}));
+// Everything in the same Config object will be code-split together.
+function buildApplyConfig(format: Format, bundled: boolean) {
+ return (
+ fn: (
+ config: ReturnType[0]>
+ ) => ReturnType[0]> = config => config
+ ) =>
+ applyConfig(config =>
+ fn({
+ ...config,
+ define: {
+ ...config.define,
+ 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT':
+ format === 'cjs'
+ ? '"commonjs"'
+ : format === 'esm'
+ ? '"esmodules"'
+ : format === 'iife'
+ ? '"global"'
+ : '"unknown"'
+ },
+ entry: {
+ 'botframework-webchat': './src/exports/full.ts',
+ 'botframework-webchat/internal': './src/exports/internal.ts',
+ 'botframework-webchat/middleware': './src/exports/middleware.ts'
+ },
+ env: {
+ // Followings are required by microsoft-cognitiveservices-speech-sdk:
+ NODE_TLS_REJECT_UNAUTHORIZED: '',
+ SPEECH_CONDUCT_OCSP_CHECK: '',
+ SPEECH_OCSP_CACHE_ROOT: ''
+ },
+ // Intentionally overriding existing esbuild plugins.
+ esbuildPlugins: bundled ? [resolveReact] : [],
+ format,
+ noExternal: bundled
+ ? [/./u]
+ : [
+ ...(config.noExternal ?? []),
+ '@babel/runtime',
+ 'memoize-one',
+ 'web-speech-cognitive-services',
+ // Belows are the dependency chain related to "regex" where it is named export-only and does not work on Webpack 4/PPUX (CJS cannot import named export).
+ // Webpack 4: "Can't import the named export 'rewrite' from non EcmaScript module (only default export is available)"
+ 'shiki', // shiki -> @shikijs/core -> @shikijs/engine-javascript -> regex
+ // Issues related to Webpack 4 when it tries to statically analyze dependencies.
+ // The way `microsoft-cognitiveservices-speech-sdk` imported the `uuid` package (in their `Guid.js`) is causing esbuild/tsup to proxy require() into __require() for dynamic loading.
+ // Webpack 4 cannot statically analyze the code and failed with error "Critical dependency: require function is used in a way in which dependencies cannot be statically extracted".
+ 'uuid'
+ ],
+ outDirWithTemp: bundled ? undefined : ['./exports/', './exports.tmp/'],
+ target: format === 'cjs' || format === 'iife' ? [...config.target, 'es2019'] : config.target
+ })
+ );
+}
export default defineConfig([
- // Build IIFE before CJS/ESM to make npm start faster.
- {
- ...commonConfig,
- define: {
- ...commonConfig.define,
- 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"global"'
- },
+ buildApplyConfig('cjs', true)(),
+ buildApplyConfig('esm', true)(),
+ buildApplyConfig('cjs', false)(),
+ buildApplyConfig('esm', false)(),
+ buildApplyConfig(
+ 'iife',
+ true
+ )(config => ({
+ ...config,
dts: false,
entry: {
- webchat: './src/boot/bundle/full.ts',
- 'webchat-es5': './src/boot/bundle/full-es5.ts',
- 'webchat-minimal': './src/boot/bundle/minimal.ts'
+ webchat: './src/iife/full.ts',
+ 'webchat-es5': './src/iife/full-es5.ts',
+ 'webchat-minimal': './src/iife/minimal.ts'
},
- esbuildPlugins: [...commonConfig.esbuildPlugins, resolveReact],
- format: 'iife',
+ // Intentionally overriding existing esbuild plugins.
+ esbuildPlugins: [resolveReact],
outExtension() {
return { js: '.js' };
},
- platform: 'browser',
- target: [...commonConfig.target, 'es2019']
- },
- {
- ...commonConfig,
- define: {
- ...commonConfig.define,
- 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"esmodules"'
- },
- format: 'esm'
- },
- {
- ...commonConfig,
- define: {
- ...commonConfig.define,
- 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"commonjs"'
- },
- format: 'cjs',
- target: [...commonConfig.target, 'es2019']
- }
+ platform: 'browser'
+ }))
]);
diff --git a/packages/component/.eslintrc.yml b/packages/component/.eslintrc.yml
index f2b13d2dcd..c935748c11 100644
--- a/packages/component/.eslintrc.yml
+++ b/packages/component/.eslintrc.yml
@@ -5,11 +5,3 @@ extends:
# This package is expected to run inside a web browser.
env:
browser: true
-
-rules:
- no-restricted-imports:
- - error
- - patterns:
- - group:
- - '@msinternal/botframework-webchat-api-*'
- message: 'To prevent duplicated import, @msinternal/botframework-webchat-api-* is only allowed to import in botframework-webchat-api.'
diff --git a/packages/component/package.json b/packages/component/package.json
index eb98eeb8fa..813122746c 100644
--- a/packages/component/package.json
+++ b/packages/component/package.json
@@ -55,7 +55,9 @@
],
"homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/component#readme",
"scripts": {
- "build": "tsup",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
@@ -65,7 +67,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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch"
},
"localDependencies": {
"@msinternal/botframework-webchat-base": "development",
@@ -105,10 +107,10 @@
"@babel/preset-env": "^7.28.0",
"@babel/preset-react": "^7.27.1",
"@babel/preset-typescript": "^7.27.1",
- "@msinternal/botframework-webchat-base": "0.0.0-0",
+ "@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-styles": "^0.0.0-0",
"@msinternal/botframework-webchat-tsconfig": "^0.0.0-0",
"@types/dom-speech-recognition": "^0.0.6",
"@types/jest": "^30.0.0",
@@ -117,7 +119,6 @@
"@types/react": "^16.14.65",
"babel-plugin-istanbul": "^7.0.0",
"babel-plugin-transform-inline-environment-variables": "^0.4.4",
- "core-js": "^3.44.0",
"cross-env": "^10.0.0",
"type-fest": "^4.41.0",
"typescript": "~5.8.3"
diff --git a/packages/component/src/providers/TranscriptFocus/TranscriptFocusComposer.spec.tsx b/packages/component/src/providers/TranscriptFocus/TranscriptFocusComposer.spec.tsx
index 83ed785169..263851db20 100644
--- a/packages/component/src/providers/TranscriptFocus/TranscriptFocusComposer.spec.tsx
+++ b/packages/component/src/providers/TranscriptFocus/TranscriptFocusComposer.spec.tsx
@@ -2,8 +2,6 @@
/* eslint-disable security/detect-object-injection */
/* eslint no-magic-numbers: "off" */
-import 'core-js/features/set/index.js';
-
import React, { useContext, useMemo } from 'react';
import { render, unmountComponentAtNode } from 'react-dom';
import { act } from 'react-dom/test-utils';
diff --git a/packages/component/tsup.config.ts b/packages/component/tsup.config.ts
index 997e60964e..bbdb4fcf09 100644
--- a/packages/component/tsup.config.ts
+++ b/packages/component/tsup.config.ts
@@ -6,7 +6,7 @@ import { componentStyleContent as componentStyleContentPlaceholder } from './src
import { decoratorStyleContent as decoratorStyleContentPlaceholder } from './src/decorator/private/createStyles';
// TODO: [P1] Compute this automatically.
-const DEPENDENT_PATHS = ['bundle/src/boot/exports/full.ts'];
+const DEPENDENT_PATHS = ['bundle/src/exports/full.ts'];
const commonConfig = applyConfig(config => ({
...config,
diff --git a/packages/core/.eslintrc.yml b/packages/core/.eslintrc.yml
index b83afdd7f9..47380c7dd7 100644
--- a/packages/core/.eslintrc.yml
+++ b/packages/core/.eslintrc.yml
@@ -5,11 +5,3 @@ extends:
# TODO: #3212 When we move to React Native, we should disable this.
env:
browser: true
-
-rules:
- no-restricted-imports:
- - error
- - patterns:
- - group:
- - '@msinternal/botframework-webchat-api-*'
- message: 'To prevent duplicated import, @msinternal/botframework-webchat-api-* is only allowed to import in botframework-webchat-api.'
diff --git a/packages/core/package.json b/packages/core/package.json
index c57ee599e7..0aceb08498 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -56,7 +56,9 @@
}
},
"scripts": {
- "build": "tsup",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
@@ -66,7 +68,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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch"
},
"engines": {
"node": ">=12.0.0"
diff --git a/packages/core/src/createPromiseQueue.js b/packages/core/src/createPromiseQueue.js
index 84764ddca5..5fb3c93cbb 100644
--- a/packages/core/src/createPromiseQueue.js
+++ b/packages/core/src/createPromiseQueue.js
@@ -1,4 +1,4 @@
-import { withResolvers } from '@msinternal/botframework-webchat-base/utils';
+import withResolvers from './utils/withResolvers';
export default function createPromiseQueue() {
let promiseWithResolvers;
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index 8db231fb33..88caf3c566 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -1,4 +1,3 @@
-import { withResolvers, type PromiseWithResolvers } from '@msinternal/botframework-webchat-base/utils';
import connect from './actions/connect';
import disconnect from './actions/disconnect';
import dismissNotification from './actions/dismissNotification';
@@ -85,6 +84,8 @@ import type { UserReview as OrgSchemaUserReview } from './types/external/OrgSche
const Constants = { ActivityClientState, DictateState };
+export { default as withResolvers, type PromiseWithResolvers } from './utils/withResolvers';
+
export {
connect,
Constants,
@@ -126,8 +127,7 @@ export {
stopDictate,
stopSpeakingActivity,
submitSendBox,
- warnOnce,
- withResolvers
+ warnOnce
};
export type {
@@ -154,7 +154,6 @@ export type {
OrgSchemaProject,
OrgSchemaThing,
OrgSchemaUserReview,
- PromiseWithResolvers,
SendBoxAttachment,
WebChatActivity
};
diff --git a/packages/core/src/utils/withResolvers.ts b/packages/core/src/utils/withResolvers.ts
new file mode 100644
index 0000000000..55fc44d9e7
--- /dev/null
+++ b/packages/core/src/utils/withResolvers.ts
@@ -0,0 +1,16 @@
+// tsup wrongly included typings from private packages marked as `noExternal` or `devDependencies`.
+// We cannot direct re-export from private packages without rebuilding their types.
+// tsup bug: https://github.com/egoist/tsup/issues/1071
+
+import { withResolvers as withResolvers_ } from '@msinternal/botframework-webchat-base/utils';
+
+type PromiseWithResolvers = {
+ promise: Promise;
+ reject: (error: unknown) => void;
+ resolve: (result: T) => void;
+};
+
+const withResolvers = withResolvers_ as () => PromiseWithResolvers;
+
+export default withResolvers;
+export { type PromiseWithResolvers };
diff --git a/packages/core/tsup.config.ts b/packages/core/tsup.config.ts
index 6b9b56867b..51c4eec3a6 100644
--- a/packages/core/tsup.config.ts
+++ b/packages/core/tsup.config.ts
@@ -21,6 +21,7 @@ export default defineConfig([
...commonConfig.define,
'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"esmodules"'
},
+ dts: { resolve: true },
format: 'esm'
},
{
@@ -29,6 +30,7 @@ export default defineConfig([
...commonConfig.define,
'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"commonjs"'
},
+ dts: { resolve: true },
format: 'cjs',
target: [...commonConfig.target, 'es2019']
}
diff --git a/packages/debug-theme/package.json b/packages/debug-theme/package.json
index c2607c5747..2dab41055d 100644
--- a/packages/debug-theme/package.json
+++ b/packages/debug-theme/package.json
@@ -38,7 +38,9 @@
"localDependencies": {},
"homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/debug-theme#readme",
"scripts": {
- "build": "tsup --config ./tsup.config.ts",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
@@ -48,7 +50,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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch"
},
"peerDependencies": {
"react": ">= 16.8.6"
diff --git a/packages/directlinespeech/jest.config.js b/packages/directlinespeech/jest.config.js
index c15c11559d..acacf0345b 100644
--- a/packages/directlinespeech/jest.config.js
+++ b/packages/directlinespeech/jest.config.js
@@ -1,8 +1,16 @@
const { defaults } = require('jest-config');
+const TRANSFORM_IGNORE_PACKAGES = ['microsoft-cognitiveservices-speech-sdk', 'uuid'];
+
module.exports = {
...defaults,
setupFiles: ['/__tests__/utilities/setupJest.js'],
setupFilesAfterEnv: ['/__tests__/utilities/setupTestNightly.js'],
- testPathIgnorePatterns: [...defaults.testPathIgnorePatterns, '/__tests__/utilities/', '/lib/']
+ testPathIgnorePatterns: [...defaults.testPathIgnorePatterns, '/__tests__/utilities/', '/lib/'],
+ transformIgnorePatterns: [
+ // jest-environment-jsdom import packages as browser.
+ // Packages, such as "uuid", export itself for browser as ES5 + ESM.
+ // Since jest@28 cannot consume ESM yet, we need to transpile these packages.
+ `/node_modules/(?!(${TRANSFORM_IGNORE_PACKAGES.join('|')})/)`
+ ]
};
diff --git a/packages/directlinespeech/package.json b/packages/directlinespeech/package.json
index 9a21bccfa4..9952992cb0 100644
--- a/packages/directlinespeech/package.json
+++ b/packages/directlinespeech/package.json
@@ -21,9 +21,10 @@
}
},
"scripts": {
- "build": "npm run build:tsup && npm run build:babel && npm run build:webpack",
+ "build": "npm run build:tsup && npm run build:babel && npm run build:webpack && npm run build:validate",
"build:babel": "cross-env build_tool=babel module_format=commonjs babel src --ignore **/*.spec.js,**/*.test.js,__tests__/**/*.js --out-dir lib --verbose",
"build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"build:webpack": "npm run build:webpack:development && npm run build:webpack:production",
"build:webpack:development": "cross-env node_env=development webpack-cli",
"build:webpack:production": "cross-env node_env=production webpack-cli",
diff --git a/packages/directlinespeech/src/DirectLineSpeech.js b/packages/directlinespeech/src/DirectLineSpeech.js
index e8c53b1ac1..01cc87464a 100644
--- a/packages/directlinespeech/src/DirectLineSpeech.js
+++ b/packages/directlinespeech/src/DirectLineSpeech.js
@@ -1,6 +1,6 @@
/* eslint no-magic-numbers: ["error", { "ignore": [0, 1, 2, 4, 36] }] */
-import Observable from 'core-js/features/observable/index.js';
+import Observable from 'core-js-pure/features/observable/index.js';
import random from 'math-random';
import shareObservable from './shareObservable';
diff --git a/packages/directlinespeech/src/index.js b/packages/directlinespeech/src/index.js
index 43722f4227..a51a2aa4ac 100644
--- a/packages/directlinespeech/src/index.js
+++ b/packages/directlinespeech/src/index.js
@@ -1,5 +1,7 @@
/* global process:readonly */
-import 'core-js/features/object/entries.js';
+
+// TODO: [P*] Polyfill at the final bundle.
+// import 'core-js/features/object/entries.js';
import createAdapters from './createAdapters';
diff --git a/packages/directlinespeech/src/shareObservable.js b/packages/directlinespeech/src/shareObservable.js
index 877b1f4f78..3b3c06869f 100644
--- a/packages/directlinespeech/src/shareObservable.js
+++ b/packages/directlinespeech/src/shareObservable.js
@@ -1,4 +1,4 @@
-/* global Observable */
+import Observable from 'core-js-pure/features/observable';
export default function shareObservable(observable) {
let observers = [];
diff --git a/packages/directlinespeech/src/shareObservable.spec.js b/packages/directlinespeech/src/shareObservable.spec.js
index 74ddf783f8..d2a4176f03 100644
--- a/packages/directlinespeech/src/shareObservable.spec.js
+++ b/packages/directlinespeech/src/shareObservable.spec.js
@@ -1,6 +1,6 @@
/** @jest-environment @happy-dom/jest-environment */
-import Observable from 'core-js/features/observable';
+import Observable from 'core-js-pure/features/observable';
import shareObservable from './shareObservable';
diff --git a/packages/directlinespeech/tsup.config.ts b/packages/directlinespeech/tsup.config.ts
index 3381566d00..7cac6f0a9e 100644
--- a/packages/directlinespeech/tsup.config.ts
+++ b/packages/directlinespeech/tsup.config.ts
@@ -1,21 +1,7 @@
-import { join } from 'path';
import { defineConfig } from 'tsup';
import { applyConfig } from '../../tsup.base.config';
-// Redirect import paths for "microsoft-cognitiveservices-speech-sdk(...)"
-// to point to es2015 distribution for all importing modules
-const resolveCognitiveServicesToES2015 = {
- name: 'microsoft-cognitiveservices-speech-sdk',
- setup(build) {
- // ESBuild use Go regular expressions and does not understand Unicode flag.
- // eslint-disable-next-line require-unicode-regexp
- build.onResolve({ filter: /microsoft-cognitiveservices-speech-sdk.+/ }, args => ({
- path: join(process.cwd(), 'node_modules', args.path.replace('distrib/lib', 'distrib/es2015') + '.js')
- }));
- }
-};
-
const config = applyConfig(config => ({
...config,
entry: {
@@ -32,7 +18,7 @@ const config = applyConfig(config => ({
SPEECH_OCSP_CACHE_ROOT: ''
},
// Intentionally overriding existing esbuild plugins.
- esbuildPlugins: [resolveCognitiveServicesToES2015],
+ esbuildPlugins: [],
// We need to internalize event-target-shim because it appear as transient packages with a different version.
noExternal: [...(config.noExternal ?? []), 'event-target-shim']
}));
diff --git a/packages/fluent-theme/.eslintrc.yml b/packages/fluent-theme/.eslintrc.yml
index 8307709bdc..a687cd2480 100644
--- a/packages/fluent-theme/.eslintrc.yml
+++ b/packages/fluent-theme/.eslintrc.yml
@@ -9,3 +9,12 @@ env:
rules:
react/destructuring-assignment: off
react/require-default-props: off
+ no-restricted-imports:
+ - error
+ - patterns:
+ - group:
+ - botframework-webchat-*
+ - '!botframework-webchat-base' # It is okay to import from private packages.
+ - '!botframework-webchat-react-valibot' # It is okay to import from private packages.
+ - '!botframework-webchat-styles' # It is okay to import from private packages.
+ message: Imports only from "bundle" package but not other packages under it
diff --git a/packages/fluent-theme/.gitignore b/packages/fluent-theme/.gitignore
index 515a303349..124b126d1f 100644
--- a/packages/fluent-theme/.gitignore
+++ b/packages/fluent-theme/.gitignore
@@ -1,5 +1,7 @@
/*.tgz
/dist/
/dist.tmp/
+/exports/
+/exports.tmp/
/node_modules/
/tsup.config.bundled_*.mjs
diff --git a/packages/fluent-theme/package.json b/packages/fluent-theme/package.json
index dba42e4c4c..d68a52c0b1 100644
--- a/packages/fluent-theme/package.json
+++ b/packages/fluent-theme/package.json
@@ -2,20 +2,22 @@
"name": "botframework-webchat-fluent-theme",
"version": "0.0.0-0",
"description": "Fluent theme for Bot Framework Web Chat",
- "main": "./dist/botframework-webchat-fluent-theme.js",
- "types": "./dist/botframework-webchat-fluent-theme.d.ts",
+ "main": "./exports/botframework-webchat-fluent-theme.js",
+ "types": "./exports/botframework-webchat-fluent-theme.d.ts",
"publishConfig": {
"access": "public"
},
"exports": {
".": {
"import": {
- "types": "./dist/botframework-webchat-fluent-theme.d.mts",
- "default": "./dist/botframework-webchat-fluent-theme.mjs"
+ "bundle // TODO: [P*] Think if we should export fat/bundled using conditions": "./dist/botframework-webchat-fluent-theme.mjs",
+ "types": "./exports/botframework-webchat-fluent-theme.d.mts",
+ "default": "./exports/botframework-webchat-fluent-theme.mjs"
},
- "required": {
- "types": "./dist/botframework-webchat-fluent-theme.d.ts",
- "default": "./dist/botframework-webchat-fluent-theme.js"
+ "require": {
+ "bundle // TODO: [P*] Think if we should export fat/bundled using conditions": "./dist/botframework-webchat-fluent-theme.js",
+ "types": "./exports/botframework-webchat-fluent-theme.d.ts",
+ "default": "./exports/botframework-webchat-fluent-theme.js"
}
}
},
@@ -38,7 +40,11 @@
"src/**/*"
],
"scripts": {
- "build": "tsup",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "npm run build:validate:import && npm run build:validate:internal",
+ "build:validate:import": "if grep -R -n -P --include='*.mjs' '}\\s*from\\s*\"(?!(\\.|botframework-webchat(\"|/)))' ./dist/; then echo '*.mjs files should not import from other packages' >&2; exit 1; fi",
+ "build:validate:internal": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
@@ -48,7 +54,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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch"
},
"localDependencies": {
"@msinternal/botframework-webchat-base": "development",
@@ -69,19 +75,18 @@
]
},
"devDependencies": {
- "@msinternal/botframework-webchat-base": "0.0.0-0",
- "@msinternal/botframework-webchat-styles": "0.0.0-0",
+ "@msinternal/botframework-webchat-base": "^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": "^24.1.0",
"@types/react": "^16.14.65",
+ "escape-string-regexp": "^5.0.0",
"tsup": "^8.5.0",
"typescript": "~5.8.3"
},
"dependencies": {
- "botframework-webchat-api": "0.0.0-0",
- "botframework-webchat-component": "0.0.0-0",
- "botframework-webchat-core": "0.0.0-0",
+ "botframework-webchat": "0.0.0-0",
"classnames": "2.5.1",
"inject-meta-tag": "0.0.1",
"math-random": "2.0.1",
diff --git a/packages/fluent-theme/src/components/activity/ActivityDecorator.tsx b/packages/fluent-theme/src/components/activity/ActivityDecorator.tsx
index f8fa300896..9b0f5b41a5 100644
--- a/packages/fluent-theme/src/components/activity/ActivityDecorator.tsx
+++ b/packages/fluent-theme/src/components/activity/ActivityDecorator.tsx
@@ -1,5 +1,5 @@
import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot';
-import { WebChatActivity } from 'botframework-webchat-component';
+import { type WebChatActivity } from 'botframework-webchat/internal';
import cx from 'classnames';
import React, { ReactNode, memo } from 'react';
import { object, optional, pipe, readonly, 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 75c48882f5..173594aba8 100644
--- a/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx
+++ b/packages/fluent-theme/src/components/activity/CopilotMessageHeader.tsx
@@ -1,5 +1,6 @@
import { validateProps } from '@msinternal/botframework-webchat-react-valibot';
-import { WebChatActivity, hooks } from 'botframework-webchat-component';
+import { hooks } from 'botframework-webchat';
+import { type WebChatActivity } from 'botframework-webchat/internal';
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 51ec9b2a9f..4f44d42a42 100644
--- a/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx
+++ b/packages/fluent-theme/src/components/activity/PartGroupingDecorator.tsx
@@ -1,6 +1,6 @@
import { reactNode, validateProps } from '@msinternal/botframework-webchat-react-valibot';
-import { PartGrouping } from 'botframework-webchat-component/internal';
-import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core';
+import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal';
+import { PartGrouping } from 'botframework-webchat/internal';
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 5a43c99ec4..43924ffdc5 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-core';
+import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal';
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 324dbaca57..21ecae0bc7 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 { useMemo } from 'react';
-import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat-core';
+import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal';
export default function useActivityAuthor(activity?: WebChatActivity | undefined) {
return useMemo(() => {
diff --git a/packages/fluent-theme/src/components/activity/private/useActivityStyleOptions.ts b/packages/fluent-theme/src/components/activity/private/useActivityStyleOptions.ts
index da7a853993..9810ba5b9c 100644
--- a/packages/fluent-theme/src/components/activity/private/useActivityStyleOptions.ts
+++ b/packages/fluent-theme/src/components/activity/private/useActivityStyleOptions.ts
@@ -1,6 +1,6 @@
+import { hooks, type StrictStyleOptions } from 'botframework-webchat';
+import { type WebChatActivity } from 'botframework-webchat/internal';
import { useMemo } from 'react';
-import { hooks, type WebChatActivity } from 'botframework-webchat-component';
-import { type StrictStyleOptions } from 'botframework-webchat-api';
const { useStyleOptions } = hooks;
diff --git a/packages/fluent-theme/src/components/assets/AssetComposer.tsx b/packages/fluent-theme/src/components/assets/AssetComposer.tsx
index 9e5c9f1a3c..32ab9f02a2 100644
--- a/packages/fluent-theme/src/components/assets/AssetComposer.tsx
+++ b/packages/fluent-theme/src/components/assets/AssetComposer.tsx
@@ -1,10 +1,7 @@
-import { type ContextOf } from 'botframework-webchat-api';
import React, { memo, useEffect, useMemo, type ReactNode } from 'react';
import { type AssetName } from './AssetName';
-import Context from './private/Context';
-
-type ContextType = ContextOf;
+import Context, { type ContextType } from './private/Context';
type AssetComposerProps = Readonly<{
children?: ReactNode | undefined;
diff --git a/packages/fluent-theme/src/components/assets/SlidingDots.tsx b/packages/fluent-theme/src/components/assets/SlidingDots.tsx
index 3d86fa6780..aabc45727c 100644
--- a/packages/fluent-theme/src/components/assets/SlidingDots.tsx
+++ b/packages/fluent-theme/src/components/assets/SlidingDots.tsx
@@ -1,4 +1,4 @@
-import { hooks } from 'botframework-webchat-component';
+import { hooks } from 'botframework-webchat';
import React, { memo, useCallback, useEffect, useRef } from 'react';
import { useRefFrom } from 'use-ref-from';
diff --git a/packages/fluent-theme/src/components/assets/private/Context.ts b/packages/fluent-theme/src/components/assets/private/Context.ts
index f6536478f9..1fe0ed6cdf 100644
--- a/packages/fluent-theme/src/components/assets/private/Context.ts
+++ b/packages/fluent-theme/src/components/assets/private/Context.ts
@@ -22,3 +22,4 @@ const Context = createContext(Object.create({}, defaultContextValue
Context.displayName = 'AssetComposerContext';
export default Context;
+export { type ContextType };
diff --git a/packages/fluent-theme/src/components/assets/private/useContext.ts b/packages/fluent-theme/src/components/assets/private/useContext.ts
index 2cf3cb3125..7524287305 100644
--- a/packages/fluent-theme/src/components/assets/private/useContext.ts
+++ b/packages/fluent-theme/src/components/assets/private/useContext.ts
@@ -1,8 +1,7 @@
-import { type ContextOf } from 'botframework-webchat-api';
import { useContext as useReactContext } from 'react';
-import Context from './Context';
+import Context, { ContextType } from './Context';
-export default function useContext(): ContextOf {
+export default function useContext(): ContextType {
return useReactContext(Context);
}
diff --git a/packages/fluent-theme/src/components/dropZone/DropZone.tsx b/packages/fluent-theme/src/components/dropZone/DropZone.tsx
index ed55120026..70f2d6c100 100644
--- a/packages/fluent-theme/src/components/dropZone/DropZone.tsx
+++ b/packages/fluent-theme/src/components/dropZone/DropZone.tsx
@@ -1,4 +1,4 @@
-import { hooks } from 'botframework-webchat-component';
+import { hooks } from 'botframework-webchat';
import cx from 'classnames';
import React, {
memo,
diff --git a/packages/fluent-theme/src/components/icon/FluentIcon.tsx b/packages/fluent-theme/src/components/icon/FluentIcon.tsx
index f29efeca4a..cab411ac85 100644
--- a/packages/fluent-theme/src/components/icon/FluentIcon.tsx
+++ b/packages/fluent-theme/src/components/icon/FluentIcon.tsx
@@ -1,4 +1,4 @@
-import { createIconComponent } from 'botframework-webchat-component/internal';
+import { createIconComponent } from 'botframework-webchat/internal';
import { validateProps } from '@msinternal/botframework-webchat-react-valibot';
import { useStyles } from '@msinternal/botframework-webchat-styles/react';
import cx from 'classnames';
diff --git a/packages/fluent-theme/src/components/linerActivity/private/LinerActivity.tsx b/packages/fluent-theme/src/components/linerActivity/private/LinerActivity.tsx
index 9ecd50094d..8ca591ab48 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-core';
+import { type WebChatActivity } from 'botframework-webchat/internal';
import React, { memo } from 'react';
import { useStyles } from '../../../styles/index.js';
import styles from './LinerMessageActivity.module.css';
diff --git a/packages/fluent-theme/src/components/linerActivity/private/isLinerMessageActivity.ts b/packages/fluent-theme/src/components/linerActivity/private/isLinerMessageActivity.ts
index a55aa18325..eaf135461b 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-core';
+import { type WebChatActivity } from 'botframework-webchat/internal';
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 2097da6913..e9c4aacc0b 100644
--- a/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx
+++ b/packages/fluent-theme/src/components/preChatActivity/PreChatMessageActivity.tsx
@@ -1,11 +1,11 @@
-import { hooks } from 'botframework-webchat-component';
-import { type WebChatActivity } from 'botframework-webchat-core';
+import { hooks } from 'botframework-webchat';
+import { type WebChatActivity } from 'botframework-webchat/internal';
import cx from 'classnames';
import React, { memo, useMemo } from 'react';
import { useStyles } from '../../styles/index.js';
+import { useActivityAuthor } from '../activity/index.js';
import styles from './PreChatMessageActivity.module.css';
import StarterPromptsToolbar from './StarterPromptsToolbar.js';
-import { useActivityAuthor } from '../activity/index.js';
type Props = Readonly<{ activity: WebChatActivity & { type: 'message' } }>;
diff --git a/packages/fluent-theme/src/components/preChatActivity/StarterPromptsCardAction.tsx b/packages/fluent-theme/src/components/preChatActivity/StarterPromptsCardAction.tsx
index 88f7246b50..b0b4955056 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-component';
-import { type DirectLineCardAction } from 'botframework-webchat-core';
+import { hooks } from 'botframework-webchat';
+import { type DirectLineCardAction } from 'botframework-webchat/internal';
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 1e69f4c7a5..c502cb2b69 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-api';
-import { type DirectLineCardAction } from 'botframework-webchat-core';
+import { hooks } from 'botframework-webchat';
+import { type DirectLineCardAction } from 'botframework-webchat/internal';
import cx from 'classnames';
import React, { memo } from 'react';
import { useStyles } from '../../styles/index.js';
diff --git a/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts b/packages/fluent-theme/src/components/preChatActivity/isPreChatMessageActivity.ts
index 9f621d38b9..754fad510d 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-core';
+import { getOrgSchemaMessage, type WebChatActivity } from 'botframework-webchat/internal';
export default function isPreChatMessageActivity(
activity: undefined | WebChatActivity
diff --git a/packages/fluent-theme/src/components/sendBox/AddAttachmentButton.tsx b/packages/fluent-theme/src/components/sendBox/AddAttachmentButton.tsx
index 78e3b7ed3d..90c2b9fd12 100644
--- a/packages/fluent-theme/src/components/sendBox/AddAttachmentButton.tsx
+++ b/packages/fluent-theme/src/components/sendBox/AddAttachmentButton.tsx
@@ -1,12 +1,12 @@
-import { hooks } from 'botframework-webchat-component';
-import React, { useCallback, useRef, type ChangeEventHandler, memo } from 'react';
+import { hooks } from 'botframework-webchat';
+import React, { memo, useCallback, useRef, type ChangeEventHandler } from 'react';
import { useRefFrom } from 'use-ref-from';
-import { FluentIcon } from '../icon';
+import { useStyles } from '../../styles';
import testIds from '../../testIds';
-import { ToolbarButton } from './Toolbar';
+import { FluentIcon } from '../icon';
import styles from './AddAttachmentButton.module.css';
-import { useStyles } from '../../styles';
+import { ToolbarButton } from './Toolbar';
const { useLocalizer, useStyleOptions } = hooks;
diff --git a/packages/fluent-theme/src/components/sendBox/ErrorMessage.tsx b/packages/fluent-theme/src/components/sendBox/ErrorMessage.tsx
index 747cfbbd96..bbd7238f20 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-component/internal';
+import { useLiveRegion } from 'botframework-webchat/internal';
import React, { memo } from 'react';
import { useStyles } from '../../styles';
import styles from './ErrorMessage.module.css';
diff --git a/packages/fluent-theme/src/components/sendBox/SendBox.tsx b/packages/fluent-theme/src/components/sendBox/SendBox.tsx
index f0caa8014b..77c01d62b2 100644
--- a/packages/fluent-theme/src/components/sendBox/SendBox.tsx
+++ b/packages/fluent-theme/src/components/sendBox/SendBox.tsx
@@ -1,4 +1,4 @@
-import { hooks, Components, type SendBoxFocusOptions } from 'botframework-webchat-component';
+import { Components, hooks } from 'botframework-webchat';
import cx from 'classnames';
import React, {
memo,
@@ -11,10 +11,10 @@ import React, {
} from 'react';
import { useRefFrom } from 'use-ref-from';
-import { FluentIcon } from '../icon';
import { useStyles, useVariantClassName } from '../../styles';
import testIds from '../../testIds';
import { DropZone } from '../dropZone';
+import { FluentIcon } from '../icon';
import { SuggestedActions } from '../suggestedActions';
import { TelephoneKeypadSurrogate, useTelephoneKeypadShown, type DTMF } from '../telephoneKeypad';
import AddAttachmentButton from './AddAttachmentButton';
@@ -75,7 +75,7 @@ function SendBox(props: Props) {
useRegisterFocusSendBox(
useCallback(
- ({ noKeyboard, waitUntil }: SendBoxFocusOptions) => {
+ ({ noKeyboard, waitUntil }) => {
if (!inputRef.current) {
return;
}
diff --git a/packages/fluent-theme/src/components/sendBox/TelephoneKeypadToolbarButton.tsx b/packages/fluent-theme/src/components/sendBox/TelephoneKeypadToolbarButton.tsx
index 1078fed22e..bed1375c47 100644
--- a/packages/fluent-theme/src/components/sendBox/TelephoneKeypadToolbarButton.tsx
+++ b/packages/fluent-theme/src/components/sendBox/TelephoneKeypadToolbarButton.tsx
@@ -1,8 +1,8 @@
+import { hooks } from 'botframework-webchat';
import React, { memo, useCallback } from 'react';
-import { hooks } from 'botframework-webchat-component';
-import { FluentIcon } from '../icon';
import testIds from '../../testIds';
+import { FluentIcon } from '../icon';
import { useTelephoneKeypadShown } from '../telephoneKeypad';
import { ToolbarButton } from './Toolbar';
diff --git a/packages/fluent-theme/src/components/sendBox/Toolbar.tsx b/packages/fluent-theme/src/components/sendBox/Toolbar.tsx
index ba408f47c7..558a6eafb4 100644
--- a/packages/fluent-theme/src/components/sendBox/Toolbar.tsx
+++ b/packages/fluent-theme/src/components/sendBox/Toolbar.tsx
@@ -1,4 +1,4 @@
-import { hooks } from 'botframework-webchat-api';
+import { hooks } from 'botframework-webchat';
import cx from 'classnames';
import React, { memo, type MouseEventHandler, type ReactNode } from 'react';
import { useStyles } from '../../styles';
diff --git a/packages/fluent-theme/src/components/sendBox/private/useSubmitError.ts b/packages/fluent-theme/src/components/sendBox/private/useSubmitError.ts
index 43516e14b1..421660fec3 100644
--- a/packages/fluent-theme/src/components/sendBox/private/useSubmitError.ts
+++ b/packages/fluent-theme/src/components/sendBox/private/useSubmitError.ts
@@ -1,4 +1,4 @@
-import { hooks } from 'botframework-webchat-component';
+import { hooks } from 'botframework-webchat';
import { useCallback, useMemo, useState } from 'react';
import { useRefFrom } from 'use-ref-from';
diff --git a/packages/fluent-theme/src/components/sendBox/private/useTranscriptNavigation.ts b/packages/fluent-theme/src/components/sendBox/private/useTranscriptNavigation.ts
index 7fc14bdbb7..89fc052eef 100644
--- a/packages/fluent-theme/src/components/sendBox/private/useTranscriptNavigation.ts
+++ b/packages/fluent-theme/src/components/sendBox/private/useTranscriptNavigation.ts
@@ -1,5 +1,5 @@
+import { hooks } from 'botframework-webchat';
import { useCallback, type KeyboardEvent } from 'react';
-import { hooks } from 'botframework-webchat-component';
const { useScrollDown, useScrollUp } = hooks;
diff --git a/packages/fluent-theme/src/components/suggestedActions/SuggestedAction.tsx b/packages/fluent-theme/src/components/suggestedActions/SuggestedAction.tsx
index 6c247a5bbe..0210b98e76 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-component';
-import { type DirectLineCardAction } from 'botframework-webchat-core';
+import { hooks } from 'botframework-webchat';
+import { type DirectLineCardAction } from 'botframework-webchat/internal';
import cx from 'classnames';
import React, { MouseEventHandler, memo, useCallback } from 'react';
diff --git a/packages/fluent-theme/src/components/suggestedActions/SuggestedActions.tsx b/packages/fluent-theme/src/components/suggestedActions/SuggestedActions.tsx
index 4288cb2682..fbec94e2e7 100644
--- a/packages/fluent-theme/src/components/suggestedActions/SuggestedActions.tsx
+++ b/packages/fluent-theme/src/components/suggestedActions/SuggestedActions.tsx
@@ -1,6 +1,7 @@
-import { hooks } from 'botframework-webchat-component';
+import { hooks } from 'botframework-webchat';
import cx from 'classnames';
import React, { memo, useCallback, type ReactNode } from 'react';
+
import { useStyles } from '../../styles';
import { isPreChatMessageActivity } from '../preChatActivity';
import computeSuggestedActionText from './private/computeSuggestedActionText';
diff --git a/packages/fluent-theme/src/components/suggestedActions/private/computeSuggestedActionText.ts b/packages/fluent-theme/src/components/suggestedActions/private/computeSuggestedActionText.ts
index 9f4c604224..3936ea40d7 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-core';
+import { type DirectLineCardAction } from 'botframework-webchat/internal';
// 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/components/telephoneKeypad/private/TelephoneKeypad.tsx b/packages/fluent-theme/src/components/telephoneKeypad/private/TelephoneKeypad.tsx
index 696b33bd81..09e2bbdc38 100644
--- a/packages/fluent-theme/src/components/telephoneKeypad/private/TelephoneKeypad.tsx
+++ b/packages/fluent-theme/src/components/telephoneKeypad/private/TelephoneKeypad.tsx
@@ -1,4 +1,4 @@
-import { Components } from 'botframework-webchat-component';
+import { Components } from 'botframework-webchat';
import cx from 'classnames';
import React, { memo, useCallback, useEffect, useRef, type KeyboardEventHandler, type ReactNode } from 'react';
import { useRefFrom } from 'use-ref-from';
diff --git a/packages/fluent-theme/src/components/typingIndicator/SlidingDotsTypingIndicator.tsx b/packages/fluent-theme/src/components/typingIndicator/SlidingDotsTypingIndicator.tsx
index d6d5be8efc..6e35a5022b 100644
--- a/packages/fluent-theme/src/components/typingIndicator/SlidingDotsTypingIndicator.tsx
+++ b/packages/fluent-theme/src/components/typingIndicator/SlidingDotsTypingIndicator.tsx
@@ -1,5 +1,5 @@
-import { testIds } from 'botframework-webchat-component';
import { useStyles } from '@msinternal/botframework-webchat-styles/react';
+import { testIds } from 'botframework-webchat';
import cx from 'classnames';
import React, { memo } from 'react';
diff --git a/packages/fluent-theme/src/private/FluentThemeProvider.tsx b/packages/fluent-theme/src/private/FluentThemeProvider.tsx
index 3cfd08df8e..5949529e33 100644
--- a/packages/fluent-theme/src/private/FluentThemeProvider.tsx
+++ b/packages/fluent-theme/src/private/FluentThemeProvider.tsx
@@ -1,13 +1,14 @@
/* eslint-disable prefer-arrow-callback */
-import { type ActivityMiddleware, type StyleOptions, type TypingIndicatorMiddleware } from 'botframework-webchat-api';
+import { Components, type StyleOptions } from 'botframework-webchat';
import {
createActivityBorderMiddleware,
createActivityGroupingMiddleware,
DecoratorComposer,
- type DecoratorMiddleware
-} from 'botframework-webchat-api/decorator';
-import { Components } from 'botframework-webchat-component';
-import { WebChatDecorator } from 'botframework-webchat-component/decorator';
+ WebChatDecorator,
+ type ActivityMiddleware,
+ type DecoratorMiddleware,
+ type TypingIndicatorMiddleware
+} from 'botframework-webchat/internal';
import React, { memo, type ReactNode } from 'react';
import { ActivityDecorator } from '../components/activity';
diff --git a/packages/fluent-theme/tsup.config.ts b/packages/fluent-theme/tsup.config.ts
index c5b684b0d1..34c7f491b4 100644
--- a/packages/fluent-theme/tsup.config.ts
+++ b/packages/fluent-theme/tsup.config.ts
@@ -1,20 +1,27 @@
import { injectCSSPlugin } from '@msinternal/botframework-webchat-styles/build';
import { join } from 'node:path';
import { fileURLToPath } from 'node:url';
-import { defineConfig } from 'tsup';
+import { defineConfig, type Format } from 'tsup';
import { applyConfig } from '../../tsup.base.config';
import { fluentStyleContent as fluentStyleContentPlaceholder } from './src/styles/createStyles';
-const umdResolvePlugin = {
- name: 'umd-resolve',
+const EXTERNAL_PACKAGES = ['botframework-webchat'];
+
+const reactResolvePlugin = {
+ name: 'react-resolve',
setup(build) {
// ESBuild use Go regular expressions and does not understand Unicode flag.
// eslint-disable-next-line require-unicode-regexp
build.onResolve({ filter: /^react$/ }, () => ({
path: join(fileURLToPath(import.meta.url), '../src/external.umd/react.ts')
}));
+ }
+};
+const umdResolvePlugin = {
+ name: 'umd-resolve',
+ setup(build) {
// ESBuild use Go regular expressions and does not understand Unicode flag.
// eslint-disable-next-line require-unicode-regexp
build.onResolve({ filter: /^botframework-webchat-api$/ }, () => ({
@@ -47,64 +54,85 @@ const umdResolvePlugin = {
}
};
+// Everything in the same Config object will be code-split together.
+function buildApplyConfig(format: Format, bundled: boolean) {
+ return (
+ fn: (
+ config: ReturnType[0]>
+ ) => ReturnType[0]> = config => config
+ ) =>
+ applyConfig(config =>
+ fn({
+ ...config,
+ define: {
+ ...config.define,
+ 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT':
+ format === 'cjs'
+ ? '"commonjs"'
+ : format === 'esm'
+ ? '"esmodules"'
+ : format === 'iife'
+ ? '"global"'
+ : '"unknown"'
+ },
+ entry: { 'botframework-webchat-fluent-theme': './src/index.ts' },
+ esbuildPlugins: [
+ // Intentionally overriding existing esbuild plugins.
+ // ...(config.esbuildPlugins || []),
+ injectCSSPlugin({ stylesPlaceholder: fluentStyleContentPlaceholder }),
+ reactResolvePlugin
+ ],
+ external: bundled ? EXTERNAL_PACKAGES : undefined,
+ format,
+ noExternal: bundled
+ ? // The pattern is being escaped properly.
+ // eslint-disable-next-line security/detect-non-literal-regexp
+ [new RegExp(`^(?!${EXTERNAL_PACKAGES.map(packageName => `(${packageName}($|/))`, 'u').join('|')}).+`, 'u')]
+ : [
+ ...(config.noExternal ?? []),
+ '@babel/runtime',
+ 'memoize-one',
+ 'web-speech-cognitive-services',
+ // Belows are the dependency chain related to "regex" where it is named export-only and does not work on Webpack 4/PPUX (CJS cannot import named export).
+ // Webpack 4: "Can't import the named export 'rewrite' from non EcmaScript module (only default export is available)"
+ 'shiki', // shiki -> @shikijs/core -> @shikijs/engine-javascript -> regex
+ // Issues related to Webpack 4 when it tries to statically analyze dependencies.
+ // The way `microsoft-cognitiveservices-speech-sdk` imported the `uuid` package (in their `Guid.js`) is causing esbuild/tsup to proxy require() into __require() for dynamic loading.
+ // Webpack 4 cannot statically analyze the code and failed with error "Critical dependency: require function is used in a way in which dependencies cannot be statically extracted".
+ 'uuid'
+ ],
+ outDirWithTemp: bundled ? undefined : ['./exports/', './exports.tmp/'],
+ target: format === 'cjs' ? [...config.target, 'es2019'] : config.target
+ })
+ );
+}
+
export default defineConfig([
- applyConfig(config => ({
- ...config,
- define: {
- ...config.define,
- 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"commonjs"'
- },
- entry: { 'botframework-webchat-fluent-theme': './src/index.ts' },
- esbuildPlugins: [
- ...(config.esbuildPlugins || []),
- injectCSSPlugin({ stylesPlaceholder: fluentStyleContentPlaceholder })
- ],
- format: ['cjs'],
- target: [...config.target, 'es2019']
- })),
- applyConfig(config => ({
- ...config,
- define: {
- ...config.define,
- 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"esmodules"'
- },
- entry: { 'botframework-webchat-fluent-theme': './src/index.ts' },
- esbuildPlugins: [
- ...(config.esbuildPlugins || []),
- injectCSSPlugin({ stylesPlaceholder: fluentStyleContentPlaceholder })
- ],
- format: ['esm']
- })),
- applyConfig(config => ({
+ buildApplyConfig('cjs', true)(),
+ buildApplyConfig('esm', true)(),
+ buildApplyConfig('cjs', false)(),
+ buildApplyConfig('esm', false)(),
+
+ buildApplyConfig(
+ 'iife',
+ true
+ )(config => ({
...config,
- define: {
- ...config.define,
- 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"global"'
- },
entry: { 'botframework-webchat-fluent-theme.development': './src/bundle.ts' },
- esbuildPlugins: [
- ...(config.esbuildPlugins || []),
- injectCSSPlugin({ stylesPlaceholder: fluentStyleContentPlaceholder }),
- umdResolvePlugin
- ],
- format: 'iife',
+ esbuildPlugins: [...(config.esbuildPlugins || []), umdResolvePlugin],
+ // esbuildPlugins: [umdResolvePlugin],
outExtension() {
return { js: '.js' };
}
})),
- applyConfig(config => ({
+ buildApplyConfig(
+ 'iife',
+ true
+ )(config => ({
...config,
- define: {
- ...config.define,
- 'globalThis.WEB_CHAT_BUILD_INFO_MODULE_FORMAT': '"global"'
- },
entry: { 'botframework-webchat-fluent-theme.production.min': './src/bundle.ts' },
- esbuildPlugins: [
- ...(config.esbuildPlugins || []),
- injectCSSPlugin({ stylesPlaceholder: fluentStyleContentPlaceholder }),
- umdResolvePlugin
- ],
- format: 'iife',
+ esbuildPlugins: [...(config.esbuildPlugins || []), umdResolvePlugin],
+ // esbuildPlugins: [umdResolvePlugin],
minify: true,
outExtension() {
return { js: '.js' };
diff --git a/packages/react-hooks/package.json b/packages/react-hooks/package.json
index b3b4710f55..1d2d757f61 100644
--- a/packages/react-hooks/package.json
+++ b/packages/react-hooks/package.json
@@ -35,21 +35,24 @@
"./src/**/*",
"*.js"
],
- "localDependencies": {},
"homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/react-hooks#readme",
"scripts": {
- "build": "tsup --config ./tsup.config.ts",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
"eslint": "npm run precommit",
"postversion": "cat package.json | jq '.version as $V | (.localDependencies // {} | with_entries(select(.value == \"production\") | { key: .key, value: $V })) as $L1 | (.localDependencies // {} | with_entries(select(.value == \"development\") | { key: .key, value: $V })) as $L2 | ((.dependencies // {}) + $L1 | to_entries | sort_by(.key) | from_entries) as $D1 | ((.devDependencies // {}) + $L2 | to_entries | sort_by(.key) | from_entries) as $D2 | . + { dependencies: $D1, devDependencies: $D2 }' > package-temp.json && mv package-temp.json package.json",
- "precommit": "npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit": "npm run precommit:dependencies && npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit:dependencies": "jq -e '(.dependencies // {}) | length == 0' package.json >/dev/null || { echo \"fail: internal packages must have empty dependencies, save to peerDependencies instead\" >&2; exit 1; }",
"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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch"
},
+ "localDependencies": {},
"peerDependencies": {
"react": ">= 16.8.6"
}
diff --git a/packages/react-hooks/tsup.config.ts b/packages/react-hooks/tsup.config.ts
index cd7a9b44f8..143dd3216e 100644
--- a/packages/react-hooks/tsup.config.ts
+++ b/packages/react-hooks/tsup.config.ts
@@ -3,7 +3,7 @@ import { defineConfig } from 'tsup';
import { applyConfig } from '../../tsup.base.config';
// TODO: [P1] Compute this automatically.
-const DEPENDENT_PATHS = ['api/src/index.ts', 'api-middleware/src/index.ts'];
+const DEPENDENT_PATHS = ['api/src/index.ts'];
const commonConfig = applyConfig(config => ({
...config,
diff --git a/packages/react-valibot/package.json b/packages/react-valibot/package.json
index fddf4aba4f..a871e87bcd 100644
--- a/packages/react-valibot/package.json
+++ b/packages/react-valibot/package.json
@@ -31,17 +31,20 @@
"homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/react-valibot#readme",
"private": true,
"scripts": {
- "build": "tsup",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
"eslint": "npm run precommit",
"postversion": "cat package.json | jq '.version as $V | (.localDependencies // {} | with_entries(select(.value == \"production\") | { key: .key, value: $V })) as $L1 | (.localDependencies // {} | with_entries(select(.value == \"development\") | { key: .key, value: $V })) as $L2 | ((.dependencies // {}) + $L1 | to_entries | sort_by(.key) | from_entries) as $D1 | ((.devDependencies // {}) + $L2 | to_entries | sort_by(.key) | from_entries) as $D2 | . + { dependencies: $D1, devDependencies: $D2 }' > package-temp.json && mv package-temp.json package.json",
- "precommit": "npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit": "npm run precommit:dependencies && npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit:dependencies": "jq -e '(.dependencies // {}) | length == 0' package.json >/dev/null || { echo \"fail: internal packages must have empty dependencies, save to peerDependencies instead\" >&2; exit 1; }",
"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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch"
},
"localDependencies": {
"@msinternal/botframework-webchat-tsconfig": "development"
@@ -62,11 +65,9 @@
"tsup": "^8.5.0",
"typescript": "~5.8.3"
},
- "dependencies": {
- "valibot": "1.1.0"
- },
"peerDependencies": {
- "react": ">= 16.8.6"
+ "react": ">= 16.8.6",
+ "valibot": "^1.1.0"
},
"main": "index.js"
}
diff --git a/packages/react-valibot/tsup.config.ts b/packages/react-valibot/tsup.config.ts
index 046cf4f520..6136234b28 100644
--- a/packages/react-valibot/tsup.config.ts
+++ b/packages/react-valibot/tsup.config.ts
@@ -5,8 +5,7 @@ import { applyConfig } from '../../tsup.base.config';
// TODO: [P1] Compute this automatically.
const DEPENDENT_PATHS = [
'api/src/index.ts',
- 'api-middleware/src/index.ts',
- 'bundle/src/boot/exports/full.ts',
+ 'bundle/src/exports/full.ts',
'component/src/index.ts',
'debug-theme/src/index.ts',
'fluent-theme/src/index.ts',
diff --git a/packages/redux-store/package.json b/packages/redux-store/package.json
index 463bebf034..f4c3da7853 100644
--- a/packages/redux-store/package.json
+++ b/packages/redux-store/package.json
@@ -31,17 +31,20 @@
"homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/redux-store#readme",
"private": true,
"scripts": {
- "build": "tsup",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
"eslint": "npm run precommit",
"postversion": "cat package.json | jq '.version as $V | (.localDependencies // {} | with_entries(select(.value == \"production\") | { key: .key, value: $V })) as $L1 | (.localDependencies // {} | with_entries(select(.value == \"development\") | { key: .key, value: $V })) as $L2 | ((.dependencies // {}) + $L1 | to_entries | sort_by(.key) | from_entries) as $D1 | ((.devDependencies // {}) + $L2 | to_entries | sort_by(.key) | from_entries) as $D2 | . + { dependencies: $D1, devDependencies: $D2 }' > package-temp.json && mv package-temp.json package.json",
- "precommit": "npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit": "npm run precommit:dependencies && npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit:dependencies": "jq -e '(.dependencies // {}) | length == 0' package.json >/dev/null || { echo \"fail: internal packages must have empty dependencies, save to peerDependencies instead\" >&2; exit 1; }",
"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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch"
},
"localDependencies": {
"@msinternal/botframework-webchat-react-valibot": "development",
@@ -64,11 +67,9 @@
"tsup": "^8.5.0",
"typescript": "~5.8.3"
},
- "dependencies": {
- "botframework-webchat-core": "0.0.0-0",
- "valibot": "1.1.0"
- },
"peerDependencies": {
- "react": ">= 16.8.6"
+ "botframework-webchat-core": "^0.0.0-0",
+ "react": ">= 16.8.6",
+ "valibot": "^1.1.0"
}
}
diff --git a/packages/styles/package.json b/packages/styles/package.json
index 81938f7fb1..3054c696a5 100644
--- a/packages/styles/package.json
+++ b/packages/styles/package.json
@@ -56,17 +56,20 @@
],
"homepage": "https://github.com/microsoft/BotFramework-WebChat/tree/main/packages/styles#readme",
"scripts": {
- "build": "tsup",
+ "build": "npm run build:tsup && npm run build:validate",
+ "build:tsup": "tsup",
+ "build:validate": "if grep -R -n -F --include='*.d.ts' --include='*.d.mts' '@msinternal/' ./dist/; then echo '*.d.ts files should not import \"@msinternal/*\"' >&2; exit 1; fi",
"bump": "npm run bump:prod && npm run bump:dev && (npm audit fix || exit 0)",
"bump:dev": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.devDependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install $PACKAGES_TO_BUMP || true",
"bump:prod": "PACKAGES_TO_BUMP=$(cat package.json | jq -r '(.pinDependencies // {}) as $P | (.localDependencies // {} | keys) as $L | (.dependencies // {}) | to_entries | map(select(.key as $K | $L | contains([$K]) | not)) | map(.key + \"@\" + ($P[.key] // [\"latest\"])[0]) | join(\" \")') && [ ! -z \"$PACKAGES_TO_BUMP\" ] && npm install --save-exact $PACKAGES_TO_BUMP || true",
"eslint": "npm run precommit",
"postversion": "cat package.json | jq '.version as $V | (.localDependencies // {} | with_entries(select(.value == \"production\") | { key: .key, value: $V })) as $L1 | (.localDependencies // {} | with_entries(select(.value == \"development\") | { key: .key, value: $V })) as $L2 | ((.dependencies // {}) + $L1 | to_entries | sort_by(.key) | from_entries) as $D1 | ((.devDependencies // {}) + $L2 | to_entries | sort_by(.key) | from_entries) as $D2 | . + { dependencies: $D1, devDependencies: $D2 }' > package-temp.json && mv package-temp.json package.json",
- "precommit": "npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit": "npm run precommit:dependencies && npm run precommit:eslint -- src && npm run precommit:typecheck",
+ "precommit:dependencies": "jq -e '(.dependencies // {}) | length == 0' package.json >/dev/null || { echo \"fail: internal packages must have empty dependencies, save to peerDependencies instead\" >&2; exit 1; }",
"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": "cat package.json | jq '(.localDependencies // {} | to_entries | map([if .value == \"production\" then \"dependencies\" else \"devDependencies\" end, .key])) as $P | delpaths($P)' > package-temp.json && mv package-temp.json package.json",
- "start": "npm run build -- --watch"
+ "start": "npm run build:tsup -- --watch"
},
"localDependencies": {
"@msinternal/botframework-webchat-base": "development",
@@ -80,7 +83,7 @@
},
"devDependencies": {
"@jridgewell/sourcemap-codec": "^1.5.4",
- "@msinternal/botframework-webchat-base": "0.0.0-0",
+ "@msinternal/botframework-webchat-base": "^0.0.0-0",
"@msinternal/botframework-webchat-tsconfig": "^0.0.0-0",
"@types/node": "^24.1.0",
"cross-env": "^10.0.0",
diff --git a/packages/test/dev-server/src/index.js b/packages/test/dev-server/src/index.js
index 1eb9076a8a..1b34a600f2 100644
--- a/packages/test/dev-server/src/index.js
+++ b/packages/test/dev-server/src/index.js
@@ -102,6 +102,21 @@ const resolveFromRepositoryRoot = resolveFromProjectRoot.bind(undefined, '../../
app.use(/^\/__dist__\/webchat.*$/u, express.static(resolve(fileURLToPath(import.meta.url), '../../../bundle/dist')));
+ app.use(
+ /^\/__dist__\/packages\/bundle\/dist\/*$/u,
+ express.static(resolve(fileURLToPath(import.meta.url), '../../../bundle/dist'))
+ );
+
+ app.use(
+ /^\/__dist__\/packages\/debug-theme\/dist\/*$/u,
+ express.static(resolve(fileURLToPath(import.meta.url), '../../../debug-theme/dist'))
+ );
+
+ app.use(
+ /^\/__dist__\/packages\/fluent-theme\/dist\/*$/u,
+ express.static(resolve(fileURLToPath(import.meta.url), '../../../fluent-theme/dist'))
+ );
+
// Other requests will be served by `serve-handler` based on `/serve-test.json`.
app.use((req, res) => serve(req, res, { ...serveConfigJSON, public: resolveFromRepositoryRoot() }));
diff --git a/packages/test/harness/src/browser/index.js b/packages/test/harness/src/browser/index.js
index 5f408964f1..ac9c45038c 100644
--- a/packages/test/harness/src/browser/index.js
+++ b/packages/test/harness/src/browser/index.js
@@ -1,3 +1,7 @@
+// Set APIs such as .union and .difference are only available
+// starting from Chrome 122 while we need to support Chrome 110.
+import 'core-js/features/set/index.js';
+
import checkAccessibility from './globals/checkAccessibility';
import expect from './globals/expect';
import host from './globals/host';
diff --git a/packages/test/page-object/src/globals/testHelpers/speech/audioConfig/createAudioInputStreamFromRiffWavArrayBuffer.js b/packages/test/page-object/src/globals/testHelpers/speech/audioConfig/createAudioInputStreamFromRiffWavArrayBuffer.js
index 37c09ab4b1..2918fe5e87 100644
--- a/packages/test/page-object/src/globals/testHelpers/speech/audioConfig/createAudioInputStreamFromRiffWavArrayBuffer.js
+++ b/packages/test/page-object/src/globals/testHelpers/speech/audioConfig/createAudioInputStreamFromRiffWavArrayBuffer.js
@@ -1,7 +1,7 @@
// eslint no-magic-numbers: "off"
// Importing from "bundle" as we do not expose this function.
-import createAudioConfig from '../../../../../../../bundle/src/speech/createAudioConfig';
+import createAudioConfig from '../../../../../../../bundle/src/package-preset/speech/createAudioConfig';
const QUORUM_SIZE = 9600;
diff --git a/samples/package.json b/samples/package.json
index a7aaec67a8..feda09d194 100644
--- a/samples/package.json
+++ b/samples/package.json
@@ -14,9 +14,9 @@
"./06.recomposing-ui/e.extending-ui"
],
"scripts": {
- "build": "npm run build --workspaces",
+ "build": "npm run build --if-present --workspaces",
"bump": "npm run bump:workspaces && npm run bump:non-workspaces",
"bump:non-workspaces": "find . -name package.json -not -path \"./package.json\" -and -not -path \"*/node_modules/*\" -not -path \"*/07.advanced-web-chat-apps/*\" $(jq -r '.workspaces | map(\"-and -not -path \" + . + \"/package.json\") | join(\" \")' ./package.json) | xargs dirname | xargs -I {} sh -c 'cd {} && npm run bump'",
- "bump:workspaces": "npm run bump --workspaces"
+ "bump:workspaces": "npm run bump --if-present --workspaces"
}
}
diff --git a/serve-test.json b/serve-test.json
index 0df5ca6b74..f86efaf194 100644
--- a/serve-test.json
+++ b/serve-test.json
@@ -79,6 +79,22 @@
"source": "/__dist__/webchat-minimal.js.map",
"destination": "packages/bundle/dist/webchat-minimal.js.map"
},
+ {
+ "source": "/__dist__/packages/bundle/dist/:filename",
+ "destination": "packages/bundle/dist/:filename"
+ },
+ {
+ "source": "/__dist__/packages/bundle/dist/:path/:filename",
+ "destination": "packages/bundle/dist/:path/:filename"
+ },
+ {
+ "source": "/__dist__/packages/debug-theme/dist/:filename",
+ "destination": "packages/debug-theme/dist/:filename"
+ },
+ {
+ "source": "/__dist__/packages/fluent-theme/dist/:filename",
+ "destination": "packages/fluent-theme/dist/:filename"
+ },
{
"source": "/test-harness.js",
"destination": "packages/test/harness/dist/test-harness.js"
diff --git a/tsup.base.config.ts b/tsup.base.config.ts
index 2017859340..cb702cc9f2 100644
--- a/tsup.base.config.ts
+++ b/tsup.base.config.ts
@@ -10,6 +10,7 @@ const { npm_package_version } = process.env;
const istanbulPredicate: Predicate = args => defaultPredicate(args) && !/\.worker\.[cm]?[jt]s$/u.test(args.path);
type Plugin = NonNullable[number];
+
const disablePlugin = (pluginName: string): Plugin => ({
name: `disable-plugin-${pluginName}`,
esbuildOptions: options => {
@@ -40,11 +41,11 @@ function applyConfig(
esbuildPlugins: Plugin[];
target: Target[];
}
- ) => Options & {
+ ) => Omit & {
define: Record;
esbuildPlugins: Plugin[];
target: Target[];
- }
+ } & { outDirWithTemp?: [`./${string}/`, `./${string}/`] | undefined }
): Options & {
define: Record;
esbuildPlugins: Plugin[];
@@ -136,16 +137,28 @@ function applyConfig(
// All instances of tsup will try to copy at the same time and could fail with "cp: cannot create regular file './dist/...': File exists".
// We can have multiple config writing to their own folder and copy-merge. But then each config will own their version of `onSuccess`, could be messy.
+ const [outDir = './dist/', tmpDir = './dist.tmp/'] = nextOptions.outDirWithTemp || [];
+
// TODO: [P1] This merge is not elegant, we should move to Promise.
- nextOptions.onSuccess = [
- `while [ -z "$(find ./dist.tmp \\( -name '*.d.ts' -o -name '*.d.mts' \\) -print -quit)" ]; do sleep 0.2; done; mkdir -p ./dist/; sleep 0.5; until cp ./dist.tmp/* ./dist/; do sleep 0.5; done`,
- nextOptions.onSuccess
- ]
- .filter(Boolean)
- .join(' && ');
- nextOptions.outDir = './dist.tmp/';
-
- return nextOptions;
+ const rectifiedOptions = {
+ ...nextOptions,
+ onSuccess: nextOptions.dts
+ ? [
+ `while [ -z "$(find ${tmpDir} \\( -name '*.d.ts' -o -name '*.d.mts' \\) -print -quit)" ]; do sleep 0.2; done; mkdir -p ${outDir}; sleep 0.5; until cp --recursive ${tmpDir}/* ${outDir} 2>/dev/null; do sleep 0.5; done`,
+ nextOptions.onSuccess
+ ]
+ .filter(Boolean)
+ .join(' && ')
+ : [
+ `mkdir -p ${outDir}; sleep 0.5; until cp --recursive ${tmpDir}/* ${outDir} 2>/dev/null; do sleep 0.5; done`,
+ nextOptions.onSuccess
+ ]
+ .filter(Boolean)
+ .join(' && '),
+ outDir: tmpDir
+ };
+
+ return rectifiedOptions;
}
export { applyConfig };