-
-
Notifications
You must be signed in to change notification settings - Fork 33.1k
Closed
Labels
confirmed-bugIssues with confirmed bugs.Issues with confirmed bugs.
Description
Version
v22.17.0
Platform
Microsoft Windows NT 10.0.26100.0 x64
Subsystem
module
What steps will reproduce the bug?
Create these files:
// ModuleA.cjs
const os = require('node:os');
module.exports = {
hello() {
console.log('Hello Folks from', os.platform());
}
};
// ModuleB.cjs
const ModuleA = require('./ModuleA.cjs');
module.exports = {
hello() {
ModuleA.hello();
}
};
// ModuleC.mjs
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const ModuleB = require('./ModuleB.cjs');
export default {
hello() {
ModuleB.hello();
}
};
// index.mjs
import module from 'node:module';
import { pathToFileURL } from 'node:url';
const basePath = pathToFileURL(process.cwd()).toString();
module.registerHooks({
resolve(specifier, context, nextResolve) {
console.log(
'context.conditions is',
Object.prototype.toString.call(context.conditions),
'-',
context.parentURL.replace(basePath, '.'),
context.conditions?.has?.('require') && 'required'
|| context.conditions?.includes?.('import') && 'imported',
specifier,
);
return nextResolve(specifier, context);
},
});
const { default: ModuleC } = await import('./ModuleC.mjs');
ModuleC.hello();
Then do:
node index.mjs
Result:
context.conditions is [object Array] - ./index.mjs imported ./ModuleC.mjs
context.conditions is [object Array] - ./ModuleC.mjs imported node:module
context.conditions is [object Set] - ./ModuleC.mjs required ./ModuleB.cjs
context.conditions is [object Set] - ./ModuleB.cjs required ./ModuleA.cjs
context.conditions is [object Set] - ./ModuleA.cjs required node:os
Hello Folks from win32
How often does it reproduce? Is there a required condition?
Consistent every time
What is the expected behavior? Why is that the expected behavior?
context.conditions should be always a Set or an Array
What do you see instead?
context.conditions is a Set if it comes from a require call and it is an Array if it comes from an import statement
Additional information
No response
Metadata
Metadata
Assignees
Labels
confirmed-bugIssues with confirmed bugs.Issues with confirmed bugs.