@optique/core 1.1.0-dev.1998 → 1.1.0-dev.2053

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.
@@ -493,7 +493,8 @@ function generateNoMatchError(context) {
493
493
  else if (hasCommands && hasOptions && !hasArguments) return require_message.message`No matching option or command found.`;
494
494
  else if (hasArguments && hasOptions && !hasCommands) return require_message.message`No matching option or argument found.`;
495
495
  else if (hasArguments && hasCommands && !hasOptions) return require_message.message`No matching command or argument found.`;
496
- else return require_message.message`No matching option, command, or argument found.`;
496
+ else if (hasOptions && hasCommands && hasArguments) return require_message.message`No matching option, command, or argument found.`;
497
+ else return require_message.message`No value provided.`;
497
498
  }
498
499
  function normalizeExclusiveState(state) {
499
500
  if (!Array.isArray(state) || state.length !== 2 || typeof state[0] !== "number") return void 0;
@@ -1847,11 +1848,16 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1847
1848
  trace: void 0,
1848
1849
  phase: "parse"
1849
1850
  };
1851
+ let probeError;
1850
1852
  for (const [field, parser] of parserPairs) {
1851
1853
  const fieldState = getFieldState(field, parser);
1852
1854
  const completeResult = parser.complete(fieldState, require_execution_context.withChildExecPath(probeExec, field));
1853
1855
  if (!completeResult.success) {
1854
1856
  allCanComplete = false;
1857
+ probeError = {
1858
+ consumed: 0,
1859
+ error: completeResult.error
1860
+ };
1855
1861
  break;
1856
1862
  }
1857
1863
  }
@@ -1860,6 +1866,10 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1860
1866
  next: currentContext,
1861
1867
  consumed: []
1862
1868
  };
1869
+ if (probeError !== void 0 && options.errors?.endOfInput === void 0 && !noMatchContext.hasOptions && !noMatchContext.hasCommands && !noMatchContext.hasArguments) return {
1870
+ ...probeError,
1871
+ success: false
1872
+ };
1863
1873
  }
1864
1874
  return {
1865
1875
  ...error,
@@ -1945,11 +1955,16 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1945
1955
  trace: void 0,
1946
1956
  phase: "parse"
1947
1957
  };
1958
+ let probeError;
1948
1959
  for (const [field, parser] of parserPairs) {
1949
1960
  const fieldState = getFieldState(field, parser);
1950
1961
  const completeResult = await parser.complete(fieldState, require_execution_context.withChildExecPath(probeExec, field));
1951
1962
  if (!completeResult.success) {
1952
1963
  allCanComplete = false;
1964
+ probeError = {
1965
+ consumed: 0,
1966
+ error: completeResult.error
1967
+ };
1953
1968
  break;
1954
1969
  }
1955
1970
  }
@@ -1958,6 +1973,10 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1958
1973
  next: currentContext,
1959
1974
  consumed: []
1960
1975
  };
1976
+ if (probeError !== void 0 && options.errors?.endOfInput === void 0 && !noMatchContext.hasOptions && !noMatchContext.hasCommands && !noMatchContext.hasArguments) return {
1977
+ ...probeError,
1978
+ success: false
1979
+ };
1961
1980
  }
