@wirecat/cli-base 0.43.3 → 0.43.5
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.
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { rmSync } from "node:fs";
|
|
1
2
|
export interface Sandbox {
|
|
2
3
|
dir: string;
|
|
3
4
|
/** Puts every variable back as it was and removes the directory. */
|
|
@@ -12,6 +13,7 @@ export interface Sandbox {
|
|
|
12
13
|
* process, past the network guard, and print its notice into output the test parses.
|
|
13
14
|
*/
|
|
14
15
|
export declare const enterSandbox: (env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform) => Sandbox;
|
|
16
|
+
export declare const removed: (path: string, maxRetries: number, rm?: typeof rmSync) => boolean;
|
|
15
17
|
export declare const REAL_KEYRING_REACHED = "a test reached the real OS keyring \u2014 pass memoryKeyring() instead";
|
|
16
18
|
/**
|
|
17
19
|
* `systemKeyring` loads `@napi-rs/keyring` through `createRequire`, which `vi.mock` does not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/testing/sandbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/testing/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,MAAM,EAAE,MAAM,SAAS,CAAA;AAKxD,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,oEAAoE;IACpE,OAAO,IAAI,IAAI,CAAA;CAChB;AAuCD;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,SAClB,MAAM,CAAC,UAAU,aACZ,MAAM,CAAC,QAAQ,KACxB,OAsCF,CAAA;AAED,eAAO,MAAM,OAAO,SAAU,MAAM,cAAc,MAAM,OAAM,OAAO,MAAM,KAAY,OAYtF,CAAA;AAED,eAAO,MAAM,oBAAoB,2EAAsE,CAAA;AAQvG;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAO,IAgBzC,CAAA"}
|
package/dist/testing/sandbox.js
CHANGED
|
@@ -9,7 +9,9 @@ const LEFT = Symbol.for("@wirecat/cli-base/testing/sandboxes");
|
|
|
9
9
|
/**
|
|
10
10
|
* vitest skips a file's afterAll when the file throws while loading or an earlier afterAll throws,
|
|
11
11
|
* and then ends the worker with SIGTERM, which fires no `exit`. The signal is raised again once the
|
|
12
|
-
* folders are gone, so the worker still ends the way it would have.
|
|
12
|
+
* folders are gone, so the worker still ends the way it would have. Only the OS passes the signal's
|
|
13
|
+
* name to the listener; a test imitating a signal with `process.emit("SIGTERM")` passes none and is
|
|
14
|
+
* left alone, sandbox and worker included.
|
|
13
15
|
*/
|
|
14
16
|
const removeOnExit = (dir) => {
|
|
15
17
|
const holder = globalThis;
|
|
@@ -18,14 +20,18 @@ const removeOnExit = (dir) => {
|
|
|
18
20
|
holder[LEFT] = left;
|
|
19
21
|
const removeLeft = () => {
|
|
20
22
|
for (const path of left)
|
|
21
|
-
|
|
23
|
+
removed(path, 3);
|
|
22
24
|
left.clear();
|
|
23
25
|
};
|
|
24
26
|
process.once("exit", removeLeft);
|
|
25
|
-
|
|
27
|
+
const onSignal = (name) => {
|
|
28
|
+
if (name !== "SIGTERM")
|
|
29
|
+
return;
|
|
30
|
+
process.off("SIGTERM", onSignal);
|
|
26
31
|
removeLeft();
|
|
27
32
|
process.kill(process.pid, "SIGTERM");
|
|
28
|
-
}
|
|
33
|
+
};
|
|
34
|
+
process.on("SIGTERM", onSignal);
|
|
29
35
|
}
|
|
30
36
|
const left = holder[LEFT];
|
|
31
37
|
left.add(dir);
|
|
@@ -73,11 +79,25 @@ export const enterSandbox = (env = process.env, platform = process.platform) =>
|
|
|
73
79
|
else
|
|
74
80
|
env[key] = value;
|
|
75
81
|
}
|
|
76
|
-
|
|
77
|
-
|
|
82
|
+
// Windows will not delete a file a test left open; such a folder is retried at exit instead of failing the file.
|
|
83
|
+
if (removed(dir, 10))
|
|
84
|
+
forget();
|
|
78
85
|
},
|
|
79
86
|
};
|
|
80
87
|
};
|
|
88
|
+
export const removed = (path, maxRetries, rm = rmSync) => {
|
|
89
|
+
try {
|
|
90
|
+
rm(path, { recursive: true, force: true, maxRetries, retryDelay: 100 });
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
const code = error.code;
|
|
95
|
+
if (code !== "EPERM" && code !== "EBUSY" && code !== "ENOTEMPTY")
|
|
96
|
+
throw error;
|
|
97
|
+
process.stderr.write(`test sandbox ${path} is still in use (${code}); left for the system's temporary-file cleanup\n`);
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
81
101
|
export const REAL_KEYRING_REACHED = "a test reached the real OS keyring — pass memoryKeyring() instead";
|
|
82
102
|
class ThrowingEntry {
|
|
83
103
|
constructor() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/testing/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAQhC,MAAM,QAAQ,GAAG,4BAA4B,CAAA;AAE7C,0GAA0G;AAC1G,MAAM,OAAO,GAAG,CAAC,QAAyB,EAAU,EAAE,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;AAElG,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;AAE9D
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/testing/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAQhC,MAAM,QAAQ,GAAG,4BAA4B,CAAA;AAE7C,0GAA0G;AAC1G,MAAM,OAAO,GAAG,CAAC,QAAyB,EAAU,EAAE,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;AAElG,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;AAE9D;;;;;;GAMG;AACH,MAAM,YAAY,GAAG,CAAC,GAAW,EAAgB,EAAE;IACjD,MAAM,MAAM,GAAG,UAAsC,CAAA;IACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;QACnB,MAAM,UAAU,GAAG,GAAG,EAAE;YACtB,KAAK,MAAM,IAAI,IAAI,IAAI;gBAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YACzC,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAChC,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAE,EAAE;YACjC,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAM;YAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAChC,UAAU,EAAE,CAAA;YACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QACtC,CAAC,CAAA;QACD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACjC,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACb,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC/B,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,GAAG,GAAsB,OAAO,CAAC,GAAG,EACpC,QAAQ,GAAoB,OAAO,CAAC,QAAQ,EACnC,EAAE;IACX,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC,CAAA;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC9B,SAAS,CAAC,IAAI,CAAC,CAAA;IAEf,MAAM,MAAM,GAA2B;QACrC,MAAM,EAAE,GAAG;QACX,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QACtC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC5C,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;QAC7C,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QACpC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;QACzC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC;QAC5C,0BAA0B,EAAE,OAAO;QACnC,kBAAkB,EAAE,GAAG;KACxB,CAAA;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,iBAAiB;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAE1F,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAU,CAAC,CAAA;IAC3E,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAE1B,OAAO;QACL,GAAG;QACH,OAAO,EAAE,GAAG,EAAE;YACZ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACpC,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;;oBACnC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACvB,CAAC;YACD,iHAAiH;YACjH,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;gBAAE,MAAM,EAAE,CAAA;QAChC,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,UAAkB,EAAE,EAAE,GAAkB,MAAM,EAAW,EAAE;IAC/F,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAA;QACvE,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAA;QAClD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW;YAAE,MAAM,KAAK,CAAA;QAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gBAAgB,IAAI,qBAAqB,IAAI,mDAAmD,CACjG,CAAA;QACD,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,mEAAmE,CAAA;AAEvG,MAAM,aAAa;IACjB;QACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACvC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAS,EAAE;IAC/C,MAAM,SAAS,GAAG,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;IACtG,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,IAAI,IAAY,CAAA;QAChB,IAAI,CAAC;YACH,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;YACpB,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;SACN,CAAA;IAC/B,CAAC;AACH,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wirecat/cli-base",
|
|
3
|
-
"version": "0.43.
|
|
3
|
+
"version": "0.43.5",
|
|
4
4
|
"description": "The parts every command line tool needs: output modes, terminal rendering, error model, exit codes, credentials, clocks",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Viacheslav Ptsarev",
|