1'use strict'; 2 3// If user passed `-c` or `--check` arguments to Node, check its syntax 4// instead of actually running the file. 5 6const { 7 prepareMainThreadExecution 8} = require('internal/bootstrap/pre_execution'); 9 10const { 11 readStdin 12} = require('internal/process/execution'); 13 14const { pathToFileURL } = require('url'); 15 16const { 17 Module: { 18 _resolveFilename: resolveCJSModuleName, 19 }, 20 wrapSafe, 21} = require('internal/modules/cjs/loader'); 22 23// TODO(joyeecheung): not every one of these are necessary 24prepareMainThreadExecution(true); 25 26if (process.argv[1] && process.argv[1] !== '-') { 27 // Expand process.argv[1] into a full path. 28 const path = require('path'); 29 process.argv[1] = path.resolve(process.argv[1]); 30 31 // Read the source. 32 const filename = resolveCJSModuleName(process.argv[1]); 33 34 const fs = require('fs'); 35 const source = fs.readFileSync(filename, 'utf-8'); 36 37 markBootstrapComplete(); 38 39 checkSyntax(source, filename); 40} else { 41 markBootstrapComplete(); 42 43 readStdin((code) => { 44 checkSyntax(code, '[stdin]'); 45 }); 46} 47 48function checkSyntax(source, filename) { 49 const { getOptionValue } = require('internal/options'); 50 let isModule = false; 51 if (filename === '[stdin]' || filename === '[eval]') { 52 isModule = getOptionValue('--input-type') === 'module'; 53 } else { 54 const { defaultResolve } = require('internal/modules/esm/resolve'); 55 const { defaultGetFormat } = require('internal/modules/esm/get_format'); 56 const { url } = defaultResolve(pathToFileURL(filename).toString()); 57 const { format } = defaultGetFormat(url); 58 isModule = format === 'module'; 59 } 60 if (isModule) { 61 const { ModuleWrap } = internalBinding('module_wrap'); 62 new ModuleWrap(filename, undefined, source, 0, 0); 63 return; 64 } 65 66 wrapSafe(filename, source); 67} 68