mirror of https://github.com/nodejs/node.git
vm: use import attributes instead of import assertions
The old import assertions proposal has been renamed to "import attributes" with the following major changes: 1. The keyword is now `with` instead of `assert`. 2. Unknown assertions cause an error rather than being ignored. This PR updates the documentation to encourage folks to use the new syntax, and add aliases to preserve backward compatibility. PR-URL: https://github.com/nodejs/node/pull/50141 Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com> Reviewed-By: Vinícius Lourenço Claro Cardoso <contact@viniciusl.com.br>
This commit is contained in:
parent
82cc1d1652
commit
2da66c1444
|
@ -62,7 +62,7 @@ changes:
|
|||
- v17.0.0
|
||||
- v16.12.0
|
||||
pr-url: https://github.com/nodejs/node/pull/40249
|
||||
description: Added support for import assertions to the
|
||||
description: Added support for import attributes to the
|
||||
`importModuleDynamically` parameter.
|
||||
- version: v10.6.0
|
||||
pr-url: https://github.com/nodejs/node/pull/20300
|
||||
|
@ -103,7 +103,7 @@ changes:
|
|||
[`ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG`][].
|
||||
* `specifier` {string} specifier passed to `import()`
|
||||
* `script` {vm.Script}
|
||||
* `importAssertions` {Object} The `"assert"` value passed to the
|
||||
* `importAttributes` {Object} The `"with"` value passed to the
|
||||
[`optionsExpression`][] optional parameter, or an empty object if no value
|
||||
was provided.
|
||||
* Returns: {Module Namespace Object|vm.Module} Returning a `vm.Module` is
|
||||
|
@ -617,6 +617,14 @@ The identifier of the current module, as set in the constructor.
|
|||
|
||||
### `module.link(linker)`
|
||||
|
||||
<!-- YAML
|
||||
changes:
|
||||
- version: REPLACEME
|
||||
pr-url: https://github.com/nodejs/node/pull/50141
|
||||
description: The option `extra.assert` is renamed to `extra.attributes`. The
|
||||
former name is still provided for backward compatibility.
|
||||
-->
|
||||
|
||||
* `linker` {Function}
|
||||
* `specifier` {string} The specifier of the requested module:
|
||||
```mjs
|
||||
|
@ -627,15 +635,14 @@ The identifier of the current module, as set in the constructor.
|
|||
* `referencingModule` {vm.Module} The `Module` object `link()` is called on.
|
||||
|
||||
* `extra` {Object}
|
||||
* `assert` {Object} The data from the assertion:
|
||||
<!-- eslint-skip -->
|
||||
```js
|
||||
import foo from 'foo' assert { name: 'value' };
|
||||
// ^^^^^^^^^^^^^^^^^ the assertion
|
||||
* `attributes` {Object} The data from the attribute:
|
||||
```mjs
|
||||
import foo from 'foo' with { name: 'value' };
|
||||
// ^^^^^^^^^^^^^^^^^ the attribute
|
||||
```
|
||||
Per ECMA-262, hosts are expected to ignore assertions that they do not
|
||||
support, as opposed to, for example, triggering an error if an
|
||||
unsupported assertion is present.
|
||||
Per ECMA-262, hosts are expected to trigger an error if an
|
||||
unsupported attribute is present.
|
||||
* `assert` {Object} Alias for `extra.attributes`.
|
||||
|
||||
* Returns: {vm.Module|Promise}
|
||||
* Returns: {Promise}
|
||||
|
@ -734,7 +741,7 @@ changes:
|
|||
- v17.0.0
|
||||
- v16.12.0
|
||||
pr-url: https://github.com/nodejs/node/pull/40249
|
||||
description: Added support for import assertions to the
|
||||
description: Added support for import attributes to the
|
||||
`importModuleDynamically` parameter.
|
||||
-->
|
||||
|
||||
|
@ -767,7 +774,7 @@ changes:
|
|||
[`ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG`][].
|
||||
* `specifier` {string} specifier passed to `import()`
|
||||
* `module` {vm.Module}
|
||||
* `importAssertions` {Object} The `"assert"` value passed to the
|
||||
* `importAttributes` {Object} The `"with"` value passed to the
|
||||
[`optionsExpression`][] optional parameter, or an empty object if no value
|
||||
was provided.
|
||||
* Returns: {Module Namespace Object|vm.Module} Returning a `vm.Module` is
|
||||
|
@ -982,7 +989,7 @@ changes:
|
|||
- v17.0.0
|
||||
- v16.12.0
|
||||
pr-url: https://github.com/nodejs/node/pull/40249
|
||||
description: Added support for import assertions to the
|
||||
description: Added support for import attributes to the
|
||||
`importModuleDynamically` parameter.
|
||||
- version: v15.9.0
|
||||
pr-url: https://github.com/nodejs/node/pull/35431
|
||||
|
@ -1028,7 +1035,7 @@ changes:
|
|||
[`ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG`][].
|
||||
* `specifier` {string} specifier passed to `import()`
|
||||
* `function` {Function}
|
||||
* `importAssertions` {Object} The `"assert"` value passed to the
|
||||
* `importAttributes` {Object} The `"with"` value passed to the
|
||||
[`optionsExpression`][] optional parameter, or an empty object if no value
|
||||
was provided.
|
||||
* Returns: {Module Namespace Object|vm.Module} Returning a `vm.Module` is
|
||||
|
@ -1214,7 +1221,7 @@ changes:
|
|||
- v17.0.0
|
||||
- v16.12.0
|
||||
pr-url: https://github.com/nodejs/node/pull/40249
|
||||
description: Added support for import assertions to the
|
||||
description: Added support for import attributes to the
|
||||
`importModuleDynamically` parameter.
|
||||
- version: v6.3.0
|
||||
pr-url: https://github.com/nodejs/node/pull/6635
|
||||
|
@ -1254,7 +1261,7 @@ changes:
|
|||
[`ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG`][].
|
||||
* `specifier` {string} specifier passed to `import()`
|
||||
* `script` {vm.Script}
|
||||
* `importAssertions` {Object} The `"assert"` value passed to the
|
||||
* `importAttributes` {Object} The `"with"` value passed to the
|
||||
[`optionsExpression`][] optional parameter, or an empty object if no value
|
||||
was provided.
|
||||
* Returns: {Module Namespace Object|vm.Module} Returning a `vm.Module` is
|
||||
|
@ -1294,7 +1301,7 @@ changes:
|
|||
- v17.0.0
|
||||
- v16.12.0
|
||||
pr-url: https://github.com/nodejs/node/pull/40249
|
||||
description: Added support for import assertions to the
|
||||
description: Added support for import attributes to the
|
||||
`importModuleDynamically` parameter.
|
||||
- version: v14.6.0
|
||||
pr-url: https://github.com/nodejs/node/pull/34023
|
||||
|
@ -1355,7 +1362,7 @@ changes:
|
|||
[`ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG`][].
|
||||
* `specifier` {string} specifier passed to `import()`
|
||||
* `script` {vm.Script}
|
||||
* `importAssertions` {Object} The `"assert"` value passed to the
|
||||
* `importAttributes` {Object} The `"with"` value passed to the
|
||||
[`optionsExpression`][] optional parameter, or an empty object if no value
|
||||
was provided.
|
||||
* Returns: {Module Namespace Object|vm.Module} Returning a `vm.Module` is
|
||||
|
@ -1399,7 +1406,7 @@ changes:
|
|||
- v17.0.0
|
||||
- v16.12.0
|
||||
pr-url: https://github.com/nodejs/node/pull/40249
|
||||
description: Added support for import assertions to the
|
||||
description: Added support for import attributes to the
|
||||
`importModuleDynamically` parameter.
|
||||
- version: v6.3.0
|
||||
pr-url: https://github.com/nodejs/node/pull/6635
|
||||
|
@ -1437,7 +1444,7 @@ changes:
|
|||
[`ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG`][].
|
||||
* `specifier` {string} specifier passed to `import()`
|
||||
* `script` {vm.Script}
|
||||
* `importAssertions` {Object} The `"assert"` value passed to the
|
||||
* `importAttributes` {Object} The `"with"` value passed to the
|
||||
[`optionsExpression`][] optional parameter, or an empty object if no value
|
||||
was provided.
|
||||
* Returns: {Module Namespace Object|vm.Module} Returning a `vm.Module` is
|
||||
|
|
|
@ -305,8 +305,8 @@ class SourceTextModule extends Module {
|
|||
this[kLink] = async (linker) => {
|
||||
this.#statusOverride = 'linking';
|
||||
|
||||
const promises = this[kWrap].link(async (identifier, assert) => {
|
||||
const module = await linker(identifier, this, { assert });
|
||||
const promises = this[kWrap].link(async (identifier, attributes) => {
|
||||
const module = await linker(identifier, this, { attributes, assert: attributes });
|
||||
if (module[kWrap] === undefined) {
|
||||
throw new ERR_VM_MODULE_NOT_MODULE();
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
// Flags: --experimental-vm-modules
|
||||
// Flags: --experimental-vm-modules --harmony-import-attributes
|
||||
|
||||
const common = require('../common');
|
||||
|
||||
|
@ -126,12 +126,14 @@ async function circular2() {
|
|||
|
||||
async function asserts() {
|
||||
const m = new SourceTextModule(`
|
||||
import "foo" assert { n1: 'v1', n2: 'v2' };
|
||||
import "foo" with { n1: 'v1', n2: 'v2' };
|
||||
`, { identifier: 'm' });
|
||||
await m.link((s, r, p) => {
|
||||
assert.strictEqual(s, 'foo');
|
||||
assert.strictEqual(r.identifier, 'm');
|
||||
assert.strictEqual(p.attributes.n1, 'v1');
|
||||
assert.strictEqual(p.assert.n1, 'v1');
|
||||
assert.strictEqual(p.attributes.n2, 'v2');
|
||||
assert.strictEqual(p.assert.n2, 'v2');
|
||||
return new SourceTextModule('');
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue