diff options
Diffstat (limited to 'runtime/js/40_process.js')
-rw-r--r-- | runtime/js/40_process.js | 232 |
1 files changed, 113 insertions, 119 deletions
diff --git a/runtime/js/40_process.js b/runtime/js/40_process.js index 5ad24c094..87e898b56 100644 --- a/runtime/js/40_process.js +++ b/runtime/js/40_process.js @@ -1,139 +1,133 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -"use strict"; - -((window) => { - const core = window.Deno.core; - const ops = core.ops; - const { FsFile } = window.__bootstrap.files; - const { readAll } = window.__bootstrap.io; - const { pathFromURL } = window.__bootstrap.util; - const { assert } = window.__bootstrap.infra; - const { - ArrayPrototypeMap, - ArrayPrototypeSlice, - TypeError, - ObjectEntries, - SafeArrayIterator, - String, - } = window.__bootstrap.primordials; - - function opKill(pid, signo, apiName) { - ops.op_kill(pid, signo, apiName); - } - - function kill(pid, signo = "SIGTERM") { - opKill(pid, signo, "Deno.kill()"); - } - - function opRunStatus(rid) { - return core.opAsync("op_run_status", rid); - } - function opRun(request) { - assert(request.cmd.length > 0); - return ops.op_run(request); +const core = globalThis.Deno.core; +const ops = core.ops; +import { FsFile } from "internal:runtime/js/40_files.js"; +import { readAll } from "internal:runtime/js/12_io.js"; +import { pathFromURL } from "internal:runtime/js/06_util.js"; +import { assert } from "internal:ext/web/00_infra.js"; +const primordials = globalThis.__bootstrap.primordials; +const { + ArrayPrototypeMap, + ArrayPrototypeSlice, + TypeError, + ObjectEntries, + SafeArrayIterator, + String, +} = primordials; + +function opKill(pid, signo, apiName) { + ops.op_kill(pid, signo, apiName); +} + +function kill(pid, signo = "SIGTERM") { + opKill(pid, signo, "Deno.kill()"); +} + +function opRunStatus(rid) { + return core.opAsync("op_run_status", rid); +} + +function opRun(request) { + assert(request.cmd.length > 0); + return ops.op_run(request); +} + +async function runStatus(rid) { + const res = await opRunStatus(rid); + + if (res.gotSignal) { + const signal = res.exitSignal; + return { success: false, code: 128 + signal, signal }; + } else if (res.exitCode != 0) { + return { success: false, code: res.exitCode }; + } else { + return { success: true, code: 0 }; } +} - async function runStatus(rid) { - const res = await opRunStatus(rid); +class Process { + constructor(res) { + this.rid = res.rid; + this.pid = res.pid; - if (res.gotSignal) { - const signal = res.exitSignal; - return { success: false, code: 128 + signal, signal }; - } else if (res.exitCode != 0) { - return { success: false, code: res.exitCode }; - } else { - return { success: true, code: 0 }; + if (res.stdinRid && res.stdinRid > 0) { + this.stdin = new FsFile(res.stdinRid); } - } - - class Process { - constructor(res) { - this.rid = res.rid; - this.pid = res.pid; - - if (res.stdinRid && res.stdinRid > 0) { - this.stdin = new FsFile(res.stdinRid); - } - - if (res.stdoutRid && res.stdoutRid > 0) { - this.stdout = new FsFile(res.stdoutRid); - } - if (res.stderrRid && res.stderrRid > 0) { - this.stderr = new FsFile(res.stderrRid); - } + if (res.stdoutRid && res.stdoutRid > 0) { + this.stdout = new FsFile(res.stdoutRid); } - status() { - return runStatus(this.rid); + if (res.stderrRid && res.stderrRid > 0) { + this.stderr = new FsFile(res.stderrRid); } + } - async output() { - if (!this.stdout) { - throw new TypeError("stdout was not piped"); - } - try { - return await readAll(this.stdout); - } finally { - this.stdout.close(); - } - } + status() { + return runStatus(this.rid); + } - async stderrOutput() { - if (!this.stderr) { - throw new TypeError("stderr was not piped"); - } - try { - return await readAll(this.stderr); - } finally { - this.stderr.close(); - } + async output() { + if (!this.stdout) { + throw new TypeError("stdout was not piped"); } - - close() { - core.close(this.rid); + try { + return await readAll(this.stdout); + } finally { + this.stdout.close(); } + } - kill(signo = "SIGTERM") { - opKill(this.pid, signo, "Deno.Process.kill()"); + async stderrOutput() { + if (!this.stderr) { + throw new TypeError("stderr was not piped"); + } + try { + return await readAll(this.stderr); + } finally { + this.stderr.close(); } } - function run({ - cmd, - cwd = undefined, - clearEnv = false, - env = {}, - gid = undefined, - uid = undefined, - stdout = "inherit", - stderr = "inherit", - stdin = "inherit", - }) { - if (cmd[0] != null) { - cmd = [ - pathFromURL(cmd[0]), - ...new SafeArrayIterator(ArrayPrototypeSlice(cmd, 1)), - ]; - } - const res = opRun({ - cmd: ArrayPrototypeMap(cmd, String), - cwd, - clearEnv, - env: ObjectEntries(env), - gid, - uid, - stdin, - stdout, - stderr, - }); - return new Process(res); + close() { + core.close(this.rid); } - window.__bootstrap.process = { - run, - Process, - kill, - }; -})(this); + kill(signo = "SIGTERM") { + opKill(this.pid, signo, "Deno.Process.kill()"); + } +} + +function run({ + cmd, + cwd = undefined, + clearEnv = false, + env = {}, + gid = undefined, + uid = undefined, + stdout = "inherit", + stderr = "inherit", + stdin = "inherit", +}) { + if (cmd[0] != null) { + cmd = [ + pathFromURL(cmd[0]), + ...new SafeArrayIterator(ArrayPrototypeSlice(cmd, 1)), + ]; + } + const res = opRun({ + cmd: ArrayPrototypeMap(cmd, String), + cwd, + clearEnv, + env: ObjectEntries(env), + gid, + uid, + stdin, + stdout, + stderr, + }); + return new Process(res); +} + +export { kill, Process, run }; |