@optique/core 1.0.0-dev.1663 → 1.0.0-dev.1665

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.
@@ -158,7 +158,11 @@ function unwrapNestedAnnotationViews(value, seen = /* @__PURE__ */ new WeakMap()
158
158
  changed$1 = true;
159
159
  }
160
160
  }
161
- return changed$1 ? clone$1 : source;
161
+ if (!changed$1) {
162
+ seen.set(source, source);
163
+ return source;
164
+ }
165
+ return clone$1;
162
166
  }
163
167
  const proto = Object.getPrototypeOf(source);
164
168
  if (proto !== Object.prototype && proto !== null) return source;
@@ -986,15 +990,15 @@ function* suggestObjectSync(context, prefix, parserPairs) {
986
990
  if (context.buffer.length > 0) {
987
991
  const lastToken = context.buffer[context.buffer.length - 1];
988
992
  for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
989
- const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
990
- yield* parser.suggest(withChildContext(contextWithRegistry, field, fieldState), prefix);
993
+ const annotatedFieldState = getAnnotatedFieldState(context.state, field, parser);
994
+ yield* parser.suggest(withChildContext(contextWithRegistry, field, annotatedFieldState, parser), prefix);
991
995
  return;
992
996
  }
993
997
  }
994
998
  const suggestions = [];
995
999
  for (const [field, parser] of parserPairs) {
996
- const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
997
- const fieldSuggestions = parser.suggest(withChildContext(contextWithRegistry, field, fieldState), prefix);
1000
+ const annotatedFieldState = getAnnotatedFieldState(context.state, field, parser);
1001
+ const fieldSuggestions = parser.suggest(withChildContext(contextWithRegistry, field, annotatedFieldState, parser), prefix);
998
1002
  suggestions.push(...fieldSuggestions);
999
1003
  }
1000
1004
  yield* require_suggestion.deduplicateSuggestions(suggestions);
@@ -1022,16 +1026,16 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
1022
1026
  if (context.buffer.length > 0) {
1023
1027
  const lastToken = context.buffer[context.buffer.length - 1];
1024
1028
  for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
1025
- const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
1026
- const suggestions$1 = parser.suggest(withChildContext(contextWithRegistry, field, fieldState), prefix);
1029
+ const annotatedFieldState = getAnnotatedFieldState(context.state, field, parser);
1030
+ const suggestions$1 = parser.suggest(withChildContext(contextWithRegistry, field, annotatedFieldState, parser), prefix);
1027
1031
  for await (const s of suggestions$1) yield s;
1028
1032
  return;
1029
1033
  }
1030
1034
  }
1031
1035
  const suggestions = [];
1032
1036
  for (const [field, parser] of parserPairs) {
1033
- const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
1034
- const fieldSuggestions = parser.suggest(withChildContext(contextWithRegistry, field, fieldState), prefix);
1037
+ const annotatedFieldState = getAnnotatedFieldState(context.state, field, parser);
1038
+ const fieldSuggestions = parser.suggest(withChildContext(contextWithRegistry, field, annotatedFieldState, parser), prefix);
1035
1039
  for await (const s of fieldSuggestions) suggestions.push(s);
1036
1040
  }
1037
1041
  yield* require_suggestion.deduplicateSuggestions(suggestions);
@@ -1506,6 +1510,10 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1506
1510
  parse(context) {
1507
1511
  return require_mode_dispatch.dispatchByMode(combinedMode, () => parseSync(context), () => parseAsync(context));
1508
1512
  },
