@paretools/shared 0.7.0 → 0.8.0
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/dist/runner.d.ts +4 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +18 -7
- package/dist/runner.js.map +1 -1
- package/package.json +1 -1
package/dist/runner.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ export interface RunOptions {
|
|
|
7
7
|
* (e.g., `git commit --file -`) instead of passing it as a command arg,
|
|
8
8
|
* which avoids cmd.exe argument-length and newline limitations on Windows. */
|
|
9
9
|
stdin?: string;
|
|
10
|
+
/** Override shell mode. Defaults to `true` on Windows (for .cmd/.bat wrappers)
|
|
11
|
+
* and `false` elsewhere. Set to `false` for native executables (e.g., git)
|
|
12
|
+
* whose args contain characters that cmd.exe would misinterpret (like `<>`). */
|
|
13
|
+
shell?: boolean;
|
|
10
14
|
}
|
|
11
15
|
/** Result of a command execution, containing the exit code and ANSI-stripped stdout/stderr. */
|
|
12
16
|
export interface RunResult {
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAIA,uGAAuG;AACvG,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B;;mFAE+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAIA,uGAAuG;AACvG,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B;;mFAE+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;qFAEiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,+FAA+F;AAC/F,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqChD;AAED;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA8EtF"}
|
package/dist/runner.js
CHANGED
|
@@ -21,9 +21,16 @@ import { sanitizeErrorOutput } from "./sanitize.js";
|
|
|
21
21
|
* they are literal, and outside quotes they rarely appear in tool args.
|
|
22
22
|
*/
|
|
23
23
|
export function escapeCmdArg(arg) {
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
//
|
|
24
|
+
// NOTE: We intentionally do NOT escape % → %%. While % starts environment
|
|
25
|
+
// variable expansion in cmd.exe (%VAR%), the %% escape only works in batch
|
|
26
|
+
// files. When Node.js uses `shell: true`, it runs via `cmd.exe /d /s /c`
|
|
27
|
+
// which is NOT batch context — so %% passes through literally as two %
|
|
28
|
+
// characters. This breaks tools like git that use % in format strings
|
|
29
|
+
// (e.g., --format=%H), because git interprets %% as its own escape for
|
|
30
|
+
// literal %. User-provided text that might contain %VAR% patterns should
|
|
31
|
+
// be passed via stdin (e.g., git commit --file -) rather than as args.
|
|
32
|
+
let escaped = arg;
|
|
33
|
+
// Step 1: If the arg contains spaces, tabs, or double quotes, wrap it in
|
|
27
34
|
// double quotes so cmd.exe keeps it as a single token.
|
|
28
35
|
if (/[ \t"]/.test(arg)) {
|
|
29
36
|
// Replace newlines with spaces — cmd.exe treats \n as a command-line
|
|
@@ -35,7 +42,7 @@ export function escapeCmdArg(arg) {
|
|
|
35
42
|
escaped = escaped.replace(/"/g, '""');
|
|
36
43
|
return `"${escaped}"`;
|
|
37
44
|
}
|
|
38
|
-
// Step
|
|
45
|
+
// Step 2: For unquoted args, caret-escape cmd.exe metacharacters.
|
|
39
46
|
// The caret itself must be escaped first so that carets we insert
|
|
40
47
|
// are not themselves re-escaped.
|
|
41
48
|
escaped = escaped.replace(/\^/g, "^^");
|
|
@@ -43,7 +50,7 @@ export function escapeCmdArg(arg) {
|
|
|
43
50
|
escaped = escaped.replace(/\|/g, "^|");
|
|
44
51
|
escaped = escaped.replace(/</g, "^<");
|
|
45
52
|
escaped = escaped.replace(/>/g, "^>");
|
|
46
|
-
// Step
|
|
53
|
+
// Step 3: Escape ! to prevent delayed expansion (!VAR!)
|
|
47
54
|
escaped = escaped.replace(/!/g, "^!");
|
|
48
55
|
return escaped;
|
|
49
56
|
}
|
|
@@ -58,16 +65,20 @@ export function escapeCmdArg(arg) {
|
|
|
58
65
|
*/
|
|
59
66
|
export function run(cmd, args, opts) {
|
|
60
67
|
return new Promise((resolve, reject) => {
|
|
68
|
+
// Determine shell mode: default to true on Windows (for .cmd/.bat wrappers),
|
|
69
|
+
// but allow callers to override (e.g., git uses shell:false to avoid cmd.exe
|
|
70
|
+
// mangling format strings that contain < > characters).
|
|
71
|
+
const useShell = opts?.shell ?? process.platform === "win32";
|
|
61
72
|
// On Windows with shell mode, escape cmd.exe metacharacters to prevent
|
|
62
73
|
// environment variable expansion and command injection via special chars.
|
|
63
74
|
// See escapeCmdArg() for details on what is escaped and why.
|
|
64
|
-
const safeArgs = process.platform === "win32" ? args.map(escapeCmdArg) : args;
|
|
75
|
+
const safeArgs = useShell && process.platform === "win32" ? args.map(escapeCmdArg) : args;
|
|
65
76
|
const child = execFile(cmd, safeArgs, {
|
|
66
77
|
cwd: opts?.cwd,
|
|
67
78
|
timeout: opts?.timeout ?? 60_000,
|
|
68
79
|
env: opts?.env ? { ...process.env, ...opts.env } : undefined,
|
|
69
80
|
maxBuffer: 10 * 1024 * 1024, // 10 MB
|
|
70
|
-
shell:
|
|
81
|
+
shell: useShell,
|
|
71
82
|
}, (error, stdout, stderr) => {
|
|
72
83
|
if (error) {
|
|
73
84
|
const errno = error;
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAwBpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,uEAAuE;IACvE,yEAAyE;IACzE,uEAAuE;IACvE,IAAI,OAAO,GAAG,GAAG,CAAC;IAElB,yEAAyE;IACzE,uDAAuD;IACvD,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,qEAAqE;QACrE,sEAAsE;QACtE,oEAAoE;QACpE,mEAAmE;QACnE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzC,iDAAiD;QACjD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,OAAO,GAAG,CAAC;IACxB,CAAC;IAED,kEAAkE;IAClE,kEAAkE;IAClE,iCAAiC;IACjC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEtC,wDAAwD;IACxD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,IAAiB;IAChE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,6EAA6E;QAC7E,6EAA6E;QAC7E,wDAAwD;QACxD,MAAM,QAAQ,GAAG,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QAE7D,uEAAuE;QACvE,0EAA0E;QAC1E,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1F,MAAM,KAAK,GAAG,QAAQ,CACpB,GAAG,EACH,QAAQ,EACR;YACE,GAAG,EAAE,IAAI,EAAE,GAAG;YACd,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,MAAM;YAChC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;YAC5D,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,QAAQ;YACrC,KAAK,EAAE,QAAQ;SAChB,EACD,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACxB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,KAA8B,CAAC;gBAE7C,wDAAwD;gBACxD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5B,MAAM,CACJ,IAAI,KAAK,CACP,uBAAuB,GAAG,uDAAuD,CAClF,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACtD,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC5E,OAAO;gBACT,CAAC;gBAED,mEAAmE;gBACnE,iEAAiE;gBACjE,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjC,MAAM,CACJ,IAAI,KAAK,CACP,YAAY,GAAG,qBAAqB,IAAI,EAAE,OAAO,IAAI,MAAM,sBAAsB,KAAK,CAAC,MAAM,IAAI,CAClG,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,4DAA4D;gBAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAC9C,MAAM,CACJ,IAAI,KAAK,CACP,uBAAuB,GAAG,uDAAuD,CAClF,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;YACH,CAAC;YAED,OAAO,CAAC;gBACN,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;gBACzB,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aAC/C,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QAEF,kEAAkE;QAClE,iEAAiE;QACjE,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;YACxB,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|