errors,vm: update error and use cause

PR-URL: https://github.com/nodejs/node/pull/42820
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com>
This commit is contained in:
Gus Caplan
2022-04-21 21:08:16 -05:00
parent 709d27945d
commit 7729e32abd
4 changed files with 27 additions and 17 deletions

View File

@@ -2853,12 +2853,6 @@ Cached data cannot be created for modules which have already been evaluated.
The module being returned from the linker function is from a different context
than the parent module. Linked modules must share the same context.
<a id="ERR_VM_MODULE_LINKING_ERRORED"></a>
### `ERR_VM_MODULE_LINKING_ERRORED`
The linker function returned a module for which linking has failed.
<a id="ERR_VM_MODULE_LINK_FAILURE"></a>
### `ERR_VM_MODULE_LINK_FAILURE`
@@ -3344,6 +3338,17 @@ Used when a given value is out of the accepted range.
The module must be successfully linked before instantiation.
<a id="ERR_VM_MODULE_LINKING_ERRORED"></a>
### `ERR_VM_MODULE_LINKING_ERRORED`
<!-- YAML
added: v10.0.0
removed: REPLACEME
-->
The linker function returned a module for which linking has failed.
<a id="ERR_WORKER_UNSUPPORTED_EXTENSION"></a>
### `ERR_WORKER_UNSUPPORTED_EXTENSION`

View File

@@ -1653,8 +1653,10 @@ E('ERR_VM_MODULE_CANNOT_CREATE_CACHED_DATA',
'Cached data cannot be created for a module which has been evaluated', Error);
E('ERR_VM_MODULE_DIFFERENT_CONTEXT',
'Linked modules must use the same context', Error);
E('ERR_VM_MODULE_LINKING_ERRORED',
'Linking has already failed for the provided module', Error);
E('ERR_VM_MODULE_LINK_FAILURE', function(message, cause) {
this.cause = cause;
return message;
}, Error);
E('ERR_VM_MODULE_NOT_MODULE',
'Provided module is not an instance of Module', Error);
E('ERR_VM_MODULE_STATUS', 'Module status %s', Error);

View File

@@ -34,7 +34,7 @@ const {
ERR_VM_MODULE_ALREADY_LINKED,
ERR_VM_MODULE_DIFFERENT_CONTEXT,
ERR_VM_MODULE_CANNOT_CREATE_CACHED_DATA,
ERR_VM_MODULE_LINKING_ERRORED,
ERR_VM_MODULE_LINK_FAILURE,
ERR_VM_MODULE_NOT_MODULE,
ERR_VM_MODULE_STATUS,
} = require('internal/errors').codes;
@@ -317,9 +317,7 @@ class SourceTextModule extends Module {
throw new ERR_VM_MODULE_DIFFERENT_CONTEXT();
}
if (module.status === 'errored') {
// TODO(devsnek): replace with ERR_VM_MODULE_LINK_FAILURE
// and error cause proposal.
throw new ERR_VM_MODULE_LINKING_ERRORED();
throw new ERR_VM_MODULE_LINK_FAILURE(`request for '${identifier}' resolved to an errored module`, module.error);
}
if (module.status === 'unlinked') {
await module[kLink](linker);

View File

@@ -139,20 +139,25 @@ async function checkLinking() {
code: 'ERR_VM_MODULE_DIFFERENT_CONTEXT'
});
const error = new Error();
await assert.rejects(async () => {
const erroredModule = new SourceTextModule('import "foo";');
globalThis.error = error;
const erroredModule = new SourceTextModule('throw error;');
await erroredModule.link(common.mustNotCall());
try {
await erroredModule.link(common.mustCall(() => ({})));
await erroredModule.evaluate();
} catch {
// ignored
} finally {
assert.strictEqual(erroredModule.status, 'errored');
}
delete globalThis.error;
assert.strictEqual(erroredModule.status, 'errored');
const rootModule = new SourceTextModule('import "errored";');
await rootModule.link(common.mustCall(() => erroredModule));
}, {
code: 'ERR_VM_MODULE_LINKING_ERRORED'
code: 'ERR_VM_MODULE_LINK_FAILURE',
cause: error,
});
}