parcoursup/node_modules/spawn-wrap/lib/mungers/node.js

80 lines
2.2 KiB
JavaScript
Raw Normal View History

2023-03-05 13:23:23 +01:00
'use strict';
const path = require('path')
const {debug} = require("../debug")
const {getExeBasename} = require("../exe-type")
const whichOrUndefined = require("../which-or-undefined")
/**
* Intercepts Node spawned processes.
*
* @param workingDir {string} Absolute system-dependent path to the directory containing the shim files.
* @param options {import("../munge").InternalSpawnOptions} Original internal spawn options.
* @return {import("../munge").InternalSpawnOptions} Updated internal spawn options.
*/
function mungeNode(workingDir, options) {
// Remember the original Node command to use it in the shim
const originalNode = options.file
const command = getExeBasename(options.file)
// make sure it has a main script.
// otherwise, just let it through.
let a = 0
let hasMain = false
let mainIndex = 1
for (a = 1; !hasMain && a < options.args.length; a++) {
switch (options.args[a]) {
case '-p':
case '-i':
case '--interactive':
case '--eval':
case '-e':
case '-pe':
hasMain = false
a = options.args.length
continue
case '-r':
case '--require':
a += 1
continue
default:
// TODO: Double-check this part
if (options.args[a].startsWith('-')) {
continue
} else {
hasMain = true
mainIndex = a
a = options.args.length
break
}
}
}
const newArgs = [...options.args];
let newFile = options.file;
if (hasMain) {
const replace = path.join(workingDir, command)
newArgs.splice(mainIndex, 0, replace)
}
// If the file is just something like 'node' then that'll
// resolve to our shim, and so to prevent double-shimming, we need
// to resolve that here first.
// This also handles the case where there's not a main file, like
// `node -e 'program'`, where we want to avoid the shim entirely.
if (options.file === command) {
const realNode = whichOrUndefined(options.file) || process.execPath
newArgs[0] = realNode
newFile = realNode
}
debug('mungeNode after', options.file, options.args)
return {...options, file: newFile, args: newArgs, originalNode};
}
module.exports = mungeNode