@optique/core 0.10.0-dev.319 → 0.10.0-dev.324
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 +39 -52
- package/dist/constructs.js +39 -52
- package/dist/dependency.cjs +31 -0
- package/dist/dependency.d.cts +26 -2
- package/dist/dependency.d.ts +26 -2
- package/dist/dependency.js +30 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/mode-dispatch.cjs +38 -0
- package/dist/mode-dispatch.js +36 -0
- package/dist/modifiers.cjs +23 -42
- package/dist/modifiers.js +23 -42
- package/dist/parser.d.cts +2 -3
- package/dist/parser.d.ts +2 -3
- package/dist/primitives.cjs +25 -12
- package/dist/primitives.js +26 -13
- package/dist/registry-types.d.cts +38 -0
- package/dist/registry-types.d.ts +38 -0
- package/package.json +1 -1
package/dist/primitives.cjs
CHANGED
|
@@ -63,15 +63,15 @@ function* getSuggestionsWithDependency(valueParser, prefix, dependencyRegistry)
|
|
|
63
63
|
const derived = valueParser;
|
|
64
64
|
const suggestWithDep = derived[require_dependency.suggestWithDependency];
|
|
65
65
|
if (suggestWithDep && dependencyRegistry) {
|
|
66
|
-
const depIds = require_dependency.
|
|
67
|
-
const
|
|
68
|
-
const
|
|
66
|
+
const depIds = require_dependency.getDependencyIds(derived);
|
|
67
|
+
const defaultsFn = require_dependency.getDefaultValuesFunction(derived);
|
|
68
|
+
const defaults = defaultsFn?.();
|
|
69
69
|
const dependencyValues = [];
|
|
70
70
|
let hasAnyValue = false;
|
|
71
71
|
for (let i = 0; i < depIds.length; i++) {
|
|
72
72
|
const depId = depIds[i];
|
|
73
|
-
if (
|
|
74
|
-
dependencyValues.push(
|
|
73
|
+
if (dependencyRegistry.has(depId)) {
|
|
74
|
+
dependencyValues.push(dependencyRegistry.get(depId));
|
|
75
75
|
hasAnyValue = true;
|
|
76
76
|
} else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
77
77
|
else {
|
|
@@ -144,15 +144,15 @@ async function* getSuggestionsWithDependencyAsync(valueParser, prefix, dependenc
|
|
|
144
144
|
const derived = valueParser;
|
|
145
145
|
const suggestWithDep = derived[require_dependency.suggestWithDependency];
|
|
146
146
|
if (suggestWithDep && dependencyRegistry) {
|
|
147
|
-
const depIds = require_dependency.
|
|
148
|
-
const
|
|
149
|
-
const
|
|
147
|
+
const depIds = require_dependency.getDependencyIds(derived);
|
|
148
|
+
const defaultsFn = require_dependency.getDefaultValuesFunction(derived);
|
|
149
|
+
const defaults = defaultsFn?.();
|
|
150
150
|
const dependencyValues = [];
|
|
151
151
|
let hasAnyValue = false;
|
|
152
152
|
for (let i = 0; i < depIds.length; i++) {
|
|
153
153
|
const depId = depIds[i];
|
|
154
|
-
if (
|
|
155
|
-
dependencyValues.push(
|
|
154
|
+
if (dependencyRegistry.has(depId)) {
|
|
155
|
+
dependencyValues.push(dependencyRegistry.get(depId));
|
|
156
156
|
hasAnyValue = true;
|
|
157
157
|
} else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
158
158
|
else {
|
|
@@ -940,8 +940,21 @@ function command(name, parser, options = {}) {
|
|
|
940
940
|
success: false,
|
|
941
941
|
error: options.errors?.notFound ?? require_message.message`Command ${require_message.optionName(name)} was not matched.`
|
|
942
942
|
};
|
|
943
|
-
else if (state[0] === "matched")
|
|
944
|
-
|
|
943
|
+
else if (state[0] === "matched") {
|
|
944
|
+
const parseResultOrPromise = parser.parse({
|
|
945
|
+
buffer: [],
|
|
946
|
+
optionsTerminated: false,
|
|
947
|
+
usage: [],
|
|
948
|
+
state: parser.initialState
|
|
949
|
+
});
|
|
950
|
+
if (isAsync) return parseResultOrPromise.then((parseResult$1) => {
|
|
951
|
+
if (parseResult$1.success) return parser.complete(parseResult$1.next.state);
|
|
952
|
+
return parser.complete(parser.initialState);
|
|
953
|
+
});
|
|
954
|
+
const parseResult = parseResultOrPromise;
|
|
955
|
+
if (parseResult.success) return parser.complete(parseResult.next.state);
|
|
956
|
+
return parser.complete(parser.initialState);
|
|
957
|
+
} else if (state[0] === "parsing") return parser.complete(state[1]);
|
|
945
958
|
return {
|
|
946
959
|
success: false,
|
|
947
960
|
error: options.errors?.invalidState ?? require_message.message`Invalid command state during completion.`
|
package/dist/primitives.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { message, metavar, optionName, optionNames } from "./message.js";
|
|
2
|
-
import { createDeferredParseState, createDependencySourceState, createPendingDependencySourceState,
|
|
2
|
+
import { createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependencyId, getDefaultValuesFunction, getDependencyIds, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, suggestWithDependency } from "./dependency.js";
|
|
3
3
|
import { extractCommandNames, extractOptionNames } from "./usage.js";
|
|
4
4
|
import { DEFAULT_FIND_SIMILAR_OPTIONS, createErrorWithSuggestions, findSimilar } from "./suggestion.js";
|
|
5
5
|
import { isValueParser } from "./valueparser.js";
|
|
@@ -63,15 +63,15 @@ function* getSuggestionsWithDependency(valueParser, prefix, dependencyRegistry)
|
|
|
63
63
|
const derived = valueParser;
|
|
64
64
|
const suggestWithDep = derived[suggestWithDependency];
|
|
65
65
|
if (suggestWithDep && dependencyRegistry) {
|
|
66
|
-
const depIds =
|
|
67
|
-
const
|
|
68
|
-
const
|
|
66
|
+
const depIds = getDependencyIds(derived);
|
|
67
|
+
const defaultsFn = getDefaultValuesFunction(derived);
|
|
68
|
+
const defaults = defaultsFn?.();
|
|
69
69
|
const dependencyValues = [];
|
|
70
70
|
let hasAnyValue = false;
|
|
71
71
|
for (let i = 0; i < depIds.length; i++) {
|
|
72
72
|
const depId = depIds[i];
|
|
73
|
-
if (
|
|
74
|
-
dependencyValues.push(
|
|
73
|
+
if (dependencyRegistry.has(depId)) {
|
|
74
|
+
dependencyValues.push(dependencyRegistry.get(depId));
|
|
75
75
|
hasAnyValue = true;
|
|
76
76
|
} else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
77
77
|
else {
|
|
@@ -144,15 +144,15 @@ async function* getSuggestionsWithDependencyAsync(valueParser, prefix, dependenc
|
|
|
144
144
|
const derived = valueParser;
|
|
145
145
|
const suggestWithDep = derived[suggestWithDependency];
|
|
146
146
|
if (suggestWithDep && dependencyRegistry) {
|
|
147
|
-
const depIds =
|
|
148
|
-
const
|
|
149
|
-
const
|
|
147
|
+
const depIds = getDependencyIds(derived);
|
|
148
|
+
const defaultsFn = getDefaultValuesFunction(derived);
|
|
149
|
+
const defaults = defaultsFn?.();
|
|
150
150
|
const dependencyValues = [];
|
|
151
151
|
let hasAnyValue = false;
|
|
152
152
|
for (let i = 0; i < depIds.length; i++) {
|
|
153
153
|
const depId = depIds[i];
|
|
154
|
-
if (
|
|
155
|
-
dependencyValues.push(
|
|
154
|
+
if (dependencyRegistry.has(depId)) {
|
|
155
|
+
dependencyValues.push(dependencyRegistry.get(depId));
|
|
156
156
|
hasAnyValue = true;
|
|
157
157
|
} else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
158
158
|
else {
|
|
@@ -940,8 +940,21 @@ function command(name, parser, options = {}) {
|
|
|
940
940
|
success: false,
|
|
941
941
|
error: options.errors?.notFound ?? message`Command ${optionName(name)} was not matched.`
|
|
942
942
|
};
|
|
943
|
-
else if (state[0] === "matched")
|
|
944
|
-
|
|
943
|
+
else if (state[0] === "matched") {
|
|
944
|
+
const parseResultOrPromise = parser.parse({
|
|
945
|
+
buffer: [],
|
|
946
|
+
optionsTerminated: false,
|
|
947
|
+
usage: [],
|
|
948
|
+
state: parser.initialState
|
|
949
|
+
});
|
|
950
|
+
if (isAsync) return parseResultOrPromise.then((parseResult$1) => {
|
|
951
|
+
if (parseResult$1.success) return parser.complete(parseResult$1.next.state);
|
|
952
|
+
return parser.complete(parser.initialState);
|
|
953
|
+
});
|
|
954
|
+
const parseResult = parseResultOrPromise;
|
|
955
|
+
if (parseResult.success) return parser.complete(parseResult.next.state);
|
|
956
|
+
return parser.complete(parser.initialState);
|
|
957
|
+
} else if (state[0] === "parsing") return parser.complete(state[1]);
|
|
945
958
|
return {
|
|
946
959
|
success: false,
|
|
947
960
|
error: options.errors?.invalidState ?? message`Invalid command state during completion.`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/registry-types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Interface for dependency registry to break circular dependency between
|
|
4
|
+
* parser.ts and dependency.ts.
|
|
5
|
+
*
|
|
6
|
+
* This interface defines the contract for storing and retrieving resolved
|
|
7
|
+
* dependency values during parsing. The actual implementation is provided
|
|
8
|
+
* by {@link DependencyRegistry} in dependency.ts.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.10.0
|
|
11
|
+
*/
|
|
12
|
+
interface DependencyRegistryLike {
|
|
13
|
+
/**
|
|
14
|
+
* Registers a resolved dependency value.
|
|
15
|
+
* @param id The dependency ID (a unique symbol).
|
|
16
|
+
* @param value The resolved value.
|
|
17
|
+
*/
|
|
18
|
+
set<T>(id: symbol, value: T): void;
|
|
19
|
+
/**
|
|
20
|
+
* Gets a resolved dependency value.
|
|
21
|
+
* @param id The dependency ID.
|
|
22
|
+
* @returns The resolved value, or undefined if not found.
|
|
23
|
+
*/
|
|
24
|
+
get<T>(id: symbol): T | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Checks if a dependency has been resolved.
|
|
27
|
+
* @param id The dependency ID.
|
|
28
|
+
* @returns `true` if the dependency has been resolved.
|
|
29
|
+
*/
|
|
30
|
+
has(id: symbol): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a copy of the registry.
|
|
33
|
+
* @returns A new registry with the same values.
|
|
34
|
+
*/
|
|
35
|
+
clone(): DependencyRegistryLike;
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { DependencyRegistryLike };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/registry-types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Interface for dependency registry to break circular dependency between
|
|
4
|
+
* parser.ts and dependency.ts.
|
|
5
|
+
*
|
|
6
|
+
* This interface defines the contract for storing and retrieving resolved
|
|
7
|
+
* dependency values during parsing. The actual implementation is provided
|
|
8
|
+
* by {@link DependencyRegistry} in dependency.ts.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.10.0
|
|
11
|
+
*/
|
|
12
|
+
interface DependencyRegistryLike {
|
|
13
|
+
/**
|
|
14
|
+
* Registers a resolved dependency value.
|
|
15
|
+
* @param id The dependency ID (a unique symbol).
|
|
16
|
+
* @param value The resolved value.
|
|
17
|
+
*/
|
|
18
|
+
set<T>(id: symbol, value: T): void;
|
|
19
|
+
/**
|
|
20
|
+
* Gets a resolved dependency value.
|
|
21
|
+
* @param id The dependency ID.
|
|
22
|
+
* @returns The resolved value, or undefined if not found.
|
|
23
|
+
*/
|
|
24
|
+
get<T>(id: symbol): T | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Checks if a dependency has been resolved.
|
|
27
|
+
* @param id The dependency ID.
|
|
28
|
+
* @returns `true` if the dependency has been resolved.
|
|
29
|
+
*/
|
|
30
|
+
has(id: symbol): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a copy of the registry.
|
|
33
|
+
* @returns A new registry with the same values.
|
|
34
|
+
*/
|
|
35
|
+
clone(): DependencyRegistryLike;
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { DependencyRegistryLike };
|