@plugjs/plug 0.4.28 → 0.4.29

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 (52) hide show
  1. package/dist/async.cjs +3 -3
  2. package/dist/async.cjs.map +1 -1
  3. package/dist/async.d.ts +1 -1
  4. package/dist/async.mjs +3 -3
  5. package/dist/async.mjs.map +1 -1
  6. package/dist/build.cjs +2 -2
  7. package/dist/build.cjs.map +1 -1
  8. package/dist/build.mjs +3 -3
  9. package/dist/build.mjs.map +1 -1
  10. package/dist/cli.mjs +1 -1
  11. package/dist/fork.cjs +1 -1
  12. package/dist/fork.cjs.map +1 -1
  13. package/dist/fork.mjs +1 -1
  14. package/dist/fork.mjs.map +1 -1
  15. package/dist/helpers.cjs +15 -3
  16. package/dist/helpers.cjs.map +1 -1
  17. package/dist/helpers.d.ts +2 -2
  18. package/dist/helpers.mjs +17 -5
  19. package/dist/helpers.mjs.map +1 -1
  20. package/dist/logging/colors.cjs +5 -0
  21. package/dist/logging/colors.cjs.map +2 -2
  22. package/dist/logging/colors.d.ts +2 -0
  23. package/dist/logging/colors.mjs +4 -0
  24. package/dist/logging/colors.mjs.map +2 -2
  25. package/dist/logging/report.cjs +3 -3
  26. package/dist/logging/report.cjs.map +1 -1
  27. package/dist/logging/report.mjs +5 -5
  28. package/dist/logging/report.mjs.map +1 -1
  29. package/dist/logging/spinner.cjs +2 -2
  30. package/dist/logging/spinner.cjs.map +1 -1
  31. package/dist/logging/spinner.mjs +3 -3
  32. package/dist/logging/spinner.mjs.map +1 -1
  33. package/dist/utils/jsonc.cjs +76 -0
  34. package/dist/utils/jsonc.cjs.map +6 -0
  35. package/dist/utils/jsonc.d.ts +17 -0
  36. package/dist/utils/jsonc.mjs +50 -0
  37. package/dist/utils/jsonc.mjs.map +6 -0
  38. package/dist/utils.cjs +2 -0
  39. package/dist/utils.cjs.map +1 -1
  40. package/dist/utils.d.ts +1 -0
  41. package/dist/utils.mjs +1 -0
  42. package/dist/utils.mjs.map +1 -1
  43. package/package.json +2 -1
  44. package/src/async.ts +2 -3
  45. package/src/build.ts +3 -3
  46. package/src/fork.ts +1 -1
  47. package/src/helpers.ts +18 -6
  48. package/src/logging/colors.ts +11 -0
  49. package/src/logging/report.ts +5 -5
  50. package/src/logging/spinner.ts +3 -3
  51. package/src/utils/jsonc.ts +62 -0
  52. package/src/utils.ts +1 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/logging/report.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["tag"]
6
6
  }
@@ -79,9 +79,9 @@ function spin() {
79
79
  return;
80
80
  const pad = "".padStart(_taskLength, " ");
81
81
  const names = tasks.map((task2) => (0, import_colors.$t)(task2)).join((0, import_colors.$gry)(", "));
82
- const task = tasks.length > 1 ? "tasks" : "task";
82
+ const task = (0, import_colors.$plur)(tasks.length, "task", "tasks");
83
83
  _nextSpin = ++_nextSpin % _spins.length;
84
- _output.write(`${zapSpinner}${pad} ${_spins[_nextSpin]} Running ${tasks.length} ${task}: ${(0, import_colors.$gry)(names)}`);
84
+ _output.write(`${zapSpinner}${pad} ${_spins[_nextSpin]} Running ${task}: ${(0, import_colors.$gry)(names)}`);
85
85
  }
