teen_process 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +38 -0
- package/build/lib/exec.d.ts +108 -0
- package/build/lib/exec.d.ts.map +1 -0
- package/build/lib/exec.js +189 -166
- package/build/lib/exec.js.map +1 -0
- package/build/lib/helpers.d.ts +13 -0
- package/build/lib/helpers.d.ts.map +1 -0
- package/build/lib/helpers.js +39 -29
- package/build/lib/helpers.js.map +1 -0
- package/build/lib/index.d.ts +8 -0
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +33 -27
- package/build/lib/index.js.map +1 -0
- package/build/lib/subprocess.d.ts +66 -0
- package/build/lib/subprocess.d.ts.map +1 -0
- package/build/lib/subprocess.js +268 -263
- package/build/lib/subprocess.js.map +1 -0
- package/index.js +1 -1
- package/lib/exec.js +3 -4
- package/lib/helpers.js +21 -15
- package/lib/index.js +3 -2
- package/lib/subprocess.js +2 -2
- package/package.json +31 -33
package/build/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.SubProcess = exports.spawn = exports.exec = void 0;
|
|
27
|
+
const source_map_support_1 = require("source-map-support");
|
|
28
|
+
(0, source_map_support_1.install)();
|
|
29
|
+
const cp = __importStar(require("child_process"));
|
|
30
|
+
const spIndex = __importStar(require("./lib/subprocess"));
|
|
31
|
+
const execIndex = __importStar(require("./lib/exec"));
|
|
32
|
+
const { spawn } = cp;
|
|
33
|
+
exports.spawn = spawn;
|
|
34
|
+
const { SubProcess } = spIndex;
|
|
35
|
+
exports.SubProcess = SubProcess;
|
|
36
|
+
const { exec } = execIndex;
|
|
37
|
+
exports.exec = exec;
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export default exec;
|
|
2
|
+
/**
|
|
3
|
+
* Options on top of `SpawnOptions`, unique to `teen_process.`
|
|
4
|
+
*/
|
|
5
|
+
export type TeenProcessProps = {
|
|
6
|
+
/**
|
|
7
|
+
* - Ignore & discard all output
|
|
8
|
+
*/
|
|
9
|
+
ignoreOutput?: boolean | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* - Return output as a Buffer
|
|
12
|
+
*/
|
|
13
|
+
isBuffer?: boolean | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* - Logger to use for debugging
|
|
16
|
+
*/
|
|
17
|
+
logger?: TeenProcessLogger | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* - Maximum size of `stdout` buffer
|
|
20
|
+
*/
|
|
21
|
+
maxStdoutBufferSize?: number | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* - Maximum size of `stderr` buffer
|
|
24
|
+
*/
|
|
25
|
+
maxStderrBufferSize?: number | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* - Encoding to use for output
|
|
28
|
+
*/
|
|
29
|
+
encoding?: BufferEncoding | undefined;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* A logger object understood by {@link exec teen_process.exec}.
|
|
33
|
+
*/
|
|
34
|
+
export type TeenProcessLogger = {
|
|
35
|
+
debug: (...args: any[]) => void;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Options for {@link exec teen_process.exec}.
|
|
39
|
+
*/
|
|
40
|
+
export type TeenProcessExecOptions = import('child_process').SpawnOptions & TeenProcessProps;
|
|
41
|
+
/**
|
|
42
|
+
* The value {@link exec teen_process.exec} resolves to when `isBuffer` is `false`
|
|
43
|
+
*/
|
|
44
|
+
export type TeenProcessExecStringResult = {
|
|
45
|
+
/**
|
|
46
|
+
* - Stdout
|
|
47
|
+
*/
|
|
48
|
+
stdout: string;
|
|
49
|
+
/**
|
|
50
|
+
* - Stderr
|
|
51
|
+
*/
|
|
52
|
+
stderr: string;
|
|
53
|
+
/**
|
|
54
|
+
* - Exit code
|
|
55
|
+
*/
|
|
56
|
+
code: number | null;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* The value {@link exec teen_process.exec} resolves to when `isBuffer` is `true`
|
|
60
|
+
*/
|
|
61
|
+
export type TeenProcessExecBufferResult = {
|
|
62
|
+
/**
|
|
63
|
+
* - Stdout
|
|
64
|
+
*/
|
|
65
|
+
stdout: Buffer;
|
|
66
|
+
/**
|
|
67
|
+
* - Stderr
|
|
68
|
+
*/
|
|
69
|
+
stderr: Buffer;
|
|
70
|
+
/**
|
|
71
|
+
* - Exit code
|
|
72
|
+
*/
|
|
73
|
+
code: number | null;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Extra props {@link exec teen_process.exec} adds to its error objects
|
|
77
|
+
*/
|
|
78
|
+
export type TeenProcessExecErrorProps = {
|
|
79
|
+
/**
|
|
80
|
+
* - STDOUT
|
|
81
|
+
*/
|
|
82
|
+
stdout: string;
|
|
83
|
+
/**
|
|
84
|
+
* - STDERR
|
|
85
|
+
*/
|
|
86
|
+
stderr: string;
|
|
87
|
+
/**
|
|
88
|
+
* - Exit code
|
|
89
|
+
*/
|
|
90
|
+
code: number | null;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Error thrown by {@link exec teen_process.exec}
|
|
94
|
+
*/
|
|
95
|
+
export type TeenProcessExecError = Error & TeenProcessExecErrorProps;
|
|
96
|
+
export type BufferProp<MaybeBuffer extends {
|
|
97
|
+
isBuffer?: boolean | undefined;
|
|
98
|
+
}> = MaybeBuffer['isBuffer'];
|
|
99
|
+
/**
|
|
100
|
+
* Spawns a process
|
|
101
|
+
* @template {TeenProcessExecOptions} T
|
|
102
|
+
* @param {string} cmd - Program to execute
|
|
103
|
+
* @param {string[]} [args] - Arguments to pass to the program
|
|
104
|
+
* @param {T} [opts] - Options
|
|
105
|
+
* @returns {Promise<BufferProp<T> extends true ? TeenProcessExecBufferResult : TeenProcessExecStringResult>}
|
|
106
|
+
*/
|
|
107
|
+
export function exec<T extends TeenProcessExecOptions>(cmd: string, args?: string[] | undefined, opts?: T | undefined): Promise<BufferProp<T> extends true ? TeenProcessExecBufferResult : TeenProcessExecStringResult>;
|
|
108
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../lib/exec.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAuKwB,GAAG,EAAE,KAAK,IAAI;;;;;qCAKzB,OAAO,eAAe,EAAE,YAAY,GAAG,gBAAgB;;;;;;;;YAMtD,MAAM;;;;YACN,MAAM;;;;UACN,MAAM;;;;;;;;;YAMN,MAAM;;;;YACN,MAAM;;;;UACN,MAAM;;;;;;;;;YAMN,MAAM;;;;YACN,MAAM;;;;UACN,MAAM;;;;;mCAKP,KAAK,GAAG,yBAAyB;;;KAKjC,WAAW,CAAC,UAAU,CAAC;AApMpC;;;;;;;GAOG;AACH,4DALW,MAAM,sJAuIhB"}
|
package/build/lib/exec.js
CHANGED
|
@@ -1,173 +1,196 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
require("
|
|
12
|
-
|
|
13
|
-
var _child_process = require("child_process");
|
|
14
|
-
|
|
15
|
-
var _shellQuote = require("shell-quote");
|
|
16
|
-
|
|
17
|
-
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
18
|
-
|
|
19
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
20
|
-
|
|
21
|
-
var _helpers = require("./helpers");
|
|
22
|
-
|
|
2
|
+
/* eslint-disable promise/prefer-await-to-callbacks */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.exec = void 0;
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const shell_quote_1 = require("shell-quote");
|
|
10
|
+
const bluebird_1 = __importDefault(require("bluebird"));
|
|
11
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
12
|
+
const helpers_1 = require("./helpers");
|
|
23
13
|
const MAX_BUFFER_SIZE = 100 * 1024 * 1024;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
proc[streamType].on('error', err => {
|
|
71
|
-
reject(new Error(`${_lodash.default.capitalize(streamType)} '${err.syscall}' error: ${err.stack}`));
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
if (opts.ignoreOutput) {
|
|
75
|
-
proc[streamType].on('data', () => {});
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const {
|
|
80
|
-
chunks,
|
|
81
|
-
maxSize
|
|
82
|
-
} = streamProps;
|
|
83
|
-
let size = 0;
|
|
84
|
-
proc[streamType].on('data', chunk => {
|
|
85
|
-
chunks.push(chunk);
|
|
86
|
-
size += chunk.length;
|
|
87
|
-
|
|
88
|
-
while (chunks.length > 1 && size >= maxSize) {
|
|
89
|
-
size -= chunks[0].length;
|
|
90
|
-
chunks.shift();
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (opts.logger && _lodash.default.isFunction(opts.logger.debug)) {
|
|
94
|
-
opts.logger.debug(chunk.toString());
|
|
14
|
+
/**
|
|
15
|
+
* Spawns a process
|
|
16
|
+
* @template {TeenProcessExecOptions} T
|
|
17
|
+
* @param {string} cmd - Program to execute
|
|
18
|
+
* @param {string[]} [args] - Arguments to pass to the program
|
|
19
|
+
* @param {T} [opts] - Options
|
|
20
|
+
* @returns {Promise<BufferProp<T> extends true ? TeenProcessExecBufferResult : TeenProcessExecStringResult>}
|
|
21
|
+
*/
|
|
22
|
+
async function exec(cmd, args = [], opts = /** @type {T} */ ({})) {
|
|
23
|
+
// get a quoted representation of the command for error strings
|
|
24
|
+
const rep = (0, shell_quote_1.quote)([cmd, ...args]);
|
|
25
|
+
// extend default options; we're basically re-implementing exec's options
|
|
26
|
+
// for use here with spawn under the hood
|
|
27
|
+
opts = /** @type {T} */ (lodash_1.default.defaults(opts, {
|
|
28
|
+
timeout: null,
|
|
29
|
+
encoding: 'utf8',
|
|
30
|
+
killSignal: 'SIGTERM',
|
|
31
|
+
cwd: undefined,
|
|
32
|
+
env: process.env,
|
|
33
|
+
ignoreOutput: false,
|
|
34
|
+
stdio: 'inherit',
|
|
35
|
+
isBuffer: false,
|
|
36
|
+
shell: undefined,
|
|
37
|
+
logger: undefined,
|
|
38
|
+
maxStdoutBufferSize: MAX_BUFFER_SIZE,
|
|
39
|
+
maxStderrBufferSize: MAX_BUFFER_SIZE,
|
|
40
|
+
}));
|
|
41
|
+
const isBuffer = Boolean(opts.isBuffer);
|
|
42
|
+
// this is an async function, so return a promise
|
|
43
|
+
return await new bluebird_1.default((resolve, reject) => {
|
|
44
|
+
// spawn the child process with options; we don't currently expose any of
|
|
45
|
+
// the other 'spawn' options through the API
|
|
46
|
+
let proc = (0, child_process_1.spawn)(cmd, args, { cwd: opts.cwd, env: opts.env, shell: opts.shell });
|
|
47
|
+
let stdoutArr = [], stderrArr = [], timer = null;
|
|
48
|
+
// if the process errors out, reject the promise
|
|
49
|
+
proc.on('error', /** @param {NodeJS.ErrnoException} err */ async (err) => {
|
|
50
|
+
if (err.code === 'ENOENT') {
|
|
51
|
+
err = await (0, helpers_1.formatEnoent)(err, cmd, opts.cwd?.toString());
|
|
52
|
+
}
|
|
53
|
+
reject(err);
|
|
54
|
+
});
|
|
55
|
+
if (proc.stdin) {
|
|
56
|
+
proc.stdin.on('error', /** @param {NodeJS.ErrnoException} err */ (err) => {
|
|
57
|
+
reject(new Error(`Standard input '${err.syscall}' error: ${err.stack}`));
|
|
58
|
+
});
|
|
95
59
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (timer) {
|
|
127
|
-
clearTimeout(timer);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
let {
|
|
131
|
-
stdout,
|
|
132
|
-
stderr
|
|
133
|
-
} = getStdio(isBuffer);
|
|
134
|
-
|
|
135
|
-
if (code === 0) {
|
|
136
|
-
resolve({
|
|
137
|
-
stdout,
|
|
138
|
-
stderr,
|
|
139
|
-
code
|
|
60
|
+
const handleStream = (streamType, streamProps) => {
|
|
61
|
+
if (!proc[streamType]) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
proc[streamType].on('error', (err) => {
|
|
65
|
+
reject(new Error(`${lodash_1.default.capitalize(streamType)} '${err.syscall}' error: ${err.stack}`));
|
|
66
|
+
});
|
|
67
|
+
if (opts.ignoreOutput) {
|
|
68
|
+
// https://github.com/nodejs/node/issues/4236
|
|
69
|
+
proc[streamType].on('data', () => { });
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// keep track of the stream if we don't want to ignore it
|
|
73
|
+
const { chunks, maxSize } = streamProps;
|
|
74
|
+
let size = 0;
|
|
75
|
+
proc[streamType].on('data', (chunk) => {
|
|
76
|
+
chunks.push(chunk);
|
|
77
|
+
size += chunk.length;
|
|
78
|
+
while (chunks.length > 1 && size >= maxSize) {
|
|
79
|
+
size -= chunks[0].length;
|
|
80
|
+
chunks.shift();
|
|
81
|
+
}
|
|
82
|
+
if (opts.logger && lodash_1.default.isFunction(opts.logger.debug)) {
|
|
83
|
+
opts.logger.debug(chunk.toString());
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
handleStream('stdout', {
|
|
88
|
+
maxSize: opts.maxStdoutBufferSize,
|
|
89
|
+
chunks: stdoutArr,
|
|
140
90
|
});
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
stdout,
|
|
145
|
-
stderr,
|
|
146
|
-
code
|
|
91
|
+
handleStream('stderr', {
|
|
92
|
+
maxSize: opts.maxStderrBufferSize,
|
|
93
|
+
chunks: stderrArr,
|
|
147
94
|
});
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
95
|
+
/**
|
|
96
|
+
* @template {boolean} U
|
|
97
|
+
* @param {U} isBuffer
|
|
98
|
+
* @returns {U extends true ? {stdout: Buffer, stderr: Buffer} : {stdout: string, stderr: string}}
|
|
99
|
+
*/
|
|
100
|
+
function getStdio(isBuffer) {
|
|
101
|
+
let stdout, stderr;
|
|
102
|
+
if (isBuffer) {
|
|
103
|
+
stdout = Buffer.concat(stdoutArr);
|
|
104
|
+
stderr = Buffer.concat(stderrArr);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
stdout = Buffer.concat(stdoutArr).toString(opts.encoding);
|
|
108
|
+
stderr = Buffer.concat(stderrArr).toString(opts.encoding);
|
|
109
|
+
}
|
|
110
|
+
return /** @type {U extends true ? {stdout: Buffer, stderr: Buffer} : {stdout: string, stderr: string}} */ ({ stdout, stderr });
|
|
111
|
+
}
|
|
112
|
+
// if the process ends, either resolve or reject the promise based on the
|
|
113
|
+
// exit code of the process. either way, attach stdout, stderr, and code.
|
|
114
|
+
// Also clean up the timer if it exists
|
|
115
|
+
proc.on('close', (code) => {
|
|
116
|
+
if (timer) {
|
|
117
|
+
clearTimeout(timer);
|
|
118
|
+
}
|
|
119
|
+
let { stdout, stderr } = getStdio(isBuffer);
|
|
120
|
+
if (code === 0) {
|
|
121
|
+
resolve(/** @type {BufferProp<T> extends true ? TeenProcessExecBufferResult : TeenProcessExecStringResult} */ ({ stdout, stderr, code }));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
let err = new Error(`Command '${rep}' exited with code ${code}`);
|
|
125
|
+
err = Object.assign(err, { stdout, stderr, code });
|
|
126
|
+
reject(err);
|
|
127
|
+
}
|
|
163
128
|
});
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
129
|
+
// if we set a timeout on the child process, cut into the execution and
|
|
130
|
+
// reject if the timeout is reached. Attach the stdout/stderr we currently
|
|
131
|
+
// have in case it's helpful in debugging
|
|
132
|
+
if (opts.timeout) {
|
|
133
|
+
timer = setTimeout(() => {
|
|
134
|
+
let { stdout, stderr } = getStdio(isBuffer);
|
|
135
|
+
let err = new Error(`Command '${rep}' timed out after ${opts.timeout}ms`);
|
|
136
|
+
err = Object.assign(err, { stdout, stderr, code: null });
|
|
137
|
+
reject(err);
|
|
138
|
+
// reject and THEN kill to avoid race conditions with the handlers
|
|
139
|
+
// above
|
|
140
|
+
proc.kill(opts.killSignal);
|
|
141
|
+
}, opts.timeout);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
169
144
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfQlVGRkVSX1NJWkUiLCJleGVjIiwiY21kIiwiYXJncyIsIm9wdHMiLCJyZXAiLCJxdW90ZSIsIl8iLCJkZWZhdWx0cyIsInRpbWVvdXQiLCJlbmNvZGluZyIsImtpbGxTaWduYWwiLCJjd2QiLCJ1bmRlZmluZWQiLCJlbnYiLCJwcm9jZXNzIiwiaWdub3JlT3V0cHV0Iiwic3RkaW8iLCJpc0J1ZmZlciIsInNoZWxsIiwibG9nZ2VyIiwibWF4U3Rkb3V0QnVmZmVyU2l6ZSIsIm1heFN0ZGVyckJ1ZmZlclNpemUiLCJCb29sZWFuIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9jIiwic3Bhd24iLCJzdGRvdXRBcnIiLCJzdGRlcnJBcnIiLCJ0aW1lciIsIm9uIiwiZXJyIiwiZXJybm8iLCJmb3JtYXRFbm9lbnQiLCJzdGRpbiIsIkVycm9yIiwic3lzY2FsbCIsInN0YWNrIiwiaGFuZGxlU3RyZWFtIiwic3RyZWFtVHlwZSIsInN0cmVhbVByb3BzIiwiY2FwaXRhbGl6ZSIsImNodW5rcyIsIm1heFNpemUiLCJzaXplIiwiY2h1bmsiLCJwdXNoIiwibGVuZ3RoIiwic2hpZnQiLCJpc0Z1bmN0aW9uIiwiZGVidWciLCJ0b1N0cmluZyIsImdldFN0ZGlvIiwic3Rkb3V0Iiwic3RkZXJyIiwiQnVmZmVyIiwiY29uY2F0IiwiY29kZSIsImNsZWFyVGltZW91dCIsIk9iamVjdCIsImFzc2lnbiIsInNldFRpbWVvdXQiLCJraWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2V4ZWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBxdW90ZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmb3JtYXRFbm9lbnQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5jb25zdCBNQVhfQlVGRkVSX1NJWkUgPSAxMDAgKiAxMDI0ICogMTAyNDtcblxuLyoqXG4gKiBTcGF3bnMgYSBwcm9jZXNzXG4gKiBAdGVtcGxhdGUge1RlZW5Qcm9jZXNzRXhlY09wdGlvbnN9IFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbWQgLSBQcm9ncmFtIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzXSAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBwcm9ncmFtXG4gKiBAcGFyYW0ge1R9IFtvcHRzXSAtIE9wdGlvbnNcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlclByb3A8VD4gZXh0ZW5kcyB0cnVlID8gVGVlblByb2Nlc3NFeGVjQnVmZmVyUmVzdWx0IDogVGVlblByb2Nlc3NFeGVjU3RyaW5nUmVzdWx0Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlYyAoY21kLCBhcmdzID0gW10sIG9wdHMgPSAvKiogQHR5cGUge1R9ICovKHt9KSkge1xuICAvLyBnZXQgYSBxdW90ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1hbmQgZm9yIGVycm9yIHN0cmluZ3NcbiAgY29uc3QgcmVwID0gcXVvdGUoW2NtZCwgLi4uYXJnc10pO1xuXG4gIC8vIGV4dGVuZCBkZWZhdWx0IG9wdGlvbnM7IHdlJ3JlIGJhc2ljYWxseSByZS1pbXBsZW1lbnRpbmcgZXhlYydzIG9wdGlvbnNcbiAgLy8gZm9yIHVzZSBoZXJlIHdpdGggc3Bhd24gdW5kZXIgdGhlIGhvb2RcbiAgb3B0cyA9IC8qKiBAdHlwZSB7VH0gKi8oXy5kZWZhdWx0cyhvcHRzLCB7XG4gICAgdGltZW91dDogbnVsbCxcbiAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgIGtpbGxTaWduYWw6ICdTSUdURVJNJyxcbiAgICBjd2Q6IHVuZGVmaW5lZCxcbiAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgIGlnbm9yZU91dHB1dDogZmFsc2UsXG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICBpc0J1ZmZlcjogZmFsc2UsXG4gICAgc2hlbGw6IHVuZGVmaW5lZCxcbiAgICBsb2dnZXI6IHVuZGVmaW5lZCxcbiAgICBtYXhTdGRvdXRCdWZmZXJTaXplOiBNQVhfQlVGRkVSX1NJWkUsXG4gICAgbWF4U3RkZXJyQnVmZmVyU2l6ZTogTUFYX0JVRkZFUl9TSVpFLFxuICB9KSk7XG5cbiAgY29uc3QgaXNCdWZmZXIgPSBCb29sZWFuKG9wdHMuaXNCdWZmZXIpO1xuXG4gIC8vIHRoaXMgaXMgYW4gYXN5bmMgZnVuY3Rpb24sIHNvIHJldHVybiBhIHByb21pc2VcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyBzcGF3biB0aGUgY2hpbGQgcHJvY2VzcyB3aXRoIG9wdGlvbnM7IHdlIGRvbid0IGN1cnJlbnRseSBleHBvc2UgYW55IG9mXG4gICAgLy8gdGhlIG90aGVyICdzcGF3bicgb3B0aW9ucyB0aHJvdWdoIHRoZSBBUElcbiAgICBsZXQgcHJvYyA9IHNwYXduKGNtZCwgYXJncywge2N3ZDogb3B0cy5jd2QsIGVudjogb3B0cy5lbnYsIHNoZWxsOiBvcHRzLnNoZWxsfSk7XG4gICAgbGV0IHN0ZG91dEFyciA9IFtdLCBzdGRlcnJBcnIgPSBbXSwgdGltZXIgPSBudWxsO1xuXG4gICAgLy8gaWYgdGhlIHByb2Nlc3MgZXJyb3JzIG91dCwgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgcHJvYy5vbignZXJyb3InLCAvKiogQHBhcmFtIHtOb2RlSlMuRXJybm9FeGNlcHRpb259IGVyciAqLyhlcnIpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChlcnIuZXJybm8gPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGVyciA9IGZvcm1hdEVub2VudChlcnIsIGNtZCwgb3B0cy5jd2QpO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gICAgaWYgKHByb2Muc3RkaW4pIHtcbiAgICAgIHByb2Muc3RkaW4ub24oJ2Vycm9yJywgLyoqIEBwYXJhbSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSBlcnIgKi8oZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0YW5kYXJkIGlucHV0ICcke2Vyci5zeXNjYWxsfScgZXJyb3I6ICR7ZXJyLnN0YWNrfWApKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBoYW5kbGVTdHJlYW0gPSAoc3RyZWFtVHlwZSwgc3RyZWFtUHJvcHMpID0+IHtcbiAgICAgIGlmICghcHJvY1tzdHJlYW1UeXBlXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHByb2Nbc3RyZWFtVHlwZV0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGAke18uY2FwaXRhbGl6ZShzdHJlYW1UeXBlKX0gJyR7ZXJyLnN5c2NhbGx9JyBlcnJvcjogJHtlcnIuc3RhY2t9YCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcHRzLmlnbm9yZU91dHB1dCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQyMzZcbiAgICAgICAgcHJvY1tzdHJlYW1UeXBlXS5vbignZGF0YScsICgpID0+IHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBzdHJlYW0gaWYgd2UgZG9uJ3Qgd2FudCB0byBpZ25vcmUgaXRcbiAgICAgIGNvbnN0IHtjaHVua3MsIG1heFNpemV9ID0gc3RyZWFtUHJvcHM7XG4gICAgICBsZXQgc2l6ZSA9IDA7XG4gICAgICBwcm9jW3N0cmVhbVR5cGVdLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgc2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChjaHVua3MubGVuZ3RoID4gMSAmJiBzaXplID49IG1heFNpemUpIHtcbiAgICAgICAgICBzaXplIC09IGNodW5rc1swXS5sZW5ndGg7XG4gICAgICAgICAgY2h1bmtzLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMubG9nZ2VyICYmIF8uaXNGdW5jdGlvbihvcHRzLmxvZ2dlci5kZWJ1ZykpIHtcbiAgICAgICAgICBvcHRzLmxvZ2dlci5kZWJ1ZyhjaHVuay50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBoYW5kbGVTdHJlYW0oJ3N0ZG91dCcsIHtcbiAgICAgIG1heFNpemU6IG9wdHMubWF4U3Rkb3V0QnVmZmVyU2l6ZSxcbiAgICAgIGNodW5rczogc3Rkb3V0QXJyLFxuICAgIH0pO1xuICAgIGhhbmRsZVN0cmVhbSgnc3RkZXJyJywge1xuICAgICAgbWF4U2l6ZTogb3B0cy5tYXhTdGRlcnJCdWZmZXJTaXplLFxuICAgICAgY2h1bmtzOiBzdGRlcnJBcnIsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAdGVtcGxhdGUge2Jvb2xlYW59IFVcbiAgICAgKiBAcGFyYW0ge1V9IGlzQnVmZmVyXG4gICAgICogQHJldHVybnMge1UgZXh0ZW5kcyB0cnVlID8ge3N0ZG91dDogQnVmZmVyLCBzdGRlcnI6IEJ1ZmZlcn0gOiB7c3Rkb3V0OiBzdHJpbmcsIHN0ZGVycjogc3RyaW5nfX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdGRpbyAoaXNCdWZmZXIpIHtcbiAgICAgIGxldCBzdGRvdXQsIHN0ZGVycjtcbiAgICAgIGlmIChpc0J1ZmZlcikge1xuICAgICAgICBzdGRvdXQgPSBCdWZmZXIuY29uY2F0KHN0ZG91dEFycik7XG4gICAgICAgIHN0ZGVyciA9IEJ1ZmZlci5jb25jYXQoc3RkZXJyQXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZG91dCA9IEJ1ZmZlci5jb25jYXQoc3Rkb3V0QXJyKS50b1N0cmluZyhvcHRzLmVuY29kaW5nKTtcbiAgICAgICAgc3RkZXJyID0gQnVmZmVyLmNvbmNhdChzdGRlcnJBcnIpLnRvU3RyaW5nKG9wdHMuZW5jb2RpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7VSBleHRlbmRzIHRydWUgPyB7c3Rkb3V0OiBCdWZmZXIsIHN0ZGVycjogQnVmZmVyfSA6IHtzdGRvdXQ6IHN0cmluZywgc3RkZXJyOiBzdHJpbmd9fSAqLyh7c3Rkb3V0LCBzdGRlcnJ9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcHJvY2VzcyBlbmRzLCBlaXRoZXIgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgYmFzZWQgb24gdGhlXG4gICAgLy8gZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzLiBlaXRoZXIgd2F5LCBhdHRhY2ggc3Rkb3V0LCBzdGRlcnIsIGFuZCBjb2RlLlxuICAgIC8vIEFsc28gY2xlYW4gdXAgdGhlIHRpbWVyIGlmIGl0IGV4aXN0c1xuICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfVxuICAgICAgbGV0IHtzdGRvdXQsIHN0ZGVycn0gPSBnZXRTdGRpbyhpc0J1ZmZlcik7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICByZXNvbHZlKC8qKiBAdHlwZSB7QnVmZmVyUHJvcDxUPiBleHRlbmRzIHRydWUgPyBUZWVuUHJvY2Vzc0V4ZWNCdWZmZXJSZXN1bHQgOiBUZWVuUHJvY2Vzc0V4ZWNTdHJpbmdSZXN1bHR9ICovKHtzdGRvdXQsIHN0ZGVyciwgY29kZX0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYENvbW1hbmQgJyR7cmVwfScgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCk7XG4gICAgICAgIGVyciA9IE9iamVjdC5hc3NpZ24oZXJyLCB7c3Rkb3V0LCBzdGRlcnIsIGNvZGV9KTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBpZiB3ZSBzZXQgYSB0aW1lb3V0IG9uIHRoZSBjaGlsZCBwcm9jZXNzLCBjdXQgaW50byB0aGUgZXhlY3V0aW9uIGFuZFxuICAgIC8vIHJlamVjdCBpZiB0aGUgdGltZW91dCBpcyByZWFjaGVkLiBBdHRhY2ggdGhlIHN0ZG91dC9zdGRlcnIgd2UgY3VycmVudGx5XG4gICAgLy8gaGF2ZSBpbiBjYXNlIGl0J3MgaGVscGZ1bCBpbiBkZWJ1Z2dpbmdcbiAgICBpZiAob3B0cy50aW1lb3V0KSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsZXQge3N0ZG91dCwgc3RkZXJyfSA9IGdldFN0ZGlvKGlzQnVmZmVyKTtcbiAgICAgICAgbGV0IGVyciA9IG5ldyBFcnJvcihgQ29tbWFuZCAnJHtyZXB9JyB0aW1lZCBvdXQgYWZ0ZXIgJHtvcHRzLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgZXJyID0gT2JqZWN0LmFzc2lnbihlcnIsIHtzdGRvdXQsIHN0ZGVyciwgY29kZTogbnVsbH0pO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgLy8gcmVqZWN0IGFuZCBUSEVOIGtpbGwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGhhbmRsZXJzXG4gICAgICAgIC8vIGFib3ZlXG4gICAgICAgIHByb2Mua2lsbChvcHRzLmtpbGxTaWduYWwpO1xuICAgICAgfSwgb3B0cy50aW1lb3V0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgeyBleGVjIH07XG5leHBvcnQgZGVmYXVsdCBleGVjO1xuXG4vKipcbiAqIE9wdGlvbnMgb24gdG9wIG9mIGBTcGF3bk9wdGlvbnNgLCB1bmlxdWUgdG8gYHRlZW5fcHJvY2Vzcy5gXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUZWVuUHJvY2Vzc1Byb3BzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpZ25vcmVPdXRwdXRdIC0gSWdub3JlICYgZGlzY2FyZCBhbGwgb3V0cHV0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc0J1ZmZlcl0gLSBSZXR1cm4gb3V0cHV0IGFzIGEgQnVmZmVyXG4gKiBAcHJvcGVydHkge1RlZW5Qcm9jZXNzTG9nZ2VyfSBbbG9nZ2VyXSAtIExvZ2dlciB0byB1c2UgZm9yIGRlYnVnZ2luZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhTdGRvdXRCdWZmZXJTaXplXSAtIE1heGltdW0gc2l6ZSBvZiBgc3Rkb3V0YCBidWZmZXJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4U3RkZXJyQnVmZmVyU2l6ZV0gLSBNYXhpbXVtIHNpemUgb2YgYHN0ZGVycmAgYnVmZmVyXG4gKiBAcHJvcGVydHkge0J1ZmZlckVuY29kaW5nfSBbZW5jb2Rpbmc9J3V0ZjgnXSAtIEVuY29kaW5nIHRvIHVzZSBmb3Igb3V0cHV0XG4gKi9cblxuLyoqXG4gKiBBIGxvZ2dlciBvYmplY3QgdW5kZXJzdG9vZCBieSB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY30uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUZWVuUHJvY2Vzc0xvZ2dlclxuICogQHByb3BlcnR5IHsoLi4uYXJnczogYW55W10pID0+IHZvaWR9IGRlYnVnXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY30uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdjaGlsZF9wcm9jZXNzJykuU3Bhd25PcHRpb25zICYgVGVlblByb2Nlc3NQcm9wc30gVGVlblByb2Nlc3NFeGVjT3B0aW9uc1xuICovXG5cbi8qKlxuICogVGhlIHZhbHVlIHtAbGluayBleGVjIHRlZW5fcHJvY2Vzcy5leGVjfSByZXNvbHZlcyB0byB3aGVuIGBpc0J1ZmZlcmAgaXMgYGZhbHNlYFxuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NFeGVjU3RyaW5nUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3Rkb3V0IC0gU3Rkb3V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gU3RkZXJyXG4gKiBAcHJvcGVydHkge251bWJlcj99IGNvZGUgLSBFeGl0IGNvZGVcbiAqL1xuXG4vKipcbiAqIFRoZSB2YWx1ZSB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY30gcmVzb2x2ZXMgdG8gd2hlbiBgaXNCdWZmZXJgIGlzIGB0cnVlYFxuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NFeGVjQnVmZmVyUmVzdWx0XG4gKiBAcHJvcGVydHkge0J1ZmZlcn0gc3Rkb3V0IC0gU3Rkb3V0XG4gKiBAcHJvcGVydHkge0J1ZmZlcn0gc3RkZXJyIC0gU3RkZXJyXG4gKiBAcHJvcGVydHkge251bWJlcj99IGNvZGUgLSBFeGl0IGNvZGVcbiAqL1xuXG4vKipcbiAqIEV4dHJhIHByb3BzIHtAbGluayBleGVjIHRlZW5fcHJvY2Vzcy5leGVjfSBhZGRzIHRvIGl0cyBlcnJvciBvYmplY3RzXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUZWVuUHJvY2Vzc0V4ZWNFcnJvclByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3Rkb3V0IC0gU1RET1VUXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gU1RERVJSXG4gKiBAcHJvcGVydHkge251bWJlcj99IGNvZGUgLSBFeGl0IGNvZGVcbiAqL1xuXG4vKipcbiAqIEVycm9yIHRocm93biBieSB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY31cbiAqIEB0eXBlZGVmIHtFcnJvciAmIFRlZW5Qcm9jZXNzRXhlY0Vycm9yUHJvcHN9IFRlZW5Qcm9jZXNzRXhlY0Vycm9yXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge3tpc0J1ZmZlcj86IGJvb2xlYW59fSBNYXliZUJ1ZmZlclxuICogQHR5cGVkZWYge01heWJlQnVmZmVyWydpc0J1ZmZlciddfSBCdWZmZXJQcm9wXG4gKiBAcHJpdmF0ZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGVBQWUsR0FB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
|
|
145
|
+
exports.exec = exec;
|
|
146
|
+
exports.default = exec;
|
|
147
|
+
/**
|
|
148
|
+
* Options on top of `SpawnOptions`, unique to `teen_process.`
|
|
149
|
+
* @typedef {Object} TeenProcessProps
|
|
150
|
+
* @property {boolean} [ignoreOutput] - Ignore & discard all output
|
|
151
|
+
* @property {boolean} [isBuffer] - Return output as a Buffer
|
|
152
|
+
* @property {TeenProcessLogger} [logger] - Logger to use for debugging
|
|
153
|
+
* @property {number} [maxStdoutBufferSize] - Maximum size of `stdout` buffer
|
|
154
|
+
* @property {number} [maxStderrBufferSize] - Maximum size of `stderr` buffer
|
|
155
|
+
* @property {BufferEncoding} [encoding='utf8'] - Encoding to use for output
|
|
156
|
+
*/
|
|
157
|
+
/**
|
|
158
|
+
* A logger object understood by {@link exec teen_process.exec}.
|
|
159
|
+
* @typedef {Object} TeenProcessLogger
|
|
160
|
+
* @property {(...args: any[]) => void} debug
|
|
161
|
+
*/
|
|
162
|
+
/**
|
|
163
|
+
* Options for {@link exec teen_process.exec}.
|
|
164
|
+
* @typedef {import('child_process').SpawnOptions & TeenProcessProps} TeenProcessExecOptions
|
|
165
|
+
*/
|
|
166
|
+
/**
|
|
167
|
+
* The value {@link exec teen_process.exec} resolves to when `isBuffer` is `false`
|
|
168
|
+
* @typedef {Object} TeenProcessExecStringResult
|
|
169
|
+
* @property {string} stdout - Stdout
|
|
170
|
+
* @property {string} stderr - Stderr
|
|
171
|
+
* @property {number?} code - Exit code
|
|
172
|
+
*/
|
|
173
|
+
/**
|
|
174
|
+
* The value {@link exec teen_process.exec} resolves to when `isBuffer` is `true`
|
|
175
|
+
* @typedef {Object} TeenProcessExecBufferResult
|
|
176
|
+
* @property {Buffer} stdout - Stdout
|
|
177
|
+
* @property {Buffer} stderr - Stderr
|
|
178
|
+
* @property {number?} code - Exit code
|
|
179
|
+
*/
|
|
180
|
+
/**
|
|
181
|
+
* Extra props {@link exec teen_process.exec} adds to its error objects
|
|
182
|
+
* @typedef {Object} TeenProcessExecErrorProps
|
|
183
|
+
* @property {string} stdout - STDOUT
|
|
184
|
+
* @property {string} stderr - STDERR
|
|
185
|
+
* @property {number?} code - Exit code
|
|
186
|
+
*/
|
|
187
|
+
/**
|
|
188
|
+
* Error thrown by {@link exec teen_process.exec}
|
|
189
|
+
* @typedef {Error & TeenProcessExecErrorProps} TeenProcessExecError
|
|
190
|
+
*/
|
|
191
|
+
/**
|
|
192
|
+
* @template {{isBuffer?: boolean}} MaybeBuffer
|
|
193
|
+
* @typedef {MaybeBuffer['isBuffer']} BufferProp
|
|
194
|
+
* @private
|
|
195
|
+
*/
|
|
196
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../lib/exec.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decorates ENOENT error received from a spawn system call
|
|
3
|
+
* with a more descriptive message, so it could be properly handled by a user.
|
|
4
|
+
*
|
|
5
|
+
* @param {NodeJS.ErrnoException} error Original error instance. !!! The instance is mutated after
|
|
6
|
+
* this helper function invocation
|
|
7
|
+
* @param {string} cmd Original command to execute
|
|
8
|
+
* @param {string?} [cwd] Optional path to the current working dir
|
|
9
|
+
* @returns {Promise<NodeJS.ErrnoException>} Mutated error instance with an improved description or an
|
|
10
|
+
* unchanged error instance
|
|
11
|
+
*/
|
|
12
|
+
export function formatEnoent(error: NodeJS.ErrnoException, cmd: string, cwd?: string | null | undefined): Promise<NodeJS.ErrnoException>;
|
|
13
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../lib/helpers.js"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,oCAPW,OAAO,cAAc,OAErB,MAAM,oCAEJ,QAAQ,OAAO,cAAc,CAAC,CAwB1C"}
|