sudo-prompt-x 10.0.0-beta.1
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/LICENSE +22 -0
- package/README.md +146 -0
- package/dist/escape-B_ZgkH4x.mjs +4 -0
- package/dist/escape-CgAzXRKO.cjs +9 -0
- package/dist/exec-BjS_tGOr.cjs +101 -0
- package/dist/exec-DzmncB7R.mjs +84 -0
- package/dist/index-kvxLnCHI.d.cts +40 -0
- package/dist/index-vd1MVV7_.d.mts +40 -0
- package/dist/index.cjs +2 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.mjs +2 -0
- package/dist/linux/index.cjs +80 -0
- package/dist/linux/index.d.cts +6 -0
- package/dist/linux/index.d.mts +6 -0
- package/dist/linux/index.mjs +80 -0
- package/dist/mac/index.cjs +136 -0
- package/dist/mac/index.d.cts +6 -0
- package/dist/mac/index.d.mts +6 -0
- package/dist/mac/index.mjs +136 -0
- package/dist/node-1fao-dnU.mjs +5 -0
- package/dist/node-D37hqdIB.cjs +16 -0
- package/dist/windows/index.cjs +4 -0
- package/dist/windows/index.d.cts +13 -0
- package/dist/windows/index.d.mts +13 -0
- package/dist/windows/index.mjs +4 -0
- package/dist/windows-DhHQkh7V.cjs +158 -0
- package/dist/windows-DlvX_MV7.mjs +152 -0
- package/dist/wsl/index.cjs +42 -0
- package/dist/wsl/index.d.cts +9 -0
- package/dist/wsl/index.d.mts +9 -0
- package/dist/wsl/index.mjs +42 -0
- package/package.json +80 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const e = require("../exec-BjS_tGOr.cjs");
|
|
2
|
+
const t = require("../escape-CgAzXRKO.cjs");
|
|
3
|
+
const n = require("../node-D37hqdIB.cjs");
|
|
4
|
+
let r = require("node:fs/promises");
|
|
5
|
+
let i = require("node:path/posix");
|
|
6
|
+
function transformIcon(e) {
|
|
7
|
+
if (!e) return e;
|
|
8
|
+
if (typeof e != "string") throw Error("Icon path must be a string.");
|
|
9
|
+
e = e.trim();
|
|
10
|
+
if (e.length === 0) throw Error("Icon path must not be empty.");
|
|
11
|
+
return e;
|
|
12
|
+
}
|
|
13
|
+
function transformOptions(t, n) {
|
|
14
|
+
n = e.r(t, n);
|
|
15
|
+
n.icns = transformIcon(n.icns);
|
|
16
|
+
if (!process.env.USER) throw Error("\"USER\" environment variable is not defined.");
|
|
17
|
+
return {
|
|
18
|
+
...n,
|
|
19
|
+
command: t
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function unpackApplet({ appletPath: e, options: { tmpdir: a, signal: o } }) {
|
|
23
|
+
let s = (0, i.join)(a, "applet.zip");
|
|
24
|
+
await (0, r.writeFile)(s, "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", {
|
|
25
|
+
encoding: "base64",
|
|
26
|
+
signal: o
|
|
27
|
+
});
|
|
28
|
+
await n.n("/usr/bin/unzip", [
|
|
29
|
+
"-o",
|
|
30
|
+
`"${t.t(s)}"`,
|
|
31
|
+
"-d",
|
|
32
|
+
`"${t.t(e)}"`
|
|
33
|
+
], {
|
|
34
|
+
encoding: "utf-8",
|
|
35
|
+
signal: o
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async function setAppletIcon({ appletContentsPath: e, options: { icns: t, signal: n } }) {
|
|
39
|
+
if (!t) return;
|
|
40
|
+
let a = await (0, r.readFile)(t, { signal: n });
|
|
41
|
+
await (0, r.writeFile)((0, i.join)(e, "Resources", "applet.icns"), a);
|
|
42
|
+
}
|
|
43
|
+
async function setAppletProperties({ appletContentsPath: e, options: { name: t, signal: n } }) {
|
|
44
|
+
let r = (0, i.join)(e, "Info.plist");
|
|
45
|
+
await Promise.all(Object.entries({
|
|
46
|
+
CFBundleName: t,
|
|
47
|
+
CFBundleDisplayName: t
|
|
48
|
+
}).map(([e, t]) => writeDefault(r, e, t, n)));
|
|
49
|
+
}
|
|
50
|
+
async function writeDefault(e, r, i, a) {
|
|
51
|
+
if (i === void 0) return;
|
|
52
|
+
if (i.includes("'")) throw Error("Value must not contain single quotes.");
|
|
53
|
+
await n.n("/usr/bin/defaults", [
|
|
54
|
+
"write",
|
|
55
|
+
`"${t.t(e)}"`,
|
|
56
|
+
`"${t.t(r)}"`,
|
|
57
|
+
`'${i}'`
|
|
58
|
+
], {
|
|
59
|
+
encoding: "utf-8",
|
|
60
|
+
signal: a
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const a = "utf-8";
|
|
64
|
+
async function exec(e, t) {
|
|
65
|
+
let n = transformOptions(e, t);
|
|
66
|
+
try {
|
|
67
|
+
let e = await setup(n);
|
|
68
|
+
await elevate(e);
|
|
69
|
+
return await read(e);
|
|
70
|
+
} finally {
|
|
71
|
+
await (0, r.rm)(n.tmpdir, {
|
|
72
|
+
force: !0,
|
|
73
|
+
recursive: !0
|
|
74
|
+
}).catch(() => {});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function setup(e) {
|
|
78
|
+
let { name: n, tmpdir: o, cwd: s, env: c = {}, command: l } = e;
|
|
79
|
+
await (0, r.mkdir)(o, { recursive: !0 });
|
|
80
|
+
let u = (0, i.join)(o, `${n}.app`);
|
|
81
|
+
let d = (0, i.join)(u, "Contents");
|
|
82
|
+
let f = (0, i.join)(d, "MacOS");
|
|
83
|
+
let p = {
|
|
84
|
+
options: e,
|
|
85
|
+
appletPath: u,
|
|
86
|
+
appletContentsPath: d,
|
|
87
|
+
appletContentsMacPath: f
|
|
88
|
+
};
|
|
89
|
+
await unpackApplet(p);
|
|
90
|
+
let m = (0, i.join)(f, "sudo-prompt-command");
|
|
91
|
+
let h = [
|
|
92
|
+
`cd "${t.t(s.toString())}"`,
|
|
93
|
+
...Object.entries(c).map(([e, n]) => {
|
|
94
|
+
if (n === void 0) return null;
|
|
95
|
+
return `export ${e}="${t.t(n.toString())}"`;
|
|
96
|
+
}).filter(Boolean),
|
|
97
|
+
l
|
|
98
|
+
].join("\n");
|
|
99
|
+
await Promise.all([
|
|
100
|
+
setAppletIcon(p),
|
|
101
|
+
setAppletProperties(p),
|
|
102
|
+
(0, r.writeFile)(m, h, a)
|
|
103
|
+
]);
|
|
104
|
+
return p;
|
|
105
|
+
}
|
|
106
|
+
async function elevate({ appletContentsMacPath: e, options: { signal: t } }) {
|
|
107
|
+
await n.t("./applet", {
|
|
108
|
+
cwd: e,
|
|
109
|
+
encoding: a,
|
|
110
|
+
signal: t
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async function readCode(e, t) {
|
|
114
|
+
let n = await (0, r.readFile)(e, {
|
|
115
|
+
encoding: a,
|
|
116
|
+
signal: t
|
|
117
|
+
});
|
|
118
|
+
return Number.parseInt(n.trim(), 10);
|
|
119
|
+
}
|
|
120
|
+
async function read({ appletContentsMacPath: t, options: { command: n, signal: o } }) {
|
|
121
|
+
let s = await readCode((0, i.join)(t, "status"), o).catch(() => null);
|
|
122
|
+
if (s === null) throw Error("User did not grant permission.");
|
|
123
|
+
let [c, l] = await Promise.all([(0, r.readFile)((0, i.join)(t, "stdout"), {
|
|
124
|
+
encoding: a,
|
|
125
|
+
signal: o
|
|
126
|
+
}), (0, r.readFile)((0, i.join)(t, "stderr"), {
|
|
127
|
+
encoding: a,
|
|
128
|
+
signal: o
|
|
129
|
+
})]);
|
|
130
|
+
return e.n(n, {
|
|
131
|
+
code: s,
|
|
132
|
+
stdout: c,
|
|
133
|
+
stderr: l
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
exports.exec = exec;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { a as ExecOptionsMac, n as ExecResult } from "../index-kvxLnCHI.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/platforms/mac/index.d.ts
|
|
4
|
+
declare function exec(command: string, options?: ExecOptionsMac): Promise<ExecResult>;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { type ExecOptionsMac as ExecOptions, exec };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { a as ExecOptionsMac, n as ExecResult } from "../index-vd1MVV7_.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/platforms/mac/index.d.ts
|
|
4
|
+
declare function exec(command: string, options?: ExecOptionsMac): Promise<ExecResult>;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { type ExecOptionsMac as ExecOptions, exec };
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { n as e, r as t } from "../exec-DzmncB7R.mjs";
|
|
2
|
+
import { t as n } from "../escape-B_ZgkH4x.mjs";
|
|
3
|
+
import { n as r, t as i } from "../node-1fao-dnU.mjs";
|
|
4
|
+
import { mkdir as a, readFile as o, rm as s, writeFile as c } from "node:fs/promises";
|
|
5
|
+
import { join as l } from "node:path/posix";
|
|
6
|
+
function transformIcon(e) {
|
|
7
|
+
if (!e) return e;
|
|
8
|
+
if (typeof e != "string") throw Error("Icon path must be a string.");
|
|
9
|
+
e = e.trim();
|
|
10
|
+
if (e.length === 0) throw Error("Icon path must not be empty.");
|
|
11
|
+
return e;
|
|
12
|
+
}
|
|
13
|
+
function transformOptions(e, n) {
|
|
14
|
+
n = t(e, n);
|
|
15
|
+
n.icns = transformIcon(n.icns);
|
|
16
|
+
if (!process.env.USER) throw Error("\"USER\" environment variable is not defined.");
|
|
17
|
+
return {
|
|
18
|
+
...n,
|
|
19
|
+
command: e
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function unpackApplet({ appletPath: e, options: { tmpdir: t, signal: i } }) {
|
|
23
|
+
let a = l(t, "applet.zip");
|
|
24
|
+
await c(a, "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", {
|
|
25
|
+
encoding: "base64",
|
|
26
|
+
signal: i
|
|
27
|
+
});
|
|
28
|
+
await r("/usr/bin/unzip", [
|
|
29
|
+
"-o",
|
|
30
|
+
`"${n(a)}"`,
|
|
31
|
+
"-d",
|
|
32
|
+
`"${n(e)}"`
|
|
33
|
+
], {
|
|
34
|
+
encoding: "utf-8",
|
|
35
|
+
signal: i
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async function setAppletIcon({ appletContentsPath: e, options: { icns: t, signal: n } }) {
|
|
39
|
+
if (!t) return;
|
|
40
|
+
let r = await o(t, { signal: n });
|
|
41
|
+
await c(l(e, "Resources", "applet.icns"), r);
|
|
42
|
+
}
|
|
43
|
+
async function setAppletProperties({ appletContentsPath: e, options: { name: t, signal: n } }) {
|
|
44
|
+
let r = l(e, "Info.plist");
|
|
45
|
+
await Promise.all(Object.entries({
|
|
46
|
+
CFBundleName: t,
|
|
47
|
+
CFBundleDisplayName: t
|
|
48
|
+
}).map(([e, t]) => writeDefault(r, e, t, n)));
|
|
49
|
+
}
|
|
50
|
+
async function writeDefault(e, t, i, a) {
|
|
51
|
+
if (i === void 0) return;
|
|
52
|
+
if (i.includes("'")) throw Error("Value must not contain single quotes.");
|
|
53
|
+
await r("/usr/bin/defaults", [
|
|
54
|
+
"write",
|
|
55
|
+
`"${n(e)}"`,
|
|
56
|
+
`"${n(t)}"`,
|
|
57
|
+
`'${i}'`
|
|
58
|
+
], {
|
|
59
|
+
encoding: "utf-8",
|
|
60
|
+
signal: a
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const u = "utf-8";
|
|
64
|
+
async function exec(e, t) {
|
|
65
|
+
let n = transformOptions(e, t);
|
|
66
|
+
try {
|
|
67
|
+
let e = await setup(n);
|
|
68
|
+
await elevate(e);
|
|
69
|
+
return await read(e);
|
|
70
|
+
} finally {
|
|
71
|
+
await s(n.tmpdir, {
|
|
72
|
+
force: !0,
|
|
73
|
+
recursive: !0
|
|
74
|
+
}).catch(() => {});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function setup(e) {
|
|
78
|
+
let { name: t, tmpdir: r, cwd: i, env: o = {}, command: s } = e;
|
|
79
|
+
await a(r, { recursive: !0 });
|
|
80
|
+
let d = l(r, `${t}.app`);
|
|
81
|
+
let f = l(d, "Contents");
|
|
82
|
+
let p = l(f, "MacOS");
|
|
83
|
+
let m = {
|
|
84
|
+
options: e,
|
|
85
|
+
appletPath: d,
|
|
86
|
+
appletContentsPath: f,
|
|
87
|
+
appletContentsMacPath: p
|
|
88
|
+
};
|
|
89
|
+
await unpackApplet(m);
|
|
90
|
+
let h = l(p, "sudo-prompt-command");
|
|
91
|
+
let g = [
|
|
92
|
+
`cd "${n(i.toString())}"`,
|
|
93
|
+
...Object.entries(o).map(([e, t]) => {
|
|
94
|
+
if (t === void 0) return null;
|
|
95
|
+
return `export ${e}="${n(t.toString())}"`;
|
|
96
|
+
}).filter(Boolean),
|
|
97
|
+
s
|
|
98
|
+
].join("\n");
|
|
99
|
+
await Promise.all([
|
|
100
|
+
setAppletIcon(m),
|
|
101
|
+
setAppletProperties(m),
|
|
102
|
+
c(h, g, u)
|
|
103
|
+
]);
|
|
104
|
+
return m;
|
|
105
|
+
}
|
|
106
|
+
async function elevate({ appletContentsMacPath: e, options: { signal: t } }) {
|
|
107
|
+
await i("./applet", {
|
|
108
|
+
cwd: e,
|
|
109
|
+
encoding: u,
|
|
110
|
+
signal: t
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async function readCode(e, t) {
|
|
114
|
+
let n = await o(e, {
|
|
115
|
+
encoding: u,
|
|
116
|
+
signal: t
|
|
117
|
+
});
|
|
118
|
+
return Number.parseInt(n.trim(), 10);
|
|
119
|
+
}
|
|
120
|
+
async function read({ appletContentsMacPath: t, options: { command: n, signal: r } }) {
|
|
121
|
+
let i = await readCode(l(t, "status"), r).catch(() => null);
|
|
122
|
+
if (i === null) throw Error("User did not grant permission.");
|
|
123
|
+
let [a, s] = await Promise.all([o(l(t, "stdout"), {
|
|
124
|
+
encoding: u,
|
|
125
|
+
signal: r
|
|
126
|
+
}), o(l(t, "stderr"), {
|
|
127
|
+
encoding: u,
|
|
128
|
+
signal: r
|
|
129
|
+
})]);
|
|
130
|
+
return e(n, {
|
|
131
|
+
code: i,
|
|
132
|
+
stdout: a,
|
|
133
|
+
stderr: s
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
export { exec };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
let e = require("node:child_process");
|
|
2
|
+
let t = require("node:util");
|
|
3
|
+
const n = (0, t.promisify)(e.exec);
|
|
4
|
+
const r = (0, t.promisify)(e.execFile);
|
|
5
|
+
Object.defineProperty(exports, "n", {
|
|
6
|
+
enumerable: !0,
|
|
7
|
+
get: function() {
|
|
8
|
+
return r;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
Object.defineProperty(exports, "t", {
|
|
12
|
+
enumerable: !0,
|
|
13
|
+
get: function() {
|
|
14
|
+
return n;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { i as ExecOptionsBase, n as ExecResult } from "../index-kvxLnCHI.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/platforms/windows/options.d.ts
|
|
4
|
+
interface ExecOptionsWindows extends ExecOptionsBase {
|
|
5
|
+
hooks: {
|
|
6
|
+
resolve: (pathname: string) => Promise<string>;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/platforms/windows/index.d.ts
|
|
11
|
+
declare function exec(command: string, options?: Partial<ExecOptionsWindows>): Promise<ExecResult>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { type ExecOptionsWindows as ExecOptions, exec };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { i as ExecOptionsBase, n as ExecResult } from "../index-vd1MVV7_.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/platforms/windows/options.d.ts
|
|
4
|
+
interface ExecOptionsWindows extends ExecOptionsBase {
|
|
5
|
+
hooks: {
|
|
6
|
+
resolve: (pathname: string) => Promise<string>;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/platforms/windows/index.d.ts
|
|
11
|
+
declare function exec(command: string, options?: Partial<ExecOptionsWindows>): Promise<ExecResult>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { type ExecOptionsWindows as ExecOptions, exec };
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
const e = require("./exec-BjS_tGOr.cjs");
|
|
2
|
+
const t = require("./node-D37hqdIB.cjs");
|
|
3
|
+
let n = require("node:fs/promises");
|
|
4
|
+
let r = require("node:path/win32");
|
|
5
|
+
let i = require("node:timers/promises");
|
|
6
|
+
function transformOptions(t, n) {
|
|
7
|
+
n = {
|
|
8
|
+
hooks: { resolve: (e) => Promise.resolve(e) },
|
|
9
|
+
...e.r(t, n)
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
...n,
|
|
13
|
+
command: t
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const a = "utf-8";
|
|
17
|
+
const o = "\r\n";
|
|
18
|
+
async function exec(e, t) {
|
|
19
|
+
let r = transformOptions(e, t);
|
|
20
|
+
try {
|
|
21
|
+
let e = await setup(r);
|
|
22
|
+
await elevate(e);
|
|
23
|
+
return await read(e);
|
|
24
|
+
} finally {
|
|
25
|
+
await (0, n.rm)(r.tmpdir, {
|
|
26
|
+
force: !0,
|
|
27
|
+
recursive: !0
|
|
28
|
+
}).catch(() => {});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function setup(e) {
|
|
32
|
+
let { command: t, tmpdir: i, env: o, cwd: s, signal: c, hooks: l } = e;
|
|
33
|
+
await (0, n.mkdir)(await l.resolve(i), { recursive: !0 });
|
|
34
|
+
let u = (0, r.join)(i, "stdout");
|
|
35
|
+
let d = (0, r.join)(i, "stderr");
|
|
36
|
+
let f = (0, r.join)(i, "status");
|
|
37
|
+
let p = (0, r.join)(i, "command.bat");
|
|
38
|
+
let m = [
|
|
39
|
+
"@echo off",
|
|
40
|
+
`call "${p}" > "${u}" 2> "${d}"`,
|
|
41
|
+
`(echo %ERRORLEVEL%) > "${f}"`
|
|
42
|
+
].join("\r\n");
|
|
43
|
+
let h = (0, r.join)(i, "execute.bat");
|
|
44
|
+
let g = [
|
|
45
|
+
"@echo off",
|
|
46
|
+
"chcp 65001>nul",
|
|
47
|
+
`pushd ${s}`,
|
|
48
|
+
o ? Object.entries(o).map(([e, t]) => {
|
|
49
|
+
if (t === void 0) return null;
|
|
50
|
+
return `set ${e}=${t.replace(/([<>\\|&^])/g, "^$1")}`;
|
|
51
|
+
}).filter(Boolean).join("\r\n") : "",
|
|
52
|
+
t,
|
|
53
|
+
"popd"
|
|
54
|
+
].join("\r\n");
|
|
55
|
+
await Promise.all([
|
|
56
|
+
(0, n.writeFile)(await l.resolve(h), m, {
|
|
57
|
+
encoding: a,
|
|
58
|
+
signal: c
|
|
59
|
+
}),
|
|
60
|
+
(0, n.writeFile)(await l.resolve(p), g, {
|
|
61
|
+
encoding: a,
|
|
62
|
+
signal: c
|
|
63
|
+
}),
|
|
64
|
+
(0, n.writeFile)(await l.resolve(f), "", {
|
|
65
|
+
encoding: a,
|
|
66
|
+
signal: c
|
|
67
|
+
})
|
|
68
|
+
]);
|
|
69
|
+
return {
|
|
70
|
+
options: e,
|
|
71
|
+
executeScriptPath: h,
|
|
72
|
+
commandScriptPath: p,
|
|
73
|
+
stdoutPath: u,
|
|
74
|
+
stderrPath: d,
|
|
75
|
+
statusPath: f
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async function elevate({ executeScriptPath: e, options: { signal: n } }) {
|
|
79
|
+
let r = [
|
|
80
|
+
"powershell.exe",
|
|
81
|
+
"Start-Process",
|
|
82
|
+
"-FilePath",
|
|
83
|
+
`"'${e.replace(/'/g, "`'")}'"`,
|
|
84
|
+
"-WindowStyle hidden",
|
|
85
|
+
"-Verb runAs"
|
|
86
|
+
].join(" ");
|
|
87
|
+
try {
|
|
88
|
+
await t.t(r, {
|
|
89
|
+
encoding: a,
|
|
90
|
+
signal: n
|
|
91
|
+
});
|
|
92
|
+
} catch (e) {
|
|
93
|
+
throw Error("User did not grant permission.", { cause: e });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function readCode({ statusPath: e, options: { signal: t, hooks: r } }) {
|
|
97
|
+
let i = await r.resolve(e);
|
|
98
|
+
let { size: o } = await (0, n.stat)(i);
|
|
99
|
+
if (o < 2) return null;
|
|
100
|
+
let s = await (0, n.readFile)(i, {
|
|
101
|
+
encoding: a,
|
|
102
|
+
signal: t
|
|
103
|
+
});
|
|
104
|
+
return Number.parseInt(s.trim(), 10);
|
|
105
|
+
}
|
|
106
|
+
async function readCodePolling(e) {
|
|
107
|
+
let { options: { signal: t } } = e;
|
|
108
|
+
for await (let n of (0, i.setInterval)(500, null, { signal: t })) {
|
|
109
|
+
let t = await readCode(e);
|
|
110
|
+
if (t === null) continue;
|
|
111
|
+
return t;
|
|
112
|
+
}
|
|
113
|
+
throw null;
|
|
114
|
+
}
|
|
115
|
+
async function readCodeWatcher(e) {
|
|
116
|
+
let { statusPath: t, options: { signal: r, hooks: i } } = e;
|
|
117
|
+
let a = new AbortController();
|
|
118
|
+
let o = (0, n.watch)(await i.resolve(t), { signal: r ? AbortSignal.any([r, a.signal]) : a.signal });
|
|
119
|
+
for await (let t of o) {
|
|
120
|
+
let t = await readCode(e);
|
|
121
|
+
if (t === null) continue;
|
|
122
|
+
a.abort();
|
|
123
|
+
return t;
|
|
124
|
+
}
|
|
125
|
+
throw null;
|
|
126
|
+
}
|
|
127
|
+
async function read(t) {
|
|
128
|
+
let { stdoutPath: r, stderrPath: i, options: { command: o, signal: s, hooks: c } } = t;
|
|
129
|
+
let l = new AbortController();
|
|
130
|
+
let u = s ? AbortSignal.any([s, l.signal]) : l.signal;
|
|
131
|
+
let d = {
|
|
132
|
+
...t,
|
|
133
|
+
options: {
|
|
134
|
+
...t.options,
|
|
135
|
+
signal: u
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
let f = await readCode(d) || await Promise.race([readCodeWatcher(d), readCodePolling(d)]);
|
|
139
|
+
l.abort();
|
|
140
|
+
let [p, m] = await Promise.all([(0, n.readFile)(await c.resolve(r), {
|
|
141
|
+
encoding: a,
|
|
142
|
+
signal: s
|
|
143
|
+
}), (0, n.readFile)(await c.resolve(i), {
|
|
144
|
+
encoding: a,
|
|
145
|
+
signal: s
|
|
146
|
+
})]);
|
|
147
|
+
return e.n(o, {
|
|
148
|
+
code: f,
|
|
149
|
+
stdout: p,
|
|
150
|
+
stderr: m
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
Object.defineProperty(exports, "t", {
|
|
154
|
+
enumerable: !0,
|
|
155
|
+
get: function() {
|
|
156
|
+
return exec;
|
|
157
|
+
}
|
|
158
|
+
});
|