@optique/core 1.0.0-dev.679 → 1.0.0-dev.688
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 +55 -0
- package/dist/constructs.js +55 -0
- package/package.json +1 -1
package/dist/constructs.cjs
CHANGED
|
@@ -612,6 +612,7 @@ function longestMatch(...args) {
|
|
|
612
612
|
function* suggestObjectSync(context, prefix, parserPairs) {
|
|
613
613
|
const registry = context.dependencyRegistry ? context.dependencyRegistry.clone() : new require_dependency.DependencyRegistry();
|
|
614
614
|
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
615
|
+
completeDependencySourceDefaults(context, parserPairs, registry);
|
|
615
616
|
const contextWithRegistry = {
|
|
616
617
|
...context,
|
|
617
618
|
dependencyRegistry: registry
|
|
@@ -645,6 +646,7 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
645
646
|
async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
646
647
|
const registry = context.dependencyRegistry ? context.dependencyRegistry.clone() : new require_dependency.DependencyRegistry();
|
|
647
648
|
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
649
|
+
await completeDependencySourceDefaultsAsync(context, parserPairs, registry);
|
|
648
650
|
const contextWithRegistry = {
|
|
649
651
|
...context,
|
|
650
652
|
dependencyRegistry: registry
|
|
@@ -673,6 +675,59 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
|
673
675
|
yield* require_suggestion.deduplicateSuggestions(suggestions);
|
|
674
676
|
}
|
|
675
677
|
/**
|
|
678
|
+
* Registers an already-resolved dependency source value in the registry
|
|
679
|
+
* if it is a successful {@link DependencySourceState}.
|
|
680
|
+
*
|
|
681
|
+
* @internal
|
|
682
|
+
*/
|
|
683
|
+
function registerCompletedDependency(completed, registry) {
|
|
684
|
+
if (require_dependency.isDependencySourceState(completed) && completed.result.success && !registry.has(completed[require_dependency.dependencyId])) registry.set(completed[require_dependency.dependencyId], completed.result.value);
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Yields `(parser, state)` pairs for dependency source parsers whose field
|
|
688
|
+
* state is unpopulated, so callers can invoke `complete()` on them.
|
|
689
|
+
*
|
|
690
|
+
* @see https://github.com/dahlia/optique/issues/186
|
|
691
|
+
* @internal
|
|
692
|
+
*/
|
|
693
|
+
function* pendingDependencyDefaults(context, parserPairs) {
|
|
694
|
+
for (const [field, fieldParser] of parserPairs) {
|
|
695
|
+
const fieldState = context.state != null && typeof context.state === "object" && field in context.state ? context.state[field] : void 0;
|
|
696
|
+
if (fieldState != null) continue;
|
|
697
|
+
if (require_dependency.isPendingDependencySourceState(fieldParser.initialState)) yield {
|
|
698
|
+
parser: fieldParser,
|
|
699
|
+
state: fieldParser.initialState
|
|
700
|
+
};
|
|
701
|
+
else if (require_dependency.isWrappedDependencySource(fieldParser)) yield {
|
|
702
|
+
parser: fieldParser,
|
|
703
|
+
state: [fieldParser[require_dependency.wrappedDependencySourceMarker]]
|
|
704
|
+
};
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Pre-completes dependency source parsers wrapped in `withDefault()` whose
|
|
709
|
+
* field state is unpopulated, so that their default values are registered
|
|
710
|
+
* in the dependency registry. This mirrors Phase 1 of parse-time dependency
|
|
711
|
+
* resolution and ensures `suggest()` sees the same defaults as `parse()`.
|
|
712
|
+
*
|
|
713
|
+
* @see https://github.com/dahlia/optique/issues/186
|
|
714
|
+
* @internal
|
|
715
|
+
*/
|
|
716
|
+
function completeDependencySourceDefaults(context, parserPairs, registry) {
|
|
717
|
+
for (const { parser, state } of pendingDependencyDefaults(context, parserPairs)) registerCompletedDependency(parser.complete(state), registry);
|
|
718
|
+
}
|
|
719
|
+
/**
|
|
720
|
+
* Async version of {@link completeDependencySourceDefaults} that awaits
|
|
721
|
+
* `complete()` results. Async parsers with `transformsDependencyValue`
|
|
722
|
+
* return a `Promise` from `complete()`, which the sync version cannot handle.
|
|
723
|
+
*
|
|
724
|
+
* @see https://github.com/dahlia/optique/issues/186
|
|
725
|
+
* @internal
|
|
726
|
+
*/
|
|
727
|
+
async function completeDependencySourceDefaultsAsync(context, parserPairs, registry) {
|
|
728
|
+
for (const { parser, state } of pendingDependencyDefaults(context, parserPairs)) registerCompletedDependency(await parser.complete(state), registry);
|
|
729
|
+
}
|
|
730
|
+
/**
|
|
676
731
|
* Recursively collects dependency values from DependencySourceState objects
|
|
677
732
|
* found anywhere in the state tree.
|
|
678
733
|
* @internal
|
package/dist/constructs.js
CHANGED
|
@@ -612,6 +612,7 @@ function longestMatch(...args) {
|
|
|
612
612
|
function* suggestObjectSync(context, prefix, parserPairs) {
|
|
613
613
|
const registry = context.dependencyRegistry ? context.dependencyRegistry.clone() : new DependencyRegistry();
|
|
614
614
|
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
615
|
+
completeDependencySourceDefaults(context, parserPairs, registry);
|
|
615
616
|
const contextWithRegistry = {
|
|
616
617
|
...context,
|
|
617
618
|
dependencyRegistry: registry
|
|
@@ -645,6 +646,7 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
645
646
|
async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
646
647
|
const registry = context.dependencyRegistry ? context.dependencyRegistry.clone() : new DependencyRegistry();
|
|
647
648
|
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
649
|
+
await completeDependencySourceDefaultsAsync(context, parserPairs, registry);
|
|
648
650
|
const contextWithRegistry = {
|
|
649
651
|
...context,
|
|
650
652
|
dependencyRegistry: registry
|
|
@@ -673,6 +675,59 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
|
673
675
|
yield* deduplicateSuggestions(suggestions);
|
|
674
676
|
}
|
|
675
677
|
/**
|
|
678
|
+
* Registers an already-resolved dependency source value in the registry
|
|
679
|
+
* if it is a successful {@link DependencySourceState}.
|
|
680
|
+
*
|
|
681
|
+
* @internal
|
|
682
|
+
*/
|
|
683
|
+
function registerCompletedDependency(completed, registry) {
|
|
684
|
+
if (isDependencySourceState(completed) && completed.result.success && !registry.has(completed[dependencyId])) registry.set(completed[dependencyId], completed.result.value);
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Yields `(parser, state)` pairs for dependency source parsers whose field
|
|
688
|
+
* state is unpopulated, so callers can invoke `complete()` on them.
|
|
689
|
+
*
|
|
690
|
+
* @see https://github.com/dahlia/optique/issues/186
|
|
691
|
+
* @internal
|
|
692
|
+
*/
|
|
693
|
+
function* pendingDependencyDefaults(context, parserPairs) {
|
|
694
|
+
for (const [field, fieldParser] of parserPairs) {
|
|
695
|
+
const fieldState = context.state != null && typeof context.state === "object" && field in context.state ? context.state[field] : void 0;
|
|
696
|
+
if (fieldState != null) continue;
|
|
697
|
+
if (isPendingDependencySourceState(fieldParser.initialState)) yield {
|
|
698
|
+
parser: fieldParser,
|
|
699
|
+
state: fieldParser.initialState
|
|
700
|
+
};
|
|
701
|
+
else if (isWrappedDependencySource(fieldParser)) yield {
|
|
702
|
+
parser: fieldParser,
|
|
703
|
+
state: [fieldParser[wrappedDependencySourceMarker]]
|
|
704
|
+
};
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Pre-completes dependency source parsers wrapped in `withDefault()` whose
|
|
709
|
+
* field state is unpopulated, so that their default values are registered
|
|
710
|
+
* in the dependency registry. This mirrors Phase 1 of parse-time dependency
|
|
711
|
+
* resolution and ensures `suggest()` sees the same defaults as `parse()`.
|
|
712
|
+
*
|
|
713
|
+
* @see https://github.com/dahlia/optique/issues/186
|
|
714
|
+
* @internal
|
|
715
|
+
*/
|
|
716
|
+
function completeDependencySourceDefaults(context, parserPairs, registry) {
|
|
717
|
+
for (const { parser, state } of pendingDependencyDefaults(context, parserPairs)) registerCompletedDependency(parser.complete(state), registry);
|
|
718
|
+
}
|
|
719
|
+
/**
|
|
720
|
+
* Async version of {@link completeDependencySourceDefaults} that awaits
|
|
721
|
+
* `complete()` results. Async parsers with `transformsDependencyValue`
|
|
722
|
+
* return a `Promise` from `complete()`, which the sync version cannot handle.
|
|
723
|
+
*
|
|
724
|
+
* @see https://github.com/dahlia/optique/issues/186
|
|
725
|
+
* @internal
|
|
726
|
+
*/
|
|
727
|
+
async function completeDependencySourceDefaultsAsync(context, parserPairs, registry) {
|
|
728
|
+
for (const { parser, state } of pendingDependencyDefaults(context, parserPairs)) registerCompletedDependency(await parser.complete(state), registry);
|
|
729
|
+
}
|
|
730
|
+
/**
|
|
676
731
|
* Recursively collects dependency values from DependencySourceState objects
|
|
677
732
|
* found anywhere in the state tree.
|
|
678
733
|
* @internal
|