Skip to content

Commit

Permalink
Merge pull request #315 from iambumblehead/resolve-pnpm-issue
Browse files Browse the repository at this point in the history
escape + char at regexp to resolve pnpn issue
  • Loading branch information
iambumblehead authored Oct 18, 2024
2 parents fc9f380 + 4e37c0c commit a57eb3a
Show file tree
Hide file tree
Showing 10 changed files with 127 additions and 3 deletions.
28 changes: 28 additions & 0 deletions .github/workflows/test-pnpm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: test-pnpm

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
test-pnpm:
runs-on: ${{ matrix.os }}
timeout-minutes: 12
strategy:
fail-fast: false
matrix:
node-version: [22.x]
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- uses: pnpm/action-setup@v4
with:
version: 9
- run: npm install
- run: npm run build --if-present
- run: npm run test-ci-pnpm
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# changelog

* 2.6.8 _tbd_
* 2.6.8 _Oct.17.2024_
* [added pnpm unit-test,](https://github.com/iambumblehead/esmock/pull/315) thanks @darcyrush
* [resolve issue for pnpm](https://github.com/iambumblehead/esmock/pull/315) by escaping '+' char in regexp
* [add log utility function](https://github.com/iambumblehead/esmock/pull/314) for debugging loader
* [dropped ava and jest](https://github.com/iambumblehead/esmock/pull/314) from test sequence, node v22 --loader issues
* 2.6.7 _Jul.16.2024_
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "esmock",
"type": "module",
"version": "2.6.7",
"version": "2.6.8",
"license": "ISC",
"readmeFilename": "README.md",
"description": "provides native ESM import and globals mocking for unit tests",
Expand Down Expand Up @@ -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 tests-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 .",
Expand Down
7 changes: 6 additions & 1 deletion src/esmockLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,14 @@ const isnotfoundRe = /isfound=false/
const iscommonjsmoduleRe = /^(commonjs|module)$/
const isstrict3 = /strict=3/
const hashbangRe = /^(#![^\n]*\n)/

// escape '+' char, pnpm generates long pathnames serialized with these
const moduleIdEsc = str =>
str.indexOf('+') >= 0 ? str.replace(/(?!\\)\+/g, '\\+') : str

// returned regexp will match embedded moduleid w/ treeid
const moduleIdReCreate = (moduleid, treeid) => new RegExp(
`.*(${moduleid}(\\?${treeid}(?:(?!#-#).)*)).*`)
`.*(${moduleIdEsc(moduleid)}(\\?${treeid}(?:(?!#-#).)*)).*`)

// node v12.0-v18.x, global
const mockKeys = global.mockKeys = (global.mockKeys || {})
Expand Down
30 changes: 30 additions & 0 deletions tests/tests-pnpm/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "scoped-package-mock",
"type": "module",
"repository": {
"type": "git",
"url": "git+https://github.com/iambumblehead/esmock.git"
},
"description": "careful using this and rm -rf. pnpm does not support local file install :|",
"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'",
"node_modules-esmock:rm": "rm -r node_modules/esmock",
"node_modules-esmock:link": "ln -s ../../ node_modules/esmock",
"node_modules-esmock": "npm run node_modules-esmock:rm && npm run node_modules-esmock:link",
"test": "npm run node_modules-esmock && npm run test-tsnode"
},
"dependencies": {
"@nestjs/core": "^10.3.8",
"@nestjs/platform-express": "^10.3.8"
},
"devDependencies": {
"@types/node": "^20.12.7",
"ts-node": "^10.9.2",
"tsimp": "^2.0.11",
"esmock": "latest",
"tsx": "^4.9.3",
"typescript": "^5.4.5"
}
}
7 changes: 7 additions & 0 deletions tests/tests-pnpm/src/example.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { NestFactory } from "@nestjs/core"

export const example = async () => {
const test = await NestFactory.create({} as any)
console.log(test)
return test
}
14 changes: 14 additions & 0 deletions tests/tests-pnpm/src/tsconfig.json
Original file line number Diff line number Diff line change
@@ -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,
}
}
21 changes: 21 additions & 0 deletions tests/tests-pnpm/test/example.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { describe, it } from "node:test"
import { equal } from "node:assert/strict"
import esmock from "esmock"

describe("Example", async () => {
it("Mocks scoped module", async () => {
const { example } = await esmock(
"../src/example.js",
import.meta.url,
{
"@nestjs/core": {
NestFactory: {
create: async () => 'mocked'
}
}
}
)

equal(await example(), 'mocked')
})
})
10 changes: 10 additions & 0 deletions tests/tests-pnpm/test/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
}
}
6 changes: 6 additions & 0 deletions tests/tests-pnpm/ts-node.register.mjs
Original file line number Diff line number Diff line change
@@ -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("./"))

0 comments on commit a57eb3a

Please sign in to comment.