All files / lib/internal/modules/esm module_map.js

100% Statements 46/46
100% Branches 16/16
100% Functions 5/5
100% Lines 46/46

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47133x 133x 133x 133x 133x 133x 133x 133x 133x 156x 133x 133x 133x 133x 133x 133x 133x 133x 133x 133x 133x 1047x 1047x 1047x 1047x 133x 875x 875x 875x 875x 4x 4x 863x 875x 875x 875x 875x 875x 875x 133x 17x 17x 17x 17x 133x 133x  
'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;