Skip to content

Commit 2cc8207

Browse files
authored
fix: Account for invalid identifiers (#198)
1 parent 0d5b8fc commit 2cc8207

File tree

5 files changed

+31
-6
lines changed

5 files changed

+31
-6
lines changed

hook.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,19 +254,23 @@ async function processModule ({ srcUrl, context, parentGetSource, parentResolve,
254254
addSetter(name, setter, true)
255255
}
256256
} else {
257+
const variableName = `$${n.replace(/[^a-zA-Z0-9_]/g, '_')}`
258+
const objectKey = JSON.stringify(n)
259+
const reExportedName = n === 'default' || NODE_MAJOR < 16 ? n : objectKey
260+
257261
addSetter(n, `
258-
let $${n}
262+
let ${variableName}
259263
try {
260-
$${n} = _.${n} = namespace.${n}
264+
${variableName} = _[${objectKey}] = namespace[${objectKey}]
261265
} catch (err) {
262266
if (!(err instanceof ReferenceError)) throw err
263267
}
264-
export { $${n} as ${n} }
265-
set.${n} = (v) => {
266-
$${n} = v
268+
export { ${variableName} as ${reExportedName} }
269+
set[${objectKey}] = (v) => {
270+
${variableName} = v
267271
return true
268272
}
269-
get.${n} = () => $${n}
273+
get[${objectKey}] = () => ${variableName}
270274
`)
271275
}
272276
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// These export identifiers are only supported in Node 16+
2+
exports['one.two'] = () => console.log('b')
3+
4+
// See: https://github.com/nodejs/import-in-the-middle/issues/94
5+
exports['unsigned short'] = 'something'
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Regression test for https://github.com/nodejs/import-in-the-middle/issues/196
2+
3+
export default function foo () {
4+
// do nothing
5+
}
6+
7+
export { foo as 'module.exports' }

test/hook/v16-fake-cjs-export.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import ui from '../fixtures/module-exports-cjs-shim.mjs'
2+
import { notStrictEqual } from 'assert'
3+
4+
notStrictEqual(ui, undefined)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import * as lib from '../fixtures/invalid-identifier.js'
2+
import { strictEqual } from 'assert'
3+
4+
strictEqual(typeof lib['one.two'], 'function')
5+
strictEqual(typeof lib['unsigned short'], 'string')

0 commit comments

Comments
 (0)