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/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..61cf69a760 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" } } diff --git a/docker-compose-wsl2.yml b/docker-compose-wsl2.yml index cec2dbf9da..0573fb252d 100644 --- a/docker-compose-wsl2.yml +++ b/docker-compose-wsl2.yml @@ -3,6 +3,16 @@ version: '3' services: # On Windows, run with COMPOSE_CONVERT_WINDOWS_PATHS=1 + esm: + image: ghcr.io/esm-dev/esm.sh:latest + ports: + - "5999:80" + environment: + - NPM_REGISTRY=https://registry.npmjs.org/ + - ESMPORT=80 + volumes: + - esm_data:/esmd + chrome: image: selenium/node-chrome:110.0 depends_on: @@ -56,3 +66,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..ead5217915 --- /dev/null +++ b/packages/test/web-server/src/handleESM.ts @@ -0,0 +1,74 @@ +/* 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 async function handleESM(req, res) { + try { + const targetPath = req.url.replace(/^\/esm/u, ''); + 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) { + 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.stack); + res.writeHead(500); + 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 7b2b320b29..e70a804a45 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