1962
1981
  return {
1963
1982
  ...error,
@@ -493,7 +493,8 @@ function generateNoMatchError(context) {
493
493
  else if (hasCommands && hasOptions && !hasArguments) return message`No matching option or command found.`;
494
494
  else if (hasArguments && hasOptions && !hasCommands) return message`No matching option or argument found.`;
495
495
  else if (hasArguments && hasCommands && !hasOptions) return message`No matching command or argument found.`;
496
- else return message`No matching option, command, or argument found.`;
496
+ else if (hasOptions && hasCommands && hasArguments) return message`No matching option, command, or argument found.`;
497
+ else return message`No value provided.`;
497
498
  }
498
499
  function normalizeExclusiveState(state) {
499
500
  if (!Array.isArray(state) || state.length !== 2 || typeof state[0] !== "number") return void 0;
@@ -1847,11 +1848,16 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1847
1848
  trace: void 0,
1848
1849
  phase: "parse"
1849
1850
  };
1851
+ let probeError;
1850
1852
  for (const [field, parser] of parserPairs) {
1851
1853
  const fieldState = getFieldState(field, parser);
1852
1854
  const completeResult = parser.complete(fieldState, withChildExecPath(probeExec, field));
1853
1855
  if (!completeResult.success) {
1854
1856
  allCanComplete = false;
1857
+ probeError = {
1858
+ consumed: 0,
1859
+ error: completeResult.error
1860
+ };
1855
1861
  break;
1856
1862
  }
1857
1863
  }
@@ -1860,6 +1866,10 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1860
1866
  next: currentContext,
1861
1867
  consumed: []
1862
1868
  };
1869
+ if (probeError !== void 0 && options.errors?.endOfInput === void 0 && !noMatchContext.hasOptions && !noMatchContext.hasCommands && !noMatchContext.hasArguments) return {
1870
+ ...probeError,
1871
+ success: false
1872
+ };
1863
1873
  }
1864
1874
  return {
1865
1875
  ...error,
@@ -1945,11 +1955,16 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1945
1955
  trace: void 0,
1946
1956
  phase: "parse"
1947
1957
  };
1958
+ let probeError;
1948
1959
  for (const [field, parser] of parserPairs) {
1949
1960
  const fieldState = getFieldState(field, parser);
1950
1961
  const completeResult = await parser.complete(fieldState, withChildExecPath(probeExec, field));
1951
1962
  if (!completeResult.success) {
1952
1963
  allCanComplete = false;
1964
+ probeError = {
1965
+ consumed: 0,
1966
+ error: completeResult.error
1967
+ };
1953
1968
  break;
1954
1969
  }
1955
1970
  }
@@ -1958,6 +1973,10 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1958
1973
  next: currentContext,
1959
1974
  consumed: []
1960
1975
  };
1976
+ if (probeError !== void 0 && options.errors?.endOfInput === void 0 && !noMatchContext.hasOptions && !noMatchContext.hasCommands && !noMatchContext.hasArguments) return {
1977
+ ...probeError,
1978
+ success: false
1979
+ };
1961
1980
  }
