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