@plugjs/plug 0.0.14 → 0.0.16

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.
Files changed (212) hide show
  1. package/dist/async.cjs +20 -19
  2. package/dist/async.cjs.map +1 -1
  3. package/dist/async.d.ts +9 -9
  4. package/dist/async.mjs +18 -17
  5. package/dist/async.mjs.map +1 -1
  6. package/dist/build.cjs +113 -110
  7. package/dist/build.cjs.map +2 -2
  8. package/dist/build.d.ts +14 -56
  9. package/dist/build.mjs +114 -111
  10. package/dist/build.mjs.map +2 -2
  11. package/dist/files.cjs +2 -16
  12. package/dist/files.cjs.map +1 -1
  13. package/dist/files.d.ts +3 -10
  14. package/dist/files.mjs +3 -17
  15. package/dist/files.mjs.map +1 -1
  16. package/dist/fork.cjs +28 -40
  17. package/dist/fork.cjs.map +1 -1
  18. package/dist/fork.d.ts +6 -27
  19. package/dist/fork.mjs +29 -40
  20. package/dist/fork.mjs.map +1 -1
  21. package/dist/helpers.cjs +27 -61
  22. package/dist/helpers.cjs.map +2 -2
  23. package/dist/helpers.d.ts +29 -31
  24. package/dist/helpers.mjs +27 -62
  25. package/dist/helpers.mjs.map +2 -2
  26. package/dist/index.cjs +15 -2
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.d.ts +9 -13
  29. package/dist/index.mjs +7 -2
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/log/colors.cjs +3 -1
  32. package/dist/log/colors.cjs.map +1 -1
  33. package/dist/log/colors.d.ts +2 -2
  34. package/dist/log/colors.mjs +3 -1
  35. package/dist/log/colors.mjs.map +1 -1
  36. package/dist/log/emit.d.ts +1 -1
  37. package/dist/log/logger.cjs +4 -0
  38. package/dist/log/logger.cjs.map +1 -1
  39. package/dist/log/logger.d.ts +4 -1
  40. package/dist/log/logger.mjs +4 -0
  41. package/dist/log/logger.mjs.map +1 -1
  42. package/dist/log/options.d.ts +1 -1
  43. package/dist/log/report.cjs +2 -11
  44. package/dist/log/report.cjs.map +1 -1
  45. package/dist/log/report.d.ts +36 -4
  46. package/dist/log/report.mjs +1 -10
  47. package/dist/log/report.mjs.map +1 -1
  48. package/dist/log.cjs +1 -1
  49. package/dist/log.cjs.map +1 -1
  50. package/dist/log.d.ts +6 -6
  51. package/dist/log.mjs +2 -2
  52. package/dist/log.mjs.map +1 -1
  53. package/dist/pipe.cjs +69 -26
  54. package/dist/pipe.cjs.map +1 -1
  55. package/dist/pipe.d.ts +178 -119
  56. package/dist/pipe.mjs +71 -24
  57. package/dist/pipe.mjs.map +1 -1
  58. package/dist/plugs/copy.cjs +15 -25
  59. package/dist/plugs/copy.cjs.map +2 -2
  60. package/dist/plugs/copy.d.ts +14 -13
  61. package/dist/plugs/copy.mjs +15 -17
  62. package/dist/plugs/copy.mjs.map +2 -2
  63. package/dist/plugs/coverage/analysis.d.ts +2 -2
  64. package/dist/plugs/coverage/report.cjs +1 -1
  65. package/dist/plugs/coverage/report.cjs.map +1 -1
  66. package/dist/plugs/coverage/report.d.ts +3 -3
  67. package/dist/plugs/coverage/report.mjs +1 -1
  68. package/dist/plugs/coverage/report.mjs.map +1 -1
  69. package/dist/plugs/coverage.cjs +20 -26
  70. package/dist/plugs/coverage.cjs.map +1 -1
  71. package/dist/plugs/coverage.d.ts +33 -30
  72. package/dist/plugs/coverage.mjs +21 -19
  73. package/dist/plugs/coverage.mjs.map +1 -1
  74. package/dist/plugs/debug.cjs +12 -36
  75. package/dist/plugs/debug.cjs.map +1 -1
  76. package/dist/plugs/debug.d.ts +4 -11
  77. package/dist/plugs/debug.mjs +30 -21
  78. package/dist/plugs/debug.mjs.map +1 -1
  79. package/dist/plugs/esbuild/fix-extensions.mjs +1 -1
  80. package/dist/plugs/esbuild/fix-extensions.mjs.map +1 -1
  81. package/dist/plugs/esbuild.cjs +14 -25
  82. package/dist/plugs/esbuild.cjs.map +1 -1
  83. package/dist/plugs/esbuild.d.ts +11 -16
  84. package/dist/plugs/esbuild.mjs +14 -17
  85. package/dist/plugs/esbuild.mjs.map +1 -1
  86. package/dist/plugs/eslint/runner.cjs +5 -6
  87. package/dist/plugs/eslint/runner.cjs.map +1 -1
  88. package/dist/plugs/eslint/runner.d.ts +6 -20
  89. package/dist/plugs/eslint/runner.mjs +6 -7
  90. package/dist/plugs/eslint/runner.mjs.map +1 -1
  91. package/dist/{task.cjs → plugs/eslint.cjs} +7 -24
  92. package/dist/plugs/eslint.cjs.map +6 -0
  93. package/dist/plugs/eslint.d.ts +34 -0
  94. package/dist/plugs/eslint.mjs +5 -0
  95. package/dist/plugs/eslint.mjs.map +6 -0
  96. package/dist/plugs/exec.cjs +20 -24
  97. package/dist/plugs/exec.cjs.map +1 -1
  98. package/dist/plugs/exec.d.ts +53 -53
  99. package/dist/plugs/exec.mjs +20 -23
  100. package/dist/plugs/exec.mjs.map +1 -1
  101. package/dist/plugs/filter.cjs +9 -19
  102. package/dist/plugs/filter.cjs.map +1 -1
  103. package/dist/plugs/filter.d.ts +21 -15
  104. package/dist/plugs/filter.mjs +10 -12
  105. package/dist/plugs/filter.mjs.map +1 -1
  106. package/dist/plugs/mocha/reporter.cjs +12 -6
  107. package/dist/plugs/mocha/reporter.cjs.map +1 -1
  108. package/dist/plugs/mocha/reporter.d.ts +0 -2
  109. package/dist/plugs/mocha/reporter.mjs +11 -4
  110. package/dist/plugs/mocha/reporter.mjs.map +1 -1
  111. package/dist/plugs/mocha/runner.cjs +4 -5
  112. package/dist/plugs/mocha/runner.cjs.map +1 -1
  113. package/dist/plugs/mocha/runner.d.ts +5 -31
  114. package/dist/plugs/mocha/runner.mjs +5 -6
  115. package/dist/plugs/mocha/runner.mjs.map +1 -1
  116. package/dist/plugs/mocha.cjs +22 -0
  117. package/dist/plugs/mocha.cjs.map +6 -0
  118. package/dist/plugs/mocha.d.ts +35 -0
  119. package/dist/plugs/mocha.mjs +5 -0
  120. package/dist/plugs/mocha.mjs.map +6 -0
  121. package/dist/plugs/rmf.cjs +4 -32
  122. package/dist/plugs/rmf.cjs.map +1 -1
  123. package/dist/plugs/rmf.d.ts +8 -12
  124. package/dist/plugs/rmf.mjs +25 -20
  125. package/dist/plugs/rmf.mjs.map +1 -1
  126. package/dist/plugs/tsc/compiler.d.ts +1 -1
  127. package/dist/plugs/tsc/options.d.ts +1 -1
  128. package/dist/plugs/tsc/report.d.ts +2 -2
  129. package/dist/plugs/tsc/runner.cjs +12 -11
  130. package/dist/plugs/tsc/runner.cjs.map +1 -1
  131. package/dist/plugs/tsc/runner.d.ts +4 -9
  132. package/dist/plugs/tsc/runner.mjs +12 -11
  133. package/dist/plugs/tsc/runner.mjs.map +1 -1
  134. package/dist/plugs/tsc.cjs +7 -0
  135. package/dist/plugs/tsc.cjs.map +6 -0
  136. package/dist/plugs/tsc.d.ts +36 -0
  137. package/dist/plugs/tsc.mjs +15 -0
  138. package/dist/plugs/tsc.mjs.map +6 -0
  139. package/dist/plugs.cjs +3 -5
  140. package/dist/plugs.cjs.map +1 -1
  141. package/dist/plugs.d.ts +10 -17
  142. package/dist/plugs.mjs +3 -5
  143. package/dist/plugs.mjs.map +1 -1
  144. package/dist/types.cjs +19 -0
  145. package/dist/types.cjs.map +6 -0
  146. package/dist/types.d.ts +71 -0
  147. package/dist/types.mjs +1 -0
  148. package/dist/types.mjs.map +6 -0
  149. package/dist/utils/caller.cjs +8 -11
  150. package/dist/utils/caller.cjs.map +2 -2
  151. package/dist/utils/caller.d.ts +2 -7
  152. package/dist/utils/caller.mjs +8 -11
  153. package/dist/utils/caller.mjs.map +2 -2
  154. package/dist/utils/options.cjs +4 -6
  155. package/dist/utils/options.cjs.map +1 -1
  156. package/dist/utils/options.d.ts +16 -15
  157. package/dist/utils/options.mjs +4 -6
  158. package/dist/utils/options.mjs.map +1 -1
  159. package/dist/utils/walk.d.ts +2 -2
  160. package/extra/cli.mjs +31 -20
  161. package/extra/ts-loader.mjs +6 -5
  162. package/package.json +8 -9
  163. package/src/async.ts +27 -19
  164. package/src/files.ts +6 -30
  165. package/src/fork.ts +35 -76
  166. package/src/helpers.ts +66 -99
  167. package/src/index.ts +10 -15
  168. package/src/log/colors.ts +4 -3
  169. package/src/log/emit.ts +4 -4
  170. package/src/log/logger.ts +12 -4
  171. package/src/log/options.ts +1 -1
  172. package/src/log/report.ts +8 -22
  173. package/src/log/spinner.ts +3 -3
  174. package/src/log.ts +9 -9
  175. package/src/paths.ts +1 -1
  176. package/src/pipe.ts +255 -170
  177. package/src/plugs/copy.ts +40 -31
  178. package/src/plugs/coverage/analysis.ts +4 -4
  179. package/src/plugs/coverage/report.ts +6 -5
  180. package/src/plugs/coverage.ts +64 -53
  181. package/src/plugs/debug.ts +28 -26
  182. package/src/plugs/esbuild/fix-extensions.ts +2 -2
  183. package/src/plugs/esbuild.ts +42 -46
  184. package/src/plugs/eslint/runner.ts +16 -31
  185. package/src/plugs/eslint.ts +42 -0
  186. package/src/plugs/exec.ts +93 -82
  187. package/src/plugs/filter.ts +42 -27
  188. package/src/plugs/mocha/reporter.ts +10 -5
  189. package/src/plugs/mocha/runner.ts +12 -38
  190. package/src/plugs/mocha.ts +41 -0
  191. package/src/plugs/rmf.ts +21 -25
  192. package/src/plugs/tsc/compiler.ts +1 -1
  193. package/src/plugs/tsc/options.ts +2 -2
  194. package/src/plugs/tsc/report.ts +2 -2
  195. package/src/plugs/tsc/runner.ts +24 -30
  196. package/src/plugs/tsc.ts +45 -0
  197. package/src/plugs.ts +10 -25
  198. package/src/types.ts +116 -0
  199. package/src/utils/caller.ts +11 -22
  200. package/src/utils/options.ts +49 -17
  201. package/src/utils/walk.ts +4 -4
  202. package/dist/run.cjs +0 -90
  203. package/dist/run.cjs.map +0 -6
  204. package/dist/run.d.ts +0 -89
  205. package/dist/run.mjs +0 -65
  206. package/dist/run.mjs.map +0 -6
  207. package/dist/task.cjs.map +0 -6
  208. package/dist/task.d.ts +0 -15
  209. package/dist/task.mjs +0 -14
  210. package/dist/task.mjs.map +0 -6
  211. package/src/run.ts +0 -159
  212. package/src/task.ts +0 -26
