diff --git a/.github/workflows/test-pnpm.yml b/.github/workflows/test-pnpm.yml new file mode 100644 index 0000000..b872b4a --- /dev/null +++ b/.github/workflows/test-pnpm.yml @@ -0,0 +1,26 @@ +name: test + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + test: + runs-on: ${{ matrix.os }} + timeout-minutes: 12 + strategy: + fail-fast: false + matrix: + node-version: [18.x, 20.x, 22.x] + os: [ubuntu-latest, windows-latest] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + - uses: pnpm/action-setup@v4 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm run build --if-present + - run: npm run test-ci-pnpm diff --git a/package.json b/package.json index 043ba3f..4a55a2f 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "test:all": "cd tests && npm run test:all", "test:all-ci": "cd tests && npm run test:all-ci", "test": "npm run test:all", + "test-ci-pnpm": "cd tests && cd test-pnpm && pnpm i && npm run test", "test-ci": "npm run test:install && npm run test:all-ci", "test-cover": "npm run test:install && c8 npm run test:all", "lint": "eslint .", diff --git a/tests/tests-pnpm/package.json b/tests/tests-pnpm/package.json new file mode 100644 index 0000000..38c19a1 --- /dev/null +++ b/tests/tests-pnpm/package.json @@ -0,0 +1,26 @@ +{ + "name": "scoped-package-mock", + "type": "module", + "repository": { + "type": "git", + "url": "git+https://github.com/iambumblehead/esmock.git" + }, + "scripts": { + "test-tsimp": "TSIMP_PROJECT=./test/tsconfig.json node --import tsimp/import --test-reporter spec --test 'test/example.test.ts'", + "test-tsx": "TSX_TSCONFIG_PATH=./test/tsconfig.json node --import tsx --test-reporter spec --test 'test/example.test.ts'", + "test-tsnode": "TS_NODE_PROJECT=./test/tsconfig.json node --import ./ts-node.register.mjs --test-reporter spec --test 'test/example.test.ts'", + "test": "npm run test-tsnode" + }, + "dependencies": { + "@nestjs/core": "^10.3.8", + "@nestjs/platform-express": "^10.3.8" + }, + "devDependencies": { + "@types/node": "^20.12.7", + "esmock": "file:..", + "ts-node": "^10.9.2", + "tsimp": "^2.0.11", + "tsx": "^4.9.3", + "typescript": "^5.4.5" + } +} diff --git a/tests/tests-pnpm/src/example.ts b/tests/tests-pnpm/src/example.ts new file mode 100644 index 0000000..fe78e78 --- /dev/null +++ b/tests/tests-pnpm/src/example.ts @@ -0,0 +1,6 @@ +import { NestFactory } from "@nestjs/core" + +export const example = async () => { + const test = await NestFactory.create({} as any) + console.log(test) +} diff --git a/tests/tests-pnpm/src/tsconfig.json b/tests/tests-pnpm/src/tsconfig.json new file mode 100644 index 0000000..0186915 --- /dev/null +++ b/tests/tests-pnpm/src/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "Node16", + "moduleResolution": "Node16", + "declaration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "strict": true, + } +} diff --git a/tests/tests-pnpm/test/example.test.ts b/tests/tests-pnpm/test/example.test.ts new file mode 100644 index 0000000..e0479b5 --- /dev/null +++ b/tests/tests-pnpm/test/example.test.ts @@ -0,0 +1,23 @@ +import { describe, it } from "node:test" +import { equal } from "node:assert/strict" +import esmock from "esmock" + +describe("Example", async () => { + it("Fails", async () => { + const { example } = await esmock( + "../src/example.js", + import.meta.url, + { + "@nestjs/core": { + NestFactory: { + create: async () => 'mocked' + } + } + } + ) + + await example() + + equal(1,1) + }) +}) diff --git a/tests/tests-pnpm/test/tsconfig.json b/tests/tests-pnpm/test/tsconfig.json new file mode 100644 index 0000000..0d4681f --- /dev/null +++ b/tests/tests-pnpm/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "Node16", + "moduleResolution": "Node16", + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + } +} diff --git a/tests/tests-pnpm/ts-node.register.mjs b/tests/tests-pnpm/ts-node.register.mjs new file mode 100644 index 0000000..2dd25be --- /dev/null +++ b/tests/tests-pnpm/ts-node.register.mjs @@ -0,0 +1,6 @@ +// https://github.com/TypeStrong/ts-node/issues/2100 + +import { pathToFileURL } from "node:url" +import { register } from "node:module" + +register("ts-node/esm", pathToFileURL("./"))