@actsecurity/cli 0.2.66

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 (117) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +143 -0
  3. package/dist/cjs/arguments/argument.d.ts +63 -0
  4. package/dist/cjs/arguments/argument.d.ts.map +1 -0
  5. package/dist/cjs/arguments/argument.js +3 -0
  6. package/dist/cjs/arguments/argument.js.map +1 -0
  7. package/dist/cjs/arguments/arrayValueArgument.d.ts +17 -0
  8. package/dist/cjs/arguments/arrayValueArgument.d.ts.map +1 -0
  9. package/dist/cjs/arguments/arrayValueArgument.js +38 -0
  10. package/dist/cjs/arguments/arrayValueArgument.js.map +1 -0
  11. package/dist/cjs/arguments/booleanArgument.d.ts +11 -0
  12. package/dist/cjs/arguments/booleanArgument.d.ts.map +1 -0
  13. package/dist/cjs/arguments/booleanArgument.js +25 -0
  14. package/dist/cjs/arguments/booleanArgument.js.map +1 -0
  15. package/dist/cjs/arguments/enumArgument.d.ts +20 -0
  16. package/dist/cjs/arguments/enumArgument.d.ts.map +1 -0
  17. package/dist/cjs/arguments/enumArgument.js +35 -0
  18. package/dist/cjs/arguments/enumArgument.js.map +1 -0
  19. package/dist/cjs/arguments/enumArrayArgument.d.ts +20 -0
  20. package/dist/cjs/arguments/enumArrayArgument.d.ts.map +1 -0
  21. package/dist/cjs/arguments/enumArrayArgument.js +43 -0
  22. package/dist/cjs/arguments/enumArrayArgument.js.map +1 -0
  23. package/dist/cjs/arguments/mapArgument.d.ts +20 -0
  24. package/dist/cjs/arguments/mapArgument.d.ts.map +1 -0
  25. package/dist/cjs/arguments/mapArgument.js +35 -0
  26. package/dist/cjs/arguments/mapArgument.js.map +1 -0
  27. package/dist/cjs/arguments/numberArguments.d.ts +17 -0
  28. package/dist/cjs/arguments/numberArguments.d.ts.map +1 -0
  29. package/dist/cjs/arguments/numberArguments.js +15 -0
  30. package/dist/cjs/arguments/numberArguments.js.map +1 -0
  31. package/dist/cjs/arguments/singleValueArgument.d.ts +17 -0
  32. package/dist/cjs/arguments/singleValueArgument.d.ts.map +1 -0
  33. package/dist/cjs/arguments/singleValueArgument.js +35 -0
  34. package/dist/cjs/arguments/singleValueArgument.js.map +1 -0
  35. package/dist/cjs/arguments/stringArguments.d.ts +17 -0
  36. package/dist/cjs/arguments/stringArguments.d.ts.map +1 -0
  37. package/dist/cjs/arguments/stringArguments.js +14 -0
  38. package/dist/cjs/arguments/stringArguments.js.map +1 -0
  39. package/dist/cjs/cli.d.ts +131 -0
  40. package/dist/cjs/cli.d.ts.map +1 -0
  41. package/dist/cjs/cli.js +499 -0
  42. package/dist/cjs/cli.js.map +1 -0
  43. package/dist/cjs/index.d.ts +13 -0
  44. package/dist/cjs/index.d.ts.map +1 -0
  45. package/dist/cjs/index.js +28 -0
  46. package/dist/cjs/index.js.map +1 -0
  47. package/dist/cjs/package.json +3 -0
  48. package/dist/cjs/readRelative.d.ts +35 -0
  49. package/dist/cjs/readRelative.d.ts.map +1 -0
  50. package/dist/cjs/readRelative.js +81 -0
  51. package/dist/cjs/readRelative.js.map +1 -0
  52. package/dist/cjs/stdin.d.ts +7 -0
  53. package/dist/cjs/stdin.d.ts.map +1 -0
  54. package/dist/cjs/stdin.js +38 -0
  55. package/dist/cjs/stdin.js.map +1 -0
  56. package/dist/cjs/utils.d.ts +14 -0
  57. package/dist/cjs/utils.d.ts.map +1 -0
  58. package/dist/cjs/utils.js +21 -0
  59. package/dist/cjs/utils.js.map +1 -0
  60. package/dist/esm/arguments/argument.d.ts +63 -0
  61. package/dist/esm/arguments/argument.d.ts.map +1 -0
  62. package/dist/esm/arguments/argument.js +2 -0
  63. package/dist/esm/arguments/argument.js.map +1 -0
  64. package/dist/esm/arguments/arrayValueArgument.d.ts +17 -0
  65. package/dist/esm/arguments/arrayValueArgument.d.ts.map +1 -0
  66. package/dist/esm/arguments/arrayValueArgument.js +36 -0
  67. package/dist/esm/arguments/arrayValueArgument.js.map +1 -0
  68. package/dist/esm/arguments/booleanArgument.d.ts +11 -0
  69. package/dist/esm/arguments/booleanArgument.d.ts.map +1 -0
  70. package/dist/esm/arguments/booleanArgument.js +23 -0
  71. package/dist/esm/arguments/booleanArgument.js.map +1 -0
  72. package/dist/esm/arguments/enumArgument.d.ts +20 -0
  73. package/dist/esm/arguments/enumArgument.d.ts.map +1 -0
  74. package/dist/esm/arguments/enumArgument.js +34 -0
  75. package/dist/esm/arguments/enumArgument.js.map +1 -0
  76. package/dist/esm/arguments/enumArrayArgument.d.ts +20 -0
  77. package/dist/esm/arguments/enumArrayArgument.d.ts.map +1 -0
  78. package/dist/esm/arguments/enumArrayArgument.js +42 -0
  79. package/dist/esm/arguments/enumArrayArgument.js.map +1 -0
  80. package/dist/esm/arguments/mapArgument.d.ts +20 -0
  81. package/dist/esm/arguments/mapArgument.d.ts.map +1 -0
  82. package/dist/esm/arguments/mapArgument.js +33 -0
  83. package/dist/esm/arguments/mapArgument.js.map +1 -0
  84. package/dist/esm/arguments/numberArguments.d.ts +17 -0
  85. package/dist/esm/arguments/numberArguments.d.ts.map +1 -0
  86. package/dist/esm/arguments/numberArguments.js +13 -0
  87. package/dist/esm/arguments/numberArguments.js.map +1 -0
  88. package/dist/esm/arguments/singleValueArgument.d.ts +17 -0
  89. package/dist/esm/arguments/singleValueArgument.d.ts.map +1 -0
  90. package/dist/esm/arguments/singleValueArgument.js +33 -0
  91. package/dist/esm/arguments/singleValueArgument.js.map +1 -0
  92. package/dist/esm/arguments/stringArguments.d.ts +17 -0
  93. package/dist/esm/arguments/stringArguments.d.ts.map +1 -0
  94. package/dist/esm/arguments/stringArguments.js +11 -0
  95. package/dist/esm/arguments/stringArguments.js.map +1 -0
  96. package/dist/esm/cli.d.ts +131 -0
  97. package/dist/esm/cli.d.ts.map +1 -0
  98. package/dist/esm/cli.js +494 -0
  99. package/dist/esm/cli.js.map +1 -0
  100. package/dist/esm/index.d.ts +13 -0
  101. package/dist/esm/index.d.ts.map +1 -0
  102. package/dist/esm/index.js +13 -0
  103. package/dist/esm/index.js.map +1 -0
  104. package/dist/esm/package.json +3 -0
  105. package/dist/esm/readRelative.d.ts +35 -0
  106. package/dist/esm/readRelative.d.ts.map +1 -0
  107. package/dist/esm/readRelative.js +74 -0
  108. package/dist/esm/readRelative.js.map +1 -0
  109. package/dist/esm/stdin.d.ts +7 -0
  110. package/dist/esm/stdin.d.ts.map +1 -0
  111. package/dist/esm/stdin.js +35 -0
  112. package/dist/esm/stdin.js.map +1 -0
  113. package/dist/esm/utils.d.ts +14 -0
  114. package/dist/esm/utils.d.ts.map +1 -0
  115. package/dist/esm/utils.js +18 -0
  116. package/dist/esm/utils.js.map +1 -0
  117. package/package.json +114 -0
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPackageFileReader = createPackageFileReader;
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ class CommonJsPackageFileReader {
7
+ rootPath;
8
+ constructor(currentFile, levelsUp) {
9
+ const dirPath = currentFile.slice(0, currentFile.lastIndexOf(path_1.sep));
10
+ this.rootPath = (0, path_1.join)(dirPath, ...backSegments(levelsUp));
11
+ }
12
+ async readFile(pathParts) {
13
+ const fullPath = (0, path_1.join)(this.rootPath, ...pathParts);
14
+ return (0, promises_1.readFile)(fullPath, 'utf8');
15
+ }
16
+ }
17
+ class EsmPackageFileReader {
18
+ currentFile;
19
+ levelsUp;
20
+ rootPath;
21
+ constructor(currentFile, levelsUp) {
22
+ this.currentFile = currentFile;
23
+ this.levelsUp = levelsUp;
24
+ }
25
+ /**
26
+ * Lookup the root path of the project, going up the specified number of levels from the current file.
27
+ *
28
+ * @returns the root path of the project, calculated once and cached
29
+ */
30
+ async getRootPath() {
31
+ if (!this.rootPath) {
32
+ const dirPath = this.currentFile.slice(0, this.currentFile.lastIndexOf('/'));
33
+ const { fileURLToPath } = await Promise.resolve().then(() => require('node:url'));
34
+ const startPath = fileURLToPath(dirPath);
35
+ this.rootPath = (0, path_1.join)(startPath, ...backSegments(this.levelsUp));
36
+ }
37
+ return this.rootPath;
38
+ }
39
+ async readFile(pathParts) {
40
+ const { join } = await Promise.resolve().then(() => require('node:path'));
41
+ const root = await this.getRootPath();
42
+ const fullPath = join(root, ...pathParts);
43
+ return (0, promises_1.readFile)(fullPath, 'utf8');
44
+ }
45
+ }
46
+ /**
47
+ * A relatively sane way to read a file from a relative path inside your packaged cli app. For instance to
48
+ * read the package.json inside your package. Works on ESM and CommonJS modules. Use __filename
49
+ * or import.meta.url to get the path of the file you are in and pass it to this function. Set the `levelsUp`
50
+ * based on how your project is packaged. For instance, if your file is packaged in `dist/cli.js` and you would use `1` if
51
+ * you packaged your file is in `dist/src/cli.js` and you would use `2`. Whatever you need to get to the root.
52
+ *
53
+ * You get back a `PackageFileReader` which has a `readFile` method. You can then call that method
54
+ * with the path parts to the file you want to read, relative to the root of your project.
55
+ * For instance, to read the `package.json` file in the root of your project, you would call:
56
+ * ```ts
57
+ * const reader = await createPackageFileReader(import.meta.url, 1) // if your file is in dist/cli.js
58
+ * const packageJson = await reader.readFile(['package.json'])
59
+ * ```
60
+ *
61
+ * @param currentFile the path to start from use `import.meta.url` for esm or `__filename` for CommonJS in most cases
62
+ * @param levelsUp since __import.meta.url or __filename is the file you are in, you need to go up a few levels to ge to the root of your project. Use 0 for the current directory of the file you're calling from.
63
+ * @returns a `PackageFileReader` you can use to read files relative to the root of your project.
64
+ */
65
+ function createPackageFileReader(currentFile, levelsUp) {
66
+ const isEsm = currentFile.startsWith('file://');
67
+ if (isEsm) {
68
+ return new EsmPackageFileReader(currentFile, levelsUp);
69
+ }
70
+ return new CommonJsPackageFileReader(currentFile, levelsUp);
71
+ }
72
+ /**
73
+ * Create an array of `..` segments to go up the specified number of levels in a path.
74
+ *
75
+ * @param levelsUp the number of levels to go up
76
+ * @returns an array of `..` segments
77
+ */
78
+ function backSegments(levelsUp) {
79
+ return Array(levelsUp).fill('..');
80
+ }
81
+ //# sourceMappingURL=readRelative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readRelative.js","sourceRoot":"","sources":["../../src/readRelative.ts"],"names":[],"mappings":";;AAkFA,0DAMC;AAxFD,0CAAsC;AACtC,+BAAgC;AAiBhC,MAAM,yBAAyB;IACrB,QAAQ,CAAQ;IACxB,YAAY,WAAmB,EAAE,QAAgB;QAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,UAAG,CAAC,CAAC,CAAA;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAmB;QAChC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAA;QAClD,OAAO,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;CACF;AAED,MAAM,oBAAoB;IAId;IACA;IAJF,QAAQ,CAAoB;IAEpC,YACU,WAAmB,EACnB,QAAgB;QADhB,gBAAW,GAAX,WAAW,CAAQ;QACnB,aAAQ,GAAR,QAAQ,CAAQ;IACvB,CAAC;IAEJ;;;;OAIG;IACK,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;YAC5E,MAAM,EAAE,aAAa,EAAE,GAAG,2CAAa,UAAU,EAAC,CAAA;YAClD,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;YACxC,IAAI,CAAC,QAAQ,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QACjE,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAmB;QAChC,MAAM,EAAE,IAAI,EAAE,GAAG,2CAAa,WAAW,EAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,CAAA;QACzC,OAAO,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,uBAAuB,CAAC,WAAmB,EAAE,QAAgB;IAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,IAAI,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,IAAI,yBAAyB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Read from stdin until the stream ends, timeout, or an error occurs
3
+ *
4
+ * @returns the string input from stdin
5
+ */
6
+ export declare function readStdin(readWait: number | undefined): Promise<string>;
7
+ //# sourceMappingURL=stdin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin.d.ts","sourceRoot":"","sources":["../../src/stdin.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B7E"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readStdin = readStdin;
4
+ const process_1 = require("process");
5
+ /**
6
+ * Read from stdin until the stream ends, timeout, or an error occurs
7
+ *
8
+ * @returns the string input from stdin
9
+ */
10
+ async function readStdin(readWait) {
11
+ return new Promise((resolve, reject) => {
12
+ // If the input is not a TTY, we are most likely receiving data from a pipe.
13
+ const definitelyReceivingData = !process.stdin.isTTY;
14
+ if (!readWait || readWait <= 0) {
15
+ readWait = definitelyReceivingData ? 10_000 : 20;
16
+ }
17
+ let data = '';
18
+ const timeout = setTimeout(() => {
19
+ if (data.length === 0) {
20
+ process_1.stdin.pause();
21
+ process_1.stdin.removeAllListeners('data');
22
+ resolve(data);
23
+ }
24
+ }, readWait);
25
+ process_1.stdin.on('data', (chunk) => {
26
+ data += chunk;
27
+ });
28
+ process_1.stdin.on('end', () => {
29
+ resolve(data);
30
+ clearTimeout(timeout);
31
+ });
32
+ process_1.stdin.on('error', (err) => {
33
+ reject(err);
34
+ clearTimeout(timeout);
35
+ });
36
+ });
37
+ }
38
+ //# sourceMappingURL=stdin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/stdin.ts"],"names":[],"mappings":";;AAOA,8BA+BC;AAtCD,qCAA+B;AAE/B;;;;GAIG;AACI,KAAK,UAAU,SAAS,CAAC,QAA4B;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,4EAA4E;QAC5E,MAAM,uBAAuB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAA;QACpD,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAC/B,QAAQ,GAAG,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QAClD,CAAC;QAED,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,eAAK,CAAC,KAAK,EAAE,CAAA;gBACb,eAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;gBAChC,OAAO,CAAC,IAAI,CAAC,CAAA;YACf,CAAC;QACH,CAAC,EAAE,QAAQ,CAAC,CAAA;QAEZ,eAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,eAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,CAAA;YACb,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;QAEF,eAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,CAAA;YACX,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Optionally print a message and exit the process with the given exit code.
3
+ *
4
+ * @param exitCode the exit code to use
5
+ * @param message the message to print
6
+ */
7
+ export declare function exit(exitCode: number, message: string | undefined): void;
8
+ /**
9
+ * A utility type to ensure that T has exactly the keys of U, no more and no less.
10
+ */
11
+ export type NoExtraKeys<T, Shape> = {
12
+ [K in keyof T]: K extends keyof Shape ? T[K] : never;
13
+ };
14
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,QASjE;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,KAAK,IAAI;KACjC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CACrD,CAAA"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exit = exit;
4
+ /**
5
+ * Optionally print a message and exit the process with the given exit code.
6
+ *
7
+ * @param exitCode the exit code to use
8
+ * @param message the message to print
9
+ */
10
+ function exit(exitCode, message) {
11
+ if (message) {
12
+ if (exitCode === 0) {
13
+ console.log(message);
14
+ }
15
+ else {
16
+ console.error(message);
17
+ }
18
+ }
19
+ process.exit(exitCode);
20
+ }
21
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;AAMA,oBASC;AAfD;;;;;GAKG;AACH,SAAgB,IAAI,CAAC,QAAgB,EAAE,OAA2B;IAChE,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACxB,CAAC"}
@@ -0,0 +1,63 @@
1
+ export type ValidValue<T> = {
2
+ valid: true;
3
+ value: T;
4
+ };
5
+ export type InvalidValue = {
6
+ valid: false;
7
+ message: string;
8
+ };
9
+ export type ValidatedValues<T> = ValidValue<T> | InvalidValue;
10
+ export type Argument<ArgumentType> = {
11
+ /**
12
+ * A description of the argument, used in help text.
13
+ */
14
+ description: string;
15
+ /**
16
+ * The default value of the argument, if any.
17
+ * If not provided, the argument will be undefined until a value is provided.
18
+ */
19
+ defaultValue: ArgumentType;
20
+ /**
21
+ * Validate all values passed to the argument at once.
22
+ * @param currentValue the current value of the argument
23
+ * @param values the array of strings passed to the argument
24
+ * @param isCurrentlyDefaulted true if the current value has not been set by the user and is still the default value
25
+ * @returns if the value is invalid, returns { valid: false, message: string } and message will be shown to the user.
26
+ * if the value is valid, returns { valid: true, values`: ArgumentType[] } where value is the parsed value.
27
+ */
28
+ validateValues: (currentValue: ArgumentType, values: string[], isCurrentlyDefaulted: boolean) => Promise<ValidValue<ArgumentType> | InvalidValue> | ValidValue<ArgumentType> | InvalidValue;
29
+ /**
30
+ * Reduces the current value and a new values into a single value.
31
+ *
32
+ * @param current the current value of the argument, can be undefined if there is no default value
33
+ * @param newValues the new values being added as parsed by validateValues
34
+ * @param isCurrentlyDefaulted true if the current value has not been set by the user and is still the default value
35
+ * @returns the new value of the argument
36
+ */
37
+ reduceValues: (currentValue: ArgumentType, newValues: NonNullable<ArgumentType>, isCurrentlyDefaulted: boolean) => Promise<ArgumentType> | ArgumentType;
38
+ /**
39
+ * If this callback is provided, it will be called when the argument is present
40
+ *
41
+ * @param currentValue the current value of the argument
42
+ * @returns the value to set the argument to
43
+ */
44
+ present?(currentValue: ArgumentType): Promise<ArgumentType> | ArgumentType;
45
+ /**
46
+ * If this function is provided, it will be called to determine if the argument
47
+ * can accept multiple values.
48
+ *
49
+ * If not provided, the argument will only accept a single value.
50
+ *
51
+ * @returns true if the argument can accept multiple values, false otherwise
52
+ */
53
+ acceptMultipleValues?(): boolean;
54
+ /**
55
+ * A single-character alias for the argument, e.g. 'f' for --foo
56
+ *
57
+ * This is only valid if the argument does not take a value (e.g. boolean flags).
58
+ */
59
+ character?: string;
60
+ };
61
+ export type PerArgumentArgs = Pick<Argument<any>, 'description'>;
62
+ export type CustomArgument<ArgumentType> = Omit<Argument<ArgumentType>, 'character'>;
63
+ //# sourceMappingURL=argument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argument.d.ts","sourceRoot":"","sources":["../../../src/arguments/argument.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAA;AACrD,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAC5D,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,YAAY,CAAA;AAE7D,MAAM,MAAM,QAAQ,CAAC,YAAY,IAAI;IACnC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,YAAY,EAAE,YAAY,CAAA;IAE1B;;;;;;;OAOG;IACH,cAAc,EAAE,CACd,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EAAE,EAChB,oBAAoB,EAAE,OAAO,KAC1B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,YAAY,CAAA;IAE/F;;;;;;;OAOG;IACH,YAAY,EAAE,CACZ,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,WAAW,CAAC,YAAY,CAAC,EACpC,oBAAoB,EAAE,OAAO,KAC1B,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAA;IAEzC;;;;;OAKG;IACH,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAA;IAE1E;;;;;;;OAOG;IACH,oBAAoB,CAAC,IAAI,OAAO,CAAA;IAEhC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAA;AAChE,MAAM,MAAM,cAAc,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=argument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argument.js","sourceRoot":"","sources":["../../../src/arguments/argument.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { type Argument, type PerArgumentArgs, type ValidatedValues } from './argument.js';
2
+ type ArrayValueValidator<ValueType> = (rawValue: string) => Promise<ValidatedValues<ValueType>> | ValidatedValues<ValueType>;
3
+ type ArrayWithDefault<ValueType> = {
4
+ defaultValue: ValueType[];
5
+ } & PerArgumentArgs;
6
+ type ArrayWithoutDefault<ValueType> = {
7
+ defaultValue?: undefined;
8
+ } & PerArgumentArgs;
9
+ /**
10
+ * Creates an array value argument factory for a specific type
11
+ */
12
+ export declare function arrayValueArgument<ValueType>(validator: ArrayValueValidator<ValueType>, descriptionSuffix?: string): {
13
+ (options: ArrayWithDefault<ValueType>): Argument<ValueType[]>;
14
+ (options: ArrayWithoutDefault<ValueType>): Argument<ValueType[] | undefined>;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=arrayValueArgument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayValueArgument.d.ts","sourceRoot":"","sources":["../../../src/arguments/arrayValueArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAEzF,KAAK,mBAAmB,CAAC,SAAS,IAAI,CACpC,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;AAErE,KAAK,gBAAgB,CAAC,SAAS,IAAI;IAAE,YAAY,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,eAAe,CAAA;AAClF,KAAK,mBAAmB,CAAC,SAAS,IAAI;IAAE,YAAY,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,eAAe,CAAA;AAKpF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAC1C,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC,EACzC,iBAAiB,GAAE,MAAW;cAEG,gBAAgB,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;cAEzE,mBAAmB,CAAC,SAAS,CAAC,GACtC,QAAQ,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC;EA2CrC"}
@@ -0,0 +1,36 @@
1
+ import {} from './argument.js';
2
+ /**
3
+ * Creates an array value argument factory for a specific type
4
+ */
5
+ export function arrayValueArgument(validator, descriptionSuffix = '') {
6
+ function createArgument(options) {
7
+ return {
8
+ description: options.description + descriptionSuffix,
9
+ validateValues: async (current, values, isCurrentlyDefaulted) => {
10
+ if (values.length === 0) {
11
+ return { valid: false, message: 'at least one value is required' };
12
+ }
13
+ const validatedValues = [];
14
+ for (const rawValue of values) {
15
+ const result = await validator(rawValue);
16
+ if (!result.valid) {
17
+ return result;
18
+ }
19
+ validatedValues.push(result.value);
20
+ }
21
+ return { valid: true, value: validatedValues };
22
+ },
23
+ reduceValues: async (current, newValues, isCurrentlyDefaulted) => {
24
+ if (isCurrentlyDefaulted || !current) {
25
+ return newValues;
26
+ }
27
+ current.push(...newValues);
28
+ return current;
29
+ },
30
+ defaultValue: options.defaultValue,
31
+ acceptMultipleValues: () => true
32
+ };
33
+ }
34
+ return createArgument;
35
+ }
36
+ //# sourceMappingURL=arrayValueArgument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayValueArgument.js","sourceRoot":"","sources":["../../../src/arguments/arrayValueArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6D,MAAM,eAAe,CAAA;AAYzF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAyC,EACzC,oBAA4B,EAAE;IAM9B,SAAS,cAAc,CACrB,OAA4C;QAE5C,OAAO;YACL,WAAW,EAAE,OAAO,CAAC,WAAW,GAAG,iBAAiB;YACpD,cAAc,EAAE,KAAK,EACnB,OAAgC,EAChC,MAAgB,EAChB,oBAA6B,EACU,EAAE;gBACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAA;gBACpE,CAAC;gBAED,MAAM,eAAe,GAAgB,EAAE,CAAA;gBACvC,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAA;oBACxC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAClB,OAAO,MAAM,CAAA;oBACf,CAAC;oBACD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACpC,CAAC;gBAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,CAAA;YAChD,CAAC;YACD,YAAY,EAAE,KAAK,EACjB,OAAgC,EAChC,SAAsB,EACtB,oBAA8B,EAC9B,EAAE;gBACF,IAAI,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACrC,OAAO,SAAS,CAAA;gBAClB,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;gBAC1B,OAAO,OAAO,CAAA;YAChB,CAAC;YACD,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI;SACjC,CAAA;IACH,CAAC;IAED,OAAO,cAAc,CAAA;AACvB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type Argument, type PerArgumentArgs } from './argument.js';
2
+ /**
3
+ * Creates a boolean argument that is false by default and true if present.
4
+ *
5
+ * @param options the description and the single character that can be used to set the value to true
6
+ * @returns a boolean argument
7
+ */
8
+ export declare function booleanArgument(options: {
9
+ character: string;
10
+ } & PerArgumentArgs): Argument<boolean>;
11
+ //# sourceMappingURL=booleanArgument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booleanArgument.d.ts","sourceRoot":"","sources":["../../../src/arguments/booleanArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAwB,MAAM,eAAe,CAAA;AAEzF;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,GAC/C,QAAQ,CAAC,OAAO,CAAC,CAkBnB"}
@@ -0,0 +1,23 @@
1
+ import {} from './argument.js';
2
+ /**
3
+ * Creates a boolean argument that is false by default and true if present.
4
+ *
5
+ * @param options the description and the single character that can be used to set the value to true
6
+ * @returns a boolean argument
7
+ */
8
+ export function booleanArgument(options) {
9
+ return {
10
+ description: options.description,
11
+ character: options.character,
12
+ validateValues: (currentValue, value, isCurrentlyDefaulted) => {
13
+ if (value.length == 0) {
14
+ return { valid: true, value: true };
15
+ }
16
+ return { valid: false, message: `does not accept values but received ${value.join(', ')}` };
17
+ },
18
+ reduceValues: (current, newValue, isCurrentlyDefaulted) => current,
19
+ present: (currentValue) => true,
20
+ defaultValue: false
21
+ };
22
+ }
23
+ //# sourceMappingURL=booleanArgument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booleanArgument.js","sourceRoot":"","sources":["../../../src/arguments/booleanArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6D,MAAM,eAAe,CAAA;AAEzF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAgD;IAEhD,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,CACd,YAAqB,EACrB,KAAe,EACf,oBAA6B,EACH,EAAE;YAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;YACrC,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,uCAAuC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;QAC7F,CAAC;QACD,YAAY,EAAE,CAAC,OAAgB,EAAE,QAAiB,EAAE,oBAA6B,EAAE,EAAE,CAAC,OAAO;QAC7F,OAAO,EAAE,CAAC,YAAqB,EAAE,EAAE,CAAC,IAAI;QACxC,YAAY,EAAE,KAAK;KACpB,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type NoExtraKeys } from '../utils.js';
2
+ import { type Argument, type PerArgumentArgs } from './argument.js';
3
+ type EnumType<T extends {
4
+ validValues: string[];
5
+ defaultValue?: string | undefined;
6
+ }> = T['defaultValue'] extends string ? T['validValues'][number] | T['defaultValue'] : T['validValues'][number];
7
+ type EnumOptions = {
8
+ defaultValue?: string;
9
+ validValues: string[];
10
+ } & PerArgumentArgs;
11
+ export declare function enumArgument<const O extends {
12
+ defaultValue: string;
13
+ validValues: string[];
14
+ } & PerArgumentArgs>(options: NoExtraKeys<O, EnumOptions>): Argument<EnumType<O>>;
15
+ export declare function enumArgument<const O extends {
16
+ defaultValue?: undefined;
17
+ validValues: string[];
18
+ } & PerArgumentArgs>(options: NoExtraKeys<O, EnumOptions>): Argument<EnumType<O> | undefined>;
19
+ export {};
20
+ //# sourceMappingURL=enumArgument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enumArgument.d.ts","sourceRoot":"","sources":["../../../src/arguments/enumArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAwB,MAAM,eAAe,CAAA;AAEzF,KAAK,QAAQ,CAAC,CAAC,SAAS;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,IAClF,CAAC,CAAC,cAAc,CAAC,SAAS,MAAM,GAC5B,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,GAC5C,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9B,KAAK,WAAW,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,CAAA;AAErF,wBAAgB,YAAY,CAC1B,KAAK,CAAC,CAAC,SAAS;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,EACjF,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC9D,wBAAgB,YAAY,CAC1B,KAAK,CAAC,CAAC,SAAS;IAAE,YAAY,CAAC,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,EACrF,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA"}
@@ -0,0 +1,34 @@
1
+ import {} from '../utils.js';
2
+ import {} from './argument.js';
3
+ export function enumArgument(options) {
4
+ return {
5
+ description: options.description +
6
+ `. One value required, valid values are: ${options.validValues.join(', ')}`,
7
+ validateValues: (currentValue, values, isCurrentlyDefaulted) => {
8
+ if (values.length == 0) {
9
+ return { valid: false, message: 'a value is required' };
10
+ }
11
+ if (currentValue != options.defaultValue) {
12
+ return { valid: false, message: 'expects a single value but was set multiple times' };
13
+ }
14
+ if (values.length > 1) {
15
+ return {
16
+ valid: false,
17
+ message: 'expects a single value but received ' + values.join(', ')
18
+ };
19
+ }
20
+ const value = values[0];
21
+ const match = options.validValues.find((v) => v.toLowerCase() === value.toLowerCase());
22
+ if (!match) {
23
+ return {
24
+ valid: false,
25
+ message: `${value} is not one of the allowed values: ${options.validValues.join(', ')}`
26
+ };
27
+ }
28
+ return { valid: true, value: match };
29
+ },
30
+ reduceValues: (current, newValue, isCurrentlyDefaulted) => newValue,
31
+ defaultValue: options.defaultValue
32
+ };
33
+ }
34
+ //# sourceMappingURL=enumArgument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enumArgument.js","sourceRoot":"","sources":["../../../src/arguments/enumArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,aAAa,CAAA;AAC9C,OAAO,EAA6D,MAAM,eAAe,CAAA;AAezF,MAAM,UAAU,YAAY,CAE1B,OAAoC;IACpC,OAAO;QACL,WAAW,EACT,OAAO,CAAC,WAAW;YACnB,2CAA2C,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC7E,cAAc,EAAE,CACd,YAAqC,EACrC,MAAgB,EAChB,oBAA6B,EACC,EAAE;YAChC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAA;YACzD,CAAC;YACD,IAAI,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAA;YACvF,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,sCAAsC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;iBACpE,CAAA;YACH,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;YACtF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,GAAG,KAAK,sCAAsC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACxF,CAAA;YACH,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAoB,EAAE,CAAA;QACrD,CAAC;QACD,YAAY,EAAE,CACZ,OAAgC,EAChC,QAAqB,EACrB,oBAA6B,EAC7B,EAAE,CAAC,QAAQ;QACb,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type NoExtraKeys } from '../utils.js';
2
+ import { type Argument, type PerArgumentArgs } from './argument.js';
3
+ type EnumArrayType<T extends {
4
+ validValues: string[];
5
+ defaultValue?: string[] | undefined;
6
+ }> = T['defaultValue'] extends string[] ? T['validValues'][number] | T['defaultValue'][number] : T['validValues'][number];
7
+ type EnumArrayOptions = {
8
+ defaultValue?: string[];
9
+ validValues: string[];
10
+ } & PerArgumentArgs;
11
+ export declare function enumArrayArgument<const O extends {
12
+ defaultValue: string[];
13
+ validValues: string[];
14
+ } & PerArgumentArgs>(options: NoExtraKeys<O, EnumArrayOptions>): Argument<EnumArrayType<O>[]>;
15
+ export declare function enumArrayArgument<const O extends {
16
+ defaultValue?: undefined;
17
+ validValues: string[];
18
+ } & PerArgumentArgs>(options: NoExtraKeys<O, EnumArrayOptions>): Argument<EnumArrayType<O>[] | undefined>;
19
+ export {};
20
+ //# sourceMappingURL=enumArrayArgument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enumArrayArgument.d.ts","sourceRoot":"","sources":["../../../src/arguments/enumArrayArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAwB,MAAM,eAAe,CAAA;AAEzF,KAAK,aAAa,CAAC,CAAC,SAAS;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,IACzF,CAAC,CAAC,cAAc,CAAC,SAAS,MAAM,EAAE,GAC9B,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,GACpD,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9B,KAAK,gBAAgB,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,CAAA;AAE5F,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,CAAC,SAAS;IAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,EACnF,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAC1E,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,CAAC,SAAS;IAAE,YAAY,CAAC,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,EACrF,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAA"}
@@ -0,0 +1,42 @@
1
+ import {} from '../utils.js';
2
+ import {} from './argument.js';
3
+ export function enumArrayArgument(options) {
4
+ return {
5
+ description: options.description +
6
+ `. One or more values required, valid values are: ${options.validValues.join(', ')}`,
7
+ validateValues: async (currentValue, values, isCurrentlyDefaulted) => {
8
+ if (values.length == 0) {
9
+ return { valid: false, message: 'At least one value is required' };
10
+ }
11
+ const invalidValues = [];
12
+ const validValues = [];
13
+ for (const value of values) {
14
+ const match = options.validValues.find((v) => v.toLowerCase() === value.toLowerCase());
15
+ if (!match) {
16
+ invalidValues.push(value);
17
+ }
18
+ else {
19
+ validValues.push(match);
20
+ }
21
+ }
22
+ if (invalidValues.length > 0) {
23
+ return {
24
+ valid: false,
25
+ message: `${invalidValues.map((v) => `${v}`).join(', ')} is not one of the allowed values: ${options.validValues.join(', ')}`
26
+ };
27
+ }
28
+ return { valid: true, value: validValues };
29
+ },
30
+ reduceValues: async (current, newValues, isCurrentlyDefaulted) => {
31
+ if (isCurrentlyDefaulted || !current) {
32
+ // If the current value is the default or undefined, replace it entirely
33
+ return newValues;
34
+ }
35
+ current.push(...newValues);
36
+ return current;
37
+ },
38
+ defaultValue: options.defaultValue,
39
+ acceptMultipleValues: () => true
40
+ };
41
+ }
42
+ //# sourceMappingURL=enumArrayArgument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enumArrayArgument.js","sourceRoot":"","sources":["../../../src/arguments/enumArrayArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,aAAa,CAAA;AAC9C,OAAO,EAA6D,MAAM,eAAe,CAAA;AAezF,MAAM,UAAU,iBAAiB,CAG/B,OAAyC;IAEzC,OAAO;QACL,WAAW,EACT,OAAO,CAAC,WAAW;YACnB,oDAAoD,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACtF,cAAc,EAAE,KAAK,EACnB,YAA4C,EAC5C,MAAgB,EAChB,oBAA6B,EACiB,EAAE;YAChD,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAA;YACpE,CAAC;YACD,MAAM,aAAa,GAAa,EAAE,CAAA;YAClC,MAAM,WAAW,GAAuB,EAAE,CAAA;YAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;gBACtF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAC3B,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,IAAI,CAAC,KAAyB,CAAC,CAAA;gBAC7C,CAAC;YACH,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC9H,CAAA;YACH,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;QAC5C,CAAC;QACD,YAAY,EAAE,KAAK,EACjB,OAAuC,EACvC,SAA6B,EAC7B,oBAA8B,EAC9B,EAAE;YACF,IAAI,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrC,wEAAwE;gBACxE,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;YAC1B,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI;KACjC,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type Argument, type PerArgumentArgs } from './argument.js';
2
+ type MapResult = Record<string, string[]>;
3
+ type MapWithDefault = {
4
+ defaultValue: MapResult;
5
+ } & PerArgumentArgs;
6
+ type MapWithoutDefault = {
7
+ defaultValue?: undefined;
8
+ } & PerArgumentArgs;
9
+ /**
10
+ * Creates a map argument where the first value is the key and the rest are values.
11
+ *
12
+ * --arg-name key1 key1Value1 key1Value2 --arg-name key2 key2Value1 key2Value2
13
+ *
14
+ * @param options the description and optional default value
15
+ * @returns a map argument
16
+ */
17
+ export declare function mapArgument(options: MapWithDefault): Argument<MapResult>;
18
+ export declare function mapArgument(options: MapWithoutDefault): Argument<MapResult | undefined>;
19
+ export {};
20
+ //# sourceMappingURL=mapArgument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapArgument.d.ts","sourceRoot":"","sources":["../../../src/arguments/mapArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAwB,MAAM,eAAe,CAAA;AAEzF,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AAEzC,KAAK,cAAc,GAAG;IAAE,YAAY,EAAE,SAAS,CAAA;CAAE,GAAG,eAAe,CAAA;AACnE,KAAK,iBAAiB,GAAG;IAAE,YAAY,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,eAAe,CAAA;AAGvE;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;AACzE,wBAAgB,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAA"}
@@ -0,0 +1,33 @@
1
+ import {} from './argument.js';
2
+ export function mapArgument(options) {
3
+ return {
4
+ description: options.description + `. Each instance requires a key and at least one value.`,
5
+ validateValues: async (currentValue, values, isCurrentlyDefaulted) => {
6
+ const [first, ...rest] = values;
7
+ if (!first) {
8
+ return { valid: false, message: 'a key is required and at least one value is required' };
9
+ }
10
+ if (rest.length < 1) {
11
+ return { valid: false, message: `${first} requires at least one value` };
12
+ }
13
+ if (!isCurrentlyDefaulted && currentValue && first in currentValue) {
14
+ return { valid: false, message: `${first} is set multiple times` };
15
+ }
16
+ return {
17
+ valid: true,
18
+ value: {
19
+ [first]: rest
20
+ }
21
+ };
22
+ },
23
+ reduceValues: async (current, newValue, isCurrentlyDefaulted) => {
24
+ if (isCurrentlyDefaulted || !current) {
25
+ return { ...newValue };
26
+ }
27
+ return { ...current, ...newValue };
28
+ },
29
+ defaultValue: options.defaultValue,
30
+ acceptMultipleValues: () => true
31
+ };
32
+ }
33
+ //# sourceMappingURL=mapArgument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapArgument.js","sourceRoot":"","sources":["../../../src/arguments/mapArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6D,MAAM,eAAe,CAAA;AAkBzF,MAAM,UAAU,WAAW,CACzB,OAA+B;IAE/B,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW,GAAG,wDAAwD;QAC3F,cAAc,EAAE,KAAK,EACnB,YAAmC,EACnC,MAAgB,EAChB,oBAA6B,EACQ,EAAE;YACvC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAA;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAA;YAC1F,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,8BAA8B,EAAE,CAAA;YAC1E,CAAC;YACD,IAAI,CAAC,oBAAoB,IAAI,YAAY,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;gBACnE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,wBAAwB,EAAE,CAAA;YACpE,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE;oBACL,CAAC,KAAK,CAAC,EAAE,IAAI;iBACd;aACF,CAAA;QACH,CAAC;QACD,YAAY,EAAE,KAAK,EACjB,OAA8B,EAC9B,QAAmB,EACnB,oBAA6B,EAC7B,EAAE;YACF,IAAI,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrC,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAA;YACxB,CAAC;YACD,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAA;QACpC,CAAC;QACD,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI;KACjC,CAAA;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare const numberArgument: {
2
+ (options: {
3
+ defaultValue: number;
4
+ } & import("./argument.js").PerArgumentArgs): import("./argument.js").Argument<number>;
5
+ (options: {
6
+ defaultValue?: undefined;
7
+ } & import("./argument.js").PerArgumentArgs): import("./argument.js").Argument<number | undefined>;
8
+ };
9
+ export declare const numberArrayArgument: {
10
+ (options: {
11
+ defaultValue: number[];
12
+ } & import("./argument.js").PerArgumentArgs): import("./argument.js").Argument<number[]>;
13
+ (options: {
14
+ defaultValue?: undefined;
15
+ } & import("./argument.js").PerArgumentArgs): import("./argument.js").Argument<number[] | undefined>;
16
+ };
17
+ //# sourceMappingURL=numberArguments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberArguments.d.ts","sourceRoot":"","sources":["../../../src/arguments/numberArguments.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,cAAc;;;;;;;CAAwE,CAAA;AAEnG,eAAO,MAAM,mBAAmB;;;;;;;CAG/B,CAAA"}
@@ -0,0 +1,13 @@
1
+ import {} from './argument.js';
2
+ import { arrayValueArgument } from './arrayValueArgument.js';
3
+ import { singleValueArgument } from './singleValueArgument.js';
4
+ function validateNumber(rawValue) {
5
+ const num = Number(rawValue);
6
+ if (isNaN(num)) {
7
+ return { valid: false, message: `expects a number but received ${rawValue}` };
8
+ }
9
+ return { valid: true, value: num };
10
+ }
11
+ export const numberArgument = singleValueArgument(validateNumber, '. One number required.');
12
+ export const numberArrayArgument = arrayValueArgument(validateNumber, '. One or more numbers required.');
13
+ //# sourceMappingURL=numberArguments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberArguments.js","sourceRoot":"","sources":["../../../src/arguments/numberArguments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iCAAiC,QAAQ,EAAE,EAAE,CAAA;IAC/E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAS,cAAc,EAAE,wBAAwB,CAAC,CAAA;AAEnG,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CACnD,cAAc,EACd,iCAAiC,CAClC,CAAA"}