$
This commit is contained in:
79
node_modules/spawn-wrap/lib/mungers/node.js
generated
vendored
Normal file
79
node_modules/spawn-wrap/lib/mungers/node.js
generated
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
'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
|
Reference in New Issue
Block a user