@plugjs/plug 0.3.5 → 0.4.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/asserts.cjs +9 -11
- package/dist/asserts.cjs.map +1 -1
- package/dist/asserts.d.ts +1 -2
- package/dist/asserts.mjs +8 -9
- package/dist/asserts.mjs.map +1 -1
- package/dist/build.cjs +29 -5
- package/dist/build.cjs.map +1 -1
- package/dist/build.d.ts +4 -0
- package/dist/build.mjs +27 -5
- package/dist/build.mjs.map +1 -1
- package/dist/cli.d.mts +12 -0
- package/dist/cli.mjs +266 -0
- package/dist/cli.mjs.map +6 -0
- 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 +30 -10
- package/dist/helpers.cjs.map +2 -2
- package/dist/helpers.d.ts +12 -0
- package/dist/helpers.mjs +35 -11
- 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 +5 -2
- package/dist/logging/options.cjs.map +1 -1
- package/dist/logging/options.mjs +5 -2
- 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 +66 -0
- package/dist/plugs/build.cjs.map +6 -0
- package/dist/plugs/build.d.ts +13 -0
- package/dist/plugs/build.mjs +40 -0
- package/dist/plugs/build.mjs.map +6 -0
- package/dist/types.d.ts +2 -0
- 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/package.json +7 -9
- package/src/asserts.ts +9 -11
- package/src/build.ts +33 -4
- package/{extra/plug.mts → src/cli.mts} +115 -141
- package/src/fork.ts +42 -16
- package/src/helpers.ts +53 -1
- 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 +5 -1
- package/src/logging.ts +20 -5
- package/src/plugs/build.ts +58 -0
- package/src/types.ts +2 -0
- package/src/utils/exec.ts +6 -20
- package/cli/plug.mjs +0 -1385
- package/cli/ts-loader.mjs +0 -275
- package/cli/tsrun.mjs +0 -1204
- package/extra/ts-loader.mts +0 -546
- package/extra/tsrun.mts +0 -127
- package/extra/utils.ts +0 -150
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/plugs/build.ts"],
|
|
4
|
+
"mappings": ";AAAA,SAAS,UAAU;AACnB,SAAS,mBAAqC;AAC9C,SAAS,uBAAuB;AAOzB,IAAM,mBAAN,MAA6C;AAAA,EAClD,YACqB,QACA,QACnB;AAFmB;AACA;AAAA,EAClB;AAAA,EAEH,MAAM,KAAK,OAAc,SAAiC;AACxD,UAAM,QAAQ,KAAK,OAAO,WAAW,IAAI,CAAE,SAAU,IAAI,KAAK;AAE9D,eAAW,QAAQ,MAAM,cAAc,GAAG;AAExC,UAAI,aAAa,MAAM,OAAO;AAC9B,aAAO,YAAY;AACjB,YAAI,QAAQ,UAAU;AAAG;AACzB,qBAAa,WAAW;AAAA,MAC1B;AAGA,UAAI,CAAE,QAAQ,UAAU,GAAG;AACzB,gBAAQ,IAAI,KAAK,QAAQ,GAAG,IAAI,iCAAiC;AAAA,MACnE,OAAO;AACL,cAAM,WAAW,WAAW,EAAE,OAAO,KAAK,MAAM;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAM,cAAc,OAAO,IAAI,gBAAgB;AAG/C,SAAS,QAAQ,OAKf;AACA,SAAO,SAAS,OAAO,MAAM,WAAW,MAAM;AAChD;AAEO,IAAM,WAAN,cAAuB,YAAY;AAAA,EACxC,YACI,OACA,OACA,SACF;AACA,UAAM,gBAAgB,eAAS,GAAG,CAAE,OAAO,OAAO,OAAQ,GAAG,iBAAiB,IAAI;AAAA,EACpF;AACF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export interface State {
|
|
|
20
20
|
readonly tasks: Tasks;
|
|
21
21
|
/** All _properties_ available in this {@link State} */
|
|
22
22
|
readonly props: Props;
|
|
23
|
+
/** All _tasks_ that have failed in this {@link State} */
|
|
24
|
+
readonly fails: Set<Task>;
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* The {@link Task} interface normalizes a task definition, associating it with
|
package/dist/utils/exec.cjs
CHANGED
|
@@ -33,9 +33,9 @@ __export(exec_exports, {
|
|
|
33
33
|
execChild: () => execChild
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(exec_exports);
|
|
36
|
+
var import_node_child_process = require("node:child_process");
|
|
36
37
|
var import_node_path = __toESM(require("node:path"), 1);
|
|
37
38
|
var import_node_readline = __toESM(require("node:readline"), 1);
|
|
38
|
-
var import_node_child_process = require("node:child_process");
|
|
39
39
|
var import_asserts = require("../asserts.cjs");
|
|
40
40
|
var import_logging = require("../logging.cjs");
|
|
41
41
|
var import_paths = require("../paths.cjs");
|
|
@@ -43,8 +43,6 @@ async function execChild(cmd, args, options = {}, context) {
|
|
|
43
43
|
const {
|
|
44
44
|
env = {},
|
|
45
45
|
// default empty environment
|
|
46
|
-
fork = false,
|
|
47
|
-
// by default do not fork
|
|
48
46
|
shell = false,
|
|
49
47
|
// by default do not use a shell
|
|
50
48
|
cwd = void 0,
|
|
@@ -55,7 +53,6 @@ async function execChild(cmd, args, options = {}, context) {
|
|
|
55
53
|
} = options;
|
|
56
54
|
const childCwd = cwd ? context.resolve(cwd) : (0, import_paths.getCurrentWorkingDirectory)();
|
|
57
55
|
(0, import_asserts.assert)((0, import_paths.resolveDirectory)(childCwd), `Current working directory ${(0, import_logging.$p)(childCwd)} does not exist`);
|
|
58
|
-
(0, import_asserts.assert)(!(fork && shell), 'Options "fork" and "shell" can not coexist');
|
|
59
56
|
const childPaths = [];
|
|
60
57
|
const baseNodePath = context.resolve("@node_modules", ".bin");
|
|
61
58
|
if ((0, import_paths.resolveDirectory)(baseNodePath))
|
|
@@ -67,20 +64,19 @@ async function execChild(cmd, args, options = {}, context) {
|
|
|
67
64
|
if (extraPath)
|
|
68
65
|
childPaths.push(extraPath);
|
|
69
66
|
const PATH = childPaths.join(import_node_path.default.delimiter);
|
|
70
|
-
const
|
|
71
|
-
const childEnv = { ...process.env, ...env, ...logForkEnv, PATH };
|
|
67
|
+
const childEnv = { ...process.env, ...env, PATH };
|
|
72
68
|
if (coverageDir)
|
|
73
69
|
childEnv.NODE_V8_COVERAGE = context.resolve(coverageDir);
|
|
74
70
|
const childOptions = {
|
|
75
71
|
...extraOptions,
|
|
76
|
-
stdio: ["ignore", "pipe", "pipe"
|
|
72
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
77
73
|
cwd: childCwd,
|
|
78
74
|
env: childEnv,
|
|
79
75
|
shell
|
|
80
76
|
};
|
|
81
|
-
context.log.info(
|
|
77
|
+
context.log.info("Executing", [cmd, ...args]);
|
|
82
78
|
context.log.debug("Child process options", childOptions);
|
|
83
|
-
const child =
|
|
79
|
+
const child = (0, import_node_child_process.spawn)(cmd, args, childOptions);
|
|
84
80
|
try {
|
|
85
81
|
context.log.info("Child process PID", child.pid);
|
|
86
82
|
if (child.stdout) {
|
|
@@ -91,9 +87,6 @@ async function execChild(cmd, args, options = {}, context) {
|
|
|
91
87
|
const err = import_node_readline.default.createInterface(child.stderr);
|
|
92
88
|
err.on("line", (line) => context.log.warn(line || "\xA0"));
|
|
93
89
|
}
|
|
94
|
-
if (child.stdio[4]) {
|
|
95
|
-
child.stdio[4].on("data", (data) => import_logging.logOptions.output.write(data));
|
|
96
|
-
}
|
|
97
90
|
} catch (error) {
|
|
98
91
|
child.kill();
|
|
99
92
|
throw error;
|
package/dist/utils/exec.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/exec.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAiB;AACjB,2BAAqB;
|
|
5
|
-
"names": ["path", "
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAsB;AACtB,uBAAiB;AACjB,2BAAqB;AAErB,qBAAqC;AACrC,qBAAmB;AACnB,mBAA6D;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,QAAI,yCAA2B;AACzE,iCAAO,+BAAiB,QAAQ,GAAG,iCAA6B,mBAAG,QAAQ,kBAAkB;AAG7F,QAAM,aAA6B,CAAC;AAGpC,QAAM,eAAe,QAAQ,QAAQ,iBAAiB,MAAM;AAC5D,UAAI,+BAAiB,YAAY;AAAG,eAAW,KAAK,YAAY;AAGhE,QAAM,gBAAgB,QAAQ,QAAQ,kBAAkB,MAAM;AAC9D,UAAI,+BAAiB,aAAa;AAAG,eAAW,KAAK,aAAa;AAGlE,QAAM,YAAY,IAAI,QAAQ,QAAQ,IAAI;AAC1C,MAAI;AAAW,eAAW,KAAK,SAAS;AAGxC,QAAM,OAAO,WAAW,KAAK,iBAAAA,QAAK,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,YAAQ,iCAAM,KAAK,MAAM,YAAY;AAE3C,MAAI;AACF,YAAQ,IAAI,KAAK,qBAAqB,MAAM,GAAG;AAG/C,QAAI,MAAM,QAAQ;AAChB,YAAM,MAAM,qBAAAC,QAAS,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,qBAAAA,QAAS,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,4BAAa,YAAY,oCAAoC,QAAQ,CAAC;AAChG,UAAI;AAAM,eAAO,OAAO,4BAAa,YAAY,kCAAkC,MAAM,CAAC;AAC1F,aAAO,4BAAa,YAAY,4CAA4C,CAAC;AAAA,IAC/E,CAAC;AAAA,EACH,CAAC;AACH;",
|
|
5
|
+
"names": ["path", "readline"]
|
|
6
6
|
}
|
package/dist/utils/exec.d.ts
CHANGED
|
@@ -5,8 +5,6 @@ export interface ExecChildOptions {
|
|
|
5
5
|
coverageDir?: string;
|
|
6
6
|
/** Extra environment variables, or overrides for existing ones */
|
|
7
7
|
env?: Record<string, any>;
|
|
8
|
-
/** Whether to _fork_ the process (argument is a javascript file) or not */
|
|
9
|
-
fork?: boolean;
|
|
10
8
|
/** Whether to run the command in a shell (optionally name the shell) */
|
|
11
9
|
shell?: string | boolean;
|
|
12
10
|
/** The current working directory of the process to execute. */
|
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
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plugjs/plug",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
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
|
@@ -7,11 +7,6 @@ import { githubAnnotation } from './logging/github'
|
|
|
7
7
|
/** A symbol marking {@link BuildFailure} instances */
|
|
8
8
|
const buildFailure = Symbol.for('plugjs:buildFailure')
|
|
9
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
|
-
}
|
|
14
|
-
|
|
15
10
|
/** A {@link BuildFailure} represents an error _already logged_ in our build. */
|
|
16
11
|
export class BuildFailure extends Error {
|
|
17
12
|
readonly errors?: readonly any[] | undefined
|
|
@@ -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/build.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assert } from './asserts'
|
|
2
2
|
import { runAsync } from './async'
|
|
3
|
-
import { $ms, $p, $t, getLogger, logOptions } from './logging'
|
|
3
|
+
import { $gry, $ms, $p, $t, getLogger, logOptions } from './logging'
|
|
4
4
|
import { Context, ContextPromises, PipeImpl } from './pipe'
|
|
5
5
|
import { findCaller } from './utils/caller'
|
|
6
6
|
|
|
@@ -51,7 +51,8 @@ function makeTask(
|
|
|
51
51
|
const tasks: Record<string, Task> = Object.assign({}, task.tasks, state.tasks)
|
|
52
52
|
const stack = [ ...state.stack, task ]
|
|
53
53
|
const cache = state.cache
|
|
54
|
-
|
|
54
|
+
const fails = state.fails
|
|
55
|
+
state = { stack, cache, fails, tasks, props }
|
|
55
56
|
|
|
56
57
|
/* Create run context and build */
|
|
57
58
|
const context = new Context(task.buildFile, taskName)
|
|
@@ -86,6 +87,7 @@ function makeTask(
|
|
|
86
87
|
context.log[level](`Success ${$ms(Date.now() - now)}`)
|
|
87
88
|
return result
|
|
88
89
|
}).catch((error) => {
|
|
90
|
+
fails.add(task)
|
|
89
91
|
throw context.log.fail(`Failure ${$ms(Date.now() - now)}`, error)
|
|
90
92
|
}).finally(async () => {
|
|
91
93
|
await ContextPromises.wait(context)
|
|
@@ -105,6 +107,7 @@ function makeTask(
|
|
|
105
107
|
cache: new Map<Task, Promise<Result>>(),
|
|
106
108
|
stack: [] as Task[],
|
|
107
109
|
props: Object.assign({}, props, overrideProps),
|
|
110
|
+
fails: new Set<Task>,
|
|
108
111
|
tasks: tasks,
|
|
109
112
|
}
|
|
110
113
|
return invoke(state, _name)
|
|
@@ -163,8 +166,9 @@ export function build<
|
|
|
163
166
|
const logger = getLogger()
|
|
164
167
|
const state = {
|
|
165
168
|
cache: new Map<Task, Promise<Result>>(),
|
|
166
|
-
stack: [] as Task[],
|
|
167
169
|
props: Object.assign({}, props, overrideProps),
|
|
170
|
+
fails: new Set<Task>(),
|
|
171
|
+
stack: [] as Task[],
|
|
168
172
|
tasks: tasks,
|
|
169
173
|
}
|
|
170
174
|
|
|
@@ -181,12 +185,18 @@ export function build<
|
|
|
181
185
|
}
|
|
182
186
|
logger.notice(`Build successful ${$ms(Date.now() - now)}`)
|
|
183
187
|
} catch (error) {
|
|
188
|
+
if (state.fails.size) {
|
|
189
|
+
logger.error('')
|
|
190
|
+
logger.error(state.fails.size, state.fails.size === 1 ? 'task' : 'tasks', 'failed:')
|
|
191
|
+
state.fails.forEach((task) => logger.error($gry('*'), $t(task.name)))
|
|
192
|
+
logger.error('')
|
|
193
|
+
}
|
|
184
194
|
throw logger.fail(`Build failed ${$ms(Date.now() - now)}`, error)
|
|
185
195
|
}
|
|
186
196
|
}
|
|
187
197
|
|
|
188
198
|
/* Create our build, the collection of all props and tasks */
|
|
189
|
-
const compiled = Object.assign(
|
|
199
|
+
const compiled = Object.assign(Object.create(null), props, tasks) as Build<D>
|
|
190
200
|
|
|
191
201
|
/* Sneak our "call" function in the build, for the CLI and "call" below */
|
|
192
202
|
Object.defineProperty(compiled, buildMarker, { value: invoke })
|
|
@@ -195,6 +205,25 @@ export function build<
|
|
|
195
205
|
return compiled
|
|
196
206
|
}
|
|
197
207
|
|
|
208
|
+
/** Check if the specified build is actually a {@link Build} */
|
|
209
|
+
export function isBuild(build: any): build is Build<Record<string, any>> {
|
|
210
|
+
return build && typeof build[buildMarker] === 'function'
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** Invoke a number of tasks in a {@link Build} */
|
|
214
|
+
export function invokeTasks(
|
|
215
|
+
build: Build,
|
|
216
|
+
tasks: string[],
|
|
217
|
+
props?: Record<string, string>,
|
|
218
|
+
): Promise<void> {
|
|
219
|
+
if (build && (typeof build === 'object') &&
|
|
220
|
+
(buildMarker in build) && (typeof build[buildMarker] === 'function')) {
|
|
221
|
+
return build[buildMarker](tasks, props)
|
|
222
|
+
} else {
|
|
223
|
+
throw new TypeError('Invalid build instance')
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
198
227
|
/* ========================================================================== *
|
|
199
228
|
* HOOKS *
|
|
200
229
|
* ========================================================================== */
|