86
86
  function setupSpinner() {
87
87
  if (_interval)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/logging/spinner.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA6B;AAC7B,oBAA+B;AAC/B,qBAA2B;AAKpB,IAAM,aAAa;AAK1B,IAAI,UAAU,0BAAW;AACzB,IAAI,UAAU,0BAAW;AACzB,IAAI,UAAU,0BAAW;AACzB,IAAI,WAAW,0BAAW;AAC1B,IAAI,cAAc,0BAAW;AAC7B,0BAAW,GAAG,WAAW,CAAC,EAAE,QAAQ,QAAQ,QAAQ,SAAS,WAAW,MAAM;AAC5E,YAAU;AACV,YAAU;AACV,YAAU;AACV,aAAW;AACX,gBAAc;AACd,eAAa;AACf,CAAC;AAKD,IAAM,SAAS;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AACf;AAGA,IAAI,YAAY;AAEhB,IAAI;AAGJ,SAAS,OAAa;AACpB,MAAI,CAAE;AAAS,WAAO,cAAc,SAAS;AAC7C,MAAI,CAAE;AAAU,WAAO,cAAc,SAAS;AAE9C,QAAM,YAAQ,2BAAa;AAC3B,MAAI,CAAE,MAAM;AAAQ;AAEpB,QAAM,MAAM,GAAG,SAAS,aAAa,GAAG;AACxC,QAAM,QAAQ,MAAM,IAAI,CAACA,cAAS,kBAAGA,KAAI,CAAC,EAAE,SAAK,oBAAK,IAAI,CAAC;AAE3D,QAAM,OAAO,MAAM,SAAS,IAAI,UAAU;AAE1C,cAAa,EAAG,YAAa,OAAO;AAEpC,UAAQ,MAAM,GAAG,UAAU,GAAG,GAAG,IAAI,OAAO,SAAS,CAAC,aAAa,MAAM,MAAM,IAAI,IAAI,SAAK,oBAAK,KAAK,CAAC,EAAE;AAC3G;AAGO,SAAS,eAAqB;AACnC,MAAI;AAAW,kBAAc,SAAS;AACtC,MAAI,WAAW,YAAa,YAAY,SAAU;AAChD,gBAAY,YAAY,MAAM,GAAG,EAAE,MAAM;AAAA,EAC3C;AACF;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA6B;AAC7B,oBAAsC;AACtC,qBAA2B;AAKpB,IAAM,aAAa;AAK1B,IAAI,UAAU,0BAAW;AACzB,IAAI,UAAU,0BAAW;AACzB,IAAI,UAAU,0BAAW;AACzB,IAAI,WAAW,0BAAW;AAC1B,IAAI,cAAc,0BAAW;AAC7B,0BAAW,GAAG,WAAW,CAAC,EAAE,QAAQ,QAAQ,QAAQ,SAAS,WAAW,MAAM;AAC5E,YAAU;AACV,YAAU;AACV,YAAU;AACV,aAAW;AACX,gBAAc;AACd,eAAa;AACf,CAAC;AAKD,IAAM,SAAS;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AAAA,MACb,oBAAK,QAAQ;AAAA;AACf;AAGA,IAAI,YAAY;AAEhB,IAAI;AAGJ,SAAS,OAAa;AACpB,MAAI,CAAE;AAAS,WAAO,cAAc,SAAS;AAC7C,MAAI,CAAE;AAAU,WAAO,cAAc,SAAS;AAE9C,QAAM,YAAQ,2BAAa;AAC3B,MAAI,CAAE,MAAM;AAAQ;AAEpB,QAAM,MAAM,GAAG,SAAS,aAAa,GAAG;AACxC,QAAM,QAAQ,MAAM,IAAI,CAACA,cAAS,kBAAGA,KAAI,CAAC,EAAE,SAAK,oBAAK,IAAI,CAAC;AAE3D,QAAM,WAAO,qBAAM,MAAM,QAAQ,QAAQ,OAAO;AAEhD,cAAa,EAAG,YAAa,OAAO;AAEpC,UAAQ,MAAM,GAAG,UAAU,GAAG,GAAG,IAAI,OAAO,SAAS,CAAC,aAAa,IAAI,SAAK,oBAAK,KAAK,CAAC,EAAE;AAC3F;AAGO,SAAS,eAAqB;AACnC,MAAI;AAAW,kBAAc,SAAS;AACtC,MAAI,WAAW,YAAa,YAAY,SAAU;AAChD,gBAAY,YAAY,MAAM,GAAG,EAAE,MAAM;AAAA,EAC3C;AACF;",
5
5
  "names": ["task"]
6
6
  }
@@ -1,6 +1,6 @@
1
1
  // logging/spinner.ts
2
2
  import { runningTasks } from "../async.mjs";
3
- import { $cyn, $gry, $t } from "./colors.mjs";
3
+ import { $cyn, $gry, $plur, $t } from "./colors.mjs";
4
4
  import { logOptions } from "./options.mjs";
5
5
  var zapSpinner = "\x1B[0G\x1B[2K";
6
6
  var _output = logOptions.output;
@@ -54,9 +54,9 @@ function spin() {
54
54
  return;
55
55
  const pad = "".padStart(_taskLength, " ");
56
56
  const names = tasks.map((task2) => $t(task2)).join($gry(", "));
57
- const task = tasks.length > 1 ? "tasks" : "task";
57
+ const task = $plur(tasks.length, "task", "tasks");
58
58
  _nextSpin = ++_nextSpin % _spins.length;
59
- _output.write(`${zapSpinner}${pad} ${_spins[_nextSpin]} Running ${tasks.length} ${task}: ${$gry(names)}`);
59
+ _output.write(`${zapSpinner}${pad} ${_spins[_nextSpin]} Running ${task}: ${$gry(names)}`);
60
60
  }
