All files / lib/internal/main check_syntax.js

100% Statements 67/67
100% Branches 11/11
100% Functions 1/1
100% Lines 67/67

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 66 67 6834x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 26x 26x 26x 26x 26x 26x 26x 26x 26x 26x 26x 26x 26x 34x 8x 8x 8x 8x 8x 8x 34x 30x 30x 30x 30x 8x 30x 22x 22x 22x 22x 22x 22x 30x 4x 4x 4x 4x 26x 26x 30x  
'use strict';
 
// If user passed `-c` or `--check` arguments to Node, check its syntax
// instead of actually running the file.
 
const {
  prepareMainThreadExecution
} = require('internal/bootstrap/pre_execution');
 
const {
  readStdin
} = require('internal/process/execution');
 
const { pathToFileURL } = require('url');
 
const {
  Module: {
    _resolveFilename: resolveCJSModuleName,
  },
  wrapSafe,
} = require('internal/modules/cjs/loader');
 
// TODO(joyeecheung): not every one of these are necessary
prepareMainThreadExecution(true);
 
if (process.argv[1] && process.argv[1] !== '-') {
  // Expand process.argv[1] into a full path.
  const path = require('path');
  process.argv[1] = path.resolve(process.argv[1]);
 
  // Read the source.
  const filename = resolveCJSModuleName(process.argv[1]);
 
  const fs = require('fs');
  const source = fs.readFileSync(filename, 'utf-8');
 
  markBootstrapComplete();
 
  checkSyntax(source, filename);
} else {
  markBootstrapComplete();
 
  readStdin((code) => {
    checkSyntax(code, '[stdin]');
  });
}
 
function checkSyntax(source, filename) {
  const { getOptionValue } = require('internal/options');
  let isModule = false;
  if (filename === '[stdin]' || filename === '[eval]') {
    isModule = getOptionValue('--input-type') === 'module';
  } else {
    const { defaultResolve } = require('internal/modules/esm/resolve');
    const { defaultGetFormat } = require('internal/modules/esm/get_format');
    const { url } = defaultResolve(pathToFileURL(filename).toString());
    const { format } = defaultGetFormat(url);
    isModule = format === 'module';
  }
  if (isModule) {
    const { ModuleWrap } = internalBinding('module_wrap');
    new ModuleWrap(filename, undefined, source, 0, 0);
    return;
  }
 
  wrapSafe(filename, source);
}