1513
+ getSuggestRuntimeNodes(state, path) {
1514
+ const stateRecord = state != null && typeof state === "object" ? state : objectParser.initialState;
1515
+ return buildSuggestRuntimeNodesFromPairs(parserPairs, stateRecord, path);
1516
+ },
1509
1517
  complete(state, exec) {
1510
1518
  return require_mode_dispatch.dispatchByMode(combinedMode, () => {
1511
1519
  const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
@@ -1749,7 +1757,7 @@ async function* suggestTupleAsync(context, prefix, parsers) {
1749
1757
  state: createAnnotatedArrayStateRecord(stateArray)
1750
1758
  }, buildIndexedParserPairs(parsers), runtime.registry, advancedContext.exec);
1751
1759
  }
1752
- markFailedTupleSuggestSources(parsers, stateArray, advanced.failedParserIndexes, runtime, advancedContext.exec?.path);
1760
+ await markFailedTupleSuggestSourcesAsync(parsers, stateArray, advanced.failedParserIndexes, runtime, advancedContext.exec?.path);
1753
1761
  const contextWithRegistry = {
1754
1762
  ...advancedContext,
1755
1763
  dependencyRegistry: runtime.registry,
@@ -1903,18 +1911,36 @@ async function advanceTupleSuggestContextAsync(context, parsers) {
1903
1911
  function markFailedTupleSuggestSources(parsers, stateArray, failedParserIndexes, runtime, parentPath) {
1904
1912
  if (failedParserIndexes.length < 1) return;
1905
1913
  const prefix = parentPath ?? [];
1906
- const failedSourceIds = /* @__PURE__ */ new Set();
1907
1914
  for (const index of failedParserIndexes) {
1908
1915
  const parser = parsers[index];
1909
1916
  if (parser == null) continue;
1910
1917
  const parserState = stateArray && Array.isArray(stateArray) ? stateArray[index] : parser.initialState;
1911
1918
  const nodes = require_parser.getParserSuggestRuntimeNodes(parser, getAnnotatedChildState(stateArray, parserState, parser), [...prefix, index]);
1919
+ if (nodes.length < 1) continue;
1920
+ const failedRuntime = require_dependency_runtime.createDependencyRuntimeContext();
1921
+ require_dependency_runtime.collectExplicitSourceValues(nodes, failedRuntime);
1922
+ for (const node of nodes) {
1923
+ const sourceId = node.parser.dependencyMetadata?.source?.sourceId;
1924
+ if (sourceId != null && failedRuntime.isSourceFailed(sourceId)) runtime.markSourceFailed(sourceId);
1925
+ }
1926
+ }
1927
+ }
1928
+ async function markFailedTupleSuggestSourcesAsync(parsers, stateArray, failedParserIndexes, runtime, parentPath) {
1929
+ if (failedParserIndexes.length < 1) return;
1930
+ const prefix = parentPath ?? [];
1931
+ for (const index of failedParserIndexes) {
1932
+ const parser = parsers[index];
1933
+ if (parser == null) continue;
1934
+ const parserState = stateArray && Array.isArray(stateArray) ? stateArray[index] : parser.initialState;
1935
+ const nodes = require_parser.getParserSuggestRuntimeNodes(parser, getAnnotatedChildState(stateArray, parserState, parser), [...prefix, index]);
1936
+ if (nodes.length < 1) continue;
1937
+ const failedRuntime = require_dependency_runtime.createDependencyRuntimeContext();
1938
+ await require_dependency_runtime.collectExplicitSourceValuesAsync(nodes, failedRuntime);
1912
1939
  for (const node of nodes) {
1913
1940
  const sourceId = node.parser.dependencyMetadata?.source?.sourceId;
1914
- if (sourceId != null) failedSourceIds.add(sourceId);
1941
+ if (sourceId != null && failedRuntime.isSourceFailed(sourceId)) runtime.markSourceFailed(sourceId);
1915
1942
  }
1916
1943
  }
1917
- for (const sourceId of failedSourceIds) runtime.markSourceFailed(sourceId);
1918
1944
  }
1919
1945
  function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1920
1946
  const label = typeof labelOrParsers === "string" ? labelOrParsers : void 0;
@@ -2313,7 +2339,7 @@ function merge(...args) {
2313
2339
  for (let i = 0; i < syncParsers.length; i++) {
2314
2340
  const parser = syncParsers[i];
2315
2341
  const parserState = extractParserState(parser, currentContext, i);
2316
- const result = parser.parse(withChildContext(currentContext, i, parserState));
2342
+ const result = parser.parse(withChildContext(currentContext, i, parserState, parser));
2317
2343
  if (result.success) {
2318
2344
  const mergedExec = mergeChildExec(currentContext.exec, result.next.exec);
2319
2345
  const newState = mergeResultState(parser, currentContext, parserState, result, i);
@@ -2358,7 +2384,7 @@ function merge(...args) {
2358
2384
  for (let i = 0; i < parsers.length; i++) {
2359
2385
  const parser = parsers[i];
2360
2386
  const parserState = extractParserState(parser, currentContext, i);
2361
- const resultOrPromise = parser.parse(withChildContext(currentContext, i, parserState));
2387
+ const resultOrPromise = parser.parse(withChildContext(currentContext, i, parserState, parser));
2362
2388
  const result = await resultOrPromise;
2363
2389
  if (result.success) {
2364
2390
  const mergedExec = mergeChildExec(currentContext.exec, result.next.exec);
@@ -2607,7 +2633,7 @@ function merge(...args) {
2607
2633
  for (let i = 0; i < parsers.length; i++) {
2608
2634
  const parser = parsers[i];
2609
2635
  const parserState = extractState(parser, i);
2610
- const childContext = withChildContext(contextWithRegistry$1, i, parserState);
2636
+ const childContext = withChildContext(contextWithRegistry$1, i, parserState, parser);
2611
2637
  const excludedSourceFields = perChildExcludedSourceFields$1[i];
2612
2638
  const contextForChild = excludedSourceFields == null ? childContext : (() => {
2613
2639
  const childRuntime = require_dependency_runtime.createDependencyRuntimeContext(runtime$1.registry.clone());
@@ -2648,7 +2674,7 @@ function merge(...args) {
2648
2674
  for (let i = 0; i < syncParsers.length; i++) {
2649
2675
  const parser = syncParsers[i];
2650
2676
  const parserState = extractState(parser, i);
2651
- const childContext = withChildContext(contextWithRegistry, i, parserState);
2677
+ const childContext = withChildContext(contextWithRegistry, i, parserState, parser);
2652
2678
  const excludedSourceFields = perChildExcludedSourceFields[i];
2653
2679
  const contextForChild = excludedSourceFields == null ? childContext : (() => {
2654
2680
  const childRuntime = require_dependency_runtime.createDependencyRuntimeContext(runtime.registry.clone());
@@ -3441,7 +3467,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3441
3467
  ...branchResult.next,
3442
3468
  state: {
3443
3469
  ...state,
3444
- branchState: branchResult.next.state
3470
+ branchState: getAnnotatedChildState(state, branchResult.next.state, branchParser)
3445
3471
  },
3446
3472
  ...mergedExec != null ? {
3447
3473
  exec: mergedExec,
@@ -3485,7 +3511,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3485
3511
  kind: "branch",
3486
3512
  key: value
3487
3513
  },
3488
- branchState: branchParseResult.next.state
3514
+ branchState: getAnnotatedChildState(state, branchParseResult.next.state, branchParser)
3489
3515
  },
3490
3516
  ...mergedExec != null ? {
3491
3517
  exec: mergedExec,
@@ -3506,7 +3532,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3506
3532
  kind: "branch",
3507
3533
  key: value
3508
3534
  },
3509
- branchState: branchParser.initialState
3535
+ branchState: getAnnotatedChildState(state, branchParser.initialState, branchParser)
3510
3536
  },
3511
3537
  ...discriminatorExec != null ? {
3512
3538
  exec: discriminatorExec,
@@ -3529,7 +3555,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3529
3555
  state: {
3530
3556
  ...state,
3531
3557
  selectedBranch: { kind: "default" },
3532
- branchState: defaultResult.next.state
3558
+ branchState: getAnnotatedChildState(state, defaultResult.next.state, syncDefaultBranch)
3533
3559
  },
3534
3560
  ...mergedExec != null ? {
3535
3561
  exec: mergedExec,
@@ -3559,7 +3585,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3559
3585
  ...branchResult.next,
3560
3586
  state: {
3561
3587
  ...state,
3562
- branchState: branchResult.next.state
3588
+ branchState: getAnnotatedChildState(state, branchResult.next.state, branchParser)
3563
3589
  },
3564
3590
  ...mergedExec != null ? {
3565
3591
  exec: mergedExec,
@@ -3603,7 +3629,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3603
3629
  kind: "branch",
3604
3630
  key: value
3605
3631
  },
3606
- branchState: branchParseResult.next.state
3632
+ branchState: getAnnotatedChildState(state, branchParseResult.next.state, branchParser)
3607
3633
  },
3608
3634
  ...mergedExec != null ? {
3609
3635
  exec: mergedExec,
@@ -3624,7 +3650,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3624
3650
  kind: "branch",
3625
3651
  key: value
3626
3652
  },
3627
- branchState: branchParser.initialState
3653
+ branchState: getAnnotatedChildState(state, branchParser.initialState, branchParser)
3628
3654
  },
3629
3655
  ...discriminatorExec != null ? {
3630
3656
  exec: discriminatorExec,
@@ -3647,7 +3673,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3647
3673
  state: {
3648
3674
  ...state,
3649
3675
  selectedBranch: { kind: "default" },
3650
- branchState: defaultResult.next.state
3676
+ branchState: getAnnotatedChildState(state, defaultResult.next.state, defaultBranch)
3651
3677
  },
3652
3678
  ...mergedExec != null ? {
3653
3679
  exec: mergedExec,
@@ -3670,7 +3696,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3670
3696
  const syncBranches = branches;
3671
3697
  if (state.selectedBranch === void 0) {
3672
3698
  if (syncDefaultBranch !== void 0) {
3673
- const branchState = state.branchState ?? syncDefaultBranch.initialState;
3699
+ const branchState = getAnnotatedChildState(state, state.branchState ?? syncDefaultBranch.initialState, syncDefaultBranch);
3674
3700
  const defaultResult = unwrapCompleteResult(syncDefaultBranch.complete(branchState, withChildExecPath(exec, "_branch")));
3675
3701
  if (!defaultResult.success) return defaultResult;
3676
3702
  return {
@@ -3690,12 +3716,12 @@ function conditional(discriminator, branches, defaultBranch, options) {
3690
3716
  const branchParser = state.selectedBranch.kind === "default" ? syncDefaultBranch : syncBranches[state.selectedBranch.key];
3691
3717
  const combinedState = {
3692
3718
  _discriminator: state.discriminatorState,
3693
- _branch: state.branchState
3719
+ _branch: getAnnotatedChildState(state, state.branchState, branchParser)
3694
3720
  };
3695
3721
  const runtime = require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry?.clone());
3696
3722
  require_dependency_runtime.collectExplicitSourceValues(require_dependency_runtime.buildRuntimeNodesFromPairs([["_discriminator", discriminator], ["_branch", branchParser]], combinedState, exec?.path), runtime);
3697
3723
  require_dependency_runtime.collectSourcesFromState(combinedState, runtime);
3698
- const resolvedBranchState = require_dependency_runtime.resolveStateWithRuntime(state.branchState, runtime);
3724
+ const resolvedBranchState = getAnnotatedChildState(state, require_dependency_runtime.resolveStateWithRuntime(state.branchState, runtime), branchParser);
3699
3725
  const completionExec = {
3700
3726
  ...exec ?? {
3701
3727
  usage: branchParser.usage,
@@ -3733,7 +3759,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3733
3759
  const completeAsync = async (state, exec) => {
3734
3760
  if (state.selectedBranch === void 0) {
3735
3761
  if (defaultBranch !== void 0) {
3736
- const branchState = state.branchState ?? defaultBranch.initialState;
3762
+ const branchState = getAnnotatedChildState(state, state.branchState ?? defaultBranch.initialState, defaultBranch);
3737
3763
  const defaultResult = unwrapCompleteResult(await defaultBranch.complete(branchState, withChildExecPath(exec, "_branch")));
3738
3764
  if (!defaultResult.success) return defaultResult;
3739
3765
  return {
@@ -3753,12 +3779,12 @@ function conditional(discriminator, branches, defaultBranch, options) {
3753
3779
  const branchParser = state.selectedBranch.kind === "default" ? defaultBranch : branches[state.selectedBranch.key];
3754
3780
  const combinedState = {
3755
3781
  _discriminator: state.discriminatorState,
3756
- _branch: state.branchState
3782
+ _branch: getAnnotatedChildState(state, state.branchState, branchParser)
3757
3783
  };
3758
3784
  const runtime = require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry?.clone());
3759
3785
  await require_dependency_runtime.collectExplicitSourceValuesAsync(require_dependency_runtime.buildRuntimeNodesFromPairs([["_discriminator", discriminator], ["_branch", branchParser]], combinedState, exec?.path), runtime);
3760
3786
  require_dependency_runtime.collectSourcesFromState(combinedState, runtime);
3761
- const resolvedBranchState = await require_dependency_runtime.resolveStateWithRuntimeAsync(state.branchState, runtime);
3787
+ const resolvedBranchState = getAnnotatedChildState(state, await require_dependency_runtime.resolveStateWithRuntimeAsync(state.branchState, runtime), branchParser);
3762
3788
  const completionExec = {
3763
3789
  ...exec ?? {
3764
3790
  usage: branchParser.usage,
@@ -3800,14 +3826,12 @@ function conditional(discriminator, branches, defaultBranch, options) {
3800
3826
  const syncDefaultBranch = defaultBranch;
3801
3827
  if (state.selectedBranch === void 0) {
3802
3828
  const runtime = require_dependency_runtime.createDependencyRuntimeContext(context.dependencyRegistry?.clone());
3803
- require_dependency_runtime.collectExplicitSourceValues(require_dependency_runtime.buildRuntimeNodesFromPairs(syncDefaultBranch == null ? [["_discriminator", discriminator]] : [["_discriminator", discriminator], ["_branch", syncDefaultBranch]], {
3804
- _discriminator: state.discriminatorState,
3805
- _branch: state.branchState
3806
- }, context.exec?.path), runtime);
3807
- require_dependency_runtime.collectSourcesFromState({
3829
+ const defaultCombinedState = {
3808
3830
  _discriminator: state.discriminatorState,
3809
- _branch: state.branchState
3810
- }, runtime);
3831
+ _branch: syncDefaultBranch == null ? state.branchState : getAnnotatedChildState(state, state.branchState, syncDefaultBranch)
3832
+ };
3833
+ require_dependency_runtime.collectExplicitSourceValues(require_dependency_runtime.buildRuntimeNodesFromPairs(syncDefaultBranch == null ? [["_discriminator", discriminator]] : [["_discriminator", discriminator], ["_branch", syncDefaultBranch]], defaultCombinedState, context.exec?.path), runtime);
3834
+ require_dependency_runtime.collectSourcesFromState(defaultCombinedState, runtime);
3811
3835
  const suggestContext = {
3812
3836
  ...context,
3813
3837
  dependencyRegistry: runtime.registry,
@@ -3818,13 +3842,13 @@ function conditional(discriminator, branches, defaultBranch, options) {
3818
3842
  } } : {}
3819
3843
  };
3820
3844
  yield* syncDiscriminator.suggest(withChildContext(suggestContext, "_discriminator", state.discriminatorState), prefix);
3821
- if (syncDefaultBranch !== void 0) yield* syncDefaultBranch.suggest(withChildContext(suggestContext, "_branch", state.branchState ?? syncDefaultBranch.initialState), prefix);
3845
+ if (syncDefaultBranch !== void 0) yield* syncDefaultBranch.suggest(withChildContext(suggestContext, "_branch", state.branchState ?? syncDefaultBranch.initialState, syncDefaultBranch), prefix);
3822
3846
  } else {
3823
3847
  const branchParser = state.selectedBranch.kind === "default" ? syncDefaultBranch : syncBranches[state.selectedBranch.key];
3824
3848
  const runtime = require_dependency_runtime.createDependencyRuntimeContext(context.dependencyRegistry?.clone());
3825
3849
  const combinedState = {
3826
3850
  _discriminator: state.discriminatorState,
3827
- _branch: state.branchState
3851
+ _branch: getAnnotatedChildState(state, state.branchState, branchParser)
3828
3852
  };
3829
3853
  require_dependency_runtime.collectExplicitSourceValues(require_dependency_runtime.buildRuntimeNodesFromPairs([["_discriminator", discriminator], ["_branch", branchParser]], combinedState, context.exec?.path), runtime);
3830
3854
  require_dependency_runtime.collectSourcesFromState(combinedState, runtime);
@@ -3837,21 +3861,19 @@ function conditional(discriminator, branches, defaultBranch, options) {
3837
3861
  dependencyRegistry: runtime.registry
3838
3862
  } } : {}
3839
3863
  };
3840
- yield* branchParser.suggest(withChildContext(suggestContext, "_branch", state.branchState), prefix);
3864
+ yield* branchParser.suggest(withChildContext(suggestContext, "_branch", state.branchState, branchParser), prefix);
3841
3865
  }
3842
3866
  }
3843
3867
  async function* suggestAsync(context, prefix) {
3844
3868
  const state = context.state ?? initialState;
3845
3869
  if (state.selectedBranch === void 0) {
3846
3870
  const runtime = require_dependency_runtime.createDependencyRuntimeContext(context.dependencyRegistry?.clone());
3847
- await require_dependency_runtime.collectExplicitSourceValuesAsync(require_dependency_runtime.buildRuntimeNodesFromPairs(defaultBranch == null ? [["_discriminator", discriminator]] : [["_discriminator", discriminator], ["_branch", defaultBranch]], {
3871
+ const defaultCombinedState = {
3848
3872
  _discriminator: state.discriminatorState,
3849
- _branch: state.branchState
3850
- }, context.exec?.path), runtime);
3851
- require_dependency_runtime.collectSourcesFromState({
3852
- _discriminator: state.discriminatorState,
3853
- _branch: state.branchState
3854
- }, runtime);
3873
+ _branch: defaultBranch == null ? state.branchState : getAnnotatedChildState(state, state.branchState, defaultBranch)
3874
+ };
3875
+ await require_dependency_runtime.collectExplicitSourceValuesAsync(require_dependency_runtime.buildRuntimeNodesFromPairs(defaultBranch == null ? [["_discriminator", discriminator]] : [["_discriminator", discriminator], ["_branch", defaultBranch]], defaultCombinedState, context.exec?.path), runtime);
3876
+ require_dependency_runtime.collectSourcesFromState(defaultCombinedState, runtime);
3855
3877
  const suggestContext = {
3856
3878
  ...context,
3857
3879
  dependencyRegistry: runtime.registry,
@@ -3862,13 +3884,13 @@ function conditional(discriminator, branches, defaultBranch, options) {
3862
3884
  } } : {}
3863
3885
  };
3864
3886
  yield* discriminator.suggest(withChildContext(suggestContext, "_discriminator", state.discriminatorState), prefix);
3865
- if (defaultBranch !== void 0) yield* defaultBranch.suggest(withChildContext(suggestContext, "_branch", state.branchState ?? defaultBranch.initialState), prefix);
3887
+ if (defaultBranch !== void 0) yield* defaultBranch.suggest(withChildContext(suggestContext, "_branch", state.branchState ?? defaultBranch.initialState, defaultBranch), prefix);
3866
3888
  } else {
3867
3889
  const branchParser = state.selectedBranch.kind === "default" ? defaultBranch : branches[state.selectedBranch.key];
3868
3890
  const runtime = require_dependency_runtime.createDependencyRuntimeContext(context.dependencyRegistry?.clone());
3869
3891
  const combinedState = {
3870
3892
  _discriminator: state.discriminatorState,
3871
- _branch: state.branchState
3893
+ _branch: getAnnotatedChildState(state, state.branchState, branchParser)
3872
3894
  };
3873
3895
  await require_dependency_runtime.collectExplicitSourceValuesAsync(require_dependency_runtime.buildRuntimeNodesFromPairs([["_discriminator", discriminator], ["_branch", branchParser]], combinedState, context.exec?.path), runtime);
3874
3896
  require_dependency_runtime.collectSourcesFromState(combinedState, runtime);
@@ -3881,7 +3903,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3881
3903
  dependencyRegistry: runtime.registry
3882
3904
  } } : {}
3883
3905
  };
3884
- yield* branchParser.suggest(withChildContext(suggestContext, "_branch", state.branchState), prefix);
3906
+ yield* branchParser.suggest(withChildContext(suggestContext, "_branch", state.branchState, branchParser), prefix);
3885
3907
  }
3886
3908
  }
3887
3909
  const conditionalParser = {
@@ -158,7 +158,11 @@ function unwrapNestedAnnotationViews(value, seen = /* @__PURE__ */ new WeakMap()
158
158
  changed$1 = true;
159
159
  }
160
160
  }
161
- return changed$1 ? clone$1 : source;
161
+ if (!changed$1) {
162
+ seen.set(source, source);
163
+ return source;
164
+ }
165
+ return clone$1;
162
166
  }
163
167
  const proto = Object.getPrototypeOf(source);
164
168
  if (proto !== Object.prototype && proto !== null) return source;
@@ -986,15 +990,15 @@ function* suggestObjectSync(context, prefix, parserPairs) {
986
990
  if (context.buffer.length > 0) {
987
991
  const lastToken = context.buffer[context.buffer.length - 1];
988
992
  for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
989
- const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
990
- yield* parser.suggest(withChildContext(contextWithRegistry, field, fieldState), prefix);
993
+ const annotatedFieldState = getAnnotatedFieldState(context.state, field, parser);
994
+ yield* parser.suggest(withChildContext(contextWithRegistry, field, annotatedFieldState, parser), prefix);
991
995
  return;
992
996
  }
993
997
  }
994
998
  const suggestions = [];
995
999
  for (const [field, parser] of parserPairs) {
996
- const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
997
- const fieldSuggestions = parser.suggest(withChildContext(contextWithRegistry, field, fieldState), prefix);
1000
+ const annotatedFieldState = getAnnotatedFieldState(context.state, field, parser);
1001
+ const fieldSuggestions = parser.suggest(withChildContext(contextWithRegistry, field, annotatedFieldState, parser), prefix);
998
1002
  suggestions.push(...fieldSuggestions);
999
1003
  }
1000
1004
  yield* deduplicateSuggestions(suggestions);
@@ -1022,16 +1026,16 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
1022
1026
  if (context.buffer.length > 0) {
1023
1027
  const lastToken = context.buffer[context.buffer.length - 1];
1024
1028
  for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
1025
- const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
1026
- const suggestions$1 = parser.suggest(withChildContext(contextWithRegistry, field, fieldState), prefix);
1029
+ const annotatedFieldState = getAnnotatedFieldState(context.state, field, parser);
1030
+ const suggestions$1 = parser.suggest(withChildContext(contextWithRegistry, field, annotatedFieldState, parser), prefix);
1027
1031
  for await (const s of suggestions$1) yield s;
1028
1032
  return;
1029
1033
  }
1030
1034
  }
1031
1035
  const suggestions = [];
1032
1036
  for (const [field, parser] of parserPairs) {
1033
- const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
1034
- const fieldSuggestions = parser.suggest(withChildContext(contextWithRegistry, field, fieldState), prefix);
1037
+ const annotatedFieldState = getAnnotatedFieldState(context.state, field, parser);
1038
+ const fieldSuggestions = parser.suggest(withChildContext(contextWithRegistry, field, annotatedFieldState, parser), prefix);
1035
1039
  for await (const s of fieldSuggestions) suggestions.push(s);
1036
1040
  }
1037
1041
  yield* deduplicateSuggestions(suggestions);
@@ -1506,6 +1510,10 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1506
1510
  parse(context) {
1507
1511
  return dispatchByMode(combinedMode, () => parseSync(context), () => parseAsync(context));
1508
1512
  },
1513
+ getSuggestRuntimeNodes(state, path) {
1514
+ const stateRecord = state != null && typeof state === "object" ? state : objectParser.initialState;
1515
+ return buildSuggestRuntimeNodesFromPairs(parserPairs, stateRecord, path);
1516
+ },
1509
1517
  complete(state, exec) {
1510
1518
  return dispatchByMode(combinedMode, () => {
1511
1519
  const runtime = exec?.dependencyRuntime ?? createDependencyRuntimeContext(exec?.dependencyRegistry);
@@ -1749,7 +1757,7 @@ async function* suggestTupleAsync(context, prefix, parsers) {
1749
1757
  state: createAnnotatedArrayStateRecord(stateArray)
1750
1758
  }, buildIndexedParserPairs(parsers), runtime.registry, advancedContext.exec);
1751
1759
  }
1752
- markFailedTupleSuggestSources(parsers, stateArray, advanced.failedParserIndexes, runtime, advancedContext.exec?.path);
1760
+ await markFailedTupleSuggestSourcesAsync(parsers, stateArray, advanced.failedParserIndexes, runtime, advancedContext.exec?.path);
1753
1761
  const contextWithRegistry = {
1754
1762
  ...advancedContext,
1755
1763
  dependencyRegistry: runtime.registry,
@@ -1903,18 +1911,36 @@ async function advanceTupleSuggestContextAsync(context, parsers) {
1903
1911
  function markFailedTupleSuggestSources(parsers, stateArray, failedParserIndexes, runtime, parentPath) {
1904
1912
  if (failedParserIndexes.length < 1) return;
1905
1913
  const prefix = parentPath ?? [];
1906
- const failedSourceIds = /* @__PURE__ */ new Set();
1907
1914
  for (const index of failedParserIndexes) {
1908
1915
  const parser = parsers[index];
1909
1916
  if (parser == null) continue;
1910
1917
  const parserState = stateArray && Array.isArray(stateArray) ? stateArray[index] : parser.initialState;
1911
1918
  const nodes = getParserSuggestRuntimeNodes(parser, getAnnotatedChildState(stateArray, parserState, parser), [...prefix, index]);
1919
+ if (nodes.length < 1) continue;
1920
+ const failedRuntime = createDependencyRuntimeContext();
1921
+ collectExplicitSourceValues(nodes, failedRuntime);
1922
+ for (const node of nodes) {
1923
+ const sourceId = node.parser.dependencyMetadata?.source?.sourceId;
1924
+ if (sourceId != null && failedRuntime.isSourceFailed(sourceId)) runtime.markSourceFailed(sourceId);
1925
+ }
1926
+ }
1927
+ }
1928
+ async function markFailedTupleSuggestSourcesAsync(parsers, stateArray, failedParserIndexes, runtime, parentPath) {
1929
+ if (failedParserIndexes.length < 1) return;
1930
+ const prefix = parentPath ?? [];
1931
+ for (const index of failedParserIndexes) {
1932
+ const parser = parsers[index];
1933
+ if (parser == null) continue;
1934
+ const parserState = stateArray && Array.isArray(stateArray) ? stateArray[index] : parser.initialState;
1935
+ const nodes = getParserSuggestRuntimeNodes(parser, getAnnotatedChildState(stateArray, parserState, parser), [...prefix, index]);
1936
+ if (nodes.length < 1) continue;
1937
+ const failedRuntime = createDependencyRuntimeContext();
1938
+ await collectExplicitSourceValuesAsync(nodes, failedRuntime);
1912
1939
  for (const node of nodes) {
1913
1940
  const sourceId = node.parser.dependencyMetadata?.source?.sourceId;
1914
- if (sourceId != null) failedSourceIds.add(sourceId);
1941
+ if (sourceId != null && failedRuntime.isSourceFailed(sourceId)) runtime.markSourceFailed(sourceId);
1915
1942
  }
1916
1943
  }
1917
- for (const sourceId of failedSourceIds) runtime.markSourceFailed(sourceId);
1918
1944
  }
1919
1945
  function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1920
1946
  const label = typeof labelOrParsers === "string" ? labelOrParsers : void 0;
@@ -2313,7 +2339,7 @@ function merge(...args) {
2313
2339
  for (let i = 0; i < syncParsers.length; i++) {
2314
2340
  const parser = syncParsers[i];
2315
2341
  const parserState = extractParserState(parser, currentContext, i);
2316
- const result = parser.parse(withChildContext(currentContext, i, parserState));
2342
+ const result = parser.parse(withChildContext(currentContext, i, parserState, parser));
2317
2343
  if (result.success) {
2318
2344
  const mergedExec = mergeChildExec(currentContext.exec, result.next.exec);
2319
2345
  const newState = mergeResultState(parser, currentContext, parserState, result, i);
@@ -2358,7 +2384,7 @@ function merge(...args) {
2358
2384
  for (let i = 0; i < parsers.length; i++) {
2359
2385
  const parser = parsers[i];
2360
2386
  const parserState = extractParserState(parser, currentContext, i);
2361
- const resultOrPromise = parser.parse(withChildContext(currentContext, i, parserState));
2387
+ const resultOrPromise = parser.parse(withChildContext(currentContext, i, parserState, parser));
2362
2388
  const result = await resultOrPromise;
2363
2389
  if (result.success) {
2364
2390
  const mergedExec = mergeChildExec(currentContext.exec, result.next.exec);
@@ -2607,7 +2633,7 @@ function merge(...args) {
2607
2633
  for (let i = 0; i < parsers.length; i++) {
2608
2634
  const parser = parsers[i];
2609
2635
  const parserState = extractState(parser, i);
2610
- const childContext = withChildContext(contextWithRegistry$1, i, parserState);
2636
+ const childContext = withChildContext(contextWithRegistry$1, i, parserState, parser);
2611
2637
  const excludedSourceFields = perChildExcludedSourceFields$1[i];
2612
2638
  const contextForChild = excludedSourceFields == null ? childContext : (() => {
2613
2639
  const childRuntime = createDependencyRuntimeContext(runtime$1.registry.clone());
@@ -2648,7 +2674,7 @@ function merge(...args) {
2648
2674
  for (let i = 0; i < syncParsers.length; i++) {
2649
2675
  const parser = syncParsers[i];
2650
2676
  const parserState = extractState(parser, i);
2651
- const childContext = withChildContext(contextWithRegistry, i, parserState);
2677
+ const childContext = withChildContext(contextWithRegistry, i, parserState, parser);
2652
2678
  const excludedSourceFields = perChildExcludedSourceFields[i];
2653
2679
  const contextForChild = excludedSourceFields == null ? childContext : (() => {
2654
2680
  const childRuntime = createDependencyRuntimeContext(runtime.registry.clone());
@@ -3441,7 +3467,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3441
3467
  ...branchResult.next,
3442
3468
  state: {
3443
3469
  ...state,
3444
- branchState: branchResult.next.state
3470
+ branchState: getAnnotatedChildState(state, branchResult.next.state, branchParser)
3445
3471
  },
3446
3472
  ...mergedExec != null ? {
3447
3473
  exec: mergedExec,
@@ -3485,7 +3511,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3485
3511
  kind: "branch",
3486
3512
  key: value
3487
3513
  },
3488
- branchState: branchParseResult.next.state
3514
+ branchState: getAnnotatedChildState(state, branchParseResult.next.state, branchParser)
3489
3515
  },
3490
3516
  ...mergedExec != null ? {
3491
3517
  exec: mergedExec,
@@ -3506,7 +3532,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3506
3532
  kind: "branch",
3507
3533
  key: value
3508
3534
  },
3509
- branchState: branchParser.initialState
3535
+ branchState: getAnnotatedChildState(state, branchParser.initialState, branchParser)
3510
3536
  },
3511
3537
  ...discriminatorExec != null ? {
3512
3538
  exec: discriminatorExec,
@@ -3529,7 +3555,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3529
3555
  state: {
3530
3556
  ...state,
3531
3557
  selectedBranch: { kind: "default" },
3532
- branchState: defaultResult.next.state
3558
+ branchState: getAnnotatedChildState(state, defaultResult.next.state, syncDefaultBranch)
3533
3559
  },
3534
3560
  ...mergedExec != null ? {
3535
3561
  exec: mergedExec,
@@ -3559,7 +3585,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3559
3585
  ...branchResult.next,
3560
3586
  state: {
3561
3587
  ...state,
3562
- branchState: branchResult.next.state
3588
+ branchState: getAnnotatedChildState(state, branchResult.next.state, branchParser)
3563
3589
  },
3564
3590
  ...mergedExec != null ? {
3565
3591
  exec: mergedExec,
@@ -3603,7 +3629,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3603
3629
  kind: "branch",
3604
3630
  key: value
3605
3631
  },
3606
- branchState: branchParseResult.next.state
3632
+ branchState: getAnnotatedChildState(state, branchParseResult.next.state, branchParser)
3607
3633
  },
3608
3634
  ...mergedExec != null ? {
3609
3635
  exec: mergedExec,
@@ -3624,7 +3650,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3624
3650
  kind: "branch",
3625
3651
  key: value
3626
3652
  },
3627
- branchState: branchParser.initialState
3653
+ branchState: getAnnotatedChildState(state, branchParser.initialState, branchParser)
3628
3654
  },
3629
3655
  ...discriminatorExec != null ? {
3630
3656
  exec: discriminatorExec,
@@ -3647,7 +3673,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3647
3673
  state: {
3648
3674
  ...state,
3649
3675
  selectedBranch: { kind: "default" },
3650
- branchState: defaultResult.next.state
3676
+ branchState: getAnnotatedChildState(state, defaultResult.next.state, defaultBranch)
3651
3677
  },
3652
3678
  ...mergedExec != null ? {
3653
3679
  exec: mergedExec,
@@ -3670,7 +3696,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3670
3696
  const syncBranches = branches;
3671
3697
  if (state.selectedBranch === void 0) {
3672
3698
  if (syncDefaultBranch !== void 0) {
3673
- const branchState = state.branchState ?? syncDefaultBranch.initialState;
3699
+ const branchState = getAnnotatedChildState(state, state.branchState ?? syncDefaultBranch.initialState, syncDefaultBranch);
3674
3700
  const defaultResult = unwrapCompleteResult(syncDefaultBranch.complete(branchState, withChildExecPath(exec, "_branch")));
3675
3701
  if (!defaultResult.success) return defaultResult;
3676
3702
  return {
@@ -3690,12 +3716,12 @@ function conditional(discriminator, branches, defaultBranch, options) {
3690
3716
  const branchParser = state.selectedBranch.kind === "default" ? syncDefaultBranch : syncBranches[state.selectedBranch.key];
3691
3717
  const combinedState = {
3692
3718
  _discriminator: state.discriminatorState,
3693
- _branch: state.branchState
3719
+ _branch: getAnnotatedChildState(state, state.branchState, branchParser)
3694
3720
  };
3695
3721
  const runtime = createDependencyRuntimeContext(exec?.dependencyRegistry?.clone());
3696
3722
  collectExplicitSourceValues(buildRuntimeNodesFromPairs([["_discriminator", discriminator], ["_branch", branchParser]], combinedState, exec?.path), runtime);
3697
3723
  collectSourcesFromState(combinedState, runtime);
3698
- const resolvedBranchState = resolveStateWithRuntime(state.branchState, runtime);
3724
+ const resolvedBranchState = getAnnotatedChildState(state, resolveStateWithRuntime(state.branchState, runtime), branchParser);
3699
3725
  const completionExec = {
3700
3726
  ...exec ?? {
3701
3727
  usage: branchParser.usage,
@@ -3733,7 +3759,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3733
3759
  const completeAsync = async (state, exec) => {
3734
3760
  if (state.selectedBranch === void 0) {
3735
3761
  if (defaultBranch !== void 0) {
3736
- const branchState = state.branchState ?? defaultBranch.initialState;
3762
+ const branchState = getAnnotatedChildState(state, state.branchState ?? defaultBranch.initialState, defaultBranch);
3737
3763
  const defaultResult = unwrapCompleteResult(await defaultBranch.complete(branchState, withChildExecPath(exec, "_branch")));
3738
3764
  if (!defaultResult.success) return defaultResult;
3739
3765
  return {
@@ -3753,12 +3779,12 @@ function conditional(discriminator, branches, defaultBranch, options) {
3753
3779
  const branchParser = state.selectedBranch.kind === "default" ? defaultBranch : branches[state.selectedBranch.key];
3754
3780
  const combinedState = {
3755
3781
  _discriminator: state.discriminatorState,
3756
- _branch: state.branchState
3782
+ _branch: getAnnotatedChildState(state, state.branchState, branchParser)
3757
3783
  };
3758
3784
  const runtime = createDependencyRuntimeContext(exec?.dependencyRegistry?.clone());
3759
3785
  await collectExplicitSourceValuesAsync(buildRuntimeNodesFromPairs([["_discriminator", discriminator], ["_branch", branchParser]], combinedState, exec?.path), runtime);
3760
3786
  collectSourcesFromState(combinedState, runtime);
3761
- const resolvedBranchState = await resolveStateWithRuntimeAsync(state.branchState, runtime);
3787
+ const resolvedBranchState = getAnnotatedChildState(state, await resolveStateWithRuntimeAsync(state.branchState, runtime), branchParser);
3762
3788
  const completionExec = {
3763
3789
  ...exec ?? {
3764
3790
  usage: branchParser.usage,
@@ -3800,14 +3826,12 @@ function conditional(discriminator, branches, defaultBranch, options) {
3800
3826
  const syncDefaultBranch = defaultBranch;
3801
3827
  if (state.selectedBranch === void 0) {
3802
3828
  const runtime = createDependencyRuntimeContext(context.dependencyRegistry?.clone());
3803
- collectExplicitSourceValues(buildRuntimeNodesFromPairs(syncDefaultBranch == null ? [["_discriminator", discriminator]] : [["_discriminator", discriminator], ["_branch", syncDefaultBranch]], {
3804
- _discriminator: state.discriminatorState,
3805
- _branch: state.branchState
3806
- }, context.exec?.path), runtime);
3807
- collectSourcesFromState({
3829
+ const defaultCombinedState = {
3808
3830
  _discriminator: state.discriminatorState,
3809
- _branch: state.branchState
3810
- }, runtime);
3831
+ _branch: syncDefaultBranch == null ? state.branchState : getAnnotatedChildState(state, state.branchState, syncDefaultBranch)
3832
+ };
3833
+ collectExplicitSourceValues(buildRuntimeNodesFromPairs(syncDefaultBranch == null ? [["_discriminator", discriminator]] : [["_discriminator", discriminator], ["_branch", syncDefaultBranch]], defaultCombinedState, context.exec?.path), runtime);
3834
+ collectSourcesFromState(defaultCombinedState, runtime);
3811
3835
  const suggestContext = {
3812
3836
  ...context,
3813
3837
  dependencyRegistry: runtime.registry,
@@ -3818,13 +3842,13 @@ function conditional(discriminator, branches, defaultBranch, options) {
3818
3842
  } } : {}
3819
3843
  };
3820
3844
  yield* syncDiscriminator.suggest(withChildContext(suggestContext, "_discriminator", state.discriminatorState), prefix);
3821
- if (syncDefaultBranch !== void 0) yield* syncDefaultBranch.suggest(withChildContext(suggestContext, "_branch", state.branchState ?? syncDefaultBranch.initialState), prefix);
3845
+ if (syncDefaultBranch !== void 0) yield* syncDefaultBranch.suggest(withChildContext(suggestContext, "_branch", state.branchState ?? syncDefaultBranch.initialState, syncDefaultBranch), prefix);
3822
3846
  } else {
3823
3847
  const branchParser = state.selectedBranch.kind === "default" ? syncDefaultBranch : syncBranches[state.selectedBranch.key];
3824
3848
  const runtime = createDependencyRuntimeContext(context.dependencyRegistry?.clone());
3825
3849
  const combinedState = {
3826
3850
  _discriminator: state.discriminatorState,
3827
- _branch: state.branchState
3851
+ _branch: getAnnotatedChildState(state, state.branchState, branchParser)
3828
3852
  };
3829
3853
  collectExplicitSourceValues(buildRuntimeNodesFromPairs([["_discriminator", discriminator], ["_branch", branchParser]], combinedState, context.exec?.path), runtime);
3830
3854
  collectSourcesFromState(combinedState, runtime);
@@ -3837,21 +3861,19 @@ function conditional(discriminator, branches, defaultBranch, options) {
3837
3861
  dependencyRegistry: runtime.registry
3838
3862
  } } : {}
3839
3863
  };
3840
- yield* branchParser.suggest(withChildContext(suggestContext, "_branch", state.branchState), prefix);
3864
+ yield* branchParser.suggest(withChildContext(suggestContext, "_branch", state.branchState, branchParser), prefix);
3841
3865
  }
3842
3866
  }
3843
3867
  async function* suggestAsync(context, prefix) {
3844
3868
  const state = context.state ?? initialState;
3845
3869
  if (state.selectedBranch === void 0) {
3846
3870
  const runtime = createDependencyRuntimeContext(context.dependencyRegistry?.clone());
3847
- await collectExplicitSourceValuesAsync(buildRuntimeNodesFromPairs(defaultBranch == null ? [["_discriminator", discriminator]] : [["_discriminator", discriminator], ["_branch", defaultBranch]], {
3871
+ const defaultCombinedState = {
3848
3872
  _discriminator: state.discriminatorState,
3849
- _branch: state.branchState
3850
- }, context.exec?.path), runtime);
3851
- collectSourcesFromState({
3852
- _discriminator: state.discriminatorState,
3853
- _branch: state.branchState
3854
- }, runtime);
3873
+ _branch: defaultBranch == null ? state.branchState : getAnnotatedChildState(state, state.branchState, defaultBranch)
3874
+ };
3875
+ await collectExplicitSourceValuesAsync(buildRuntimeNodesFromPairs(defaultBranch == null ? [["_discriminator", discriminator]] : [["_discriminator", discriminator], ["_branch", defaultBranch]], defaultCombinedState, context.exec?.path), runtime);
3876
+ collectSourcesFromState(defaultCombinedState, runtime);
3855
3877
  const suggestContext = {
3856
3878
  ...context,
3857
3879
  dependencyRegistry: runtime.registry,
@@ -3862,13 +3884,13 @@ function conditional(discriminator, branches, defaultBranch, options) {
3862
3884
  } } : {}
3863
3885
  };
3864
3886
  yield* discriminator.suggest(withChildContext(suggestContext, "_discriminator", state.discriminatorState), prefix);
3865
- if (defaultBranch !== void 0) yield* defaultBranch.suggest(withChildContext(suggestContext, "_branch", state.branchState ?? defaultBranch.initialState), prefix);
3887
+ if (defaultBranch !== void 0) yield* defaultBranch.suggest(withChildContext(suggestContext, "_branch", state.branchState ?? defaultBranch.initialState, defaultBranch), prefix);
3866
3888
  } else {
3867
3889
  const branchParser = state.selectedBranch.kind === "default" ? defaultBranch : branches[state.selectedBranch.key];
3868
3890
  const runtime = createDependencyRuntimeContext(context.dependencyRegistry?.clone());
3869
3891
  const combinedState = {
3870
3892
  _discriminator: state.discriminatorState,
3871
- _branch: state.branchState
3893
+ _branch: getAnnotatedChildState(state, state.branchState, branchParser)
3872
3894
  };
3873
3895
  await collectExplicitSourceValuesAsync(buildRuntimeNodesFromPairs([["_discriminator", discriminator], ["_branch", branchParser]], combinedState, context.exec?.path), runtime);
3874
3896
  collectSourcesFromState(combinedState, runtime);
@@ -3881,7 +3903,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
3881
3903
  dependencyRegistry: runtime.registry
3882
3904
  } } : {}
3883
3905
  };
3884
- yield* branchParser.suggest(withChildContext(suggestContext, "_branch", state.branchState), prefix);
3906
+ yield* branchParser.suggest(withChildContext(suggestContext, "_branch", state.branchState, branchParser), prefix);
3885
3907
  }
3886
3908
  }
3887
3909
  const conditionalParser = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optique/core",
3
- "version": "1.0.0-dev.1663+381b3156",
3
+ "version": "1.0.0-dev.1665+622e89f0",
4
4
  "description": "Type-safe combinatorial command-line interface parser",
5
5
  "keywords": [
6
6
  "CLI",