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