@optique/core 0.10.0-dev.291 → 0.10.0-dev.293
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 +71 -2
- package/dist/constructs.js +71 -2
- package/dist/dependency.cjs +528 -0
- package/dist/dependency.d.cts +617 -0
- package/dist/dependency.d.ts +617 -0
- package/dist/dependency.js +510 -0
- package/dist/facade.cjs +1 -1
- package/dist/facade.js +1 -1
- package/dist/index.cjs +20 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +3 -2
- package/dist/parser.d.cts +3 -3
- package/dist/parser.d.ts +3 -3
- package/dist/primitives.cjs +60 -12
- package/dist/primitives.d.cts +8 -2
- package/dist/primitives.d.ts +8 -2
- package/dist/primitives.js +60 -12
- package/package.json +9 -1
package/dist/constructs.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_message = require('./message.cjs');
|
|
2
|
+
const require_dependency = require('./dependency.cjs');
|
|
2
3
|
const require_usage = require('./usage.cjs');
|
|
3
4
|
const require_suggestion = require('./suggestion.cjs');
|
|
4
5
|
|
|
@@ -531,6 +532,72 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
|
531
532
|
}
|
|
532
533
|
yield* require_suggestion.deduplicateSuggestions(suggestions);
|
|
533
534
|
}
|
|
535
|
+
/**
|
|
536
|
+
* Resolves deferred parse states in an object's field states.
|
|
537
|
+
* This function builds a dependency registry from DependencySourceState fields
|
|
538
|
+
* and re-parses DeferredParseState fields using the actual dependency values.
|
|
539
|
+
*
|
|
540
|
+
* @param fieldStates A record of field names to their state values
|
|
541
|
+
* @returns The field states with deferred states resolved to their actual values
|
|
542
|
+
* @internal
|
|
543
|
+
*/
|
|
544
|
+
function resolveDeferredParseStates(fieldStates) {
|
|
545
|
+
const registry = new require_dependency.DependencyRegistry();
|
|
546
|
+
for (const key of Reflect.ownKeys(fieldStates)) {
|
|
547
|
+
const fieldState = fieldStates[key];
|
|
548
|
+
if (require_dependency.isDependencySourceState(fieldState)) {
|
|
549
|
+
const depId = fieldState[require_dependency.DependencyId];
|
|
550
|
+
const result = fieldState.result;
|
|
551
|
+
if (result.success) registry.set(depId, result.value);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
const resolvedStates = { ...fieldStates };
|
|
555
|
+
for (const key of Reflect.ownKeys(fieldStates)) {
|
|
556
|
+
const fieldState = fieldStates[key];
|
|
557
|
+
if (require_dependency.isDeferredParseState(fieldState)) {
|
|
558
|
+
const deferredState = fieldState;
|
|
559
|
+
const depId = deferredState.dependencyId;
|
|
560
|
+
if (registry.has(depId)) {
|
|
561
|
+
const dependencyValue = registry.get(depId);
|
|
562
|
+
const parser = deferredState.parser;
|
|
563
|
+
const reParseResult = parser[require_dependency.ParseWithDependency](deferredState.rawInput, dependencyValue);
|
|
564
|
+
if (reParseResult instanceof Promise) resolvedStates[key] = deferredState.preliminaryResult;
|
|
565
|
+
else resolvedStates[key] = reParseResult;
|
|
566
|
+
} else resolvedStates[key] = deferredState.preliminaryResult;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
return resolvedStates;
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Async version of resolveDeferredParseStates for async parsers.
|
|
573
|
+
* @internal
|
|
574
|
+
*/
|
|
575
|
+
async function resolveDeferredParseStatesAsync(fieldStates) {
|
|
576
|
+
const registry = new require_dependency.DependencyRegistry();
|
|
577
|
+
for (const key of Reflect.ownKeys(fieldStates)) {
|
|
578
|
+
const fieldState = fieldStates[key];
|
|
579
|
+
if (require_dependency.isDependencySourceState(fieldState)) {
|
|
580
|
+
const depId = fieldState[require_dependency.DependencyId];
|
|
581
|
+
const result = fieldState.result;
|
|
582
|
+
if (result.success) registry.set(depId, result.value);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
const resolvedStates = { ...fieldStates };
|
|
586
|
+
for (const key of Reflect.ownKeys(fieldStates)) {
|
|
587
|
+
const fieldState = fieldStates[key];
|
|
588
|
+
if (require_dependency.isDeferredParseState(fieldState)) {
|
|
589
|
+
const deferredState = fieldState;
|
|
590
|
+
const depId = deferredState.dependencyId;
|
|
591
|
+
if (registry.has(depId)) {
|
|
592
|
+
const dependencyValue = registry.get(depId);
|
|
593
|
+
const parser = deferredState.parser;
|
|
594
|
+
const reParseResult = parser[require_dependency.ParseWithDependency](deferredState.rawInput, dependencyValue);
|
|
595
|
+
resolvedStates[key] = await Promise.resolve(reParseResult);
|
|
596
|
+
} else resolvedStates[key] = deferredState.preliminaryResult;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
return resolvedStates;
|
|
600
|
+
}
|
|
534
601
|
function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
535
602
|
const label = typeof labelOrParsers === "string" ? labelOrParsers : void 0;
|
|
536
603
|
let parsers;
|
|
@@ -689,10 +756,11 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
689
756
|
return parseSync(context);
|
|
690
757
|
},
|
|
691
758
|
complete(state) {
|
|
759
|
+
const resolvedState = isAsync ? state : resolveDeferredParseStates(state);
|
|
692
760
|
if (!isAsync) {
|
|
693
761
|
const result = {};
|
|
694
762
|
for (const field of parserKeys) {
|
|
695
|
-
const valueResult = parsers[field].complete(
|
|
763
|
+
const valueResult = parsers[field].complete(resolvedState[field]);
|
|
696
764
|
if (valueResult.success) result[field] = valueResult.value;
|
|
697
765
|
else return {
|
|
698
766
|
success: false,
|
|
@@ -705,9 +773,10 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
705
773
|
};
|
|
706
774
|
}
|
|
707
775
|
return (async () => {
|
|
776
|
+
const resolvedState$1 = await resolveDeferredParseStatesAsync(state);
|
|
708
777
|
const result = {};
|
|
709
778
|
for (const field of parserKeys) {
|
|
710
|
-
const valueResult = await parsers[field].complete(
|
|
779
|
+
const valueResult = await parsers[field].complete(resolvedState$1[field]);
|
|
711
780
|
if (valueResult.success) result[field] = valueResult.value;
|
|
712
781
|
else return {
|
|
713
782
|
success: false,
|
package/dist/constructs.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { message, optionName, values } from "./message.js";
|
|
2
|
+
import { DependencyId, DependencyRegistry, ParseWithDependency, isDeferredParseState, isDependencySourceState } from "./dependency.js";
|
|
2
3
|
import { extractArgumentMetavars, extractCommandNames, extractOptionNames } from "./usage.js";
|
|
3
4
|
import { createErrorWithSuggestions, deduplicateSuggestions } from "./suggestion.js";
|
|
4
5
|
|
|
@@ -531,6 +532,72 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
|
531
532
|
}
|
|
532
533
|
yield* deduplicateSuggestions(suggestions);
|
|
533
534
|
}
|
|
535
|
+
/**
|
|
536
|
+
* Resolves deferred parse states in an object's field states.
|
|
537
|
+
* This function builds a dependency registry from DependencySourceState fields
|
|
538
|
+
* and re-parses DeferredParseState fields using the actual dependency values.
|
|
539
|
+
*
|
|
540
|
+
* @param fieldStates A record of field names to their state values
|
|
541
|
+
* @returns The field states with deferred states resolved to their actual values
|
|
542
|
+
* @internal
|
|
543
|
+
*/
|
|
544
|
+
function resolveDeferredParseStates(fieldStates) {
|
|
545
|
+
const registry = new DependencyRegistry();
|
|
546
|
+
for (const key of Reflect.ownKeys(fieldStates)) {
|
|
547
|
+
const fieldState = fieldStates[key];
|
|
548
|
+
if (isDependencySourceState(fieldState)) {
|
|
549
|
+
const depId = fieldState[DependencyId];
|
|
550
|
+
const result = fieldState.result;
|
|
551
|
+
if (result.success) registry.set(depId, result.value);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
const resolvedStates = { ...fieldStates };
|
|
555
|
+
for (const key of Reflect.ownKeys(fieldStates)) {
|
|
556
|
+
const fieldState = fieldStates[key];
|
|
557
|
+
if (isDeferredParseState(fieldState)) {
|
|
558
|
+
const deferredState = fieldState;
|
|
559
|
+
const depId = deferredState.dependencyId;
|
|
560
|
+
if (registry.has(depId)) {
|
|
561
|
+
const dependencyValue = registry.get(depId);
|
|
562
|
+
const parser = deferredState.parser;
|
|
563
|
+
const reParseResult = parser[ParseWithDependency](deferredState.rawInput, dependencyValue);
|
|
564
|
+
if (reParseResult instanceof Promise) resolvedStates[key] = deferredState.preliminaryResult;
|
|
565
|
+
else resolvedStates[key] = reParseResult;
|
|
566
|
+
} else resolvedStates[key] = deferredState.preliminaryResult;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
return resolvedStates;
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Async version of resolveDeferredParseStates for async parsers.
|
|
573
|
+
* @internal
|
|
574
|
+
*/
|
|
575
|
+
async function resolveDeferredParseStatesAsync(fieldStates) {
|
|
576
|
+
const registry = new DependencyRegistry();
|
|
577
|
+
for (const key of Reflect.ownKeys(fieldStates)) {
|
|
578
|
+
const fieldState = fieldStates[key];
|
|
579
|
+
if (isDependencySourceState(fieldState)) {
|
|
580
|
+
const depId = fieldState[DependencyId];
|
|
581
|
+
const result = fieldState.result;
|
|
582
|
+
if (result.success) registry.set(depId, result.value);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
const resolvedStates = { ...fieldStates };
|
|
586
|
+
for (const key of Reflect.ownKeys(fieldStates)) {
|
|
587
|
+
const fieldState = fieldStates[key];
|
|
588
|
+
if (isDeferredParseState(fieldState)) {
|
|
589
|
+
const deferredState = fieldState;
|
|
590
|
+
const depId = deferredState.dependencyId;
|
|
591
|
+
if (registry.has(depId)) {
|
|
592
|
+
const dependencyValue = registry.get(depId);
|
|
593
|
+
const parser = deferredState.parser;
|
|
594
|
+
const reParseResult = parser[ParseWithDependency](deferredState.rawInput, dependencyValue);
|
|
595
|
+
resolvedStates[key] = await Promise.resolve(reParseResult);
|
|
596
|
+
} else resolvedStates[key] = deferredState.preliminaryResult;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
return resolvedStates;
|
|
600
|
+
}
|
|
534
601
|
function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
535
602
|
const label = typeof labelOrParsers === "string" ? labelOrParsers : void 0;
|
|
536
603
|
let parsers;
|
|
@@ -689,10 +756,11 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
689
756
|
return parseSync(context);
|
|
690
757
|
},
|
|
691
758
|
complete(state) {
|
|
759
|
+
const resolvedState = isAsync ? state : resolveDeferredParseStates(state);
|
|
692
760
|
if (!isAsync) {
|
|
693
761
|
const result = {};
|
|
694
762
|
for (const field of parserKeys) {
|
|
695
|
-
const valueResult = parsers[field].complete(
|
|
763
|
+
const valueResult = parsers[field].complete(resolvedState[field]);
|
|
696
764
|
if (valueResult.success) result[field] = valueResult.value;
|
|
697
765
|
else return {
|
|
698
766
|
success: false,
|
|
@@ -705,9 +773,10 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
705
773
|
};
|
|
706
774
|
}
|
|
707
775
|
return (async () => {
|
|
776
|
+
const resolvedState$1 = await resolveDeferredParseStatesAsync(state);
|
|
708
777
|
const result = {};
|
|
709
778
|
for (const field of parserKeys) {
|
|
710
|
-
const valueResult = await parsers[field].complete(
|
|
779
|
+
const valueResult = await parsers[field].complete(resolvedState$1[field]);
|
|
711
780
|
if (valueResult.success) result[field] = valueResult.value;
|
|
712
781
|
else return {
|
|
713
782
|
success: false,
|