@plugjs/plug 0.1.3 → 0.2.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.
Files changed (120) hide show
  1. package/README.md +2 -2
  2. package/cli/plug.mjs +1397 -0
  3. package/cli/ts-loader.mjs +273 -0
  4. package/cli/tsrun.mjs +136 -0
  5. package/dist/asserts.cjs +6 -3
  6. package/dist/asserts.cjs.map +1 -1
  7. package/dist/asserts.d.ts +2 -2
  8. package/dist/asserts.mjs +6 -3
  9. package/dist/asserts.mjs.map +1 -1
  10. package/dist/build.cjs +39 -28
  11. package/dist/build.cjs.map +2 -2
  12. package/dist/build.mjs +39 -28
  13. package/dist/build.mjs.map +2 -2
  14. package/dist/files.cjs +9 -0
  15. package/dist/files.cjs.map +1 -1
  16. package/dist/files.d.ts +2 -2
  17. package/dist/files.mjs +9 -0
  18. package/dist/files.mjs.map +1 -1
  19. package/dist/fork.cjs +12 -10
  20. package/dist/fork.cjs.map +2 -2
  21. package/dist/fork.mjs +12 -10
  22. package/dist/fork.mjs.map +2 -2
  23. package/dist/fs.cjs +11 -4
  24. package/dist/fs.cjs.map +1 -1
  25. package/dist/fs.mjs +7 -4
  26. package/dist/fs.mjs.map +1 -1
  27. package/dist/helpers.cjs +5 -2
  28. package/dist/helpers.cjs.map +1 -1
  29. package/dist/helpers.mjs +5 -2
  30. package/dist/helpers.mjs.map +1 -1
  31. package/dist/index.cjs +9 -0
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.ts +4 -1
  34. package/dist/index.mjs +4 -1
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/logging/levels.cjs.map +1 -1
  37. package/dist/logging/levels.mjs.map +1 -1
  38. package/dist/logging/logger.cjs +1 -1
  39. package/dist/logging/logger.cjs.map +1 -1
  40. package/dist/logging/logger.mjs +1 -1
  41. package/dist/logging/logger.mjs.map +1 -1
  42. package/dist/logging/options.cjs +5 -0
  43. package/dist/logging/options.cjs.map +1 -1
  44. package/dist/logging/options.mjs +5 -0
  45. package/dist/logging/options.mjs.map +1 -1
  46. package/dist/logging/report.cjs.map +1 -1
  47. package/dist/logging/report.mjs.map +1 -1
  48. package/dist/logging/spinner.cjs +12 -0
  49. package/dist/logging/spinner.cjs.map +1 -1
  50. package/dist/logging/spinner.mjs +12 -0
  51. package/dist/logging/spinner.mjs.map +1 -1
  52. package/dist/paths.cjs.map +1 -1
  53. package/dist/paths.mjs.map +1 -1
  54. package/dist/pipe.cjs +34 -0
  55. package/dist/pipe.cjs.map +1 -1
  56. package/dist/pipe.mjs +34 -0
  57. package/dist/pipe.mjs.map +1 -1
  58. package/dist/plugs/debug.cjs.map +1 -1
  59. package/dist/plugs/debug.mjs.map +1 -1
  60. package/dist/plugs/edit.cjs +1 -1
  61. package/dist/plugs/edit.cjs.map +1 -1
  62. package/dist/plugs/edit.d.ts +2 -2
  63. package/dist/plugs/edit.mjs +1 -1
  64. package/dist/plugs/edit.mjs.map +1 -1
  65. package/dist/plugs/esbuild/fix-extensions.cjs +4 -0
  66. package/dist/plugs/esbuild/fix-extensions.cjs.map +1 -1
  67. package/dist/plugs/esbuild/fix-extensions.mjs.map +1 -1
  68. package/dist/plugs/esbuild.cjs +6 -2
  69. package/dist/plugs/esbuild.cjs.map +1 -1
  70. package/dist/plugs/esbuild.mjs +6 -2
  71. package/dist/plugs/esbuild.mjs.map +1 -1
  72. package/dist/plugs/exec.cjs.map +1 -1
  73. package/dist/plugs/exec.mjs.map +1 -1
  74. package/dist/plugs/exports.cjs +122 -0
  75. package/dist/plugs/exports.cjs.map +6 -0
  76. package/dist/plugs/exports.d.ts +17 -0
  77. package/dist/plugs/exports.mjs +105 -0
  78. package/dist/plugs/exports.mjs.map +6 -0
  79. package/dist/plugs/filter.cjs.map +1 -1
  80. package/dist/plugs/filter.mjs.map +1 -1
  81. package/dist/plugs.cjs +1 -0
  82. package/dist/plugs.cjs.map +1 -1
  83. package/dist/plugs.d.ts +1 -0
  84. package/dist/plugs.mjs +1 -0
  85. package/dist/plugs.mjs.map +1 -1
  86. package/dist/types.d.ts +7 -5
  87. package/dist/utils/exec.cjs +9 -0
  88. package/dist/utils/exec.cjs.map +1 -1
  89. package/dist/utils/exec.mjs +5 -0
  90. package/dist/utils/exec.mjs.map +1 -1
  91. package/dist/utils/match.cjs +5 -0
  92. package/dist/utils/match.cjs.map +1 -1
  93. package/dist/utils/match.mjs +1 -0
  94. package/dist/utils/match.mjs.map +1 -1
  95. package/dist/utils/options.cjs.map +1 -1
  96. package/dist/utils/options.mjs.map +1 -1
  97. package/dist/utils/walk.cjs.map +1 -1
  98. package/dist/utils/walk.mjs.map +1 -1
  99. package/extra/plug.mts +373 -0
  100. package/extra/ts-loader.mts +545 -0
  101. package/extra/tsrun.mts +64 -0
  102. package/extra/utils.ts +168 -0
  103. package/package.json +9 -19
  104. package/src/asserts.ts +7 -4
  105. package/src/build.ts +49 -22
  106. package/src/files.ts +2 -2
  107. package/src/fork.ts +9 -8
  108. package/src/helpers.ts +6 -2
  109. package/src/index.ts +5 -1
  110. package/src/logging/logger.ts +1 -1
  111. package/src/plugs/edit.ts +4 -3
  112. package/src/plugs/esbuild.ts +0 -1
  113. package/src/plugs/exports.ts +175 -0
  114. package/src/plugs.ts +1 -0
  115. package/src/types.ts +9 -7
  116. package/types/plugjs.d.ts +0 -2
  117. package/LICENSE.md +0 -211
  118. package/NOTICE.md +0 -13
  119. package/extra/cli.mjs +0 -1356
  120. package/extra/ts-loader.mjs +0 -223
