| '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); |
| } |