diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3a7f774..bffcbc0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,6 +20,8 @@ jobs: with: egress-policy: audit + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: @@ -31,4 +33,8 @@ jobs: - name: Install dependencies run: npm ci - name: npm test + if: matrix.node-version != '20.x' run: npm run node:test + - name: npm test with amaro + if: matrix.node-version == '20.x' + run: NODE_OPTIONS="--import=./tools/strip.js" npm run node:test diff --git a/package-lock.json b/package-lock.json index dddcb54..dfcb68f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "node-api-cts", "version": "0.1.0", + "dependencies": { + "amaro": "^1.1.5" + }, "devDependencies": { "@types/node": "^24.10.1" } @@ -21,6 +24,15 @@ "undici-types": "~7.16.0" } }, + "node_modules/amaro": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/amaro/-/amaro-1.1.5.tgz", + "integrity": "sha512-oo72OEYOSfSPe+96V+jh41gaFWfl9HddXFAHMFM+emjdZkzbtcg0bFWoYaWf8IMlqmZ0VM8F13frI8Ktt3+ADA==", + "license": "MIT", + "engines": { + "node": ">=22" + } + }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", diff --git a/package.json b/package.json index c2483a1..7d8c683 100644 --- a/package.json +++ b/package.json @@ -8,5 +8,8 @@ }, "devDependencies": { "@types/node": "^24.10.1" + }, + "dependencies": { + "amaro": "^1.1.5" } } diff --git a/tools/loader.js b/tools/loader.js new file mode 100644 index 0000000..a510b5a --- /dev/null +++ b/tools/loader.js @@ -0,0 +1,24 @@ +import path from 'node:path'; + +export async function resolve(specifier, context, nextResolve) { + const result = await nextResolve(specifier, context); + const ext = path.extname(new URL(result.url).pathname); + if (ext === '.ts') { + return { + ...result, + format: 'module', + }; + } + return result; +} + +export async function load(url, context, nextLoad) { + const ext = path.extname(new URL(url).pathname); + if (ext === '.ts') { + return nextLoad(url, { + ...context, + format: 'module-typescript', + }); + } + return nextLoad(url, context); +} diff --git a/tools/strip.js b/tools/strip.js new file mode 100644 index 0000000..aead6f0 --- /dev/null +++ b/tools/strip.js @@ -0,0 +1,4 @@ +import { register } from 'node:module'; +import 'amaro/strip'; + +register('./loader.js', import.meta.url);