@optique/core 0.10.0-dev.296 → 0.10.0-dev.297
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/dist/constructs.cjs +60 -29
- package/dist/constructs.js +60 -29
- package/dist/dependency.cjs +77 -0
- package/dist/dependency.d.cts +36 -2
- package/dist/dependency.d.ts +36 -2
- package/dist/dependency.js +76 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/parser.d.cts +9 -0
- package/dist/parser.d.ts +9 -0
- package/dist/primitives.cjs +76 -4
- package/dist/primitives.js +77 -5
- package/package.json +1 -1
package/dist/constructs.cjs
CHANGED
|
@@ -538,12 +538,18 @@ function longestMatch(...args) {
|
|
|
538
538
|
* @internal
|
|
539
539
|
*/
|
|
540
540
|
function* suggestObjectSync(context, prefix, parserPairs) {
|
|
541
|
+
const registry = context.dependencyRegistry instanceof require_dependency.DependencyRegistry ? context.dependencyRegistry : new require_dependency.DependencyRegistry();
|
|
542
|
+
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
543
|
+
const contextWithRegistry = {
|
|
544
|
+
...context,
|
|
545
|
+
dependencyRegistry: registry
|
|
546
|
+
};
|
|
541
547
|
if (context.buffer.length > 0) {
|
|
542
548
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
543
549
|
for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
|
|
544
550
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
545
551
|
yield* parser.suggest({
|
|
546
|
-
...
|
|
552
|
+
...contextWithRegistry,
|
|
547
553
|
state: fieldState
|
|
548
554
|
}, prefix);
|
|
549
555
|
return;
|
|
@@ -553,7 +559,7 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
553
559
|
for (const [field, parser] of parserPairs) {
|
|
554
560
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
555
561
|
const fieldSuggestions = parser.suggest({
|
|
556
|
-
...
|
|
562
|
+
...contextWithRegistry,
|
|
557
563
|
state: fieldState
|
|
558
564
|
}, prefix);
|
|
559
565
|
suggestions.push(...fieldSuggestions);
|
|
@@ -565,12 +571,18 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
565
571
|
* @internal
|
|
566
572
|
*/
|
|
567
573
|
async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
574
|
+
const registry = context.dependencyRegistry instanceof require_dependency.DependencyRegistry ? context.dependencyRegistry : new require_dependency.DependencyRegistry();
|
|
575
|
+
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
576
|
+
const contextWithRegistry = {
|
|
577
|
+
...context,
|
|
578
|
+
dependencyRegistry: registry
|
|
579
|
+
};
|
|
568
580
|
if (context.buffer.length > 0) {
|
|
569
581
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
570
582
|
for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
|
|
571
583
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
572
584
|
const suggestions$1 = parser.suggest({
|
|
573
|
-
...
|
|
585
|
+
...contextWithRegistry,
|
|
574
586
|
state: fieldState
|
|
575
587
|
}, prefix);
|
|
576
588
|
for await (const s of suggestions$1) yield s;
|
|
@@ -581,7 +593,7 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
|
581
593
|
for (const [field, parser] of parserPairs) {
|
|
582
594
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
583
595
|
const fieldSuggestions = parser.suggest({
|
|
584
|
-
...
|
|
596
|
+
...contextWithRegistry,
|
|
585
597
|
state: fieldState
|
|
586
598
|
}, prefix);
|
|
587
599
|
for await (const s of fieldSuggestions) suggestions.push(s);
|
|
@@ -647,19 +659,17 @@ function resolveDeferred(state, registry) {
|
|
|
647
659
|
const parser = deferredState.parser;
|
|
648
660
|
const depIds = deferredState.dependencyIds;
|
|
649
661
|
if (depIds && depIds.length > 0) {
|
|
662
|
+
const defaults = deferredState.defaultValues;
|
|
650
663
|
const dependencyValues = [];
|
|
651
|
-
let
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
664
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
665
|
+
const depId$1 = depIds[i];
|
|
666
|
+
if (registry.has(depId$1)) dependencyValues.push(registry.get(depId$1));
|
|
667
|
+
else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
668
|
+
else return deferredState.preliminaryResult;
|
|
656
669
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
return reParseResult;
|
|
661
|
-
}
|
|
662
|
-
return deferredState.preliminaryResult;
|
|
670
|
+
const reParseResult = parser[require_dependency.ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
671
|
+
if (reParseResult instanceof Promise) return deferredState.preliminaryResult;
|
|
672
|
+
return reParseResult;
|
|
663
673
|
}
|
|
664
674
|
const depId = deferredState.dependencyId;
|
|
665
675
|
if (registry.has(depId)) {
|
|
@@ -704,18 +714,16 @@ async function resolveDeferredAsync(state, registry) {
|
|
|
704
714
|
const parser = deferredState.parser;
|
|
705
715
|
const depIds = deferredState.dependencyIds;
|
|
706
716
|
if (depIds && depIds.length > 0) {
|
|
717
|
+
const defaults = deferredState.defaultValues;
|
|
707
718
|
const dependencyValues = [];
|
|
708
|
-
let
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
}
|
|
714
|
-
if (allDepsAvailable) {
|
|
715
|
-
const reParseResult = parser[require_dependency.ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
716
|
-
return Promise.resolve(reParseResult);
|
|
719
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
720
|
+
const depId$1 = depIds[i];
|
|
721
|
+
if (registry.has(depId$1)) dependencyValues.push(registry.get(depId$1));
|
|
722
|
+
else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
723
|
+
else return deferredState.preliminaryResult;
|
|
717
724
|
}
|
|
718
|
-
|
|
725
|
+
const reParseResult = parser[require_dependency.ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
726
|
+
return Promise.resolve(reParseResult);
|
|
719
727
|
}
|
|
720
728
|
const depId = deferredState.dependencyId;
|
|
721
729
|
if (registry.has(depId)) {
|
|
@@ -2230,6 +2238,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2230
2238
|
};
|
|
2231
2239
|
};
|
|
2232
2240
|
const completeSync = (state) => {
|
|
2241
|
+
const syncDiscriminator = discriminator;
|
|
2233
2242
|
const syncDefaultBranch = defaultBranch;
|
|
2234
2243
|
const syncBranches = branches;
|
|
2235
2244
|
if (state.selectedBranch === void 0) {
|
|
@@ -2248,7 +2257,14 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2248
2257
|
};
|
|
2249
2258
|
}
|
|
2250
2259
|
const branchParser = state.selectedBranch.kind === "default" ? syncDefaultBranch : syncBranches[state.selectedBranch.key];
|
|
2251
|
-
const
|
|
2260
|
+
const discriminatorCompleteResult = syncDiscriminator.complete(state.discriminatorState);
|
|
2261
|
+
const combinedState = {
|
|
2262
|
+
_discriminator: state.discriminatorState,
|
|
2263
|
+
_branch: state.branchState
|
|
2264
|
+
};
|
|
2265
|
+
const resolvedCombinedState = resolveDeferredParseStates(combinedState);
|
|
2266
|
+
const resolvedBranchState = resolvedCombinedState._branch;
|
|
2267
|
+
const branchResult = branchParser.complete(resolvedBranchState);
|
|
2252
2268
|
if (!branchResult.success) {
|
|
2253
2269
|
if (state.discriminatorValue !== void 0 && options?.errors?.branchError) return {
|
|
2254
2270
|
success: false,
|
|
@@ -2256,7 +2272,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2256
2272
|
};
|
|
2257
2273
|
return branchResult;
|
|
2258
2274
|
}
|
|
2259
|
-
|
|
2275
|
+
let discriminatorValue;
|
|
2276
|
+
if (state.selectedBranch.kind === "default") discriminatorValue = void 0;
|
|
2277
|
+
else if (require_dependency.isDependencySourceState(discriminatorCompleteResult)) discriminatorValue = discriminatorCompleteResult.result.success ? discriminatorCompleteResult.result.value : state.selectedBranch.key;
|
|
2278
|
+
else if (discriminatorCompleteResult.success) discriminatorValue = discriminatorCompleteResult.value;
|
|
2279
|
+
else discriminatorValue = state.selectedBranch.key;
|
|
2260
2280
|
return {
|
|
2261
2281
|
success: true,
|
|
2262
2282
|
value: [discriminatorValue, branchResult.value]
|
|
@@ -2279,7 +2299,14 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2279
2299
|
};
|
|
2280
2300
|
}
|
|
2281
2301
|
const branchParser = state.selectedBranch.kind === "default" ? defaultBranch : branches[state.selectedBranch.key];
|
|
2282
|
-
const
|
|
2302
|
+
const discriminatorCompleteResult = await discriminator.complete(state.discriminatorState);
|
|
2303
|
+
const combinedState = {
|
|
2304
|
+
_discriminator: state.discriminatorState,
|
|
2305
|
+
_branch: state.branchState
|
|
2306
|
+
};
|
|
2307
|
+
const resolvedCombinedState = await resolveDeferredParseStatesAsync(combinedState);
|
|
2308
|
+
const resolvedBranchState = resolvedCombinedState._branch;
|
|
2309
|
+
const branchResult = await branchParser.complete(resolvedBranchState);
|
|
2283
2310
|
if (!branchResult.success) {
|
|
2284
2311
|
if (state.discriminatorValue !== void 0 && options?.errors?.branchError) return {
|
|
2285
2312
|
success: false,
|
|
@@ -2287,7 +2314,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2287
2314
|
};
|
|
2288
2315
|
return branchResult;
|
|
2289
2316
|
}
|
|
2290
|
-
|
|
2317
|
+
let discriminatorValue;
|
|
2318
|
+
if (state.selectedBranch.kind === "default") discriminatorValue = void 0;
|
|
2319
|
+
else if (require_dependency.isDependencySourceState(discriminatorCompleteResult)) discriminatorValue = discriminatorCompleteResult.result.success ? discriminatorCompleteResult.result.value : state.selectedBranch.key;
|
|
2320
|
+
else if (discriminatorCompleteResult.success) discriminatorValue = discriminatorCompleteResult.value;
|
|
2321
|
+
else discriminatorValue = state.selectedBranch.key;
|
|
2291
2322
|
return {
|
|
2292
2323
|
success: true,
|
|
2293
2324
|
value: [discriminatorValue, branchResult.value]
|
package/dist/constructs.js
CHANGED
|
@@ -538,12 +538,18 @@ function longestMatch(...args) {
|
|
|
538
538
|
* @internal
|
|
539
539
|
*/
|
|
540
540
|
function* suggestObjectSync(context, prefix, parserPairs) {
|
|
541
|
+
const registry = context.dependencyRegistry instanceof DependencyRegistry ? context.dependencyRegistry : new DependencyRegistry();
|
|
542
|
+
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
543
|
+
const contextWithRegistry = {
|
|
544
|
+
...context,
|
|
545
|
+
dependencyRegistry: registry
|
|
546
|
+
};
|
|
541
547
|
if (context.buffer.length > 0) {
|
|
542
548
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
543
549
|
for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
|
|
544
550
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
545
551
|
yield* parser.suggest({
|
|
546
|
-
...
|
|
552
|
+
...contextWithRegistry,
|
|
547
553
|
state: fieldState
|
|
548
554
|
}, prefix);
|
|
549
555
|
return;
|
|
@@ -553,7 +559,7 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
553
559
|
for (const [field, parser] of parserPairs) {
|
|
554
560
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
555
561
|
const fieldSuggestions = parser.suggest({
|
|
556
|
-
...
|
|
562
|
+
...contextWithRegistry,
|
|
557
563
|
state: fieldState
|
|
558
564
|
}, prefix);
|
|
559
565
|
suggestions.push(...fieldSuggestions);
|
|
@@ -565,12 +571,18 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
565
571
|
* @internal
|
|
566
572
|
*/
|
|
567
573
|
async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
574
|
+
const registry = context.dependencyRegistry instanceof DependencyRegistry ? context.dependencyRegistry : new DependencyRegistry();
|
|
575
|
+
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
576
|
+
const contextWithRegistry = {
|
|
577
|
+
...context,
|
|
578
|
+
dependencyRegistry: registry
|
|
579
|
+
};
|
|
568
580
|
if (context.buffer.length > 0) {
|
|
569
581
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
570
582
|
for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
|
|
571
583
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
572
584
|
const suggestions$1 = parser.suggest({
|
|
573
|
-
...
|
|
585
|
+
...contextWithRegistry,
|
|
574
586
|
state: fieldState
|
|
575
587
|
}, prefix);
|
|
576
588
|
for await (const s of suggestions$1) yield s;
|
|
@@ -581,7 +593,7 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
|
581
593
|
for (const [field, parser] of parserPairs) {
|
|
582
594
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
583
595
|
const fieldSuggestions = parser.suggest({
|
|
584
|
-
...
|
|
596
|
+
...contextWithRegistry,
|
|
585
597
|
state: fieldState
|
|
586
598
|
}, prefix);
|
|
587
599
|
for await (const s of fieldSuggestions) suggestions.push(s);
|
|
@@ -647,19 +659,17 @@ function resolveDeferred(state, registry) {
|
|
|
647
659
|
const parser = deferredState.parser;
|
|
648
660
|
const depIds = deferredState.dependencyIds;
|
|
649
661
|
if (depIds && depIds.length > 0) {
|
|
662
|
+
const defaults = deferredState.defaultValues;
|
|
650
663
|
const dependencyValues = [];
|
|
651
|
-
let
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
664
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
665
|
+
const depId$1 = depIds[i];
|
|
666
|
+
if (registry.has(depId$1)) dependencyValues.push(registry.get(depId$1));
|
|
667
|
+
else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
668
|
+
else return deferredState.preliminaryResult;
|
|
656
669
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
return reParseResult;
|
|
661
|
-
}
|
|
662
|
-
return deferredState.preliminaryResult;
|
|
670
|
+
const reParseResult = parser[ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
671
|
+
if (reParseResult instanceof Promise) return deferredState.preliminaryResult;
|
|
672
|
+
return reParseResult;
|
|
663
673
|
}
|
|
664
674
|
const depId = deferredState.dependencyId;
|
|
665
675
|
if (registry.has(depId)) {
|
|
@@ -704,18 +714,16 @@ async function resolveDeferredAsync(state, registry) {
|
|
|
704
714
|
const parser = deferredState.parser;
|
|
705
715
|
const depIds = deferredState.dependencyIds;
|
|
706
716
|
if (depIds && depIds.length > 0) {
|
|
717
|
+
const defaults = deferredState.defaultValues;
|
|
707
718
|
const dependencyValues = [];
|
|
708
|
-
let
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
}
|
|
714
|
-
if (allDepsAvailable) {
|
|
715
|
-
const reParseResult = parser[ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
716
|
-
return Promise.resolve(reParseResult);
|
|
719
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
720
|
+
const depId$1 = depIds[i];
|
|
721
|
+
if (registry.has(depId$1)) dependencyValues.push(registry.get(depId$1));
|
|
722
|
+
else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
723
|
+
else return deferredState.preliminaryResult;
|
|
717
724
|
}
|
|
718
|
-
|
|
725
|
+
const reParseResult = parser[ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
726
|
+
return Promise.resolve(reParseResult);
|
|
719
727
|
}
|
|
720
728
|
const depId = deferredState.dependencyId;
|
|
721
729
|
if (registry.has(depId)) {
|
|
@@ -2230,6 +2238,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2230
2238
|
};
|
|
2231
2239
|
};
|
|
2232
2240
|
const completeSync = (state) => {
|
|
2241
|
+
const syncDiscriminator = discriminator;
|
|
2233
2242
|
const syncDefaultBranch = defaultBranch;
|
|
2234
2243
|
const syncBranches = branches;
|
|
2235
2244
|
if (state.selectedBranch === void 0) {
|
|
@@ -2248,7 +2257,14 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2248
2257
|
};
|
|
2249
2258
|
}
|
|
2250
2259
|
const branchParser = state.selectedBranch.kind === "default" ? syncDefaultBranch : syncBranches[state.selectedBranch.key];
|
|
2251
|
-
const
|
|
2260
|
+
const discriminatorCompleteResult = syncDiscriminator.complete(state.discriminatorState);
|
|
2261
|
+
const combinedState = {
|
|
2262
|
+
_discriminator: state.discriminatorState,
|
|
2263
|
+
_branch: state.branchState
|
|
2264
|
+
};
|
|
2265
|
+
const resolvedCombinedState = resolveDeferredParseStates(combinedState);
|
|
2266
|
+
const resolvedBranchState = resolvedCombinedState._branch;
|
|
2267
|
+
const branchResult = branchParser.complete(resolvedBranchState);
|
|
2252
2268
|
if (!branchResult.success) {
|
|
2253
2269
|
if (state.discriminatorValue !== void 0 && options?.errors?.branchError) return {
|
|
2254
2270
|
success: false,
|
|
@@ -2256,7 +2272,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2256
2272
|
};
|
|
2257
2273
|
return branchResult;
|
|
2258
2274
|
}
|
|
2259
|
-
|
|
2275
|
+
let discriminatorValue;
|
|
2276
|
+
if (state.selectedBranch.kind === "default") discriminatorValue = void 0;
|
|
2277
|
+
else if (isDependencySourceState(discriminatorCompleteResult)) discriminatorValue = discriminatorCompleteResult.result.success ? discriminatorCompleteResult.result.value : state.selectedBranch.key;
|
|
2278
|
+
else if (discriminatorCompleteResult.success) discriminatorValue = discriminatorCompleteResult.value;
|
|
2279
|
+
else discriminatorValue = state.selectedBranch.key;
|
|
2260
2280
|
return {
|
|
2261
2281
|
success: true,
|
|
2262
2282
|
value: [discriminatorValue, branchResult.value]
|
|
@@ -2279,7 +2299,14 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2279
2299
|
};
|
|
2280
2300
|
}
|
|
2281
2301
|
const branchParser = state.selectedBranch.kind === "default" ? defaultBranch : branches[state.selectedBranch.key];
|
|
2282
|
-
const
|
|
2302
|
+
const discriminatorCompleteResult = await discriminator.complete(state.discriminatorState);
|
|
2303
|
+
const combinedState = {
|
|
2304
|
+
_discriminator: state.discriminatorState,
|
|
2305
|
+
_branch: state.branchState
|
|
2306
|
+
};
|
|
2307
|
+
const resolvedCombinedState = await resolveDeferredParseStatesAsync(combinedState);
|
|
2308
|
+
const resolvedBranchState = resolvedCombinedState._branch;
|
|
2309
|
+
const branchResult = await branchParser.complete(resolvedBranchState);
|
|
2283
2310
|
if (!branchResult.success) {
|
|
2284
2311
|
if (state.discriminatorValue !== void 0 && options?.errors?.branchError) return {
|
|
2285
2312
|
success: false,
|
|
@@ -2287,7 +2314,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2287
2314
|
};
|
|
2288
2315
|
return branchResult;
|
|
2289
2316
|
}
|
|
2290
|
-
|
|
2317
|
+
let discriminatorValue;
|
|
2318
|
+
if (state.selectedBranch.kind === "default") discriminatorValue = void 0;
|
|
2319
|
+
else if (isDependencySourceState(discriminatorCompleteResult)) discriminatorValue = discriminatorCompleteResult.result.success ? discriminatorCompleteResult.result.value : state.selectedBranch.key;
|
|
2320
|
+
else if (discriminatorCompleteResult.success) discriminatorValue = discriminatorCompleteResult.value;
|
|
2321
|
+
else discriminatorValue = state.selectedBranch.key;
|
|
2291
2322
|
return {
|
|
2292
2323
|
success: true,
|
|
2293
2324
|
value: [discriminatorValue, branchResult.value]
|
package/dist/dependency.cjs
CHANGED
|
@@ -27,11 +27,23 @@ const DependencyId = Symbol.for("@optique/core/dependency/DependencyId");
|
|
|
27
27
|
*/
|
|
28
28
|
const DependencyIds = Symbol.for("@optique/core/dependency/DependencyIds");
|
|
29
29
|
/**
|
|
30
|
+
* A unique symbol used to store the default values function on derived parsers.
|
|
31
|
+
* This is used during partial dependency resolution to fill in missing values.
|
|
32
|
+
* @since 0.10.0
|
|
33
|
+
*/
|
|
34
|
+
const DefaultValues = Symbol.for("@optique/core/dependency/DefaultValues");
|
|
35
|
+
/**
|
|
30
36
|
* A unique symbol used to access the parseWithDependency method on derived parsers.
|
|
31
37
|
* @since 0.10.0
|
|
32
38
|
*/
|
|
33
39
|
const ParseWithDependency = Symbol.for("@optique/core/dependency/ParseWithDependency");
|
|
34
40
|
/**
|
|
41
|
+
* A unique symbol used to access the suggestWithDependency method on derived parsers.
|
|
42
|
+
* This method generates suggestions using the provided dependency values instead of defaults.
|
|
43
|
+
* @since 0.10.0
|
|
44
|
+
*/
|
|
45
|
+
const SuggestWithDependency = Symbol.for("@optique/core/dependency/SuggestWithDependency");
|
|
46
|
+
/**
|
|
35
47
|
* Creates a dependency source from a {@link ValueParser}.
|
|
36
48
|
*
|
|
37
49
|
* A dependency source wraps an existing value parser and enables creating
|
|
@@ -195,6 +207,7 @@ function createSyncDerivedFromParser(sourceId, options) {
|
|
|
195
207
|
[DerivedValueParserMarker]: true,
|
|
196
208
|
[DependencyId]: sourceId,
|
|
197
209
|
[DependencyIds]: allDependencyIds,
|
|
210
|
+
[DefaultValues]: options.defaultValues,
|
|
198
211
|
parse(input) {
|
|
199
212
|
const sourceValues = options.defaultValues();
|
|
200
213
|
const derivedParser = options.factory(...sourceValues);
|
|
@@ -222,6 +235,16 @@ function createSyncDerivedFromParser(sourceId, options) {
|
|
|
222
235
|
const sourceValues = options.defaultValues();
|
|
223
236
|
const derivedParser = options.factory(...sourceValues);
|
|
224
237
|
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
238
|
+
},
|
|
239
|
+
*[SuggestWithDependency](prefix, dependencyValue) {
|
|
240
|
+
let derivedParser;
|
|
241
|
+
try {
|
|
242
|
+
derivedParser = options.factory(...dependencyValue);
|
|
243
|
+
} catch {
|
|
244
|
+
const sourceValues = options.defaultValues();
|
|
245
|
+
derivedParser = options.factory(...sourceValues);
|
|
246
|
+
}
|
|
247
|
+
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
225
248
|
}
|
|
226
249
|
};
|
|
227
250
|
}
|
|
@@ -237,6 +260,7 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
|
237
260
|
[DerivedValueParserMarker]: true,
|
|
238
261
|
[DependencyId]: sourceId,
|
|
239
262
|
[DependencyIds]: allDependencyIds,
|
|
263
|
+
[DefaultValues]: options.defaultValues,
|
|
240
264
|
parse(input) {
|
|
241
265
|
const sourceValues = options.defaultValues();
|
|
242
266
|
const derivedParser = options.factory(...sourceValues);
|
|
@@ -264,6 +288,16 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
|
264
288
|
const sourceValues = options.defaultValues();
|
|
265
289
|
const derivedParser = options.factory(...sourceValues);
|
|
266
290
|
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
291
|
+
},
|
|
292
|
+
async *[SuggestWithDependency](prefix, dependencyValue) {
|
|
293
|
+
let derivedParser;
|
|
294
|
+
try {
|
|
295
|
+
derivedParser = options.factory(...dependencyValue);
|
|
296
|
+
} catch {
|
|
297
|
+
const sourceValues = options.defaultValues();
|
|
298
|
+
derivedParser = options.factory(...sourceValues);
|
|
299
|
+
}
|
|
300
|
+
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
267
301
|
}
|
|
268
302
|
};
|
|
269
303
|
}
|
|
@@ -279,6 +313,7 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
|
|
|
279
313
|
[DerivedValueParserMarker]: true,
|
|
280
314
|
[DependencyId]: sourceId,
|
|
281
315
|
[DependencyIds]: allDependencyIds,
|
|
316
|
+
[DefaultValues]: options.defaultValues,
|
|
282
317
|
parse(input) {
|
|
283
318
|
const sourceValues = options.defaultValues();
|
|
284
319
|
const derivedParser = options.factory(...sourceValues);
|
|
@@ -306,6 +341,16 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
|
|
|
306
341
|
const sourceValues = options.defaultValues();
|
|
307
342
|
const derivedParser = options.factory(...sourceValues);
|
|
308
343
|
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
344
|
+
},
|
|
345
|
+
*[SuggestWithDependency](prefix, dependencyValue) {
|
|
346
|
+
let derivedParser;
|
|
347
|
+
try {
|
|
348
|
+
derivedParser = options.factory(...dependencyValue);
|
|
349
|
+
} catch {
|
|
350
|
+
const sourceValues = options.defaultValues();
|
|
351
|
+
derivedParser = options.factory(...sourceValues);
|
|
352
|
+
}
|
|
353
|
+
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
309
354
|
}
|
|
310
355
|
};
|
|
311
356
|
}
|
|
@@ -360,6 +405,15 @@ function createSyncDerivedParser(sourceId, options) {
|
|
|
360
405
|
const sourceValue = options.defaultValue();
|
|
361
406
|
const derivedParser = options.factory(sourceValue);
|
|
362
407
|
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
408
|
+
},
|
|
409
|
+
*[SuggestWithDependency](prefix, dependencyValue) {
|
|
410
|
+
let derivedParser;
|
|
411
|
+
try {
|
|
412
|
+
derivedParser = options.factory(dependencyValue);
|
|
413
|
+
} catch {
|
|
414
|
+
derivedParser = options.factory(options.defaultValue());
|
|
415
|
+
}
|
|
416
|
+
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
363
417
|
}
|
|
364
418
|
};
|
|
365
419
|
}
|
|
@@ -400,6 +454,15 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
|
|
|
400
454
|
const sourceValue = options.defaultValue();
|
|
401
455
|
const derivedParser = options.factory(sourceValue);
|
|
402
456
|
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
457
|
+
},
|
|
458
|
+
async *[SuggestWithDependency](prefix, dependencyValue) {
|
|
459
|
+
let derivedParser;
|
|
460
|
+
try {
|
|
461
|
+
derivedParser = options.factory(dependencyValue);
|
|
462
|
+
} catch {
|
|
463
|
+
derivedParser = options.factory(options.defaultValue());
|
|
464
|
+
}
|
|
465
|
+
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
403
466
|
}
|
|
404
467
|
};
|
|
405
468
|
}
|
|
@@ -440,6 +503,15 @@ function createAsyncDerivedParserFromSyncFactory(sourceId, options) {
|
|
|
440
503
|
const sourceValue = options.defaultValue();
|
|
441
504
|
const derivedParser = options.factory(sourceValue);
|
|
442
505
|
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
506
|
+
},
|
|
507
|
+
*[SuggestWithDependency](prefix, dependencyValue) {
|
|
508
|
+
let derivedParser;
|
|
509
|
+
try {
|
|
510
|
+
derivedParser = options.factory(dependencyValue);
|
|
511
|
+
} catch {
|
|
512
|
+
derivedParser = options.factory(options.defaultValue());
|
|
513
|
+
}
|
|
514
|
+
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
443
515
|
}
|
|
444
516
|
};
|
|
445
517
|
}
|
|
@@ -471,12 +543,15 @@ function isDeferredParseState(value) {
|
|
|
471
543
|
*/
|
|
472
544
|
function createDeferredParseState(rawInput, parser, preliminaryResult) {
|
|
473
545
|
const multipleIds = DependencyIds in parser ? parser[DependencyIds] : void 0;
|
|
546
|
+
const defaultValuesFn = DefaultValues in parser ? parser[DefaultValues] : void 0;
|
|
547
|
+
const defaultVals = defaultValuesFn ? defaultValuesFn() : void 0;
|
|
474
548
|
return {
|
|
475
549
|
[DeferredParseMarker]: true,
|
|
476
550
|
rawInput,
|
|
477
551
|
parser,
|
|
478
552
|
dependencyId: parser[DependencyId],
|
|
479
553
|
dependencyIds: multipleIds,
|
|
554
|
+
defaultValues: defaultVals,
|
|
480
555
|
preliminaryResult
|
|
481
556
|
};
|
|
482
557
|
}
|
|
@@ -644,6 +719,7 @@ function formatDependencyError(error) {
|
|
|
644
719
|
}
|
|
645
720
|
|
|
646
721
|
//#endregion
|
|
722
|
+
exports.DefaultValues = DefaultValues;
|
|
647
723
|
exports.DeferredParseMarker = DeferredParseMarker;
|
|
648
724
|
exports.DependencyId = DependencyId;
|
|
649
725
|
exports.DependencyIds = DependencyIds;
|
|
@@ -653,6 +729,7 @@ exports.DependencySourceStateMarker = DependencySourceStateMarker;
|
|
|
653
729
|
exports.DerivedValueParserMarker = DerivedValueParserMarker;
|
|
654
730
|
exports.ParseWithDependency = ParseWithDependency;
|
|
655
731
|
exports.PendingDependencySourceStateMarker = PendingDependencySourceStateMarker;
|
|
732
|
+
exports.SuggestWithDependency = SuggestWithDependency;
|
|
656
733
|
exports.TransformsDependencyValueMarker = TransformsDependencyValueMarker;
|
|
657
734
|
exports.WrappedDependencySourceMarker = WrappedDependencySourceMarker;
|
|
658
735
|
exports.createDeferredParseState = createDeferredParseState;
|
package/dist/dependency.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NonEmptyString } from "./nonempty.cjs";
|
|
2
2
|
import { Message } from "./message.cjs";
|
|
3
3
|
import { ValueParser, ValueParserResult } from "./valueparser.cjs";
|
|
4
|
-
import { Mode } from "./parser.cjs";
|
|
4
|
+
import { Mode, Suggestion } from "./parser.cjs";
|
|
5
5
|
|
|
6
6
|
//#region src/dependency.d.ts
|
|
7
7
|
|
|
@@ -30,11 +30,23 @@ declare const DependencyId: unique symbol;
|
|
|
30
30
|
* @since 0.10.0
|
|
31
31
|
*/
|
|
32
32
|
declare const DependencyIds: unique symbol;
|
|
33
|
+
/**
|
|
34
|
+
* A unique symbol used to store the default values function on derived parsers.
|
|
35
|
+
* This is used during partial dependency resolution to fill in missing values.
|
|
36
|
+
* @since 0.10.0
|
|
37
|
+
*/
|
|
38
|
+
declare const DefaultValues: unique symbol;
|
|
33
39
|
/**
|
|
34
40
|
* A unique symbol used to access the parseWithDependency method on derived parsers.
|
|
35
41
|
* @since 0.10.0
|
|
36
42
|
*/
|
|
37
43
|
declare const ParseWithDependency: unique symbol;
|
|
44
|
+
/**
|
|
45
|
+
* A unique symbol used to access the suggestWithDependency method on derived parsers.
|
|
46
|
+
* This method generates suggestions using the provided dependency values instead of defaults.
|
|
47
|
+
* @since 0.10.0
|
|
48
|
+
*/
|
|
49
|
+
declare const SuggestWithDependency: unique symbol;
|
|
38
50
|
/**
|
|
39
51
|
* Combines two modes into a single mode.
|
|
40
52
|
* If either mode is async, the result is async.
|
|
@@ -327,6 +339,12 @@ interface DerivedValueParser<M extends Mode = "sync", T = unknown, S = unknown>
|
|
|
327
339
|
* @internal
|
|
328
340
|
*/
|
|
329
341
|
readonly [DependencyIds]?: readonly symbol[];
|
|
342
|
+
/**
|
|
343
|
+
* The default values function for this parser's dependencies.
|
|
344
|
+
* Used during partial dependency resolution to fill in missing values.
|
|
345
|
+
* @internal
|
|
346
|
+
*/
|
|
347
|
+
readonly [DefaultValues]?: () => readonly unknown[];
|
|
330
348
|
/**
|
|
331
349
|
* Parses the input using the actual dependency value instead of the default.
|
|
332
350
|
* This method is used during dependency resolution in `complete()`.
|
|
@@ -337,6 +355,16 @@ interface DerivedValueParser<M extends Mode = "sync", T = unknown, S = unknown>
|
|
|
337
355
|
* @internal
|
|
338
356
|
*/
|
|
339
357
|
readonly [ParseWithDependency]: (input: string, dependencyValue: S) => ValueParserResult<T> | Promise<ValueParserResult<T>>;
|
|
358
|
+
/**
|
|
359
|
+
* Generates suggestions using the provided dependency value instead of the default.
|
|
360
|
+
* This method is used during shell completion when dependency sources have been parsed.
|
|
361
|
+
*
|
|
362
|
+
* @param prefix The input prefix to filter suggestions.
|
|
363
|
+
* @param dependencyValue The resolved dependency value.
|
|
364
|
+
* @returns An iterable of suggestions.
|
|
365
|
+
* @internal
|
|
366
|
+
*/
|
|
367
|
+
readonly [SuggestWithDependency]?: (prefix: string, dependencyValue: S) => Iterable<Suggestion> | AsyncIterable<Suggestion>;
|
|
340
368
|
}
|
|
341
369
|
/**
|
|
342
370
|
* Creates a dependency source from a {@link ValueParser}.
|
|
@@ -484,6 +512,12 @@ interface DeferredParseState<T = unknown> {
|
|
|
484
512
|
* If present, this is used instead of `dependencyId`.
|
|
485
513
|
*/
|
|
486
514
|
readonly dependencyIds?: readonly symbol[];
|
|
515
|
+
/**
|
|
516
|
+
* The default values to use for dependencies that are not provided.
|
|
517
|
+
* For multi-dependency parsers, this is a tuple of default values in order.
|
|
518
|
+
* For single-dependency parsers, this is the single default value.
|
|
519
|
+
*/
|
|
520
|
+
readonly defaultValues?: readonly unknown[];
|
|
487
521
|
/**
|
|
488
522
|
* The preliminary parse result using the default dependency value.
|
|
489
523
|
* This is used as a fallback if dependency resolution is not needed
|
|
@@ -713,4 +747,4 @@ type DependencyError = {
|
|
|
713
747
|
*/
|
|
714
748
|
declare function formatDependencyError(error: DependencyError): Message;
|
|
715
749
|
//#endregion
|
|
716
|
-
export { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
|
|
750
|
+
export { AnyDependencySource, CombineMode, CombinedDependencyMode, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
|
package/dist/dependency.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NonEmptyString } from "./nonempty.js";
|
|
2
2
|
import { Message } from "./message.js";
|
|
3
3
|
import { ValueParser, ValueParserResult } from "./valueparser.js";
|
|
4
|
-
import { Mode } from "./parser.js";
|
|
4
|
+
import { Mode, Suggestion } from "./parser.js";
|
|
5
5
|
|
|
6
6
|
//#region src/dependency.d.ts
|
|
7
7
|
|
|
@@ -30,11 +30,23 @@ declare const DependencyId: unique symbol;
|
|
|
30
30
|
* @since 0.10.0
|
|
31
31
|
*/
|
|
32
32
|
declare const DependencyIds: unique symbol;
|
|
33
|
+
/**
|
|
34
|
+
* A unique symbol used to store the default values function on derived parsers.
|
|
35
|
+
* This is used during partial dependency resolution to fill in missing values.
|
|
36
|
+
* @since 0.10.0
|
|
37
|
+
*/
|
|
38
|
+
declare const DefaultValues: unique symbol;
|
|
33
39
|
/**
|
|
34
40
|
* A unique symbol used to access the parseWithDependency method on derived parsers.
|
|
35
41
|
* @since 0.10.0
|
|
36
42
|
*/
|
|
37
43
|
declare const ParseWithDependency: unique symbol;
|
|
44
|
+
/**
|
|
45
|
+
* A unique symbol used to access the suggestWithDependency method on derived parsers.
|
|
46
|
+
* This method generates suggestions using the provided dependency values instead of defaults.
|
|
47
|
+
* @since 0.10.0
|
|
48
|
+
*/
|
|
49
|
+
declare const SuggestWithDependency: unique symbol;
|
|
38
50
|
/**
|
|
39
51
|
* Combines two modes into a single mode.
|
|
40
52
|
* If either mode is async, the result is async.
|
|
@@ -327,6 +339,12 @@ interface DerivedValueParser<M extends Mode = "sync", T = unknown, S = unknown>
|
|
|
327
339
|
* @internal
|
|
328
340
|
*/
|
|
329
341
|
readonly [DependencyIds]?: readonly symbol[];
|
|
342
|
+
/**
|
|
343
|
+
* The default values function for this parser's dependencies.
|
|
344
|
+
* Used during partial dependency resolution to fill in missing values.
|
|
345
|
+
* @internal
|
|
346
|
+
*/
|
|
347
|
+
readonly [DefaultValues]?: () => readonly unknown[];
|
|
330
348
|
/**
|
|
331
349
|
* Parses the input using the actual dependency value instead of the default.
|
|
332
350
|
* This method is used during dependency resolution in `complete()`.
|
|
@@ -337,6 +355,16 @@ interface DerivedValueParser<M extends Mode = "sync", T = unknown, S = unknown>
|
|
|
337
355
|
* @internal
|
|
338
356
|
*/
|
|
339
357
|
readonly [ParseWithDependency]: (input: string, dependencyValue: S) => ValueParserResult<T> | Promise<ValueParserResult<T>>;
|
|
358
|
+
/**
|
|
359
|
+
* Generates suggestions using the provided dependency value instead of the default.
|
|
360
|
+
* This method is used during shell completion when dependency sources have been parsed.
|
|
361
|
+
*
|
|
362
|
+
* @param prefix The input prefix to filter suggestions.
|
|
363
|
+
* @param dependencyValue The resolved dependency value.
|
|
364
|
+
* @returns An iterable of suggestions.
|
|
365
|
+
* @internal
|
|
366
|
+
*/
|
|
367
|
+
readonly [SuggestWithDependency]?: (prefix: string, dependencyValue: S) => Iterable<Suggestion> | AsyncIterable<Suggestion>;
|
|
340
368
|
}
|
|
341
369
|
/**
|
|
342
370
|
* Creates a dependency source from a {@link ValueParser}.
|
|
@@ -484,6 +512,12 @@ interface DeferredParseState<T = unknown> {
|
|
|
484
512
|
* If present, this is used instead of `dependencyId`.
|
|
485
513
|
*/
|
|
486
514
|
readonly dependencyIds?: readonly symbol[];
|
|
515
|
+
/**
|
|
516
|
+
* The default values to use for dependencies that are not provided.
|
|
517
|
+
* For multi-dependency parsers, this is a tuple of default values in order.
|
|
518
|
+
* For single-dependency parsers, this is the single default value.
|
|
519
|
+
*/
|
|
520
|
+
readonly defaultValues?: readonly unknown[];
|
|
487
521
|
/**
|
|
488
522
|
* The preliminary parse result using the default dependency value.
|
|
489
523
|
* This is used as a fallback if dependency resolution is not needed
|
|
@@ -713,4 +747,4 @@ type DependencyError = {
|
|
|
713
747
|
*/
|
|
714
748
|
declare function formatDependencyError(error: DependencyError): Message;
|
|
715
749
|
//#endregion
|
|
716
|
-
export { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
|
|
750
|
+
export { AnyDependencySource, CombineMode, CombinedDependencyMode, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
|
package/dist/dependency.js
CHANGED
|
@@ -27,11 +27,23 @@ const DependencyId = Symbol.for("@optique/core/dependency/DependencyId");
|
|
|
27
27
|
*/
|
|
28
28
|
const DependencyIds = Symbol.for("@optique/core/dependency/DependencyIds");
|
|
29
29
|
/**
|
|
30
|
+
* A unique symbol used to store the default values function on derived parsers.
|
|
31
|
+
* This is used during partial dependency resolution to fill in missing values.
|
|
32
|
+
* @since 0.10.0
|
|
33
|
+
*/
|
|
34
|
+
const DefaultValues = Symbol.for("@optique/core/dependency/DefaultValues");
|
|
35
|
+
/**
|
|
30
36
|
* A unique symbol used to access the parseWithDependency method on derived parsers.
|
|
31
37
|
* @since 0.10.0
|
|
32
38
|
*/
|
|
33
39
|
const ParseWithDependency = Symbol.for("@optique/core/dependency/ParseWithDependency");
|
|
34
40
|
/**
|
|
41
|
+
* A unique symbol used to access the suggestWithDependency method on derived parsers.
|
|
42
|
+
* This method generates suggestions using the provided dependency values instead of defaults.
|
|
43
|
+
* @since 0.10.0
|
|
44
|
+
*/
|
|
45
|
+
const SuggestWithDependency = Symbol.for("@optique/core/dependency/SuggestWithDependency");
|
|
46
|
+
/**
|
|
35
47
|
* Creates a dependency source from a {@link ValueParser}.
|
|
36
48
|
*
|
|
37
49
|
* A dependency source wraps an existing value parser and enables creating
|
|
@@ -195,6 +207,7 @@ function createSyncDerivedFromParser(sourceId, options) {
|
|
|
195
207
|
[DerivedValueParserMarker]: true,
|
|
196
208
|
[DependencyId]: sourceId,
|
|
197
209
|
[DependencyIds]: allDependencyIds,
|
|
210
|
+
[DefaultValues]: options.defaultValues,
|
|
198
211
|
parse(input) {
|
|
199
212
|
const sourceValues = options.defaultValues();
|
|
200
213
|
const derivedParser = options.factory(...sourceValues);
|
|
@@ -222,6 +235,16 @@ function createSyncDerivedFromParser(sourceId, options) {
|
|
|
222
235
|
const sourceValues = options.defaultValues();
|
|
223
236
|
const derivedParser = options.factory(...sourceValues);
|
|
224
237
|
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
238
|
+
},
|
|
239
|
+
*[SuggestWithDependency](prefix, dependencyValue) {
|
|
240
|
+
let derivedParser;
|
|
241
|
+
try {
|
|
242
|
+
derivedParser = options.factory(...dependencyValue);
|
|
243
|
+
} catch {
|
|
244
|
+
const sourceValues = options.defaultValues();
|
|
245
|
+
derivedParser = options.factory(...sourceValues);
|
|
246
|
+
}
|
|
247
|
+
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
225
248
|
}
|
|
226
249
|
};
|
|
227
250
|
}
|
|
@@ -237,6 +260,7 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
|
237
260
|
[DerivedValueParserMarker]: true,
|
|
238
261
|
[DependencyId]: sourceId,
|
|
239
262
|
[DependencyIds]: allDependencyIds,
|
|
263
|
+
[DefaultValues]: options.defaultValues,
|
|
240
264
|
parse(input) {
|
|
241
265
|
const sourceValues = options.defaultValues();
|
|
242
266
|
const derivedParser = options.factory(...sourceValues);
|
|
@@ -264,6 +288,16 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
|
264
288
|
const sourceValues = options.defaultValues();
|
|
265
289
|
const derivedParser = options.factory(...sourceValues);
|
|
266
290
|
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
291
|
+
},
|
|
292
|
+
async *[SuggestWithDependency](prefix, dependencyValue) {
|
|
293
|
+
let derivedParser;
|
|
294
|
+
try {
|
|
295
|
+
derivedParser = options.factory(...dependencyValue);
|
|
296
|
+
} catch {
|
|
297
|
+
const sourceValues = options.defaultValues();
|
|
298
|
+
derivedParser = options.factory(...sourceValues);
|
|
299
|
+
}
|
|
300
|
+
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
267
301
|
}
|
|
268
302
|
};
|
|
269
303
|
}
|
|
@@ -279,6 +313,7 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
|
|
|
279
313
|
[DerivedValueParserMarker]: true,
|
|
280
314
|
[DependencyId]: sourceId,
|
|
281
315
|
[DependencyIds]: allDependencyIds,
|
|
316
|
+
[DefaultValues]: options.defaultValues,
|
|
282
317
|
parse(input) {
|
|
283
318
|
const sourceValues = options.defaultValues();
|
|
284
319
|
const derivedParser = options.factory(...sourceValues);
|
|
@@ -306,6 +341,16 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
|
|
|
306
341
|
const sourceValues = options.defaultValues();
|
|
307
342
|
const derivedParser = options.factory(...sourceValues);
|
|
308
343
|
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
344
|
+
},
|
|
345
|
+
*[SuggestWithDependency](prefix, dependencyValue) {
|
|
346
|
+
let derivedParser;
|
|
347
|
+
try {
|
|
348
|
+
derivedParser = options.factory(...dependencyValue);
|
|
349
|
+
} catch {
|
|
350
|
+
const sourceValues = options.defaultValues();
|
|
351
|
+
derivedParser = options.factory(...sourceValues);
|
|
352
|
+
}
|
|
353
|
+
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
309
354
|
}
|
|
310
355
|
};
|
|
311
356
|
}
|
|
@@ -360,6 +405,15 @@ function createSyncDerivedParser(sourceId, options) {
|
|
|
360
405
|
const sourceValue = options.defaultValue();
|
|
361
406
|
const derivedParser = options.factory(sourceValue);
|
|
362
407
|
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
408
|
+
},
|
|
409
|
+
*[SuggestWithDependency](prefix, dependencyValue) {
|
|
410
|
+
let derivedParser;
|
|
411
|
+
try {
|
|
412
|
+
derivedParser = options.factory(dependencyValue);
|
|
413
|
+
} catch {
|
|
414
|
+
derivedParser = options.factory(options.defaultValue());
|
|
415
|
+
}
|
|
416
|
+
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
363
417
|
}
|
|
364
418
|
};
|
|
365
419
|
}
|
|
@@ -400,6 +454,15 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
|
|
|
400
454
|
const sourceValue = options.defaultValue();
|
|
401
455
|
const derivedParser = options.factory(sourceValue);
|
|
402
456
|
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
457
|
+
},
|
|
458
|
+
async *[SuggestWithDependency](prefix, dependencyValue) {
|
|
459
|
+
let derivedParser;
|
|
460
|
+
try {
|
|
461
|
+
derivedParser = options.factory(dependencyValue);
|
|
462
|
+
} catch {
|
|
463
|
+
derivedParser = options.factory(options.defaultValue());
|
|
464
|
+
}
|
|
465
|
+
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
403
466
|
}
|
|
404
467
|
};
|
|
405
468
|
}
|
|
@@ -440,6 +503,15 @@ function createAsyncDerivedParserFromSyncFactory(sourceId, options) {
|
|
|
440
503
|
const sourceValue = options.defaultValue();
|
|
441
504
|
const derivedParser = options.factory(sourceValue);
|
|
442
505
|
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
506
|
+
},
|
|
507
|
+
*[SuggestWithDependency](prefix, dependencyValue) {
|
|
508
|
+
let derivedParser;
|
|
509
|
+
try {
|
|
510
|
+
derivedParser = options.factory(dependencyValue);
|
|
511
|
+
} catch {
|
|
512
|
+
derivedParser = options.factory(options.defaultValue());
|
|
513
|
+
}
|
|
514
|
+
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
443
515
|
}
|
|
444
516
|
};
|
|
445
517
|
}
|
|
@@ -471,12 +543,15 @@ function isDeferredParseState(value) {
|
|
|
471
543
|
*/
|
|
472
544
|
function createDeferredParseState(rawInput, parser, preliminaryResult) {
|
|
473
545
|
const multipleIds = DependencyIds in parser ? parser[DependencyIds] : void 0;
|
|
546
|
+
const defaultValuesFn = DefaultValues in parser ? parser[DefaultValues] : void 0;
|
|
547
|
+
const defaultVals = defaultValuesFn ? defaultValuesFn() : void 0;
|
|
474
548
|
return {
|
|
475
549
|
[DeferredParseMarker]: true,
|
|
476
550
|
rawInput,
|
|
477
551
|
parser,
|
|
478
552
|
dependencyId: parser[DependencyId],
|
|
479
553
|
dependencyIds: multipleIds,
|
|
554
|
+
defaultValues: defaultVals,
|
|
480
555
|
preliminaryResult
|
|
481
556
|
};
|
|
482
557
|
}
|
|
@@ -644,4 +719,4 @@ function formatDependencyError(error) {
|
|
|
644
719
|
}
|
|
645
720
|
|
|
646
721
|
//#endregion
|
|
647
|
-
export { DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
|
|
722
|
+
export { DefaultValues, DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
|
package/dist/index.cjs
CHANGED
|
@@ -11,6 +11,7 @@ const require_primitives = require('./primitives.cjs');
|
|
|
11
11
|
const require_parser = require('./parser.cjs');
|
|
12
12
|
const require_facade = require('./facade.cjs');
|
|
13
13
|
|
|
14
|
+
exports.DefaultValues = require_dependency.DefaultValues;
|
|
14
15
|
exports.DeferredParseMarker = require_dependency.DeferredParseMarker;
|
|
15
16
|
exports.DependencyId = require_dependency.DependencyId;
|
|
16
17
|
exports.DependencyIds = require_dependency.DependencyIds;
|
|
@@ -23,6 +24,7 @@ exports.ParseWithDependency = require_dependency.ParseWithDependency;
|
|
|
23
24
|
exports.PendingDependencySourceStateMarker = require_dependency.PendingDependencySourceStateMarker;
|
|
24
25
|
exports.RunError = require_facade.RunError;
|
|
25
26
|
exports.RunParserError = require_facade.RunParserError;
|
|
27
|
+
exports.SuggestWithDependency = require_dependency.SuggestWithDependency;
|
|
26
28
|
exports.TransformsDependencyValueMarker = require_dependency.TransformsDependencyValueMarker;
|
|
27
29
|
exports.WithDefaultError = require_modifiers.WithDefaultError;
|
|
28
30
|
exports.WrappedDependencySourceMarker = require_dependency.WrappedDependencySourceMarker;
|
package/dist/index.d.cts
CHANGED
|
@@ -5,9 +5,9 @@ import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, Doc
|
|
|
5
5
|
import { ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, FloatOptions, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, choice, float, integer, isValueParser, locale, string, url, uuid } from "./valueparser.cjs";
|
|
6
6
|
import { ConditionalErrorOptions, ConditionalOptions, DuplicateOptionError, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, NoMatchContext, ObjectErrorOptions, ObjectOptions, OrErrorOptions, OrOptions, TupleOptions, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.cjs";
|
|
7
7
|
import { MultipleErrorOptions, MultipleOptions, WithDefaultError, WithDefaultOptions, map, multiple, optional, withDefault } from "./modifiers.cjs";
|
|
8
|
-
import { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.cjs";
|
|
8
|
+
import { AnyDependencySource, CombineMode, CombinedDependencyMode, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.cjs";
|
|
9
9
|
import { ArgumentErrorOptions, ArgumentOptions, CommandErrorOptions, CommandOptions, FlagErrorOptions, FlagOptions, OptionErrorOptions, OptionOptions, OptionState, PassThroughFormat, PassThroughOptions, argument, command, constant, flag, option, passThrough } from "./primitives.cjs";
|
|
10
10
|
import { CombineModes, DocState, InferMode, InferValue, Mode, ModeIterable, ModeValue, Parser, ParserContext, ParserResult, Result, Suggestion, getDocPage, getDocPageAsync, getDocPageSync, parse, parseAsync, parseSync, suggest, suggestAsync, suggestSync } from "./parser.cjs";
|
|
11
11
|
import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.cjs";
|
|
12
12
|
import { RunError, RunOptions, RunParserError, run, runParser, runParserAsync, runParserSync } from "./facade.cjs";
|
|
13
|
-
export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
|
|
13
|
+
export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, SuggestWithDependency, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
|
package/dist/index.d.ts
CHANGED
|
@@ -5,9 +5,9 @@ import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, Doc
|
|
|
5
5
|
import { ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, FloatOptions, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, choice, float, integer, isValueParser, locale, string, url, uuid } from "./valueparser.js";
|
|
6
6
|
import { ConditionalErrorOptions, ConditionalOptions, DuplicateOptionError, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, NoMatchContext, ObjectErrorOptions, ObjectOptions, OrErrorOptions, OrOptions, TupleOptions, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.js";
|
|
7
7
|
import { MultipleErrorOptions, MultipleOptions, WithDefaultError, WithDefaultOptions, map, multiple, optional, withDefault } from "./modifiers.js";
|
|
8
|
-
import { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.js";
|
|
8
|
+
import { AnyDependencySource, CombineMode, CombinedDependencyMode, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.js";
|
|
9
9
|
import { ArgumentErrorOptions, ArgumentOptions, CommandErrorOptions, CommandOptions, FlagErrorOptions, FlagOptions, OptionErrorOptions, OptionOptions, OptionState, PassThroughFormat, PassThroughOptions, argument, command, constant, flag, option, passThrough } from "./primitives.js";
|
|
10
10
|
import { CombineModes, DocState, InferMode, InferValue, Mode, ModeIterable, ModeValue, Parser, ParserContext, ParserResult, Result, Suggestion, getDocPage, getDocPageAsync, getDocPageSync, parse, parseAsync, parseSync, suggest, suggestAsync, suggestSync } from "./parser.js";
|
|
11
11
|
import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.js";
|
|
12
12
|
import { RunError, RunOptions, RunParserError, run, runParser, runParserAsync, runParserSync } from "./facade.js";
|
|
13
|
-
export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
|
|
13
|
+
export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DefaultValues, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, SuggestWithDependency, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { commandLine, envVar, formatMessage, message, metavar, optionName, optionNames, text, value, valueSet, values } from "./message.js";
|
|
2
2
|
import { bash, fish, nu, pwsh, zsh } from "./completion.js";
|
|
3
|
-
import { DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.js";
|
|
3
|
+
import { DefaultValues, DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, SuggestWithDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.js";
|
|
4
4
|
import { extractArgumentMetavars, extractCommandNames, extractOptionNames, formatUsage, formatUsageTerm, normalizeUsage } from "./usage.js";
|
|
5
5
|
import { DuplicateOptionError, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.js";
|
|
6
6
|
import { formatDocPage } from "./doc.js";
|
|
@@ -11,4 +11,4 @@ import { argument, command, constant, flag, option, passThrough } from "./primit
|
|
|
11
11
|
import { getDocPage, getDocPageAsync, getDocPageSync, parse, parseAsync, parseSync, suggest, suggestAsync, suggestSync } from "./parser.js";
|
|
12
12
|
import { RunError, RunParserError, run, runParser, runParserAsync, runParserSync } from "./facade.js";
|
|
13
13
|
|
|
14
|
-
export { DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, DuplicateOptionError, ParseWithDependency, PendingDependencySourceStateMarker, RunError, RunParserError, TransformsDependencyValueMarker, WithDefaultError, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
|
|
14
|
+
export { DefaultValues, DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, DuplicateOptionError, ParseWithDependency, PendingDependencySourceStateMarker, RunError, RunParserError, SuggestWithDependency, TransformsDependencyValueMarker, WithDefaultError, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
|
package/dist/parser.d.cts
CHANGED
|
@@ -187,6 +187,15 @@ interface ParserContext<TState> {
|
|
|
187
187
|
* @since 0.7.0
|
|
188
188
|
*/
|
|
189
189
|
readonly usage: Usage;
|
|
190
|
+
/**
|
|
191
|
+
* A registry containing resolved dependency values from DependencySource parsers.
|
|
192
|
+
* This is used during shell completion to provide suggestions based on
|
|
193
|
+
* the actual dependency values that have been parsed, rather than defaults.
|
|
194
|
+
* The type is `unknown` to avoid circular dependency issues; the actual type
|
|
195
|
+
* is `DependencyRegistry` from `./dependency.ts`.
|
|
196
|
+
* @since 0.10.0
|
|
197
|
+
*/
|
|
198
|
+
readonly dependencyRegistry?: unknown;
|
|
190
199
|
}
|
|
191
200
|
/**
|
|
192
201
|
* Represents a suggestion for command-line completion or guidance.
|
package/dist/parser.d.ts
CHANGED
|
@@ -187,6 +187,15 @@ interface ParserContext<TState> {
|
|
|
187
187
|
* @since 0.7.0
|
|
188
188
|
*/
|
|
189
189
|
readonly usage: Usage;
|
|
190
|
+
/**
|
|
191
|
+
* A registry containing resolved dependency values from DependencySource parsers.
|
|
192
|
+
* This is used during shell completion to provide suggestions based on
|
|
193
|
+
* the actual dependency values that have been parsed, rather than defaults.
|
|
194
|
+
* The type is `unknown` to avoid circular dependency issues; the actual type
|
|
195
|
+
* is `DependencyRegistry` from `./dependency.ts`.
|
|
196
|
+
* @since 0.10.0
|
|
197
|
+
*/
|
|
198
|
+
readonly dependencyRegistry?: unknown;
|
|
190
199
|
}
|
|
191
200
|
/**
|
|
192
201
|
* Represents a suggestion for command-line completion or guidance.
|
package/dist/primitives.cjs
CHANGED
|
@@ -53,6 +53,42 @@ function constant(value) {
|
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
+
* Internal helper to get suggestions from a value parser, using dependency values
|
|
57
|
+
* if the parser is a derived parser and dependency values are available.
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
function* getSuggestionsWithDependency(valueParser, prefix, dependencyRegistry) {
|
|
61
|
+
if (!valueParser.suggest) return;
|
|
62
|
+
if (require_dependency.isDerivedValueParser(valueParser) && require_dependency.SuggestWithDependency in valueParser) {
|
|
63
|
+
const derived = valueParser;
|
|
64
|
+
const suggestWithDep = derived[require_dependency.SuggestWithDependency];
|
|
65
|
+
if (suggestWithDep && dependencyRegistry) {
|
|
66
|
+
const depIds = require_dependency.DependencyIds in derived ? derived[require_dependency.DependencyIds] : [derived[require_dependency.DependencyId]];
|
|
67
|
+
const defaults = require_dependency.DefaultValues in derived ? derived[require_dependency.DefaultValues]?.() : void 0;
|
|
68
|
+
const registry = dependencyRegistry;
|
|
69
|
+
const dependencyValues = [];
|
|
70
|
+
let hasAnyValue = false;
|
|
71
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
72
|
+
const depId = depIds[i];
|
|
73
|
+
if (registry.has(depId)) {
|
|
74
|
+
dependencyValues.push(registry.get(depId));
|
|
75
|
+
hasAnyValue = true;
|
|
76
|
+
} else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
77
|
+
else {
|
|
78
|
+
yield* valueParser.suggest(prefix);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (hasAnyValue) {
|
|
83
|
+
const depValue = depIds.length === 1 ? dependencyValues[0] : dependencyValues;
|
|
84
|
+
yield* suggestWithDep(prefix, depValue);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
yield* valueParser.suggest(prefix);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
56
92
|
* Internal sync helper for option suggest functionality.
|
|
57
93
|
* @internal
|
|
58
94
|
*/
|
|
@@ -64,7 +100,7 @@ function* suggestOptionSync(optionNames$1, valueParser, hidden, context, prefix)
|
|
|
64
100
|
const valuePart = prefix.slice(equalsIndex + 1);
|
|
65
101
|
if (optionNames$1.includes(optionPart)) {
|
|
66
102
|
if (valueParser && valueParser.suggest) {
|
|
67
|
-
const valueSuggestions = valueParser.
|
|
103
|
+
const valueSuggestions = getSuggestionsWithDependency(valueParser, valuePart, context.dependencyRegistry);
|
|
68
104
|
for (const suggestion of valueSuggestions) if (suggestion.kind === "literal") yield {
|
|
69
105
|
kind: "literal",
|
|
70
106
|
text: `${optionPart}=${suggestion.text}`,
|
|
@@ -93,9 +129,45 @@ function* suggestOptionSync(optionNames$1, valueParser, hidden, context, prefix)
|
|
|
93
129
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
94
130
|
if (optionNames$1.includes(lastToken)) shouldSuggestValues = true;
|
|
95
131
|
} else if (context.state === void 0 && context.buffer.length === 0) shouldSuggestValues = true;
|
|
96
|
-
if (shouldSuggestValues) yield* valueParser.
|
|
132
|
+
if (shouldSuggestValues) yield* getSuggestionsWithDependency(valueParser, prefix, context.dependencyRegistry);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Internal async helper to get suggestions from a value parser, using dependency values
|
|
138
|
+
* if the parser is a derived parser and dependency values are available.
|
|
139
|
+
* @internal
|
|
140
|
+
*/
|
|
141
|
+
async function* getSuggestionsWithDependencyAsync(valueParser, prefix, dependencyRegistry) {
|
|
142
|
+
if (!valueParser.suggest) return;
|
|
143
|
+
if (require_dependency.isDerivedValueParser(valueParser) && require_dependency.SuggestWithDependency in valueParser) {
|
|
144
|
+
const derived = valueParser;
|
|
145
|
+
const suggestWithDep = derived[require_dependency.SuggestWithDependency];
|
|
146
|
+
if (suggestWithDep && dependencyRegistry) {
|
|
147
|
+
const depIds = require_dependency.DependencyIds in derived ? derived[require_dependency.DependencyIds] : [derived[require_dependency.DependencyId]];
|
|
148
|
+
const defaults = require_dependency.DefaultValues in derived ? derived[require_dependency.DefaultValues]?.() : void 0;
|
|
149
|
+
const registry = dependencyRegistry;
|
|
150
|
+
const dependencyValues = [];
|
|
151
|
+
let hasAnyValue = false;
|
|
152
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
153
|
+
const depId = depIds[i];
|
|
154
|
+
if (registry.has(depId)) {
|
|
155
|
+
dependencyValues.push(registry.get(depId));
|
|
156
|
+
hasAnyValue = true;
|
|
157
|
+
} else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
158
|
+
else {
|
|
159
|
+
for await (const suggestion of valueParser.suggest(prefix)) yield suggestion;
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (hasAnyValue) {
|
|
164
|
+
const depValue = depIds.length === 1 ? dependencyValues[0] : dependencyValues;
|
|
165
|
+
for await (const suggestion of suggestWithDep(prefix, depValue)) yield suggestion;
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
97
168
|
}
|
|
98
169
|
}
|
|
170
|
+
for await (const suggestion of valueParser.suggest(prefix)) yield suggestion;
|
|
99
171
|
}
|
|
100
172
|
/**
|
|
101
173
|
* Internal async helper for option suggest functionality.
|
|
@@ -109,7 +181,7 @@ async function* suggestOptionAsync(optionNames$1, valueParser, hidden, context,
|
|
|
109
181
|
const valuePart = prefix.slice(equalsIndex + 1);
|
|
110
182
|
if (optionNames$1.includes(optionPart)) {
|
|
111
183
|
if (valueParser && valueParser.suggest) {
|
|
112
|
-
const valueSuggestions = valueParser.
|
|
184
|
+
const valueSuggestions = getSuggestionsWithDependencyAsync(valueParser, valuePart, context.dependencyRegistry);
|
|
113
185
|
for await (const suggestion of valueSuggestions) if (suggestion.kind === "literal") yield {
|
|
114
186
|
kind: "literal",
|
|
115
187
|
text: `${optionPart}=${suggestion.text}`,
|
|
@@ -138,7 +210,7 @@ async function* suggestOptionAsync(optionNames$1, valueParser, hidden, context,
|
|
|
138
210
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
139
211
|
if (optionNames$1.includes(lastToken)) shouldSuggestValues = true;
|
|
140
212
|
} else if (context.state === void 0 && context.buffer.length === 0) shouldSuggestValues = true;
|
|
141
|
-
if (shouldSuggestValues) for await (const suggestion of valueParser.
|
|
213
|
+
if (shouldSuggestValues) for await (const suggestion of getSuggestionsWithDependencyAsync(valueParser, prefix, context.dependencyRegistry)) yield suggestion;
|
|
142
214
|
}
|
|
143
215
|
}
|
|
144
216
|
}
|
package/dist/primitives.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { message, metavar, optionName, optionNames } from "./message.js";
|
|
2
|
-
import { DependencyId, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState } from "./dependency.js";
|
|
2
|
+
import { DefaultValues, DependencyId, DependencyIds, SuggestWithDependency, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState } from "./dependency.js";
|
|
3
3
|
import { extractCommandNames, extractOptionNames } from "./usage.js";
|
|
4
4
|
import { DEFAULT_FIND_SIMILAR_OPTIONS, createErrorWithSuggestions, findSimilar } from "./suggestion.js";
|
|
5
5
|
import { isValueParser } from "./valueparser.js";
|
|
@@ -53,6 +53,42 @@ function constant(value) {
|
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
+
* Internal helper to get suggestions from a value parser, using dependency values
|
|
57
|
+
* if the parser is a derived parser and dependency values are available.
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
function* getSuggestionsWithDependency(valueParser, prefix, dependencyRegistry) {
|
|
61
|
+
if (!valueParser.suggest) return;
|
|
62
|
+
if (isDerivedValueParser(valueParser) && SuggestWithDependency in valueParser) {
|
|
63
|
+
const derived = valueParser;
|
|
64
|
+
const suggestWithDep = derived[SuggestWithDependency];
|
|
65
|
+
if (suggestWithDep && dependencyRegistry) {
|
|
66
|
+
const depIds = DependencyIds in derived ? derived[DependencyIds] : [derived[DependencyId]];
|
|
67
|
+
const defaults = DefaultValues in derived ? derived[DefaultValues]?.() : void 0;
|
|
68
|
+
const registry = dependencyRegistry;
|
|
69
|
+
const dependencyValues = [];
|
|
70
|
+
let hasAnyValue = false;
|
|
71
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
72
|
+
const depId = depIds[i];
|
|
73
|
+
if (registry.has(depId)) {
|
|
74
|
+
dependencyValues.push(registry.get(depId));
|
|
75
|
+
hasAnyValue = true;
|
|
76
|
+
} else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
77
|
+
else {
|
|
78
|
+
yield* valueParser.suggest(prefix);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (hasAnyValue) {
|
|
83
|
+
const depValue = depIds.length === 1 ? dependencyValues[0] : dependencyValues;
|
|
84
|
+
yield* suggestWithDep(prefix, depValue);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
yield* valueParser.suggest(prefix);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
56
92
|
* Internal sync helper for option suggest functionality.
|
|
57
93
|
* @internal
|
|
58
94
|
*/
|
|
@@ -64,7 +100,7 @@ function* suggestOptionSync(optionNames$1, valueParser, hidden, context, prefix)
|
|
|
64
100
|
const valuePart = prefix.slice(equalsIndex + 1);
|
|
65
101
|
if (optionNames$1.includes(optionPart)) {
|
|
66
102
|
if (valueParser && valueParser.suggest) {
|
|
67
|
-
const valueSuggestions = valueParser.
|
|
103
|
+
const valueSuggestions = getSuggestionsWithDependency(valueParser, valuePart, context.dependencyRegistry);
|
|
68
104
|
for (const suggestion of valueSuggestions) if (suggestion.kind === "literal") yield {
|
|
69
105
|
kind: "literal",
|
|
70
106
|
text: `${optionPart}=${suggestion.text}`,
|
|
@@ -93,9 +129,45 @@ function* suggestOptionSync(optionNames$1, valueParser, hidden, context, prefix)
|
|
|
93
129
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
94
130
|
if (optionNames$1.includes(lastToken)) shouldSuggestValues = true;
|
|
95
131
|
} else if (context.state === void 0 && context.buffer.length === 0) shouldSuggestValues = true;
|
|
96
|
-
if (shouldSuggestValues) yield* valueParser.
|
|
132
|
+
if (shouldSuggestValues) yield* getSuggestionsWithDependency(valueParser, prefix, context.dependencyRegistry);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Internal async helper to get suggestions from a value parser, using dependency values
|
|
138
|
+
* if the parser is a derived parser and dependency values are available.
|
|
139
|
+
* @internal
|
|
140
|
+
*/
|
|
141
|
+
async function* getSuggestionsWithDependencyAsync(valueParser, prefix, dependencyRegistry) {
|
|
142
|
+
if (!valueParser.suggest) return;
|
|
143
|
+
if (isDerivedValueParser(valueParser) && SuggestWithDependency in valueParser) {
|
|
144
|
+
const derived = valueParser;
|
|
145
|
+
const suggestWithDep = derived[SuggestWithDependency];
|
|
146
|
+
if (suggestWithDep && dependencyRegistry) {
|
|
147
|
+
const depIds = DependencyIds in derived ? derived[DependencyIds] : [derived[DependencyId]];
|
|
148
|
+
const defaults = DefaultValues in derived ? derived[DefaultValues]?.() : void 0;
|
|
149
|
+
const registry = dependencyRegistry;
|
|
150
|
+
const dependencyValues = [];
|
|
151
|
+
let hasAnyValue = false;
|
|
152
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
153
|
+
const depId = depIds[i];
|
|
154
|
+
if (registry.has(depId)) {
|
|
155
|
+
dependencyValues.push(registry.get(depId));
|
|
156
|
+
hasAnyValue = true;
|
|
157
|
+
} else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
158
|
+
else {
|
|
159
|
+
for await (const suggestion of valueParser.suggest(prefix)) yield suggestion;
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (hasAnyValue) {
|
|
164
|
+
const depValue = depIds.length === 1 ? dependencyValues[0] : dependencyValues;
|
|
165
|
+
for await (const suggestion of suggestWithDep(prefix, depValue)) yield suggestion;
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
97
168
|
}
|
|
98
169
|
}
|
|
170
|
+
for await (const suggestion of valueParser.suggest(prefix)) yield suggestion;
|
|
99
171
|
}
|
|
100
172
|
/**
|
|
101
173
|
* Internal async helper for option suggest functionality.
|
|
@@ -109,7 +181,7 @@ async function* suggestOptionAsync(optionNames$1, valueParser, hidden, context,
|
|
|
109
181
|
const valuePart = prefix.slice(equalsIndex + 1);
|
|
110
182
|
if (optionNames$1.includes(optionPart)) {
|
|
111
183
|
if (valueParser && valueParser.suggest) {
|
|
112
|
-
const valueSuggestions = valueParser.
|
|
184
|
+
const valueSuggestions = getSuggestionsWithDependencyAsync(valueParser, valuePart, context.dependencyRegistry);
|
|
113
185
|
for await (const suggestion of valueSuggestions) if (suggestion.kind === "literal") yield {
|
|
114
186
|
kind: "literal",
|
|
115
187
|
text: `${optionPart}=${suggestion.text}`,
|
|
@@ -138,7 +210,7 @@ async function* suggestOptionAsync(optionNames$1, valueParser, hidden, context,
|
|
|
138
210
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
139
211
|
if (optionNames$1.includes(lastToken)) shouldSuggestValues = true;
|
|
140
212
|
} else if (context.state === void 0 && context.buffer.length === 0) shouldSuggestValues = true;
|
|
141
|
-
if (shouldSuggestValues) for await (const suggestion of valueParser.
|
|
213
|
+
if (shouldSuggestValues) for await (const suggestion of getSuggestionsWithDependencyAsync(valueParser, prefix, context.dependencyRegistry)) yield suggestion;
|
|
142
214
|
}
|
|
143
215
|
}
|
|
144
216
|
}
|