node
node copied to clipboard
Preserve the realm of the promise returned by importModuleDynamically in vm:SourceTextModule
What is the problem this feature will solve?
Dynamic imports in modules created by the vm:SourceTextModule
currently return a promise created by the intrinsic Promise of the main realm and not the realm of the module. This can be a problem in practice because realms are commonly used to achieve test case isolation at a cheap performance cost. And these test cases might somehow rely on the identity of the constructor of promises returned by dynamic imports -- eg: https://github.com/tc39/test262/blob/c47b716e8d6bea0c4510d449fd22b7ed5f8b0151/test/language/expressions/dynamic-import/returns-promise.js
What is the feature you are proposing to solve the problem?
The problem comes from importModuleDynamicallyWrap
which returns an async function:
https://github.com/nodejs/node/blob/a0cb507ea67121392082795943a3dc00e5317b5d/lib/internal/vm/module.js#L434
If we want preserve the promise constructor provided by the user-defined importModuleDynamically
, it should use explicit then
chaining. NB: I'm not sure there is no other async jump downstream that could cause the same issue.
What alternatives have you considered?
No response