JezK
Edit File: child.js.map
{"version":3,"file":"child.js","names":["child","require","fs","path","queue","BlockingQueue","constants","CHILD_CONCURRENCY","uid","exec","promisify","validate","program","opts","match","process","platform","env","PATHEXT","cwd","pathext","split","ext","candidate","join","existsSync","Error","forkp","args","key","String","Promise","resolve","reject","proc","fork","spawnedProcesses","on","error","exitCode","spawnp","spawn","forwardSignalToSpawnedProcesses","signal","Object","keys","kill","onData","push","processingDone","processClosed","err","stdout","code","ProcessSpawnError","updateStdout","chunk","finish","trim","stderr","ProcessTermError","EXIT_SIGNAL","EXIT_CODE"],"sourceRoot":"../../src","sources":["util/child.js"],"sourcesContent":["/* @flow */\n/* global child_process$spawnOpts */\n\nimport * as constants from '../constants.js';\nimport BlockingQueue from './blocking-queue.js';\nimport {ProcessSpawnError, ProcessTermError} from '../errors.js';\nimport {promisify} from './promise.js';\n\nconst child = require('child_process');\nconst fs = require('fs');\nconst path = require('path');\n\nexport const queue = new BlockingQueue('child', constants.CHILD_CONCURRENCY);\n\n// TODO: this uid check is kinda whack\nlet uid = 0;\n\nexport const exec = promisify(child.exec);\n\nfunction validate(program: string, opts?: Object = {}) {\n if (program.match(/[\\\\\\/]/)) {\n return;\n }\n\n if (process.platform === 'win32' && process.env.PATHEXT) {\n const cwd = opts.cwd || process.cwd();\n const pathext = process.env.PATHEXT;\n\n for (const ext of pathext.split(';')) {\n const candidate = path.join(cwd, `${program}${ext}`);\n if (fs.existsSync(candidate)) {\n throw new Error(`Potentially dangerous call to \"${program}\" in ${cwd}`);\n }\n }\n }\n}\n\nexport function forkp(program: string, args: Array<string>, opts?: Object): Promise<number> {\n validate(program, opts);\n const key = String(++uid);\n return new Promise((resolve, reject) => {\n const proc = child.fork(program, args, opts);\n spawnedProcesses[key] = proc;\n\n proc.on('error', error => {\n reject(error);\n });\n\n proc.on('close', exitCode => {\n resolve(exitCode);\n });\n });\n}\n\nexport function spawnp(program: string, args: Array<string>, opts?: Object): Promise<number> {\n validate(program, opts);\n const key = String(++uid);\n return new Promise((resolve, reject) => {\n const proc = child.spawn(program, args, opts);\n spawnedProcesses[key] = proc;\n\n proc.on('error', error => {\n reject(error);\n });\n\n proc.on('close', exitCode => {\n resolve(exitCode);\n });\n });\n}\n\nconst spawnedProcesses = {};\n\nexport function forwardSignalToSpawnedProcesses(signal: string) {\n for (const key of Object.keys(spawnedProcesses)) {\n spawnedProcesses[key].kill(signal);\n }\n}\n\ntype ProcessFn = (\n proc: child_process$ChildProcess,\n update: (chunk: string) => void,\n reject: (err: mixed) => void,\n done: () => void,\n) => void;\n\nexport function spawn(\n program: string,\n args: Array<string>,\n opts?: child_process$spawnOpts & {detached?: boolean, process?: ProcessFn} = {},\n onData?: (chunk: Buffer | string) => void,\n): Promise<string> {\n const key = opts.cwd || String(++uid);\n return queue.push(\n key,\n (): Promise<string> =>\n new Promise((resolve, reject) => {\n validate(program, opts);\n\n const proc = child.spawn(program, args, opts);\n spawnedProcesses[key] = proc;\n\n let processingDone = false;\n let processClosed = false;\n let err = null;\n\n let stdout = '';\n\n proc.on('error', err => {\n if (err.code === 'ENOENT') {\n reject(new ProcessSpawnError(`Couldn't find the binary ${program}`, err.code, program));\n } else {\n reject(err);\n }\n });\n\n function updateStdout(chunk: string) {\n stdout += chunk;\n if (onData) {\n onData(chunk);\n }\n }\n\n function finish() {\n delete spawnedProcesses[key];\n if (err) {\n reject(err);\n } else {\n resolve(stdout.trim());\n }\n }\n\n if (typeof opts.process === 'function') {\n opts.process(proc, updateStdout, reject, function() {\n if (processClosed) {\n finish();\n } else {\n processingDone = true;\n }\n });\n } else {\n if (proc.stderr) {\n proc.stderr.on('data', updateStdout);\n }\n\n if (proc.stdout) {\n proc.stdout.on('data', updateStdout);\n }\n\n processingDone = true;\n }\n\n proc.on('close', (code: number, signal: string) => {\n if (signal || code >= 1) {\n err = new ProcessTermError(\n [\n 'Command failed.',\n signal ? `Exit signal: ${signal}` : `Exit code: ${code}`,\n `Command: ${program}`,\n `Arguments: ${args.join(' ')}`,\n `Directory: ${opts.cwd || process.cwd()}`,\n `Output:\\n${stdout.trim()}`,\n ].join('\\n'),\n );\n err.EXIT_SIGNAL = signal;\n err.EXIT_CODE = code;\n }\n\n if (processingDone || err) {\n finish();\n } else {\n processClosed = true;\n }\n });\n }),\n );\n}\n"],"mappings":"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"}