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