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

78.46% Statements 51/65
75% Branches 9/12
50% Functions 1/2
78.46% Lines 51/65

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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x 138x     138x 83x 83x 83x 83x 83x 83x 83x 83x 83x 72x 83x 138x 138x                         138x 138x 138x 138x 138x 138x 138x  
'use strict';
 
const {
  RegExpPrototypeTest,
} = primordials;
const { getOptionValue } = require('internal/options');
 
 
const experimentalWasmModules = getOptionValue('--experimental-wasm-modules');
const experimentalSpecifierResolution =
  getOptionValue('--experimental-specifier-resolution');
 
const extensionFormatMap = {
  '__proto__': null,
  '.cjs': 'commonjs',
  '.js': 'module',
  '.json': 'json',
  '.mjs': 'module',
};
 
const legacyExtensionFormatMap = {
  '__proto__': null,
  '.cjs': 'commonjs',
  '.js': 'commonjs',
  '.json': 'commonjs',
  '.mjs': 'module',
  '.node': 'commonjs',
};
 
if (experimentalWasmModules) {
  extensionFormatMap['.wasm'] = legacyExtensionFormatMap['.wasm'] = 'wasm';
}
 
function mimeToFormat(mime) {
  if (
    RegExpPrototypeTest(
      /\s*(text|application)\/javascript\s*(;\s*charset=utf-?8\s*)?/i,
      mime
    )
  ) return 'module';
  if (mime === 'application/json') return 'json';
  if (experimentalWasmModules && mime === 'application/wasm') return 'wasm';
  return null;
}
 
let experimentalSpecifierResolutionWarned = false;
function getLegacyExtensionFormat(ext) {
  if (
    experimentalSpecifierResolution === 'node' &&
    !experimentalSpecifierResolutionWarned
  ) {
    process.emitWarning(
      'The Node.js specifier resolution in ESM is experimental.',
      'ExperimentalWarning');
    experimentalSpecifierResolutionWarned = true;
  }
  return legacyExtensionFormatMap[ext];
}
 
module.exports = {
  extensionFormatMap,
  getLegacyExtensionFormat,
  legacyExtensionFormatMap,
  mimeToFormat,
};