61
61
  function setupSpinner() {
62
62
  if (_interval)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/logging/spinner.ts"],
4
- "mappings": ";AAEA,SAAS,oBAAoB;AAC7B,SAAS,MAAM,MAAM,UAAU;AAC/B,SAAS,kBAAkB;AAKpB,IAAM,aAAa;AAK1B,IAAI,UAAU,WAAW;AACzB,IAAI,UAAU,WAAW;AACzB,IAAI,UAAU,WAAW;AACzB,IAAI,WAAW,WAAW;AAC1B,IAAI,cAAc,WAAW;AAC7B,WAAW,GAAG,WAAW,CAAC,EAAE,QAAQ,QAAQ,QAAQ,SAAS,WAAW,MAAM;AAC5E,YAAU;AACV,YAAU;AACV,YAAU;AACV,aAAW;AACX,gBAAc;AACd,eAAa;AACf,CAAC;AAKD,IAAM,SAAS;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AACf;AAGA,IAAI,YAAY;AAEhB,IAAI;AAGJ,SAAS,OAAa;AACpB,MAAI,CAAE;AAAS,WAAO,cAAc,SAAS;AAC7C,MAAI,CAAE;AAAU,WAAO,cAAc,SAAS;AAE9C,QAAM,QAAQ,aAAa;AAC3B,MAAI,CAAE,MAAM;AAAQ;AAEpB,QAAM,MAAM,GAAG,SAAS,aAAa,GAAG;AACxC,QAAM,QAAQ,MAAM,IAAI,CAACA,UAAS,GAAGA,KAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;AAE3D,QAAM,OAAO,MAAM,SAAS,IAAI,UAAU;AAE1C,cAAa,EAAG,YAAa,OAAO;AAEpC,UAAQ,MAAM,GAAG,UAAU,GAAG,GAAG,IAAI,OAAO,SAAS,CAAC,aAAa,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,EAAE;AAC3G;AAGO,SAAS,eAAqB;AACnC,MAAI;AAAW,kBAAc,SAAS;AACtC,MAAI,WAAW,YAAa,YAAY,SAAU;AAChD,gBAAY,YAAY,MAAM,GAAG,EAAE,MAAM;AAAA,EAC3C;AACF;",
4
+ "mappings": ";AAEA,SAAS,oBAAoB;AAC7B,SAAS,MAAM,MAAM,OAAO,UAAU;AACtC,SAAS,kBAAkB;AAKpB,IAAM,aAAa;AAK1B,IAAI,UAAU,WAAW;AACzB,IAAI,UAAU,WAAW;AACzB,IAAI,UAAU,WAAW;AACzB,IAAI,WAAW,WAAW;AAC1B,IAAI,cAAc,WAAW;AAC7B,WAAW,GAAG,WAAW,CAAC,EAAE,QAAQ,QAAQ,QAAQ,SAAS,WAAW,MAAM;AAC5E,YAAU;AACV,YAAU;AACV,YAAU;AACV,aAAW;AACX,gBAAc;AACd,eAAa;AACf,CAAC;AAKD,IAAM,SAAS;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AAAA,EACb,KAAK,QAAQ;AAAA;AACf;AAGA,IAAI,YAAY;AAEhB,IAAI;AAGJ,SAAS,OAAa;AACpB,MAAI,CAAE;AAAS,WAAO,cAAc,SAAS;AAC7C,MAAI,CAAE;AAAU,WAAO,cAAc,SAAS;AAE9C,QAAM,QAAQ,aAAa;AAC3B,MAAI,CAAE,MAAM;AAAQ;AAEpB,QAAM,MAAM,GAAG,SAAS,aAAa,GAAG;AACxC,QAAM,QAAQ,MAAM,IAAI,CAACA,UAAS,GAAGA,KAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;AAE3D,QAAM,OAAO,MAAM,MAAM,QAAQ,QAAQ,OAAO;AAEhD,cAAa,EAAG,YAAa,OAAO;AAEpC,UAAQ,MAAM,GAAG,UAAU,GAAG,GAAG,IAAI,OAAO,SAAS,CAAC,aAAa,IAAI,KAAK,KAAK,KAAK,CAAC,EAAE;AAC3F;AAGO,SAAS,eAAqB;AACnC,MAAI;AAAW,kBAAc,SAAS;AACtC,MAAI,WAAW,YAAa,YAAY,SAAU;AAChD,gBAAY,YAAY,MAAM,GAAG,EAAE,MAAM;AAAA,EAC3C;AACF;",
5
5
  "names": ["task"]
6
6
  }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // utils/jsonc.ts
