diff options
Diffstat (limited to 'src/js/out/modules/node/child_process.js')
-rw-r--r-- | src/js/out/modules/node/child_process.js | 718 |
1 files changed, 718 insertions, 0 deletions
diff --git a/src/js/out/modules/node/child_process.js b/src/js/out/modules/node/child_process.js new file mode 100644 index 000000000..ddc16e9e9 --- /dev/null +++ b/src/js/out/modules/node/child_process.js @@ -0,0 +1,718 @@ +function spawn(file, args, options) { + options = normalizeSpawnArguments(file, args, options), validateTimeout(options.timeout), validateAbortSignal(options.signal, "options.signal"); + const killSignal2 = sanitizeKillSignal(options.killSignal), child = new ChildProcess; + if (debug("spawn", options), child.spawn(options), options.timeout > 0) { + let timeoutId = setTimeout(() => { + if (timeoutId) { + try { + child.kill(killSignal2); + } catch (err) { + child.emit("error", err); + } + timeoutId = null; + } + }); + child.once("exit", () => { + if (timeoutId) + clearTimeout(timeoutId), timeoutId = null; + }); + } + if (options.signal) { + let onAbortListener = function() { + abortChildProcess(child, killSignal2); + }; + const signal = options.signal; + if (signal.aborted) + process.nextTick(onAbortListener); + else + signal.addEventListener("abort", onAbortListener, { once: !0 }), child.once("exit", () => signal.removeEventListener("abort", onAbortListener)); + } + return child; +} +function execFile(file, args, options, callback) { + ({ file, args, options, callback } = normalizeExecFileArgs(file, args, options, callback)), options = { + encoding: "utf8", + timeout: 0, + maxBuffer: MAX_BUFFER, + killSignal: "SIGTERM", + cwd: null, + env: null, + shell: !1, + ...options + }; + const maxBuffer = options.maxBuffer; + validateTimeout(options.timeout), validateMaxBuffer(maxBuffer), options.killSignal = sanitizeKillSignal(options.killSignal); + const child = spawn(file, args, { + cwd: options.cwd, + env: options.env, + shell: options.shell, + signal: options.signal + }); + let encoding; + const _stdout = [], _stderr = []; + if (options.encoding !== "buffer" && BufferIsEncoding(options.encoding)) + encoding = options.encoding; + else + encoding = null; + let stdoutLen = 0, stderrLen = 0, killed = !1, exited = !1, timeoutId, encodedStdoutLen, encodedStderrLen, ex = null, cmd = file; + function exitHandler(code, signal) { + if (exited) + return; + if (exited = !0, timeoutId) + clearTimeout(timeoutId), timeoutId = null; + if (!callback) + return; + const readableEncoding = child?.stdout?.readableEncoding; + let stdout, stderr; + if (encoding || child.stdout && readableEncoding) + stdout = ArrayPrototypeJoin.call(_stdout, ""); + else + stdout = BufferConcat(_stdout); + if (encoding || child.stderr && readableEncoding) + stderr = ArrayPrototypeJoin.call(_stderr, ""); + else + stderr = BufferConcat(_stderr); + if (!ex && code === 0 && signal === null) { + callback(null, stdout, stderr); + return; + } + if (args?.length) + cmd += ` ${ArrayPrototypeJoin.call(args, " ")}`; + if (!ex) { + let message = `Command failed: ${cmd}`; + if (stderr) + message += `\n${stderr}`; + ex = genericNodeError(message, { + code, + killed: child.killed || killed, + signal + }); + } + ex.cmd = cmd, callback(ex, stdout, stderr); + } + function errorHandler(e) { + if (ex = e, child.stdout) + child.stdout.destroy(); + if (child.stderr) + child.stderr.destroy(); + exitHandler(); + } + function kill() { + if (child.stdout) + child.stdout.destroy(); + if (child.stderr) + child.stderr.destroy(); + killed = !0; + try { + child.kill(options.killSignal); + } catch (e) { + ex = e, exitHandler(); + } + } + if (options.timeout > 0) + timeoutId = setTimeout(function delayedKill() { + kill(), timeoutId = null; + }, options.timeout); + if (child.stdout) { + if (encoding) + child.stdout.setEncoding(encoding); + child.stdout.on("data", maxBuffer === Infinity ? function onUnlimitedSizeBufferedData(chunk) { + ArrayPrototypePush.call(_stdout, chunk); + } : encoding ? function onChildStdoutEncoded(chunk) { + if (stdoutLen += chunk.length, stdoutLen * 4 > maxBuffer) { + const encoding2 = child.stdout.readableEncoding, actualLen = Buffer.byteLength(chunk, encoding2); + if (encodedStdoutLen === void 0) + for (let i = 0;i < _stdout.length; i++) + encodedStdoutLen += Buffer.byteLength(_stdout[i], encoding2); + else + encodedStdoutLen += actualLen; + const truncatedLen = maxBuffer - (encodedStdoutLen - actualLen); + ArrayPrototypePush.call(_stdout, StringPrototypeSlice.apply(chunk, 0, truncatedLen)), ex = new ERR_CHILD_PROCESS_STDIO_MAXBUFFER("stdout"), kill(); + } else + ArrayPrototypePush.call(_stdout, chunk); + } : function onChildStdoutRaw(chunk) { + if (stdoutLen += chunk.length, stdoutLen > maxBuffer) { + const truncatedLen = maxBuffer - (stdoutLen - chunk.length); + ArrayPrototypePush.call(_stdout, chunk.slice(0, truncatedLen)), ex = new ERR_CHILD_PROCESS_STDIO_MAXBUFFER("stdout"), kill(); + } else + ArrayPrototypePush.call(_stdout, chunk); + }); + } + if (child.stderr) { + if (encoding) + child.stderr.setEncoding(encoding); + child.stderr.on("data", maxBuffer === Infinity ? function onUnlimitedSizeBufferedData(chunk) { + ArrayPrototypePush.call(_stderr, chunk); + } : encoding ? function onChildStderrEncoded(chunk) { + if (stderrLen += chunk.length, stderrLen * 4 > maxBuffer) { + const encoding2 = child.stderr.readableEncoding, actualLen = Buffer.byteLength(chunk, encoding2); + if (encodedStderrLen === void 0) + for (let i = 0;i < _stderr.length; i++) + encodedStderrLen += Buffer.byteLength(_stderr[i], encoding2); + else + encodedStderrLen += actualLen; + const truncatedLen = maxBuffer - (encodedStderrLen - actualLen); + ArrayPrototypePush.call(_stderr, StringPrototypeSlice.call(chunk, 0, truncatedLen)), ex = new ERR_CHILD_PROCESS_STDIO_MAXBUFFER("stderr"), kill(); + } else + ArrayPrototypePush.call(_stderr, chunk); + } : function onChildStderrRaw(chunk) { + if (stderrLen += chunk.length, stderrLen > maxBuffer) { + const truncatedLen = maxBuffer - (stderrLen - chunk.length); + ArrayPrototypePush.call(_stderr, StringPrototypeSlice.call(chunk, 0, truncatedLen)), ex = new ERR_CHILD_PROCESS_STDIO_MAXBUFFER("stderr"), kill(); + } else + ArrayPrototypePush.call(_stderr, chunk); + }); + } + return child.addListener("close", exitHandler), child.addListener("error", errorHandler), child; +} +function exec(command, options, callback) { + const opts = normalizeExecArgs(command, options, callback); + return execFile(opts.file, opts.options, opts.callback); +} +function spawnSync(file, args, options) { + options = { + maxBuffer: MAX_BUFFER, + ...normalizeSpawnArguments(file, args, options) + }; + const { maxBuffer, encoding } = options; + debug("spawnSync", options), validateTimeout(options.timeout), validateMaxBuffer(maxBuffer), options.killSignal = sanitizeKillSignal(options.killSignal); + const stdio = options.stdio || "pipe", bunStdio = getBunStdioFromOptions(stdio); + var { input } = options; + if (input) + if (ArrayBufferIsView(input)) + bunStdio[0] = input; + else if (typeof input === "string") + bunStdio[0] = Buffer.from(input, encoding || "utf8"); + else + throw new ERR_INVALID_ARG_TYPE(`options.stdio[0]`, ["Buffer", "TypedArray", "DataView", "string"], input); + const { stdout, stderr, success, exitCode } = Bun.spawnSync({ + cmd: options.args, + env: options.env || void 0, + cwd: options.cwd || void 0, + stdin: bunStdio[0], + stdout: bunStdio[1], + stderr: bunStdio[2] + }), result = { + signal: null, + status: exitCode, + output: [null, stdout, stderr] + }; + if (stdout && encoding && encoding !== "buffer") + result.output[1] = result.output[1]?.toString(encoding); + if (stderr && encoding && encoding !== "buffer") + result.output[2] = result.output[2]?.toString(encoding); + if (result.stdout = result.output[1], result.stderr = result.output[2], !success) + result.error = new SystemError(result.output[2], options.file, "spawnSync", -1, result.status), result.error.spawnargs = ArrayPrototypeSlice.call(options.args, 1); + return result; +} +function execFileSync(file, args, options) { + ({ file, args, options } = normalizeExecFileArgs(file, args, options)); + const ret = spawnSync(file, args, options), errArgs = [options.argv0 || file]; + ArrayPrototypePush.apply(errArgs, args); + const err = checkExecSyncError(ret, errArgs); + if (err) + throw err; + return ret.stdout; +} +function execSync(command, options) { + const opts = normalizeExecArgs(command, options, null), ret = spawnSync(opts.file, opts.options), err = checkExecSyncError(ret, void 0, command); + if (err) + throw err; + return ret.stdout; +} +function fork() { + throw new Error("Not implemented"); +} +var convertToValidSignal = function(signal) { + if (typeof signal === "number" && getSignalsToNamesMapping()[signal]) + return signal; + if (typeof signal === "string") { + const signalName = signals[StringPrototypeToUpperCase.call(signal)]; + if (signalName) + return signalName; + } + throw new ERR_UNKNOWN_SIGNAL(signal); +}, sanitizeKillSignal = function(killSignal2) { + if (typeof killSignal2 === "string" || typeof killSignal2 === "number") + return convertToValidSignal(killSignal2); + else if (killSignal2 != null) + throw new ERR_INVALID_ARG_TYPE("options.killSignal", ["string", "number"], killSignal2); +}, getSignalsToNamesMapping = function() { + if (signalsToNamesMapping !== void 0) + return signalsToNamesMapping; + signalsToNamesMapping = ObjectCreate(null); + for (let key in signals) + signalsToNamesMapping[signals[key]] = key; + return signalsToNamesMapping; +}, normalizeExecFileArgs = function(file, args, options, callback) { + if (ArrayIsArray(args)) + args = ArrayPrototypeSlice.call(args); + else if (args != null && typeof args === "object") + callback = options, options = args, args = null; + else if (typeof args === "function") + callback = args, options = null, args = null; + if (args == null) + args = []; + if (typeof options === "function") + callback = options; + else if (options != null) + validateObject(options, "options"); + if (options == null) + options = kEmptyObject; + if (callback != null) + validateFunction(callback, "callback"); + if (options.argv0 != null) + validateString(options.argv0, "options.argv0"), validateArgumentNullCheck(options.argv0, "options.argv0"); + return { file, args, options, callback }; +}, normalizeExecArgs = function(command, options, callback) { + if (validateString(command, "command"), validateArgumentNullCheck(command, "command"), typeof options === "function") + callback = options, options = void 0; + return options = { ...options }, options.shell = typeof options.shell === "string" ? options.shell : !0, { + file: command, + options, + callback + }; +}, normalizeSpawnArguments = function(file, args, options) { + if (validateString(file, "file"), validateArgumentNullCheck(file, "file"), file.length === 0) + throw new ERR_INVALID_ARG_VALUE("file", file, "cannot be empty"); + if (ArrayIsArray(args)) + args = ArrayPrototypeSlice.call(args); + else if (args == null) + args = []; + else if (typeof args !== "object") + throw new ERR_INVALID_ARG_TYPE("args", "object", args); + else + options = args, args = []; + if (validateArgumentsNullCheck(args, "args"), options === void 0) + options = {}; + else + validateObject(options, "options"); + let cwd = options.cwd; + if (cwd != null) + cwd = getValidatedPath(cwd, "options.cwd"); + if (options.shell != null && typeof options.shell !== "boolean" && typeof options.shell !== "string") + throw new ERR_INVALID_ARG_TYPE("options.shell", ["boolean", "string"], options.shell); + if (options.argv0 != null) + validateString(options.argv0, "options.argv0"), validateArgumentNullCheck(options.argv0, "options.argv0"); + if (options.shell) { + validateArgumentNullCheck(options.shell, "options.shell"); + const command = ArrayPrototypeJoin.call([file, ...args], " "); + if (typeof options.shell === "string") + file = options.shell; + else + file = "sh"; + args = ["-c", command]; + } + if (typeof options.argv0 === "string") + ArrayPrototypeUnshift.call(args, options.argv0); + else + ArrayPrototypeUnshift.call(args, file); + const envPairs = options.env || process.env; + return { ...options, file, args, cwd, envPairs }; +}, checkExecSyncError = function(ret, args, cmd) { + let err; + if (ret.error) + err = ret.error, ObjectAssign(err, ret); + else if (ret.status !== 0) { + let msg = "Command failed: "; + if (msg += cmd || ArrayPrototypeJoin.call(args, " "), ret.stderr && ret.stderr.length > 0) + msg += `\n${ret.stderr.toString()}`; + err = genericNodeError(msg, ret); + } + return err; +}, nodeToBun = function(item) { + if (typeof item === "number") + return item; + else { + const result = nodeToBunLookup[item]; + if (result === void 0) + throw new Error("Invalid stdio option"); + return result; + } +}, fdToStdioName = function(fd) { + switch (fd) { + case 0: + return "stdin"; + case 1: + return "stdout"; + case 2: + return "stderr"; + default: + return null; + } +}, getBunStdioFromOptions = function(stdio) { + return normalizeStdio(stdio).map((item) => nodeToBun(item)); +}, normalizeStdio = function(stdio) { + if (typeof stdio === "string") + switch (stdio) { + case "ignore": + return ["ignore", "ignore", "ignore"]; + case "pipe": + return ["pipe", "pipe", "pipe"]; + case "inherit": + return ["inherit", "inherit", "inherit"]; + default: + throw new ERR_INVALID_OPT_VALUE("stdio", stdio); + } + else if (ArrayIsArray(stdio)) { + let processedStdio; + if (stdio.length === 0) + processedStdio = ["pipe", "pipe", "pipe"]; + else if (stdio.length === 1) + processedStdio = [stdio[0], "pipe", "pipe"]; + else if (stdio.length === 2) + processedStdio = [stdio[0], stdio[1], "pipe"]; + else if (stdio.length >= 3) + processedStdio = [stdio[0], stdio[1], stdio[2]]; + return processedStdio.map((item) => !item ? "pipe" : item); + } else + throw new ERR_INVALID_OPT_VALUE("stdio", stdio); +}, flushStdio = function(subprocess) { + const stdio = subprocess.stdio; + if (stdio == null) + return; + for (let i = 0;i < stdio.length; i++) { + const stream = stdio[i]; + if (!stream || !stream.readable) + continue; + stream.resume(); + } +}, onSpawnNT = function(self) { + self.emit("spawn"); +}, abortChildProcess = function(child, killSignal2) { + if (!child) + return; + try { + if (child.kill(killSignal2)) + child.emit("error", new AbortError); + } catch (err) { + child.emit("error", err); + } +}, validateMaxBuffer = function(maxBuffer) { + if (maxBuffer != null && !(typeof maxBuffer === "number" && maxBuffer >= 0)) + throw new ERR_OUT_OF_RANGE("options.maxBuffer", "a positive number", maxBuffer); +}, validateArgumentNullCheck = function(arg, propName) { + if (typeof arg === "string" && StringPrototypeIncludes.call(arg, "\0")) + throw new ERR_INVALID_ARG_VALUE(propName, arg, "must be a string without null bytes"); +}, validateArgumentsNullCheck = function(args, propName) { + for (let i = 0;i < args.length; ++i) + validateArgumentNullCheck(args[i], `${propName}[${i}]`); +}, validateTimeout = function(timeout) { + if (timeout != null && !(NumberIsInteger(timeout) && timeout >= 0)) + throw new ERR_OUT_OF_RANGE("timeout", "an unsigned integer", timeout); +}; +var validateFunction = function(value, name) { + if (typeof value !== "function") + throw new ERR_INVALID_ARG_TYPE(name, "Function", value); +}, validateString = function(value, name) { + if (typeof value !== "string") + throw new ERR_INVALID_ARG_TYPE(name, "string", value); +}, nullCheck = function(path, propName, throwError = !0) { + const pathIsString = typeof path === "string", pathIsUint8Array = isUint8Array(path); + if (!pathIsString && !pathIsUint8Array || pathIsString && !StringPrototypeIncludes.call(path, "\0") || pathIsUint8Array && !Uint8ArrayPrototypeIncludes.call(path, 0)) + return; + const err = new ERR_INVALID_ARG_VALUE(propName, path, "must be a string or Uint8Array without null bytes"); + if (throwError) + throw err; + return err; +}, validatePath = function(path, propName = "path") { + if (typeof path !== "string" && !isUint8Array(path)) + throw new ERR_INVALID_ARG_TYPE(propName, ["string", "Buffer", "URL"], path); + const err = nullCheck(path, propName, !1); + if (err !== void 0) + throw err; +}, getValidatedPath = function(fileURLOrPath, propName = "path") { + const path = toPathIfFileURL(fileURLOrPath); + return validatePath(path, propName), path; +}, isUint8Array = function(value) { + return typeof value === "object" && value !== null && value instanceof Uint8Array; +}, isURLInstance = function(fileURLOrPath) { + return fileURLOrPath != null && fileURLOrPath.href && fileURLOrPath.origin; +}, toPathIfFileURL = function(fileURLOrPath) { + if (!isURLInstance(fileURLOrPath)) + return fileURLOrPath; + return Bun.fileURLToPath(fileURLOrPath); +}, genericNodeError = function(message, options) { + const err = new Error(message); + return err.code = options.code, err.killed = options.killed, err.signal = options.signal, err; +}, ERR_OUT_OF_RANGE = function(str, range, input, replaceDefaultBoolean = !1) { + return new RangeError(`The value of ${str} is out of range. It must be ${range}. Received ${input}`); +}, ERR_CHILD_PROCESS_STDIO_MAXBUFFER = function(stdio) { + return Error(`${stdio} maxBuffer length exceeded`); +}, ERR_UNKNOWN_SIGNAL = function(name) { + const err = new TypeError(`Unknown signal: ${name}`); + return err.code = "ERR_UNKNOWN_SIGNAL", err; +}, ERR_INVALID_ARG_TYPE = function(name, type, value) { + const err = new TypeError(`The "${name}" argument must be of type ${type}. Received ${value}`); + return err.code = "ERR_INVALID_ARG_TYPE", err; +}, ERR_INVALID_OPT_VALUE = function(name, value) { + return new TypeError(`The value "${value}" is invalid for option "${name}"`); +}, ERR_INVALID_ARG_VALUE = function(name, value, reason) { + return new Error(`The value "${value}" is invalid for argument '${name}'. Reason: ${reason}`); +}, EventEmitter = import.meta.require("node:events"), { + Readable: { fromWeb: ReadableFromWeb }, + NativeWritable +} = import.meta.require("node:stream"), { + constants: { signals } +} = import.meta.require("node:os"), { promisify } = import.meta.require("node:util"), { ArrayBuffer, Uint8Array, String, Object, Buffer, Promise: Promise2 } = import.meta.primordials, ObjectPrototypeHasOwnProperty = Object.prototype.hasOwnProperty, ObjectCreate = Object.create, ObjectAssign = Object.assign, ObjectDefineProperty = Object.defineProperty, BufferConcat = Buffer.concat, BufferIsEncoding = Buffer.isEncoding, kEmptyObject = ObjectCreate(null), ArrayPrototypePush = Array.prototype.push, ArrayPrototypeReduce = Array.prototype.reduce, ArrayPrototypeFilter = Array.prototype.filter, ArrayPrototypeJoin = Array.prototype.join, ArrayPrototypeMap = Array.prototype.map, ArrayPrototypeIncludes = Array.prototype.includes, ArrayPrototypeSlice = Array.prototype.slice, ArrayPrototypeUnshift = Array.prototype.unshift, ArrayIsArray = Array.isArray, ArrayBufferIsView = ArrayBuffer.isView, NumberIsInteger = Number.isInteger; +var StringPrototypeToUpperCase = String.prototype.toUpperCase, StringPrototypeIncludes = String.prototype.includes, StringPrototypeSlice = String.prototype.slice, Uint8ArrayPrototypeIncludes = Uint8Array.prototype.includes, MAX_BUFFER = 1048576, __DEBUG__ = process.env.DEBUG || !1, __TRACK_STDIO__ = process.env.DEBUG_STDIO, debug = __DEBUG__ ? console.log : () => { +}; +if (__TRACK_STDIO__) + debug("child_process: debug mode on"), globalThis.__lastId = null, globalThis.__getId = () => { + return globalThis.__lastId !== null ? globalThis.__lastId++ : 0; + }; +var customPromiseExecFunction = (orig) => { + return (...args) => { + let resolve, reject; + const promise = new Promise2((res, rej) => { + resolve = res, reject = rej; + }); + return promise.child = orig(...args, (err, stdout, stderr) => { + if (err !== null) + err.stdout = stdout, err.stderr = stderr, reject(err); + else + resolve({ stdout, stderr }); + }), promise; + }; +}; +ObjectDefineProperty(exec, promisify.custom, { + __proto__: null, + enumerable: !1, + value: customPromiseExecFunction(exec) +}); +var signalsToNamesMapping; + +class ChildProcess extends EventEmitter { + #handle; + #exited = !1; + #closesNeeded = 1; + #closesGot = 0; + connected = !1; + signalCode = null; + exitCode = null; + spawnfile; + spawnargs; + pid; + channel; + get killed() { + if (this.#handle == null) + return !1; + } + #handleOnExit(exitCode, signalCode, err) { + if (this.#exited) + return; + if (this.exitCode = this.#handle.exitCode, this.signalCode = exitCode > 0 ? signalCode : null, this.#stdin) + this.#stdin.destroy(); + if (this.#handle) + this.#handle = null; + if (exitCode < 0) { + const err2 = new SystemError(`Spawned process exited with error code: ${exitCode}`, void 0, "spawn", "EUNKNOWN", "ERR_CHILD_PROCESS_UNKNOWN_ERROR"); + if (this.spawnfile) + err2.path = this.spawnfile; + err2.spawnargs = ArrayPrototypeSlice.call(this.spawnargs, 1), this.emit("error", err2); + } else + this.emit("exit", this.exitCode, this.signalCode); + process.nextTick(flushStdio, this), this.#maybeClose(), this.#exited = !0, this.#stdioOptions = ["destroyed", "destroyed", "destroyed"]; + } + #getBunSpawnIo(i, encoding) { + if (__DEBUG__ && !this.#handle) + if (this.#handle === null) + debug("ChildProcess: getBunSpawnIo: this.#handle is null. This means the subprocess already exited"); + else + debug("ChildProcess: getBunSpawnIo: this.#handle is undefined"); + const io = this.#stdioOptions[i]; + switch (i) { + case 0: + switch (io) { + case "pipe": + return new NativeWritable(this.#handle.stdin); + case "inherit": + return process.stdin || null; + case "destroyed": + return new ShimmedStdin; + default: + return null; + } + case 2: + case 1: + switch (io) { + case "pipe": + return ReadableFromWeb(this.#handle[fdToStdioName(i)], __TRACK_STDIO__ ? { + encoding, + __id: `PARENT_${fdToStdioName(i).toUpperCase()}-${globalThis.__getId()}` + } : { encoding }); + case "inherit": + return process[fdToStdioName(i)] || null; + case "destroyed": + return new ShimmedStdioOutStream; + default: + return null; + } + } + } + #stdin; + #stdout; + #stderr; + #stdioObject; + #encoding; + #stdioOptions; + #createStdioObject() { + return Object.create(null, { + 0: { + get: () => this.stdin + }, + 1: { + get: () => this.stdout + }, + 2: { + get: () => this.stderr + } + }); + } + get stdin() { + return this.#stdin ??= this.#getBunSpawnIo(0, this.#encoding); + } + get stdout() { + return this.#stdout ??= this.#getBunSpawnIo(1, this.#encoding); + } + get stderr() { + return this.#stderr ??= this.#getBunSpawnIo(2, this.#encoding); + } + get stdio() { + return this.#stdioObject ??= this.#createStdioObject(); + } + spawn(options) { + validateObject(options, "options"), validateString(options.file, "options.file"); + var file = this.spawnfile = options.file, spawnargs; + if (options.args == null) + spawnargs = this.spawnargs = []; + else + validateArray(options.args, "options.args"), spawnargs = this.spawnargs = options.args; + const stdio = options.stdio || ["pipe", "pipe", "pipe"], bunStdio = getBunStdioFromOptions(stdio); + var env = options.envPairs || void 0; + this.#encoding = options.encoding || void 0, this.#stdioOptions = bunStdio, this.#handle = Bun.spawn({ + cmd: spawnargs, + stdin: bunStdio[0], + stdout: bunStdio[1], + stderr: bunStdio[2], + cwd: options.cwd || void 0, + env: env || process.env, + onExit: (handle, exitCode, signalCode, err) => { + this.#handle = handle, this.pid = this.#handle.pid, process.nextTick((exitCode2, signalCode2, err2) => this.#handleOnExit(exitCode2, signalCode2, err2), exitCode, signalCode, err); + }, + lazy: !0 + }), this.pid = this.#handle.pid, onSpawnNT(this); + } + send() { + console.log("ChildProcess.prototype.send() - Sorry! Not implemented yet"); + } + disconnect() { + console.log("ChildProcess.prototype.disconnect() - Sorry! Not implemented yet"); + } + kill(sig) { + const signal = sig === 0 ? sig : convertToValidSignal(sig === void 0 ? "SIGTERM" : sig); + if (this.#handle) + this.#handle.kill(signal); + return this.#maybeClose(), !0; + } + #maybeClose() { + if (debug("Attempting to maybe close..."), this.#closesGot++, this.#closesGot === this.#closesNeeded) + this.emit("close", this.exitCode, this.signalCode); + } + ref() { + if (this.#handle) + this.#handle.ref(); + } + unref() { + if (this.#handle) + this.#handle.unref(); + } +} +var nodeToBunLookup = { + ignore: null, + pipe: "pipe", + overlapped: "pipe", + inherit: "inherit" +}; + +class ShimmedStdin extends EventEmitter { + constructor() { + super(); + } + write() { + return !1; + } + destroy() { + } + end() { + } + pipe() { + } +} + +class ShimmedStdioOutStream extends EventEmitter { + pipe() { + } +} +var validateAbortSignal = (signal, name) => { + if (signal !== void 0 && (signal === null || typeof signal !== "object" || !("aborted" in signal))) + throw new ERR_INVALID_ARG_TYPE(name, "AbortSignal", signal); +}; +var validateObject = (value, name, options = null) => { + const allowArray = options?.allowArray ?? !1, allowFunction = options?.allowFunction ?? !1; + if (!(options?.nullable ?? !1) && value === null || !allowArray && ArrayIsArray.call(value) || typeof value !== "object" && (!allowFunction || typeof value !== "function")) + throw new ERR_INVALID_ARG_TYPE(name, "object", value); +}, validateArray = (value, name, minLength = 0) => { + if (!ArrayIsArray(value)) + throw new ERR_INVALID_ARG_TYPE(name, "Array", value); + if (value.length < minLength) { + const reason = `must be longer than ${minLength}`; + throw new ERR_INVALID_ARG_VALUE(name, value, reason); + } +}, Error = globalThis.Error, TypeError = globalThis.TypeError, RangeError = globalThis.RangeError; + +class AbortError extends Error { + code = "ABORT_ERR"; + name = "AbortError"; + constructor(message = "The operation was aborted", options = void 0) { + if (options !== void 0 && typeof options !== "object") + throw new ERR_INVALID_ARG_TYPE("options", "Object", options); + super(message, options); + } +} + +class SystemError extends Error { + path; + syscall; + errno; + code; + constructor(message, path, syscall, errno, code) { + super(message); + this.path = path, this.syscall = syscall, this.errno = errno, this.code = code; + } + get name() { + return "SystemError"; + } +} +var child_process_default = { + ChildProcess, + spawn, + execFile, + exec, + fork, + spawnSync, + execFileSync, + execSync, + [Symbol.for("CommonJS")]: 0 +}; +export { + spawnSync, + spawn, + fork, + execSync, + execFileSync, + execFile, + exec, + child_process_default as default, + ChildProcess +}; |