@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.
- package/dist/constructs.cjs +20 -1
- package/dist/constructs.js +20 -1
- package/dist/dependency-runtime.cjs +34 -22
- package/dist/dependency-runtime.js +34 -22
- package/dist/facade.cjs +269 -157
- package/dist/facade.js +272 -160
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/primitives.cjs +221 -5
- package/dist/primitives.d.cts +105 -1
- package/dist/primitives.d.ts +105 -1
- package/dist/primitives.js +221 -6
- package/dist/valueparser.cjs +19 -64
- package/dist/valueparser.js +19 -64
- package/package.json +1 -1
package/dist/constructs.cjs
CHANGED
|
@@ -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,
|
package/dist/constructs.js
CHANGED
|
@@ -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));
|