@optique/core 0.10.0-dev.295 → 0.10.0-dev.297
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 +200 -45
- package/dist/constructs.js +200 -45
- package/dist/dependency.cjs +163 -7
- package/dist/dependency.d.cts +58 -2
- package/dist/dependency.d.ts +58 -2
- package/dist/dependency.js +160 -7
- package/dist/index.cjs +4 -0
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/modifiers.cjs +133 -27
- package/dist/modifiers.js +134 -28
- package/dist/parser.d.cts +9 -0
- package/dist/parser.d.ts +9 -0
- package/dist/primitives.cjs +76 -4
- package/dist/primitives.js +77 -5
- package/package.json +1 -1
package/dist/constructs.cjs
CHANGED
|
@@ -243,11 +243,38 @@ function or(...args) {
|
|
|
243
243
|
state: context.state == null || context.state[0] !== i || !context.state[1].success ? parser.initialState : context.state[1].next.state
|
|
244
244
|
});
|
|
245
245
|
if (result.success && result.consumed.length > 0) {
|
|
246
|
-
if (context.state?.[0] !== i && context.state?.[1].success)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
246
|
+
if (context.state?.[0] !== i && context.state?.[1].success) {
|
|
247
|
+
const previouslyConsumed = context.state[1].consumed;
|
|
248
|
+
const checkResult = parser.parse({
|
|
249
|
+
...context,
|
|
250
|
+
buffer: previouslyConsumed,
|
|
251
|
+
state: parser.initialState
|
|
252
|
+
});
|
|
253
|
+
const canConsumeShared = checkResult.success && checkResult.consumed.length === previouslyConsumed.length && checkResult.consumed.every((c, idx) => c === previouslyConsumed[idx]);
|
|
254
|
+
if (!canConsumeShared) return {
|
|
255
|
+
success: false,
|
|
256
|
+
consumed: context.buffer.length - result.next.buffer.length,
|
|
257
|
+
error: require_message.message`${require_message.values(context.state[1].consumed)} and ${require_message.values(result.consumed)} cannot be used together.`
|
|
258
|
+
};
|
|
259
|
+
const replayedResult = parser.parse({
|
|
260
|
+
...context,
|
|
261
|
+
state: checkResult.next.state
|
|
262
|
+
});
|
|
263
|
+
if (!replayedResult.success) return replayedResult;
|
|
264
|
+
return {
|
|
265
|
+
success: true,
|
|
266
|
+
next: {
|
|
267
|
+
...context,
|
|
268
|
+
buffer: replayedResult.next.buffer,
|
|
269
|
+
optionsTerminated: replayedResult.next.optionsTerminated,
|
|
270
|
+
state: [i, {
|
|
271
|
+
...replayedResult,
|
|
272
|
+
consumed: [...previouslyConsumed, ...replayedResult.consumed]
|
|
273
|
+
}]
|
|
274
|
+
},
|
|
275
|
+
consumed: replayedResult.consumed
|
|
276
|
+
};
|
|
277
|
+
}
|
|
251
278
|
return {
|
|
252
279
|
success: true,
|
|
253
280
|
next: {
|
|
@@ -276,11 +303,40 @@ function or(...args) {
|
|
|
276
303
|
});
|
|
277
304
|
const result = await resultOrPromise;
|
|
278
305
|
if (result.success && result.consumed.length > 0) {
|
|
279
|
-
if (context.state?.[0] !== i && context.state?.[1].success)
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
306
|
+
if (context.state?.[0] !== i && context.state?.[1].success) {
|
|
307
|
+
const previouslyConsumed = context.state[1].consumed;
|
|
308
|
+
const checkResultOrPromise = parser.parse({
|
|
309
|
+
...context,
|
|
310
|
+
buffer: previouslyConsumed,
|
|
311
|
+
state: parser.initialState
|
|
312
|
+
});
|
|
313
|
+
const checkResult = await checkResultOrPromise;
|
|
314
|
+
const canConsumeShared = checkResult.success && checkResult.consumed.length === previouslyConsumed.length && checkResult.consumed.every((c, idx) => c === previouslyConsumed[idx]);
|
|
315
|
+
if (!canConsumeShared) return {
|
|
316
|
+
success: false,
|
|
317
|
+
consumed: context.buffer.length - result.next.buffer.length,
|
|
318
|
+
error: require_message.message`${require_message.values(context.state[1].consumed)} and ${require_message.values(result.consumed)} cannot be used together.`
|
|
319
|
+
};
|
|
320
|
+
const replayedResultOrPromise = parser.parse({
|
|
321
|
+
...context,
|
|
322
|
+
state: checkResult.next.state
|
|
323
|
+
});
|
|
324
|
+
const replayedResult = await replayedResultOrPromise;
|
|
325
|
+
if (!replayedResult.success) return replayedResult;
|
|
326
|
+
return {
|
|
327
|
+
success: true,
|
|
328
|
+
next: {
|
|
329
|
+
...context,
|
|
330
|
+
buffer: replayedResult.next.buffer,
|
|
331
|
+
optionsTerminated: replayedResult.next.optionsTerminated,
|
|
332
|
+
state: [i, {
|
|
333
|
+
...replayedResult,
|
|
334
|
+
consumed: [...previouslyConsumed, ...replayedResult.consumed]
|
|
335
|
+
}]
|
|
336
|
+
},
|
|
337
|
+
consumed: replayedResult.consumed
|
|
338
|
+
};
|
|
339
|
+
}
|
|
284
340
|
return {
|
|
285
341
|
success: true,
|
|
286
342
|
next: {
|
|
@@ -482,12 +538,18 @@ function longestMatch(...args) {
|
|
|
482
538
|
* @internal
|
|
483
539
|
*/
|
|
484
540
|
function* suggestObjectSync(context, prefix, parserPairs) {
|
|
541
|
+
const registry = context.dependencyRegistry instanceof require_dependency.DependencyRegistry ? context.dependencyRegistry : new require_dependency.DependencyRegistry();
|
|
542
|
+
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
543
|
+
const contextWithRegistry = {
|
|
544
|
+
...context,
|
|
545
|
+
dependencyRegistry: registry
|
|
546
|
+
};
|
|
485
547
|
if (context.buffer.length > 0) {
|
|
486
548
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
487
549
|
for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
|
|
488
550
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
489
551
|
yield* parser.suggest({
|
|
490
|
-
...
|
|
552
|
+
...contextWithRegistry,
|
|
491
553
|
state: fieldState
|
|
492
554
|
}, prefix);
|
|
493
555
|
return;
|
|
@@ -497,7 +559,7 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
497
559
|
for (const [field, parser] of parserPairs) {
|
|
498
560
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
499
561
|
const fieldSuggestions = parser.suggest({
|
|
500
|
-
...
|
|
562
|
+
...contextWithRegistry,
|
|
501
563
|
state: fieldState
|
|
502
564
|
}, prefix);
|
|
503
565
|
suggestions.push(...fieldSuggestions);
|
|
@@ -509,12 +571,18 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
509
571
|
* @internal
|
|
510
572
|
*/
|
|
511
573
|
async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
574
|
+
const registry = context.dependencyRegistry instanceof require_dependency.DependencyRegistry ? context.dependencyRegistry : new require_dependency.DependencyRegistry();
|
|
575
|
+
if (context.state && typeof context.state === "object") collectDependencies(context.state, registry);
|
|
576
|
+
const contextWithRegistry = {
|
|
577
|
+
...context,
|
|
578
|
+
dependencyRegistry: registry
|
|
579
|
+
};
|
|
512
580
|
if (context.buffer.length > 0) {
|
|
513
581
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
514
582
|
for (const [field, parser] of parserPairs) if (isOptionRequiringValue(parser.usage, lastToken)) {
|
|
515
583
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
516
584
|
const suggestions$1 = parser.suggest({
|
|
517
|
-
...
|
|
585
|
+
...contextWithRegistry,
|
|
518
586
|
state: fieldState
|
|
519
587
|
}, prefix);
|
|
520
588
|
for await (const s of suggestions$1) yield s;
|
|
@@ -525,7 +593,7 @@ async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
|
525
593
|
for (const [field, parser] of parserPairs) {
|
|
526
594
|
const fieldState = context.state && typeof context.state === "object" && field in context.state ? context.state[field] : parser.initialState;
|
|
527
595
|
const fieldSuggestions = parser.suggest({
|
|
528
|
-
...
|
|
596
|
+
...contextWithRegistry,
|
|
529
597
|
state: fieldState
|
|
530
598
|
}, prefix);
|
|
531
599
|
for await (const s of fieldSuggestions) suggestions.push(s);
|
|
@@ -591,19 +659,17 @@ function resolveDeferred(state, registry) {
|
|
|
591
659
|
const parser = deferredState.parser;
|
|
592
660
|
const depIds = deferredState.dependencyIds;
|
|
593
661
|
if (depIds && depIds.length > 0) {
|
|
662
|
+
const defaults = deferredState.defaultValues;
|
|
594
663
|
const dependencyValues = [];
|
|
595
|
-
let
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
}
|
|
601
|
-
if (allDepsAvailable) {
|
|
602
|
-
const reParseResult = parser[require_dependency.ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
603
|
-
if (reParseResult instanceof Promise) return deferredState.preliminaryResult;
|
|
604
|
-
return reParseResult;
|
|
664
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
665
|
+
const depId$1 = depIds[i];
|
|
666
|
+
if (registry.has(depId$1)) dependencyValues.push(registry.get(depId$1));
|
|
667
|
+
else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
668
|
+
else return deferredState.preliminaryResult;
|
|
605
669
|
}
|
|
606
|
-
|
|
670
|
+
const reParseResult = parser[require_dependency.ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
671
|
+
if (reParseResult instanceof Promise) return deferredState.preliminaryResult;
|
|
672
|
+
return reParseResult;
|
|
607
673
|
}
|
|
608
674
|
const depId = deferredState.dependencyId;
|
|
609
675
|
if (registry.has(depId)) {
|
|
@@ -648,18 +714,16 @@ async function resolveDeferredAsync(state, registry) {
|
|
|
648
714
|
const parser = deferredState.parser;
|
|
649
715
|
const depIds = deferredState.dependencyIds;
|
|
650
716
|
if (depIds && depIds.length > 0) {
|
|
717
|
+
const defaults = deferredState.defaultValues;
|
|
651
718
|
const dependencyValues = [];
|
|
652
|
-
let
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
719
|
+
for (let i = 0; i < depIds.length; i++) {
|
|
720
|
+
const depId$1 = depIds[i];
|
|
721
|
+
if (registry.has(depId$1)) dependencyValues.push(registry.get(depId$1));
|
|
722
|
+
else if (defaults && i < defaults.length) dependencyValues.push(defaults[i]);
|
|
723
|
+
else return deferredState.preliminaryResult;
|
|
657
724
|
}
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
return Promise.resolve(reParseResult);
|
|
661
|
-
}
|
|
662
|
-
return deferredState.preliminaryResult;
|
|
725
|
+
const reParseResult = parser[require_dependency.ParseWithDependency](deferredState.rawInput, dependencyValues);
|
|
726
|
+
return Promise.resolve(reParseResult);
|
|
663
727
|
}
|
|
664
728
|
const depId = deferredState.dependencyId;
|
|
665
729
|
if (registry.has(depId)) {
|
|
@@ -863,7 +927,8 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
863
927
|
} else if (fieldState === void 0 && require_dependency.isWrappedDependencySource(fieldParser)) {
|
|
864
928
|
const pendingState = fieldParser[require_dependency.WrappedDependencySourceMarker];
|
|
865
929
|
const completed = fieldParser.complete([pendingState]);
|
|
866
|
-
preCompletedState[fieldKey] = completed;
|
|
930
|
+
if (require_dependency.isDependencySourceState(completed)) preCompletedState[fieldKey] = completed;
|
|
931
|
+
else preCompletedState[fieldKey] = fieldState;
|
|
867
932
|
} else preCompletedState[fieldKey] = fieldState;
|
|
868
933
|
}
|
|
869
934
|
const resolvedState = resolveDeferredParseStates(preCompletedState);
|
|
@@ -912,7 +977,8 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
912
977
|
} else if (fieldState === void 0 && require_dependency.isWrappedDependencySource(fieldParser)) {
|
|
913
978
|
const pendingState = fieldParser[require_dependency.WrappedDependencySourceMarker];
|
|
914
979
|
const completed = await fieldParser.complete([pendingState]);
|
|
915
|
-
preCompletedState[fieldKey] = completed;
|
|
980
|
+
if (require_dependency.isDependencySourceState(completed)) preCompletedState[fieldKey] = completed;
|
|
981
|
+
else preCompletedState[fieldKey] = fieldState;
|
|
916
982
|
} else preCompletedState[fieldKey] = fieldState;
|
|
917
983
|
}
|
|
918
984
|
const resolvedState = await resolveDeferredParseStatesAsync(preCompletedState);
|
|
@@ -1162,10 +1228,43 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
1162
1228
|
},
|
|
1163
1229
|
complete(state) {
|
|
1164
1230
|
if (!isAsync) {
|
|
1165
|
-
const result = [];
|
|
1166
1231
|
const stateArray = state;
|
|
1232
|
+
const preCompletedState = [];
|
|
1167
1233
|
for (let i = 0; i < syncParsers.length; i++) {
|
|
1168
|
-
const
|
|
1234
|
+
const elementState = stateArray[i];
|
|
1235
|
+
const elementParser = syncParsers[i];
|
|
1236
|
+
if (Array.isArray(elementState) && elementState.length === 1 && require_dependency.isPendingDependencySourceState(elementState[0])) {
|
|
1237
|
+
const completed = elementParser.complete(elementState);
|
|
1238
|
+
preCompletedState[i] = completed;
|
|
1239
|
+
} else if (elementState === void 0 && require_dependency.isPendingDependencySourceState(elementParser.initialState)) {
|
|
1240
|
+
const completed = elementParser.complete([elementParser.initialState]);
|
|
1241
|
+
preCompletedState[i] = completed;
|
|
1242
|
+
} else if (elementState === void 0 && require_dependency.isWrappedDependencySource(elementParser)) {
|
|
1243
|
+
const pendingState = elementParser[require_dependency.WrappedDependencySourceMarker];
|
|
1244
|
+
const completed = elementParser.complete([pendingState]);
|
|
1245
|
+
preCompletedState[i] = completed;
|
|
1246
|
+
} else preCompletedState[i] = elementState;
|
|
1247
|
+
}
|
|
1248
|
+
const resolvedState = resolveDeferredParseStates(preCompletedState);
|
|
1249
|
+
const resolvedArray = resolvedState;
|
|
1250
|
+
const result = [];
|
|
1251
|
+
for (let i = 0; i < syncParsers.length; i++) {
|
|
1252
|
+
const elementResolvedState = resolvedArray[i];
|
|
1253
|
+
const elementParser = syncParsers[i];
|
|
1254
|
+
const originalElementState = stateArray[i];
|
|
1255
|
+
const wasPreCompletedCase1 = Array.isArray(originalElementState) && originalElementState.length === 1 && require_dependency.isPendingDependencySourceState(originalElementState[0]);
|
|
1256
|
+
const wasPreCompletedCase2 = originalElementState === void 0 && require_dependency.isPendingDependencySourceState(elementParser.initialState);
|
|
1257
|
+
const wasPreCompletedCase3 = originalElementState === void 0 && require_dependency.isWrappedDependencySource(elementParser);
|
|
1258
|
+
if (require_dependency.isDependencySourceState(elementResolvedState) && (wasPreCompletedCase1 || wasPreCompletedCase2 || wasPreCompletedCase3)) {
|
|
1259
|
+
const depResult = elementResolvedState.result;
|
|
1260
|
+
if (depResult.success) result[i] = depResult.value;
|
|
1261
|
+
else return {
|
|
1262
|
+
success: false,
|
|
1263
|
+
error: depResult.error
|
|
1264
|
+
};
|
|
1265
|
+
continue;
|
|
1266
|
+
}
|
|
1267
|
+
const valueResult = elementParser.complete(elementResolvedState);
|
|
1169
1268
|
if (valueResult.success) result[i] = valueResult.value;
|
|
1170
1269
|
else return {
|
|
1171
1270
|
success: false,
|
|
@@ -1178,10 +1277,43 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
1178
1277
|
};
|
|
1179
1278
|
}
|
|
1180
1279
|
return (async () => {
|
|
1181
|
-
const result = [];
|
|
1182
1280
|
const stateArray = state;
|
|
1281
|
+
const preCompletedState = [];
|
|
1183
1282
|
for (let i = 0; i < parsers.length; i++) {
|
|
1184
|
-
const
|
|
1283
|
+
const elementState = stateArray[i];
|
|
1284
|
+
const elementParser = parsers[i];
|
|
1285
|
+
if (Array.isArray(elementState) && elementState.length === 1 && require_dependency.isPendingDependencySourceState(elementState[0])) {
|
|
1286
|
+
const completed = await elementParser.complete(elementState);
|
|
1287
|
+
preCompletedState[i] = completed;
|
|
1288
|
+
} else if (elementState === void 0 && require_dependency.isPendingDependencySourceState(elementParser.initialState)) {
|
|
1289
|
+
const completed = await elementParser.complete([elementParser.initialState]);
|
|
1290
|
+
preCompletedState[i] = completed;
|
|
1291
|
+
} else if (elementState === void 0 && require_dependency.isWrappedDependencySource(elementParser)) {
|
|
1292
|
+
const pendingState = elementParser[require_dependency.WrappedDependencySourceMarker];
|
|
1293
|
+
const completed = await elementParser.complete([pendingState]);
|
|
1294
|
+
preCompletedState[i] = completed;
|
|
1295
|
+
} else preCompletedState[i] = elementState;
|
|
1296
|
+
}
|
|
1297
|
+
const resolvedState = await resolveDeferredParseStatesAsync(preCompletedState);
|
|
1298
|
+
const resolvedArray = resolvedState;
|
|
1299
|
+
const result = [];
|
|
1300
|
+
for (let i = 0; i < parsers.length; i++) {
|
|
1301
|
+
const elementResolvedState = resolvedArray[i];
|
|
1302
|
+
const elementParser = parsers[i];
|
|
1303
|
+
const originalElementState = stateArray[i];
|
|
1304
|
+
const wasPreCompletedCase1 = Array.isArray(originalElementState) && originalElementState.length === 1 && require_dependency.isPendingDependencySourceState(originalElementState[0]);
|
|
1305
|
+
const wasPreCompletedCase2 = originalElementState === void 0 && require_dependency.isPendingDependencySourceState(elementParser.initialState);
|
|
1306
|
+
const wasPreCompletedCase3 = originalElementState === void 0 && require_dependency.isWrappedDependencySource(elementParser);
|
|
1307
|
+
if (require_dependency.isDependencySourceState(elementResolvedState) && (wasPreCompletedCase1 || wasPreCompletedCase2 || wasPreCompletedCase3)) {
|
|
1308
|
+
const depResult = elementResolvedState.result;
|
|
1309
|
+
if (depResult.success) result[i] = depResult.value;
|
|
1310
|
+
else return {
|
|
1311
|
+
success: false,
|
|
1312
|
+
error: depResult.error
|
|
1313
|
+
};
|
|
1314
|
+
continue;
|
|
1315
|
+
}
|
|
1316
|
+
const valueResult = await elementParser.complete(elementResolvedState);
|
|
1185
1317
|
if (valueResult.success) result[i] = valueResult.value;
|
|
1186
1318
|
else return {
|
|
1187
1319
|
success: false,
|
|
@@ -2106,6 +2238,7 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2106
2238
|
};
|
|
2107
2239
|
};
|
|
2108
2240
|
const completeSync = (state) => {
|
|
2241
|
+
const syncDiscriminator = discriminator;
|
|
2109
2242
|
const syncDefaultBranch = defaultBranch;
|
|
2110
2243
|
const syncBranches = branches;
|
|
2111
2244
|
if (state.selectedBranch === void 0) {
|
|
@@ -2124,7 +2257,14 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2124
2257
|
};
|
|
2125
2258
|
}
|
|
2126
2259
|
const branchParser = state.selectedBranch.kind === "default" ? syncDefaultBranch : syncBranches[state.selectedBranch.key];
|
|
2127
|
-
const
|
|
2260
|
+
const discriminatorCompleteResult = syncDiscriminator.complete(state.discriminatorState);
|
|
2261
|
+
const combinedState = {
|
|
2262
|
+
_discriminator: state.discriminatorState,
|
|
2263
|
+
_branch: state.branchState
|
|
2264
|
+
};
|
|
2265
|
+
const resolvedCombinedState = resolveDeferredParseStates(combinedState);
|
|
2266
|
+
const resolvedBranchState = resolvedCombinedState._branch;
|
|
2267
|
+
const branchResult = branchParser.complete(resolvedBranchState);
|
|
2128
2268
|
if (!branchResult.success) {
|
|
2129
2269
|
if (state.discriminatorValue !== void 0 && options?.errors?.branchError) return {
|
|
2130
2270
|
success: false,
|
|
@@ -2132,7 +2272,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2132
2272
|
};
|
|
2133
2273
|
return branchResult;
|
|
2134
2274
|
}
|
|
2135
|
-
|
|
2275
|
+
let discriminatorValue;
|
|
2276
|
+
if (state.selectedBranch.kind === "default") discriminatorValue = void 0;
|
|
2277
|
+
else if (require_dependency.isDependencySourceState(discriminatorCompleteResult)) discriminatorValue = discriminatorCompleteResult.result.success ? discriminatorCompleteResult.result.value : state.selectedBranch.key;
|
|
2278
|
+
else if (discriminatorCompleteResult.success) discriminatorValue = discriminatorCompleteResult.value;
|
|
2279
|
+
else discriminatorValue = state.selectedBranch.key;
|
|
2136
2280
|
return {
|
|
2137
2281
|
success: true,
|
|
2138
2282
|
value: [discriminatorValue, branchResult.value]
|
|
@@ -2155,7 +2299,14 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2155
2299
|
};
|
|
2156
2300
|
}
|
|
2157
2301
|
const branchParser = state.selectedBranch.kind === "default" ? defaultBranch : branches[state.selectedBranch.key];
|
|
2158
|
-
const
|
|
2302
|
+
const discriminatorCompleteResult = await discriminator.complete(state.discriminatorState);
|
|
2303
|
+
const combinedState = {
|
|
2304
|
+
_discriminator: state.discriminatorState,
|
|
2305
|
+
_branch: state.branchState
|
|
2306
|
+
};
|
|
2307
|
+
const resolvedCombinedState = await resolveDeferredParseStatesAsync(combinedState);
|
|
2308
|
+
const resolvedBranchState = resolvedCombinedState._branch;
|
|
2309
|
+
const branchResult = await branchParser.complete(resolvedBranchState);
|
|
2159
2310
|
if (!branchResult.success) {
|
|
2160
2311
|
if (state.discriminatorValue !== void 0 && options?.errors?.branchError) return {
|
|
2161
2312
|
success: false,
|
|
@@ -2163,7 +2314,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
|
|
|
2163
2314
|
};
|
|
2164
2315
|
return branchResult;
|
|
2165
2316
|
}
|
|
2166
|
-
|
|
2317
|
+
let discriminatorValue;
|
|
2318
|
+
if (state.selectedBranch.kind === "default") discriminatorValue = void 0;
|
|
2319
|
+
else if (require_dependency.isDependencySourceState(discriminatorCompleteResult)) discriminatorValue = discriminatorCompleteResult.result.success ? discriminatorCompleteResult.result.value : state.selectedBranch.key;
|
|
2320
|
+
else if (discriminatorCompleteResult.success) discriminatorValue = discriminatorCompleteResult.value;
|
|
2321
|
+
else discriminatorValue = state.selectedBranch.key;
|
|
2167
2322
|
return {
|
|
2168
2323
|
success: true,
|
|
2169
2324
|
value: [discriminatorValue, branchResult.value]
|