From a873bf0f29e26b8c074b2e1fe690282b1f5c8c64 Mon Sep 17 00:00:00 2001 From: Eugene Date: Tue, 8 Jul 2025 23:52:23 +0000 Subject: [PATCH 1/9] fix: test failures due to esm.sh rate limits --- docker-compose-wsl2.yml | 12 ++ package-lock.json | 175 ++++++++++++++++++++++ packages/test/web-server/package.json | 1 + packages/test/web-server/src/handleEsm.ts | 70 +++++++++ packages/test/web-server/src/index.ts | 10 +- packages/test/web-server/tsup.config.ts | 3 +- testharness2.dockerfile | 2 + 7 files changed, 271 insertions(+), 2 deletions(-) create mode 100644 packages/test/web-server/src/handleEsm.ts diff --git a/docker-compose-wsl2.yml b/docker-compose-wsl2.yml index cec2dbf9da..d3b588712a 100644 --- a/docker-compose-wsl2.yml +++ b/docker-compose-wsl2.yml @@ -3,6 +3,15 @@ version: '3' services: # On Windows, run with COMPOSE_CONVERT_WINDOWS_PATHS=1 + esm: + image: ghcr.io/esm-dev/esm.sh:latest + ports: + - "8080:8080" + environment: + - NPM_REGISTRY=https://registry.npmjs.org/ + volumes: + - esm_data:/esmd + chrome: image: selenium/node-chrome:110.0 depends_on: @@ -56,3 +65,6 @@ services: ports: - '4445:4445' stop_grace_period: 5s + +volumes: + esm_data: \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index be370c1714..0e5ec6691a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -107,6 +107,180 @@ "node": ">=6.0.0" } }, + "node_modules/@ast-grep/napi": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi/-/napi-0.38.6.tgz", + "integrity": "sha512-DGQfGPv0mQriq0Ale/A8jh7YUEjyaP7aY9r8HHSRsig6MIHWi7pnm2xqTv/+GwvfKV6wUi41Zs2asO4feuxOWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@ast-grep/napi-darwin-arm64": "0.38.6", + "@ast-grep/napi-darwin-x64": "0.38.6", + "@ast-grep/napi-linux-arm64-gnu": "0.38.6", + "@ast-grep/napi-linux-arm64-musl": "0.38.6", + "@ast-grep/napi-linux-x64-gnu": "0.38.6", + "@ast-grep/napi-linux-x64-musl": "0.38.6", + "@ast-grep/napi-win32-arm64-msvc": "0.38.6", + "@ast-grep/napi-win32-ia32-msvc": "0.38.6", + "@ast-grep/napi-win32-x64-msvc": "0.38.6" + } + }, + "node_modules/@ast-grep/napi-darwin-arm64": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-arm64/-/napi-darwin-arm64-0.38.6.tgz", + "integrity": "sha512-HMGgGc5CJu7yc52ndp98d5Fa6jr5C5tE9Z5naOKb76dRAq+eBAsTXhsq9KLagHLC0pNd6ALYk243yySCJN1iQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-darwin-x64": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-x64/-/napi-darwin-x64-0.38.6.tgz", + "integrity": "sha512-GSSOT/Au67NHX6zG2QwiceEFs37Fs232LnXMffI+UQKS8ORFD7/n4tK1ObJW54Mtlx2J/JvHUrdIJCNFFwoY/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-arm64-gnu": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-gnu/-/napi-linux-arm64-gnu-0.38.6.tgz", + "integrity": "sha512-qFaAzc3vbd/j6dbBtfYzgbDNpRlUcGIt5MVW5ri04Fm90vaFjFQ//8WYdMzPu8pJWgSEyDVDPRZYTeeEVz6veQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-arm64-musl": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-musl/-/napi-linux-arm64-musl-0.38.6.tgz", + "integrity": "sha512-+r/aKRF34hcHfveqX101WIIYAamOvf3Gh8L90lD26Wrp7OSwpQRA22+pAJONJbxGKurrnsk0pKWaDavRyEQVKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-x64-gnu": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-gnu/-/napi-linux-x64-gnu-0.38.6.tgz", + "integrity": "sha512-C+kZN2mhEN3oZBsbjpCSyAo0fsMeGdYBE00RiTrc7nFr1hmdoAJzPzSCN5vD+DPWzvLrpb1G7pKl4XRzo1Rw2g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-x64-musl": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-musl/-/napi-linux-x64-musl-0.38.6.tgz", + "integrity": "sha512-putEXdOC0LIwVNSGV/pNQA+0fGMEB+Zn5tG6lKb7yycgRDNic10gjz2Zerb2QQk8g+PP2TubzJ3FFfPkgpAvfw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-arm64-msvc": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-arm64-msvc/-/napi-win32-arm64-msvc-0.38.6.tgz", + "integrity": "sha512-XVe+xWjIyOVwWWK1popPh7502blGVQmJz5WV0lANVORazSzVQQAIRXBjSM6UsXSZi/pNDIL+Rw69rQSu2pDPPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-ia32-msvc": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-ia32-msvc/-/napi-win32-ia32-msvc-0.38.6.tgz", + "integrity": "sha512-m6bUCIRs7bYkmnbzkzYEycAXXQ2xynVCbsOh7q6/grWnQP6nweTGpwn/Rjep2P+JiuUlG5e2lTfBr2DAj1JG2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-x64-msvc": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-x64-msvc/-/napi-win32-x64-msvc-0.38.6.tgz", + "integrity": "sha512-Q7L+gVafW3z8NK3ASbY2t1C2lsO3fDOcQU4Pfm1IfeToJJtdntbw9sg1ULEZzwKq+AviuS4L35XcfxKDSWNu+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@babel/cli": { "version": "7.25.6", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.25.6.tgz", @@ -27293,6 +27467,7 @@ "serve-handler": "6.1.6" }, "devDependencies": { + "@ast-grep/napi": "^0.38.6", "tsup": "^8.3.6" } } diff --git a/packages/test/web-server/package.json b/packages/test/web-server/package.json index c88ebc55e4..ce8a3142ed 100644 --- a/packages/test/web-server/package.json +++ b/packages/test/web-server/package.json @@ -25,6 +25,7 @@ "serve-handler": "6.1.6" }, "devDependencies": { + "@ast-grep/napi": "^0.38.6", "tsup": "^8.3.6" } } diff --git a/packages/test/web-server/src/handleEsm.ts b/packages/test/web-server/src/handleEsm.ts new file mode 100644 index 0000000000..be3b0d2c6a --- /dev/null +++ b/packages/test/web-server/src/handleEsm.ts @@ -0,0 +1,70 @@ +/* eslint-disable no-magic-numbers */ +import { parse, Lang, type Edit } from '@ast-grep/napi'; + +// Rule for rewriting ESM imports/exports +// Use playground to test and modify the rule: +// https://ast-grep.github.io/playground.html#eyJtb2RlIjoiQ29uZmlnIiwibGFuZyI6ImphdmFzY3JpcHQiLCJxdWVyeSI6ImltcG9ydCAkWCBmcm9tICRTUkMiLCJyZXdyaXRlIjoiaW1wb3J0ICRYIGZyb20gJFNSQyIsInN0cmljdG5lc3MiOiJzbWFydCIsInNlbGVjdG9yIjoiIiwiY29uZmlnIjoiIyBZQU1MIFJ1bGUgaXMgbW9yZSBwb3dlcmZ1bCFcbiMgaHR0cHM6Ly9hc3QtZ3JlcC5naXRodWIuaW8vZ3VpZGUvcnVsZS1jb25maWcuaHRtbCNydWxlXG5ydWxlOlxuICBraW5kOiBzdHJpbmdfZnJhZ21lbnRcbiAgcmVnZXg6IF5cXC9cbiAgcGF0dGVybjogXG4gICAgY29udGV4dDogJEFcbiAgaW5zaWRlOlxuICAgIGtpbmQ6IHN0cmluZ1xuICAgIG50aENoaWxkOlxuICAgICAgcG9zaXRpb246IDFcbiAgICAgIHJldmVyc2U6IHRydWVcbiAgICBpbnNpZGU6XG4gICAgICBhbnk6XG4gICAgICAgIC0ga2luZDogZXhwb3J0X3N0YXRlbWVudFxuICAgICAgICAtIGtpbmQ6IGltcG9ydF9zdGF0ZW1lbnRcbiAgICAgICAgLSBraW5kOiBhcmd1bWVudHNcbiAgICAgICAgICBpbnNpZGU6XG4gICAgICAgICAgICBraW5kOiBjYWxsX2V4cHJlc3Npb25cbiAgICAgICAgICAgIHBhdHRlcm46IGltcG9ydCgkJCQpXG5maXg6XG4gIC9lc20kQVxuIiwic291cmNlIjoiLyogZXNtLnNoIC0gcmVhY3RAMTkuMS4wICovXG5leHBvcnQgKiBmcm9tIFwiL3JlYWN0QDE5LjEuMC9lczIwMjIvcmVhY3QubWpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IH0gZnJvbSBcIi9yZWFjdEAxOS4xLjAvZXMyMDIyL3JlYWN0Lm1qc1wiO1xuaW1wb3J0ICogYXMgZm9vIGZyb20gXCIvcmVhY3RAMTkuMS4wL2VzMjAyMi9yZWFjdC5tanNcIjtcbmltcG9ydCAnL3Rlc3QnXG5cbmltcG9ydCgnL2Zvby8nKVxudGVzdCgnL2Zvby8nKVxuIn0= +const ruleConfig = { + rule: { + kind: 'string_fragment', + regex: '^\\/', + pattern: { + context: '$A' + }, + inside: { + kind: 'string', + nthChild: { + position: 1, + reverse: true + }, + inside: { + any: [ + { + kind: 'export_statement' + }, + { + kind: 'import_statement' + }, + { + kind: 'arguments', + inside: { + kind: 'call_expression', + pattern: 'import($$$)' + } + } + ] + } + } + }, + fix: '/esm$A' +}; + +export const handleEsm = async (req, res) => { + try { + const targetPath = req.url.replace(/^\/esm/u, ''); + const upstreamUrl = `http://esm:8080${targetPath}`; + + const upstreamRes = await fetch(upstreamUrl); + if (!upstreamRes.ok) { + res.writeHead(upstreamRes.status); + return res.end(await upstreamRes.text()); + } + const sourceJS = await upstreamRes.text(); + + const root = parse(Lang.JavaScript, sourceJS).root(); + const edits: Edit[] = []; + + for (const match of root.findAll(ruleConfig)) { + const text = match.getMatch('A')?.text(); + text && edits.push(match.replace(ruleConfig.fix.replace('$A', text))); + } + + const outJS = root.commitEdits(edits); + res.setHeader('Content-Type', 'application/javascript'); + return res.end(outJS); + } catch (err) { + console.error('ESM proxy error:', err); + res.writeHead(500); + return res.end(err.stack); + } +}; diff --git a/packages/test/web-server/src/index.ts b/packages/test/web-server/src/index.ts index 7b2b320b29..4d5ae3be29 100644 --- a/packages/test/web-server/src/index.ts +++ b/packages/test/web-server/src/index.ts @@ -5,6 +5,8 @@ import { createServer as createSecureServer } from 'node:https'; import selfsigned from 'selfsigned'; import handleServe from 'serve-handler'; +import { handleEsm } from './handleEsm'; + const { // eslint-disable-next-line no-magic-numbers env: { PORT = 5081, PORTS = 5443 } @@ -15,7 +17,13 @@ const { const attrs = [{ name: 'commonName', value: 'webchat2' }]; const pems = selfsigned.generate(attrs, { days: 365 }); - const handler = (req, res) => handleServe(req, res, config); + const handler = (req, res) => { + if (req.url.startsWith('/esm/')) { + return handleEsm(req, res); + } + + return handleServe(req, res, config); + }; createSecureServer( { diff --git a/packages/test/web-server/tsup.config.ts b/packages/test/web-server/tsup.config.ts index fe084a9c43..3e70a1c2b1 100644 --- a/packages/test/web-server/tsup.config.ts +++ b/packages/test/web-server/tsup.config.ts @@ -6,5 +6,6 @@ export default defineConfig({ }, format: 'cjs', platform: 'node', - noExternal: ['selfsigned', 'serve-handler'] + noExternal: ['selfsigned', 'serve-handler'], + external: ['@ast-grep/napi'] }); diff --git a/testharness2.dockerfile b/testharness2.dockerfile index 6aaaeb836c..19b79d4ae0 100644 --- a/testharness2.dockerfile +++ b/testharness2.dockerfile @@ -18,3 +18,5 @@ ENTRYPOINT ["node", "./index.js"] ADD serve-test.json /var/web/serve.json ADD packages/test/web-server/dist/index.js /var/web/ RUN echo {}>/var/web/package.json +WORKDIR /var/web/ +RUN npm i @ast-grep/napi@0.38.6 From 9198719a1fe7a2045ff7014dfc80fb5a1da825df Mon Sep 17 00:00:00 2001 From: Eugene Date: Tue, 8 Jul 2025 23:56:15 +0000 Subject: [PATCH 2/9] Update test definitions --- __tests__/html2/activity/collapsible.html | 8 +- __tests__/html2/basic/customIcons.html | 8 +- __tests__/html2/copyButton/layout.html | 8 +- .../behavior.changeMind.keyboard.html | 2 +- .../behavior.changeMind.mouse.html | 2 +- .../behavior.resetByEscapeKey.html | 2 +- .../feedbackForm/behavior.selectByClick.html | 2 +- .../feedbackForm/feedback.form.activity.html | 2 +- .../feedbackForm/feedback.form.scroll.html | 8 +- .../feedbackStatus/behavior.escapeKey.html | 2 +- __tests__/html2/feedbackStatus/layout.html | 2 +- .../fluentTheme/defaultFeedback.activity.html | 8 +- __tests__/html2/fluentTheme/fallback.html | 8 +- .../uiState.blueprint.nonEnglish.html | 8 +- __tests__/html2/fluentTheme/uiState.html | 8 +- __tests__/html2/hooks/useDictateState.html | 2 +- .../html2/hooks/useEmitTypingIndicator.html | 2 +- ...useSendTypingIndicator.propsSetToTrue.html | 2 +- .../useSendTypingIndicator.propsUnset.html | 2 +- __tests__/html2/linkDefinition/badge.html | 8 +- .../html2/markdown/math/layout.scroll.html | 8 +- .../html2/preact/fluentTheme/simple.html | 209 +++++++++++++----- .../previewBeforeSend/clearAfterSend.html | 4 +- .../previewBeforeSend/deleteButton.html | 4 +- .../deleteButtonInTextMode.html | 4 +- .../sendBox/previewBeforeSend/escapeKey.html | 4 +- .../previewBeforeSend/filePreview.html | 4 +- .../styleOptions.maxHeight.html | 4 +- .../previewBeforeSend/styleOptions.two.html | 4 +- .../previewBeforeSend/styleOptions.zero.html | 4 +- .../sendBox/previewBeforeSend/textOnly.html | 4 +- .../previewBeforeSend/textOnlyMaxHeight.html | 4 +- .../previewBeforeSend/threeImages.html | 4 +- __tests__/html2/side-by-side/index.html | 8 +- __tests__/html2/speech/bargeIn/behavior.html | 2 +- __tests__/html2/speech/comprehensive.html | 2 +- __tests__/html2/speech/errorTelemetry.html | 2 +- .../speech/inputHint.acceptingInput.html | 2 +- .../html2/speech/inputHint.ignoringInput.html | 2 +- __tests__/html2/speech/mockSetup.html | 2 +- .../speech/performCardAction.continuous.html | 2 +- .../speech/performCardAction.interactive.html | 2 +- .../redux.clearSuggestedActions.html | 2 +- .../redux.setSuggestedActions.html | 2 +- __tests__/html2/typing/typingIndicator.html | 2 +- .../html2/typing/typingIndicator.scroll.html | 2 +- 46 files changed, 247 insertions(+), 140 deletions(-) diff --git a/__tests__/html2/activity/collapsible.html b/__tests__/html2/activity/collapsible.html index 9a210902b8..46d6b3e2ce 100644 --- a/__tests__/html2/activity/collapsible.html +++ b/__tests__/html2/activity/collapsible.html @@ -6,11 +6,11 @@ diff --git a/__tests__/html2/basic/customIcons.html b/__tests__/html2/basic/customIcons.html index 9d060800d3..57c0a5d73a 100644 --- a/__tests__/html2/basic/customIcons.html +++ b/__tests__/html2/basic/customIcons.html @@ -6,10 +6,10 @@ diff --git a/__tests__/html2/copyButton/layout.html b/__tests__/html2/copyButton/layout.html index fd0eae6993..3fa6899354 100644 --- a/__tests__/html2/copyButton/layout.html +++ b/__tests__/html2/copyButton/layout.html @@ -6,10 +6,10 @@ diff --git a/__tests__/html2/feedbackForm/behavior.changeMind.keyboard.html b/__tests__/html2/feedbackForm/behavior.changeMind.keyboard.html index 7b3bdf775f..00fd6f590a 100644 --- a/__tests__/html2/feedbackForm/behavior.changeMind.keyboard.html +++ b/__tests__/html2/feedbackForm/behavior.changeMind.keyboard.html @@ -12,7 +12,7 @@ diff --git a/__tests__/html2/feedbackForm/behavior.changeMind.mouse.html b/__tests__/html2/feedbackForm/behavior.changeMind.mouse.html index eacc67559d..766bafb20e 100644 --- a/__tests__/html2/feedbackForm/behavior.changeMind.mouse.html +++ b/__tests__/html2/feedbackForm/behavior.changeMind.mouse.html @@ -12,7 +12,7 @@ diff --git a/__tests__/html2/feedbackForm/behavior.resetByEscapeKey.html b/__tests__/html2/feedbackForm/behavior.resetByEscapeKey.html index 6b8ebfff32..5a48566477 100644 --- a/__tests__/html2/feedbackForm/behavior.resetByEscapeKey.html +++ b/__tests__/html2/feedbackForm/behavior.resetByEscapeKey.html @@ -12,7 +12,7 @@ diff --git a/__tests__/html2/feedbackForm/behavior.selectByClick.html b/__tests__/html2/feedbackForm/behavior.selectByClick.html index d92773b1b2..cd7b0f1943 100644 --- a/__tests__/html2/feedbackForm/behavior.selectByClick.html +++ b/__tests__/html2/feedbackForm/behavior.selectByClick.html @@ -12,7 +12,7 @@ diff --git a/__tests__/html2/feedbackForm/feedback.form.activity.html b/__tests__/html2/feedbackForm/feedback.form.activity.html index ba7c1c9dd2..57505f9d7d 100644 --- a/__tests__/html2/feedbackForm/feedback.form.activity.html +++ b/__tests__/html2/feedbackForm/feedback.form.activity.html @@ -11,7 +11,7 @@ diff --git a/__tests__/html2/feedbackForm/feedback.form.scroll.html b/__tests__/html2/feedbackForm/feedback.form.scroll.html index ddac7dfbb8..b2851dbae6 100644 --- a/__tests__/html2/feedbackForm/feedback.form.scroll.html +++ b/__tests__/html2/feedbackForm/feedback.form.scroll.html @@ -6,10 +6,10 @@ diff --git a/__tests__/html2/feedbackStatus/behavior.escapeKey.html b/__tests__/html2/feedbackStatus/behavior.escapeKey.html index 30dc6bb076..11d9f18460 100644 --- a/__tests__/html2/feedbackStatus/behavior.escapeKey.html +++ b/__tests__/html2/feedbackStatus/behavior.escapeKey.html @@ -12,7 +12,7 @@ diff --git a/__tests__/html2/feedbackStatus/layout.html b/__tests__/html2/feedbackStatus/layout.html index d809f45197..31bb0b052b 100644 --- a/__tests__/html2/feedbackStatus/layout.html +++ b/__tests__/html2/feedbackStatus/layout.html @@ -12,7 +12,7 @@ diff --git a/__tests__/html2/fluentTheme/defaultFeedback.activity.html b/__tests__/html2/fluentTheme/defaultFeedback.activity.html index ce5a18bc20..39d1c8eaf8 100644 --- a/__tests__/html2/fluentTheme/defaultFeedback.activity.html +++ b/__tests__/html2/fluentTheme/defaultFeedback.activity.html @@ -7,10 +7,10 @@ diff --git a/__tests__/html2/fluentTheme/fallback.html b/__tests__/html2/fluentTheme/fallback.html index 21b10429d9..6d856c10f1 100644 --- a/__tests__/html2/fluentTheme/fallback.html +++ b/__tests__/html2/fluentTheme/fallback.html @@ -7,10 +7,10 @@ diff --git a/__tests__/html2/fluentTheme/uiState.blueprint.nonEnglish.html b/__tests__/html2/fluentTheme/uiState.blueprint.nonEnglish.html index e8714e4f44..a7ba4930c6 100644 --- a/__tests__/html2/fluentTheme/uiState.blueprint.nonEnglish.html +++ b/__tests__/html2/fluentTheme/uiState.blueprint.nonEnglish.html @@ -6,10 +6,10 @@ diff --git a/__tests__/html2/fluentTheme/uiState.html b/__tests__/html2/fluentTheme/uiState.html index f4f78f04d9..838cfd7dab 100644 --- a/__tests__/html2/fluentTheme/uiState.html +++ b/__tests__/html2/fluentTheme/uiState.html @@ -6,10 +6,10 @@ diff --git a/__tests__/html2/hooks/useDictateState.html b/__tests__/html2/hooks/useDictateState.html index 838bc22fba..5b0d8cde28 100644 --- a/__tests__/html2/hooks/useDictateState.html +++ b/__tests__/html2/hooks/useDictateState.html @@ -14,7 +14,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock", + "jest-mock": "/esm/jest-mock", "react-dictate-button/internal": "https://unpkg.com/react-dictate-button@main/dist/react-dictate-button.internal.mjs" } } diff --git a/__tests__/html2/hooks/useEmitTypingIndicator.html b/__tests__/html2/hooks/useEmitTypingIndicator.html index 7bdb2f37c9..48a93494a0 100644 --- a/__tests__/html2/hooks/useEmitTypingIndicator.html +++ b/__tests__/html2/hooks/useEmitTypingIndicator.html @@ -14,7 +14,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock" + "jest-mock": "/esm/jest-mock" } } diff --git a/__tests__/html2/hooks/useSendTypingIndicator.propsSetToTrue.html b/__tests__/html2/hooks/useSendTypingIndicator.propsSetToTrue.html index ce93d67b76..dfbef3282f 100644 --- a/__tests__/html2/hooks/useSendTypingIndicator.propsSetToTrue.html +++ b/__tests__/html2/hooks/useSendTypingIndicator.propsSetToTrue.html @@ -14,7 +14,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock" + "jest-mock": "/esm/jest-mock" } } diff --git a/__tests__/html2/hooks/useSendTypingIndicator.propsUnset.html b/__tests__/html2/hooks/useSendTypingIndicator.propsUnset.html index 336e8997b2..f3d8a1263b 100644 --- a/__tests__/html2/hooks/useSendTypingIndicator.propsUnset.html +++ b/__tests__/html2/hooks/useSendTypingIndicator.propsUnset.html @@ -14,7 +14,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock" + "jest-mock": "/esm/jest-mock" } } diff --git a/__tests__/html2/linkDefinition/badge.html b/__tests__/html2/linkDefinition/badge.html index 649af7c2a5..0e9cea1eb2 100644 --- a/__tests__/html2/linkDefinition/badge.html +++ b/__tests__/html2/linkDefinition/badge.html @@ -6,10 +6,10 @@ diff --git a/__tests__/html2/markdown/math/layout.scroll.html b/__tests__/html2/markdown/math/layout.scroll.html index d7b5b5ca73..83befe6a70 100644 --- a/__tests__/html2/markdown/math/layout.scroll.html +++ b/__tests__/html2/markdown/math/layout.scroll.html @@ -6,10 +6,10 @@ diff --git a/__tests__/html2/preact/fluentTheme/simple.html b/__tests__/html2/preact/fluentTheme/simple.html index 998b8b024e..c38e33309d 100644 --- a/__tests__/html2/preact/fluentTheme/simple.html +++ b/__tests__/html2/preact/fluentTheme/simple.html @@ -1,67 +1,174 @@ - - - - + + + + + + + + + + + - await pageConditions.uiConnected(); + + + + +
+ + - // THEN: Should render the activity. - await host.snapshot('local'); - }); - - - + \ No newline at end of file diff --git a/__tests__/html2/sendBox/previewBeforeSend/clearAfterSend.html b/__tests__/html2/sendBox/previewBeforeSend/clearAfterSend.html index a6758ffb2f..1371d604a8 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/clearAfterSend.html +++ b/__tests__/html2/sendBox/previewBeforeSend/clearAfterSend.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/deleteButton.html b/__tests__/html2/sendBox/previewBeforeSend/deleteButton.html index 03a81bc8ea..9931ef95e6 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/deleteButton.html +++ b/__tests__/html2/sendBox/previewBeforeSend/deleteButton.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/deleteButtonInTextMode.html b/__tests__/html2/sendBox/previewBeforeSend/deleteButtonInTextMode.html index 93d7696679..587e0f9442 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/deleteButtonInTextMode.html +++ b/__tests__/html2/sendBox/previewBeforeSend/deleteButtonInTextMode.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/escapeKey.html b/__tests__/html2/sendBox/previewBeforeSend/escapeKey.html index 89af46ef6f..11084cbda1 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/escapeKey.html +++ b/__tests__/html2/sendBox/previewBeforeSend/escapeKey.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/filePreview.html b/__tests__/html2/sendBox/previewBeforeSend/filePreview.html index 52b0ac0cd4..a762528924 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/filePreview.html +++ b/__tests__/html2/sendBox/previewBeforeSend/filePreview.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/styleOptions.maxHeight.html b/__tests__/html2/sendBox/previewBeforeSend/styleOptions.maxHeight.html index 14f6c37634..8111e435ab 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/styleOptions.maxHeight.html +++ b/__tests__/html2/sendBox/previewBeforeSend/styleOptions.maxHeight.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/styleOptions.two.html b/__tests__/html2/sendBox/previewBeforeSend/styleOptions.two.html index b17bbb77b9..ab4f633d0a 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/styleOptions.two.html +++ b/__tests__/html2/sendBox/previewBeforeSend/styleOptions.two.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/styleOptions.zero.html b/__tests__/html2/sendBox/previewBeforeSend/styleOptions.zero.html index 748d7eb415..2cbea82bae 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/styleOptions.zero.html +++ b/__tests__/html2/sendBox/previewBeforeSend/styleOptions.zero.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/textOnly.html b/__tests__/html2/sendBox/previewBeforeSend/textOnly.html index a167d60973..e7eae62c1a 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/textOnly.html +++ b/__tests__/html2/sendBox/previewBeforeSend/textOnly.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/textOnlyMaxHeight.html b/__tests__/html2/sendBox/previewBeforeSend/textOnlyMaxHeight.html index 26df8e40bd..4f8d3eaee8 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/textOnlyMaxHeight.html +++ b/__tests__/html2/sendBox/previewBeforeSend/textOnlyMaxHeight.html @@ -15,8 +15,8 @@ diff --git a/__tests__/html2/sendBox/previewBeforeSend/threeImages.html b/__tests__/html2/sendBox/previewBeforeSend/threeImages.html index ee2187ebd1..e4e4ebd4d3 100644 --- a/__tests__/html2/sendBox/previewBeforeSend/threeImages.html +++ b/__tests__/html2/sendBox/previewBeforeSend/threeImages.html @@ -11,8 +11,8 @@ diff --git a/__tests__/html2/side-by-side/index.html b/__tests__/html2/side-by-side/index.html index a122e554c7..dd001fb505 100644 --- a/__tests__/html2/side-by-side/index.html +++ b/__tests__/html2/side-by-side/index.html @@ -7,10 +7,10 @@ diff --git a/__tests__/html2/speech/bargeIn/behavior.html b/__tests__/html2/speech/bargeIn/behavior.html index 6cc84e3243..b5cecaafeb 100644 --- a/__tests__/html2/speech/bargeIn/behavior.html +++ b/__tests__/html2/speech/bargeIn/behavior.html @@ -12,7 +12,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock", + "jest-mock": "/esm/jest-mock", "react-dictate-button/internal": "https://unpkg.com/react-dictate-button@main/dist/react-dictate-button.internal.mjs" } } diff --git a/__tests__/html2/speech/comprehensive.html b/__tests__/html2/speech/comprehensive.html index 5558536658..60c6ea64de 100644 --- a/__tests__/html2/speech/comprehensive.html +++ b/__tests__/html2/speech/comprehensive.html @@ -12,7 +12,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock", + "jest-mock": "/esm/jest-mock", "react-dictate-button/internal": "https://unpkg.com/react-dictate-button@main/dist/react-dictate-button.internal.mjs" } } diff --git a/__tests__/html2/speech/errorTelemetry.html b/__tests__/html2/speech/errorTelemetry.html index 3bfd809b32..3437caea24 100644 --- a/__tests__/html2/speech/errorTelemetry.html +++ b/__tests__/html2/speech/errorTelemetry.html @@ -12,7 +12,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock", + "jest-mock": "/esm/jest-mock", "react-dictate-button/internal": "https://unpkg.com/react-dictate-button@main/dist/react-dictate-button.internal.mjs" } } diff --git a/__tests__/html2/speech/inputHint.acceptingInput.html b/__tests__/html2/speech/inputHint.acceptingInput.html index cee2439000..ec178e7bde 100644 --- a/__tests__/html2/speech/inputHint.acceptingInput.html +++ b/__tests__/html2/speech/inputHint.acceptingInput.html @@ -12,7 +12,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock", + "jest-mock": "/esm/jest-mock", "react-dictate-button/internal": "https://unpkg.com/react-dictate-button@main/dist/react-dictate-button.internal.mjs" } } diff --git a/__tests__/html2/speech/inputHint.ignoringInput.html b/__tests__/html2/speech/inputHint.ignoringInput.html index 117226b349..7b5359f3a9 100644 --- a/__tests__/html2/speech/inputHint.ignoringInput.html +++ b/__tests__/html2/speech/inputHint.ignoringInput.html @@ -12,7 +12,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock", + "jest-mock": "/esm/jest-mock", "react-dictate-button/internal": "https://unpkg.com/react-dictate-button@main/dist/react-dictate-button.internal.mjs" } } diff --git a/__tests__/html2/speech/mockSetup.html b/__tests__/html2/speech/mockSetup.html index 7441e121ed..914ca36fb0 100644 --- a/__tests__/html2/speech/mockSetup.html +++ b/__tests__/html2/speech/mockSetup.html @@ -13,7 +13,7 @@ diff --git a/__tests__/html2/store/suggestedActions/redux.setSuggestedActions.html b/__tests__/html2/store/suggestedActions/redux.setSuggestedActions.html index 114f60cc97..524dd9193a 100644 --- a/__tests__/html2/store/suggestedActions/redux.setSuggestedActions.html +++ b/__tests__/html2/store/suggestedActions/redux.setSuggestedActions.html @@ -13,7 +13,7 @@ diff --git a/__tests__/html2/typing/typingIndicator.html b/__tests__/html2/typing/typingIndicator.html index 287dcc5241..4069bc1f24 100644 --- a/__tests__/html2/typing/typingIndicator.html +++ b/__tests__/html2/typing/typingIndicator.html @@ -20,7 +20,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock", + "jest-mock": "/esm/jest-mock", "react-dictate-button/internal": "https://unpkg.com/react-dictate-button@main/dist/react-dictate-button.internal.mjs" } } diff --git a/__tests__/html2/typing/typingIndicator.scroll.html b/__tests__/html2/typing/typingIndicator.scroll.html index 4e111f7806..08b085e726 100644 --- a/__tests__/html2/typing/typingIndicator.scroll.html +++ b/__tests__/html2/typing/typingIndicator.scroll.html @@ -20,7 +20,7 @@ { "imports": { "@testduet/wait-for": "https://unpkg.com/@testduet/wait-for@main/dist/wait-for.mjs", - "jest-mock": "https://esm.sh/jest-mock", + "jest-mock": "/esm/jest-mock", "react-dictate-button/internal": "https://unpkg.com/react-dictate-button@main/dist/react-dictate-button.internal.mjs" } } From c39183dc596c46a7936fea8cc14f249877fbb700 Mon Sep 17 00:00:00 2001 From: Eugene Date: Tue, 8 Jul 2025 23:57:02 +0000 Subject: [PATCH 3/9] Potential fix for code scanning alert no. 34: Information exposure through a stack trace Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- packages/test/web-server/src/handleEsm.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/test/web-server/src/handleEsm.ts b/packages/test/web-server/src/handleEsm.ts index be3b0d2c6a..95dbe99c19 100644 --- a/packages/test/web-server/src/handleEsm.ts +++ b/packages/test/web-server/src/handleEsm.ts @@ -63,8 +63,8 @@ export const handleEsm = async (req, res) => { res.setHeader('Content-Type', 'application/javascript'); return res.end(outJS); } catch (err) { - console.error('ESM proxy error:', err); + console.error('ESM proxy error:', err.stack); res.writeHead(500); - return res.end(err.stack); + return res.end("An internal server error occurred"); } }; From 62a410ae35b3542349d28cef0469908cc5be13f0 Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 9 Jul 2025 00:17:45 +0000 Subject: [PATCH 4/9] Fix nits --- packages/test/web-server/src/{handleEsm.ts => handleESM.ts} | 6 +++--- packages/test/web-server/src/index.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename packages/test/web-server/src/{handleEsm.ts => handleESM.ts} (96%) diff --git a/packages/test/web-server/src/handleEsm.ts b/packages/test/web-server/src/handleESM.ts similarity index 96% rename from packages/test/web-server/src/handleEsm.ts rename to packages/test/web-server/src/handleESM.ts index 95dbe99c19..5b308275d5 100644 --- a/packages/test/web-server/src/handleEsm.ts +++ b/packages/test/web-server/src/handleESM.ts @@ -39,7 +39,7 @@ const ruleConfig = { fix: '/esm$A' }; -export const handleEsm = async (req, res) => { +export async function handleESM(req, res) { try { const targetPath = req.url.replace(/^\/esm/u, ''); const upstreamUrl = `http://esm:8080${targetPath}`; @@ -65,6 +65,6 @@ export const handleEsm = async (req, res) => { } catch (err) { console.error('ESM proxy error:', err.stack); res.writeHead(500); - return res.end("An internal server error occurred"); + return res.end('An internal server error occurred'); } -}; +} diff --git a/packages/test/web-server/src/index.ts b/packages/test/web-server/src/index.ts index 4d5ae3be29..e70a804a45 100644 --- a/packages/test/web-server/src/index.ts +++ b/packages/test/web-server/src/index.ts @@ -5,7 +5,7 @@ import { createServer as createSecureServer } from 'node:https'; import selfsigned from 'selfsigned'; import handleServe from 'serve-handler'; -import { handleEsm } from './handleEsm'; +import { handleESM } from './handleESM'; const { // eslint-disable-next-line no-magic-numbers @@ -19,7 +19,7 @@ const { const handler = (req, res) => { if (req.url.startsWith('/esm/')) { - return handleEsm(req, res); + return handleESM(req, res); } return handleServe(req, res, config); From 669b127b11ecd792c25a02f288db17401c1c087a Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 9 Jul 2025 01:33:36 +0000 Subject: [PATCH 5/9] Increase timeout --- __tests__/constants.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/constants.json b/__tests__/constants.json index 2e8302bd9b..0ce3c83316 100644 --- a/__tests__/constants.json +++ b/__tests__/constants.json @@ -13,7 +13,7 @@ "navigation": 10000, "postActivity": 30000, "scrollToBottom": 4000, - "test": 50000, + "test": 60000, "ui": 1000 } } From 0ce6194380545e838353c4891f20153dbc5cfbfb Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 9 Jul 2025 01:38:51 +0000 Subject: [PATCH 6/9] Revert "Increase timeout" This reverts commit 669b127b11ecd792c25a02f288db17401c1c087a. --- __tests__/constants.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/constants.json b/__tests__/constants.json index 0ce3c83316..2e8302bd9b 100644 --- a/__tests__/constants.json +++ b/__tests__/constants.json @@ -13,7 +13,7 @@ "navigation": 10000, "postActivity": 30000, "scrollToBottom": 4000, - "test": 60000, + "test": 50000, "ui": 1000 } } From 86500de1b350e4daebd81b028b3d68bb5c60243b Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 9 Jul 2025 01:39:11 +0000 Subject: [PATCH 7/9] Fix import /esm/ --- __tests__/html2/side-by-side/index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/__tests__/html2/side-by-side/index.html b/__tests__/html2/side-by-side/index.html index dd001fb505..61cf69a760 100644 --- a/__tests__/html2/side-by-side/index.html +++ b/__tests__/html2/side-by-side/index.html @@ -7,10 +7,10 @@ From 98902d347ce7b4f8664dd351b8fa7b9394014a6a Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 9 Jul 2025 14:38:58 +0000 Subject: [PATCH 8/9] Fix test --- .../html2/preact/fluentTheme/simple.html | 209 +++++------------- 1 file changed, 51 insertions(+), 158 deletions(-) diff --git a/__tests__/html2/preact/fluentTheme/simple.html b/__tests__/html2/preact/fluentTheme/simple.html index c38e33309d..998b8b024e 100644 --- a/__tests__/html2/preact/fluentTheme/simple.html +++ b/__tests__/html2/preact/fluentTheme/simple.html @@ -1,174 +1,67 @@ - - - - - - - - - - - - - - - - -
- + + + + + + +
+ - + expect(window.WebChat.FluentThemeProvider).toBeTruthy(); - \ No newline at end of file + // THEN: Should render the activity. + await host.snapshot('local'); + }); + + + From d972d329f6dd2627f0cef51dd0c6d96c9a4de9b0 Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 9 Jul 2025 14:48:55 +0000 Subject: [PATCH 9/9] Improve ports mapping --- docker-compose-wsl2.yml | 3 ++- packages/test/web-server/src/handleESM.ts | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docker-compose-wsl2.yml b/docker-compose-wsl2.yml index d3b588712a..0573fb252d 100644 --- a/docker-compose-wsl2.yml +++ b/docker-compose-wsl2.yml @@ -6,9 +6,10 @@ services: esm: image: ghcr.io/esm-dev/esm.sh:latest ports: - - "8080:8080" + - "5999:80" environment: - NPM_REGISTRY=https://registry.npmjs.org/ + - ESMPORT=80 volumes: - esm_data:/esmd diff --git a/packages/test/web-server/src/handleESM.ts b/packages/test/web-server/src/handleESM.ts index 5b308275d5..ead5217915 100644 --- a/packages/test/web-server/src/handleESM.ts +++ b/packages/test/web-server/src/handleESM.ts @@ -42,7 +42,11 @@ const ruleConfig = { export async function handleESM(req, res) { try { const targetPath = req.url.replace(/^\/esm/u, ''); - const upstreamUrl = `http://esm:8080${targetPath}`; + if (!targetPath.startsWith('/')) { + res.writeHead(400); + return res.end('Invalid ESM path'); + } + const upstreamUrl = `http://esm${targetPath}`; const upstreamRes = await fetch(upstreamUrl); if (!upstreamRes.ok) {