21
+ var jsonc_exports = {};
22
+ __export(jsonc_exports, {
23
+ JsoncError: () => JsoncError,
24
+ parseJsonc: () => parseJsonc
25
+ });
26
+ module.exports = __toCommonJS(jsonc_exports);
27
+ var import_node_os = require("node:os");
28
+ var import_jsonc_parser = require("jsonc-parser");
29
+ var import_colors = require("../logging/colors.cjs");
30
+ var JsoncError = class extends Error {
31
+ constructor(errors) {
32
+ const message = [`Found ${(0, import_colors.$plur)(errors.length, "error", "errors", false)} parsing`];
33
+ for (const { code, line, column } of errors) {
34
+ message.push(` ${code} at line ${line}, column ${column}`);
35
+ }
36
+ super(message.join("\n"));
37
+ this.errors = errors;
38
+ }
39
+ };
40
+ function parseJsonc(data, options = {}) {
41
+ const { disallowComments = false, allowTrailingComma = true } = options;
42
+ if (!data)
43
+ return void 0;
44
+ const errors = [];
45
+ const result = (0, import_jsonc_parser.parse)(data, errors, {
46
+ disallowComments,
47
+ allowTrailingComma,
48
+ allowEmptyContent: false
49
+ });
50
+ if (errors.length === 0)
51
+ return result;
52
+ const offsets = data.split(import_node_os.EOL).reduce(({ offsets: offsets2, offset }, line) => {
53
+ offset += line.length + import_node_os.EOL.length;
54
+ offsets2.push(offset);
55
+ return { offsets: offsets2, offset };
56
+ }, { offset: 0, offsets: [0] }).offsets;
57
+ function resolveOffset(offset) {
58
+ for (let i = offsets.length - 1; i > 0; i--) {
59
+ const lineOffset = offsets[i];
60
+ if (offset < lineOffset)
61
+ continue;
62
+ return { line: i + 1, column: offset - lineOffset + 1 };
63
+ }
64
+ return { line: 1, column: offset + 1 };
65
+ }
66
+ throw new JsoncError(errors.map((error) => {
67
+ const code = (0, import_jsonc_parser.printParseErrorCode)(error.error);
68
+ return { code, ...resolveOffset(error.offset) };
69
+ }));
70
+ }
71
+ // Annotate the CommonJS export names for ESM import in node:
72
+ 0 && (module.exports = {
73
+ JsoncError,
74
+ parseJsonc
75
+ });
76
+ //# sourceMappingURL=jsonc.cjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/jsonc.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AAEpB,0BAA2C;AAE3C,oBAAsB;AASf,IAAM,aAAN,cAAyB,MAAM;AAAA,EACpC,YAAmB,QAA2D;AAC5E,UAAM,UAAU,CAAE,aAAS,qBAAM,OAAO,QAAQ,SAAS,UAAU,KAAK,CAAC,UAAW;AAEpF,eAAW,EAAE,MAAM,MAAM,OAAO,KAAK,QAAQ;AAC3C,cAAQ,KAAK,KAAK,IAAI,YAAY,IAAI,YAAY,MAAM,EAAE;AAAA,IAC5D;AAEA,UAAM,QAAQ,KAAK,IAAI,CAAC;AAPP;AAAA,EAQnB;AACF;AAEO,SAAS,WACZ,MACA,UAAwB,CAAC,GACxB;AACH,QAAM,EAAE,mBAAmB,OAAO,qBAAqB,KAAK,IAAI;AAEhE,MAAI,CAAE;AAAM,WAAO;AACnB,QAAM,SAAuB,CAAC;AAC9B,QAAM,aAAS,2BAAM,MAAM,QAAQ;AAAA,IACjC;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EACrB,CAAC;AAED,MAAI,OAAO,WAAW;AAAG,WAAO;AAEhC,QAAM,UAAU,KAAK,MAAM,kBAAG,EAAE,OAAO,CAAC,EAAE,SAAAA,UAAS,OAAO,GAAG,SAAS;AACpE,cAAU,KAAK,SAAS,mBAAI;AAC5B,IAAAA,SAAQ,KAAK,MAAM;AACnB,WAAO,EAAE,SAAAA,UAAS,OAAO;AAAA,EAC3B,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAE,CAAE,EAAE,CAAC,EAAE;AAElC,WAAS,cAAc,QAAkD;AACvE,aAAS,IAAI,QAAQ,SAAS,GAAG,IAAI,GAAG,KAAK;AAC3C,YAAM,aAAa,QAAQ,CAAC;AAC5B,UAAI,SAAS;AAAY;AACzB,aAAO,EAAE,MAAM,IAAI,GAAG,QAAQ,SAAS,aAAa,EAAE;AAAA,IACxD;AAEA,WAAO,EAAE,MAAM,GAAG,QAAQ,SAAS,EAAE;AAAA,EACvC;AAEA,QAAM,IAAI,WAAW,OAAO,IAAI,CAAC,UAAU;AACzC,UAAM,WAAO,yCAAoB,MAAM,KAAK;AAC5C,WAAO,EAAE,MAAM,GAAG,cAAc,MAAM,MAAM,EAAE;AAAA,EAChD,CAAC,CAAC;AACJ;",
5
+ "names": ["offsets"]
6
+ }
@@ -0,0 +1,17 @@
1
+ export interface JsoncOptions {
2
+ disallowComments?: boolean;
3
+ allowTrailingComma?: boolean;
4
+ }
5
+ export declare class JsoncError extends Error {
6
+ errors: {
7
+ code: string;
8
+ line: number;
9
+ column: number;
10
+ }[];
11
+ constructor(errors: {
12
+ code: string;
13
+ line: number;
14
+ column: number;
15
+ }[]);
16
+ }
17
+ export declare function parseJsonc<T = any>(data: string | null | undefined, options?: JsoncOptions): T;
@@ -0,0 +1,50 @@
1
+ // utils/jsonc.ts
2
+ import { EOL } from "node:os";
3
+ import { parse, printParseErrorCode } from "jsonc-parser";
4
+ import { $plur } from "../logging/colors.mjs";
5
+ var JsoncError = class extends Error {
6
+ constructor(errors) {
7
+ const message = [`Found ${$plur(errors.length, "error", "errors", false)} parsing`];
8
+ for (const { code, line, column } of errors) {
9
+ message.push(` ${code} at line ${line}, column ${column}`);
10
+ }
11
+ super(message.join("\n"));
12
+ this.errors = errors;
13
+ }
14
+ };
15
+ function parseJsonc(data, options = {}) {
16
+ const { disallowComments = false, allowTrailingComma = true } = options;
17
+ if (!data)
18
+ return void 0;
19
+ const errors = [];
20
+ const result = parse(data, errors, {
21
+ disallowComments,
22
+ allowTrailingComma,
23
+ allowEmptyContent: false
24
+ });
25
+ if (errors.length === 0)
26
+ return result;
27
+ const offsets = data.split(EOL).reduce(({ offsets: offsets2, offset }, line) => {
28
+ offset += line.length + EOL.length;
29
+ offsets2.push(offset);
30
+ return { offsets: offsets2, offset };
31
+ }, { offset: 0, offsets: [0] }).offsets;
32
+ function resolveOffset(offset) {
33
+ for (let i = offsets.length - 1; i > 0; i--) {
34
+ const lineOffset = offsets[i];
35
+ if (offset < lineOffset)
36
+ continue;
37
+ return { line: i + 1, column: offset - lineOffset + 1 };
38
+ }
39
+ return { line: 1, column: offset + 1 };
40
+ }
41
+ throw new JsoncError(errors.map((error) => {
42
+ const code = printParseErrorCode(error.error);
43
+ return { code, ...resolveOffset(error.offset) };
44
+ }));
45
+ }
46
+ export {
47
+ JsoncError,
48
+ parseJsonc
49
+ };
50
+ //# sourceMappingURL=jsonc.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/jsonc.ts"],
4
+ "mappings": ";AAAA,SAAS,WAAW;AAEpB,SAAS,OAAO,2BAA2B;AAE3C,SAAS,aAAa;AASf,IAAM,aAAN,cAAyB,MAAM;AAAA,EACpC,YAAmB,QAA2D;AAC5E,UAAM,UAAU,CAAE,SAAS,MAAM,OAAO,QAAQ,SAAS,UAAU,KAAK,CAAC,UAAW;AAEpF,eAAW,EAAE,MAAM,MAAM,OAAO,KAAK,QAAQ;AAC3C,cAAQ,KAAK,KAAK,IAAI,YAAY,IAAI,YAAY,MAAM,EAAE;AAAA,IAC5D;AAEA,UAAM,QAAQ,KAAK,IAAI,CAAC;AAPP;AAAA,EAQnB;AACF;AAEO,SAAS,WACZ,MACA,UAAwB,CAAC,GACxB;AACH,QAAM,EAAE,mBAAmB,OAAO,qBAAqB,KAAK,IAAI;AAEhE,MAAI,CAAE;AAAM,WAAO;AACnB,QAAM,SAAuB,CAAC;AAC9B,QAAM,SAAS,MAAM,MAAM,QAAQ;AAAA,IACjC;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EACrB,CAAC;AAED,MAAI,OAAO,WAAW;AAAG,WAAO;AAEhC,QAAM,UAAU,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,EAAE,SAAAA,UAAS,OAAO,GAAG,SAAS;AACpE,cAAU,KAAK,SAAS,IAAI;AAC5B,IAAAA,SAAQ,KAAK,MAAM;AACnB,WAAO,EAAE,SAAAA,UAAS,OAAO;AAAA,EAC3B,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAE,CAAE,EAAE,CAAC,EAAE;AAElC,WAAS,cAAc,QAAkD;AACvE,aAAS,IAAI,QAAQ,SAAS,GAAG,IAAI,GAAG,KAAK;AAC3C,YAAM,aAAa,QAAQ,CAAC;AAC5B,UAAI,SAAS;AAAY;AACzB,aAAO,EAAE,MAAM,IAAI,GAAG,QAAQ,SAAS,aAAa,EAAE;AAAA,IACxD;AAEA,WAAO,EAAE,MAAM,GAAG,QAAQ,SAAS,EAAE;AAAA,EACvC;AAEA,QAAM,IAAI,WAAW,OAAO,IAAI,CAAC,UAAU;AACzC,UAAM,OAAO,oBAAoB,MAAM,KAAK;AAC5C,WAAO,EAAE,MAAM,GAAG,cAAc,MAAM,MAAM,EAAE;AAAA,EAChD,CAAC,CAAC;AACJ;",
5
+ "names": ["offsets"]
6
+ }
package/dist/utils.cjs CHANGED
@@ -19,6 +19,7 @@ var utils_exports = {};
19
19
  module.exports = __toCommonJS(utils_exports);
