mirror of
https://github.com/nodejs/node.git
synced 2025-05-13 00:05:45 +00:00

Remove V8 flag for import assertions, enabling support for the syntax; require the import assertion syntax for imports of JSON. Support import assertions in user loaders. Use both resolved module URL and import assertion type as the key for caching modules. Co-authored-by: Geoffrey Booth <webadmin@geoffreybooth.com> PR-URL: https://github.com/nodejs/node/pull/40250 Reviewed-By: Bradley Farias <bradley.meck@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const ModuleJob = require('internal/modules/esm/module_job');
|
|
const { kImplicitAssertType } = require('internal/modules/esm/assert');
|
|
const {
|
|
ObjectCreate,
|
|
SafeMap,
|
|
} = primordials;
|
|
let debug = require('internal/util/debuglog').debuglog('esm', (fn) => {
|
|
debug = fn;
|
|
});
|
|
const { ERR_INVALID_ARG_TYPE } = require('internal/errors').codes;
|
|
const { validateString } = require('internal/validators');
|
|
|
|
const validateAssertType = (type) =>
|
|
type === kImplicitAssertType || validateString(type, 'type');
|
|
|
|
// Tracks the state of the loader-level module cache
|
|
class ModuleMap extends SafeMap {
|
|
constructor(i) { super(i); } // eslint-disable-line no-useless-constructor
|
|
get(url, type = kImplicitAssertType) {
|
|
validateString(url, 'url');
|
|
validateAssertType(type);
|
|
return super.get(url)?.[type];
|
|
}
|
|
set(url, type = kImplicitAssertType, job) {
|
|
validateString(url, 'url');
|
|
validateAssertType(type);
|
|
if (job instanceof ModuleJob !== true &&
|
|
typeof job !== 'function') {
|
|
throw new ERR_INVALID_ARG_TYPE('job', 'ModuleJob', job);
|
|
}
|
|
debug(`Storing ${url} (${
|
|
type === kImplicitAssertType ? 'implicit type' : type
|
|
}) in ModuleMap`);
|
|
const cachedJobsForUrl = super.get(url) ?? ObjectCreate(null);
|
|
cachedJobsForUrl[type] = job;
|
|
return super.set(url, cachedJobsForUrl);
|
|
}
|
|
has(url, type = kImplicitAssertType) {
|
|
validateString(url, 'url');
|
|
validateAssertType(type);
|
|
return super.get(url)?.[type] !== undefined;
|
|
}
|
|
}
|
|
module.exports = ModuleMap;
|