package/dist/async.cjs CHANGED
@@ -20,40 +20,41 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // async.ts
21
21
  var async_exports = {};
22
22
  __export(async_exports, {
23
- currentRun: () => currentRun,
24
- currentTask: () => currentTask,
23
+ currentContext: () => currentContext,
24
+ requireContext: () => requireContext,
25
25
  runAsync: () => runAsync,
26
26
  runningTasks: () => runningTasks
27
27
  });
28
28
  module.exports = __toCommonJS(async_exports);
29
29
  var import_node_async_hooks = require("node:async_hooks");
30
- function runAsync(run, task, callback) {
31
- return storage.run({ run, task }, () => {
32
- tasks.push(task);
33
- return callback().finally(() => {
34
- const index = tasks.lastIndexOf(task);
35
- if (index >= 0)
36
- tasks.splice(index, 1);
37
- });
30
+ var import_assert = require("./assert.cjs");
31
+ function runAsync(context, taskName, callback) {
32
+ return storage.run(context, async () => {
33
+ try {
34
+ tasks.add(taskName);
35
+ return await callback();
36
+ } finally {
37
+ tasks.delete(taskName);
38
+ }
38
39
  });
39
40
  }
40
- function currentTask() {
41
- var _a;
42
- return (_a = storage.getStore()) == null ? void 0 : _a.task;
41
+ function currentContext() {
42
+ return storage.getStore();
43
43
  }
44
- function currentRun() {
45
- var _a;
46
- return (_a = storage.getStore()) == null ? void 0 : _a.run;
44
+ function requireContext() {
45
+ const context = storage.getStore();
46
+ (0, import_assert.assert)(context, "Unable to retrieve current context");
47
+ return context;
47
48
  }
48
49
  function runningTasks() {
49
50
  return [...tasks].sort();
50
51
  }
51
52
  var storage = new import_node_async_hooks.AsyncLocalStorage();
52
- var tasks = [];
53
+ var tasks = /* @__PURE__ */ new Set();
53
54
  // Annotate the CommonJS export names for ESM import in node:
54
55
  0 && (module.exports = {
55
- currentRun,
56
- currentTask,
56
+ currentContext,
57
+ requireContext,
57
58
  runAsync,
58
59
  runningTasks
59
60
  });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/async.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAkC;AAW3B,SAAS,SAAY,KAAU,MAAc,UAAwC;AAC1F,SAAO,QAAQ,IAAI,EAAE,KAAK,KAAK,GAAG,MAAM;AACtC,UAAM,KAAK,IAAI;AACf,WAAO,SAAS,EAAE,QAAQ,MAAM;AAC9B,YAAM,QAAQ,MAAM,YAAY,IAAI;AACpC,UAAI,SAAS;AAAG,cAAM,OAAO,OAAO,CAAC;AAAA,IACvC,CAAC;AAAA,EACH,CAAC;AACH;AAMO,SAAS,cAAkC;AAzBlD;AA0BE,UAAO,aAAQ,SAAS,MAAjB,mBAAoB;AAC7B;AAMO,SAAS,aAA8B;AAjC9C;AAkCE,UAAO,aAAQ,SAAS,MAAjB,mBAAoB;AAC7B;AAKO,SAAS,eAAyB;AACvC,SAAO,CAAE,GAAG,KAAM,EAAE,KAAK;AAC3B;AAMA,IAAM,UAAU,IAAI,0CAA8C;AAClE,IAAM,QAAkB,CAAC;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAkC;AAClC,oBAAuB;AAWhB,SAAS,SACZ,SACA,UACA,UACU;AACZ,SAAO,QAAQ,IAAI,SAAS,YAAY;AACtC,QAAI;AACF,YAAM,IAAI,QAAQ;AAClB,aAAO,MAAM,SAAS;AAAA,IACxB,UAAE;AACA,YAAM,OAAO,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AACH;AAMO,SAAS,iBAAsC;AACpD,SAAO,QAAQ,SAAS;AAC1B;AAMO,SAAS,iBAA0B;AACxC,QAAM,UAAU,QAAQ,SAAS;AACjC,4BAAO,SAAS,oCAAoC;AACpD,SAAO;AACT;AAKO,SAAS,eAAyB;AACvC,SAAO,CAAE,GAAG,KAAM,EAAE,KAAK;AAC3B;AAMA,IAAM,UAAU,IAAI,0CAA2B;AAC/C,IAAM,QAAQ,oBAAI;",
5
5
  "names": []
6
6
  }
package/dist/async.d.ts CHANGED
@@ -1,19 +1,19 @@
1
- import { Run } from './run.js';
1
+ import { Context } from './pipe';
2
2
  /**
3
- * Run the specified `callback` associating the specified {@link Run} and task
3
+ * Run the specified `callback` associating the specified {@link Context} and task
4
4
  * name with the current asynchronous invocation context.
5
5
  */
6
- export declare function runAsync<T>(run: Run, task: string, callback: () => Promise<T>): Promise<T>;
6
+ export declare function runAsync<T>(context: Context, taskName: string, callback: () => Promise<T>): Promise<T>;
7
7
  /**
8
- * Returns the _task name_ associated with the current asynchronous invocation
9
- * context or `undefined`.
8
+ * Returns the {@link Context} associated with the current asynchronous
9
+ * invocation context or `undefined`.
10
10
  */
11
- export declare function currentTask(): string | undefined;
11
+ export declare function currentContext(): Context | undefined;
12
12
  /**
13
- * Returns the {@link Run} associated with the current asynchronous invocation
14
- * context or `undefined`.
13
+ * Returns the {@link Context} associated with the current asynchronous
14
+ * invocation context and fail if none was found.
15
15
  */
16
- export declare function currentRun(): Run | undefined;
16
+ export declare function requireContext(): Context;
17
17
  /**
18
18
  * Return an array of all _task names_ currently running
19
19
  */
package/dist/async.mjs CHANGED
@@ -1,31 +1,32 @@
1
1
  // async.ts
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
- function runAsync(run, task, callback) {
4
- return storage.run({ run, task }, () => {
5
- tasks.push(task);
6
- return callback().finally(() => {
7
- const index = tasks.lastIndexOf(task);
8
- if (index >= 0)
9
- tasks.splice(index, 1);
10
- });
3
+ import { assert } from "./assert.mjs";
4
+ function runAsync(context, taskName, callback) {
5
+ return storage.run(context, async () => {
6
+ try {
7
+ tasks.add(taskName);
8
+ return await callback();
9
+ } finally {
10
+ tasks.delete(taskName);
11
+ }
11
12
  });
12
13
  }
13
- function currentTask() {
14
- var _a;
15
- return (_a = storage.getStore()) == null ? void 0 : _a.task;
14
+ function currentContext() {
15
+ return storage.getStore();
16
16
  }
17
- function currentRun() {
18
- var _a;
19
- return (_a = storage.getStore()) == null ? void 0 : _a.run;
17
+ function requireContext() {
18
+ const context = storage.getStore();
19
+ assert(context, "Unable to retrieve current context");
20
+ return context;
20
21
  }
21
22
  function runningTasks() {
22
23
  return [...tasks].sort();
23
24
  }
24
25
  var storage = new AsyncLocalStorage();
25
- var tasks = [];
26
+ var tasks = /* @__PURE__ */ new Set();
26
27
  export {
27
- currentRun,
28
- currentTask,
28
+ currentContext,
29
+ requireContext,
29
30
  runAsync,
30
31
  runningTasks
31
32
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/async.ts"],
4
- "mappings": ";AAAA,SAAS,yBAAyB;AAW3B,SAAS,SAAY,KAAU,MAAc,UAAwC;AAC1F,SAAO,QAAQ,IAAI,EAAE,KAAK,KAAK,GAAG,MAAM;AACtC,UAAM,KAAK,IAAI;AACf,WAAO,SAAS,EAAE,QAAQ,MAAM;AAC9B,YAAM,QAAQ,MAAM,YAAY,IAAI;AACpC,UAAI,SAAS;AAAG,cAAM,OAAO,OAAO,CAAC;AAAA,IACvC,CAAC;AAAA,EACH,CAAC;AACH;AAMO,SAAS,cAAkC;AAzBlD;AA0BE,UAAO,aAAQ,SAAS,MAAjB,mBAAoB;AAC7B;AAMO,SAAS,aAA8B;AAjC9C;AAkCE,UAAO,aAAQ,SAAS,MAAjB,mBAAoB;AAC7B;AAKO,SAAS,eAAyB;AACvC,SAAO,CAAE,GAAG,KAAM,EAAE,KAAK;AAC3B;AAMA,IAAM,UAAU,IAAI,kBAA8C;AAClE,IAAM,QAAkB,CAAC;",
4
+ "mappings": ";AAAA,SAAS,yBAAyB;AAClC,SAAS,cAAc;AAWhB,SAAS,SACZ,SACA,UACA,UACU;AACZ,SAAO,QAAQ,IAAI,SAAS,YAAY;AACtC,QAAI;AACF,YAAM,IAAI,QAAQ;AAClB,aAAO,MAAM,SAAS;AAAA,IACxB,UAAE;AACA,YAAM,OAAO,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AACH;AAMO,SAAS,iBAAsC;AACpD,SAAO,QAAQ,SAAS;AAC1B;AAMO,SAAS,iBAA0B;AACxC,QAAM,UAAU,QAAQ,SAAS;AACjC,SAAO,SAAS,oCAAoC;AACpD,SAAO;AACT;AAKO,SAAS,eAAyB;AACvC,SAAO,CAAE,GAAG,KAAM,EAAE,KAAK;AAC3B;AAMA,IAAM,UAAU,IAAI,kBAA2B;AAC/C,IAAM,QAAQ,oBAAI;",
5
5
  "names": []
6
6
  }
package/dist/build.cjs CHANGED
@@ -21,136 +21,139 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var build_exports = {};
22
22
  __export(build_exports, {
23
23
  build: () => build,
24
- isBuild: () => isBuild
24
+ call: () => call
25
25
  });
26
26
  module.exports = __toCommonJS(build_exports);
27
27
  var import_assert = require("./assert.cjs");
28
28
  var import_async = require("./async.cjs");
29
29
  var import_log = require("./log.cjs");
30
- var import_paths = require("./paths.cjs");
31
30
  var import_pipe = require("./pipe.cjs");
32
- var import_run = require("./run.cjs");
33
- var import_task = require("./task.cjs");
34
31
  var import_caller = require("./utils/caller.cjs");
35
- var buildMarker = Symbol.for("plugjs:isBuild");
36
- function isBuild(build2) {
37
- return build2 && build2[buildMarker] === buildMarker;
38
- }
39
- function build(definition) {
40
- const buildFile = (0, import_caller.findCaller)(build).file;
41
- const buildDir = (0, import_paths.getAbsoluteParent)(buildFile);
42
- const tasks = {};
43
- const context = { buildFile, buildDir, tasks };
44
- const result = {};
45
- for (const name in definition) {
46
- const def = definition[name];
47
- const task = "task" in def ? def.task : new import_task.TaskImpl(context, def);
48
- const call = async (run) => {
49
- if (!run)
50
- run = run = new BuildRun(buildDir, buildFile, tasks);
51
- (0, import_assert.assert)(run instanceof BuildRun, "Incompatible Run specified");
52
- run.log.notice("Starting build...");
53
- const now = Date.now();
54
- let error = void 0;
55
- try {
56
- await run.call(name);
57
- } catch (err) {
58
- run.log.error(err);
59
- error = err;
60
- }
61
- try {
62
- await run.finish();
63
- if (error !== void 0)
64
- throw error;
65
- run.log.notice("Build completed", (0, import_log.$ms)(Date.now() - now));
66
- return run;
67
- } catch (error2) {
68
- run.log.error(`Build failed ${(0, import_log.$ms)(Date.now() - now)}`, error2);
69
- throw (0, import_assert.failure)();
70
- }
71
- };
72
- Object.defineProperty(call, "name", { enumerable: true, value: name });
73
- if (name.length > import_log.logOptions.taskLength) {
74
- import_log.logOptions.taskLength = name.length;
75
- }
76
- result[name] = Object.assign(call, { task });
77
- tasks[name] = task;
32
+ var import_options = require("./utils/options.cjs");
33
+ var PipeImpl = class extends import_pipe.Pipe {
34
+ constructor(context, _promise) {
35
+ super(context, () => _promise.then((result) => {
36
+ (0, import_assert.assert)(result, "Unable to extend pipe");
37
+ return result;
38
+ }));
39
+ this._promise = _promise;
78
40
  }
79
- Object.defineProperty(result, buildMarker, { value: buildMarker });
80
- return result;
81
- }
82
- var BuildRun = class extends import_run.RunImpl {
83
- constructor(buildDir, buildFile, _tasks, _stack = [], _cache = /* @__PURE__ */ new Map(), taskName = "") {
84
- super({ taskName, buildDir, buildFile });
85
- this._tasks = _tasks;
86
- this._stack = _stack;
87
- this._cache = _cache;
41
+ [Symbol.toStringTag] = "PipeImpl";
42
+ then(onfulfilled, onrejected) {
43
+ return this._promise.then(onfulfilled, onrejected);
88
44
  }
89
- async finish() {
90
- const names = [];
91
- const promises = [];
92
- for (const { name, promise } of this._cache.values()) {
93
- names.push(name);
94
- promises.push(promise);
95
- }
96
- const settlements = await Promise.allSettled(promises);
97
- const failures = settlements.reduce((failures2, settlement, i) => {
98
- if (settlement.status === "rejected") {
99
- const name = names[i];
100
- (0, import_log.getLogger)(name).error(settlement.reason);
101
- failures2.push(name);
102
- }
103
- return failures2;
104
- }, []);
105
- if (failures.length) {
106
- const message = `${failures.length === 1 ? "task has" : "tasks have"}`;
107
- const names2 = failures.map((task) => (0, import_log.$t)(task)).join((0, import_log.$gry)(", "));
108
- this.log.error(failures.length, message, "failed:", names2);
109
- throw (0, import_assert.failure)();
110
- }
45
+ catch(onrejected) {
46
+ return this._promise.catch(onrejected);
111
47
  }
112
- call(name) {
113
- const task = this._tasks[name];
114
- if (!task)
115
- (0, import_assert.fail)(`Task "${(0, import_log.$t)(name)}" does not exist`);
116
- (0, import_assert.assert)(!this._stack.includes(task), `Circular dependency running task "${(0, import_log.$t)(name)}"`);
117
- const cached = this._cache.get(task);
48
+ finally(onfinally) {
49
+ return this._promise.finally(onfinally);
50
+ }
51
+ };
52
+ var TaskImpl = class {
53
+ constructor(buildFile, tasks, props, _def) {
54
+ this.buildFile = buildFile;
55
+ this.tasks = tasks;
56
+ this.props = props;
57
+ this._def = _def;
58
+ }
59
+ call(state, taskName) {
60
+ (0, import_assert.assert)(!state.stack.includes(this), `Recursion detected calling ${(0, import_log.$t)(taskName)}`);
61
+ const cached = state.cache.get(this);
118
62
  if (cached)
119
- return cached.promise;
120
- const childRun = new BuildRun(
121
- task.context.buildDir,
122
- task.context.buildFile,
123
- { ...task.context.tasks, ...this._tasks },
124
- [...this._stack, task],
125
- this._cache,
126
- name
127
- );
128
- const promise = (0, import_async.runAsync)(childRun, name, () => childRun._run(name, task));
129
- this._cache.set(task, { name, promise });
63
+ return cached;
64
+ const props = Object.assign({}, this.props, state.props);
65
+ const tasks = Object.assign({}, this.tasks, state.tasks);
66
+ const stack = [...state.stack, this];
67
+ const cache = state.cache;
68
+ const context = new import_pipe.Context(this.buildFile, taskName);
69
+ const build2 = new Proxy({}, {
70
+ get(_, name) {
71
+ if (name in tasks) {
72
+ return () => {
73
+ const state2 = { stack, cache, tasks, props };
74
+ const promise2 = tasks[name].call(state2, name);
75
+ return new PipeImpl(context, promise2);
76
+ };
77
+ } else if (name in props) {
78
+ return props[name];
79
+ }
80
+ }
81
+ });
82
+ context.log.info("Running...");
83
+ const now = Date.now();
84
+ const promise = (0, import_async.runAsync)(context, taskName, async () => {
85
+ let result = await this._def.call(build2);
86
+ if (result && "run" in result)
87
+ result = await result.run();
88
+ return result || void 0;
89
+ }).then((result) => {
90
+ context.log.notice(`Success ${(0, import_log.$ms)(Date.now() - now)}`);
91
+ return result;
92
+ }).catch((error) => {
93
+ context.log.error(`Failure ${(0, import_log.$ms)(Date.now() - now)}`, error);
94
+ throw (0, import_assert.failure)();
95
+ });
96
+ cache.set(this, promise);
130
97
  return promise;
131
98
  }
132
- async _run(name, task) {
133
- const now = Date.now();
134
- this.log.notice(`Starting task ${(0, import_log.$t)(name)}...`);
135
- const thisBuild = {};
136
- for (const name2 in this._tasks) {
137
- thisBuild[name2] = () => {
138
- return new import_pipe.PipeImpl(this.call(name2), this);
139
- };
99
+ };
100
+ var buildMarker = Symbol.for("plugjs:isBuild");
101
+ function build(def) {
102
+ const buildFile = (0, import_caller.findCaller)(build);
103
+ const tasks = {};
104
+ const props = {};
105
+ for (const [key, val] of Object.entries(def)) {
106
+ let len = 0;
107
+ if (typeof val === "string") {
108
+ props[key] = val;
109
+ } else if (typeof val === "function") {
110
+ tasks[key] = new TaskImpl(buildFile, tasks, props, val);
111
+ len = key.length;
112
+ } else if (val instanceof TaskImpl) {
113
+ tasks[key] = val;
114
+ len = key.length;
140
115
  }
116
+ if (len > import_log.logOptions.taskLength)
117
+ import_log.logOptions.taskLength = len;
118
+ }
119
+ const call2 = async function call3(taskNames, overrideProps = {}) {
120
+ const logger = (0, import_log.getLogger)("");
121
+ const state = {
122
+ cache: /* @__PURE__ */ new Map(),
123
+ stack: [],
124
+ props: Object.assign({}, props, overrideProps),
125
+ tasks
126
+ };
127
+ logger.notice("Starting...");
128
+ const now = Date.now();
141
129
  try {
142
- const result = await task.call(thisBuild, this);
143
- this.log.notice(`Task ${(0, import_log.$t)(name)} completed`, (0, import_log.$ms)(Date.now() - now));
144
- return result;
130
+ for (const taskName of taskNames) {
131
+ if (taskName in tasks) {
132
+ await tasks[taskName].call(state, taskName);
133
+ } else {
134
+ (0, import_assert.fail)(`Task ${(0, import_log.$t)(taskName)} not found in build`);
135
+ }
136
+ }
137
+ logger.notice(`Build successful ${(0, import_log.$ms)(Date.now() - now)}`);
145
138
  } catch (error) {
146
- this.log.error(`Task ${(0, import_log.$t)(name)} failed ${(0, import_log.$ms)(Date.now() - now)}`, error);
139
+ logger.error(`Build failed ${(0, import_log.$ms)(Date.now() - now)}`, error);
147
140
  throw (0, import_assert.failure)();
148
141
  }
149
- }
150
- };
142
+ };
143
+ const compiled = Object.assign({}, props, tasks);
144
+ Object.defineProperty(compiled, buildMarker, { value: call2 });
145
+ return compiled;
146
+ }
147
+ function call(build2, ...args) {
148
+ const { params: tasks, options: props } = (0, import_options.parseOptions)(args, {});
149
+ const call2 = build2[buildMarker];
150
+ if (typeof call2 !== "function")
151
+ (0, import_assert.fail)("Unknown build type");
152
+ return call2(tasks, props);
153
+ }
151
154
  // Annotate the CommonJS export names for ESM import in node:
152
155
  0 && (module.exports = {
153
156
  build,
154
- isBuild
157
+ call
155
158
  });
156
159
  //# sourceMappingURL=build.cjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/build.ts"],
4
- "mappings": "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",
5
- "names": ["build", "error", "failures", "names", "name"]
4
+ "mappings": "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",
5
+ "names": ["build", "state", "promise", "call"]
6
6
  }
package/dist/build.d.ts CHANGED
@@ -1,56 +1,14 @@
1
- import { Files } from './files.js';
2
- import { AbsolutePath } from './paths.js';
3
- import { Pipe } from './pipe.js';
4
- import { Run } from './run.js';
5
- import { Task } from './task.js';
6
- /**
7
- * The {@link BuildContext} interface exposes the _internal_ representation of
8
- * a build file, including all {@link Task | Tasks}.
9
- */
10
- export declare type BuildContext = {
11
- /** The absolute file name of the build */
12
- readonly buildFile: AbsolutePath;
13
- /** For convenience, the directory of the build file */
14
- readonly buildDir: AbsolutePath;
15
- /** A record of all tasks keyed by name */
16
- readonly tasks: Readonly<Record<string, Task>>;
17
- };
18
- /**
19
- * A {@link TaskDefinition} is a _function_ defining a {@link Task}.
20
- */
21
- export declare type TaskDefinition<B> = (this: ThisBuild<B>, self: ThisBuild<B>, run: Run) => Files | undefined | void | Promise<Files | undefined | void>;
22
- /**
23
- * A {@link TaskCall} describes a _function_ calling a {@link Task}, and
24
- * it is exposed to outside users of the {@link Build}.
25
- */
26
- export declare type TaskCall<T extends Files | undefined> = ((run?: Run) => Promise<Run>) & {
27
- readonly task: Task<T>;
28
- };
29
- /**
30
- * A {@link Build} is a collection of {@link TaskCall | TaskCalls}, as produced
31
- * by the {@link build} function from a {@link BuildDefinition}.
32
- */
33
- export declare type Build<B> = {
34
- [K in keyof B]: B[K] extends TaskCall<infer T> ? TaskCall<T> : B[K] extends () => Files | Promise<Files> ? TaskCall<Files> : B[K] extends () => undefined | void | Promise<undefined | void> ? TaskCall<undefined> : never;
35
- };
36
- /**
37
- * The type supplied as `this` to a {@link TaskDefinition} when invoking it.
38
- */
39
- export declare type ThisBuild<B> = {
40
- [K in keyof B]: B[K] extends () => Files | Promise<Files> ? () => Pipe & Promise<Files> : B[K] extends () => undefined | void | Promise<undefined | void> ? () => Promise<undefined> : B[K] extends TaskCall<infer T> ? () => T : never;
41
- };
42
- /**
43
- * A {@link BuildDefinition} is a collection of
44
- * {@link TaskDefinition | TaskDefinitions} that the {@link build} function will
45
- * use to create a {@link Build}.
46
- *
47
- * A {@link BuildDefinition} can also include other {@link TaskCall | TaskCalls},
48
- * thus giving the ability to extend other {@link Build | Builds}.
49
- */
50
- export declare type BuildDefinition<B> = {
51
- [K in keyof B]: TaskDefinition<B> | TaskCall<Files | undefined>;
52
- };
53
- /** Check if the specified build is actually a {@link Build} */
54
- export declare function isBuild(build: any): build is Build<any>;
55
- /** Create a new {@link Build} from its {@link BuildDefinition}. */
56
- export declare function build<D extends BuildDefinition<D>>(definition: D & ThisType<ThisBuild<D>>): Build<D>;
1
+ import type { Build, BuildDef, Task, ThisBuild } from './types';
2
+ /** Compile a {@link BuildDef | build definition} into a {@link Build} */
3
+ export declare function build<D extends BuildDef, B extends ThisBuild<D>>(def: D & ThisType<B>): Build<D>;
4
+ /** Internal type identifying all _task names_ in a {@link Build} */
5
+ declare type TaskNames<B extends Build> = string & keyof {
6
+ [k in keyof B as B[k] extends Task ? k : never]?: B[k];
7
+ };
8
+ /** Internal type identifying all _property names_ in a {@link Build} */
9
+ declare type OverrideProps<B extends Build> = {
10
+ [k in keyof B as B[k] extends string ? k : never]?: string;
11
+ };
12
+ /** Serially invoke tasks in a {@link Build} optionally overriding properties */
13
+ export declare function call<B extends Build>(build: B, ...args: [...taskNames: [TaskNames<B>, ...TaskNames<B>[]]] | [...taskNames: [TaskNames<B>, ...TaskNames<B>[]], options: OverrideProps<B>]): Promise<void>;
14
+ export {};