@optique/core 0.4.0-dev.52 → 0.4.0-dev.53
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.
- package/README.md +2 -3
- package/dist/facade.cjs +16 -16
- package/dist/facade.js +16 -16
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/parser.cjs +76 -0
- package/dist/parser.d.cts +51 -8
- package/dist/parser.d.ts +51 -8
- package/dist/parser.js +76 -1
- package/dist/valueparser.cjs +1 -1
- package/dist/valueparser.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
@optique/core
|
|
2
2
|
=============
|
|
3
3
|
|
|
4
|
-
> [!
|
|
5
|
-
>
|
|
6
|
-
> Expect breaking changes as we refine the API and features.
|
|
4
|
+
> [!WARNING]
|
|
5
|
+
> The API is stabilizing, but may change before the 1.0 release.
|
|
7
6
|
|
|
8
7
|
The core package of Optique which provides the shared types and parser
|
|
9
8
|
combinators. It is designed to be used in universal JavaScript runtimes,
|
package/dist/facade.cjs
CHANGED
|
@@ -73,7 +73,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
73
73
|
}), require_parser.merge(require_parser.object({
|
|
74
74
|
help: require_parser.constant(false),
|
|
75
75
|
version: require_parser.constant(true)
|
|
76
|
-
}), versionOption)) : help === "none" && version === "both" ? require_parser.longestMatch(require_parser.object({
|
|
76
|
+
}), require_parser.object({ versionFlag: versionOption }))) : help === "none" && version === "both" ? require_parser.longestMatch(require_parser.object({
|
|
77
77
|
help: require_parser.constant(false),
|
|
78
78
|
version: require_parser.constant(true),
|
|
79
79
|
result: versionCommand
|
|
@@ -84,7 +84,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
84
84
|
}), require_parser.merge(require_parser.object({
|
|
85
85
|
help: require_parser.constant(false),
|
|
86
86
|
version: require_parser.constant(true)
|
|
87
|
-
}), versionOption)) : help === "command" && version === "none" ? require_parser.longestMatch(require_parser.object({
|
|
87
|
+
}), require_parser.object({ versionFlag: versionOption }))) : help === "command" && version === "none" ? require_parser.longestMatch(require_parser.object({
|
|
88
88
|
help: require_parser.constant(true),
|
|
89
89
|
version: require_parser.constant(false),
|
|
90
90
|
commands: helpCommand
|
|
@@ -115,7 +115,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
115
115
|
}), require_parser.merge(require_parser.object({
|
|
116
116
|
help: require_parser.constant(false),
|
|
117
117
|
version: require_parser.constant(true)
|
|
118
|
-
}), versionOption)) : help === "command" && version === "both" ? require_parser.longestMatch(require_parser.object({
|
|
118
|
+
}), require_parser.object({ versionFlag: versionOption }))) : help === "command" && version === "both" ? require_parser.longestMatch(require_parser.object({
|
|
119
119
|
help: require_parser.constant(true),
|
|
120
120
|
version: require_parser.constant(false),
|
|
121
121
|
commands: helpCommand
|
|
@@ -130,7 +130,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
130
130
|
}), require_parser.merge(require_parser.object({
|
|
131
131
|
help: require_parser.constant(false),
|
|
132
132
|
version: require_parser.constant(true)
|
|
133
|
-
}), versionOption)) : help === "option" && version === "none" ? require_parser.longestMatch(require_parser.object({
|
|
133
|
+
}), require_parser.object({ versionFlag: versionOption }))) : help === "option" && version === "none" ? require_parser.longestMatch(require_parser.object({
|
|
134
134
|
help: require_parser.constant(false),
|
|
135
135
|
version: require_parser.constant(false),
|
|
136
136
|
result: parser
|
|
@@ -138,7 +138,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
138
138
|
help: require_parser.constant(true),
|
|
139
139
|
version: require_parser.constant(false),
|
|
140
140
|
commands: require_parser.constant([])
|
|
141
|
-
}), helpOption)) : help === "option" && version === "command" ? require_parser.longestMatch(require_parser.object({
|
|
141
|
+
}), require_parser.object({ helpFlag: helpOption }))) : help === "option" && version === "command" ? require_parser.longestMatch(require_parser.object({
|
|
142
142
|
help: require_parser.constant(false),
|
|
143
143
|
version: require_parser.constant(true),
|
|
144
144
|
result: versionCommand
|
|
@@ -150,10 +150,10 @@ function run(parser, programName, args, options = {}) {
|
|
|
150
150
|
help: require_parser.constant(true),
|
|
151
151
|
version: require_parser.constant(false),
|
|
152
152
|
commands: require_parser.constant([])
|
|
153
|
-
}), helpOption)) : help === "option" && version === "option" ? require_parser.longestMatch(require_parser.merge(require_parser.object({
|
|
153
|
+
}), require_parser.object({ helpFlag: helpOption }))) : help === "option" && version === "option" ? require_parser.longestMatch(require_parser.merge(require_parser.object({
|
|
154
154
|
help: require_parser.constant(false),
|
|
155
155
|
version: require_parser.constant(true)
|
|
156
|
-
}), versionOption), require_parser.object({
|
|
156
|
+
}), require_parser.object({ versionFlag: versionOption })), require_parser.object({
|
|
157
157
|
help: require_parser.constant(false),
|
|
158
158
|
version: require_parser.constant(false),
|
|
159
159
|
result: parser
|
|
@@ -161,10 +161,10 @@ function run(parser, programName, args, options = {}) {
|
|
|
161
161
|
help: require_parser.constant(true),
|
|
162
162
|
version: require_parser.constant(false),
|
|
163
163
|
commands: require_parser.constant([])
|
|
164
|
-
}), helpOption)) : help === "option" && version === "both" ? require_parser.longestMatch(require_parser.merge(require_parser.object({
|
|
164
|
+
}), require_parser.object({ helpFlag: helpOption }))) : help === "option" && version === "both" ? require_parser.longestMatch(require_parser.merge(require_parser.object({
|
|
165
165
|
help: require_parser.constant(false),
|
|
166
166
|
version: require_parser.constant(true)
|
|
167
|
-
}), versionOption), require_parser.object({
|
|
167
|
+
}), require_parser.object({ versionFlag: versionOption })), require_parser.object({
|
|
168
168
|
help: require_parser.constant(false),
|
|
169
169
|
version: require_parser.constant(true),
|
|
170
170
|
result: versionCommand
|
|
@@ -176,7 +176,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
176
176
|
help: require_parser.constant(true),
|
|
177
177
|
version: require_parser.constant(false),
|
|
178
178
|
commands: require_parser.constant([])
|
|
179
|
-
}), helpOption)) : help === "both" && version === "none" ? require_parser.longestMatch(require_parser.object({
|
|
179
|
+
}), require_parser.object({ helpFlag: helpOption }))) : help === "both" && version === "none" ? require_parser.longestMatch(require_parser.object({
|
|
180
180
|
help: require_parser.constant(false),
|
|
181
181
|
version: require_parser.constant(false),
|
|
182
182
|
result: parser
|
|
@@ -188,7 +188,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
188
188
|
help: require_parser.constant(true),
|
|
189
189
|
version: require_parser.constant(false),
|
|
190
190
|
commands: require_parser.constant([])
|
|
191
|
-
}), helpOption)) : help === "both" && version === "command" ? require_parser.longestMatch(require_parser.object({
|
|
191
|
+
}), require_parser.object({ helpFlag: helpOption }))) : help === "both" && version === "command" ? require_parser.longestMatch(require_parser.object({
|
|
192
192
|
help: require_parser.constant(true),
|
|
193
193
|
version: require_parser.constant(false),
|
|
194
194
|
commands: helpCommand
|
|
@@ -204,10 +204,10 @@ function run(parser, programName, args, options = {}) {
|
|
|
204
204
|
help: require_parser.constant(true),
|
|
205
205
|
version: require_parser.constant(false),
|
|
206
206
|
commands: require_parser.constant([])
|
|
207
|
-
}), helpOption)) : help === "both" && version === "option" ? require_parser.longestMatch(require_parser.merge(require_parser.object({
|
|
207
|
+
}), require_parser.object({ helpFlag: helpOption }))) : help === "both" && version === "option" ? require_parser.longestMatch(require_parser.merge(require_parser.object({
|
|
208
208
|
help: require_parser.constant(false),
|
|
209
209
|
version: require_parser.constant(true)
|
|
210
|
-
}), versionOption), require_parser.object({
|
|
210
|
+
}), require_parser.object({ versionFlag: versionOption })), require_parser.object({
|
|
211
211
|
help: require_parser.constant(true),
|
|
212
212
|
version: require_parser.constant(false),
|
|
213
213
|
commands: helpCommand
|
|
@@ -219,10 +219,10 @@ function run(parser, programName, args, options = {}) {
|
|
|
219
219
|
help: require_parser.constant(true),
|
|
220
220
|
version: require_parser.constant(false),
|
|
221
221
|
commands: require_parser.constant([])
|
|
222
|
-
}), helpOption)) : require_parser.longestMatch(require_parser.merge(require_parser.object({
|
|
222
|
+
}), require_parser.object({ helpFlag: helpOption }))) : require_parser.longestMatch(require_parser.merge(require_parser.object({
|
|
223
223
|
help: require_parser.constant(false),
|
|
224
224
|
version: require_parser.constant(true)
|
|
225
|
-
}), versionOption), require_parser.object({
|
|
225
|
+
}), require_parser.object({ versionFlag: versionOption })), require_parser.object({
|
|
226
226
|
help: require_parser.constant(false),
|
|
227
227
|
version: require_parser.constant(true),
|
|
228
228
|
result: versionCommand
|
|
@@ -238,7 +238,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
238
238
|
help: require_parser.constant(true),
|
|
239
239
|
version: require_parser.constant(false),
|
|
240
240
|
commands: require_parser.constant([])
|
|
241
|
-
}), helpOption)));
|
|
241
|
+
}), require_parser.object({ helpFlag: helpOption }))));
|
|
242
242
|
let result = require_parser.parse(augmentedParser, args);
|
|
243
243
|
if (result.success && typeof result.value === "object" && result.value != null && "help" in result.value && "version" in result.value) {
|
|
244
244
|
const parsedValue = result.value;
|
package/dist/facade.js
CHANGED
|
@@ -73,7 +73,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
73
73
|
}), merge(object({
|
|
74
74
|
help: constant(false),
|
|
75
75
|
version: constant(true)
|
|
76
|
-
}), versionOption)) : help === "none" && version === "both" ? longestMatch(object({
|
|
76
|
+
}), object({ versionFlag: versionOption }))) : help === "none" && version === "both" ? longestMatch(object({
|
|
77
77
|
help: constant(false),
|
|
78
78
|
version: constant(true),
|
|
79
79
|
result: versionCommand
|
|
@@ -84,7 +84,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
84
84
|
}), merge(object({
|
|
85
85
|
help: constant(false),
|
|
86
86
|
version: constant(true)
|
|
87
|
-
}), versionOption)) : help === "command" && version === "none" ? longestMatch(object({
|
|
87
|
+
}), object({ versionFlag: versionOption }))) : help === "command" && version === "none" ? longestMatch(object({
|
|
88
88
|
help: constant(true),
|
|
89
89
|
version: constant(false),
|
|
90
90
|
commands: helpCommand
|
|
@@ -115,7 +115,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
115
115
|
}), merge(object({
|
|
116
116
|
help: constant(false),
|
|
117
117
|
version: constant(true)
|
|
118
|
-
}), versionOption)) : help === "command" && version === "both" ? longestMatch(object({
|
|
118
|
+
}), object({ versionFlag: versionOption }))) : help === "command" && version === "both" ? longestMatch(object({
|
|
119
119
|
help: constant(true),
|
|
120
120
|
version: constant(false),
|
|
121
121
|
commands: helpCommand
|
|
@@ -130,7 +130,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
130
130
|
}), merge(object({
|
|
131
131
|
help: constant(false),
|
|
132
132
|
version: constant(true)
|
|
133
|
-
}), versionOption)) : help === "option" && version === "none" ? longestMatch(object({
|
|
133
|
+
}), object({ versionFlag: versionOption }))) : help === "option" && version === "none" ? longestMatch(object({
|
|
134
134
|
help: constant(false),
|
|
135
135
|
version: constant(false),
|
|
136
136
|
result: parser
|
|
@@ -138,7 +138,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
138
138
|
help: constant(true),
|
|
139
139
|
version: constant(false),
|
|
140
140
|
commands: constant([])
|
|
141
|
-
}), helpOption)) : help === "option" && version === "command" ? longestMatch(object({
|
|
141
|
+
}), object({ helpFlag: helpOption }))) : help === "option" && version === "command" ? longestMatch(object({
|
|
142
142
|
help: constant(false),
|
|
143
143
|
version: constant(true),
|
|
144
144
|
result: versionCommand
|
|
@@ -150,10 +150,10 @@ function run(parser, programName, args, options = {}) {
|
|
|
150
150
|
help: constant(true),
|
|
151
151
|
version: constant(false),
|
|
152
152
|
commands: constant([])
|
|
153
|
-
}), helpOption)) : help === "option" && version === "option" ? longestMatch(merge(object({
|
|
153
|
+
}), object({ helpFlag: helpOption }))) : help === "option" && version === "option" ? longestMatch(merge(object({
|
|
154
154
|
help: constant(false),
|
|
155
155
|
version: constant(true)
|
|
156
|
-
}), versionOption), object({
|
|
156
|
+
}), object({ versionFlag: versionOption })), object({
|
|
157
157
|
help: constant(false),
|
|
158
158
|
version: constant(false),
|
|
159
159
|
result: parser
|
|
@@ -161,10 +161,10 @@ function run(parser, programName, args, options = {}) {
|
|
|
161
161
|
help: constant(true),
|
|
162
162
|
version: constant(false),
|
|
163
163
|
commands: constant([])
|
|
164
|
-
}), helpOption)) : help === "option" && version === "both" ? longestMatch(merge(object({
|
|
164
|
+
}), object({ helpFlag: helpOption }))) : help === "option" && version === "both" ? longestMatch(merge(object({
|
|
165
165
|
help: constant(false),
|
|
166
166
|
version: constant(true)
|
|
167
|
-
}), versionOption), object({
|
|
167
|
+
}), object({ versionFlag: versionOption })), object({
|
|
168
168
|
help: constant(false),
|
|
169
169
|
version: constant(true),
|
|
170
170
|
result: versionCommand
|
|
@@ -176,7 +176,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
176
176
|
help: constant(true),
|
|
177
177
|
version: constant(false),
|
|
178
178
|
commands: constant([])
|
|
179
|
-
}), helpOption)) : help === "both" && version === "none" ? longestMatch(object({
|
|
179
|
+
}), object({ helpFlag: helpOption }))) : help === "both" && version === "none" ? longestMatch(object({
|
|
180
180
|
help: constant(false),
|
|
181
181
|
version: constant(false),
|
|
182
182
|
result: parser
|
|
@@ -188,7 +188,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
188
188
|
help: constant(true),
|
|
189
189
|
version: constant(false),
|
|
190
190
|
commands: constant([])
|
|
191
|
-
}), helpOption)) : help === "both" && version === "command" ? longestMatch(object({
|
|
191
|
+
}), object({ helpFlag: helpOption }))) : help === "both" && version === "command" ? longestMatch(object({
|
|
192
192
|
help: constant(true),
|
|
193
193
|
version: constant(false),
|
|
194
194
|
commands: helpCommand
|
|
@@ -204,10 +204,10 @@ function run(parser, programName, args, options = {}) {
|
|
|
204
204
|
help: constant(true),
|
|
205
205
|
version: constant(false),
|
|
206
206
|
commands: constant([])
|
|
207
|
-
}), helpOption)) : help === "both" && version === "option" ? longestMatch(merge(object({
|
|
207
|
+
}), object({ helpFlag: helpOption }))) : help === "both" && version === "option" ? longestMatch(merge(object({
|
|
208
208
|
help: constant(false),
|
|
209
209
|
version: constant(true)
|
|
210
|
-
}), versionOption), object({
|
|
210
|
+
}), object({ versionFlag: versionOption })), object({
|
|
211
211
|
help: constant(true),
|
|
212
212
|
version: constant(false),
|
|
213
213
|
commands: helpCommand
|
|
@@ -219,10 +219,10 @@ function run(parser, programName, args, options = {}) {
|
|
|
219
219
|
help: constant(true),
|
|
220
220
|
version: constant(false),
|
|
221
221
|
commands: constant([])
|
|
222
|
-
}), helpOption)) : longestMatch(merge(object({
|
|
222
|
+
}), object({ helpFlag: helpOption }))) : longestMatch(merge(object({
|
|
223
223
|
help: constant(false),
|
|
224
224
|
version: constant(true)
|
|
225
|
-
}), versionOption), object({
|
|
225
|
+
}), object({ versionFlag: versionOption })), object({
|
|
226
226
|
help: constant(false),
|
|
227
227
|
version: constant(true),
|
|
228
228
|
result: versionCommand
|
|
@@ -238,7 +238,7 @@ function run(parser, programName, args, options = {}) {
|
|
|
238
238
|
help: constant(true),
|
|
239
239
|
version: constant(false),
|
|
240
240
|
commands: constant([])
|
|
241
|
-
}), helpOption)));
|
|
241
|
+
}), object({ helpFlag: helpOption }))));
|
|
242
242
|
let result = parse(augmentedParser, args);
|
|
243
243
|
if (result.success && typeof result.value === "object" && result.value != null && "help" in result.value && "version" in result.value) {
|
|
244
244
|
const parsedValue = result.value;
|
package/dist/index.cjs
CHANGED
|
@@ -18,6 +18,7 @@ exports.formatMessage = require_message.formatMessage;
|
|
|
18
18
|
exports.formatUsage = require_usage.formatUsage;
|
|
19
19
|
exports.formatUsageTerm = require_usage.formatUsageTerm;
|
|
20
20
|
exports.getDocPage = require_parser.getDocPage;
|
|
21
|
+
exports.group = require_parser.group;
|
|
21
22
|
exports.integer = require_valueparser.integer;
|
|
22
23
|
exports.isValueParser = require_valueparser.isValueParser;
|
|
23
24
|
exports.locale = require_valueparser.locale;
|
package/dist/index.d.cts
CHANGED
|
@@ -2,6 +2,6 @@ import { Message, MessageFormatOptions, MessageTerm, formatMessage, message, met
|
|
|
2
2
|
import { OptionName, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, formatUsage, formatUsageTerm, normalizeUsage } from "./usage.cjs";
|
|
3
3
|
import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, formatDocPage } from "./doc.cjs";
|
|
4
4
|
import { ChoiceOptions, FloatOptions, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, choice, float, integer, isValueParser, locale, string, url, uuid } from "./valueparser.cjs";
|
|
5
|
-
import { ArgumentOptions, CommandOptions, DocState, FlagOptions, InferValue, MultipleOptions, OptionOptions, Parser, ParserContext, ParserResult, Result, argument, command, concat, constant, flag, getDocPage, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault } from "./parser.cjs";
|
|
5
|
+
import { ArgumentOptions, CommandOptions, DocState, FlagOptions, InferValue, MultipleOptions, OptionOptions, Parser, ParserContext, ParserResult, Result, argument, command, concat, constant, flag, getDocPage, group, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault } from "./parser.cjs";
|
|
6
6
|
import { RunError, RunOptions, run } from "./facade.cjs";
|
|
7
|
-
export { ArgumentOptions, ChoiceOptions, CommandOptions, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, FlagOptions, FloatOptions, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, Message, MessageFormatOptions, MessageTerm, MultipleOptions, OptionName, OptionOptions, Parser, ParserContext, ParserResult, Result, RunError, RunOptions, StringOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, argument, choice, command, concat, constant, flag, float, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, integer, isValueParser, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, object, option, optionName, optionNames, optional, or, parse, run, string, text, tuple, url, uuid, value, values, withDefault };
|
|
7
|
+
export { ArgumentOptions, ChoiceOptions, CommandOptions, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, FlagOptions, FloatOptions, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, Message, MessageFormatOptions, MessageTerm, MultipleOptions, OptionName, OptionOptions, Parser, ParserContext, ParserResult, Result, RunError, RunOptions, StringOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, argument, choice, command, concat, constant, flag, float, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, group, integer, isValueParser, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, object, option, optionName, optionNames, optional, or, parse, run, string, text, tuple, url, uuid, value, values, withDefault };
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ import { Message, MessageFormatOptions, MessageTerm, formatMessage, message, met
|
|
|
2
2
|
import { OptionName, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, formatUsage, formatUsageTerm, normalizeUsage } from "./usage.js";
|
|
3
3
|
import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, formatDocPage } from "./doc.js";
|
|
4
4
|
import { ChoiceOptions, FloatOptions, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, choice, float, integer, isValueParser, locale, string, url, uuid } from "./valueparser.js";
|
|
5
|
-
import { ArgumentOptions, CommandOptions, DocState, FlagOptions, InferValue, MultipleOptions, OptionOptions, Parser, ParserContext, ParserResult, Result, argument, command, concat, constant, flag, getDocPage, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault } from "./parser.js";
|
|
5
|
+
import { ArgumentOptions, CommandOptions, DocState, FlagOptions, InferValue, MultipleOptions, OptionOptions, Parser, ParserContext, ParserResult, Result, argument, command, concat, constant, flag, getDocPage, group, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault } from "./parser.js";
|
|
6
6
|
import { RunError, RunOptions, run } from "./facade.js";
|
|
7
|
-
export { ArgumentOptions, ChoiceOptions, CommandOptions, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, FlagOptions, FloatOptions, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, Message, MessageFormatOptions, MessageTerm, MultipleOptions, OptionName, OptionOptions, Parser, ParserContext, ParserResult, Result, RunError, RunOptions, StringOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, argument, choice, command, concat, constant, flag, float, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, integer, isValueParser, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, object, option, optionName, optionNames, optional, or, parse, run, string, text, tuple, url, uuid, value, values, withDefault };
|
|
7
|
+
export { ArgumentOptions, ChoiceOptions, CommandOptions, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, FlagOptions, FloatOptions, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, Message, MessageFormatOptions, MessageTerm, MultipleOptions, OptionName, OptionOptions, Parser, ParserContext, ParserResult, Result, RunError, RunOptions, StringOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, argument, choice, command, concat, constant, flag, float, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, group, integer, isValueParser, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, object, option, optionName, optionNames, optional, or, parse, run, string, text, tuple, url, uuid, value, values, withDefault };
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { formatMessage, message, metavar, optionName, optionNames, text, value,
|
|
|
2
2
|
import { formatUsage, formatUsageTerm, normalizeUsage } from "./usage.js";
|
|
3
3
|
import { formatDocPage } from "./doc.js";
|
|
4
4
|
import { choice, float, integer, isValueParser, locale, string, url, uuid } from "./valueparser.js";
|
|
5
|
-
import { argument, command, concat, constant, flag, getDocPage, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault } from "./parser.js";
|
|
5
|
+
import { argument, command, concat, constant, flag, getDocPage, group, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault } from "./parser.js";
|
|
6
6
|
import { RunError, run } from "./facade.js";
|
|
7
7
|
|
|
8
|
-
export { RunError, argument, choice, command, concat, constant, flag, float, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, integer, isValueParser, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, object, option, optionName, optionNames, optional, or, parse, run, string, text, tuple, url, uuid, value, values, withDefault };
|
|
8
|
+
export { RunError, argument, choice, command, concat, constant, flag, float, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, group, integer, isValueParser, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, object, option, optionName, optionNames, optional, or, parse, run, string, text, tuple, url, uuid, value, values, withDefault };
|
package/dist/parser.cjs
CHANGED
|
@@ -1492,6 +1492,81 @@ function parse(parser, args) {
|
|
|
1492
1492
|
};
|
|
1493
1493
|
}
|
|
1494
1494
|
/**
|
|
1495
|
+
* Wraps a parser with a group label for documentation purposes.
|
|
1496
|
+
*
|
|
1497
|
+
* The `group()` function is a documentation-only wrapper that applies a label
|
|
1498
|
+
* to any parser for help text organization. This allows you to use clean code
|
|
1499
|
+
* structure with combinators like {@link merge} while maintaining well-organized
|
|
1500
|
+
* help text through group labeling.
|
|
1501
|
+
*
|
|
1502
|
+
* The wrapped parser has identical parsing behavior but generates documentation
|
|
1503
|
+
* fragments wrapped in a labeled section. This is particularly useful when
|
|
1504
|
+
* combining parsers using {@link merge}—you can wrap the merged result with
|
|
1505
|
+
* `group()` to add a section header in help output.
|
|
1506
|
+
*
|
|
1507
|
+
* @example
|
|
1508
|
+
* ```typescript
|
|
1509
|
+
* const apiOptions = merge(
|
|
1510
|
+
* object({ endpoint: option("--endpoint", string()) }),
|
|
1511
|
+
* object({ timeout: option("--timeout", integer()) })
|
|
1512
|
+
* );
|
|
1513
|
+
*
|
|
1514
|
+
* const groupedApiOptions = group("API Options", apiOptions);
|
|
1515
|
+
* // Now produces a labeled "API Options" section in help text
|
|
1516
|
+
* ```
|
|
1517
|
+
*
|
|
1518
|
+
* @example
|
|
1519
|
+
* ```typescript
|
|
1520
|
+
* // Can be used with any parser, not just merge()
|
|
1521
|
+
* const verboseGroup = group("Verbosity", object({
|
|
1522
|
+
* verbose: option("-v", "--verbose"),
|
|
1523
|
+
* quiet: option("-q", "--quiet")
|
|
1524
|
+
* }));
|
|
1525
|
+
* ```
|
|
1526
|
+
*
|
|
1527
|
+
* @template TValue The value type of the wrapped parser.
|
|
1528
|
+
* @template TState The state type of the wrapped parser.
|
|
1529
|
+
* @param label A descriptive label for this parser group, used for
|
|
1530
|
+
* documentation and help text organization.
|
|
1531
|
+
* @param parser The parser to wrap with a group label.
|
|
1532
|
+
* @returns A new parser that behaves identically to the input parser
|
|
1533
|
+
* but generates documentation within a labeled section.
|
|
1534
|
+
* @since 0.4.0
|
|
1535
|
+
*/
|
|
1536
|
+
function group(label, parser) {
|
|
1537
|
+
return {
|
|
1538
|
+
$valueType: parser.$valueType,
|
|
1539
|
+
$stateType: parser.$stateType,
|
|
1540
|
+
priority: parser.priority,
|
|
1541
|
+
usage: parser.usage,
|
|
1542
|
+
initialState: parser.initialState,
|
|
1543
|
+
parse: (context) => parser.parse(context),
|
|
1544
|
+
complete: (state) => parser.complete(state),
|
|
1545
|
+
getDocFragments: (state, defaultValue) => {
|
|
1546
|
+
const { description, fragments } = parser.getDocFragments(state, defaultValue);
|
|
1547
|
+
const allEntries = [];
|
|
1548
|
+
const titledSections = [];
|
|
1549
|
+
for (const fragment of fragments) if (fragment.type === "entry") allEntries.push(fragment);
|
|
1550
|
+
else if (fragment.type === "section") if (fragment.title) titledSections.push(fragment);
|
|
1551
|
+
else allEntries.push(...fragment.entries);
|
|
1552
|
+
const labeledSection = {
|
|
1553
|
+
title: label,
|
|
1554
|
+
entries: allEntries
|
|
1555
|
+
};
|
|
1556
|
+
return {
|
|
1557
|
+
description,
|
|
1558
|
+
fragments: [...titledSections.map((s) => ({
|
|
1559
|
+
...s,
|
|
1560
|
+
type: "section"
|
|
1561
|
+
})), {
|
|
1562
|
+
type: "section",
|
|
1563
|
+
...labeledSection
|
|
1564
|
+
}]
|
|
1565
|
+
};
|
|
1566
|
+
}
|
|
1567
|
+
};
|
|
1568
|
+
}
|
|
1569
|
+
/**
|
|
1495
1570
|
* Generates a documentation page for a parser based on its current state after
|
|
1496
1571
|
* attempting to parse the provided arguments. This function is useful for
|
|
1497
1572
|
* creating help documentation that reflects the current parsing context.
|
|
@@ -1576,6 +1651,7 @@ exports.concat = concat;
|
|
|
1576
1651
|
exports.constant = constant;
|
|
1577
1652
|
exports.flag = flag;
|
|
1578
1653
|
exports.getDocPage = getDocPage;
|
|
1654
|
+
exports.group = group;
|
|
1579
1655
|
exports.longestMatch = longestMatch;
|
|
1580
1656
|
exports.map = map;
|
|
1581
1657
|
exports.merge = merge;
|
package/dist/parser.d.cts
CHANGED
|
@@ -400,7 +400,7 @@ declare function object<T extends {
|
|
|
400
400
|
* as the input array, where each element is the result of the
|
|
401
401
|
* corresponding parser.
|
|
402
402
|
*/
|
|
403
|
-
declare function tuple<T extends readonly Parser<unknown, unknown>[]>(parsers: T): Parser<{ readonly [K in keyof T]: T[K]["$valueType"][number] extends (infer U) ? U : never }, { readonly [K in keyof T]: T[K]["$stateType"][number] extends (infer U2) ? U2 : never }>;
|
|
403
|
+
declare function tuple<const T extends readonly Parser<unknown, unknown>[]>(parsers: T): Parser<{ readonly [K in keyof T]: T[K]["$valueType"][number] extends (infer U) ? U : never }, { readonly [K in keyof T]: T[K]["$stateType"][number] extends (infer U2) ? U2 : never }>;
|
|
404
404
|
/**
|
|
405
405
|
* Creates a labeled parser that combines multiple parsers into a sequential
|
|
406
406
|
* tuple parser with an associated label for documentation or error reporting.
|
|
@@ -413,7 +413,7 @@ declare function tuple<T extends readonly Parser<unknown, unknown>[]>(parsers: T
|
|
|
413
413
|
* as the input array, where each element is the result of the
|
|
414
414
|
* corresponding parser.
|
|
415
415
|
*/
|
|
416
|
-
declare function tuple<T extends readonly Parser<unknown, unknown>[]>(label: string, parsers: T): Parser<{ readonly [K in keyof T]: T[K]["$valueType"][number] extends (infer U) ? U : never }, { readonly [K in keyof T]: T[K]["$stateType"][number] extends (infer U2) ? U2 : never }>;
|
|
416
|
+
declare function tuple<const T extends readonly Parser<unknown, unknown>[]>(label: string, parsers: T): Parser<{ readonly [K in keyof T]: T[K]["$valueType"][number] extends (infer U) ? U : never }, { readonly [K in keyof T]: T[K]["$stateType"][number] extends (infer U2) ? U2 : never }>;
|
|
417
417
|
/**
|
|
418
418
|
* Creates a parser that combines two mutually exclusive parsers into one.
|
|
419
419
|
* The resulting parser will try each of the provided parsers in order,
|
|
@@ -739,7 +739,7 @@ declare function longestMatch<TA, TB, TC, TD, TE, TStateA, TStateB, TStateC, TSt
|
|
|
739
739
|
* Helper type to check if all members of a union are object-like.
|
|
740
740
|
* This allows merge() to work with parsers like withDefault() that produce union types.
|
|
741
741
|
*/
|
|
742
|
-
type AllObjectLike<T> = T extends Record<string | symbol, unknown> ? T : never;
|
|
742
|
+
type AllObjectLike<T> = T extends readonly unknown[] ? never : T extends Record<string | symbol, unknown> ? T : never;
|
|
743
743
|
/**
|
|
744
744
|
* Helper type to extract object-like types from parser value types,
|
|
745
745
|
* including union types where all members are objects.
|
|
@@ -758,7 +758,7 @@ type ExtractObjectTypes<P> = P extends Parser<infer V, unknown> ? [AllObjectLike
|
|
|
758
758
|
* @return A new {@link object} parser that combines the values and states
|
|
759
759
|
* of the two parsers into a single object.
|
|
760
760
|
*/
|
|
761
|
-
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>>(a:
|
|
761
|
+
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>>(a: ExtractObjectTypes<TA> extends never ? never : TA, b: ExtractObjectTypes<TB> extends never ? never : TB): Parser<ExtractObjectTypes<TA> & ExtractObjectTypes<TB>, Record<string | symbol, unknown>>;
|
|
762
762
|
/**
|
|
763
763
|
* Merges multiple {@link object} parsers into a single {@link object} parser
|
|
764
764
|
* with a label for documentation and help text organization.
|
|
@@ -775,7 +775,7 @@ declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<un
|
|
|
775
775
|
* @return A new {@link object} parser that combines the values and states
|
|
776
776
|
* of the two parsers into a single object.
|
|
777
777
|
*/
|
|
778
|
-
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>>(label: string, a:
|
|
778
|
+
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>>(label: string, a: ExtractObjectTypes<TA> extends never ? never : TA, b: ExtractObjectTypes<TB> extends never ? never : TB): Parser<ExtractObjectTypes<TA> & ExtractObjectTypes<TB>, Record<string | symbol, unknown>>;
|
|
779
779
|
/**
|
|
780
780
|
* Merges multiple {@link object} parsers into a single {@link object} parser.
|
|
781
781
|
* It is useful for combining multiple {@link object} parsers so that
|
|
@@ -791,7 +791,7 @@ declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<un
|
|
|
791
791
|
* @return A new {@link object} parser that combines the values and states
|
|
792
792
|
* of the two parsers into a single object.
|
|
793
793
|
*/
|
|
794
|
-
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>, TC extends Parser<unknown, unknown>>(a:
|
|
794
|
+
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>, TC extends Parser<unknown, unknown>>(a: ExtractObjectTypes<TA> extends never ? never : TA, b: ExtractObjectTypes<TB> extends never ? never : TB, c: ExtractObjectTypes<TC> extends never ? never : TC): Parser<ExtractObjectTypes<TA> & ExtractObjectTypes<TB> & ExtractObjectTypes<TC>, Record<string | symbol, unknown>>;
|
|
795
795
|
/**
|
|
796
796
|
* Merges multiple {@link object} parsers into a single {@link object} parser
|
|
797
797
|
* with a label for documentation and help text organization.
|
|
@@ -869,7 +869,7 @@ declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<un
|
|
|
869
869
|
* @return A new {@link object} parser that combines the values and states
|
|
870
870
|
* of the two parsers into a single object.
|
|
871
871
|
*/
|
|
872
|
-
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>, TC extends Parser<unknown, unknown>, TD extends Parser<unknown, unknown>, TE extends Parser<unknown, unknown>>(a:
|
|
872
|
+
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>, TC extends Parser<unknown, unknown>, TD extends Parser<unknown, unknown>, TE extends Parser<unknown, unknown>>(a: ExtractObjectTypes<TA> extends never ? never : TA, b: ExtractObjectTypes<TB> extends never ? never : TB, c: ExtractObjectTypes<TC> extends never ? never : TC, d: ExtractObjectTypes<TD> extends never ? never : TD, e: ExtractObjectTypes<TE> extends never ? never : TE): Parser<ExtractObjectTypes<TA> & ExtractObjectTypes<TB> & ExtractObjectTypes<TC> & ExtractObjectTypes<TD> & ExtractObjectTypes<TE>, Record<string | symbol, unknown>>;
|
|
873
873
|
/**
|
|
874
874
|
* Merges multiple {@link object} parsers into a single {@link object} parser
|
|
875
875
|
* with a label for documentation and help text organization.
|
|
@@ -1353,6 +1353,49 @@ type Result<T> = {
|
|
|
1353
1353
|
* failure.
|
|
1354
1354
|
*/
|
|
1355
1355
|
declare function parse<T>(parser: Parser<T, unknown>, args: readonly string[]): Result<T>;
|
|
1356
|
+
/**
|
|
1357
|
+
* Wraps a parser with a group label for documentation purposes.
|
|
1358
|
+
*
|
|
1359
|
+
* The `group()` function is a documentation-only wrapper that applies a label
|
|
1360
|
+
* to any parser for help text organization. This allows you to use clean code
|
|
1361
|
+
* structure with combinators like {@link merge} while maintaining well-organized
|
|
1362
|
+
* help text through group labeling.
|
|
1363
|
+
*
|
|
1364
|
+
* The wrapped parser has identical parsing behavior but generates documentation
|
|
1365
|
+
* fragments wrapped in a labeled section. This is particularly useful when
|
|
1366
|
+
* combining parsers using {@link merge}—you can wrap the merged result with
|
|
1367
|
+
* `group()` to add a section header in help output.
|
|
1368
|
+
*
|
|
1369
|
+
* @example
|
|
1370
|
+
* ```typescript
|
|
1371
|
+
* const apiOptions = merge(
|
|
1372
|
+
* object({ endpoint: option("--endpoint", string()) }),
|
|
1373
|
+
* object({ timeout: option("--timeout", integer()) })
|
|
1374
|
+
* );
|
|
1375
|
+
*
|
|
1376
|
+
* const groupedApiOptions = group("API Options", apiOptions);
|
|
1377
|
+
* // Now produces a labeled "API Options" section in help text
|
|
1378
|
+
* ```
|
|
1379
|
+
*
|
|
1380
|
+
* @example
|
|
1381
|
+
* ```typescript
|
|
1382
|
+
* // Can be used with any parser, not just merge()
|
|
1383
|
+
* const verboseGroup = group("Verbosity", object({
|
|
1384
|
+
* verbose: option("-v", "--verbose"),
|
|
1385
|
+
* quiet: option("-q", "--quiet")
|
|
1386
|
+
* }));
|
|
1387
|
+
* ```
|
|
1388
|
+
*
|
|
1389
|
+
* @template TValue The value type of the wrapped parser.
|
|
1390
|
+
* @template TState The state type of the wrapped parser.
|
|
1391
|
+
* @param label A descriptive label for this parser group, used for
|
|
1392
|
+
* documentation and help text organization.
|
|
1393
|
+
* @param parser The parser to wrap with a group label.
|
|
1394
|
+
* @returns A new parser that behaves identically to the input parser
|
|
1395
|
+
* but generates documentation within a labeled section.
|
|
1396
|
+
* @since 0.4.0
|
|
1397
|
+
*/
|
|
1398
|
+
declare function group<TValue, TState>(label: string, parser: Parser<TValue, TState>): Parser<TValue, TState>;
|
|
1356
1399
|
/**
|
|
1357
1400
|
* Generates a documentation page for a parser based on its current state after
|
|
1358
1401
|
* attempting to parse the provided arguments. This function is useful for
|
|
@@ -1388,4 +1431,4 @@ declare function parse<T>(parser: Parser<T, unknown>, args: readonly string[]):
|
|
|
1388
1431
|
*/
|
|
1389
1432
|
declare function getDocPage(parser: Parser<unknown, unknown>, args?: readonly string[]): DocPage | undefined;
|
|
1390
1433
|
//#endregion
|
|
1391
|
-
export { ArgumentOptions, CommandOptions, DocState, FlagOptions, InferValue, MultipleOptions, OptionOptions, Parser, ParserContext, ParserResult, Result, argument, command, concat, constant, flag, getDocPage, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault };
|
|
1434
|
+
export { ArgumentOptions, CommandOptions, DocState, FlagOptions, InferValue, MultipleOptions, OptionOptions, Parser, ParserContext, ParserResult, Result, argument, command, concat, constant, flag, getDocPage, group, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault };
|
package/dist/parser.d.ts
CHANGED
|
@@ -400,7 +400,7 @@ declare function object<T extends {
|
|
|
400
400
|
* as the input array, where each element is the result of the
|
|
401
401
|
* corresponding parser.
|
|
402
402
|
*/
|
|
403
|
-
declare function tuple<T extends readonly Parser<unknown, unknown>[]>(parsers: T): Parser<{ readonly [K in keyof T]: T[K]["$valueType"][number] extends (infer U) ? U : never }, { readonly [K in keyof T]: T[K]["$stateType"][number] extends (infer U2) ? U2 : never }>;
|
|
403
|
+
declare function tuple<const T extends readonly Parser<unknown, unknown>[]>(parsers: T): Parser<{ readonly [K in keyof T]: T[K]["$valueType"][number] extends (infer U) ? U : never }, { readonly [K in keyof T]: T[K]["$stateType"][number] extends (infer U2) ? U2 : never }>;
|
|
404
404
|
/**
|
|
405
405
|
* Creates a labeled parser that combines multiple parsers into a sequential
|
|
406
406
|
* tuple parser with an associated label for documentation or error reporting.
|
|
@@ -413,7 +413,7 @@ declare function tuple<T extends readonly Parser<unknown, unknown>[]>(parsers: T
|
|
|
413
413
|
* as the input array, where each element is the result of the
|
|
414
414
|
* corresponding parser.
|
|
415
415
|
*/
|
|
416
|
-
declare function tuple<T extends readonly Parser<unknown, unknown>[]>(label: string, parsers: T): Parser<{ readonly [K in keyof T]: T[K]["$valueType"][number] extends (infer U) ? U : never }, { readonly [K in keyof T]: T[K]["$stateType"][number] extends (infer U2) ? U2 : never }>;
|
|
416
|
+
declare function tuple<const T extends readonly Parser<unknown, unknown>[]>(label: string, parsers: T): Parser<{ readonly [K in keyof T]: T[K]["$valueType"][number] extends (infer U) ? U : never }, { readonly [K in keyof T]: T[K]["$stateType"][number] extends (infer U2) ? U2 : never }>;
|
|
417
417
|
/**
|
|
418
418
|
* Creates a parser that combines two mutually exclusive parsers into one.
|
|
419
419
|
* The resulting parser will try each of the provided parsers in order,
|
|
@@ -739,7 +739,7 @@ declare function longestMatch<TA, TB, TC, TD, TE, TStateA, TStateB, TStateC, TSt
|
|
|
739
739
|
* Helper type to check if all members of a union are object-like.
|
|
740
740
|
* This allows merge() to work with parsers like withDefault() that produce union types.
|
|
741
741
|
*/
|
|
742
|
-
type AllObjectLike<T> = T extends Record<string | symbol, unknown> ? T : never;
|
|
742
|
+
type AllObjectLike<T> = T extends readonly unknown[] ? never : T extends Record<string | symbol, unknown> ? T : never;
|
|
743
743
|
/**
|
|
744
744
|
* Helper type to extract object-like types from parser value types,
|
|
745
745
|
* including union types where all members are objects.
|
|
@@ -758,7 +758,7 @@ type ExtractObjectTypes<P> = P extends Parser<infer V, unknown> ? [AllObjectLike
|
|
|
758
758
|
* @return A new {@link object} parser that combines the values and states
|
|
759
759
|
* of the two parsers into a single object.
|
|
760
760
|
*/
|
|
761
|
-
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>>(a:
|
|
761
|
+
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>>(a: ExtractObjectTypes<TA> extends never ? never : TA, b: ExtractObjectTypes<TB> extends never ? never : TB): Parser<ExtractObjectTypes<TA> & ExtractObjectTypes<TB>, Record<string | symbol, unknown>>;
|
|
762
762
|
/**
|
|
763
763
|
* Merges multiple {@link object} parsers into a single {@link object} parser
|
|
764
764
|
* with a label for documentation and help text organization.
|
|
@@ -775,7 +775,7 @@ declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<un
|
|
|
775
775
|
* @return A new {@link object} parser that combines the values and states
|
|
776
776
|
* of the two parsers into a single object.
|
|
777
777
|
*/
|
|
778
|
-
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>>(label: string, a:
|
|
778
|
+
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>>(label: string, a: ExtractObjectTypes<TA> extends never ? never : TA, b: ExtractObjectTypes<TB> extends never ? never : TB): Parser<ExtractObjectTypes<TA> & ExtractObjectTypes<TB>, Record<string | symbol, unknown>>;
|
|
779
779
|
/**
|
|
780
780
|
* Merges multiple {@link object} parsers into a single {@link object} parser.
|
|
781
781
|
* It is useful for combining multiple {@link object} parsers so that
|
|
@@ -791,7 +791,7 @@ declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<un
|
|
|
791
791
|
* @return A new {@link object} parser that combines the values and states
|
|
792
792
|
* of the two parsers into a single object.
|
|
793
793
|
*/
|
|
794
|
-
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>, TC extends Parser<unknown, unknown>>(a:
|
|
794
|
+
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>, TC extends Parser<unknown, unknown>>(a: ExtractObjectTypes<TA> extends never ? never : TA, b: ExtractObjectTypes<TB> extends never ? never : TB, c: ExtractObjectTypes<TC> extends never ? never : TC): Parser<ExtractObjectTypes<TA> & ExtractObjectTypes<TB> & ExtractObjectTypes<TC>, Record<string | symbol, unknown>>;
|
|
795
795
|
/**
|
|
796
796
|
* Merges multiple {@link object} parsers into a single {@link object} parser
|
|
797
797
|
* with a label for documentation and help text organization.
|
|
@@ -869,7 +869,7 @@ declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<un
|
|
|
869
869
|
* @return A new {@link object} parser that combines the values and states
|
|
870
870
|
* of the two parsers into a single object.
|
|
871
871
|
*/
|
|
872
|
-
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>, TC extends Parser<unknown, unknown>, TD extends Parser<unknown, unknown>, TE extends Parser<unknown, unknown>>(a:
|
|
872
|
+
declare function merge<TA extends Parser<unknown, unknown>, TB extends Parser<unknown, unknown>, TC extends Parser<unknown, unknown>, TD extends Parser<unknown, unknown>, TE extends Parser<unknown, unknown>>(a: ExtractObjectTypes<TA> extends never ? never : TA, b: ExtractObjectTypes<TB> extends never ? never : TB, c: ExtractObjectTypes<TC> extends never ? never : TC, d: ExtractObjectTypes<TD> extends never ? never : TD, e: ExtractObjectTypes<TE> extends never ? never : TE): Parser<ExtractObjectTypes<TA> & ExtractObjectTypes<TB> & ExtractObjectTypes<TC> & ExtractObjectTypes<TD> & ExtractObjectTypes<TE>, Record<string | symbol, unknown>>;
|
|
873
873
|
/**
|
|
874
874
|
* Merges multiple {@link object} parsers into a single {@link object} parser
|
|
875
875
|
* with a label for documentation and help text organization.
|
|
@@ -1353,6 +1353,49 @@ type Result<T> = {
|
|
|
1353
1353
|
* failure.
|
|
1354
1354
|
*/
|
|
1355
1355
|
declare function parse<T>(parser: Parser<T, unknown>, args: readonly string[]): Result<T>;
|
|
1356
|
+
/**
|
|
1357
|
+
* Wraps a parser with a group label for documentation purposes.
|
|
1358
|
+
*
|
|
1359
|
+
* The `group()` function is a documentation-only wrapper that applies a label
|
|
1360
|
+
* to any parser for help text organization. This allows you to use clean code
|
|
1361
|
+
* structure with combinators like {@link merge} while maintaining well-organized
|
|
1362
|
+
* help text through group labeling.
|
|
1363
|
+
*
|
|
1364
|
+
* The wrapped parser has identical parsing behavior but generates documentation
|
|
1365
|
+
* fragments wrapped in a labeled section. This is particularly useful when
|
|
1366
|
+
* combining parsers using {@link merge}—you can wrap the merged result with
|
|
1367
|
+
* `group()` to add a section header in help output.
|
|
1368
|
+
*
|
|
1369
|
+
* @example
|
|
1370
|
+
* ```typescript
|
|
1371
|
+
* const apiOptions = merge(
|
|
1372
|
+
* object({ endpoint: option("--endpoint", string()) }),
|
|
1373
|
+
* object({ timeout: option("--timeout", integer()) })
|
|
1374
|
+
* );
|
|
1375
|
+
*
|
|
1376
|
+
* const groupedApiOptions = group("API Options", apiOptions);
|
|
1377
|
+
* // Now produces a labeled "API Options" section in help text
|
|
1378
|
+
* ```
|
|
1379
|
+
*
|
|
1380
|
+
* @example
|
|
1381
|
+
* ```typescript
|
|
1382
|
+
* // Can be used with any parser, not just merge()
|
|
1383
|
+
* const verboseGroup = group("Verbosity", object({
|
|
1384
|
+
* verbose: option("-v", "--verbose"),
|
|
1385
|
+
* quiet: option("-q", "--quiet")
|
|
1386
|
+
* }));
|
|
1387
|
+
* ```
|
|
1388
|
+
*
|
|
1389
|
+
* @template TValue The value type of the wrapped parser.
|
|
1390
|
+
* @template TState The state type of the wrapped parser.
|
|
1391
|
+
* @param label A descriptive label for this parser group, used for
|
|
1392
|
+
* documentation and help text organization.
|
|
1393
|
+
* @param parser The parser to wrap with a group label.
|
|
1394
|
+
* @returns A new parser that behaves identically to the input parser
|
|
1395
|
+
* but generates documentation within a labeled section.
|
|
1396
|
+
* @since 0.4.0
|
|
1397
|
+
*/
|
|
1398
|
+
declare function group<TValue, TState>(label: string, parser: Parser<TValue, TState>): Parser<TValue, TState>;
|
|
1356
1399
|
/**
|
|
1357
1400
|
* Generates a documentation page for a parser based on its current state after
|
|
1358
1401
|
* attempting to parse the provided arguments. This function is useful for
|
|
@@ -1388,4 +1431,4 @@ declare function parse<T>(parser: Parser<T, unknown>, args: readonly string[]):
|
|
|
1388
1431
|
*/
|
|
1389
1432
|
declare function getDocPage(parser: Parser<unknown, unknown>, args?: readonly string[]): DocPage | undefined;
|
|
1390
1433
|
//#endregion
|
|
1391
|
-
export { ArgumentOptions, CommandOptions, DocState, FlagOptions, InferValue, MultipleOptions, OptionOptions, Parser, ParserContext, ParserResult, Result, argument, command, concat, constant, flag, getDocPage, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault };
|
|
1434
|
+
export { ArgumentOptions, CommandOptions, DocState, FlagOptions, InferValue, MultipleOptions, OptionOptions, Parser, ParserContext, ParserResult, Result, argument, command, concat, constant, flag, getDocPage, group, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault };
|
package/dist/parser.js
CHANGED
|
@@ -1492,6 +1492,81 @@ function parse(parser, args) {
|
|
|
1492
1492
|
};
|
|
1493
1493
|
}
|
|
1494
1494
|
/**
|
|
1495
|
+
* Wraps a parser with a group label for documentation purposes.
|
|
1496
|
+
*
|
|
1497
|
+
* The `group()` function is a documentation-only wrapper that applies a label
|
|
1498
|
+
* to any parser for help text organization. This allows you to use clean code
|
|
1499
|
+
* structure with combinators like {@link merge} while maintaining well-organized
|
|
1500
|
+
* help text through group labeling.
|
|
1501
|
+
*
|
|
1502
|
+
* The wrapped parser has identical parsing behavior but generates documentation
|
|
1503
|
+
* fragments wrapped in a labeled section. This is particularly useful when
|
|
1504
|
+
* combining parsers using {@link merge}—you can wrap the merged result with
|
|
1505
|
+
* `group()` to add a section header in help output.
|
|
1506
|
+
*
|
|
1507
|
+
* @example
|
|
1508
|
+
* ```typescript
|
|
1509
|
+
* const apiOptions = merge(
|
|
1510
|
+
* object({ endpoint: option("--endpoint", string()) }),
|
|
1511
|
+
* object({ timeout: option("--timeout", integer()) })
|
|
1512
|
+
* );
|
|
1513
|
+
*
|
|
1514
|
+
* const groupedApiOptions = group("API Options", apiOptions);
|
|
1515
|
+
* // Now produces a labeled "API Options" section in help text
|
|
1516
|
+
* ```
|
|
1517
|
+
*
|
|
1518
|
+
* @example
|
|
1519
|
+
* ```typescript
|
|
1520
|
+
* // Can be used with any parser, not just merge()
|
|
1521
|
+
* const verboseGroup = group("Verbosity", object({
|
|
1522
|
+
* verbose: option("-v", "--verbose"),
|
|
1523
|
+
* quiet: option("-q", "--quiet")
|
|
1524
|
+
* }));
|
|
1525
|
+
* ```
|
|
1526
|
+
*
|
|
1527
|
+
* @template TValue The value type of the wrapped parser.
|
|
1528
|
+
* @template TState The state type of the wrapped parser.
|
|
1529
|
+
* @param label A descriptive label for this parser group, used for
|
|
1530
|
+
* documentation and help text organization.
|
|
1531
|
+
* @param parser The parser to wrap with a group label.
|
|
1532
|
+
* @returns A new parser that behaves identically to the input parser
|
|
1533
|
+
* but generates documentation within a labeled section.
|
|
1534
|
+
* @since 0.4.0
|
|
1535
|
+
*/
|
|
1536
|
+
function group(label, parser) {
|
|
1537
|
+
return {
|
|
1538
|
+
$valueType: parser.$valueType,
|
|
1539
|
+
$stateType: parser.$stateType,
|
|
1540
|
+
priority: parser.priority,
|
|
1541
|
+
usage: parser.usage,
|
|
1542
|
+
initialState: parser.initialState,
|
|
1543
|
+
parse: (context) => parser.parse(context),
|
|
1544
|
+
complete: (state) => parser.complete(state),
|
|
1545
|
+
getDocFragments: (state, defaultValue) => {
|
|
1546
|
+
const { description, fragments } = parser.getDocFragments(state, defaultValue);
|
|
1547
|
+
const allEntries = [];
|
|
1548
|
+
const titledSections = [];
|
|
1549
|
+
for (const fragment of fragments) if (fragment.type === "entry") allEntries.push(fragment);
|
|
1550
|
+
else if (fragment.type === "section") if (fragment.title) titledSections.push(fragment);
|
|
1551
|
+
else allEntries.push(...fragment.entries);
|
|
1552
|
+
const labeledSection = {
|
|
1553
|
+
title: label,
|
|
1554
|
+
entries: allEntries
|
|
1555
|
+
};
|
|
1556
|
+
return {
|
|
1557
|
+
description,
|
|
1558
|
+
fragments: [...titledSections.map((s) => ({
|
|
1559
|
+
...s,
|
|
1560
|
+
type: "section"
|
|
1561
|
+
})), {
|
|
1562
|
+
type: "section",
|
|
1563
|
+
...labeledSection
|
|
1564
|
+
}]
|
|
1565
|
+
};
|
|
1566
|
+
}
|
|
1567
|
+
};
|
|
1568
|
+
}
|
|
1569
|
+
/**
|
|
1495
1570
|
* Generates a documentation page for a parser based on its current state after
|
|
1496
1571
|
* attempting to parse the provided arguments. This function is useful for
|
|
1497
1572
|
* creating help documentation that reflects the current parsing context.
|
|
@@ -1570,4 +1645,4 @@ function getDocPage(parser, args = []) {
|
|
|
1570
1645
|
}
|
|
1571
1646
|
|
|
1572
1647
|
//#endregion
|
|
1573
|
-
export { argument, command, concat, constant, flag, getDocPage, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault };
|
|
1648
|
+
export { argument, command, concat, constant, flag, getDocPage, group, longestMatch, map, merge, multiple, object, option, optional, or, parse, tuple, withDefault };
|
package/dist/valueparser.cjs
CHANGED
|
@@ -84,7 +84,7 @@ function string(options = {}) {
|
|
|
84
84
|
* @example
|
|
85
85
|
* ```typescript
|
|
86
86
|
* // Create a parser for regular integers
|
|
87
|
-
* const portParser = integer({ min: 1, max:
|
|
87
|
+
* const portParser = integer({ min: 1, max: 0xffff });
|
|
88
88
|
*
|
|
89
89
|
* // Create a parser for BigInt values
|
|
90
90
|
* const bigIntParser = integer({ type: "bigint", min: 0n });
|
package/dist/valueparser.js
CHANGED
|
@@ -84,7 +84,7 @@ function string(options = {}) {
|
|
|
84
84
|
* @example
|
|
85
85
|
* ```typescript
|
|
86
86
|
* // Create a parser for regular integers
|
|
87
|
-
* const portParser = integer({ min: 1, max:
|
|
87
|
+
* const portParser = integer({ min: 1, max: 0xffff });
|
|
88
88
|
*
|
|
89
89
|
* // Create a parser for BigInt values
|
|
90
90
|
* const bigIntParser = integer({ type: "bigint", min: 0n });
|