@plugjs/plug 0.3.5 → 0.4.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/dist/asserts.cjs +10 -12
- package/dist/asserts.cjs.map +1 -1
- package/dist/asserts.d.ts +1 -2
- package/dist/asserts.mjs +9 -10
- package/dist/asserts.mjs.map +1 -1
- package/dist/async.cjs +5 -20
- package/dist/async.cjs.map +2 -2
- package/dist/async.mjs +5 -20
- package/dist/async.mjs.map +2 -2
- package/dist/build.cjs +113 -64
- package/dist/build.cjs.map +2 -2
- package/dist/build.d.ts +9 -7
- package/dist/build.mjs +110 -63
- package/dist/build.mjs.map +2 -2
- package/dist/cli.d.mts +12 -0
- package/dist/cli.mjs +266 -0
- package/dist/cli.mjs.map +6 -0
- package/dist/files.cjs +5 -3
- package/dist/files.cjs.map +1 -1
- package/dist/files.d.ts +2 -1
- package/dist/files.mjs +11 -4
- package/dist/files.mjs.map +1 -1
- package/dist/fork.cjs +30 -12
- package/dist/fork.cjs.map +1 -1
- package/dist/fork.d.ts +10 -0
- package/dist/fork.mjs +31 -13
- package/dist/fork.mjs.map +1 -1
- package/dist/helpers.cjs +32 -13
- package/dist/helpers.cjs.map +2 -2
- package/dist/helpers.d.ts +12 -0
- package/dist/helpers.mjs +37 -14
- package/dist/helpers.mjs.map +2 -2
- package/dist/index.cjs +5 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.mjs +4 -1
- package/dist/index.mjs.map +1 -1
- package/dist/logging/emit.cjs +4 -4
- package/dist/logging/emit.cjs.map +1 -1
- package/dist/logging/emit.mjs +4 -4
- package/dist/logging/emit.mjs.map +1 -1
- package/dist/logging/logger.cjs +43 -2
- package/dist/logging/logger.cjs.map +1 -1
- package/dist/logging/logger.d.ts +36 -3
- package/dist/logging/logger.mjs +43 -3
- package/dist/logging/logger.mjs.map +1 -1
- package/dist/logging/options.cjs +8 -12
- package/dist/logging/options.cjs.map +1 -1
- package/dist/logging/options.d.ts +44 -1
- package/dist/logging/options.mjs +8 -12
- package/dist/logging/options.mjs.map +1 -1
- package/dist/logging.cjs +14 -3
- package/dist/logging.cjs.map +1 -1
- package/dist/logging.d.ts +2 -0
- package/dist/logging.mjs +13 -3
- package/dist/logging.mjs.map +1 -1
- package/dist/plugs/build.cjs +63 -0
- package/dist/plugs/build.cjs.map +6 -0
- package/dist/plugs/build.d.ts +13 -0
- package/dist/plugs/build.mjs +37 -0
- package/dist/plugs/build.mjs.map +6 -0
- package/dist/plugs/debug.cjs +7 -9
- package/dist/plugs/debug.cjs.map +1 -1
- package/dist/plugs/debug.mjs +8 -10
- package/dist/plugs/debug.mjs.map +1 -1
- package/dist/types.cjs +12 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.ts +35 -9
- package/dist/types.mjs +5 -0
- package/dist/types.mjs.map +2 -2
- package/dist/utils/diff.cjs +1 -4
- package/dist/utils/diff.cjs.map +1 -1
- package/dist/utils/diff.mjs +1 -4
- package/dist/utils/diff.mjs.map +1 -1
- package/dist/utils/exec.cjs +5 -12
- package/dist/utils/exec.cjs.map +2 -2
- package/dist/utils/exec.d.ts +0 -2
- package/dist/utils/exec.mjs +6 -13
- package/dist/utils/exec.mjs.map +1 -1
- package/dist/utils/{types.cjs → singleton.cjs} +14 -13
- package/dist/utils/singleton.cjs.map +6 -0
- package/dist/utils/singleton.d.ts +12 -0
- package/dist/utils/singleton.mjs +13 -0
- package/dist/utils/singleton.mjs.map +6 -0
- package/dist/utils.cjs +2 -2
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +7 -9
- package/src/asserts.ts +10 -12
- package/src/async.ts +6 -29
- package/src/build.ts +169 -106
- package/{extra/plug.mts → src/cli.mts} +115 -141
- package/src/files.ts +14 -6
- package/src/fork.ts +42 -16
- package/src/helpers.ts +56 -5
- package/src/index.ts +2 -1
- package/src/logging/emit.ts +4 -4
- package/src/logging/logger.ts +60 -7
- package/src/logging/options.ts +9 -14
- package/src/logging.ts +20 -5
- package/src/plugs/build.ts +45 -0
- package/src/plugs/debug.ts +10 -9
- package/src/types.ts +54 -23
- package/src/utils/diff.ts +1 -6
- package/src/utils/exec.ts +6 -20
- package/src/utils/singleton.ts +19 -0
- package/src/utils.ts +1 -1
- package/cli/plug.mjs +0 -1385
- package/cli/ts-loader.mjs +0 -275
- package/cli/tsrun.mjs +0 -1204
- package/dist/utils/types.cjs.map +0 -6
- package/dist/utils/types.d.ts +0 -4
- package/dist/utils/types.mjs +0 -12
- package/dist/utils/types.mjs.map +0 -6
- package/extra/ts-loader.mts +0 -546
- package/extra/tsrun.mts +0 -127
- package/extra/utils.ts +0 -150
- package/src/utils/types.ts +0 -11
package/dist/utils/exec.mjs
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
// utils/exec.ts
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import readline from "node:readline";
|
|
4
|
-
import { fork as forkProcess, spawn as spawnProcess } from "node:child_process";
|
|
5
5
|
import { assert, BuildFailure } from "../asserts.mjs";
|
|
6
|
-
import { $p
|
|
6
|
+
import { $p } from "../logging.mjs";
|
|
7
7
|
import { getCurrentWorkingDirectory, resolveDirectory } from "../paths.mjs";
|
|
8
8
|
async function execChild(cmd, args, options = {}, context) {
|
|
9
9
|
const {
|
|
10
10
|
env = {},
|
|
11
11
|
// default empty environment
|
|
12
|
-
fork = false,
|
|
13
|
-
// by default do not fork
|
|
14
12
|
shell = false,
|
|
15
13
|
// by default do not use a shell
|
|
16
14
|
cwd = void 0,
|
|
@@ -21,7 +19,6 @@ async function execChild(cmd, args, options = {}, context) {
|
|
|
21
19
|
} = options;
|
|
22
20
|
const childCwd = cwd ? context.resolve(cwd) : getCurrentWorkingDirectory();
|
|
23
21
|
assert(resolveDirectory(childCwd), `Current working directory ${$p(childCwd)} does not exist`);
|
|
24
|
-
assert(!(fork && shell), 'Options "fork" and "shell" can not coexist');
|
|
25
22
|
const childPaths = [];
|
|
26
23
|
const baseNodePath = context.resolve("@node_modules", ".bin");
|
|
27
24
|
if (resolveDirectory(baseNodePath))
|
|
@@ -33,20 +30,19 @@ async function execChild(cmd, args, options = {}, context) {
|
|
|
33
30
|
if (extraPath)
|
|
34
31
|
childPaths.push(extraPath);
|
|
35
32
|
const PATH = childPaths.join(path.delimiter);
|
|
36
|
-
const
|
|
37
|
-
const childEnv = { ...process.env, ...env, ...logForkEnv, PATH };
|
|
33
|
+
const childEnv = { ...process.env, ...env, PATH };
|
|
38
34
|
if (coverageDir)
|
|
39
35
|
childEnv.NODE_V8_COVERAGE = context.resolve(coverageDir);
|
|
40
36
|
const childOptions = {
|
|
41
37
|
...extraOptions,
|
|
42
|
-
stdio: ["ignore", "pipe", "pipe"
|
|
38
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
43
39
|
cwd: childCwd,
|
|
44
40
|
env: childEnv,
|
|
45
41
|
shell
|
|
46
42
|
};
|
|
47
|
-
context.log.info(
|
|
43
|
+
context.log.info("Executing", [cmd, ...args]);
|
|
48
44
|
context.log.debug("Child process options", childOptions);
|
|
49
|
-
const child =
|
|
45
|
+
const child = spawn(cmd, args, childOptions);
|
|
50
46
|
try {
|
|
51
47
|
context.log.info("Child process PID", child.pid);
|
|
52
48
|
if (child.stdout) {
|
|
@@ -57,9 +53,6 @@ async function execChild(cmd, args, options = {}, context) {
|
|
|
57
53
|
const err = readline.createInterface(child.stderr);
|
|
58
54
|
err.on("line", (line) => context.log.warn(line || "\xA0"));
|
|
59
55
|
}
|
|
60
|
-
if (child.stdio[4]) {
|
|
61
|
-
child.stdio[4].on("data", (data) => logOptions.output.write(data));
|
|
62
|
-
}
|
|
63
56
|
} catch (error) {
|
|
64
57
|
child.kill();
|
|
65
58
|
throw error;
|
package/dist/utils/exec.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/exec.ts"],
|
|
4
|
-
"mappings": ";AAAA,OAAO,UAAU;AACjB,OAAO,cAAc;
|
|
4
|
+
"mappings": ";AAAA,SAAS,aAAa;AACtB,OAAO,UAAU;AACjB,OAAO,cAAc;AAErB,SAAS,QAAQ,oBAAoB;AACrC,SAAS,UAAU;AACnB,SAAS,4BAA4B,wBAAwB;AAkB7D,eAAsB,UAClB,KACA,MACA,UAA4B,CAAC,GAC7B,SACa;AACf,QAAM;AAAA,IACJ,MAAM,CAAC;AAAA;AAAA,IACP,QAAQ;AAAA;AAAA,IACR,MAAM;AAAA;AAAA,IACN;AAAA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,WAAW,MAAM,QAAQ,QAAQ,GAAG,IAAI,2BAA2B;AACzE,SAAO,iBAAiB,QAAQ,GAAG,6BAA6B,GAAG,QAAQ,kBAAkB;AAG7F,QAAM,aAA6B,CAAC;AAGpC,QAAM,eAAe,QAAQ,QAAQ,iBAAiB,MAAM;AAC5D,MAAI,iBAAiB,YAAY;AAAG,eAAW,KAAK,YAAY;AAGhE,QAAM,gBAAgB,QAAQ,QAAQ,kBAAkB,MAAM;AAC9D,MAAI,iBAAiB,aAAa;AAAG,eAAW,KAAK,aAAa;AAGlE,QAAM,YAAY,IAAI,QAAQ,QAAQ,IAAI;AAC1C,MAAI;AAAW,eAAW,KAAK,SAAS;AAGxC,QAAM,OAAO,WAAW,KAAK,KAAK,SAAS;AAC3C,QAAM,WAAmC,EAAE,GAAG,QAAQ,KAAK,GAAG,KAAK,KAAK;AAGxE,MAAI;AAAa,aAAS,mBAAmB,QAAQ,QAAQ,WAAW;AAGxE,QAAM,eAA6B;AAAA,IACjC,GAAG;AAAA,IACH,OAAO,CAAE,UAAU,QAAQ,MAAO;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AAAA,EACF;AAGA,UAAQ,IAAI,KAAK,aAAa,CAAE,KAAK,GAAG,IAAK,CAAC;AAC9C,UAAQ,IAAI,MAAM,yBAAyB,YAAY;AAEvD,QAAM,QAAQ,MAAM,KAAK,MAAM,YAAY;AAE3C,MAAI;AACF,YAAQ,IAAI,KAAK,qBAAqB,MAAM,GAAG;AAG/C,QAAI,MAAM,QAAQ;AAChB,YAAM,MAAM,SAAS,gBAAgB,MAAM,MAAM;AACjD,UAAI,GAAG,QAAQ,CAAC,SAAS,QAAQ,IAAI,OAAO,QAAQ,MAAQ,CAAC;AAAA,IAC/D;AAGA,QAAI,MAAM,QAAQ;AAChB,YAAM,MAAM,SAAS,gBAAgB,MAAM,MAAM;AACjD,UAAI,GAAG,QAAQ,CAAC,SAAS,QAAQ,IAAI,KAAK,QAAO,MAAQ,CAAC;AAAA,IAC5D;AAAA,EACF,SAAS,OAAP;AAEA,UAAM,KAAK;AACX,UAAM;AAAA,EACR;AAGA,SAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,UAAM,GAAG,SAAS,CAAC,UAAU,OAAO,KAAK,CAAC;AAC1C,UAAM,GAAG,QAAQ,CAAC,MAAM,WAAW;AACjC,UAAI,SAAS;AAAG,eAAO,QAAQ;AAC/B,UAAI;AAAQ,eAAO,OAAO,aAAa,YAAY,oCAAoC,QAAQ,CAAC;AAChG,UAAI;AAAM,eAAO,OAAO,aAAa,YAAY,kCAAkC,MAAM,CAAC;AAC1F,aAAO,aAAa,YAAY,4CAA4C,CAAC;AAAA,IAC/E,CAAC;AAAA,EACH,CAAC;AACH;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -17,21 +17,22 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
|
-
// utils/
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
23
|
-
|
|
20
|
+
// utils/singleton.ts
|
|
21
|
+
var singleton_exports = {};
|
|
22
|
+
__export(singleton_exports, {
|
|
23
|
+
getSingleton: () => getSingleton
|
|
24
24
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
module.exports = __toCommonJS(singleton_exports);
|
|
26
|
+
function getSingleton(symbol, factory) {
|
|
27
|
+
const anyGlobalThis = globalThis;
|
|
28
|
+
if (anyGlobalThis[symbol])
|
|
29
|
+
return anyGlobalThis[symbol];
|
|
30
|
+
const value = factory();
|
|
31
|
+
Object.defineProperty(anyGlobalThis, symbol, { value });
|
|
32
|
+
return value;
|
|
32
33
|
}
|
|
33
34
|
// Annotate the CommonJS export names for ESM import in node:
|
|
34
35
|
0 && (module.exports = {
|
|
35
|
-
|
|
36
|
+
getSingleton
|
|
36
37
|
});
|
|
37
|
-
//# sourceMappingURL=
|
|
38
|
+
//# sourceMappingURL=singleton.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/singleton.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,SAAS,aAAgB,QAAgB,SAAqB;AACnE,QAAM,gBAAgB;AACtB,MAAI,cAAc,MAAM;AAAG,WAAO,cAAc,MAAM;AAEtD,QAAM,QAAQ,QAAQ;AACtB,SAAO,eAAe,eAAe,QAAQ,EAAE,MAAM,CAAC;AACtD,SAAO;AACT;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the instance of a _singleton_ variable.
|
|
3
|
+
*
|
|
4
|
+
* Sometimes we need unique instances _per process_ (for example our async
|
|
5
|
+
* context). The problem is that the code might get called from two (or three)
|
|
6
|
+
* different versions of this file: the .cjs transpiled code, the .mjs
|
|
7
|
+
* transpiled one, or the .ts dynamically transpiled by our dynamic loader.
|
|
8
|
+
*
|
|
9
|
+
* A _singleton_ associates an instance with a symbol in `globalThis` and ensure
|
|
10
|
+
* there is only _one_ instance per process (per `globalThis`).
|
|
11
|
+
*/
|
|
12
|
+
export declare function getSingleton<T>(symbol: symbol, factory: () => T): T;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// utils/singleton.ts
|
|
2
|
+
function getSingleton(symbol, factory) {
|
|
3
|
+
const anyGlobalThis = globalThis;
|
|
4
|
+
if (anyGlobalThis[symbol])
|
|
5
|
+
return anyGlobalThis[symbol];
|
|
6
|
+
const value = factory();
|
|
7
|
+
Object.defineProperty(anyGlobalThis, symbol, { value });
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
getSingleton
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=singleton.mjs.map
|
package/dist/utils.cjs
CHANGED
|
@@ -21,7 +21,7 @@ __reExport(utils_exports, require("./utils/diff.cjs"), module.exports);
|
|
|
21
21
|
__reExport(utils_exports, require("./utils/exec.cjs"), module.exports);
|
|
22
22
|
__reExport(utils_exports, require("./utils/match.cjs"), module.exports);
|
|
23
23
|
__reExport(utils_exports, require("./utils/options.cjs"), module.exports);
|
|
24
|
-
__reExport(utils_exports, require("./utils/
|
|
24
|
+
__reExport(utils_exports, require("./utils/singleton.cjs"), module.exports);
|
|
25
25
|
__reExport(utils_exports, require("./utils/walk.cjs"), module.exports);
|
|
26
26
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
27
|
0 && (module.exports = {
|
|
@@ -29,7 +29,7 @@ __reExport(utils_exports, require("./utils/walk.cjs"), module.exports);
|
|
|
29
29
|
...require("./utils/exec.cjs"),
|
|
30
30
|
...require("./utils/match.cjs"),
|
|
31
31
|
...require("./utils/options.cjs"),
|
|
32
|
-
...require("./utils/
|
|
32
|
+
...require("./utils/singleton.cjs"),
|
|
33
33
|
...require("./utils/walk.cjs")
|
|
34
34
|
});
|
|
35
35
|
//# sourceMappingURL=utils.cjs.map
|
package/dist/utils.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/utils.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,6BAAd;AACA,0BAAc,6BADd;AAEA,0BAAc,8BAFd;AAGA,0BAAc,gCAHd;AAIA,0BAAc,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,6BAAd;AACA,0BAAc,6BADd;AAEA,0BAAc,8BAFd;AAGA,0BAAc,gCAHd;AAIA,0BAAc,kCAJd;AAKA,0BAAc,6BALd;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/utils.d.ts
CHANGED
package/dist/utils.mjs
CHANGED
|
@@ -3,6 +3,6 @@ export * from "./utils/diff.mjs";
|
|
|
3
3
|
export * from "./utils/exec.mjs";
|
|
4
4
|
export * from "./utils/match.mjs";
|
|
5
5
|
export * from "./utils/options.mjs";
|
|
6
|
-
export * from "./utils/
|
|
6
|
+
export * from "./utils/singleton.mjs";
|
|
7
7
|
export * from "./utils/walk.mjs";
|
|
8
8
|
//# sourceMappingURL=utils.mjs.map
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plugjs/plug",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"plug": "./dist/cli.mjs"
|
|
10
|
+
},
|
|
8
11
|
"exports": {
|
|
9
12
|
".": {
|
|
10
13
|
"require": {
|
|
@@ -97,21 +100,16 @@
|
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
},
|
|
100
|
-
"bin": {
|
|
101
|
-
"plug": "./cli/plug.mjs",
|
|
102
|
-
"tsrun": "./cli/tsrun.mjs"
|
|
103
|
-
},
|
|
104
103
|
"author": "Juit Developers <developers@juit.com>",
|
|
105
104
|
"license": "Apache-2.0",
|
|
106
105
|
"dependencies": {
|
|
106
|
+
"@plugjs/tsrun": "^0.4.0",
|
|
107
107
|
"@types/node": "<19",
|
|
108
|
-
"esbuild": "^0.17.
|
|
108
|
+
"esbuild": "^0.17.17",
|
|
109
109
|
"picomatch": "^2.3.1"
|
|
110
110
|
},
|
|
111
111
|
"devDependencies": {
|
|
112
|
-
"@types/picomatch": "^2.3.0"
|
|
113
|
-
"@types/yargs-parser": "^21.0.0",
|
|
114
|
-
"yargs-parser": "^21.1.1"
|
|
112
|
+
"@types/picomatch": "^2.3.0"
|
|
115
113
|
},
|
|
116
114
|
"files": [
|
|
117
115
|
"*.md",
|
package/src/asserts.ts
CHANGED
|
@@ -5,12 +5,7 @@
|
|
|
5
5
|
import { githubAnnotation } from './logging/github'
|
|
6
6
|
|
|
7
7
|
/** A symbol marking {@link BuildFailure} instances */
|
|
8
|
-
const buildFailure = Symbol.for('plugjs:
|
|
9
|
-
|
|
10
|
-
/** Check if the specified argument is a {@link BuildFailure} */
|
|
11
|
-
export function isBuildFailure(arg: any): arg is BuildFailure {
|
|
12
|
-
return arg && arg[buildFailure] === buildFailure
|
|
13
|
-
}
|
|
8
|
+
const buildFailure = Symbol.for('plugjs:plug:types:BuildFailure')
|
|
14
9
|
|
|
15
10
|
/** A {@link BuildFailure} represents an error _already logged_ in our build. */
|
|
16
11
|
export class BuildFailure extends Error {
|
|
@@ -28,12 +23,6 @@ export class BuildFailure extends Error {
|
|
|
28
23
|
/* Basic error setup: stack and errors */
|
|
29
24
|
Error.captureStackTrace(this, BuildFailure)
|
|
30
25
|
if (errors.length) this.errors = Object.freeze([ ...errors ])
|
|
31
|
-
|
|
32
|
-
/* Other properties: marker and name */
|
|
33
|
-
Object.defineProperties(this, {
|
|
34
|
-
[buildFailure]: { value: buildFailure },
|
|
35
|
-
'name': { value: 'BuildFailure' },
|
|
36
|
-
})
|
|
37
26
|
}
|
|
38
27
|
|
|
39
28
|
static fail(): BuildFailure {
|
|
@@ -47,6 +36,15 @@ export class BuildFailure extends Error {
|
|
|
47
36
|
static withErrors(errors: any[]): BuildFailure {
|
|
48
37
|
return new BuildFailure(undefined, errors)
|
|
49
38
|
}
|
|
39
|
+
|
|
40
|
+
static [Symbol.hasInstance](instance: any): boolean {
|
|
41
|
+
return instance && instance[buildFailure] === buildFailure
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
static {
|
|
45
|
+
(this.prototype as any)[buildFailure] = buildFailure
|
|
46
|
+
this.prototype.name = this.name
|
|
47
|
+
}
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
/** Await and assert that all specified promises were fulfilled */
|
package/src/async.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
2
2
|
|
|
3
3
|
import { assert } from './asserts'
|
|
4
|
+
import { getSingleton } from './utils/singleton'
|
|
4
5
|
|
|
5
6
|
import type { Context } from './pipe'
|
|
6
7
|
|
|
@@ -56,33 +57,9 @@ export function runningTasks(): string[] {
|
|
|
56
57
|
* INTERNALS *
|
|
57
58
|
* ========================================================================== */
|
|
58
59
|
|
|
59
|
-
/*
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
* the .mjs transpiled one (or the .ts dynamically transpiled by ts-loader).
|
|
63
|
-
* In all these cases, we must return the _same_ object, so we store those as
|
|
64
|
-
* a global variables associated with a couple of global symbols
|
|
65
|
-
*/
|
|
66
|
-
const storageKey = Symbol.for('plugjs.plug.async.storage')
|
|
67
|
-
const tasksKey = Symbol.for('plugjs.plug.async.tasks')
|
|
68
|
-
|
|
69
|
-
function getStorage(): AsyncLocalStorage<Context> {
|
|
70
|
-
let storage: AsyncLocalStorage<Context> = (<any> globalThis)[storageKey]
|
|
71
|
-
if (! storage) {
|
|
72
|
-
storage = new AsyncLocalStorage<Context>()
|
|
73
|
-
;(<any> globalThis)[storageKey] = storage
|
|
74
|
-
}
|
|
75
|
-
return storage
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function getTasks(): Set<string> {
|
|
79
|
-
let tasks: Set<string> = (<any> globalThis)[tasksKey]
|
|
80
|
-
if (! tasks) {
|
|
81
|
-
tasks = new Set<string>
|
|
82
|
-
;(<any> globalThis)[tasksKey] = tasks
|
|
83
|
-
}
|
|
84
|
-
return tasks
|
|
85
|
-
}
|
|
60
|
+
/* Storage and task names must be unique _per process_ */
|
|
61
|
+
const storageKey = Symbol.for('plugjs:plug:singleton:contextStorage')
|
|
62
|
+
const tasksKey = Symbol.for('plugjs:plug:singleton:runningTasksStorage')
|
|
86
63
|
|
|
87
|
-
const storage =
|
|
88
|
-
const tasks =
|
|
64
|
+
const storage = getSingleton(storageKey, () => new AsyncLocalStorage<Context>())
|
|
65
|
+
const tasks = getSingleton(tasksKey, () => new Set<string>())
|