20
20
  __reExport(utils_exports, require("./utils/diff.cjs"), module.exports);
21
21
  __reExport(utils_exports, require("./utils/exec.cjs"), module.exports);
22
+ __reExport(utils_exports, require("./utils/jsonc.cjs"), module.exports);
22
23
  __reExport(utils_exports, require("./utils/match.cjs"), module.exports);
23
24
  __reExport(utils_exports, require("./utils/options.cjs"), module.exports);
24
25
  __reExport(utils_exports, require("./utils/singleton.cjs"), module.exports);
@@ -27,6 +28,7 @@ __reExport(utils_exports, require("./utils/walk.cjs"), module.exports);
27
28
  0 && (module.exports = {
28
29
  ...require("./utils/diff.cjs"),
29
30
  ...require("./utils/exec.cjs"),
31
+ ...require("./utils/jsonc.cjs"),
30
32
  ...require("./utils/match.cjs"),
31
33
  ...require("./utils/options.cjs"),
32
34
  ...require("./utils/singleton.cjs"),
@@ -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,kCAJd;AAKA,0BAAc,6BALd;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,6BAAd;AACA,0BAAc,6BADd;AAEA,0BAAc,8BAFd;AAGA,0BAAc,8BAHd;AAIA,0BAAc,gCAJd;AAKA,0BAAc,kCALd;AAMA,0BAAc,6BANd;",
5
5
  "names": []
6
6
  }
package/dist/utils.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './utils/diff';
2
2
  export * from './utils/exec';
3
+ export * from './utils/jsonc';
3
4
  export * from './utils/match';
4
5
  export * from './utils/options';
5
6
  export * from './utils/singleton';
package/dist/utils.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  // utils.ts
2
2
  export * from "./utils/diff.mjs";
3
3
  export * from "./utils/exec.mjs";
4
+ export * from "./utils/jsonc.mjs";
4
5
  export * from "./utils/match.mjs";
5
6
  export * from "./utils/options.mjs";
6
7
  export * from "./utils/singleton.mjs";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/utils.ts"],
4
- "mappings": ";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "mappings": ";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plugjs/plug",
3
- "version": "0.4.28",
3
+ "version": "0.4.29",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -116,6 +116,7 @@
116
116
  "@plugjs/tsrun": "^0.4.19",
117
117
  "@types/node": "<19",
118
118
  "esbuild": "^0.19.2",
119
+ "jsonc-parser": "^3.2.0",
119
120
  "picomatch": "^2.3.1"
120
121
  },