1962
1981
  return {
1963
1982
  ...error,
@@ -485,6 +485,18 @@ function resolveSingleDeferred(deferred, runtime) {
485
485
  if (isPromiseLike(result)) throw new TypeError("resolveStateWithRuntime() received an async parseWithDependency() result. Use resolveStateWithRuntimeAsync() instead.");
486
486
  return result;
487
487
  }
488
+ function resolveSingleDeferredAsync(deferred, runtime) {
489
+ const isMultiDep = deferred.dependencyIds != null && deferred.dependencyIds.length > 0;
490
+ const depIds = isMultiDep ? deferred.dependencyIds : [deferred.dependencyId];
491
+ const resolution = runtime.resolveDependencies({
492
+ dependencyIds: depIds,
493
+ defaultValues: deferred.defaultValues
494
+ });
495
+ if (resolution.kind !== "resolved") return Promise.resolve(deferred.preliminaryResult);
496
+ if (resolution.usedDefaults.every((d) => d)) return Promise.resolve(deferred.preliminaryResult);
497
+ const depValue = isMultiDep ? resolution.values : resolution.values[0];
498
+ return Promise.resolve(deferred.parser[require_dependency.parseWithDependency](deferred.rawInput, depValue));
499
+ }
488
500
  /**
489
501
  * Recursively collects dependency source values from {@link DependencySourceState}
490
502
  * objects found in the state tree and registers them in the runtime.
@@ -545,21 +557,27 @@ function resolveStateWithRuntime(state, runtime) {
545
557
  return resolveDeferredInState(state, runtime);
546
558
  }
547
559
  /** Pass 2 helper: recursively replace DeferredParseState with resolved values. */
548
- function resolveDeferredInState(state, runtime, visited = /* @__PURE__ */ new WeakSet()) {
560
+ function resolveDeferredInState(state, runtime, visited = /* @__PURE__ */ new WeakSet(), deferredCache = /* @__PURE__ */ new WeakMap()) {
549
561
  if (state == null) return state;
562
+ if (require_dependency.isDeferredParseState(state)) {
563
+ const cached = deferredCache.get(state);
564
+ if (cached !== void 0) return cached;
565
+ const resolved = resolveSingleDeferred(state, runtime);
566
+ deferredCache.set(state, resolved);
567
+ return resolved;
568
+ }
569
+ if (require_dependency.isDependencySourceState(state)) return state;
550
570
  if (typeof state === "object") {
551
571
  if (visited.has(state)) return state;
552
572
  visited.add(state);
553
573
  }
554
- if (require_dependency.isDeferredParseState(state)) return resolveSingleDeferred(state, runtime);
555
- if (require_dependency.isDependencySourceState(state)) return state;
556
574
  if (Array.isArray(state)) {
557
- const resolved = state.map((item) => resolveDeferredInState(item, runtime, visited));
575
+ const resolved = state.map((item) => resolveDeferredInState(item, runtime, visited, deferredCache));
558
576
  return resolved.every((item, index) => item === state[index]) ? state : resolved;
559
577
  }
560
578
  if (isPlainObject(state)) {
561
579
  const keys = Reflect.ownKeys(state);
562
- const resolvedEntries = keys.map((key) => [key, resolveDeferredInState(state[key], runtime, visited)]);
580
+ const resolvedEntries = keys.map((key) => [key, resolveDeferredInState(state[key], runtime, visited, deferredCache)]);
563
581
  if (resolvedEntries.every(([key, value]) => value === state[key])) return state;
564
582
  const resolved = Object.create(Object.getPrototypeOf(state));
565
583
  for (const [key, value] of resolvedEntries) resolved[key] = value;
@@ -581,34 +599,28 @@ function resolveStateWithRuntimeAsync(state, runtime) {
581
599
  return resolveDeferredInStateAsync(state, runtime);
582
600
  }
583
601
  /** Async pass 2 helper. */
584
- async function resolveDeferredInStateAsync(state, runtime, visited = /* @__PURE__ */ new WeakSet()) {
602
+ async function resolveDeferredInStateAsync(state, runtime, visited = /* @__PURE__ */ new WeakSet(), deferredCache = /* @__PURE__ */ new WeakMap()) {
585
603
  if (state == null) return state;
604
+ if (require_dependency.isDeferredParseState(state)) {
605
+ const cached = deferredCache.get(state);
606
+ if (cached !== void 0) return cached;
607
+ const resolved = resolveSingleDeferredAsync(state, runtime);
608
+ deferredCache.set(state, resolved);
609
+ return resolved;
610
+ }
611
+ if (require_dependency.isDependencySourceState(state)) return state;
586
612
  if (typeof state === "object") {
587
613
  if (visited.has(state)) return state;
588
614
  visited.add(state);
589
615
  }
590
- if (require_dependency.isDeferredParseState(state)) {
591
- const deferred = state;
592
- const isMultiDep = deferred.dependencyIds != null && deferred.dependencyIds.length > 0;
593
- const depIds = isMultiDep ? deferred.dependencyIds : [deferred.dependencyId];
594
- const resolution = runtime.resolveDependencies({
595
- dependencyIds: depIds,
596
- defaultValues: deferred.defaultValues
597
- });
598
- if (resolution.kind !== "resolved") return deferred.preliminaryResult;
599
- if (resolution.usedDefaults.every((d) => d)) return deferred.preliminaryResult;
600
- const depValue = isMultiDep ? resolution.values : resolution.values[0];
601
- return Promise.resolve(deferred.parser[require_dependency.parseWithDependency](deferred.rawInput, depValue));
602
- }
603
- if (require_dependency.isDependencySourceState(state)) return state;
604
616
  if (Array.isArray(state)) {
605
- const resolved = await Promise.all(state.map((item) => resolveDeferredInStateAsync(item, runtime, visited)));
617
+ const resolved = await Promise.all(state.map((item) => resolveDeferredInStateAsync(item, runtime, visited, deferredCache)));
606
618
  return resolved.every((item, index) => item === state[index]) ? state : resolved;
607
619
  }
608
620
  if (isPlainObject(state)) {
609
621
  const keys = Reflect.ownKeys(state);
610
622
  const resolvedEntries = await Promise.all(keys.map(async (key) => {
611
- return [key, await resolveDeferredInStateAsync(state[key], runtime, visited)];
623
+ return [key, await resolveDeferredInStateAsync(state[key], runtime, visited, deferredCache)];
612
624
  }));
613
625
  if (resolvedEntries.every(([key, value]) => value === state[key])) return state;
614
626
  const resolved = Object.create(Object.getPrototypeOf(state));
@@ -485,6 +485,18 @@ function resolveSingleDeferred(deferred, runtime) {
485
485
  if (isPromiseLike(result)) throw new TypeError("resolveStateWithRuntime() received an async parseWithDependency() result. Use resolveStateWithRuntimeAsync() instead.");
486
486
  return result;
487
487
  }
488
+ function resolveSingleDeferredAsync(deferred, runtime) {
489
+ const isMultiDep = deferred.dependencyIds != null && deferred.dependencyIds.length > 0;
490
+ const depIds = isMultiDep ? deferred.dependencyIds : [deferred.dependencyId];
491
+ const resolution = runtime.resolveDependencies({
492
+ dependencyIds: depIds,
493
+ defaultValues: deferred.defaultValues
494
+ });
495
+ if (resolution.kind !== "resolved") return Promise.resolve(deferred.preliminaryResult);
496
+ if (resolution.usedDefaults.every((d) => d)) return Promise.resolve(deferred.preliminaryResult);
497
+ const depValue = isMultiDep ? resolution.values : resolution.values[0];
498
+ return Promise.resolve(deferred.parser[parseWithDependency](deferred.rawInput, depValue));
499
+ }
488
500
  /**
489
501
  * Recursively collects dependency source values from {@link DependencySourceState}
490
502
  * objects found in the state tree and registers them in the runtime.
@@ -545,21 +557,27 @@ function resolveStateWithRuntime(state, runtime) {
545
557
  return resolveDeferredInState(state, runtime);
546
558
  }
547
559
  /** Pass 2 helper: recursively replace DeferredParseState with resolved values. */
548
- function resolveDeferredInState(state, runtime, visited = /* @__PURE__ */ new WeakSet()) {
560
+ function resolveDeferredInState(state, runtime, visited = /* @__PURE__ */ new WeakSet(), deferredCache = /* @__PURE__ */ new WeakMap()) {
549
561
  if (state == null) return state;
562
+ if (isDeferredParseState(state)) {
563
+ const cached = deferredCache.get(state);
564
+ if (cached !== void 0) return cached;
565
+ const resolved = resolveSingleDeferred(state, runtime);
566
+ deferredCache.set(state, resolved);
567
+ return resolved;
568
+ }
569
+ if (isDependencySourceState(state)) return state;
550
570
  if (typeof state === "object") {
551
571
  if (visited.has(state)) return state;
552
572
  visited.add(state);
553
573
  }
554
- if (isDeferredParseState(state)) return resolveSingleDeferred(state, runtime);
555
- if (isDependencySourceState(state)) return state;
556
574
  if (Array.isArray(state)) {
557
- const resolved = state.map((item) => resolveDeferredInState(item, runtime, visited));
575
+ const resolved = state.map((item) => resolveDeferredInState(item, runtime, visited, deferredCache));
558
576
  return resolved.every((item, index) => item === state[index]) ? state : resolved;
559
577
  }
560
578
  if (isPlainObject(state)) {
561
579
  const keys = Reflect.ownKeys(state);
562
- const resolvedEntries = keys.map((key) => [key, resolveDeferredInState(state[key], runtime, visited)]);
580
+ const resolvedEntries = keys.map((key) => [key, resolveDeferredInState(state[key], runtime, visited, deferredCache)]);
563
581
  if (resolvedEntries.every(([key, value]) => value === state[key])) return state;
564
582
  const resolved = Object.create(Object.getPrototypeOf(state));
565
583
  for (const [key, value] of resolvedEntries) resolved[key] = value;
@@ -581,34 +599,28 @@ function resolveStateWithRuntimeAsync(state, runtime) {
581
599
  return resolveDeferredInStateAsync(state, runtime);
582
600
  }
583
601
  /** Async pass 2 helper. */
584
- async function resolveDeferredInStateAsync(state, runtime, visited = /* @__PURE__ */ new WeakSet()) {
602
+ async function resolveDeferredInStateAsync(state, runtime, visited = /* @__PURE__ */ new WeakSet(), deferredCache = /* @__PURE__ */ new WeakMap()) {
585
603
  if (state == null) return state;
604
+ if (isDeferredParseState(state)) {
605
+ const cached = deferredCache.get(state);
606
+ if (cached !== void 0) return cached;
607
+ const resolved = resolveSingleDeferredAsync(state, runtime);
608
+ deferredCache.set(state, resolved);
609
+ return resolved;
610
+ }
611
+ if (isDependencySourceState(state)) return state;
586
612
  if (typeof state === "object") {
587
613
  if (visited.has(state)) return state;
588
614
  visited.add(state);
589
615
  }
590
- if (isDeferredParseState(state)) {
591
- const deferred = state;
592
- const isMultiDep = deferred.dependencyIds != null && deferred.dependencyIds.length > 0;
593
- const depIds = isMultiDep ? deferred.dependencyIds : [deferred.dependencyId];
594
- const resolution = runtime.resolveDependencies({
595
- dependencyIds: depIds,
596
- defaultValues: deferred.defaultValues
597
- });
598
- if (resolution.kind !== "resolved") return deferred.preliminaryResult;
599
- if (resolution.usedDefaults.every((d) => d)) return deferred.preliminaryResult;
600
- const depValue = isMultiDep ? resolution.values : resolution.values[0];
601
- return Promise.resolve(deferred.parser[parseWithDependency](deferred.rawInput, depValue));
602
- }
603
- if (isDependencySourceState(state)) return state;
604
616
  if (Array.isArray(state)) {
605
- const resolved = await Promise.all(state.map((item) => resolveDeferredInStateAsync(item, runtime, visited)));
617
+ const resolved = await Promise.all(state.map((item) => resolveDeferredInStateAsync(item, runtime, visited, deferredCache)));
606
618
  return resolved.every((item, index) => item === state[index]) ? state : resolved;
607
619
  }
608
620
  if (isPlainObject(state)) {
609
621
  const keys = Reflect.ownKeys(state);
610
622
  const resolvedEntries = await Promise.all(keys.map(async (key) => {
611
- return [key, await resolveDeferredInStateAsync(state[key], runtime, visited)];
623
+ return [key, await resolveDeferredInStateAsync(state[key], runtime, visited, deferredCache)];
612
624
  }));
613
625
  if (resolvedEntries.every(([key, value]) => value === state[key])) return state;
614
626
  const resolved = Object.create(Object.getPrototypeOf(state));