@hugojosefson/cli 0.11.0 → 0.13.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 (214) hide show
  1. package/README.md +1 -1
  2. package/esm/deno.js +16 -8
  3. package/esm/hj.js +19 -0
  4. package/esm/node_modules/@conventional-changelog/template/LICENSE.md +21 -0
  5. package/esm/node_modules/@conventional-changelog/template/README.md +66 -0
  6. package/esm/node_modules/@conventional-changelog/template/dist/elements.d.ts +78 -0
  7. package/esm/node_modules/@conventional-changelog/template/dist/elements.d.ts.map +1 -0
  8. package/esm/node_modules/@conventional-changelog/template/dist/elements.js +132 -0
  9. package/esm/node_modules/@conventional-changelog/template/dist/index.d.ts +6 -0
  10. package/esm/node_modules/@conventional-changelog/template/dist/index.d.ts.map +1 -0
  11. package/esm/node_modules/@conventional-changelog/template/dist/index.js +5 -0
  12. package/esm/node_modules/@conventional-changelog/template/dist/legacy.d.ts +20 -0
  13. package/esm/node_modules/@conventional-changelog/template/dist/legacy.d.ts.map +1 -0
  14. package/esm/node_modules/@conventional-changelog/template/dist/legacy.js +22 -0
  15. package/esm/node_modules/@conventional-changelog/template/dist/references.d.ts +43 -0
  16. package/esm/node_modules/@conventional-changelog/template/dist/references.d.ts.map +1 -0
  17. package/esm/node_modules/@conventional-changelog/template/dist/references.js +82 -0
  18. package/esm/node_modules/@conventional-changelog/template/dist/templates.d.ts +74 -0
  19. package/esm/node_modules/@conventional-changelog/template/dist/templates.d.ts.map +1 -0
  20. package/esm/node_modules/@conventional-changelog/template/dist/templates.js +125 -0
  21. package/esm/node_modules/@conventional-changelog/template/dist/types/commit.d.ts +37 -0
  22. package/esm/node_modules/@conventional-changelog/template/dist/types/commit.d.ts.map +1 -0
  23. package/esm/node_modules/@conventional-changelog/template/dist/types/commit.js +2 -0
  24. package/esm/node_modules/@conventional-changelog/template/dist/types/context.d.ts +113 -0
  25. package/esm/node_modules/@conventional-changelog/template/dist/types/context.d.ts.map +1 -0
  26. package/esm/node_modules/@conventional-changelog/template/dist/types/context.js +2 -0
  27. package/esm/node_modules/@conventional-changelog/template/dist/types/index.d.ts +4 -0
  28. package/esm/node_modules/@conventional-changelog/template/dist/types/index.d.ts.map +1 -0
  29. package/esm/node_modules/@conventional-changelog/template/dist/types/index.js +2 -0
  30. package/esm/node_modules/@conventional-changelog/template/dist/types/utils.d.ts +2 -0
  31. package/esm/node_modules/@conventional-changelog/template/dist/types/utils.d.ts.map +1 -0
  32. package/esm/node_modules/@conventional-changelog/template/dist/types/utils.js +2 -0
  33. package/esm/node_modules/@conventional-changelog/template/package.json +38 -0
  34. package/esm/node_modules/@simple-libs/stream-utils/LICENSE +21 -0
  35. package/esm/node_modules/@simple-libs/stream-utils/README.md +79 -0
  36. package/esm/node_modules/@simple-libs/stream-utils/dist/index.d.ts +51 -0
  37. package/esm/node_modules/@simple-libs/stream-utils/dist/index.d.ts.map +1 -0
  38. package/esm/node_modules/@simple-libs/stream-utils/dist/index.js +116 -0
  39. package/esm/node_modules/@simple-libs/stream-utils/package.json +38 -0
  40. package/esm/node_modules/argue-cli/LICENSE +21 -0
  41. package/esm/node_modules/argue-cli/README.md +239 -0
  42. package/esm/node_modules/argue-cli/dist/args.d.ts +30 -0
  43. package/esm/node_modules/argue-cli/dist/args.d.ts.map +1 -0
  44. package/esm/node_modules/argue-cli/dist/argv.d.ts +14 -0
  45. package/esm/node_modules/argue-cli/dist/argv.d.ts.map +1 -0
  46. package/esm/node_modules/argue-cli/dist/core.d.ts +24 -0
  47. package/esm/node_modules/argue-cli/dist/core.d.ts.map +1 -0
  48. package/esm/node_modules/argue-cli/dist/index.d.ts +6 -0
  49. package/esm/node_modules/argue-cli/dist/index.d.ts.map +1 -0
  50. package/esm/node_modules/argue-cli/dist/index.js +254 -0
  51. package/esm/node_modules/argue-cli/dist/index.js.map +1 -0
  52. package/esm/node_modules/argue-cli/dist/options.d.ts +9 -0
  53. package/esm/node_modules/argue-cli/dist/options.d.ts.map +1 -0
  54. package/esm/node_modules/argue-cli/dist/types.d.ts +16 -0
  55. package/esm/node_modules/argue-cli/dist/types.d.ts.map +1 -0
  56. package/esm/node_modules/argue-cli/dist/utils.d.ts +24 -0
  57. package/esm/node_modules/argue-cli/dist/utils.d.ts.map +1 -0
  58. package/esm/node_modules/argue-cli/package.json +34 -0
  59. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer/LICENSE.md +21 -0
  60. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer/README.md +369 -0
  61. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-changelog-writer/package.json +53 -0
  62. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-filter/LICENSE +21 -0
  63. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-filter/README.md +184 -0
  64. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-filter/package.json +31 -0
  65. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-parser/LICENSE.md +21 -0
  66. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-parser/README.md +383 -0
  67. package/esm/node_modules/conventional-changelog-core/node_modules/conventional-commits-parser/package.json +47 -0
  68. package/esm/node_modules/conventional-changelog-writer/README.md +49 -342
  69. package/esm/node_modules/conventional-changelog-writer/dist/cli/index.d.ts +3 -0
  70. package/esm/node_modules/conventional-changelog-writer/dist/cli/index.d.ts.map +1 -0
  71. package/esm/node_modules/conventional-changelog-writer/dist/cli/index.js +68 -0
  72. package/esm/node_modules/conventional-changelog-writer/dist/cli/utils.d.ts +4 -0
  73. package/esm/node_modules/conventional-changelog-writer/dist/cli/utils.d.ts.map +1 -0
  74. package/esm/node_modules/conventional-changelog-writer/dist/cli/utils.js +39 -0
  75. package/esm/node_modules/conventional-changelog-writer/dist/commit.d.ts +10 -0
  76. package/esm/node_modules/conventional-changelog-writer/dist/commit.d.ts.map +1 -0
  77. package/esm/node_modules/conventional-changelog-writer/dist/commit.js +43 -0
  78. package/esm/node_modules/conventional-changelog-writer/dist/context.d.ts +27 -0
  79. package/esm/node_modules/conventional-changelog-writer/dist/context.d.ts.map +1 -0
  80. package/esm/node_modules/conventional-changelog-writer/dist/context.js +134 -0
  81. package/esm/node_modules/conventional-changelog-writer/dist/index.d.ts +7 -0
  82. package/esm/node_modules/conventional-changelog-writer/dist/index.d.ts.map +1 -0
  83. package/esm/node_modules/conventional-changelog-writer/dist/index.js +6 -0
  84. package/esm/node_modules/conventional-changelog-writer/dist/options.d.ts +25 -0
  85. package/esm/node_modules/conventional-changelog-writer/dist/options.d.ts.map +1 -0
  86. package/esm/node_modules/conventional-changelog-writer/dist/options.js +79 -0
  87. package/esm/node_modules/conventional-changelog-writer/dist/template.d.ts +10 -0
  88. package/esm/node_modules/conventional-changelog-writer/dist/template.d.ts.map +1 -0
  89. package/esm/node_modules/conventional-changelog-writer/dist/template.js +18 -0
  90. package/esm/node_modules/conventional-changelog-writer/dist/types/index.d.ts +8 -0
  91. package/esm/node_modules/conventional-changelog-writer/dist/types/index.d.ts.map +1 -0
  92. package/esm/node_modules/conventional-changelog-writer/dist/types/index.js +2 -0
  93. package/esm/node_modules/conventional-changelog-writer/dist/types/options.d.ts +122 -0
  94. package/esm/node_modules/conventional-changelog-writer/dist/types/options.d.ts.map +1 -0
  95. package/esm/node_modules/conventional-changelog-writer/dist/types/options.js +2 -0
  96. package/esm/node_modules/conventional-changelog-writer/dist/types/utils.d.ts +9 -0
  97. package/esm/node_modules/conventional-changelog-writer/dist/types/utils.d.ts.map +1 -0
  98. package/esm/node_modules/conventional-changelog-writer/dist/types/utils.js +2 -0
  99. package/esm/node_modules/conventional-changelog-writer/dist/utils.d.ts +20 -0
  100. package/esm/node_modules/conventional-changelog-writer/dist/utils.d.ts.map +1 -0
  101. package/esm/node_modules/conventional-changelog-writer/dist/utils.js +70 -0
  102. package/esm/node_modules/conventional-changelog-writer/dist/writers.d.ts +29 -0
  103. package/esm/node_modules/conventional-changelog-writer/dist/writers.d.ts.map +1 -0
  104. package/esm/node_modules/conventional-changelog-writer/dist/writers.js +94 -0
  105. package/esm/node_modules/conventional-changelog-writer/package.json +24 -26
  106. package/esm/node_modules/conventional-commits-filter/README.md +51 -170
  107. package/esm/node_modules/conventional-commits-filter/dist/RevertedCommitsFilter.d.ts +17 -0
  108. package/esm/node_modules/conventional-commits-filter/dist/RevertedCommitsFilter.d.ts.map +1 -0
  109. package/esm/node_modules/conventional-commits-filter/dist/RevertedCommitsFilter.js +46 -0
  110. package/esm/node_modules/conventional-commits-filter/dist/filters.d.ts +19 -0
  111. package/esm/node_modules/conventional-commits-filter/dist/filters.d.ts.map +1 -0
  112. package/esm/node_modules/conventional-commits-filter/dist/filters.js +34 -0
  113. package/esm/node_modules/conventional-commits-filter/dist/index.d.ts +4 -0
  114. package/esm/node_modules/conventional-commits-filter/dist/index.d.ts.map +1 -0
  115. package/esm/node_modules/conventional-commits-filter/dist/index.js +3 -0
  116. package/esm/node_modules/conventional-commits-filter/dist/types.d.ts +6 -0
  117. package/esm/node_modules/conventional-commits-filter/dist/types.d.ts.map +1 -0
  118. package/esm/node_modules/conventional-commits-filter/dist/types.js +2 -0
  119. package/esm/node_modules/conventional-commits-filter/dist/utils.d.ts +16 -0
  120. package/esm/node_modules/conventional-commits-filter/dist/utils.d.ts.map +1 -0
  121. package/esm/node_modules/conventional-commits-filter/dist/utils.js +43 -0
  122. package/esm/node_modules/conventional-commits-filter/package.json +22 -16
  123. package/esm/node_modules/conventional-commits-parser/README.md +49 -353
  124. package/esm/node_modules/conventional-commits-parser/dist/CommitParser.d.ts +40 -0
  125. package/esm/node_modules/conventional-commits-parser/dist/CommitParser.d.ts.map +1 -0
  126. package/esm/node_modules/conventional-commits-parser/dist/CommitParser.js +319 -0
  127. package/esm/node_modules/conventional-commits-parser/dist/cli/index.d.ts +3 -0
  128. package/esm/node_modules/conventional-commits-parser/dist/cli/index.d.ts.map +1 -0
  129. package/esm/node_modules/conventional-commits-parser/dist/cli/index.js +67 -0
  130. package/esm/node_modules/conventional-commits-parser/dist/cli/options.d.ts +3 -0
  131. package/esm/node_modules/conventional-commits-parser/dist/cli/options.d.ts.map +1 -0
  132. package/esm/node_modules/conventional-commits-parser/dist/cli/options.js +40 -0
  133. package/esm/node_modules/conventional-commits-parser/dist/cli/utils.d.ts +5 -0
  134. package/esm/node_modules/conventional-commits-parser/dist/cli/utils.d.ts.map +1 -0
  135. package/esm/node_modules/conventional-commits-parser/dist/cli/utils.js +49 -0
  136. package/esm/node_modules/conventional-commits-parser/dist/index.d.ts +4 -0
  137. package/esm/node_modules/conventional-commits-parser/dist/index.d.ts.map +1 -0
  138. package/esm/node_modules/conventional-commits-parser/dist/index.js +3 -0
  139. package/esm/node_modules/conventional-commits-parser/dist/options.d.ts +3 -0
  140. package/esm/node_modules/conventional-commits-parser/dist/options.d.ts.map +1 -0
  141. package/esm/node_modules/conventional-commits-parser/dist/options.js +27 -0
  142. package/esm/node_modules/conventional-commits-parser/dist/regex.d.ts +8 -0
  143. package/esm/node_modules/conventional-commits-parser/dist/regex.d.ts.map +1 -0
  144. package/esm/node_modules/conventional-commits-parser/dist/regex.js +63 -0
  145. package/esm/node_modules/conventional-commits-parser/dist/stream.d.ts +14 -0
  146. package/esm/node_modules/conventional-commits-parser/dist/stream.d.ts.map +1 -0
  147. package/esm/node_modules/conventional-commits-parser/dist/stream.js +38 -0
  148. package/esm/node_modules/conventional-commits-parser/dist/types.d.ts +100 -0
  149. package/esm/node_modules/conventional-commits-parser/dist/types.d.ts.map +1 -0
  150. package/esm/node_modules/conventional-commits-parser/dist/types.js +2 -0
  151. package/esm/node_modules/conventional-commits-parser/dist/utils.d.ts +41 -0
  152. package/esm/node_modules/conventional-commits-parser/dist/utils.d.ts.map +1 -0
  153. package/esm/node_modules/conventional-commits-parser/dist/utils.js +75 -0
  154. package/esm/node_modules/conventional-commits-parser/package.json +22 -23
  155. package/esm/src/cli/command-help.js +15 -0
  156. package/esm/src/cli/repair-configuration-description.js +98 -0
  157. package/esm/src/cli/run-changelog.js +51 -0
  158. package/esm/src/cli/run-cli.js +8 -0
  159. package/esm/src/features/built-in-feature-registry.js +2 -0
  160. package/esm/src/features/changelog-feature.js +155 -0
  161. package/esm/src/features/github-ci-artifacts.js +17 -3
  162. package/esm/src/features/github-ci-runtime-matrix.js +50 -0
  163. package/esm/src/features/github-release-publish-artifacts.js +5 -4
  164. package/esm/src/features/github-release-publish-feature.js +7 -2
  165. package/esm/src/features/github-workflow-cache.js +18 -0
  166. package/esm/src/features/npm-readme-badge.js +163 -0
  167. package/esm/src/features/readme-contribution-plans.js +18 -1
  168. package/esm/src/features/workflow-deno.js +1 -1
  169. package/esm/src/package/npm-name.js +5 -0
  170. package/esm/src/readme/contribution-blocks.js +33 -6
  171. package/esm/src/release/changelog-markdown.js +41 -0
  172. package/esm/src/release/changelog.js +155 -7
  173. package/esm/src/release/format-changelog.js +15 -0
  174. package/esm/src/release/migrate-changelog.js +92 -0
  175. package/esm/src/release/publish-github.js +7 -3
  176. package/esm/src/release/publish-npm.js +2 -2
  177. package/esm/src/release/publish-tag-prepare.js +63 -78
  178. package/esm/src/release/release-history.js +53 -0
  179. package/npm-dependencies.lock.json +115 -48
  180. package/package.json +7 -5
  181. package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/dependencies.js +0 -11036
  182. package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/index.d.ts +0 -1416
  183. package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/index.js +0 -100
  184. package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/licenses.md +0 -1767
  185. package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/options.js +0 -92
  186. package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/parser.js +0 -84
  187. package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/utils.js +0 -7
  188. package/esm/node_modules/conventional-commits-parser/node_modules/meow/build/validate.js +0 -122
  189. package/esm/node_modules/conventional-commits-parser/node_modules/meow/license +0 -9
  190. package/esm/node_modules/conventional-commits-parser/node_modules/meow/package.json +0 -107
  191. package/esm/node_modules/conventional-commits-parser/node_modules/meow/readme.md +0 -314
  192. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/cli.mjs +0 -0
  193. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/index.js +0 -0
  194. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/lib/util.js +0 -0
  195. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/templates/commit.hbs +0 -0
  196. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/templates/footer.hbs +0 -0
  197. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/templates/header.hbs +0 -0
  198. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core/node_modules/conventional-changelog-writer}/templates/template.hbs +0 -0
  199. /package/esm/node_modules/{conventional-commits-filter → conventional-changelog-core/node_modules/conventional-commits-filter}/index.js +0 -0
  200. /package/esm/node_modules/{conventional-commits-parser → conventional-changelog-core/node_modules/conventional-commits-parser}/cli.mjs +0 -0
  201. /package/esm/node_modules/{conventional-commits-parser → conventional-changelog-core/node_modules/conventional-commits-parser}/index.js +0 -0
  202. /package/esm/node_modules/{conventional-commits-parser → conventional-changelog-core/node_modules/conventional-commits-parser}/lib/parser.js +0 -0
  203. /package/esm/node_modules/{conventional-commits-parser → conventional-changelog-core/node_modules/conventional-commits-parser}/lib/regex.js +0 -0
  204. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/dependencies.js +0 -0
  205. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/index.d.ts +0 -0
  206. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/index.js +0 -0
  207. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/licenses.md +0 -0
  208. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/options.js +0 -0
  209. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/parser.js +0 -0
  210. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/utils.js +0 -0
  211. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/build/validate.js +0 -0
  212. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/license +0 -0
  213. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/package.json +0 -0
  214. /package/esm/node_modules/{conventional-changelog-writer → conventional-changelog-core}/node_modules/meow/readme.md +0 -0
