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 6836x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 36x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 36x 8x 8x 8x 8x 8x 8x 36x 32x 32x 32x 32x 8x 32x 24x 24x 24x 24x 24x 24x 32x 6x 6x 6x 6x 26x 26x 32x  
'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]');
  });
}
 
async 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 } = await defaultResolve(pathToFileURL(filename).toString());
    const format = await defaultGetFormat(url);
    isModule = format === 'module';
  }
  if (isModule) {
    const { ModuleWrap } = internalBinding('module_wrap');
    new ModuleWrap(filename, undefined, source, 0, 0);
    return;
  }
 
  wrapSafe(filename, source);
}