@optique/core 1.0.0-dev.908 → 1.0.0
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/annotation-state.cjs +425 -0
- package/dist/annotation-state.d.cts +24 -0
- package/dist/annotation-state.d.ts +24 -0
- package/dist/annotation-state.js +414 -0
- package/dist/annotations.cjs +2 -248
- package/dist/annotations.d.cts +2 -137
- package/dist/annotations.d.ts +2 -137
- package/dist/annotations.js +2 -238
- package/dist/completion.cjs +611 -100
- package/dist/completion.d.cts +1 -1
- package/dist/completion.d.ts +1 -1
- package/dist/completion.js +611 -100
- package/dist/constructs.cjs +3338 -827
- package/dist/constructs.d.cts +48 -7
- package/dist/constructs.d.ts +48 -7
- package/dist/constructs.js +3338 -827
- package/dist/context.cjs +0 -23
- package/dist/context.d.cts +119 -53
- package/dist/context.d.ts +119 -53
- package/dist/context.js +0 -22
- package/dist/dependency-metadata.cjs +139 -0
- package/dist/dependency-metadata.d.cts +112 -0
- package/dist/dependency-metadata.d.ts +112 -0
- package/dist/dependency-metadata.js +138 -0
- package/dist/dependency-runtime.cjs +698 -0
- package/dist/dependency-runtime.d.cts +149 -0
- package/dist/dependency-runtime.d.ts +149 -0
- package/dist/dependency-runtime.js +687 -0
- package/dist/dependency.cjs +7 -928
- package/dist/dependency.d.cts +2 -794
- package/dist/dependency.d.ts +2 -794
- package/dist/dependency.js +2 -899
- package/dist/displaywidth.cjs +44 -0
- package/dist/displaywidth.js +43 -0
- package/dist/doc.cjs +285 -23
- package/dist/doc.d.cts +57 -2
- package/dist/doc.d.ts +57 -2
- package/dist/doc.js +283 -25
- package/dist/execution-context.cjs +56 -0
- package/dist/execution-context.js +53 -0
- package/dist/extension.cjs +87 -0
- package/dist/extension.d.cts +97 -0
- package/dist/extension.d.ts +97 -0
- package/dist/extension.js +76 -0
- package/dist/facade.cjs +718 -523
- package/dist/facade.d.cts +87 -18
- package/dist/facade.d.ts +87 -18
- package/dist/facade.js +718 -523
- package/dist/index.cjs +14 -29
- package/dist/index.d.cts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +7 -7
- package/dist/input-trace.cjs +56 -0
- package/dist/input-trace.d.cts +77 -0
- package/dist/input-trace.d.ts +77 -0
- package/dist/input-trace.js +55 -0
- package/dist/internal/annotations.cjs +316 -0
- package/dist/internal/annotations.d.cts +140 -0
- package/dist/internal/annotations.d.ts +140 -0
- package/dist/internal/annotations.js +306 -0
- package/dist/internal/dependency.cjs +984 -0
- package/dist/internal/dependency.d.cts +539 -0
- package/dist/internal/dependency.d.ts +539 -0
- package/dist/internal/dependency.js +964 -0
- package/dist/{mode-dispatch.cjs → internal/mode-dispatch.cjs} +1 -3
- package/dist/{mode-dispatch.d.cts → internal/mode-dispatch.d.cts} +3 -7
- package/dist/{mode-dispatch.d.ts → internal/mode-dispatch.d.ts} +3 -7
- package/dist/{mode-dispatch.js → internal/mode-dispatch.js} +1 -3
- package/dist/internal/parser.cjs +728 -0
- package/dist/internal/parser.d.cts +947 -0
- package/dist/internal/parser.d.ts +947 -0
- package/dist/internal/parser.js +711 -0
- package/dist/message.cjs +84 -26
- package/dist/message.d.cts +49 -9
- package/dist/message.d.ts +49 -9
- package/dist/message.js +84 -27
- package/dist/modifiers.cjs +1023 -240
- package/dist/modifiers.d.cts +42 -1
- package/dist/modifiers.d.ts +42 -1
- package/dist/modifiers.js +1023 -240
- package/dist/parser.cjs +11 -463
- package/dist/parser.d.cts +3 -537
- package/dist/parser.d.ts +3 -537
- package/dist/parser.js +2 -433
- package/dist/phase2-seed.cjs +59 -0
- package/dist/phase2-seed.js +56 -0
- package/dist/primitives.cjs +557 -208
- package/dist/primitives.d.cts +10 -14
- package/dist/primitives.d.ts +10 -14
- package/dist/primitives.js +557 -208
- package/dist/program.cjs +5 -1
- package/dist/program.d.cts +5 -3
- package/dist/program.d.ts +5 -3
- package/dist/program.js +6 -1
- package/dist/suggestion.cjs +22 -8
- package/dist/suggestion.js +22 -8
- package/dist/usage-internals.cjs +3 -2
- package/dist/usage-internals.js +4 -2
- package/dist/usage.cjs +195 -40
- package/dist/usage.d.cts +92 -11
- package/dist/usage.d.ts +92 -11
- package/dist/usage.js +194 -41
- package/dist/validate.cjs +170 -0
- package/dist/validate.js +164 -0
- package/dist/valueparser.cjs +1278 -191
- package/dist/valueparser.d.cts +330 -20
- package/dist/valueparser.d.ts +330 -20
- package/dist/valueparser.js +1277 -192
- package/package.json +9 -9
package/dist/dependency.cjs
CHANGED
|
@@ -1,929 +1,8 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_dependency = require('./internal/dependency.cjs');
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
const dependencySourceMarker = Symbol.for("@optique/core/dependency/dependencySourceMarker");
|
|
11
|
-
/**
|
|
12
|
-
* A unique symbol used to identify derived value parsers at compile time.
|
|
13
|
-
* This marker is used to distinguish {@link DerivedValueParser} from regular
|
|
14
|
-
* {@link ValueParser} instances.
|
|
15
|
-
* @since 0.10.0
|
|
16
|
-
*/
|
|
17
|
-
const derivedValueParserMarker = Symbol.for("@optique/core/dependency/derivedValueParserMarker");
|
|
18
|
-
/**
|
|
19
|
-
* A unique symbol used to store the dependency ID on value parsers.
|
|
20
|
-
* @since 0.10.0
|
|
21
|
-
*/
|
|
22
|
-
const dependencyId = Symbol.for("@optique/core/dependency/dependencyId");
|
|
23
|
-
/**
|
|
24
|
-
* A unique symbol used to store multiple dependency IDs on derived parsers
|
|
25
|
-
* that depend on multiple sources (created via {@link deriveFrom}).
|
|
26
|
-
* @since 0.10.0
|
|
27
|
-
*/
|
|
28
|
-
const dependencyIds = Symbol.for("@optique/core/dependency/dependencyIds");
|
|
29
|
-
/**
|
|
30
|
-
* A unique symbol used to store the default values function on derived parsers.
|
|
31
|
-
* This is used during partial dependency resolution to fill in missing values.
|
|
32
|
-
* @since 0.10.0
|
|
33
|
-
*/
|
|
34
|
-
const defaultValues = Symbol.for("@optique/core/dependency/defaultValues");
|
|
35
|
-
/**
|
|
36
|
-
* A unique symbol used to access the parseWithDependency method on derived parsers.
|
|
37
|
-
* @since 0.10.0
|
|
38
|
-
*/
|
|
39
|
-
const parseWithDependency = Symbol.for("@optique/core/dependency/parseWithDependency");
|
|
40
|
-
/**
|
|
41
|
-
* A unique symbol used to access the suggestWithDependency method on derived parsers.
|
|
42
|
-
* This method generates suggestions using the provided dependency values instead of defaults.
|
|
43
|
-
* @since 0.10.0
|
|
44
|
-
*/
|
|
45
|
-
const suggestWithDependency = Symbol.for("@optique/core/dependency/suggestWithDependency");
|
|
46
|
-
/**
|
|
47
|
-
* Creates a dependency source from a {@link ValueParser}.
|
|
48
|
-
*
|
|
49
|
-
* A dependency source wraps an existing value parser and enables creating
|
|
50
|
-
* derived parsers that depend on the parsed value. This is useful for
|
|
51
|
-
* scenarios where one option's valid values depend on another option's value.
|
|
52
|
-
*
|
|
53
|
-
* @template M The execution mode of the value parser.
|
|
54
|
-
* @template T The type of value the parser produces.
|
|
55
|
-
* @param parser The value parser to wrap as a dependency source.
|
|
56
|
-
* @returns A {@link DependencySource} that can be used to create
|
|
57
|
-
* derived parsers.
|
|
58
|
-
* @example
|
|
59
|
-
* ```typescript
|
|
60
|
-
* import { dependency } from "@optique/core/dependency";
|
|
61
|
-
* import { string } from "@optique/core/valueparser";
|
|
62
|
-
*
|
|
63
|
-
* // Create a dependency source for a directory path
|
|
64
|
-
* const cwdParser = dependency(string({ metavar: "DIR" }));
|
|
65
|
-
*
|
|
66
|
-
* // Create a derived parser that depends on the directory
|
|
67
|
-
* const branchParser = cwdParser.derive({
|
|
68
|
-
* metavar: "BRANCH",
|
|
69
|
-
* mode: "sync",
|
|
70
|
-
* factory: (dir) => gitBranch({ dir }),
|
|
71
|
-
* defaultValue: () => process.cwd(),
|
|
72
|
-
* });
|
|
73
|
-
* ```
|
|
74
|
-
* @since 0.10.0
|
|
75
|
-
*/
|
|
76
|
-
function dependency(parser) {
|
|
77
|
-
const id = Symbol();
|
|
78
|
-
const result = {
|
|
79
|
-
...parser,
|
|
80
|
-
[dependencySourceMarker]: true,
|
|
81
|
-
[dependencyId]: id,
|
|
82
|
-
derive(options) {
|
|
83
|
-
if (options.mode !== "sync" && options.mode !== "async") throw new TypeError("derive() requires an explicit mode field (\"sync\" or \"async\").");
|
|
84
|
-
return createDerivedValueParser(id, parser, options, options.mode);
|
|
85
|
-
},
|
|
86
|
-
deriveSync(options) {
|
|
87
|
-
if (parser.$mode === "async") return createAsyncDerivedParserFromSyncFactory(id, options);
|
|
88
|
-
return createSyncDerivedParser(id, options);
|
|
89
|
-
},
|
|
90
|
-
deriveAsync(options) {
|
|
91
|
-
return createAsyncDerivedParserFromAsyncFactory(id, options);
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
return result;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Checks if a value parser is a {@link DependencySource}.
|
|
98
|
-
*
|
|
99
|
-
* @param parser The value parser to check.
|
|
100
|
-
* @returns `true` if the parser is a dependency source, `false` otherwise.
|
|
101
|
-
* @since 0.10.0
|
|
102
|
-
*/
|
|
103
|
-
function isDependencySource(parser) {
|
|
104
|
-
return dependencySourceMarker in parser && parser[dependencySourceMarker] === true;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Checks if a value parser is a {@link DerivedValueParser}.
|
|
108
|
-
*
|
|
109
|
-
* @param parser The value parser to check.
|
|
110
|
-
* @returns `true` if the parser is a derived value parser, `false` otherwise.
|
|
111
|
-
* @since 0.10.0
|
|
112
|
-
*/
|
|
113
|
-
function isDerivedValueParser(parser) {
|
|
114
|
-
return derivedValueParserMarker in parser && parser[derivedValueParserMarker] === true;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Creates a derived value parser from multiple dependency sources.
|
|
118
|
-
*
|
|
119
|
-
* This function allows creating a parser whose behavior depends on
|
|
120
|
-
* multiple other parsers' values. This is useful for scenarios where
|
|
121
|
-
* an option's valid values depend on a combination of other options.
|
|
122
|
-
*
|
|
123
|
-
* @template Deps A tuple of DependencySource types.
|
|
124
|
-
* @template T The type of value the derived parser produces.
|
|
125
|
-
* @param options Configuration for the derived parser.
|
|
126
|
-
* @returns A {@link DerivedValueParser} that depends on the given sources.
|
|
127
|
-
* @example
|
|
128
|
-
* ```typescript
|
|
129
|
-
* import { dependency, deriveFrom } from "@optique/core/dependency";
|
|
130
|
-
* import { string, choice } from "@optique/core/valueparser";
|
|
131
|
-
*
|
|
132
|
-
* const dirParser = dependency(string({ metavar: "DIR" }));
|
|
133
|
-
* const modeParser = dependency(choice(["dev", "prod"]));
|
|
134
|
-
*
|
|
135
|
-
* const configParser = deriveFrom({
|
|
136
|
-
* metavar: "CONFIG",
|
|
137
|
-
* mode: "sync",
|
|
138
|
-
* dependencies: [dirParser, modeParser] as const,
|
|
139
|
-
* factory: (dir, mode) =>
|
|
140
|
-
* choice(mode === "dev"
|
|
141
|
-
* ? [`${dir}/dev.json`, `${dir}/dev.yaml`]
|
|
142
|
-
* : [`${dir}/prod.json`, `${dir}/prod.yaml`]),
|
|
143
|
-
* defaultValues: () => ["/config", "dev"],
|
|
144
|
-
* });
|
|
145
|
-
* ```
|
|
146
|
-
* @throws {TypeError} If the `mode` field is missing or invalid.
|
|
147
|
-
* @since 0.10.0
|
|
148
|
-
*/
|
|
149
|
-
function deriveFrom(options) {
|
|
150
|
-
if (options.mode !== "sync" && options.mode !== "async") throw new TypeError("deriveFrom() requires an explicit mode field (\"sync\" or \"async\").");
|
|
151
|
-
const depsAsync = options.dependencies.some((dep) => dep.$mode === "async");
|
|
152
|
-
const sourceId = options.dependencies.length > 0 ? options.dependencies[0][dependencyId] : Symbol();
|
|
153
|
-
const factoryReturnsAsync = options.mode === "async";
|
|
154
|
-
const isAsync = depsAsync || factoryReturnsAsync;
|
|
155
|
-
if (isAsync) {
|
|
156
|
-
if (factoryReturnsAsync) return createAsyncDerivedFromParserFromAsyncFactory(sourceId, options);
|
|
157
|
-
return createAsyncDerivedFromParserFromSyncFactory(sourceId, options);
|
|
158
|
-
}
|
|
159
|
-
return createSyncDerivedFromParser(sourceId, options);
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Creates a derived value parser from multiple dependency sources
|
|
163
|
-
* with a synchronous factory.
|
|
164
|
-
*
|
|
165
|
-
* This function allows creating a parser whose behavior depends on
|
|
166
|
-
* multiple other parsers' values. The factory explicitly returns
|
|
167
|
-
* a sync parser.
|
|
168
|
-
*
|
|
169
|
-
* @template Deps A tuple of DependencySource types.
|
|
170
|
-
* @template T The type of value the derived parser produces.
|
|
171
|
-
* @param options Configuration for the derived parser with sync factory.
|
|
172
|
-
* @returns A {@link DerivedValueParser} that depends on the given sources.
|
|
173
|
-
* @since 0.10.0
|
|
174
|
-
*/
|
|
175
|
-
function deriveFromSync(options) {
|
|
176
|
-
const depsAsync = options.dependencies.some((dep) => dep.$mode === "async");
|
|
177
|
-
const sourceId = options.dependencies.length > 0 ? options.dependencies[0][dependencyId] : Symbol();
|
|
178
|
-
if (depsAsync) return createAsyncDerivedFromParserFromSyncFactory(sourceId, options);
|
|
179
|
-
return createSyncDerivedFromParser(sourceId, options);
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Creates a derived value parser from multiple dependency sources
|
|
183
|
-
* with an asynchronous factory.
|
|
184
|
-
*
|
|
185
|
-
* This function allows creating a parser whose behavior depends on
|
|
186
|
-
* multiple other parsers' values. The factory explicitly returns
|
|
187
|
-
* an async parser.
|
|
188
|
-
*
|
|
189
|
-
* @template Deps A tuple of DependencySource types.
|
|
190
|
-
* @template T The type of value the derived parser produces.
|
|
191
|
-
* @param options Configuration for the derived parser with async factory.
|
|
192
|
-
* @returns A {@link DerivedValueParser} that depends on the given sources.
|
|
193
|
-
* @since 0.10.0
|
|
194
|
-
*/
|
|
195
|
-
function deriveFromAsync(options) {
|
|
196
|
-
const sourceId = options.dependencies.length > 0 ? options.dependencies[0][dependencyId] : Symbol();
|
|
197
|
-
return createAsyncDerivedFromParserFromAsyncFactory(sourceId, options);
|
|
198
|
-
}
|
|
199
|
-
function isAsyncModeParser(parser) {
|
|
200
|
-
return parser.$mode === "async";
|
|
201
|
-
}
|
|
202
|
-
function createSyncDerivedFromParser(sourceId, options) {
|
|
203
|
-
const alldependencyIds = options.dependencies.map((dep) => dep[dependencyId]);
|
|
204
|
-
return {
|
|
205
|
-
$mode: "sync",
|
|
206
|
-
metavar: options.metavar,
|
|
207
|
-
[derivedValueParserMarker]: true,
|
|
208
|
-
[dependencyId]: sourceId,
|
|
209
|
-
[dependencyIds]: alldependencyIds,
|
|
210
|
-
[defaultValues]: options.defaultValues,
|
|
211
|
-
parse(input) {
|
|
212
|
-
let derivedParser;
|
|
213
|
-
try {
|
|
214
|
-
const sourceValues = options.defaultValues();
|
|
215
|
-
derivedParser = options.factory(...sourceValues);
|
|
216
|
-
} catch (e) {
|
|
217
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
218
|
-
return {
|
|
219
|
-
success: false,
|
|
220
|
-
error: require_message.message`Derived parser error: ${msg}`
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
if (isAsyncModeParser(derivedParser)) return {
|
|
224
|
-
success: false,
|
|
225
|
-
error: require_message.message`Factory returned an async parser where a sync parser is required.`
|
|
226
|
-
};
|
|
227
|
-
return derivedParser.parse(input);
|
|
228
|
-
},
|
|
229
|
-
[parseWithDependency](input, dependencyValue) {
|
|
230
|
-
let derivedParser;
|
|
231
|
-
try {
|
|
232
|
-
derivedParser = options.factory(...dependencyValue);
|
|
233
|
-
} catch (e) {
|
|
234
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
235
|
-
return {
|
|
236
|
-
success: false,
|
|
237
|
-
error: require_message.message`Factory error: ${msg}`
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
if (isAsyncModeParser(derivedParser)) return {
|
|
241
|
-
success: false,
|
|
242
|
-
error: require_message.message`Factory returned an async parser where a sync parser is required.`
|
|
243
|
-
};
|
|
244
|
-
return derivedParser.parse(input);
|
|
245
|
-
},
|
|
246
|
-
format(value) {
|
|
247
|
-
let derivedParser;
|
|
248
|
-
try {
|
|
249
|
-
const sourceValues = options.defaultValues();
|
|
250
|
-
derivedParser = options.factory(...sourceValues);
|
|
251
|
-
} catch {
|
|
252
|
-
return String(value);
|
|
253
|
-
}
|
|
254
|
-
return derivedParser.format(value);
|
|
255
|
-
},
|
|
256
|
-
*suggest(prefix) {
|
|
257
|
-
let derivedParser;
|
|
258
|
-
try {
|
|
259
|
-
const sourceValues = options.defaultValues();
|
|
260
|
-
derivedParser = options.factory(...sourceValues);
|
|
261
|
-
} catch {
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
if (isAsyncModeParser(derivedParser) || !derivedParser.suggest) return;
|
|
265
|
-
yield* derivedParser.suggest(prefix);
|
|
266
|
-
},
|
|
267
|
-
*[suggestWithDependency](prefix, dependencyValue) {
|
|
268
|
-
let derivedParser;
|
|
269
|
-
try {
|
|
270
|
-
derivedParser = options.factory(...dependencyValue);
|
|
271
|
-
} catch {
|
|
272
|
-
try {
|
|
273
|
-
const sourceValues = options.defaultValues();
|
|
274
|
-
derivedParser = options.factory(...sourceValues);
|
|
275
|
-
} catch {
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
if (isAsyncModeParser(derivedParser) || !derivedParser.suggest) return;
|
|
280
|
-
yield* derivedParser.suggest(prefix);
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Creates an async derived parser from multiple dependencies when the
|
|
286
|
-
* factory returns an async parser.
|
|
287
|
-
*/
|
|
288
|
-
function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
|
|
289
|
-
const alldependencyIds = options.dependencies.map((dep) => dep[dependencyId]);
|
|
290
|
-
return {
|
|
291
|
-
$mode: "async",
|
|
292
|
-
metavar: options.metavar,
|
|
293
|
-
[derivedValueParserMarker]: true,
|
|
294
|
-
[dependencyId]: sourceId,
|
|
295
|
-
[dependencyIds]: alldependencyIds,
|
|
296
|
-
[defaultValues]: options.defaultValues,
|
|
297
|
-
parse(input) {
|
|
298
|
-
let derivedParser;
|
|
299
|
-
try {
|
|
300
|
-
const sourceValues = options.defaultValues();
|
|
301
|
-
derivedParser = options.factory(...sourceValues);
|
|
302
|
-
} catch (e) {
|
|
303
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
304
|
-
return Promise.resolve({
|
|
305
|
-
success: false,
|
|
306
|
-
error: require_message.message`Derived parser error: ${msg}`
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
return Promise.resolve(derivedParser.parse(input));
|
|
310
|
-
},
|
|
311
|
-
[parseWithDependency](input, dependencyValue) {
|
|
312
|
-
let derivedParser;
|
|
313
|
-
try {
|
|
314
|
-
derivedParser = options.factory(...dependencyValue);
|
|
315
|
-
} catch (e) {
|
|
316
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
317
|
-
return Promise.resolve({
|
|
318
|
-
success: false,
|
|
319
|
-
error: require_message.message`Factory error: ${msg}`
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
return Promise.resolve(derivedParser.parse(input));
|
|
323
|
-
},
|
|
324
|
-
format(value) {
|
|
325
|
-
let derivedParser;
|
|
326
|
-
try {
|
|
327
|
-
const sourceValues = options.defaultValues();
|
|
328
|
-
derivedParser = options.factory(...sourceValues);
|
|
329
|
-
} catch {
|
|
330
|
-
return String(value);
|
|
331
|
-
}
|
|
332
|
-
return derivedParser.format(value);
|
|
333
|
-
},
|
|
334
|
-
async *suggest(prefix) {
|
|
335
|
-
let derivedParser;
|
|
336
|
-
try {
|
|
337
|
-
const sourceValues = options.defaultValues();
|
|
338
|
-
derivedParser = options.factory(...sourceValues);
|
|
339
|
-
} catch {
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
343
|
-
},
|
|
344
|
-
async *[suggestWithDependency](prefix, dependencyValue) {
|
|
345
|
-
let derivedParser;
|
|
346
|
-
try {
|
|
347
|
-
derivedParser = options.factory(...dependencyValue);
|
|
348
|
-
} catch {
|
|
349
|
-
try {
|
|
350
|
-
const sourceValues = options.defaultValues();
|
|
351
|
-
derivedParser = options.factory(...sourceValues);
|
|
352
|
-
} catch {
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
357
|
-
}
|
|
358
|
-
};
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* Creates an async derived parser from multiple dependencies when the
|
|
362
|
-
* sources are async but the factory returns a sync parser.
|
|
363
|
-
*/
|
|
364
|
-
function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
|
|
365
|
-
const alldependencyIds = options.dependencies.map((dep) => dep[dependencyId]);
|
|
366
|
-
return {
|
|
367
|
-
$mode: "async",
|
|
368
|
-
metavar: options.metavar,
|
|
369
|
-
[derivedValueParserMarker]: true,
|
|
370
|
-
[dependencyId]: sourceId,
|
|
371
|
-
[dependencyIds]: alldependencyIds,
|
|
372
|
-
[defaultValues]: options.defaultValues,
|
|
373
|
-
parse(input) {
|
|
374
|
-
let derivedParser;
|
|
375
|
-
try {
|
|
376
|
-
const sourceValues = options.defaultValues();
|
|
377
|
-
derivedParser = options.factory(...sourceValues);
|
|
378
|
-
} catch (e) {
|
|
379
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
380
|
-
return Promise.resolve({
|
|
381
|
-
success: false,
|
|
382
|
-
error: require_message.message`Derived parser error: ${msg}`
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
return Promise.resolve(derivedParser.parse(input));
|
|
386
|
-
},
|
|
387
|
-
[parseWithDependency](input, dependencyValue) {
|
|
388
|
-
let derivedParser;
|
|
389
|
-
try {
|
|
390
|
-
derivedParser = options.factory(...dependencyValue);
|
|
391
|
-
} catch (e) {
|
|
392
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
393
|
-
return Promise.resolve({
|
|
394
|
-
success: false,
|
|
395
|
-
error: require_message.message`Factory error: ${msg}`
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
return Promise.resolve(derivedParser.parse(input));
|
|
399
|
-
},
|
|
400
|
-
format(value) {
|
|
401
|
-
let derivedParser;
|
|
402
|
-
try {
|
|
403
|
-
const sourceValues = options.defaultValues();
|
|
404
|
-
derivedParser = options.factory(...sourceValues);
|
|
405
|
-
} catch {
|
|
406
|
-
return String(value);
|
|
407
|
-
}
|
|
408
|
-
return derivedParser.format(value);
|
|
409
|
-
},
|
|
410
|
-
async *suggest(prefix) {
|
|
411
|
-
let derivedParser;
|
|
412
|
-
try {
|
|
413
|
-
const sourceValues = options.defaultValues();
|
|
414
|
-
derivedParser = options.factory(...sourceValues);
|
|
415
|
-
} catch {
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
419
|
-
},
|
|
420
|
-
*[suggestWithDependency](prefix, dependencyValue) {
|
|
421
|
-
let derivedParser;
|
|
422
|
-
try {
|
|
423
|
-
derivedParser = options.factory(...dependencyValue);
|
|
424
|
-
} catch {
|
|
425
|
-
try {
|
|
426
|
-
const sourceValues = options.defaultValues();
|
|
427
|
-
derivedParser = options.factory(...sourceValues);
|
|
428
|
-
} catch {
|
|
429
|
-
return;
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
433
|
-
}
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
function createDerivedValueParser(sourceId, sourceParser, options, factoryMode) {
|
|
437
|
-
const factoryReturnsAsync = factoryMode === "async";
|
|
438
|
-
const isAsync = sourceParser.$mode === "async" || factoryReturnsAsync;
|
|
439
|
-
if (isAsync) {
|
|
440
|
-
if (factoryReturnsAsync) return createAsyncDerivedParserFromAsyncFactory(sourceId, options);
|
|
441
|
-
return createAsyncDerivedParserFromSyncFactory(sourceId, options);
|
|
442
|
-
}
|
|
443
|
-
return createSyncDerivedParser(sourceId, options);
|
|
444
|
-
}
|
|
445
|
-
function createSyncDerivedParser(sourceId, options) {
|
|
446
|
-
return {
|
|
447
|
-
$mode: "sync",
|
|
448
|
-
metavar: options.metavar,
|
|
449
|
-
[derivedValueParserMarker]: true,
|
|
450
|
-
[dependencyId]: sourceId,
|
|
451
|
-
parse(input) {
|
|
452
|
-
let derivedParser;
|
|
453
|
-
try {
|
|
454
|
-
const sourceValue = options.defaultValue();
|
|
455
|
-
derivedParser = options.factory(sourceValue);
|
|
456
|
-
} catch (e) {
|
|
457
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
458
|
-
return {
|
|
459
|
-
success: false,
|
|
460
|
-
error: require_message.message`Derived parser error: ${msg}`
|
|
461
|
-
};
|
|
462
|
-
}
|
|
463
|
-
if (isAsyncModeParser(derivedParser)) return {
|
|
464
|
-
success: false,
|
|
465
|
-
error: require_message.message`Factory returned an async parser where a sync parser is required.`
|
|
466
|
-
};
|
|
467
|
-
return derivedParser.parse(input);
|
|
468
|
-
},
|
|
469
|
-
[parseWithDependency](input, dependencyValue) {
|
|
470
|
-
let derivedParser;
|
|
471
|
-
try {
|
|
472
|
-
derivedParser = options.factory(dependencyValue);
|
|
473
|
-
} catch (e) {
|
|
474
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
475
|
-
return {
|
|
476
|
-
success: false,
|
|
477
|
-
error: require_message.message`Factory error: ${msg}`
|
|
478
|
-
};
|
|
479
|
-
}
|
|
480
|
-
if (isAsyncModeParser(derivedParser)) return {
|
|
481
|
-
success: false,
|
|
482
|
-
error: require_message.message`Factory returned an async parser where a sync parser is required.`
|
|
483
|
-
};
|
|
484
|
-
return derivedParser.parse(input);
|
|
485
|
-
},
|
|
486
|
-
format(value) {
|
|
487
|
-
let derivedParser;
|
|
488
|
-
try {
|
|
489
|
-
const sourceValue = options.defaultValue();
|
|
490
|
-
derivedParser = options.factory(sourceValue);
|
|
491
|
-
} catch {
|
|
492
|
-
return String(value);
|
|
493
|
-
}
|
|
494
|
-
return derivedParser.format(value);
|
|
495
|
-
},
|
|
496
|
-
*suggest(prefix) {
|
|
497
|
-
let derivedParser;
|
|
498
|
-
try {
|
|
499
|
-
const sourceValue = options.defaultValue();
|
|
500
|
-
derivedParser = options.factory(sourceValue);
|
|
501
|
-
} catch {
|
|
502
|
-
return;
|
|
503
|
-
}
|
|
504
|
-
if (isAsyncModeParser(derivedParser) || !derivedParser.suggest) return;
|
|
505
|
-
yield* derivedParser.suggest(prefix);
|
|
506
|
-
},
|
|
507
|
-
*[suggestWithDependency](prefix, dependencyValue) {
|
|
508
|
-
let derivedParser;
|
|
509
|
-
try {
|
|
510
|
-
derivedParser = options.factory(dependencyValue);
|
|
511
|
-
} catch {
|
|
512
|
-
try {
|
|
513
|
-
derivedParser = options.factory(options.defaultValue());
|
|
514
|
-
} catch {
|
|
515
|
-
return;
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
if (isAsyncModeParser(derivedParser) || !derivedParser.suggest) return;
|
|
519
|
-
yield* derivedParser.suggest(prefix);
|
|
520
|
-
}
|
|
521
|
-
};
|
|
522
|
-
}
|
|
523
|
-
/**
|
|
524
|
-
* Creates an async derived parser when the factory returns an async parser.
|
|
525
|
-
* The parse result is awaited since the factory returns an async parser.
|
|
526
|
-
*/
|
|
527
|
-
function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
|
|
528
|
-
return {
|
|
529
|
-
$mode: "async",
|
|
530
|
-
metavar: options.metavar,
|
|
531
|
-
[derivedValueParserMarker]: true,
|
|
532
|
-
[dependencyId]: sourceId,
|
|
533
|
-
parse(input) {
|
|
534
|
-
let derivedParser;
|
|
535
|
-
try {
|
|
536
|
-
const sourceValue = options.defaultValue();
|
|
537
|
-
derivedParser = options.factory(sourceValue);
|
|
538
|
-
} catch (e) {
|
|
539
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
540
|
-
return Promise.resolve({
|
|
541
|
-
success: false,
|
|
542
|
-
error: require_message.message`Derived parser error: ${msg}`
|
|
543
|
-
});
|
|
544
|
-
}
|
|
545
|
-
return Promise.resolve(derivedParser.parse(input));
|
|
546
|
-
},
|
|
547
|
-
[parseWithDependency](input, dependencyValue) {
|
|
548
|
-
let derivedParser;
|
|
549
|
-
try {
|
|
550
|
-
derivedParser = options.factory(dependencyValue);
|
|
551
|
-
} catch (e) {
|
|
552
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
553
|
-
return Promise.resolve({
|
|
554
|
-
success: false,
|
|
555
|
-
error: require_message.message`Factory error: ${msg}`
|
|
556
|
-
});
|
|
557
|
-
}
|
|
558
|
-
return Promise.resolve(derivedParser.parse(input));
|
|
559
|
-
},
|
|
560
|
-
format(value) {
|
|
561
|
-
let derivedParser;
|
|
562
|
-
try {
|
|
563
|
-
const sourceValue = options.defaultValue();
|
|
564
|
-
derivedParser = options.factory(sourceValue);
|
|
565
|
-
} catch {
|
|
566
|
-
return String(value);
|
|
567
|
-
}
|
|
568
|
-
return derivedParser.format(value);
|
|
569
|
-
},
|
|
570
|
-
async *suggest(prefix) {
|
|
571
|
-
let derivedParser;
|
|
572
|
-
try {
|
|
573
|
-
const sourceValue = options.defaultValue();
|
|
574
|
-
derivedParser = options.factory(sourceValue);
|
|
575
|
-
} catch {
|
|
576
|
-
return;
|
|
577
|
-
}
|
|
578
|
-
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
579
|
-
},
|
|
580
|
-
async *[suggestWithDependency](prefix, dependencyValue) {
|
|
581
|
-
let derivedParser;
|
|
582
|
-
try {
|
|
583
|
-
derivedParser = options.factory(dependencyValue);
|
|
584
|
-
} catch {
|
|
585
|
-
try {
|
|
586
|
-
derivedParser = options.factory(options.defaultValue());
|
|
587
|
-
} catch {
|
|
588
|
-
return;
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
if (derivedParser.suggest) for await (const suggestion of derivedParser.suggest(prefix)) yield suggestion;
|
|
592
|
-
}
|
|
593
|
-
};
|
|
594
|
-
}
|
|
595
|
-
/**
|
|
596
|
-
* Creates an async derived parser when the source is async but the factory
|
|
597
|
-
* returns a sync parser. The sync result is wrapped in a Promise.
|
|
598
|
-
*/
|
|
599
|
-
function createAsyncDerivedParserFromSyncFactory(sourceId, options) {
|
|
600
|
-
return {
|
|
601
|
-
$mode: "async",
|
|
602
|
-
metavar: options.metavar,
|
|
603
|
-
[derivedValueParserMarker]: true,
|
|
604
|
-
[dependencyId]: sourceId,
|
|
605
|
-
parse(input) {
|
|
606
|
-
let derivedParser;
|
|
607
|
-
try {
|
|
608
|
-
const sourceValue = options.defaultValue();
|
|
609
|
-
derivedParser = options.factory(sourceValue);
|
|
610
|
-
} catch (e) {
|
|
611
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
612
|
-
return Promise.resolve({
|
|
613
|
-
success: false,
|
|
614
|
-
error: require_message.message`Derived parser error: ${msg}`
|
|
615
|
-
});
|
|
616
|
-
}
|
|
617
|
-
return Promise.resolve(derivedParser.parse(input));
|
|
618
|
-
},
|
|
619
|
-
[parseWithDependency](input, dependencyValue) {
|
|
620
|
-
let derivedParser;
|
|
621
|
-
try {
|
|
622
|
-
derivedParser = options.factory(dependencyValue);
|
|
623
|
-
} catch (e) {
|
|
624
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
625
|
-
return Promise.resolve({
|
|
626
|
-
success: false,
|
|
627
|
-
error: require_message.message`Factory error: ${msg}`
|
|
628
|
-
});
|
|
629
|
-
}
|
|
630
|
-
return Promise.resolve(derivedParser.parse(input));
|
|
631
|
-
},
|
|
632
|
-
format(value) {
|
|
633
|
-
let derivedParser;
|
|
634
|
-
try {
|
|
635
|
-
const sourceValue = options.defaultValue();
|
|
636
|
-
derivedParser = options.factory(sourceValue);
|
|
637
|
-
} catch {
|
|
638
|
-
return String(value);
|
|
639
|
-
}
|
|
640
|
-
return derivedParser.format(value);
|
|
641
|
-
},
|
|
642
|
-
async *suggest(prefix) {
|
|
643
|
-
let derivedParser;
|
|
644
|
-
try {
|
|
645
|
-
const sourceValue = options.defaultValue();
|
|
646
|
-
derivedParser = options.factory(sourceValue);
|
|
647
|
-
} catch {
|
|
648
|
-
return;
|
|
649
|
-
}
|
|
650
|
-
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
651
|
-
},
|
|
652
|
-
*[suggestWithDependency](prefix, dependencyValue) {
|
|
653
|
-
let derivedParser;
|
|
654
|
-
try {
|
|
655
|
-
derivedParser = options.factory(dependencyValue);
|
|
656
|
-
} catch {
|
|
657
|
-
try {
|
|
658
|
-
derivedParser = options.factory(options.defaultValue());
|
|
659
|
-
} catch {
|
|
660
|
-
return;
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
if (derivedParser.suggest) yield* derivedParser.suggest(prefix);
|
|
664
|
-
}
|
|
665
|
-
};
|
|
666
|
-
}
|
|
667
|
-
/**
|
|
668
|
-
* A unique symbol used to identify deferred parse states.
|
|
669
|
-
* @since 0.10.0
|
|
670
|
-
*/
|
|
671
|
-
const deferredParseMarker = Symbol.for("@optique/core/dependency/deferredParseMarker");
|
|
672
|
-
/**
|
|
673
|
-
* Checks if a value is a {@link DeferredParseState}.
|
|
674
|
-
*
|
|
675
|
-
* @param value The value to check.
|
|
676
|
-
* @returns `true` if the value is a deferred parse state, `false` otherwise.
|
|
677
|
-
* @since 0.10.0
|
|
678
|
-
*/
|
|
679
|
-
function isDeferredParseState(value) {
|
|
680
|
-
return typeof value === "object" && value !== null && deferredParseMarker in value && value[deferredParseMarker] === true;
|
|
681
|
-
}
|
|
682
|
-
/**
|
|
683
|
-
* Gets all dependency IDs from a derived parser.
|
|
684
|
-
* If the parser was created with `deriveFrom` (multiple dependencies),
|
|
685
|
-
* returns the array of dependency IDs. Otherwise, returns an array
|
|
686
|
-
* containing the single dependency ID.
|
|
687
|
-
*
|
|
688
|
-
* @param parser The derived value parser to get dependency IDs from.
|
|
689
|
-
* @returns An array of dependency ID symbols.
|
|
690
|
-
* @internal
|
|
691
|
-
* @since 0.10.0
|
|
692
|
-
*/
|
|
693
|
-
function getDependencyIds(parser) {
|
|
694
|
-
if (dependencyIds in parser) return parser[dependencyIds];
|
|
695
|
-
return [parser[dependencyId]];
|
|
696
|
-
}
|
|
697
|
-
/**
|
|
698
|
-
* Gets the default values function from a derived parser, if present.
|
|
699
|
-
* This function is available on parsers created with `deriveFrom` that
|
|
700
|
-
* specify default values for their dependencies.
|
|
701
|
-
*
|
|
702
|
-
* @param parser The derived value parser to get the default values function from.
|
|
703
|
-
* @returns The default values function, or undefined if not available.
|
|
704
|
-
* @internal
|
|
705
|
-
* @since 0.10.0
|
|
706
|
-
*/
|
|
707
|
-
function getDefaultValuesFunction(parser) {
|
|
708
|
-
if (defaultValues in parser) return parser[defaultValues];
|
|
709
|
-
return void 0;
|
|
710
|
-
}
|
|
711
|
-
/**
|
|
712
|
-
* Creates a deferred parse state for a DerivedValueParser.
|
|
713
|
-
*
|
|
714
|
-
* @template T The type of value the parser will produce.
|
|
715
|
-
* @template S The type of the source dependency value.
|
|
716
|
-
* @param rawInput The raw input string to be parsed.
|
|
717
|
-
* @param parser The DerivedValueParser that will parse the input.
|
|
718
|
-
* @param preliminaryResult The parse result using default dependency value.
|
|
719
|
-
* @returns A DeferredParseState object.
|
|
720
|
-
* @since 0.10.0
|
|
721
|
-
*/
|
|
722
|
-
function createDeferredParseState(rawInput, parser, preliminaryResult) {
|
|
723
|
-
const multipleIds = dependencyIds in parser ? parser[dependencyIds] : void 0;
|
|
724
|
-
const defaultValuesFn = defaultValues in parser ? parser[defaultValues] : void 0;
|
|
725
|
-
const defaultVals = defaultValuesFn ? defaultValuesFn() : void 0;
|
|
726
|
-
return {
|
|
727
|
-
[deferredParseMarker]: true,
|
|
728
|
-
rawInput,
|
|
729
|
-
parser,
|
|
730
|
-
dependencyId: parser[dependencyId],
|
|
731
|
-
dependencyIds: multipleIds,
|
|
732
|
-
defaultValues: defaultVals,
|
|
733
|
-
preliminaryResult
|
|
734
|
-
};
|
|
735
|
-
}
|
|
736
|
-
/**
|
|
737
|
-
* A unique symbol used to identify dependency source parse states.
|
|
738
|
-
* @since 0.10.0
|
|
739
|
-
*/
|
|
740
|
-
const dependencySourceStateMarker = Symbol.for("@optique/core/dependency/dependencySourceStateMarker");
|
|
741
|
-
/**
|
|
742
|
-
* Checks if a value is a {@link DependencySourceState}.
|
|
743
|
-
*
|
|
744
|
-
* @param value The value to check.
|
|
745
|
-
* @returns `true` if the value is a dependency source state, `false` otherwise.
|
|
746
|
-
* @since 0.10.0
|
|
747
|
-
*/
|
|
748
|
-
function isDependencySourceState(value) {
|
|
749
|
-
return typeof value === "object" && value !== null && dependencySourceStateMarker in value && value[dependencySourceStateMarker] === true;
|
|
750
|
-
}
|
|
751
|
-
/**
|
|
752
|
-
* Creates a dependency source state from a parse result.
|
|
753
|
-
*
|
|
754
|
-
* @template T The type of value the state contains.
|
|
755
|
-
* @param result The parse result.
|
|
756
|
-
* @param depId The dependency ID.
|
|
757
|
-
* @returns A DependencySourceState object.
|
|
758
|
-
* @since 0.10.0
|
|
759
|
-
*/
|
|
760
|
-
function createDependencySourceState(result, depId) {
|
|
761
|
-
return {
|
|
762
|
-
[dependencySourceStateMarker]: true,
|
|
763
|
-
[dependencyId]: depId,
|
|
764
|
-
result
|
|
765
|
-
};
|
|
766
|
-
}
|
|
767
|
-
/**
|
|
768
|
-
* A unique symbol used to identify pending dependency source states.
|
|
769
|
-
* @since 0.10.0
|
|
770
|
-
*/
|
|
771
|
-
const pendingDependencySourceStateMarker = Symbol.for("@optique/core/dependency/pendingDependencySourceStateMarker");
|
|
772
|
-
/**
|
|
773
|
-
* Checks if a value is a {@link PendingDependencySourceState}.
|
|
774
|
-
*
|
|
775
|
-
* @param value The value to check.
|
|
776
|
-
* @returns `true` if the value is a pending dependency source state.
|
|
777
|
-
* @since 0.10.0
|
|
778
|
-
*/
|
|
779
|
-
function isPendingDependencySourceState(value) {
|
|
780
|
-
return typeof value === "object" && value !== null && pendingDependencySourceStateMarker in value && value[pendingDependencySourceStateMarker] === true;
|
|
781
|
-
}
|
|
782
|
-
/**
|
|
783
|
-
* Creates a pending dependency source state.
|
|
784
|
-
*
|
|
785
|
-
* @param depId The dependency ID.
|
|
786
|
-
* @returns A PendingDependencySourceState object.
|
|
787
|
-
* @since 0.10.0
|
|
788
|
-
*/
|
|
789
|
-
function createPendingDependencySourceState(depId) {
|
|
790
|
-
return {
|
|
791
|
-
[pendingDependencySourceStateMarker]: true,
|
|
792
|
-
[dependencyId]: depId
|
|
793
|
-
};
|
|
794
|
-
}
|
|
795
|
-
/**
|
|
796
|
-
* A unique symbol used to identify parsers that wrap a dependency source.
|
|
797
|
-
* This is used by withDefault to indicate it contains an inner parser
|
|
798
|
-
* with a PendingDependencySourceState initialState.
|
|
799
|
-
* @since 0.10.0
|
|
800
|
-
*/
|
|
801
|
-
const wrappedDependencySourceMarker = Symbol.for("@optique/core/dependency/wrappedDependencySourceMarker");
|
|
802
|
-
/**
|
|
803
|
-
* A unique symbol used to indicate that a wrapper transforms the dependency
|
|
804
|
-
* source value. This is used by withDefault to determine whether its default
|
|
805
|
-
* value should be registered as the dependency value.
|
|
806
|
-
*
|
|
807
|
-
* When a wrapper has this marker set to `true`, it means the wrapper transforms
|
|
808
|
-
* the dependency source value (e.g., via map()), so the wrapper's output is NOT
|
|
809
|
-
* a valid dependency source value.
|
|
810
|
-
*
|
|
811
|
-
* @since 0.10.0
|
|
812
|
-
*/
|
|
813
|
-
const transformsDependencyValueMarker = Symbol.for("@optique/core/dependency/transformsDependencyValueMarker");
|
|
814
|
-
/**
|
|
815
|
-
* Checks if a parser transforms the dependency value (has transformsDependencyValueMarker).
|
|
816
|
-
*
|
|
817
|
-
* @param parser The parser to check.
|
|
818
|
-
* @returns `true` if the parser transforms the dependency value.
|
|
819
|
-
* @since 0.10.0
|
|
820
|
-
*/
|
|
821
|
-
function transformsDependencyValue(parser) {
|
|
822
|
-
return typeof parser === "object" && parser !== null && transformsDependencyValueMarker in parser && parser[transformsDependencyValueMarker] === true;
|
|
823
|
-
}
|
|
824
|
-
/**
|
|
825
|
-
* Checks if a parser wraps a dependency source (has wrappedDependencySourceMarker).
|
|
826
|
-
*
|
|
827
|
-
* @param parser The parser to check.
|
|
828
|
-
* @returns `true` if the parser wraps a dependency source.
|
|
829
|
-
* @since 0.10.0
|
|
830
|
-
*/
|
|
831
|
-
function isWrappedDependencySource(parser) {
|
|
832
|
-
return typeof parser === "object" && parser !== null && wrappedDependencySourceMarker in parser;
|
|
833
|
-
}
|
|
834
|
-
/**
|
|
835
|
-
* A registry for storing resolved dependency values during parsing.
|
|
836
|
-
* This is used to pass dependency values from DependencySource options
|
|
837
|
-
* to DerivedValueParser options.
|
|
838
|
-
* @since 0.10.0
|
|
839
|
-
*/
|
|
840
|
-
var DependencyRegistry = class DependencyRegistry {
|
|
841
|
-
values = /* @__PURE__ */ new Map();
|
|
842
|
-
/**
|
|
843
|
-
* Registers a resolved dependency value.
|
|
844
|
-
* @param id The dependency ID.
|
|
845
|
-
* @param value The resolved value.
|
|
846
|
-
*/
|
|
847
|
-
set(id, value) {
|
|
848
|
-
this.values.set(id, value);
|
|
849
|
-
}
|
|
850
|
-
/**
|
|
851
|
-
* Gets a resolved dependency value.
|
|
852
|
-
* @param id The dependency ID.
|
|
853
|
-
* @returns The resolved value, or undefined if not found.
|
|
854
|
-
*/
|
|
855
|
-
get(id) {
|
|
856
|
-
return this.values.get(id);
|
|
857
|
-
}
|
|
858
|
-
/**
|
|
859
|
-
* Checks if a dependency has been resolved.
|
|
860
|
-
* @param id The dependency ID.
|
|
861
|
-
* @returns `true` if the dependency has been resolved.
|
|
862
|
-
*/
|
|
863
|
-
has(id) {
|
|
864
|
-
return this.values.has(id);
|
|
865
|
-
}
|
|
866
|
-
/**
|
|
867
|
-
* Creates a copy of the registry.
|
|
868
|
-
*/
|
|
869
|
-
clone() {
|
|
870
|
-
const copy = new DependencyRegistry();
|
|
871
|
-
for (const [id, value] of this.values) copy.values.set(id, value);
|
|
872
|
-
return copy;
|
|
873
|
-
}
|
|
874
|
-
};
|
|
875
|
-
/**
|
|
876
|
-
* Formats a {@link DependencyError} into a human-readable {@link Message}.
|
|
877
|
-
*
|
|
878
|
-
* @param error The dependency error to format.
|
|
879
|
-
* @returns A Message describing the error.
|
|
880
|
-
* @since 0.10.0
|
|
881
|
-
*/
|
|
882
|
-
function formatDependencyError(error) {
|
|
883
|
-
switch (error.kind) {
|
|
884
|
-
case "duplicate": return [{
|
|
885
|
-
type: "text",
|
|
886
|
-
text: `Dependency used in multiple locations: ${error.locations.join(", ")}.`
|
|
887
|
-
}];
|
|
888
|
-
case "unresolved": return [{
|
|
889
|
-
type: "text",
|
|
890
|
-
text: `Unresolved dependency for ${error.derivedParserMetavar}: the dependency was not provided.`
|
|
891
|
-
}];
|
|
892
|
-
case "circular": return [{
|
|
893
|
-
type: "text",
|
|
894
|
-
text: `Circular dependency detected.`
|
|
895
|
-
}];
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
//#endregion
|
|
900
|
-
exports.DependencyRegistry = DependencyRegistry;
|
|
901
|
-
exports.createDeferredParseState = createDeferredParseState;
|
|
902
|
-
exports.createDependencySourceState = createDependencySourceState;
|
|
903
|
-
exports.createPendingDependencySourceState = createPendingDependencySourceState;
|
|
904
|
-
exports.defaultValues = defaultValues;
|
|
905
|
-
exports.deferredParseMarker = deferredParseMarker;
|
|
906
|
-
exports.dependency = dependency;
|
|
907
|
-
exports.dependencyId = dependencyId;
|
|
908
|
-
exports.dependencyIds = dependencyIds;
|
|
909
|
-
exports.dependencySourceMarker = dependencySourceMarker;
|
|
910
|
-
exports.dependencySourceStateMarker = dependencySourceStateMarker;
|
|
911
|
-
exports.deriveFrom = deriveFrom;
|
|
912
|
-
exports.deriveFromAsync = deriveFromAsync;
|
|
913
|
-
exports.deriveFromSync = deriveFromSync;
|
|
914
|
-
exports.derivedValueParserMarker = derivedValueParserMarker;
|
|
915
|
-
exports.formatDependencyError = formatDependencyError;
|
|
916
|
-
exports.getDefaultValuesFunction = getDefaultValuesFunction;
|
|
917
|
-
exports.getDependencyIds = getDependencyIds;
|
|
918
|
-
exports.isDeferredParseState = isDeferredParseState;
|
|
919
|
-
exports.isDependencySource = isDependencySource;
|
|
920
|
-
exports.isDependencySourceState = isDependencySourceState;
|
|
921
|
-
exports.isDerivedValueParser = isDerivedValueParser;
|
|
922
|
-
exports.isPendingDependencySourceState = isPendingDependencySourceState;
|
|
923
|
-
exports.isWrappedDependencySource = isWrappedDependencySource;
|
|
924
|
-
exports.parseWithDependency = parseWithDependency;
|
|
925
|
-
exports.pendingDependencySourceStateMarker = pendingDependencySourceStateMarker;
|
|
926
|
-
exports.suggestWithDependency = suggestWithDependency;
|
|
927
|
-
exports.transformsDependencyValue = transformsDependencyValue;
|
|
928
|
-
exports.transformsDependencyValueMarker = transformsDependencyValueMarker;
|
|
929
|
-
exports.wrappedDependencySourceMarker = wrappedDependencySourceMarker;
|
|
3
|
+
exports.dependency = require_dependency.dependency;
|
|
4
|
+
exports.deriveFrom = require_dependency.deriveFrom;
|
|
5
|
+
exports.deriveFromAsync = require_dependency.deriveFromAsync;
|
|
6
|
+
exports.deriveFromSync = require_dependency.deriveFromSync;
|
|
7
|
+
exports.isDependencySource = require_dependency.isDependencySource;
|
|
8
|
+
exports.isDerivedValueParser = require_dependency.isDerivedValueParser;
|