@@ -0,0 +1,254 @@
1
+ //#region src/argv.ts
2
+ const ARGV_START_INDEX = 2;
3
+ /**
4
+ * Internal state of arguments.
5
+ */
6
+ const argv = process.argv.slice(ARGV_START_INDEX);
7
+ /**
8
+ * Reset arguments state.
9
+ */
10
+ function resetArgs() {
11
+ argv.splice(0, argv.length);
12
+ argv.push(...process.argv.slice(ARGV_START_INDEX));
13
+ }
14
+ /**
15
+ * Set arguments state.
16
+ * @param args
17
+ */
18
+ function setArgs(...args) {
19
+ argv.splice(0, argv.length);
20
+ argv.push(...args);
21
+ }
22
+ //#endregion
23
+ //#region src/utils.ts
24
+ /**
25
+ * Match reference with argument.
26
+ * @param argRef
27
+ * @param arg
28
+ * @returns Full name or null.
29
+ */
30
+ function matchArgName(argRef, arg) {
31
+ if (typeof argRef === "string") return argRef === arg ? argRef : null;
32
+ if (argRef.name === arg) return argRef.name;
33
+ return argRef.aliases.includes(arg) ? argRef.name : null;
34
+ }
35
+ /**
36
+ * Find full argument name in references.
37
+ * @param argRefs
38
+ * @param arg
39
+ * @returns Found argument's full name or null.
40
+ */
41
+ function findArgName(argRefs, arg) {
42
+ let argRef;
43
+ let argName;
44
+ for (argRef of argRefs) {
45
+ argName = matchArgName(argRef, arg);
46
+ if (argName) return argName;
47
+ }
48
+ return null;
49
+ }
50
+ //#endregion
51
+ //#region src/core.ts
52
+ /**
53
+ * Read next argument.
54
+ * Throws error if no next argument.
55
+ * @returns Next argument.
56
+ */
57
+ function read() {
58
+ const value = argv.shift();
59
+ if (!value) throw new Error("Unexpected end of arguments");
60
+ return value;
61
+ }
62
+ /**
63
+ * Read all remaining arguments.
64
+ * @returns Remaining arguments, empty array if none.
65
+ */
66
+ function rest() {
67
+ return argv.splice(0, argv.length);
68
+ }
69
+ /**
70
+ * Expectation of the end.
71
+ * Throws an error if there are more arguments left.
72
+ */
73
+ function end() {
74
+ if (argv.length) throw new Error(`Unexpected argument "${argv[0]}"`);
75
+ }
76
+ /**
77
+ * Expect one of the given arguments.
78
+ * @param argRefs
79
+ * @returns Expected full argument name.
80
+ */
81
+ function expect(...argRefs) {
82
+ const arg = read();
83
+ const argName = findArgName(argRefs, arg);
84
+ if (!argName) throw new Error(`Unexpected argument "${arg}"`);
85
+ return argName;
86
+ }
87
+ //#endregion
88
+ //#region src/args.ts
89
+ /**
90
+ * Describe argument with aliases.
91
+ * @param name - Main name.
92
+ * @param alias - Alias name.
93
+ * @param restAliases - Rest aliases.
94
+ * @returns Description of argument with aliases..
95
+ */
96
+ function alias(name, alias, ...restAliases) {
97
+ return {
98
+ name,
99
+ aliases: [alias, ...restAliases]
100
+ };
101
+ }
102
+ function caseTwin(name) {
103
+ return name.length > 1 ? name.includes("-") ? name.replace(/-+(.)/g, (_, char) => char.toUpperCase()) : name.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`) : name;
104
+ }
105
+ /**
106
+ * Describe argument that matches both camelCase and kebab-case forms.
107
+ * Name and every alias longer than one character get the twin form as an alias.
108
+ * @param argRef - Argument name in either form.
109
+ * @returns Description of argument with the twin forms as aliases.
110
+ */
111
+ function autocase(argRef) {
112
+ let name;
113
+ let aliases;
114
+ if (typeof argRef === "string") {
115
+ name = argRef;
116
+ aliases = /* @__PURE__ */ new Set();
117
+ } else {
118
+ name = argRef.name;
119
+ aliases = new Set(argRef.aliases.concat(argRef.aliases.map(caseTwin)));
120
+ }
121
+ aliases.add(caseTwin(name));
122
+ aliases.delete(name);
123
+ if (!aliases.size) return argRef;
124
+ return {
125
+ name,
126
+ aliases: [...aliases]
127
+ };
128
+ }
129
+ /**
130
+ * Describe option with value.
131
+ * @param argRef - Option name.
132
+ * @param type - Value type.
133
+ * @returns Option reader.
134
+ */
135
+ function option(argRef, type) {
136
+ if (Array.isArray(type)) return (option, read, options) => {
137
+ const argName = matchArgName(argRef, option);
138
+ if (argName) {
139
+ const prevValues = options[argName];
140
+ const value = read();
141
+ return { [argName]: (Array.isArray(prevValues) ? prevValues : []).concat(type[0] === Number ? parseFloat(value) : value) };
142
+ }
143
+ return null;
144
+ };
145
+ if (type === String) return (option, read) => {
146
+ const argName = matchArgName(argRef, option);
147
+ if (argName) return { [argName]: read() };
148
+ return null;
149
+ };
150
+ if (type === Number) return (option, read) => {
151
+ const argName = matchArgName(argRef, option);
152
+ if (argName) return { [argName]: parseFloat(read()) };
153
+ return null;
154
+ };
155
+ if (type === Array) return (option, read, options) => {
156
+ const argName = matchArgName(argRef, option);
157
+ if (argName) {
158
+ const prevValues = options[argName];
159
+ const values = read().split(",");
160
+ return { [argName]: Array.isArray(prevValues) ? prevValues.concat(values) : values };
161
+ }
162
+ return null;
163
+ };
164
+ return (option) => {
165
+ const argName = matchArgName(argRef, option);
166
+ if (argName) return { [argName]: true };
167
+ return null;
168
+ };
169
+ }
170
+ const NEGATION_PREFIX = "no-";
171
+ /**
172
+ * Describe boolean flag with `--no-*` negation support.
173
+ * @param argRef - Flag name.
174
+ * @returns Option reader.
175
+ */
176
+ function flag(argRef) {
177
+ return (option) => {
178
+ let value = true;
179
+ let argName = matchArgName(argRef, option);
180
+ if (!argName && option.startsWith(NEGATION_PREFIX)) {
181
+ value = false;
182
+ argName = matchArgName(argRef, option.slice(3));
183
+ }
184
+ if (argName) return { [argName]: value };
185
+ return null;
186
+ };
187
+ }
188
+ //#endregion
189
+ //#region src/options.ts
190
+ function isOption(arg) {
191
+ return /^--?[^-].*/.test(arg);
192
+ }
193
+ function removePrefix(arg) {
194
+ return arg.replace(/^--?/, "");
195
+ }
196
+ function splitOption(arg) {
197
+ const eqIndex = arg.indexOf("=");
198
+ return eqIndex === -1 ? [arg] : [arg.slice(0, eqIndex), arg.slice(eqIndex + 1)];
199
+ }
200
+ function createOptionReader(optionReaders) {
201
+ return optionReaders.reduceRight((readNextOption, readOption) => {
202
+ if (!readNextOption) return readOption;
203
+ return (option, read, options) => readOption(option, read, options) ?? readNextOption(option, read, options);
204
+ }, null);
205
+ }
206
+ /**
207
+ * Read options from arguments.
208
+ * @param optionReaders
209
+ * @returns Options with values.
210
+ */
211
+ function readOptions(...optionReaders) {
212
+ if (!argv.length) return {};
213
+ const readOption = createOptionReader(optionReaders);
214
+ if (!readOption) return {};
215
+ const options = {};
216
+ let i = 0;
217
+ let arg = argv[i];
218
+ let optionResult;
219
+ let optionEqValue;
220
+ const next = () => {
221
+ arg = argv[++i];
222
+ };
223
+ const remove = () => {
224
+ if (optionEqValue !== void 0) throw new Error(`Unexpected value for "${arg}"`);
225
+ argv.splice(i--, 1);
226
+ };
227
+ const read = () => {
228
+ if (optionEqValue !== void 0) {
229
+ const value = optionEqValue;
230
+ optionEqValue = void 0;
231
+ return value;
232
+ }
233
+ next();
234
+ remove();
235
+ if (!arg) throw new Error("Unexpected end of arguments");
236
+ return arg;
237
+ };
238
+ while (arg) {
239
+ if (isOption(arg)) {
240
+ [arg, optionEqValue] = splitOption(arg);
241
+ optionResult = readOption(removePrefix(arg), read, options);
242
+ if (optionResult) {
243
+ remove();
244
+ Object.assign(options, optionResult);
245
+ }
246
+ }
247
+ next();
248
+ }
249
+ return options;
250
+ }
251
+ //#endregion
252
+ export { alias, argv, autocase, end, expect, flag, option, read, readOptions, resetArgs, rest, setArgs };
253
+
254
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/argv.ts","../src/utils.ts","../src/core.ts","../src/args.ts","../src/options.ts"],"sourcesContent":["\nconst ARGV_START_INDEX = 2\n\n/**\n * Internal state of arguments.\n */\nexport const argv = process.argv.slice(ARGV_START_INDEX)\n\n/**\n * Reset arguments state.\n */\nexport function resetArgs() {\n argv.splice(0, argv.length)\n argv.push(...process.argv.slice(ARGV_START_INDEX))\n}\n\n/**\n * Set arguments state.\n * @param args\n */\nexport function setArgs(...args: string[]) {\n argv.splice(0, argv.length)\n argv.push(...args)\n}\n","\nimport type { ArgRef } from './types.js'\n\ntype FlatMerge<T> = T extends infer U ? { [K in keyof U]: U[K] } : never\n\nexport type Merge<T extends readonly [...unknown[]]> = T extends [infer L, ...infer R]\n ? FlatMerge<NonNullable<L> & Merge<R>>\n : unknown\n\nexport type UnionMerge<T extends readonly [...unknown[]]> = T extends [infer L, ...infer R]\n ? L | Merge<R>\n // oxlint-disable-next-line typescript/no-explicit-any\n : any\n\n// oxlint-disable-next-line typescript/no-explicit-any\ntype AnyFunction = (...args: any[]) => any\n\nexport type ReturnTypes<T extends readonly [...AnyFunction[]]> = T extends [infer L, ...infer R]\n ? L extends AnyFunction\n ? R extends AnyFunction[]\n ? [ReturnType<L>, ...ReturnTypes<R>]\n : []\n : []\n : []\n\n/**\n * Match reference with argument.\n * @param argRef\n * @param arg\n * @returns Full name or null.\n */\nexport function matchArgName<T extends string>(argRef: ArgRef<T>, arg: string) {\n if (typeof argRef === 'string') {\n return argRef === arg\n ? argRef\n : null\n }\n\n if (argRef.name === arg) {\n return argRef.name\n }\n\n return argRef.aliases.includes(arg)\n ? argRef.name\n : null\n}\n\n/**\n * Find full argument name in references.\n * @param argRefs\n * @param arg\n * @returns Found argument's full name or null.\n */\nexport function findArgName<T extends string>(argRefs: [...ArgRef<T>[]], arg: string) {\n let argRef: ArgRef<T>\n let argName: T | null\n\n for (argRef of argRefs) {\n argName = matchArgName(argRef, arg)\n\n if (argName) {\n return argName\n }\n }\n\n return null\n}\n","import type { ArgRef } from './types.js'\nimport { argv } from './argv.js'\nimport { findArgName } from './utils.js'\n\n/**\n * Read next argument.\n * Throws error if no next argument.\n * @returns Next argument.\n */\nexport function read() {\n const value = argv.shift()\n\n if (!value) {\n throw new Error('Unexpected end of arguments')\n }\n\n return value\n}\n\n/**\n * Read all remaining arguments.\n * @returns Remaining arguments, empty array if none.\n */\nexport function rest() {\n return argv.splice(0, argv.length)\n}\n\n/**\n * Expectation of the end.\n * Throws an error if there are more arguments left.\n */\nexport function end() {\n if (argv.length) {\n throw new Error(`Unexpected argument \"${argv[0]}\"`)\n }\n}\n\n/**\n * Expect one of the given arguments.\n * @param argRefs\n * @returns Expected full argument name.\n */\nexport function expect<T extends string>(...argRefs: [...ArgRef<T>[]]) {\n const arg = read()\n const argName = findArgName(argRefs, arg)\n\n if (!argName) {\n throw new Error(`Unexpected argument \"${arg}\"`)\n }\n\n return argName\n}\n","import type {\n AliasArgRef,\n ArgRef,\n OptionConstructor,\n OptionsReaderState,\n OptionsReaderRead,\n OptionResult\n} from './types.js'\nimport { matchArgName } from './utils.js'\n\n/**\n * Describe argument with aliases.\n * @param name - Main name.\n * @param alias - Alias name.\n * @param restAliases - Rest aliases.\n * @returns Description of argument with aliases..\n */\nexport function alias<T extends string>(name: T, alias: string, ...restAliases: string[]): AliasArgRef<T> {\n return {\n name,\n aliases: [alias, ...restAliases]\n }\n}\n\nfunction caseTwin(name: string) {\n return name.length > 1\n ? name.includes('-')\n ? name.replace(/-+(.)/g, (_, char: string) => char.toUpperCase())\n : name.replace(/[A-Z]/g, char => `-${char.toLowerCase()}`)\n : name\n}\n\n/**\n * Describe argument that matches both camelCase and kebab-case forms.\n * Name and every alias longer than one character get the twin form as an alias.\n * @param argRef - Argument name in either form.\n * @returns Description of argument with the twin forms as aliases.\n */\nexport function autocase<T extends string>(argRef: ArgRef<T>): ArgRef<T> {\n let name\n let aliases\n\n if (typeof argRef === 'string') {\n name = argRef\n aliases = new Set<string>()\n } else {\n name = argRef.name\n aliases = new Set(argRef.aliases.concat(argRef.aliases.map(caseTwin)))\n }\n\n aliases.add(caseTwin(name))\n aliases.delete(name)\n\n if (!aliases.size) {\n return argRef\n }\n\n return {\n name,\n aliases: [...aliases]\n }\n}\n\n/**\n * Describe option with value.\n * @param argRef - Option name.\n * @param type - Value type.\n * @returns Option reader.\n */\nexport function option<T extends string, K extends OptionConstructor>(argRef: ArgRef<T>, type: K) {\n if (Array.isArray(type)) {\n return (option: string, read: OptionsReaderRead, options: OptionsReaderState) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n const prevValues = options[argName]\n const value = read()\n\n return {\n [argName]: (Array.isArray(prevValues) ? prevValues : []).concat(\n type[0] === Number ? parseFloat(value) : value\n )\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === String) {\n return (option: string, read: OptionsReaderRead) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: read()\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === Number) {\n return (option: string, read: OptionsReaderRead) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: parseFloat(read())\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n if (type === Array) {\n return (option: string, read: OptionsReaderRead, options: OptionsReaderState) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n const prevValues = options[argName]\n const values = read().split(',')\n\n return {\n [argName]: Array.isArray(prevValues)\n ? prevValues.concat(values)\n : values\n } as OptionResult<T, K>\n }\n\n return null\n }\n }\n\n return (option: string) => {\n const argName = matchArgName(argRef, option)\n\n if (argName) {\n return {\n [argName]: true\n } as OptionResult<T, K>\n }\n\n return null\n }\n}\n\nconst NEGATION_PREFIX = 'no-'\n\n/**\n * Describe boolean flag with `--no-*` negation support.\n * @param argRef - Flag name.\n * @returns Option reader.\n */\nexport function flag<T extends string>(argRef: ArgRef<T>) {\n return (option: string) => {\n let value = true\n let argName = matchArgName(argRef, option)\n\n if (!argName && option.startsWith(NEGATION_PREFIX)) {\n value = false\n argName = matchArgName(argRef, option.slice(NEGATION_PREFIX.length))\n }\n\n if (argName) {\n return {\n [argName]: value\n } as OptionResult<T, BooleanConstructor>\n }\n\n return null\n }\n}\n","import type {\n OptionReader,\n OptionResult\n} from './types.js'\nimport type {\n Merge,\n ReturnTypes,\n UnionMerge\n} from './utils.js'\nimport { argv } from './argv.js'\n\nfunction isOption(arg: string) {\n return /^--?[^-].*/.test(arg)\n}\n\nfunction removePrefix(arg: string) {\n return arg.replace(/^--?/, '')\n}\n\nfunction splitOption(arg: string): [name: string, value?: string] {\n const eqIndex = arg.indexOf('=')\n\n return eqIndex === -1\n ? [arg]\n : [arg.slice(0, eqIndex), arg.slice(eqIndex + 1)]\n}\n\nfunction createOptionReader<T extends OptionReader[]>(optionReaders: [...T]) {\n const optionReader = optionReaders.reduceRight<OptionReader | null>(\n (readNextOption, readOption) => {\n if (!readNextOption) {\n return readOption\n }\n\n return (option, read, options) => readOption(option, read, options) ?? readNextOption(option, read, options)\n },\n null\n )\n\n return optionReader as OptionReader<UnionMerge<ReturnTypes<T>>> | null\n}\n\n/**\n * Read options from arguments.\n * @param optionReaders\n * @returns Options with values.\n */\nexport function readOptions<T extends OptionReader[]>(...optionReaders: [...T]): Partial<Merge<ReturnTypes<T>>> {\n if (!argv.length) {\n return {}\n }\n\n const readOption = createOptionReader(optionReaders)\n\n if (!readOption) {\n return {}\n }\n\n const options = {}\n let i = 0\n let arg = argv[i]\n let optionResult: OptionResult | null\n let optionEqValue: string | undefined\n const next = () => {\n arg = argv[++i]\n }\n const remove = () => {\n if (optionEqValue !== undefined) {\n throw new Error(`Unexpected value for \"${arg}\"`)\n }\n\n argv.splice(i--, 1)\n }\n const read = () => {\n if (optionEqValue !== undefined) {\n const value = optionEqValue\n\n optionEqValue = undefined\n\n return value\n }\n\n next()\n remove()\n\n if (!arg) {\n throw new Error('Unexpected end of arguments')\n }\n\n return arg\n }\n\n // oxlint-disable-next-line eslint/no-unmodified-loop-condition\n while (arg) {\n if (isOption(arg)) {\n [arg, optionEqValue] = splitOption(arg)\n optionResult = readOption(removePrefix(arg), read, options)\n\n if (optionResult) {\n remove()\n Object.assign(options, optionResult)\n }\n }\n\n next()\n }\n\n return options\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { OptionReader } from './types.js';
2
+ import type { Merge, ReturnTypes } from './utils.js';
3
+ /**
4
+ * Read options from arguments.
5
+ * @param optionReaders
6
+ * @returns Options with values.
7
+ */
8
+ export declare function readOptions<T extends OptionReader[]>(...optionReaders: [...T]): Partial<Merge<ReturnTypes<T>>>;
9
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAEb,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EAEZ,MAAM,YAAY,CAAA;AAkCnB;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,YAAY,EAAE,EAAE,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CA6D9G"}
@@ -0,0 +1,16 @@
1
+ export type SimpleArgRef<T extends string> = T;
2
+ export interface AliasArgRef<T extends string> {
3
+ name: T;
4
+ aliases: string[];
5
+ }
6
+ export type ArgRef<T extends string> = SimpleArgRef<T> | AliasArgRef<T>;
7
+ export type ArgRefName<T extends ArgRef<string>> = T extends AliasArgRef<string> ? T['name'] : T;
8
+ export type OptionsReaderState = Record<string, unknown>;
9
+ export type OptionsReaderRead = () => string;
10
+ export type PrimitiveConstructor = StringConstructor | NumberConstructor | ArrayConstructor | BooleanConstructor;
11
+ export type ListConstructor = [StringConstructor] | [NumberConstructor];
12
+ export type OptionConstructor = PrimitiveConstructor | ListConstructor;
13
+ export type OptionValueType<T extends OptionConstructor> = T extends [StringConstructor] ? string[] : T extends [NumberConstructor] ? number[] : T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends ArrayConstructor ? string[] : boolean;
14
+ export type OptionResult<T extends string = string, K extends OptionConstructor = OptionConstructor> = Record<T, OptionValueType<K>>;
15
+ export type OptionReader<T extends OptionResult = OptionResult> = (option: string, read: OptionsReaderRead, options: OptionsReaderState) => T | null;
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAA;AAE9C,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC3C,IAAI,EAAE,CAAC,CAAA;IACP,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAEvE,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,IAC7C,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,GACzB,CAAC,CAAC,MAAM,CAAC,GACT,CAAC,CAAA;AAEP,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAExD,MAAM,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAA;AAE5C,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,kBAAkB,CAAA;AAEhH,MAAM,MAAM,eAAe,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAEvE,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG,eAAe,CAAA;AAEtE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,iBAAiB,IACrD,CAAC,SAAS,CAAC,iBAAiB,CAAC,GACzB,MAAM,EAAE,GACR,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAC3B,MAAM,EAAE,GACR,CAAC,SAAS,iBAAiB,GACzB,MAAM,GACN,CAAC,SAAS,iBAAiB,GACzB,MAAM,GACN,CAAC,SAAS,gBAAgB,GACxB,MAAM,EAAE,GACR,OAAO,CAAA;AAErB,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpI,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAC5D,CACE,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,kBAAkB,KACxB,CAAC,GAAG,IAAI,CAAA"}
@@ -0,0 +1,24 @@
1
+ import type { ArgRef } from './types.js';
2
+ type FlatMerge<T> = T extends infer U ? {
3
+ [K in keyof U]: U[K];
4
+ } : never;
5
+ export type Merge<T extends readonly [...unknown[]]> = T extends [infer L, ...infer R] ? FlatMerge<NonNullable<L> & Merge<R>> : unknown;
6
+ export type UnionMerge<T extends readonly [...unknown[]]> = T extends [infer L, ...infer R] ? L | Merge<R> : any;
7
+ type AnyFunction = (...args: any[]) => any;
8
+ export type ReturnTypes<T extends readonly [...AnyFunction[]]> = T extends [infer L, ...infer R] ? L extends AnyFunction ? R extends AnyFunction[] ? [ReturnType<L>, ...ReturnTypes<R>] : [] : [] : [];
9
+ /**
10
+ * Match reference with argument.
11
+ * @param argRef
12
+ * @param arg
13
+ * @returns Full name or null.
14
+ */
15
+ export declare function matchArgName<T extends string>(argRef: ArgRef<T>, arg: string): T | null;
16
+ /**
17
+ * Find full argument name in references.
18
+ * @param argRefs
19
+ * @param arg
20
+ * @returns Found argument's full name or null.
21
+ */
22
+ export declare function findArgName<T extends string>(argRefs: [...ArgRef<T>[]], arg: string): T | null;
23
+ export {};
24
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,CAAA;AAExE,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAClF,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GACpC,OAAO,CAAA;AAEX,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GACvF,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAEZ,GAAG,CAAA;AAGP,KAAK,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;AAE1C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAC5F,CAAC,SAAS,WAAW,GACnB,CAAC,SAAS,WAAW,EAAE,GACrB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAClC,EAAE,GACJ,EAAE,GACJ,EAAE,CAAA;AAEN;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,YAc5E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,YAanF"}
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "argue-cli",
3
+ "type": "module",
4
+ "version": "3.2.0",
5
+ "description": "A thin and strongly typed CLI arguments parser for Node.js.",
6
+ "author": "dangreen",
7
+ "license": "MIT",
8
+ "funding": "https://ko-fi.com/dangreen",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/TrigenSoftware/Argue.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/TrigenSoftware/Argue/issues"
15
+ },
16
+ "keywords": [
17
+ "cli",
18
+ "arguments",
19
+ "parser",
20
+ "console",
21
+ "terminal"
22
+ ],
23
+ "engines": {
24
+ "node": ">=22"
25
+ },
26
+ "types": "./dist/index.d.ts",
27
+ "exports": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js"
30
+ },
31
+ "files": [
32
+ "dist"
33
+ ]
34
+ }
@@ -0,0 +1,21 @@
1
+ ### MIT License
2
+
3
+ Copyright © [conventional-changelog team](https://github.com/conventional-changelog)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9
+ of the Software, and to permit persons to whom the Software is furnished to do
10
+ so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.