121
122
  "devDependencies": {
package/src/async.ts CHANGED
@@ -15,15 +15,14 @@ import type { Context } from './pipe'
15
15
  */
16
16
  export function runAsync<T>(
17
17
  context: Context,
18
- taskName: string,
19
18
  callback: () => Promise<T>,
20
19
  ): Promise<T> {
21
20
  return storage.run(context, async () => {
22
21
  try {
23
- tasks.add(taskName)
22
+ tasks.add(context.taskName)
24
23
  return await callback()
25
24
  } finally {
26
- tasks.delete(taskName)
25
+ tasks.delete(context.taskName)
27
26
  }
28
27
  })
29
28
  }
package/src/build.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { assert } from './asserts'
2
2
  import { runAsync } from './async'
3
- import { $gry, $ms, $p, $t, getLogger, logOptions } from './logging'
3
+ import { $gry, $ms, $p, $plur, $t, getLogger, logOptions } from './logging'
4
4
  import { Context, ContextPromises, PipeImpl } from './pipe'
5
5
  import { findCaller } from './utils/caller'
6
6
  import { getSingleton } from './utils/singleton'
@@ -134,7 +134,7 @@ class TaskImpl<R extends Result> implements Task<R> {
134
134
  const now = Date.now()
135
135
 
136
136
  /* Run asynchronously in an asynchronous context */
137
- const promise = runAsync(context, taskName, async () => {
137
+ const promise = runAsync(context, async () => {
138
138
  return await this._def.call(build) || undefined
139
139
  }).then(async (result) => {
140
140
  const level = taskName.startsWith('_') ? 'info' : 'notice'
@@ -205,7 +205,7 @@ export function build<
205
205
  } catch (error) {
206
206
  if (state.fails.size) {
207
207
  logger.error('')
208
- logger.error(state.fails.size, state.fails.size === 1 ? 'task' : 'tasks', 'failed:')
208
+ logger.error($plur(state.fails.size, 'task', 'tasks'), 'failed:')
209
209
  state.fails.forEach((task) => logger.error($gry('*'), $t(task.name)))
210
210
  logger.error('')
211
211
  }
package/src/fork.ts CHANGED
@@ -209,7 +209,7 @@ if ((process.argv[1] === requireFilename(__fileurl)) && (process.send)) {
209
209
  context.log.debug('Message from parent process for PID', process.pid, message)
210
210
 
211
211
  /* Contextualize this run, and go! */
212
- const result = runAsync(context, taskName, async () => {
212
+ const result = runAsync(context, async () => {
213
213
  /* Check that we have a proper script file name */
214
214
  assert(resolveFile(scriptFile), `Script file ${$p(scriptFile)} not found`)
215
215
  const script = await import(scriptFile)
package/src/helpers.ts CHANGED
@@ -2,11 +2,11 @@ import { mkdtempSync, readFileSync } from 'node:fs'
2
2
  import { tmpdir } from 'node:os'
3
3
  import { join } from 'node:path'
4
4
 
5
- import { assert, assertPromises } from './asserts'
5
+ import { BuildFailure, assert, assertPromises } from './asserts'
6
6
  import { requireContext } from './async'
7
7
  import { Files } from './files'
8
8
  import { rm } from './fs'
9
- import { $p, log } from './logging'
9
+ import { $gry, $p, $plur, $wht, $ylw, log } from './logging'
10
10
  import {
11
11
  commonPath,
12
12
  getAbsoluteParent,
@@ -16,6 +16,7 @@ import {
16
16
  } from './paths'
17
17
  import { PipeImpl } from './pipe'
18
18
  import { RunBuild } from './plugs/build'
19
+ import { JsoncError, parseJsonc } from './utils'
19
20
  import { execChild } from './utils/exec'
20
21
  import { parseOptions } from './utils/options'
21
22
  import { walk } from './utils/walk'
@@ -260,11 +261,11 @@ export function exec(
260
261
  }
261
262
 
262
263
  /**
263
- * Read and parse a JSON file, throwing an error if not found.
264
+ * Read and parse a JSON/JSONC file, throwing an error if not found.
264
265
  *
265
266
  * @params file The JSON file to parse
266
267
  */
267
- export function parseJson(file: string): any {
268
+ export function parseJson(file: string, strict: boolean = false): any {
268
269
  const jsonFile = requireContext().resolve(file)
269
270
  let jsonText: string
270
271
  try {
@@ -276,8 +277,19 @@ export function parseJson(file: string): any {
276
277
  }
277
278
 
278
279
  try {
279
- return JSON.parse(jsonText)
280
+ return parseJsonc(jsonText, {
281
+ disallowComments: strict,
282
+ allowTrailingComma: ! strict,
283
+ })
280
284
  } catch (error) {
281
- log.fail(`Error parsing ${$p(jsonFile)}`, error)
285
+ if (error instanceof JsoncError) {
286
+ const errors = error.errors
287
+ log.error(`Found ${$plur(errors.length, 'error', 'errors')} parsing ${$p(jsonFile)}`)
288
+ for (const e of errors) {
289
+ log.error(` ${$wht(e.code)} ${$gry('at line')} ${$ylw(e.line)}${$gry(', column')} ${$ylw(e.column)}`)
290
+ }
291
+
292
+ throw new BuildFailure()
293
+ } else throw error
282
294
  }
283
295
  }
@@ -127,3 +127,14 @@ export function $wht(string: any): string {
127
127
  export function $und(string: any): string {
128
128
  return colorize(und, string)
129
129
  }
130
+
131
+ /** Pluralize (not really colors, but peace, love unity and respect). */
132
+ export function $plur(number: number, singular: string, plural: string, colorize: boolean = _colors): string {
133
+ return colorize ?
134
+ number === 1 ?
135
+ `${$ylw(number)} ${singular}` :
136
+ `${$ylw(number)} ${plural}` :
137
+ number === 1 ?
138
+ `${number} ${singular}` :
139
+ `${number} ${plural}`
140
+ }
@@ -1,9 +1,9 @@
1
1
  import { BuildFailure } from '../asserts'
2
2
  import { readFile } from '../fs'
3
- import { $blu, $cyn, $gry, $red, $und, $wht, $ylw } from './colors'
4
- import { ERROR, logLevels, NOTICE, WARN } from './levels'
5
- import { logOptions } from './options'
3
+ import { $blu, $cyn, $gry, $plur, $red, $und, $wht, $ylw } from './colors'
6
4
  import { githubAnnotation } from './github'
5
+ import { ERROR, NOTICE, WARN, logLevels } from './levels'
6
+ import { logOptions } from './options'
7
7
 
8
8
  import type { AbsolutePath } from '../paths'
9
9
  import type { LogEmitter } from './emit'
@@ -427,12 +427,12 @@ export class ReportImpl implements Report {
427
427
 
428
428
  const status: any[] = [ 'Found' ]
429
429
  if (this.errors) {
430
- status.push($red(this.errors), this.errors === 1 ? 'error' : 'errors' )
430
+ status.push($plur(this.errors, 'error', 'errors'))
431
431
  }
432
432
 
433
433
  if (this.warnings) {
434
434
  if (this.errors) status.push('and')
435
- status.push($ylw(this.warnings), this.warnings === 1 ? 'warning' : 'warnings' )
435
+ status.push($plur(this.warnings, 'warning', 'warnings'))
436
436
  }
437
437
 
438
438
  if (this.errors || this.warnings) {
@@ -1,7 +1,7 @@
1
1
  /* coverage ignore file */
2
2
 
3
3
  import { runningTasks } from '../async'
4
- import { $cyn, $gry, $t } from './colors'
4
+ import { $cyn, $gry, $plur, $t } from './colors'
5
5
  import { logOptions } from './options'
6
6
 
7
7
  /* ========================================================================== */
@@ -60,11 +60,11 @@ function spin(): void {
60
60
  const pad = ''.padStart(_taskLength, ' ')
61
61
  const names = tasks.map((task) => $t(task)).join($gry(', '))
62
62
 
63
- const task = tasks.length > 1 ? 'tasks' : 'task'
63
+ const task = $plur(tasks.length, 'task', 'tasks')
64
64
 
65
65
  _nextSpin = (++ _nextSpin) % _spins.length
66
66
 
67
- _output.write(`${zapSpinner}${pad} ${_spins[_nextSpin]} Running ${tasks.length} ${task}: ${$gry(names)}`)
67
+ _output.write(`${zapSpinner}${pad} ${_spins[_nextSpin]} Running ${task}: ${$gry(names)}`)
68
68
  }
69
69
 
70
70
  /* Start or stop the spinner */
@@ -0,0 +1,62 @@
1
+ import { EOL } from 'node:os'
2
+
3
+ import { parse, printParseErrorCode } from 'jsonc-parser'
4
+
5
+ import { $plur } from '../logging/colors'
6
+
7
+ import type { ParseError } from 'jsonc-parser'
8
+
9
+ export interface JsoncOptions {
10
+ disallowComments?: boolean;
11
+ allowTrailingComma?: boolean;
12
+ }
13
+
14
+ export class JsoncError extends Error {
15
+ constructor(public errors: { code: string, line: number, column: number } []) {
16
+ const message = [ `Found ${$plur(errors.length, 'error', 'errors', false)} parsing` ]
17
+
18
+ for (const { code, line, column } of errors) {
19
+ message.push(` ${code} at line ${line}, column ${column}`)
20
+ }
21
+
22
+ super(message.join('\n'))
23
+ }
24
+ }
25
+
26
+ export function parseJsonc<T = any>(
27
+ data: string | null | undefined,
28
+ options: JsoncOptions = {},
29
+ ): T {
30
+ const { disallowComments = false, allowTrailingComma = true } = options
31
+
32
+ if (! data) return undefined as T
33
+ const errors: ParseError[] = []
34
+ const result = parse(data, errors, {
35
+ disallowComments,
36
+ allowTrailingComma,
37
+ allowEmptyContent: false,
38
+ })
39
+
40
+ if (errors.length === 0) return result
41
+
42
+ const offsets = data.split(EOL).reduce(({ offsets, offset }, line) => {
43
+ offset += line.length + EOL.length
44
+ offsets.push(offset)
45
+ return { offsets, offset }
46
+ }, { offset: 0, offsets: [ 0 ] }).offsets
47
+
48
+ function resolveOffset(offset: number): { line: number, column: number } {
49
+ for (let i = offsets.length - 1; i > 0; i--) {
50
+ const lineOffset = offsets[i]!
51
+ if (offset < lineOffset) continue
52
+ return { line: i + 1, column: offset - lineOffset + 1 }
53
+ }
54
+
55
+ return { line: 1, column: offset + 1 }
56
+ }
57
+
58
+ throw new JsoncError(errors.map((error) => {
59
+ const code = printParseErrorCode(error.error)
60
+ return { code, ...resolveOffset(error.offset) }
61
+ }))
62
+ }
package/src/utils.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './utils/diff'
2
2
  export * from './utils/exec'
3
+ export * from './utils/jsonc'
3
4
  export * from './utils/match'
4
5
  export * from './utils/options'
5
6
  export * from './utils/singleton'