package/extra/cli.mjs DELETED
@@ -1,1356 +0,0 @@
1
- #!/usr/bin/env node
2
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
3
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
4
- }) : x)(function(x) {
5
- if (typeof require !== "undefined")
6
- return require.apply(this, arguments);
7
- throw new Error('Dynamic require of "' + x + '" is not supported');
8
- });
9
-
10
- // extra/cli.mts
11
- import _childProcess from "node:child_process";
12
- import _fs from "node:fs";
13
- import _path from "node:path";
14
- import _url from "node:url";
15
-
16
- // node_modules/yargs-parser/build/lib/index.js
17
- import { format } from "util";
18
- import { normalize, resolve } from "path";
19
-
20
- // node_modules/yargs-parser/build/lib/string-utils.js
21
- function camelCase(str) {
22
- const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();
23
- if (!isCamelCase) {
24
- str = str.toLowerCase();
25
- }
26
- if (str.indexOf("-") === -1 && str.indexOf("_") === -1) {
27
- return str;
28
- } else {
29
- let camelcase = "";
30
- let nextChrUpper = false;
31
- const leadingHyphens = str.match(/^-+/);
32
- for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) {
33
- let chr = str.charAt(i);
34
- if (nextChrUpper) {
35
- nextChrUpper = false;
36
- chr = chr.toUpperCase();
37
- }
38
- if (i !== 0 && (chr === "-" || chr === "_")) {
39
- nextChrUpper = true;
40
- } else if (chr !== "-" && chr !== "_") {
41
- camelcase += chr;
42
- }
43
- }
44
- return camelcase;
45
- }
46
- }
47
- function decamelize(str, joinString) {
48
- const lowercase = str.toLowerCase();
49
- joinString = joinString || "-";
50
- let notCamelcase = "";
51
- for (let i = 0; i < str.length; i++) {
52
- const chrLower = lowercase.charAt(i);
53
- const chrString = str.charAt(i);
54
- if (chrLower !== chrString && i > 0) {
55
- notCamelcase += `${joinString}${lowercase.charAt(i)}`;
56
- } else {
57
- notCamelcase += chrString;
58
- }
59
- }
60
- return notCamelcase;
61
- }
62
- function looksLikeNumber(x) {
63
- if (x === null || x === void 0)
64
- return false;
65
- if (typeof x === "number")
66
- return true;
67
- if (/^0x[0-9a-f]+$/i.test(x))
68
- return true;
69
- if (/^0[^.]/.test(x))
70
- return false;
71
- return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
72
- }
73
-
74
- // node_modules/yargs-parser/build/lib/tokenize-arg-string.js
75
- function tokenizeArgString(argString) {
76
- if (Array.isArray(argString)) {
77
- return argString.map((e) => typeof e !== "string" ? e + "" : e);
78
- }
79
- argString = argString.trim();
80
- let i = 0;
81
- let prevC = null;
82
- let c = null;
83
- let opening = null;
84
- const args = [];
85
- for (let ii = 0; ii < argString.length; ii++) {
86
- prevC = c;
87
- c = argString.charAt(ii);
88
- if (c === " " && !opening) {
89
- if (!(prevC === " ")) {
90
- i++;
91
- }
92
- continue;
93
- }
94
- if (c === opening) {
95
- opening = null;
96
- } else if ((c === "'" || c === '"') && !opening) {
97
- opening = c;
98
- }
99
- if (!args[i])
100
- args[i] = "";
101
- args[i] += c;
102
- }
103
- return args;
104
- }
105
-
106
- // node_modules/yargs-parser/build/lib/yargs-parser-types.js
107
- var DefaultValuesForTypeKey;
108
- (function(DefaultValuesForTypeKey2) {
109
- DefaultValuesForTypeKey2["BOOLEAN"] = "boolean";
110
- DefaultValuesForTypeKey2["STRING"] = "string";
111
- DefaultValuesForTypeKey2["NUMBER"] = "number";
112
- DefaultValuesForTypeKey2["ARRAY"] = "array";
113
- })(DefaultValuesForTypeKey || (DefaultValuesForTypeKey = {}));
114
-
115
- // node_modules/yargs-parser/build/lib/yargs-parser.js
116
- var mixin;
117
- var YargsParser = class {
118
- constructor(_mixin) {
119
- mixin = _mixin;
120
- }
121
- parse(argsInput, options2) {
122
- const opts = Object.assign({
123
- alias: void 0,
124
- array: void 0,
125
- boolean: void 0,
126
- config: void 0,
127
- configObjects: void 0,
128
- configuration: void 0,
129
- coerce: void 0,
130
- count: void 0,
131
- default: void 0,
132
- envPrefix: void 0,
133
- narg: void 0,
134
- normalize: void 0,
135
- string: void 0,
136
- number: void 0,
137
- __: void 0,
138
- key: void 0
139
- }, options2);
140
- const args = tokenizeArgString(argsInput);
141
- const inputIsString = typeof argsInput === "string";
142
- const aliases = combineAliases(Object.assign(/* @__PURE__ */ Object.create(null), opts.alias));
143
- const configuration = Object.assign({
144
- "boolean-negation": true,
145
- "camel-case-expansion": true,
146
- "combine-arrays": false,
147
- "dot-notation": true,
148
- "duplicate-arguments-array": true,
149
- "flatten-duplicate-arrays": true,
150
- "greedy-arrays": true,
151
- "halt-at-non-option": false,
152
- "nargs-eats-options": false,
153
- "negation-prefix": "no-",
154
- "parse-numbers": true,
155
- "parse-positional-numbers": true,
156
- "populate--": false,
157
- "set-placeholder-key": false,
158
- "short-option-groups": true,
159
- "strip-aliased": false,
160
- "strip-dashed": false,
161
- "unknown-options-as-args": false
162
- }, opts.configuration);
163
- const defaults = Object.assign(/* @__PURE__ */ Object.create(null), opts.default);
164
- const configObjects = opts.configObjects || [];
165
- const envPrefix = opts.envPrefix;
166
- const notFlagsOption = configuration["populate--"];
167
- const notFlagsArgv = notFlagsOption ? "--" : "_";
168
- const newAliases = /* @__PURE__ */ Object.create(null);
169
- const defaulted = /* @__PURE__ */ Object.create(null);
170
- const __ = opts.__ || mixin.format;
171
- const flags = {
172
- aliases: /* @__PURE__ */ Object.create(null),
173
- arrays: /* @__PURE__ */ Object.create(null),
174
- bools: /* @__PURE__ */ Object.create(null),
175
- strings: /* @__PURE__ */ Object.create(null),
176
- numbers: /* @__PURE__ */ Object.create(null),
177
- counts: /* @__PURE__ */ Object.create(null),
178
- normalize: /* @__PURE__ */ Object.create(null),
179
- configs: /* @__PURE__ */ Object.create(null),
180
- nargs: /* @__PURE__ */ Object.create(null),
181
- coercions: /* @__PURE__ */ Object.create(null),
182
- keys: []
183
- };
184
- const negative = /^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/;
185
- const negatedBoolean = new RegExp("^--" + configuration["negation-prefix"] + "(.+)");
186
- [].concat(opts.array || []).filter(Boolean).forEach(function(opt) {
187
- const key = typeof opt === "object" ? opt.key : opt;
188
- const assignment = Object.keys(opt).map(function(key2) {
189
- const arrayFlagKeys = {
190
- boolean: "bools",
191
- string: "strings",
192
- number: "numbers"
193
- };
194
- return arrayFlagKeys[key2];
195
- }).filter(Boolean).pop();
196
- if (assignment) {
197
- flags[assignment][key] = true;
198
- }
199
- flags.arrays[key] = true;
200
- flags.keys.push(key);
201
- });
202
- [].concat(opts.boolean || []).filter(Boolean).forEach(function(key) {
203
- flags.bools[key] = true;
204
- flags.keys.push(key);
205
- });
206
- [].concat(opts.string || []).filter(Boolean).forEach(function(key) {
207
- flags.strings[key] = true;
208
- flags.keys.push(key);
209
- });
210
- [].concat(opts.number || []).filter(Boolean).forEach(function(key) {
211
- flags.numbers[key] = true;
212
- flags.keys.push(key);
213
- });
214
- [].concat(opts.count || []).filter(Boolean).forEach(function(key) {
215
- flags.counts[key] = true;
216
- flags.keys.push(key);
217
- });
218
- [].concat(opts.normalize || []).filter(Boolean).forEach(function(key) {
219
- flags.normalize[key] = true;
220
- flags.keys.push(key);
221
- });
222
- if (typeof opts.narg === "object") {
223
- Object.entries(opts.narg).forEach(([key, value]) => {
224
- if (typeof value === "number") {
225
- flags.nargs[key] = value;
226
- flags.keys.push(key);
227
- }
228
- });
229
- }
230
- if (typeof opts.coerce === "object") {
231
- Object.entries(opts.coerce).forEach(([key, value]) => {
232
- if (typeof value === "function") {
233
- flags.coercions[key] = value;
234
- flags.keys.push(key);
235
- }
236
- });
237
- }
238
- if (typeof opts.config !== "undefined") {
239
- if (Array.isArray(opts.config) || typeof opts.config === "string") {
240
- ;
241
- [].concat(opts.config).filter(Boolean).forEach(function(key) {
242
- flags.configs[key] = true;
243
- });
244
- } else if (typeof opts.config === "object") {
245
- Object.entries(opts.config).forEach(([key, value]) => {
246
- if (typeof value === "boolean" || typeof value === "function") {
247
- flags.configs[key] = value;
248
- }
249
- });
250
- }
251
- }
252
- extendAliases(opts.key, aliases, opts.default, flags.arrays);
253
- Object.keys(defaults).forEach(function(key) {
254
- (flags.aliases[key] || []).forEach(function(alias) {
255
- defaults[alias] = defaults[key];
256
- });
257
- });
258
- let error = null;
259
- checkConfiguration();
260
- let notFlags = [];
261
- const argv = Object.assign(/* @__PURE__ */ Object.create(null), { _: [] });
262
- const argvReturn = {};
263
- for (let i = 0; i < args.length; i++) {
264
- const arg = args[i];
265
- const truncatedArg = arg.replace(/^-{3,}/, "---");
266
- let broken;
267
- let key;
268
- let letters;
269
- let m;
270
- let next;
271
- let value;
272
- if (arg !== "--" && /^-/.test(arg) && isUnknownOptionAsArg(arg)) {
273
- pushPositional(arg);
274
- } else if (truncatedArg.match(/^---+(=|$)/)) {
275
- pushPositional(arg);
276
- continue;
277
- } else if (arg.match(/^--.+=/) || !configuration["short-option-groups"] && arg.match(/^-.+=/)) {
278
- m = arg.match(/^--?([^=]+)=([\s\S]*)$/);
279
- if (m !== null && Array.isArray(m) && m.length >= 3) {
280
- if (checkAllAliases(m[1], flags.arrays)) {
281
- i = eatArray(i, m[1], args, m[2]);
282
- } else if (checkAllAliases(m[1], flags.nargs) !== false) {
283
- i = eatNargs(i, m[1], args, m[2]);
284
- } else {
285
- setArg(m[1], m[2], true);
286
- }
287
- }
288
- } else if (arg.match(negatedBoolean) && configuration["boolean-negation"]) {
289
- m = arg.match(negatedBoolean);
290
- if (m !== null && Array.isArray(m) && m.length >= 2) {
291
- key = m[1];
292
- setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false);
293
- }
294
- } else if (arg.match(/^--.+/) || !configuration["short-option-groups"] && arg.match(/^-[^-]+/)) {
295
- m = arg.match(/^--?(.+)/);
296
- if (m !== null && Array.isArray(m) && m.length >= 2) {
297
- key = m[1];
298
- if (checkAllAliases(key, flags.arrays)) {
299
- i = eatArray(i, key, args);
300
- } else if (checkAllAliases(key, flags.nargs) !== false) {
301
- i = eatNargs(i, key, args);
302
- } else {
303
- next = args[i + 1];
304
- if (next !== void 0 && (!next.match(/^-/) || next.match(negative)) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) {
305
- setArg(key, next);
306
- i++;
307
- } else if (/^(true|false)$/.test(next)) {
308
- setArg(key, next);
309
- i++;
310
- } else {
311
- setArg(key, defaultValue(key));
312
- }
313
- }
314
- }
315
- } else if (arg.match(/^-.\..+=/)) {
316
- m = arg.match(/^-([^=]+)=([\s\S]*)$/);
317
- if (m !== null && Array.isArray(m) && m.length >= 3) {
318
- setArg(m[1], m[2]);
319
- }
320
- } else if (arg.match(/^-.\..+/) && !arg.match(negative)) {
321
- next = args[i + 1];
322
- m = arg.match(/^-(.\..+)/);
323
- if (m !== null && Array.isArray(m) && m.length >= 2) {
324
- key = m[1];
325
- if (next !== void 0 && !next.match(/^-/) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) {
326
- setArg(key, next);
327
- i++;
328
- } else {
329
- setArg(key, defaultValue(key));
330
- }
331
- }
332
- } else if (arg.match(/^-[^-]+/) && !arg.match(negative)) {
333
- letters = arg.slice(1, -1).split("");
334
- broken = false;
335
- for (let j = 0; j < letters.length; j++) {
336
- next = arg.slice(j + 2);
337
- if (letters[j + 1] && letters[j + 1] === "=") {
338
- value = arg.slice(j + 3);
339
- key = letters[j];
340
- if (checkAllAliases(key, flags.arrays)) {
341
- i = eatArray(i, key, args, value);
342
- } else if (checkAllAliases(key, flags.nargs) !== false) {
343
- i = eatNargs(i, key, args, value);
344
- } else {
345
- setArg(key, value);
346
- }
347
- broken = true;
348
- break;
349
- }
350
- if (next === "-") {
351
- setArg(letters[j], next);
352
- continue;
353
- }
354
- if (/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next) && checkAllAliases(next, flags.bools) === false) {
355
- setArg(letters[j], next);
356
- broken = true;
357
- break;
358
- }
359
- if (letters[j + 1] && letters[j + 1].match(/\W/)) {
360
- setArg(letters[j], next);
361
- broken = true;
362
- break;
363
- } else {
364
- setArg(letters[j], defaultValue(letters[j]));
365
- }
366
- }
367
- key = arg.slice(-1)[0];
368
- if (!broken && key !== "-") {
369
- if (checkAllAliases(key, flags.arrays)) {
370
- i = eatArray(i, key, args);
371
- } else if (checkAllAliases(key, flags.nargs) !== false) {
372
- i = eatNargs(i, key, args);
373
- } else {
374
- next = args[i + 1];
375
- if (next !== void 0 && (!/^(-|--)[^-]/.test(next) || next.match(negative)) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) {
376
- setArg(key, next);
377
- i++;
378
- } else if (/^(true|false)$/.test(next)) {
379
- setArg(key, next);
380
- i++;
381
- } else {
382
- setArg(key, defaultValue(key));
383
- }
384
- }
385
- }
386
- } else if (arg.match(/^-[0-9]$/) && arg.match(negative) && checkAllAliases(arg.slice(1), flags.bools)) {
387
- key = arg.slice(1);
388
- setArg(key, defaultValue(key));
389
- } else if (arg === "--") {
390
- notFlags = args.slice(i + 1);
391
- break;
392
- } else if (configuration["halt-at-non-option"]) {
393
- notFlags = args.slice(i);
394
- break;
395
- } else {
396
- pushPositional(arg);
397
- }
398
- }
399
- applyEnvVars(argv, true);
400
- applyEnvVars(argv, false);
401
- setConfig(argv);
402
- setConfigObjects();
403
- applyDefaultsAndAliases(argv, flags.aliases, defaults, true);
404
- applyCoercions(argv);
405
- if (configuration["set-placeholder-key"])
406
- setPlaceholderKeys(argv);
407
- Object.keys(flags.counts).forEach(function(key) {
408
- if (!hasKey(argv, key.split(".")))
409
- setArg(key, 0);
410
- });
411
- if (notFlagsOption && notFlags.length)
412
- argv[notFlagsArgv] = [];
413
- notFlags.forEach(function(key) {
414
- argv[notFlagsArgv].push(key);
415
- });
416
- if (configuration["camel-case-expansion"] && configuration["strip-dashed"]) {
417
- Object.keys(argv).filter((key) => key !== "--" && key.includes("-")).forEach((key) => {
418
- delete argv[key];
419
- });
420
- }
421
- if (configuration["strip-aliased"]) {
422
- ;
423
- [].concat(...Object.keys(aliases).map((k) => aliases[k])).forEach((alias) => {
424
- if (configuration["camel-case-expansion"] && alias.includes("-")) {
425
- delete argv[alias.split(".").map((prop) => camelCase(prop)).join(".")];
426
- }
427
- delete argv[alias];
428
- });
429
- }
430
- function pushPositional(arg) {
431
- const maybeCoercedNumber = maybeCoerceNumber("_", arg);
432
- if (typeof maybeCoercedNumber === "string" || typeof maybeCoercedNumber === "number") {
433
- argv._.push(maybeCoercedNumber);
434
- }
435
- }
436
- function eatNargs(i, key, args2, argAfterEqualSign) {
437
- let ii;
438
- let toEat = checkAllAliases(key, flags.nargs);
439
- toEat = typeof toEat !== "number" || isNaN(toEat) ? 1 : toEat;
440
- if (toEat === 0) {
441
- if (!isUndefined(argAfterEqualSign)) {
442
- error = Error(__("Argument unexpected for: %s", key));
443
- }
444
- setArg(key, defaultValue(key));
445
- return i;
446
- }
447
- let available = isUndefined(argAfterEqualSign) ? 0 : 1;
448
- if (configuration["nargs-eats-options"]) {
449
- if (args2.length - (i + 1) + available < toEat) {
450
- error = Error(__("Not enough arguments following: %s", key));
451
- }
452
- available = toEat;
453
- } else {
454
- for (ii = i + 1; ii < args2.length; ii++) {
455
- if (!args2[ii].match(/^-[^0-9]/) || args2[ii].match(negative) || isUnknownOptionAsArg(args2[ii]))
456
- available++;
457
- else
458
- break;
459
- }
460
- if (available < toEat)
461
- error = Error(__("Not enough arguments following: %s", key));
462
- }
463
- let consumed = Math.min(available, toEat);
464
- if (!isUndefined(argAfterEqualSign) && consumed > 0) {
465
- setArg(key, argAfterEqualSign);
466
- consumed--;
467
- }
468
- for (ii = i + 1; ii < consumed + i + 1; ii++) {
469
- setArg(key, args2[ii]);
470
- }
471
- return i + consumed;
472
- }
473
- function eatArray(i, key, args2, argAfterEqualSign) {
474
- let argsToSet = [];
475
- let next = argAfterEqualSign || args2[i + 1];
476
- const nargsCount = checkAllAliases(key, flags.nargs);
477
- if (checkAllAliases(key, flags.bools) && !/^(true|false)$/.test(next)) {
478
- argsToSet.push(true);
479
- } else if (isUndefined(next) || isUndefined(argAfterEqualSign) && /^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next)) {
480
- if (defaults[key] !== void 0) {
481
- const defVal = defaults[key];
482
- argsToSet = Array.isArray(defVal) ? defVal : [defVal];
483
- }
484
- } else {
485
- if (!isUndefined(argAfterEqualSign)) {
486
- argsToSet.push(processValue(key, argAfterEqualSign, true));
487
- }
488
- for (let ii = i + 1; ii < args2.length; ii++) {
489
- if (!configuration["greedy-arrays"] && argsToSet.length > 0 || nargsCount && typeof nargsCount === "number" && argsToSet.length >= nargsCount)
490
- break;
491
- next = args2[ii];
492
- if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))
493
- break;
494
- i = ii;
495
- argsToSet.push(processValue(key, next, inputIsString));
496
- }
497
- }
498
- if (typeof nargsCount === "number" && (nargsCount && argsToSet.length < nargsCount || isNaN(nargsCount) && argsToSet.length === 0)) {
499
- error = Error(__("Not enough arguments following: %s", key));
500
- }
501
- setArg(key, argsToSet);
502
- return i;
503
- }
504
- function setArg(key, val, shouldStripQuotes = inputIsString) {
505
- if (/-/.test(key) && configuration["camel-case-expansion"]) {
506
- const alias = key.split(".").map(function(prop) {
507
- return camelCase(prop);
508
- }).join(".");
509
- addNewAlias(key, alias);
510
- }
511
- const value = processValue(key, val, shouldStripQuotes);
512
- const splitKey = key.split(".");
513
- setKey(argv, splitKey, value);
514
- if (flags.aliases[key]) {
515
- flags.aliases[key].forEach(function(x) {
516
- const keyProperties = x.split(".");
517
- setKey(argv, keyProperties, value);
518
- });
519
- }
520
- if (splitKey.length > 1 && configuration["dot-notation"]) {
521
- ;
522
- (flags.aliases[splitKey[0]] || []).forEach(function(x) {
523
- let keyProperties = x.split(".");
524
- const a = [].concat(splitKey);
525
- a.shift();
526
- keyProperties = keyProperties.concat(a);
527
- if (!(flags.aliases[key] || []).includes(keyProperties.join("."))) {
528
- setKey(argv, keyProperties, value);
529
- }
530
- });
531
- }
532
- if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) {
533
- const keys = [key].concat(flags.aliases[key] || []);
534
- keys.forEach(function(key2) {
535
- Object.defineProperty(argvReturn, key2, {
536
- enumerable: true,
537
- get() {
538
- return val;
539
- },
540
- set(value2) {
541
- val = typeof value2 === "string" ? mixin.normalize(value2) : value2;
542
- }
543
- });
544
- });
545
- }
546
- }
547
- function addNewAlias(key, alias) {
548
- if (!(flags.aliases[key] && flags.aliases[key].length)) {
549
- flags.aliases[key] = [alias];
550
- newAliases[alias] = true;
551
- }
552
- if (!(flags.aliases[alias] && flags.aliases[alias].length)) {
553
- addNewAlias(alias, key);
554
- }
555
- }
556
- function processValue(key, val, shouldStripQuotes) {
557
- if (shouldStripQuotes) {
558
- val = stripQuotes(val);
559
- }
560
- if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {
561
- if (typeof val === "string")
562
- val = val === "true";
563
- }
564
- let value = Array.isArray(val) ? val.map(function(v) {
565
- return maybeCoerceNumber(key, v);
566
- }) : maybeCoerceNumber(key, val);
567
- if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === "boolean")) {
568
- value = increment();
569
- }
570
- if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) {
571
- if (Array.isArray(val))
572
- value = val.map((val2) => {
573
- return mixin.normalize(val2);
574
- });
575
- else
576
- value = mixin.normalize(val);
577
- }
578
- return value;
579
- }
580
- function maybeCoerceNumber(key, value) {
581
- if (!configuration["parse-positional-numbers"] && key === "_")
582
- return value;
583
- if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) {
584
- const shouldCoerceNumber = looksLikeNumber(value) && configuration["parse-numbers"] && Number.isSafeInteger(Math.floor(parseFloat(`${value}`)));
585
- if (shouldCoerceNumber || !isUndefined(value) && checkAllAliases(key, flags.numbers)) {
586
- value = Number(value);
587
- }
588
- }
589
- return value;
590
- }
591
- function setConfig(argv2) {
592
- const configLookup = /* @__PURE__ */ Object.create(null);
593
- applyDefaultsAndAliases(configLookup, flags.aliases, defaults);
594
- Object.keys(flags.configs).forEach(function(configKey) {
595
- const configPath = argv2[configKey] || configLookup[configKey];
596
- if (configPath) {
597
- try {
598
- let config = null;
599
- const resolvedConfigPath = mixin.resolve(mixin.cwd(), configPath);
600
- const resolveConfig = flags.configs[configKey];
601
- if (typeof resolveConfig === "function") {
602
- try {
603
- config = resolveConfig(resolvedConfigPath);
604
- } catch (e) {
605
- config = e;
606
- }
607
- if (config instanceof Error) {
608
- error = config;
609
- return;
610
- }
611
- } else {
612
- config = mixin.require(resolvedConfigPath);
613
- }
614
- setConfigObject(config);
615
- } catch (ex) {
616
- if (ex.name === "PermissionDenied")
617
- error = ex;
618
- else if (argv2[configKey])
619
- error = Error(__("Invalid JSON config file: %s", configPath));
620
- }
621
- }
622
- });
623
- }
624
- function setConfigObject(config, prev) {
625
- Object.keys(config).forEach(function(key) {
626
- const value = config[key];
627
- const fullKey = prev ? prev + "." + key : key;
628
- if (typeof value === "object" && value !== null && !Array.isArray(value) && configuration["dot-notation"]) {
629
- setConfigObject(value, fullKey);
630
- } else {
631
- if (!hasKey(argv, fullKey.split(".")) || checkAllAliases(fullKey, flags.arrays) && configuration["combine-arrays"]) {
632
- setArg(fullKey, value);
633
- }
634
- }
635
- });
636
- }
637
- function setConfigObjects() {
638
- if (typeof configObjects !== "undefined") {
639
- configObjects.forEach(function(configObject) {
640
- setConfigObject(configObject);
641
- });
642
- }
643
- }
644
- function applyEnvVars(argv2, configOnly) {
645
- if (typeof envPrefix === "undefined")
646
- return;
647
- const prefix = typeof envPrefix === "string" ? envPrefix : "";
648
- const env2 = mixin.env();
649
- Object.keys(env2).forEach(function(envVar) {
650
- if (prefix === "" || envVar.lastIndexOf(prefix, 0) === 0) {
651
- const keys = envVar.split("__").map(function(key, i) {
652
- if (i === 0) {
653
- key = key.substring(prefix.length);
654
- }
655
- return camelCase(key);
656
- });
657
- if ((configOnly && flags.configs[keys.join(".")] || !configOnly) && !hasKey(argv2, keys)) {
658
- setArg(keys.join("."), env2[envVar]);
659
- }
660
- }
661
- });
662
- }
663
- function applyCoercions(argv2) {
664
- let coerce;
665
- const applied = /* @__PURE__ */ new Set();
666
- Object.keys(argv2).forEach(function(key) {
667
- if (!applied.has(key)) {
668
- coerce = checkAllAliases(key, flags.coercions);
669
- if (typeof coerce === "function") {
670
- try {
671
- const value = maybeCoerceNumber(key, coerce(argv2[key]));
672
- [].concat(flags.aliases[key] || [], key).forEach((ali) => {
673
- applied.add(ali);
674
- argv2[ali] = value;
675
- });
676
- } catch (err) {
677
- error = err;
678
- }
679
- }
680
- }
681
- });
682
- }
683
- function setPlaceholderKeys(argv2) {
684
- flags.keys.forEach((key) => {
685
- if (~key.indexOf("."))
686
- return;
687
- if (typeof argv2[key] === "undefined")
688
- argv2[key] = void 0;
689
- });
690
- return argv2;
691
- }
692
- function applyDefaultsAndAliases(obj, aliases2, defaults2, canLog = false) {
693
- Object.keys(defaults2).forEach(function(key) {
694
- if (!hasKey(obj, key.split("."))) {
695
- setKey(obj, key.split("."), defaults2[key]);
696
- if (canLog)
697
- defaulted[key] = true;
698
- (aliases2[key] || []).forEach(function(x) {
699
- if (hasKey(obj, x.split(".")))
700
- return;
701
- setKey(obj, x.split("."), defaults2[key]);
702
- });
703
- }
704
- });
705
- }
706
- function hasKey(obj, keys) {
707
- let o = obj;
708
- if (!configuration["dot-notation"])
709
- keys = [keys.join(".")];
710
- keys.slice(0, -1).forEach(function(key2) {
711
- o = o[key2] || {};
712
- });
713
- const key = keys[keys.length - 1];
714
- if (typeof o !== "object")
715
- return false;
716
- else
717
- return key in o;
718
- }
719
- function setKey(obj, keys, value) {
720
- let o = obj;
721
- if (!configuration["dot-notation"])
722
- keys = [keys.join(".")];
723
- keys.slice(0, -1).forEach(function(key2) {
724
- key2 = sanitizeKey(key2);
725
- if (typeof o === "object" && o[key2] === void 0) {
726
- o[key2] = {};
727
- }
728
- if (typeof o[key2] !== "object" || Array.isArray(o[key2])) {
729
- if (Array.isArray(o[key2])) {
730
- o[key2].push({});
731
- } else {
732
- o[key2] = [o[key2], {}];
733
- }
734
- o = o[key2][o[key2].length - 1];
735
- } else {
736
- o = o[key2];
737
- }
738
- });
739
- const key = sanitizeKey(keys[keys.length - 1]);
740
- const isTypeArray = checkAllAliases(keys.join("."), flags.arrays);
741
- const isValueArray = Array.isArray(value);
742
- let duplicate = configuration["duplicate-arguments-array"];
743
- if (!duplicate && checkAllAliases(key, flags.nargs)) {
744
- duplicate = true;
745
- if (!isUndefined(o[key]) && flags.nargs[key] === 1 || Array.isArray(o[key]) && o[key].length === flags.nargs[key]) {
746
- o[key] = void 0;
747
- }
748
- }
749
- if (value === increment()) {
750
- o[key] = increment(o[key]);
751
- } else if (Array.isArray(o[key])) {
752
- if (duplicate && isTypeArray && isValueArray) {
753
- o[key] = configuration["flatten-duplicate-arrays"] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]);
754
- } else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) {
755
- o[key] = value;
756
- } else {
757
- o[key] = o[key].concat([value]);
758
- }
759
- } else if (o[key] === void 0 && isTypeArray) {
760
- o[key] = isValueArray ? value : [value];
761
- } else if (duplicate && !(o[key] === void 0 || checkAllAliases(key, flags.counts) || checkAllAliases(key, flags.bools))) {
762
- o[key] = [o[key], value];
763
- } else {
764
- o[key] = value;
765
- }
766
- }
767
- function extendAliases(...args2) {
768
- args2.forEach(function(obj) {
769
- Object.keys(obj || {}).forEach(function(key) {
770
- if (flags.aliases[key])
771
- return;
772
- flags.aliases[key] = [].concat(aliases[key] || []);
773
- flags.aliases[key].concat(key).forEach(function(x) {
774
- if (/-/.test(x) && configuration["camel-case-expansion"]) {
775
- const c = camelCase(x);
776
- if (c !== key && flags.aliases[key].indexOf(c) === -1) {
777
- flags.aliases[key].push(c);
778
- newAliases[c] = true;
779
- }
780
- }
781
- });
782
- flags.aliases[key].concat(key).forEach(function(x) {
783
- if (x.length > 1 && /[A-Z]/.test(x) && configuration["camel-case-expansion"]) {
784
- const c = decamelize(x, "-");
785
- if (c !== key && flags.aliases[key].indexOf(c) === -1) {
786
- flags.aliases[key].push(c);
787
- newAliases[c] = true;
788
- }
789
- }
790
- });
791
- flags.aliases[key].forEach(function(x) {
792
- flags.aliases[x] = [key].concat(flags.aliases[key].filter(function(y) {
793
- return x !== y;
794
- }));
795
- });
796
- });
797
- });
798
- }
799
- function checkAllAliases(key, flag) {
800
- const toCheck = [].concat(flags.aliases[key] || [], key);
801
- const keys = Object.keys(flag);
802
- const setAlias = toCheck.find((key2) => keys.includes(key2));
803
- return setAlias ? flag[setAlias] : false;
804
- }
805
- function hasAnyFlag(key) {
806
- const flagsKeys = Object.keys(flags);
807
- const toCheck = [].concat(flagsKeys.map((k) => flags[k]));
808
- return toCheck.some(function(flag) {
809
- return Array.isArray(flag) ? flag.includes(key) : flag[key];
810
- });
811
- }
812
- function hasFlagsMatching(arg, ...patterns) {
813
- const toCheck = [].concat(...patterns);
814
- return toCheck.some(function(pattern) {
815
- const match = arg.match(pattern);
816
- return match && hasAnyFlag(match[1]);
817
- });
818
- }
819
- function hasAllShortFlags(arg) {
820
- if (arg.match(negative) || !arg.match(/^-[^-]+/)) {
821
- return false;
822
- }
823
- let hasAllFlags = true;
824
- let next;
825
- const letters = arg.slice(1).split("");
826
- for (let j = 0; j < letters.length; j++) {
827
- next = arg.slice(j + 2);
828
- if (!hasAnyFlag(letters[j])) {
829
- hasAllFlags = false;
830
- break;
831
- }
832
- if (letters[j + 1] && letters[j + 1] === "=" || next === "-" || /[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next) || letters[j + 1] && letters[j + 1].match(/\W/)) {
833
- break;
834
- }
835
- }
836
- return hasAllFlags;
837
- }
838
- function isUnknownOptionAsArg(arg) {
839
- return configuration["unknown-options-as-args"] && isUnknownOption(arg);
840
- }
841
- function isUnknownOption(arg) {
842
- arg = arg.replace(/^-{3,}/, "--");
843
- if (arg.match(negative)) {
844
- return false;
845
- }
846
- if (hasAllShortFlags(arg)) {
847
- return false;
848
- }
849
- const flagWithEquals = /^-+([^=]+?)=[\s\S]*$/;
850
- const normalFlag = /^-+([^=]+?)$/;
851
- const flagEndingInHyphen = /^-+([^=]+?)-$/;
852
- const flagEndingInDigits = /^-+([^=]+?\d+)$/;
853
- const flagEndingInNonWordCharacters = /^-+([^=]+?)\W+.*$/;
854
- return !hasFlagsMatching(arg, flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters);
855
- }
856
- function defaultValue(key) {
857
- if (!checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts) && `${key}` in defaults) {
858
- return defaults[key];
859
- } else {
860
- return defaultForType(guessType(key));
861
- }
862
- }
863
- function defaultForType(type) {
864
- const def = {
865
- [DefaultValuesForTypeKey.BOOLEAN]: true,
866
- [DefaultValuesForTypeKey.STRING]: "",
867
- [DefaultValuesForTypeKey.NUMBER]: void 0,
868
- [DefaultValuesForTypeKey.ARRAY]: []
869
- };
870
- return def[type];
871
- }
872
- function guessType(key) {
873
- let type = DefaultValuesForTypeKey.BOOLEAN;
874
- if (checkAllAliases(key, flags.strings))
875
- type = DefaultValuesForTypeKey.STRING;
876
- else if (checkAllAliases(key, flags.numbers))
877
- type = DefaultValuesForTypeKey.NUMBER;
878
- else if (checkAllAliases(key, flags.bools))
879
- type = DefaultValuesForTypeKey.BOOLEAN;
880
- else if (checkAllAliases(key, flags.arrays))
881
- type = DefaultValuesForTypeKey.ARRAY;
882
- return type;
883
- }
884
- function isUndefined(num) {
885
- return num === void 0;
886
- }
887
- function checkConfiguration() {
888
- Object.keys(flags.counts).find((key) => {
889
- if (checkAllAliases(key, flags.arrays)) {
890
- error = Error(__("Invalid configuration: %s, opts.count excludes opts.array.", key));
891
- return true;
892
- } else if (checkAllAliases(key, flags.nargs)) {
893
- error = Error(__("Invalid configuration: %s, opts.count excludes opts.narg.", key));
894
- return true;
895
- }
896
- return false;
897
- });
898
- }
899
- return {
900
- aliases: Object.assign({}, flags.aliases),
901
- argv: Object.assign(argvReturn, argv),
902
- configuration,
903
- defaulted: Object.assign({}, defaulted),
904
- error,
905
- newAliases: Object.assign({}, newAliases)
906
- };
907
- }
908
- };
909
- function combineAliases(aliases) {
910
- const aliasArrays = [];
911
- const combined = /* @__PURE__ */ Object.create(null);
912
- let change = true;
913
- Object.keys(aliases).forEach(function(key) {
914
- aliasArrays.push([].concat(aliases[key], key));
915
- });
916
- while (change) {
917
- change = false;
918
- for (let i = 0; i < aliasArrays.length; i++) {
919
- for (let ii = i + 1; ii < aliasArrays.length; ii++) {
920
- const intersect = aliasArrays[i].filter(function(v) {
921
- return aliasArrays[ii].indexOf(v) !== -1;
922
- });
923
- if (intersect.length) {
924
- aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]);
925
- aliasArrays.splice(ii, 1);
926
- change = true;
927
- break;
928
- }
929
- }
930
- }
931
- }
932
- aliasArrays.forEach(function(aliasArray) {
933
- aliasArray = aliasArray.filter(function(v, i, self) {
934
- return self.indexOf(v) === i;
935
- });
936
- const lastAlias = aliasArray.pop();
937
- if (lastAlias !== void 0 && typeof lastAlias === "string") {
938
- combined[lastAlias] = aliasArray;
939
- }
940
- });
941
- return combined;
942
- }
943
- function increment(orig) {
944
- return orig !== void 0 ? orig + 1 : 1;
945
- }
946
- function sanitizeKey(key) {
947
- if (key === "__proto__")
948
- return "___proto___";
949
- return key;
950
- }
951
- function stripQuotes(val) {
952
- return typeof val === "string" && (val[0] === "'" || val[0] === '"') && val[val.length - 1] === val[0] ? val.substring(1, val.length - 1) : val;
953
- }
954
-
955
- // node_modules/yargs-parser/build/lib/index.js
956
- import { readFileSync } from "fs";
957
- var _a;
958
- var _b;
959
- var _c;
960
- var minNodeVersion = process && process.env && process.env.YARGS_MIN_NODE_VERSION ? Number(process.env.YARGS_MIN_NODE_VERSION) : 12;
961
- var nodeVersion = (_b = (_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== null && _b !== void 0 ? _b : (_c = process === null || process === void 0 ? void 0 : process.version) === null || _c === void 0 ? void 0 : _c.slice(1);
962
- if (nodeVersion) {
963
- const major = Number(nodeVersion.match(/^([^.]+)/)[1]);
964
- if (major < minNodeVersion) {
965
- throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`);
966
- }
967
- }
968
- var env = process ? process.env : {};
969
- var parser = new YargsParser({
970
- cwd: process.cwd,
971
- env: () => {
972
- return env;
973
- },
974
- format,
975
- normalize,
976
- resolve,
977
- require: (path) => {
978
- if (typeof __require !== "undefined") {
979
- return __require(path);
980
- } else if (path.match(/\.json$/)) {
981
- return JSON.parse(readFileSync(path, "utf8"));
982
- } else {
983
- throw Error("only .json config files are supported in ESM");
984
- }
985
- }
986
- });
987
- var yargsParser = function Parser(args, opts) {
988
- const result = parser.parse(args.slice(), opts);
989
- return result.argv;
990
- };
991
- yargsParser.detailed = function(args, opts) {
992
- return parser.parse(args.slice(), opts);
993
- };
994
- yargsParser.camelCase = camelCase;
995
- yargsParser.decamelize = decamelize;
996
- yargsParser.looksLikeNumber = looksLikeNumber;
997
- var lib_default = yargsParser;
998
-
999
- // extra/cli.mts
1000
- var $rst = process.stdout.isTTY ? "\x1B[0m" : "";
1001
- var $und = process.stdout.isTTY ? "\x1B[4m" : "";
1002
- var $gry = process.stdout.isTTY ? "\x1B[38;5;240m" : "";
1003
- var $blu = process.stdout.isTTY ? "\x1B[38;5;69m" : "";
1004
- var $wht = process.stdout.isTTY ? "\x1B[1;38;5;255m" : "";
1005
- var $tsk = process.stdout.isTTY ? "\x1B[38;5;141m" : "";
1006
- async function main(options2) {
1007
- const { buildFile, watchDirs, tasks, props, listOnly } = options2;
1008
- if (tasks.length === 0)
1009
- tasks.push("default");
1010
- let maybeBuild = await import(buildFile);
1011
- while (maybeBuild) {
1012
- if (isBuild(maybeBuild))
1013
- break;
1014
- maybeBuild = maybeBuild.default;
1015
- }
1016
- if (!isBuild(maybeBuild)) {
1017
- console.log("Build file did not export a proper build");
1018
- console.log();
1019
- console.log('- If using CommonJS export your build as "module.exports"');
1020
- console.log(" e.g.: module.exports = build({ ... })");
1021
- console.log();
1022
- console.log('- If using ESM modules export your build as "default"');
1023
- console.log(" e.g.: export default build({ ... })");
1024
- console.log();
1025
- process.exit(1);
1026
- }
1027
- const build = maybeBuild;
1028
- if (listOnly) {
1029
- const taskNames = [];
1030
- const propNames = [];
1031
- for (const [key, value] of Object.entries(build)) {
1032
- (typeof value === "string" ? propNames : taskNames).push(key);
1033
- }
1034
- const buildFileName = _path.relative(process.cwd(), buildFile);
1035
- console.log(`
1036
- ${$gry}Outline of ${$wht}${buildFileName}${$rst}`);
1037
- console.log("\nKnown tasks:\n");
1038
- for (const taskName of taskNames.sort()) {
1039
- console.log(` ${$gry}\u25A0${$tsk} ${taskName}${$rst}`);
1040
- }
1041
- console.log("\nKnown properties:\n");
1042
- for (const propName of propNames.sort()) {
1043
- const value = build[propName] ? ` ${$gry}(default "${$rst}${$und}${build[propName]}${$gry})` : "";
1044
- console.log(` ${$gry}\u25A1${$blu} ${propName}${value}${$rst}`);
1045
- }
1046
- console.log();
1047
- } else if (watchDirs.length) {
1048
- let timeout = void 0;
1049
- const runme = () => {
1050
- build[buildMarker](tasks, props).then(() => {
1051
- console.log(`
1052
- ${$gry}Watching for files change...${$rst}
1053
- `);
1054
- }, (error) => {
1055
- if (isBuildFailure(error)) {
1056
- console.log(`
1057
- ${$gry}Watching for files change...${$rst}
1058
- `);
1059
- } else {
1060
- console.log(error);
1061
- watchers.forEach((watcher) => watcher.close());
1062
- }
1063
- }).finally(() => {
1064
- timeout = void 0;
1065
- });
1066
- };
1067
- const watchers = watchDirs.map((watchDir) => {
1068
- return _fs.watch(watchDir, { recursive: true }, () => {
1069
- if (!timeout)
1070
- timeout = setTimeout(runme, 250);
1071
- });
1072
- });
1073
- runme();
1074
- } else {
1075
- await build[buildMarker](tasks, props);
1076
- }
1077
- }
1078
- var sourceMapsEnabled = process.execArgv.indexOf("--enable-source-maps") >= 0;
1079
- var tsLoaderMarker = Symbol.for("plugjs:tsLoader");
1080
- var typeScriptEnabled = globalThis[tsLoaderMarker] === tsLoaderMarker;
1081
- if (process.env.DEBUG_CLI === "true") {
1082
- console.log("SourceMaps enabled =", sourceMapsEnabled);
1083
- console.log("TypeScript enabled =", typeScriptEnabled);
1084
- console.log(" Arguments =", process.argv.join(" "));
1085
- console.log(" PID =", process.pid);
1086
- }
1087
- var options = parseCommandLine();
1088
- if (sourceMapsEnabled && typeScriptEnabled) {
1089
- main(options).catch((error) => {
1090
- if (!isBuildFailure(error))
1091
- console.log(error);
1092
- process.exit(1);
1093
- });
1094
- } else {
1095
- const script = _url.fileURLToPath(import.meta.url);
1096
- const execArgv = [...process.execArgv];
1097
- if (!sourceMapsEnabled)
1098
- execArgv.push("--enable-source-maps");
1099
- if (!typeScriptEnabled) {
1100
- const directory = _path.dirname(script);
1101
- const extension = _path.extname(script);
1102
- const loader = _path.resolve(directory, `ts-loader${extension}`);
1103
- execArgv.push(`--experimental-loader=${loader}`, "--no-warnings");
1104
- }
1105
- const env2 = options.force ? { __TS_LOADER_FORCE_TYPE: options.force, ...process.env } : process.env;
1106
- const child = _childProcess.fork(script, [...process.argv.slice(2)], {
1107
- stdio: ["inherit", "inherit", "inherit", "ipc"],
1108
- execArgv,
1109
- env: env2
1110
- });
1111
- child.on("error", (error) => {
1112
- console.log("Error respawning CLI", error);
1113
- process.exit(1);
1114
- });
1115
- child.on("exit", (code, signal) => {
1116
- if (signal) {
1117
- console.log(`CLI process exited with signal ${signal}`);
1118
- process.exit(1);
1119
- } else if (typeof code !== "number") {
1120
- console.log("CLI process failed for an unknown reason");
1121
- process.exit(1);
1122
- } else {
1123
- process.exit(code);
1124
- }
1125
- });
1126
- }
1127
- var buildMarker = Symbol.for("plugjs:isBuild");
1128
- var buildFailure = Symbol.for("plugjs:buildFailure");
1129
- function isBuild(build) {
1130
- return build && typeof build[buildMarker] === "function";
1131
- }
1132
- function isBuildFailure(arg) {
1133
- return arg && arg[buildFailure] === buildFailure;
1134
- }
1135
- var _version;
1136
- function version() {
1137
- if (_version)
1138
- return _version;
1139
- try {
1140
- const thisFile = _url.fileURLToPath(import.meta.url);
1141
- const packageFile = _path.resolve(thisFile, "..", "..", "package.json");
1142
- const packageData = _fs.readFileSync(packageFile, "utf-8");
1143
- return _version = JSON.parse(packageData).version || "(unknown)";
1144
- } catch (error) {
1145
- if (process.env.DEBUG_CLI === "true")
1146
- console.log(error);
1147
- return _version = "(error)";
1148
- }
1149
- }
1150
- function parseCommandLine() {
1151
- const parsed = lib_default(process.argv.slice(2), {
1152
- configuration: {
1153
- "camel-case-expansion": false,
1154
- "strip-aliased": true,
1155
- "strip-dashed": true
1156
- },
1157
- alias: {
1158
- "verbose": ["v"],
1159
- "quiet": ["q"],
1160
- "colors": ["c"],
1161
- "file": ["f"],
1162
- "list": ["l"],
1163
- "watch": ["w"],
1164
- "help": ["h"]
1165
- },
1166
- string: ["file", "watch"],
1167
- boolean: ["help", "colors", "list", "force-esm", "force-cjs", "version"],
1168
- count: ["verbose", "quiet"]
1169
- });
1170
- const tasks = [];
1171
- const props = {};
1172
- const watchDirs = [];
1173
- let verbosity = 0;
1174
- let colors = void 0;
1175
- let file = void 0;
1176
- let forceEsm = false;
1177
- let forceCjs = false;
1178
- let listOnly = false;
1179
- let help = false;
1180
- for (const [key, value] of Object.entries(parsed)) {
1181
- switch (key) {
1182
- case "_":
1183
- value.forEach((current) => {
1184
- const [key2, val] = current.split(/=(.*)/, 2);
1185
- if (key2 && val)
1186
- props[key2] = val;
1187
- else
1188
- tasks.push(current);
1189
- });
1190
- break;
1191
- case "verbose":
1192
- verbosity = verbosity + value;
1193
- break;
1194
- case "quiet":
1195
- verbosity = verbosity - value;
1196
- break;
1197
- case "file":
1198
- file = value;
1199
- break;
1200
- case "watch":
1201
- if (Array.isArray(value))
1202
- watchDirs.push(...value);
1203
- else if (value)
1204
- watchDirs.push(value);
1205
- break;
1206
- case "force-esm":
1207
- forceEsm = !!value;
1208
- break;
1209
- case "force-cjs":
1210
- forceCjs = !!value;
1211
- break;
1212
- case "colors":
1213
- colors = !!value;
1214
- break;
1215
- case "list":
1216
- listOnly = !!value;
1217
- break;
1218
- case "help":
1219
- help = !!value;
1220
- break;
1221
- case "version":
1222
- console.log(`v${version()}`);
1223
- process.exit(0);
1224
- break;
1225
- default:
1226
- console.log(`Unsupported option "${key}" (try "--help")`);
1227
- process.exit(1);
1228
- }
1229
- }
1230
- if (help) {
1231
- console.log(`${$blu}${$und}Usage:${$rst}
1232
-
1233
- ${$wht}plugjs${$rst} ${$gry}[${$rst}--options${$gry}] [...${$rst}prop=val${$gry}] [...${$rst}tasks${$gry}]${$rst}
1234
-
1235
- ${$blu}${$und}Options:${$rst}
1236
-
1237
- ${$wht}-f --file ${$gry}${$und}file${$rst} Specify the build file to use (default "./build.[ts/js/...]")
1238
- ${$wht}-w --watch ${$gry}${$und}dir${$rst} Watch for changes on the specified directory and run build
1239
- ${$wht}-v --verbose${$rst} Increase logging verbosity
1240
- ${$wht}-q --quiet${$rst} Decrease logging verbosity
1241
- ${$wht}-c --colors${$rst} Force colorful output (use "--no-colors" to force plain text)
1242
- ${$wht}-l --list${$rst} Only list the tasks defined by the build, nothing more!
1243
- ${$wht}-h --help${$rst} Help! You're reading it now!
1244
- ${$wht} --version${$rst} Version! This one: ${version()}!
1245
-
1246
- ${$blu}${$und}Properties:${$rst}
1247
-
1248
- Any argument in the format "key=value" will be interpeted as a property to
1249
- be injected in the build process (e.g. "mode=production").
1250
-
1251
- ${$blu}${$und}Tasks:${$rst}
1252
-
1253
- Any other argument will be treated as a task name. If no task names are
1254
- specified, the "default" task will be executed.
1255
-
1256
- ${$blu}${$und}Watch Mode:${$rst}
1257
-
1258
- The "-w" option can be specified multiple times, and each single directory
1259
- specified will be watched for changes. Please note that Plug's own watch
1260
- mode is incredibly basic, for more complex scenarios use something more
1261
- advanced like nodemon (https://www.npmjs.com/package/nodemon).
1262
-
1263
- ${$blu}${$und}TypeScript module format:${$rst}
1264
-
1265
- Normally our TypeScript loader will transpile ".ts" files to the "type"
1266
- specified in "package.json", either "commonjs" (the default) or "module".
1267
-
1268
- To force a specific module format we can use one of the following flags:
1269
-
1270
- ${$wht}--force-esm ${$rst} Force transpilation of ".ts" files to EcmaScript modules
1271
- ${$wht}--force-cjs ${$rst} Force transpilation of ".ts" files to CommonJS modules
1272
- `);
1273
- process.exit(0);
1274
- }
1275
- if (colors !== void 0)
1276
- process.env.LOG_COLORS = `${colors}`;
1277
- if (verbosity) {
1278
- const levels = ["TRACE", "DEBUG", "INFO", "NOTICE", "WARN", "ERROR", "OFF"];
1279
- let level = levels.indexOf("NOTICE") - verbosity;
1280
- if (level >= levels.length)
1281
- level = levels.length - 1;
1282
- else if (level < 0)
1283
- level = 0;
1284
- process.env.LOG_LEVEL = levels[level];
1285
- }
1286
- const exts = ["ts", "mts", "mjs", "js", "mjs", "cjs"];
1287
- let buildFile = void 0;
1288
- if (file) {
1289
- const absolute = _path.resolve(file);
1290
- if (!isFile(absolute)) {
1291
- console.log(`Specified build file "${file}" was not found`);
1292
- process.exit(1);
1293
- } else {
1294
- buildFile = absolute;
1295
- }
1296
- } else {
1297
- for (const ext of exts) {
1298
- const absolute = _path.resolve(`build.${ext}`);
1299
- if (!isFile(absolute))
1300
- continue;
1301
- buildFile = absolute;
1302
- break;
1303
- }
1304
- }
1305
- if (!buildFile) {
1306
- console.log(`Unable to find build file "./build.[${exts.join("|")}]`);
1307
- process.exit(1);
1308
- }
1309
- watchDirs.forEach((watchDir) => {
1310
- const absolute = _path.resolve(watchDir);
1311
- if (!isDir(absolute)) {
1312
- console.log(`Specified watch directory "${watchDir}" was not found`);
1313
- process.exit(1);
1314
- } else {
1315
- watchDir = absolute;
1316
- }
1317
- });
1318
- if (forceEsm && forceCjs) {
1319
- console.log('The "--force-cjs" and "--force-esm" flags can not coexist');
1320
- process.exit(1);
1321
- }
1322
- const force = forceEsm ? "module" : forceCjs ? "commonjs" : void 0;
1323
- return { buildFile, watchDirs, tasks, props, listOnly, force };
1324
- }
1325
- function isFile(path) {
1326
- try {
1327
- return _fs.statSync(path).isFile();
1328
- } catch (error) {
1329
- return false;
1330
- }
1331
- }
1332
- function isDir(path) {
1333
- try {
1334
- return _fs.statSync(path).isDirectory();
1335
- } catch (error) {
1336
- return false;
1337
- }
1338
- }
1339
- export {
1340
- parseCommandLine,
1341
- version
1342
- };
1343
- /**
1344
- * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js
1345
- * CJS and ESM environments.
1346
- *
1347
- * @license
1348
- * Copyright (c) 2016, Contributors
1349
- * SPDX-License-Identifier: ISC
1350
- */
1351
- /**
1352
- * @license
1353
- * Copyright (c) 2016, Contributors
1354
- * SPDX-License-Identifier: ISC
1355
- */
1356
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiY2xpLm10cyIsICIuLi9ub2RlX21vZHVsZXMveWFyZ3MtcGFyc2VyL2J1aWxkL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMveWFyZ3MtcGFyc2VyL2J1aWxkL2xpYi9zdHJpbmctdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9saWIvdG9rZW5pemUtYXJnLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMveWFyZ3MtcGFyc2VyL2J1aWxkL2xpYi95YXJncy1wYXJzZXItdHlwZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9saWIveWFyZ3MtcGFyc2VyLmpzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUVBLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sU0FBUztBQUNoQixPQUFPLFdBQVc7QUFDbEIsT0FBTyxVQUFVOzs7QUNJakIsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsV0FBVyxlQUFlOzs7QUNMNUIsU0FBUyxVQUFVLEtBQUs7QUFHM0IsUUFBTSxjQUFjLFFBQVEsSUFBSSxZQUFZLEtBQUssUUFBUSxJQUFJLFlBQVk7QUFDekUsTUFBSSxDQUFDLGFBQWE7QUFDZCxVQUFNLElBQUksWUFBWTtBQUFBLEVBQzFCO0FBQ0EsTUFBSSxJQUFJLFFBQVEsR0FBRyxNQUFNLE1BQU0sSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJO0FBQ3BELFdBQU87QUFBQSxFQUNYLE9BQ0s7QUFDRCxRQUFJLFlBQVk7QUFDaEIsUUFBSSxlQUFlO0FBQ25CLFVBQU0saUJBQWlCLElBQUksTUFBTSxLQUFLO0FBQ3RDLGFBQVMsSUFBSSxpQkFBaUIsZUFBZSxHQUFHLFNBQVMsR0FBRyxJQUFJLElBQUksUUFBUSxLQUFLO0FBQzdFLFVBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQztBQUN0QixVQUFJLGNBQWM7QUFDZCx1QkFBZTtBQUNmLGNBQU0sSUFBSSxZQUFZO0FBQUEsTUFDMUI7QUFD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QSxFQUNoQjtBQUVBLFFBQU0sUUFBUSxXQUFXLFdBQVcsV0FBVyxhQUFhO0FBTTVELFNBQU8sRUFBRSxXQUFXLFdBQVcsT0FBTyxPQUFPLFVBQVUsTUFBTTtBQUMvRDtBQUtBLFNBQVMsT0FBTyxNQUF1QjtBQUNyQyxNQUFJO0FBQ0YsV0FBTyxJQUFJLFNBQVMsSUFBSSxFQUFFLE9BQU87QUFBQSxFQUNuQyxTQUFTLE9BQVA7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGO0FBR0EsU0FBUyxNQUFNLE1BQXVCO0FBQ3BDLE1BQUk7QUFDRixXQUFPLElBQUksU0FBUyxJQUFJLEVBQUUsWUFBWTtBQUFBLEVBQ3hDLFNBQVMsT0FBUDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbIkRlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5IiwgIm9wdGlvbnMiLCAia2V5IiwgImFyZ3MiLCAidmFsdWUiLCAidmFsIiwgImFyZ3YiLCAiZW52IiwgImFsaWFzZXMiLCAiZGVmYXVsdHMiLCAib3B0aW9ucyIsICJlbnYiLCAia2V5Il0KfQo=