-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
esm: bypass CJS loader in default load under
--default-type=module
This allows user to opt-out from using the monkey-patchable CJS loader, even to load CJS modules. PR-URL: #50004 Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
- Loading branch information
Showing
5 changed files
with
105 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,31 +1,101 @@ | ||
import { spawnPromisified } from '../common/index.mjs'; | ||
import * as fixtures from '../common/fixtures.mjs'; | ||
import { describe, it } from 'node:test'; | ||
import { match, strictEqual } from 'node:assert'; | ||
|
||
describe('--experimental-default-type=module should not affect the interpretation of files with unknown extensions', | ||
{ concurrency: true }, () => { | ||
it('should error on an entry point with an unknown extension', async () => { | ||
const { code, signal, stdout, stderr } = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
fixtures.path('es-modules/package-type-module/extension.unknown'), | ||
]); | ||
|
||
match(stderr, /ERR_UNKNOWN_FILE_EXTENSION/); | ||
strictEqual(stdout, ''); | ||
strictEqual(code, 1); | ||
strictEqual(signal, null); | ||
}); | ||
|
||
it('should error on an import with an unknown extension', async () => { | ||
const { code, signal, stdout, stderr } = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
fixtures.path('es-modules/package-type-module/imports-unknownext.mjs'), | ||
]); | ||
|
||
match(stderr, /ERR_UNKNOWN_FILE_EXTENSION/); | ||
strictEqual(stdout, ''); | ||
strictEqual(code, 1); | ||
strictEqual(signal, null); | ||
}); | ||
}); | ||
import { deepStrictEqual, match, strictEqual } from 'node:assert'; | ||
|
||
describe('--experimental-default-type=module', { concurrency: true }, () => { | ||
describe('should not affect the interpretation of files with unknown extensions', { concurrency: true }, () => { | ||
it('should error on an entry point with an unknown extension', async () => { | ||
const { code, signal, stdout, stderr } = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
fixtures.path('es-modules/package-type-module/extension.unknown'), | ||
]); | ||
|
||
match(stderr, /ERR_UNKNOWN_FILE_EXTENSION/); | ||
strictEqual(stdout, ''); | ||
strictEqual(code, 1); | ||
strictEqual(signal, null); | ||
}); | ||
|
||
it('should error on an import with an unknown extension', async () => { | ||
const { code, signal, stdout, stderr } = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
fixtures.path('es-modules/package-type-module/imports-unknownext.mjs'), | ||
]); | ||
|
||
match(stderr, /ERR_UNKNOWN_FILE_EXTENSION/); | ||
strictEqual(stdout, ''); | ||
strictEqual(code, 1); | ||
strictEqual(signal, null); | ||
}); | ||
}); | ||
|
||
it('should affect CJS .js files (imported, required, entry points)', async () => { | ||
const result = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
fixtures.path('es-modules/package-type-commonjs/echo-require-cache.js'), | ||
]); | ||
|
||
deepStrictEqual(result, { | ||
code: 0, | ||
stderr: '', | ||
stdout: 'undefined\n', | ||
signal: null, | ||
}); | ||
}); | ||
|
||
it('should affect .cjs files that are imported', async () => { | ||
const result = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
'-e', | ||
`import ${JSON.stringify(fixtures.fileURL('es-module-require-cache/echo.cjs'))}`, | ||
]); | ||
|
||
deepStrictEqual(result, { | ||
code: 0, | ||
stderr: '', | ||
stdout: 'undefined\n', | ||
signal: null, | ||
}); | ||
}); | ||
|
||
it('should affect entry point .cjs files (with no hooks)', async () => { | ||
const { stderr, stdout, code } = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
fixtures.path('es-module-require-cache/echo.cjs'), | ||
]); | ||
|
||
strictEqual(stderr, ''); | ||
match(stdout, /^undefined\n$/); | ||
strictEqual(code, 0); | ||
}); | ||
|
||
it('should affect entry point .cjs files (when any hooks is registered)', async () => { | ||
const result = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
'--import', | ||
'data:text/javascript,import{register}from"node:module";register("data:text/javascript,");', | ||
fixtures.path('es-module-require-cache/echo.cjs'), | ||
]); | ||
|
||
deepStrictEqual(result, { | ||
code: 0, | ||
stderr: '', | ||
stdout: 'undefined\n', | ||
signal: null, | ||
}); | ||
}); | ||
|
||
it('should not affect CJS from input-type', async () => { | ||
const { stderr, stdout, code } = await spawnPromisified(process.execPath, [ | ||
'--experimental-default-type=module', | ||
'--input-type=commonjs', | ||
'-p', | ||
'require.cache', | ||
]); | ||
|
||
strictEqual(stderr, ''); | ||
match(stdout, /^\[Object: null prototype\] \{\}\n$/); | ||
strictEqual(code, 0); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log(require.cache); |
1 change: 1 addition & 0 deletions
1
test/fixtures/es-modules/package-type-commonjs/echo-require-cache.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
console.log(require.cache); |