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

100% Statements 41/41
100% Branches 9/9
100% Functions 3/3
100% Lines 41/41

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 42142x 142x 142x 142x 142x 142x 142x 142x 142x 142x 142x 3x 3x 18x 18x 18x 18x 15x 15x 18x 3x 3x 142x 142x 142x 142x 142x 158x 158x 158x 158x 158x 3x 3x 158x 158x 158x 142x 142x 142x 142x  
'use strict';
 
const { getOptionValue } = require('internal/options');
const experimentalImportMetaResolve =
  getOptionValue('--experimental-import-meta-resolve');
const {
  PromisePrototypeThen,
  PromiseReject,
} = primordials;
const asyncESM = require('internal/process/esm_loader');
 
function createImportMetaResolve(defaultParentUrl) {
  return async function resolve(specifier, parentUrl = defaultParentUrl) {
    return PromisePrototypeThen(
      asyncESM.esmLoader.resolve(specifier, parentUrl),
      ({ url }) => url,
      (error) => (
        error.code === 'ERR_UNSUPPORTED_DIR_IMPORT' ?
          error.url : PromiseReject(error))
    );
  };
}
 
/**
 * @param {object} meta
 * @param {{url: string}} context
 */
function initializeImportMeta(meta, context) {
  const { url } = context;
 
  // Alphabetical
  if (experimentalImportMetaResolve) {
    meta.resolve = createImportMetaResolve(url);
  }
 
  meta.url = url;
}
 
module.exports = {
  initializeImportMeta
};