From 4e8d7356a926594b7cd17973d7e218e53d400c40 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 06:14:44 +0000 Subject: [PATCH 01/11] Bundle globalize-runtime --- __tests__/html2/hosting/requirejs.html | 26 + package-lock.json | 467 ++++++++++++++++++ packages/api/package.json | 1 + .../scripts/createPrecompiledGlobalize.mjs | 28 +- packages/api/src/hooks/Composer.tsx | 7 +- 5 files changed, 518 insertions(+), 11 deletions(-) create mode 100644 __tests__/html2/hosting/requirejs.html diff --git a/__tests__/html2/hosting/requirejs.html b/__tests__/html2/hosting/requirejs.html new file mode 100644 index 0000000000..0763b04bcf --- /dev/null +++ b/__tests__/html2/hosting/requirejs.html @@ -0,0 +1,26 @@ + + + + + + + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json index 67fdf94590..18452e66a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24387,6 +24387,7 @@ "concurrently": "^9.1.2", "core-js": "^3.40.0", "cross-env": "^7.0.3", + "esbuild": "^0.25.4", "globalize-compiler": "^1.1.1", "iana-tz-data": "^2019.1.0", "nodemon": "^3.1.9", @@ -24398,6 +24399,431 @@ "react-dom": ">= 16.8.6" } }, + "packages/api/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/api/node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "packages/api/node_modules/@types/node": { "version": "22.13.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz", @@ -24408,6 +24834,47 @@ "undici-types": "~6.20.0" } }, + "packages/api/node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, "packages/api/node_modules/type-fest": { "version": "4.34.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.34.1.tgz", diff --git a/packages/api/package.json b/packages/api/package.json index 14ab024f9c..2fd8753a21 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -118,6 +118,7 @@ "concurrently": "^9.1.2", "core-js": "^3.40.0", "cross-env": "^7.0.3", + "esbuild": "^0.25.4", "globalize-compiler": "^1.1.1", "iana-tz-data": "^2019.1.0", "nodemon": "^3.1.9", diff --git a/packages/api/scripts/createPrecompiledGlobalize.mjs b/packages/api/scripts/createPrecompiledGlobalize.mjs index a01f697e95..cba7ba347a 100644 --- a/packages/api/scripts/createPrecompiledGlobalize.mjs +++ b/packages/api/scripts/createPrecompiledGlobalize.mjs @@ -1,4 +1,5 @@ import cldrData from 'botframework-webchat-cldr-data'; +import * as esbuild from 'esbuild'; import { existsSync } from 'fs'; import { mkdir, readFile, writeFile } from 'fs/promises'; import Globalize from 'globalize'; @@ -43,15 +44,15 @@ import { fileURLToPath } from 'url'; globalizeCompiler.compile(formattersAndParsers, { template: ({ code, dependencies }) => ` -/* eslint-disable */ -import Globalize from 'globalize/dist/globalize-runtime'; + /* eslint-disable */ + import Globalize from 'globalize/dist/globalize-runtime'; -${dependencies.map(name => `import 'globalize/dist/${name}';`).join('\n')} + ${dependencies.map(name => `import 'globalize/dist/${name}';`).join('\n')} -${code} + ${code} -export default Globalize; -` + export default Globalize; + ` }), { parser: 'babel' } ); @@ -71,4 +72,19 @@ export default Globalize; // eslint-disable-next-line no-console console.log(`Successfully compiled globalize to ${relative(cwd(), fileURLToPath(outputFileURL))}.`); + + const bundleFileURL = new URL('../src/external/PrecompiledGlobalize.bundle.js', import.meta.url); + + await esbuild.build({ + entryPoints: [fileURLToPath(outputFileURL)], + bundle: true, + define: { + 'define.amd': 'false' + }, + format: 'esm', + outfile: fileURLToPath(bundleFileURL) + }); + + // eslint-disable-next-line no-console + console.log(`Successfully bundled globalize to ${relative(cwd(), fileURLToPath(bundleFileURL))}.`); })(); diff --git a/packages/api/src/hooks/Composer.tsx b/packages/api/src/hooks/Composer.tsx index eba1563eb3..3b7f74e6ec 100644 --- a/packages/api/src/hooks/Composer.tsx +++ b/packages/api/src/hooks/Composer.tsx @@ -37,6 +37,7 @@ import { Provider } from 'react-redux'; import updateIn from 'simple-update-in'; import StyleOptions from '../StyleOptions'; +import PrecompiledGlobalize from '../external/PrecompiledGlobalize.bundle'; import usePonyfill from '../hooks/usePonyfill'; import getAllLocalizedStrings from '../localization/getAllLocalizedStrings'; import normalizeStyleOptions from '../normalizeStyleOptions'; @@ -47,6 +48,7 @@ import ActivityListenerComposer from '../providers/ActivityListener/ActivityList import ActivitySendStatusComposer from '../providers/ActivitySendStatus/ActivitySendStatusComposer'; import ActivitySendStatusTelemetryComposer from '../providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer'; import ActivityTypingComposer from '../providers/ActivityTyping/ActivityTypingComposer'; +import GroupActivitiesComposer from '../providers/GroupActivities/GroupActivitiesComposer'; import PonyfillComposer from '../providers/Ponyfill/PonyfillComposer'; import ActivityMiddleware from '../types/ActivityMiddleware'; import { type ActivityStatusMiddleware, type RenderActivityStatus } from '../types/ActivityStatusMiddleware'; @@ -80,11 +82,6 @@ import createDefaultCardActionMiddleware from './middleware/createDefaultCardAct import useMarkAllAsAcknowledged from './useMarkAllAsAcknowledged'; import ErrorBoundary from './utils/ErrorBoundary'; import observableToPromise from './utils/observableToPromise'; - -// PrecompileGlobalize is a generated file and is not ES module. TypeScript don't work with UMD. -// @ts-ignore -import PrecompiledGlobalize from '../external/PrecompiledGlobalize'; -import GroupActivitiesComposer from '../providers/GroupActivities/GroupActivitiesComposer'; import { parseUIState } from './validation/uiState'; // List of Redux actions factory we are hoisting as Web Chat functions From 57cf5741416ec4a6e172eaa630e512c141eb213e Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 06:43:08 +0000 Subject: [PATCH 02/11] Disable ESLint for PrecompiledGlobalize.bundle.js --- packages/api/scripts/createPrecompiledGlobalize.mjs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/api/scripts/createPrecompiledGlobalize.mjs b/packages/api/scripts/createPrecompiledGlobalize.mjs index cba7ba347a..2a37194ddb 100644 --- a/packages/api/scripts/createPrecompiledGlobalize.mjs +++ b/packages/api/scripts/createPrecompiledGlobalize.mjs @@ -76,11 +76,14 @@ import { fileURLToPath } from 'url'; const bundleFileURL = new URL('../src/external/PrecompiledGlobalize.bundle.js', import.meta.url); await esbuild.build({ - entryPoints: [fileURLToPath(outputFileURL)], + banner: { + js: '/* eslint-disable */' + }, bundle: true, define: { 'define.amd': 'false' }, + entryPoints: [fileURLToPath(outputFileURL)], format: 'esm', outfile: fileURLToPath(bundleFileURL) }); From 04310e0ffb48f2e35e13529585ee63dd7cedd4f7 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 06:43:12 +0000 Subject: [PATCH 03/11] Add entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54bab96543..64d8db5d11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -219,6 +219,7 @@ Notes: web developers are advised to use [`~` (tilde range)](https://github.com/ - Fixed [#5452](https://github.com/microsoft/BotFramework-WebChat/issues/5452). With Fluent/Copilot theme, the typing indicator padding should not be squashed, in PR [#5453](https://github.com/microsoft/BotFramework-WebChat/pull/5453), by [@compulim](https://github.com/compulim) - Fixed [#5461](https://github.com/microsoft/BotFramework-WebChat/issues/5461). On macOS and Fluent skinpack applied, using Japanese IME to input some Japanese text should not send them immediately, in PR [#5462](https://github.com/microsoft/BotFramework-WebChat/pull/5462), by [@compulim](https://github.com/compulim) - Fixed [#5472](https://github.com/microsoft/BotFramework-WebChat/issues/5472), ensure proper inheritance from the outside of Web Chat for visibility CSS property when hidden, in PR [#5473](https://github.com/microsoft/BotFramework-WebChat/pull/5473), by [@OEvgeny](https://github.com/OEvgeny) +- Fixed [#5474](https://github.com/microsoft/BotFramework-WebChat/issues/5474). Bundle `globalize-runtime` and disabling its AMD glue code, in PR [#5478](https://github.com/microsoft/BotFramework-WebChat/pull/5478), by [@compulim](https://github.com/compulim) # Removed From 40baa441ba50a4a0cdff490b75afe7051e3412c6 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 07:00:47 +0000 Subject: [PATCH 04/11] Use undefined --- .../api/scripts/createPrecompiledGlobalize.mjs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/api/scripts/createPrecompiledGlobalize.mjs b/packages/api/scripts/createPrecompiledGlobalize.mjs index 2a37194ddb..f0383f95b8 100644 --- a/packages/api/scripts/createPrecompiledGlobalize.mjs +++ b/packages/api/scripts/createPrecompiledGlobalize.mjs @@ -44,15 +44,15 @@ import { fileURLToPath } from 'url'; globalizeCompiler.compile(formattersAndParsers, { template: ({ code, dependencies }) => ` - /* eslint-disable */ - import Globalize from 'globalize/dist/globalize-runtime'; +/* eslint-disable */ +import Globalize from 'globalize/dist/globalize-runtime'; - ${dependencies.map(name => `import 'globalize/dist/${name}';`).join('\n')} +${dependencies.map(name => `import 'globalize/dist/${name}';`).join('\n')} - ${code} +${code} - export default Globalize; - ` +export default Globalize; +` }), { parser: 'babel' } ); @@ -81,7 +81,8 @@ import { fileURLToPath } from 'url'; }, bundle: true, define: { - 'define.amd': 'false' + define: 'undefined', + 'define.amd': 'undefined' }, entryPoints: [fileURLToPath(outputFileURL)], format: 'esm', From 6a769ef571289ccecfff9195d660da879f768caf Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 08:14:36 +0000 Subject: [PATCH 05/11] Disable AMD on bundled code --- tsup.base.config.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tsup.base.config.ts b/tsup.base.config.ts index bfa1a32083..ed6198abcd 100644 --- a/tsup.base.config.ts +++ b/tsup.base.config.ts @@ -17,6 +17,11 @@ const baseConfig: Options & { target: Target[] } = { ...(npm_package_version ? { npm_package_version } : {}) }, esbuildOptions: options => { + options.define = options.define || {}; + + options.define.define = 'undefined'; + options.define['define.amd'] = 'undefined'; + options.legalComments = 'linked'; }, esbuildPlugins: From d62c5e65751daefcef3cf3a22c1da1be38a210a7 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 08:47:32 +0000 Subject: [PATCH 06/11] Update entry --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64d8db5d11..40594a93e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -219,7 +219,8 @@ Notes: web developers are advised to use [`~` (tilde range)](https://github.com/ - Fixed [#5452](https://github.com/microsoft/BotFramework-WebChat/issues/5452). With Fluent/Copilot theme, the typing indicator padding should not be squashed, in PR [#5453](https://github.com/microsoft/BotFramework-WebChat/pull/5453), by [@compulim](https://github.com/compulim) - Fixed [#5461](https://github.com/microsoft/BotFramework-WebChat/issues/5461). On macOS and Fluent skinpack applied, using Japanese IME to input some Japanese text should not send them immediately, in PR [#5462](https://github.com/microsoft/BotFramework-WebChat/pull/5462), by [@compulim](https://github.com/compulim) - Fixed [#5472](https://github.com/microsoft/BotFramework-WebChat/issues/5472), ensure proper inheritance from the outside of Web Chat for visibility CSS property when hidden, in PR [#5473](https://github.com/microsoft/BotFramework-WebChat/pull/5473), by [@OEvgeny](https://github.com/OEvgeny) -- Fixed [#5474](https://github.com/microsoft/BotFramework-WebChat/issues/5474). Bundle `globalize-runtime` and disabling its AMD glue code, in PR [#5478](https://github.com/microsoft/BotFramework-WebChat/pull/5478), by [@compulim](https://github.com/compulim) +- Fixed [#5474](https://github.com/microsoft/BotFramework-WebChat/issues/5474). Bundle `globalize-runtime` and disabling AMD glue code in the bundle, in PR [#5478](https://github.com/microsoft/BotFramework-WebChat/pull/5478), by [@compulim](https://github.com/compulim) + - Downstreamers who use our CommonJS and ES Modules output will need to disable AMD themselves to prevent conflict with RequireJS # Removed From 8051742773962f8223ef446a163fdeb6938860cd Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 18:37:42 +0000 Subject: [PATCH 07/11] Revert globalize changes and remove define from test harness --- package-lock.json | 467 ------------------ packages/api/package.json | 1 - .../scripts/createPrecompiledGlobalize.mjs | 20 - packages/api/src/hooks/Composer.tsx | 2 +- packages/test/harness/package.json | 2 +- packages/test/page-object/package.json | 2 +- 6 files changed, 3 insertions(+), 491 deletions(-) diff --git a/package-lock.json b/package-lock.json index 18452e66a4..67fdf94590 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24387,7 +24387,6 @@ "concurrently": "^9.1.2", "core-js": "^3.40.0", "cross-env": "^7.0.3", - "esbuild": "^0.25.4", "globalize-compiler": "^1.1.1", "iana-tz-data": "^2019.1.0", "nodemon": "^3.1.9", @@ -24399,431 +24398,6 @@ "react-dom": ">= 16.8.6" } }, - "packages/api/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/android-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/android-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/android-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/darwin-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-arm": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-loong64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-s390x": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/linux-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/sunos-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/win32-arm64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/win32-ia32": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "packages/api/node_modules/@esbuild/win32-x64": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "packages/api/node_modules/@types/node": { "version": "22.13.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz", @@ -24834,47 +24408,6 @@ "undici-types": "~6.20.0" } }, - "packages/api/node_modules/esbuild": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.4", - "@esbuild/android-arm": "0.25.4", - "@esbuild/android-arm64": "0.25.4", - "@esbuild/android-x64": "0.25.4", - "@esbuild/darwin-arm64": "0.25.4", - "@esbuild/darwin-x64": "0.25.4", - "@esbuild/freebsd-arm64": "0.25.4", - "@esbuild/freebsd-x64": "0.25.4", - "@esbuild/linux-arm": "0.25.4", - "@esbuild/linux-arm64": "0.25.4", - "@esbuild/linux-ia32": "0.25.4", - "@esbuild/linux-loong64": "0.25.4", - "@esbuild/linux-mips64el": "0.25.4", - "@esbuild/linux-ppc64": "0.25.4", - "@esbuild/linux-riscv64": "0.25.4", - "@esbuild/linux-s390x": "0.25.4", - "@esbuild/linux-x64": "0.25.4", - "@esbuild/netbsd-arm64": "0.25.4", - "@esbuild/netbsd-x64": "0.25.4", - "@esbuild/openbsd-arm64": "0.25.4", - "@esbuild/openbsd-x64": "0.25.4", - "@esbuild/sunos-x64": "0.25.4", - "@esbuild/win32-arm64": "0.25.4", - "@esbuild/win32-ia32": "0.25.4", - "@esbuild/win32-x64": "0.25.4" - } - }, "packages/api/node_modules/type-fest": { "version": "4.34.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.34.1.tgz", diff --git a/packages/api/package.json b/packages/api/package.json index 2fd8753a21..14ab024f9c 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -118,7 +118,6 @@ "concurrently": "^9.1.2", "core-js": "^3.40.0", "cross-env": "^7.0.3", - "esbuild": "^0.25.4", "globalize-compiler": "^1.1.1", "iana-tz-data": "^2019.1.0", "nodemon": "^3.1.9", diff --git a/packages/api/scripts/createPrecompiledGlobalize.mjs b/packages/api/scripts/createPrecompiledGlobalize.mjs index f0383f95b8..a01f697e95 100644 --- a/packages/api/scripts/createPrecompiledGlobalize.mjs +++ b/packages/api/scripts/createPrecompiledGlobalize.mjs @@ -1,5 +1,4 @@ import cldrData from 'botframework-webchat-cldr-data'; -import * as esbuild from 'esbuild'; import { existsSync } from 'fs'; import { mkdir, readFile, writeFile } from 'fs/promises'; import Globalize from 'globalize'; @@ -72,23 +71,4 @@ export default Globalize; // eslint-disable-next-line no-console console.log(`Successfully compiled globalize to ${relative(cwd(), fileURLToPath(outputFileURL))}.`); - - const bundleFileURL = new URL('../src/external/PrecompiledGlobalize.bundle.js', import.meta.url); - - await esbuild.build({ - banner: { - js: '/* eslint-disable */' - }, - bundle: true, - define: { - define: 'undefined', - 'define.amd': 'undefined' - }, - entryPoints: [fileURLToPath(outputFileURL)], - format: 'esm', - outfile: fileURLToPath(bundleFileURL) - }); - - // eslint-disable-next-line no-console - console.log(`Successfully bundled globalize to ${relative(cwd(), fileURLToPath(bundleFileURL))}.`); })(); diff --git a/packages/api/src/hooks/Composer.tsx b/packages/api/src/hooks/Composer.tsx index 3b7f74e6ec..ac9c26adc5 100644 --- a/packages/api/src/hooks/Composer.tsx +++ b/packages/api/src/hooks/Composer.tsx @@ -37,7 +37,7 @@ import { Provider } from 'react-redux'; import updateIn from 'simple-update-in'; import StyleOptions from '../StyleOptions'; -import PrecompiledGlobalize from '../external/PrecompiledGlobalize.bundle'; +import PrecompiledGlobalize from '../external/PrecompiledGlobalize'; import usePonyfill from '../hooks/usePonyfill'; import getAllLocalizedStrings from '../localization/getAllLocalizedStrings'; import normalizeStyleOptions from '../normalizeStyleOptions'; diff --git a/packages/test/harness/package.json b/packages/test/harness/package.json index 70baf1a722..c7e1867926 100644 --- a/packages/test/harness/package.json +++ b/packages/test/harness/package.json @@ -14,7 +14,7 @@ "scripts": { "build": "npm run build:babel && npm run build:esbuild", "build:babel": "babel --config-file ./babel.config.json --out-dir lib src", - "build:esbuild": "esbuild lib/browser/index.js --bundle --define:process.env.CI=undefined --outfile=dist/test-harness.js --sourcemap --target=chrome100", + "build:esbuild": "esbuild lib/browser/index.js --bundle --define:define=undefined --define:define.amd=undefined --define:process.env.CI=undefined --outfile=dist/test-harness.js --sourcemap --target=chrome100", "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", diff --git a/packages/test/page-object/package.json b/packages/test/page-object/package.json index 8df53ce2c1..c86b61e993 100644 --- a/packages/test/page-object/package.json +++ b/packages/test/page-object/package.json @@ -11,7 +11,7 @@ "scripts": { "build": "npm run build:babel && npm run build:esbuild", "build:babel": "babel --out-dir lib/ src/", - "build:esbuild": "esbuild lib/index.js --bundle --outfile=dist/test-page-object.js --sourcemap --target=chrome100", + "build:esbuild": "esbuild lib/index.js --bundle --define:define=undefined --define:define.amd=undefined --outfile=dist/test-page-object.js --sourcemap --target=chrome100", "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", From 05a542e1f35893480569f666db011d7275909e68 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 18:39:43 +0000 Subject: [PATCH 08/11] Revert --- packages/api/src/hooks/Composer.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/api/src/hooks/Composer.tsx b/packages/api/src/hooks/Composer.tsx index ac9c26adc5..eba1563eb3 100644 --- a/packages/api/src/hooks/Composer.tsx +++ b/packages/api/src/hooks/Composer.tsx @@ -37,7 +37,6 @@ import { Provider } from 'react-redux'; import updateIn from 'simple-update-in'; import StyleOptions from '../StyleOptions'; -import PrecompiledGlobalize from '../external/PrecompiledGlobalize'; import usePonyfill from '../hooks/usePonyfill'; import getAllLocalizedStrings from '../localization/getAllLocalizedStrings'; import normalizeStyleOptions from '../normalizeStyleOptions'; @@ -48,7 +47,6 @@ import ActivityListenerComposer from '../providers/ActivityListener/ActivityList import ActivitySendStatusComposer from '../providers/ActivitySendStatus/ActivitySendStatusComposer'; import ActivitySendStatusTelemetryComposer from '../providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer'; import ActivityTypingComposer from '../providers/ActivityTyping/ActivityTypingComposer'; -import GroupActivitiesComposer from '../providers/GroupActivities/GroupActivitiesComposer'; import PonyfillComposer from '../providers/Ponyfill/PonyfillComposer'; import ActivityMiddleware from '../types/ActivityMiddleware'; import { type ActivityStatusMiddleware, type RenderActivityStatus } from '../types/ActivityStatusMiddleware'; @@ -82,6 +80,11 @@ import createDefaultCardActionMiddleware from './middleware/createDefaultCardAct import useMarkAllAsAcknowledged from './useMarkAllAsAcknowledged'; import ErrorBoundary from './utils/ErrorBoundary'; import observableToPromise from './utils/observableToPromise'; + +// PrecompileGlobalize is a generated file and is not ES module. TypeScript don't work with UMD. +// @ts-ignore +import PrecompiledGlobalize from '../external/PrecompiledGlobalize'; +import GroupActivitiesComposer from '../providers/GroupActivities/GroupActivitiesComposer'; import { parseUIState } from './validation/uiState'; // List of Redux actions factory we are hoisting as Web Chat functions From f5618d259c8c67717b963f9f58a155979f37b467 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 18:50:05 +0000 Subject: [PATCH 09/11] Add comment --- tsup.base.config.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tsup.base.config.ts b/tsup.base.config.ts index ed6198abcd..c13257ebd7 100644 --- a/tsup.base.config.ts +++ b/tsup.base.config.ts @@ -17,8 +17,14 @@ const baseConfig: Options & { target: Target[] } = { ...(npm_package_version ? { npm_package_version } : {}) }, esbuildOptions: options => { + // esbuild don't touch AMD but it also don't remove AMD glue code. + // Some of our packages prefers AMD over CJS via UMD and it also use anonymous modules. + // This combination conflict with RequireJS if it present in the system. + // We are removing AMD glue code manually, just like how Rollup does. + // Read more at https://github.com/evanw/esbuild/issues/1348. + // Also https://github.com/rollup/plugins/blob/e1a5ef99f1578eb38a8c87563cb9651db228f3bd/packages/commonjs/src/transform-commonjs.js#L328. + // Test case at /__tests__/html2/hosting/requirejs.html. options.define = options.define || {}; - options.define.define = 'undefined'; options.define['define.amd'] = 'undefined'; From 3f6d46ad460ed047f41f2db3a1ae7ebe4ce9cf2e Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 19:03:26 +0000 Subject: [PATCH 10/11] Remove define.amd --- packages/test/harness/package.json | 2 +- packages/test/page-object/package.json | 2 +- tsup.base.config.ts | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/test/harness/package.json b/packages/test/harness/package.json index c7e1867926..82ec25ea8e 100644 --- a/packages/test/harness/package.json +++ b/packages/test/harness/package.json @@ -14,7 +14,7 @@ "scripts": { "build": "npm run build:babel && npm run build:esbuild", "build:babel": "babel --config-file ./babel.config.json --out-dir lib src", - "build:esbuild": "esbuild lib/browser/index.js --bundle --define:define=undefined --define:define.amd=undefined --define:process.env.CI=undefined --outfile=dist/test-harness.js --sourcemap --target=chrome100", + "build:esbuild": "esbuild lib/browser/index.js --bundle --define:define=undefined --define:process.env.CI=undefined --outfile=dist/test-harness.js --sourcemap --target=chrome100", "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", diff --git a/packages/test/page-object/package.json b/packages/test/page-object/package.json index c86b61e993..29258a3d12 100644 --- a/packages/test/page-object/package.json +++ b/packages/test/page-object/package.json @@ -11,7 +11,7 @@ "scripts": { "build": "npm run build:babel && npm run build:esbuild", "build:babel": "babel --out-dir lib/ src/", - "build:esbuild": "esbuild lib/index.js --bundle --define:define=undefined --define:define.amd=undefined --outfile=dist/test-page-object.js --sourcemap --target=chrome100", + "build:esbuild": "esbuild lib/index.js --bundle --define:define=undefined --outfile=dist/test-page-object.js --sourcemap --target=chrome100", "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", diff --git a/tsup.base.config.ts b/tsup.base.config.ts index c13257ebd7..7c853c8732 100644 --- a/tsup.base.config.ts +++ b/tsup.base.config.ts @@ -26,7 +26,6 @@ const baseConfig: Options & { target: Target[] } = { // Test case at /__tests__/html2/hosting/requirejs.html. options.define = options.define || {}; options.define.define = 'undefined'; - options.define['define.amd'] = 'undefined'; options.legalComments = 'linked'; }, From 1c64f0c7a90e83481a5da82f20af49602dc0a540 Mon Sep 17 00:00:00 2001 From: William Wong Date: Thu, 15 May 2025 19:06:54 +0000 Subject: [PATCH 11/11] Update entry --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40594a93e9..06d825402c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -219,8 +219,8 @@ Notes: web developers are advised to use [`~` (tilde range)](https://github.com/ - Fixed [#5452](https://github.com/microsoft/BotFramework-WebChat/issues/5452). With Fluent/Copilot theme, the typing indicator padding should not be squashed, in PR [#5453](https://github.com/microsoft/BotFramework-WebChat/pull/5453), by [@compulim](https://github.com/compulim) - Fixed [#5461](https://github.com/microsoft/BotFramework-WebChat/issues/5461). On macOS and Fluent skinpack applied, using Japanese IME to input some Japanese text should not send them immediately, in PR [#5462](https://github.com/microsoft/BotFramework-WebChat/pull/5462), by [@compulim](https://github.com/compulim) - Fixed [#5472](https://github.com/microsoft/BotFramework-WebChat/issues/5472), ensure proper inheritance from the outside of Web Chat for visibility CSS property when hidden, in PR [#5473](https://github.com/microsoft/BotFramework-WebChat/pull/5473), by [@OEvgeny](https://github.com/OEvgeny) -- Fixed [#5474](https://github.com/microsoft/BotFramework-WebChat/issues/5474). Bundle `globalize-runtime` and disabling AMD glue code in the bundle, in PR [#5478](https://github.com/microsoft/BotFramework-WebChat/pull/5478), by [@compulim](https://github.com/compulim) - - Downstreamers who use our CommonJS and ES Modules output will need to disable AMD themselves to prevent conflict with RequireJS +- Fixed [#5474](https://github.com/microsoft/BotFramework-WebChat/issues/5474). Disable AMD glue code in bundle, in PR [#5478](https://github.com/microsoft/BotFramework-WebChat/pull/5478), by [@compulim](https://github.com/compulim) + - Downstreamers who use our CommonJS and ES Modules output with esbuild will need to disable AMD themselves to prevent conflict with RequireJS # Removed