@optique/core 1.0.0-dev.1602 → 1.0.0-dev.1608
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 +194 -223
- package/dist/constructs.js +194 -223
- package/dist/dependency-runtime.cjs +328 -0
- package/dist/dependency-runtime.js +323 -0
- package/package.json +1 -1
package/dist/constructs.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const require_annotations = require('./annotations.cjs');
|
|
2
2
|
const require_message = require('./message.cjs');
|
|
3
3
|
const require_dependency = require('./dependency.cjs');
|
|
4
|
+
const require_dependency_runtime = require('./dependency-runtime.cjs');
|
|
4
5
|
const require_mode_dispatch = require('./mode-dispatch.cjs');
|
|
5
6
|
const require_validate = require('./validate.cjs');
|
|
6
7
|
const require_usage = require('./usage.cjs');
|
|
@@ -55,6 +56,34 @@ const inheritParentAnnotationsKey = Symbol.for("@optique/core/inheritParentAnnot
|
|
|
55
56
|
*/
|
|
56
57
|
const fieldParsersKey = Symbol("fieldParsers");
|
|
57
58
|
/**
|
|
59
|
+
* Extracts the actual {@link ValueParserResult} from a `complete()` return
|
|
60
|
+
* value, which may be a plain result or a `DependencySourceState` wrapper
|
|
61
|
+
* from the old protocol. This bridge helper allows the new runtime path
|
|
62
|
+
* to consume results from parsers that still return `DependencySourceState`.
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
65
|
+
function unwrapCompleteResult(result) {
|
|
66
|
+
if (require_dependency.isDependencySourceState(result)) return result.result;
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Prepares a field state for completion by wrapping `undefined` state
|
|
71
|
+
* with the parser's initial pending dependency state when needed.
|
|
72
|
+
*
|
|
73
|
+
* In the old protocol, when a parser has a `PendingDependencySourceState`
|
|
74
|
+
* as its initial state and the field state is `undefined` (option not
|
|
75
|
+
* provided), the construct wraps it as `[initialState]` so that
|
|
76
|
+
* `withDefault().complete()` can detect the pending dependency and
|
|
77
|
+
* return a `DependencySourceState` with the default value.
|
|
78
|
+
* @internal
|
|
79
|
+
*/
|
|
80
|
+
function prepareStateForCompletion(fieldState, parser) {
|
|
81
|
+
if (fieldState !== void 0) return fieldState;
|
|
82
|
+
if (require_dependency.isPendingDependencySourceState(parser.initialState)) return [parser.initialState];
|
|
83
|
+
if (require_dependency.isWrappedDependencySource(parser)) return [parser[require_dependency.wrappedDependencySourceMarker]];
|
|
84
|
+
return fieldState;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
58
87
|
* Returns the field state with parent annotations inherited, respecting
|
|
59
88
|
* the parser's {@link inheritParentAnnotationsKey} flag. This is the
|
|
60
89
|
* same logic as {@link createFieldStateGetter} inside `object()` but
|
|
@@ -689,12 +718,14 @@ function longestMatch(...args) {
|
|
|
689
718
|
* @internal
|
|
690
719
|
*/
|
|
691
720
|
function* suggestObjectSync(context, prefix, parserPairs) {
|
|
692
|
-
const
|
|
693
|
-
|
|
694
|
-
|
|
721
|
+
const runtime = require_dependency_runtime.createDependencyRuntimeContext(context.dependencyRegistry?.clone());
|
|
722
|
+
const nodes = require_dependency_runtime.buildRuntimeNodesFromPairs(parserPairs, context.state && typeof context.state === "object" ? context.state : {}, context.exec?.path);
|
|
723
|
+
require_dependency_runtime.collectExplicitSourceValues(nodes, runtime);
|
|
724
|
+
if (context.state && typeof context.state === "object") require_dependency_runtime.collectSourcesFromState(context.state, runtime);
|
|
725
|
+
completeDependencySourceDefaults(context, parserPairs, runtime.registry, context.exec);
|
|
695
726
|
const contextWithRegistry = {
|
|
696
727
|
...context,
|
|
697
|
-
dependencyRegistry: registry
|
|
728
|
+
dependencyRegistry: runtime.registry
|
|
698
729
|
};
|
|
699
730
|
if (context.buffer.length > 0) {
|
|
700
731
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
@@ -723,12 +754,14 @@ function* suggestObjectSync(context, prefix, parserPairs) {
|
|
|
723
754
|
* @internal
|
|
724
755
|
*/
|
|
725
756
|
async function* suggestObjectAsync(context, prefix, parserPairs) {
|
|
726
|
-
const
|
|
727
|
-
|
|
728
|
-
|
|
757
|
+
const runtime = require_dependency_runtime.createDependencyRuntimeContext(context.dependencyRegistry?.clone());
|
|
758
|
+
const nodes = require_dependency_runtime.buildRuntimeNodesFromPairs(parserPairs, context.state && typeof context.state === "object" ? context.state : {}, context.exec?.path);
|
|
759
|
+
require_dependency_runtime.collectExplicitSourceValues(nodes, runtime);
|
|
760
|
+
if (context.state && typeof context.state === "object") require_dependency_runtime.collectSourcesFromState(context.state, runtime);
|
|
761
|
+
await completeDependencySourceDefaultsAsync(context, parserPairs, runtime.registry, context.exec);
|
|
729
762
|
const contextWithRegistry = {
|
|
730
763
|
...context,
|
|
731
|
-
dependencyRegistry: registry
|
|
764
|
+
dependencyRegistry: runtime.registry
|
|
732
765
|
};
|
|
733
766
|
if (context.buffer.length > 0) {
|
|
734
767
|
const lastToken = context.buffer[context.buffer.length - 1];
|
|
@@ -858,45 +891,71 @@ function collectChildFieldParsers(parsers) {
|
|
|
858
891
|
* PendingDependencySourceState in arrays and wrappedDependencySourceMarker.
|
|
859
892
|
*
|
|
860
893
|
* The original state is NOT modified; only the registry is populated.
|
|
894
|
+
*
|
|
895
|
+
* Used by the new dependency runtime path as an old-protocol bridge:
|
|
896
|
+
* not all wrappers (e.g., `bindConfig`, `bindEnv`) compose
|
|
897
|
+
* `dependencyMetadata` yet, so metadata-based source collection alone
|
|
898
|
+
* cannot register all dependency values. This function fills the gap
|
|
899
|
+
* by inspecting old-protocol markers on the parsers.
|
|
861
900
|
* @internal
|
|
862
901
|
*/
|
|
863
902
|
function preCompleteAndRegisterDependencies(state, fieldParserPairs, registry, exec) {
|
|
903
|
+
const preCompleted = /* @__PURE__ */ new Map();
|
|
864
904
|
for (const [field, fieldParser] of fieldParserPairs) {
|
|
865
905
|
const fieldState = state[field];
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
906
|
+
if (Array.isArray(fieldState) && fieldState.length === 1 && require_dependency.isPendingDependencySourceState(fieldState[0])) {
|
|
907
|
+
const completed = fieldParser.complete(fieldState, exec);
|
|
908
|
+
preCompleted.set(field, completed);
|
|
909
|
+
if (require_dependency.isDependencySourceState(completed)) registerCompletedDependency(completed, registry);
|
|
910
|
+
} else if (fieldState === void 0 && require_dependency.isPendingDependencySourceState(fieldParser.initialState)) {
|
|
911
|
+
const completed = fieldParser.complete([fieldParser.initialState], exec);
|
|
912
|
+
preCompleted.set(field, completed);
|
|
913
|
+
if (require_dependency.isDependencySourceState(completed)) registerCompletedDependency(completed, registry);
|
|
914
|
+
} else if (fieldState === void 0 && require_dependency.isWrappedDependencySource(fieldParser)) {
|
|
870
915
|
const pendingState = fieldParser[require_dependency.wrappedDependencySourceMarker];
|
|
871
|
-
completed = fieldParser.complete([pendingState], exec);
|
|
916
|
+
const completed = fieldParser.complete([pendingState], exec);
|
|
917
|
+
preCompleted.set(field, completed);
|
|
918
|
+
if (require_dependency.isDependencySourceState(completed)) registerCompletedDependency(completed, registry);
|
|
872
919
|
} else if (fieldState != null && !Array.isArray(fieldState) && !require_dependency.isDependencySourceState(fieldState) && (require_dependency.isWrappedDependencySource(fieldParser) || require_dependency.isPendingDependencySourceState(fieldParser.initialState))) {
|
|
873
920
|
const annotatedFieldState = getAnnotatedFieldState(state, field, fieldParser);
|
|
874
|
-
completed = fieldParser.complete(annotatedFieldState, exec);
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
921
|
+
const completed = fieldParser.complete(annotatedFieldState, exec);
|
|
922
|
+
preCompleted.set(field, completed);
|
|
923
|
+
const depState = wrapAsDependencySourceState(completed, fieldParser);
|
|
924
|
+
if (depState) registerCompletedDependency(depState, registry);
|
|
925
|
+
}
|
|
878
926
|
}
|
|
927
|
+
return preCompleted;
|
|
879
928
|
}
|
|
880
929
|
/**
|
|
881
930
|
* Async version of {@link preCompleteAndRegisterDependencies}.
|
|
882
931
|
* @internal
|
|
883
932
|
*/
|
|
884
933
|
async function preCompleteAndRegisterDependenciesAsync(state, fieldParserPairs, registry, exec) {
|
|
934
|
+
const preCompleted = /* @__PURE__ */ new Map();
|
|
885
935
|
for (const [field, fieldParser] of fieldParserPairs) {
|
|
886
936
|
const fieldState = state[field];
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
937
|
+
if (Array.isArray(fieldState) && fieldState.length === 1 && require_dependency.isPendingDependencySourceState(fieldState[0])) {
|
|
938
|
+
const completed = await fieldParser.complete(fieldState, exec);
|
|
939
|
+
preCompleted.set(field, completed);
|
|
940
|
+
if (require_dependency.isDependencySourceState(completed)) registerCompletedDependency(completed, registry);
|
|
941
|
+
} else if (fieldState === void 0 && require_dependency.isPendingDependencySourceState(fieldParser.initialState)) {
|
|
942
|
+
const completed = await fieldParser.complete([fieldParser.initialState], exec);
|
|
943
|
+
preCompleted.set(field, completed);
|
|
944
|
+
if (require_dependency.isDependencySourceState(completed)) registerCompletedDependency(completed, registry);
|
|
945
|
+
} else if (fieldState === void 0 && require_dependency.isWrappedDependencySource(fieldParser)) {
|
|
891
946
|
const pendingState = fieldParser[require_dependency.wrappedDependencySourceMarker];
|
|
892
|
-
completed = await fieldParser.complete([pendingState], exec);
|
|
947
|
+
const completed = await fieldParser.complete([pendingState], exec);
|
|
948
|
+
preCompleted.set(field, completed);
|
|
949
|
+
if (require_dependency.isDependencySourceState(completed)) registerCompletedDependency(completed, registry);
|
|
893
950
|
} else if (fieldState != null && !Array.isArray(fieldState) && !require_dependency.isDependencySourceState(fieldState) && (require_dependency.isWrappedDependencySource(fieldParser) || require_dependency.isPendingDependencySourceState(fieldParser.initialState))) {
|
|
894
951
|
const annotatedFieldState = getAnnotatedFieldState(state, field, fieldParser);
|
|
895
|
-
completed = await fieldParser.complete(annotatedFieldState, exec);
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
952
|
+
const completed = await fieldParser.complete(annotatedFieldState, exec);
|
|
953
|
+
preCompleted.set(field, completed);
|
|
954
|
+
const depState = wrapAsDependencySourceState(completed, fieldParser);
|
|
955
|
+
if (depState) registerCompletedDependency(depState, registry);
|
|
956
|
+
}
|
|
899
957
|
}
|
|
958
|
+
return preCompleted;
|
|
900
959
|
}
|
|
901
960
|
/**
|
|
902
961
|
* Recursively collects dependency values from DependencySourceState objects
|
|
@@ -1240,62 +1299,33 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
1240
1299
|
},
|
|
1241
1300
|
complete(state, exec) {
|
|
1242
1301
|
return require_mode_dispatch.dispatchByMode(combinedMode, () => {
|
|
1243
|
-
const
|
|
1244
|
-
const
|
|
1302
|
+
const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
|
|
1303
|
+
const childExec = {
|
|
1304
|
+
...exec,
|
|
1305
|
+
dependencyRuntime: runtime
|
|
1306
|
+
};
|
|
1307
|
+
const preCompleted = preCompleteAndRegisterDependencies(state, parserPairs, runtime.registry, childExec);
|
|
1245
1308
|
const getFieldState = createFieldStateGetter(state);
|
|
1309
|
+
const annotatedState = {};
|
|
1246
1310
|
for (const field of parserKeys) {
|
|
1247
1311
|
const fieldKey = field;
|
|
1248
|
-
const fieldState = state[fieldKey];
|
|
1249
1312
|
const fieldParser = parsers[field];
|
|
1250
|
-
|
|
1251
|
-
const completed = fieldParser.complete(fieldState, exec);
|
|
1252
|
-
preCompletedState[fieldKey] = completed;
|
|
1253
|
-
preCompletedKeys.add(fieldKey);
|
|
1254
|
-
} else if (fieldState === void 0 && require_dependency.isPendingDependencySourceState(fieldParser.initialState)) {
|
|
1255
|
-
const completed = fieldParser.complete([fieldParser.initialState], exec);
|
|
1256
|
-
preCompletedState[fieldKey] = completed;
|
|
1257
|
-
preCompletedKeys.add(fieldKey);
|
|
1258
|
-
} else if (fieldState === void 0 && require_dependency.isWrappedDependencySource(fieldParser)) {
|
|
1259
|
-
const pendingState = fieldParser[require_dependency.wrappedDependencySourceMarker];
|
|
1260
|
-
const completed = fieldParser.complete([pendingState], exec);
|
|
1261
|
-
if (require_dependency.isDependencySourceState(completed)) {
|
|
1262
|
-
preCompletedState[fieldKey] = completed;
|
|
1263
|
-
preCompletedKeys.add(fieldKey);
|
|
1264
|
-
} else preCompletedState[fieldKey] = fieldState;
|
|
1265
|
-
} else if (fieldState != null && !Array.isArray(fieldState) && !require_dependency.isDependencySourceState(fieldState) && (require_dependency.isWrappedDependencySource(fieldParser) || require_dependency.isPendingDependencySourceState(fieldParser.initialState))) {
|
|
1266
|
-
const annotatedFieldState = getFieldState(field, fieldParser);
|
|
1267
|
-
const completed = fieldParser.complete(annotatedFieldState, exec);
|
|
1268
|
-
const depState = wrapAsDependencySourceState(completed, fieldParser);
|
|
1269
|
-
if (depState) {
|
|
1270
|
-
preCompletedState[fieldKey] = depState;
|
|
1271
|
-
preCompletedKeys.add(fieldKey);
|
|
1272
|
-
} else preCompletedState[fieldKey] = annotatedFieldState;
|
|
1273
|
-
} else preCompletedState[fieldKey] = getFieldState(field, fieldParser);
|
|
1313
|
+
annotatedState[fieldKey] = getFieldState(field, fieldParser);
|
|
1274
1314
|
}
|
|
1275
|
-
const
|
|
1315
|
+
const resolvedFieldStates = require_dependency_runtime.resolveStateWithRuntime(annotatedState, runtime);
|
|
1276
1316
|
const result = {};
|
|
1277
1317
|
const deferredKeys = /* @__PURE__ */ new Map();
|
|
1278
1318
|
let hasDeferred = false;
|
|
1279
|
-
const getCompletionFieldState = createFieldStateGetter(state);
|
|
1280
1319
|
for (const field of parserKeys) {
|
|
1281
1320
|
const fieldKey = field;
|
|
1282
|
-
const fieldResolvedState = resolvedState[fieldKey];
|
|
1283
1321
|
const fieldParser = parsers[field];
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
else hasDeferred = true;
|
|
1291
|
-
} else return {
|
|
1292
|
-
success: false,
|
|
1293
|
-
error: depResult.error
|
|
1294
|
-
};
|
|
1295
|
-
continue;
|
|
1322
|
+
let valueResult;
|
|
1323
|
+
const preCompletedResult = preCompleted.get(fieldKey);
|
|
1324
|
+
if (preCompletedResult !== void 0) valueResult = unwrapCompleteResult(preCompletedResult);
|
|
1325
|
+
else {
|
|
1326
|
+
const fieldState = resolvedFieldStates[fieldKey];
|
|
1327
|
+
valueResult = unwrapCompleteResult(fieldParser.complete(fieldState, childExec));
|
|
1296
1328
|
}
|
|
1297
|
-
const completionState = fieldResolvedState === void 0 ? getCompletionFieldState(field, fieldParser) : fieldResolvedState;
|
|
1298
|
-
const valueResult = fieldParser.complete(completionState, exec);
|
|
1299
1329
|
if (valueResult.success) {
|
|
1300
1330
|
result[fieldKey] = valueResult.value;
|
|
1301
1331
|
if (valueResult.deferred) if (valueResult.deferredKeys) deferredKeys.set(fieldKey, valueResult.deferredKeys);
|
|
@@ -1316,62 +1346,33 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
1316
1346
|
} : {}
|
|
1317
1347
|
};
|
|
1318
1348
|
}, async () => {
|
|
1319
|
-
const
|
|
1320
|
-
const
|
|
1349
|
+
const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
|
|
1350
|
+
const childExec = {
|
|
1351
|
+
...exec,
|
|
1352
|
+
dependencyRuntime: runtime
|
|
1353
|
+
};
|
|
1354
|
+
const preCompleted = await preCompleteAndRegisterDependenciesAsync(state, parserPairs, runtime.registry, childExec);
|
|
1321
1355
|
const getFieldState = createFieldStateGetter(state);
|
|
1356
|
+
const annotatedState = {};
|
|
1322
1357
|
for (const field of parserKeys) {
|
|
1323
1358
|
const fieldKey = field;
|
|
1324
|
-
const fieldState = state[fieldKey];
|
|
1325
1359
|
const fieldParser = parsers[field];
|
|
1326
|
-
|
|
1327
|
-
const completed = await fieldParser.complete(fieldState, exec);
|
|
1328
|
-
preCompletedState[fieldKey] = completed;
|
|
1329
|
-
preCompletedKeys.add(fieldKey);
|
|
1330
|
-
} else if (fieldState === void 0 && require_dependency.isPendingDependencySourceState(fieldParser.initialState)) {
|
|
1331
|
-
const completed = await fieldParser.complete([fieldParser.initialState], exec);
|
|
1332
|
-
preCompletedState[fieldKey] = completed;
|
|
1333
|
-
preCompletedKeys.add(fieldKey);
|
|
1334
|
-
} else if (fieldState === void 0 && require_dependency.isWrappedDependencySource(fieldParser)) {
|
|
1335
|
-
const pendingState = fieldParser[require_dependency.wrappedDependencySourceMarker];
|
|
1336
|
-
const completed = await fieldParser.complete([pendingState], exec);
|
|
1337
|
-
if (require_dependency.isDependencySourceState(completed)) {
|
|
1338
|
-
preCompletedState[fieldKey] = completed;
|
|
1339
|
-
preCompletedKeys.add(fieldKey);
|
|
1340
|
-
} else preCompletedState[fieldKey] = fieldState;
|
|
1341
|
-
} else if (fieldState != null && !Array.isArray(fieldState) && !require_dependency.isDependencySourceState(fieldState) && (require_dependency.isWrappedDependencySource(fieldParser) || require_dependency.isPendingDependencySourceState(fieldParser.initialState))) {
|
|
1342
|
-
const annotatedFieldState = getFieldState(field, fieldParser);
|
|
1343
|
-
const completed = await fieldParser.complete(annotatedFieldState, exec);
|
|
1344
|
-
const depState = wrapAsDependencySourceState(completed, fieldParser);
|
|
1345
|
-
if (depState) {
|
|
1346
|
-
preCompletedState[fieldKey] = depState;
|
|
1347
|
-
preCompletedKeys.add(fieldKey);
|
|
1348
|
-
} else preCompletedState[fieldKey] = annotatedFieldState;
|
|
1349
|
-
} else preCompletedState[fieldKey] = getFieldState(field, fieldParser);
|
|
1360
|
+
annotatedState[fieldKey] = getFieldState(field, fieldParser);
|
|
1350
1361
|
}
|
|
1351
|
-
const
|
|
1362
|
+
const resolvedFieldStates = await require_dependency_runtime.resolveStateWithRuntimeAsync(annotatedState, runtime);
|
|
1352
1363
|
const result = {};
|
|
1353
1364
|
const deferredKeys = /* @__PURE__ */ new Map();
|
|
1354
1365
|
let hasDeferred = false;
|
|
1355
|
-
const getCompletionFieldState = createFieldStateGetter(state);
|
|
1356
1366
|
for (const field of parserKeys) {
|
|
1357
1367
|
const fieldKey = field;
|
|
1358
|
-
const fieldResolvedState = resolvedState[fieldKey];
|
|
1359
1368
|
const fieldParser = parsers[field];
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
else hasDeferred = true;
|
|
1367
|
-
} else return {
|
|
1368
|
-
success: false,
|
|
1369
|
-
error: depResult.error
|
|
1370
|
-
};
|
|
1371
|
-
continue;
|
|
1369
|
+
let valueResult;
|
|
1370
|
+
const preCompletedResult = preCompleted.get(fieldKey);
|
|
1371
|
+
if (preCompletedResult !== void 0) valueResult = unwrapCompleteResult(preCompletedResult);
|
|
1372
|
+
else {
|
|
1373
|
+
const fieldState = resolvedFieldStates[fieldKey];
|
|
1374
|
+
valueResult = unwrapCompleteResult(await fieldParser.complete(fieldState, childExec));
|
|
1372
1375
|
}
|
|
1373
|
-
const completionState = fieldResolvedState === void 0 ? getCompletionFieldState(field, fieldParser) : fieldResolvedState;
|
|
1374
|
-
const valueResult = await fieldParser.complete(completionState, exec);
|
|
1375
1376
|
if (valueResult.success) {
|
|
1376
1377
|
result[fieldKey] = valueResult.value;
|
|
1377
1378
|
if (valueResult.deferred) if (valueResult.deferredKeys) deferredKeys.set(fieldKey, valueResult.deferredKeys);
|
|
@@ -1635,48 +1636,27 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
1635
1636
|
complete(state, exec) {
|
|
1636
1637
|
return require_mode_dispatch.dispatchByMode(combinedMode, () => {
|
|
1637
1638
|
const stateArray = state;
|
|
1638
|
-
const
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
preCompletedState[i] = completed;
|
|
1648
|
-
} else if (elementState === void 0 && require_dependency.isWrappedDependencySource(elementParser)) {
|
|
1649
|
-
const pendingState = elementParser[require_dependency.wrappedDependencySourceMarker];
|
|
1650
|
-
const completed = elementParser.complete([pendingState], exec);
|
|
1651
|
-
preCompletedState[i] = completed;
|
|
1652
|
-
} else preCompletedState[i] = elementState;
|
|
1653
|
-
}
|
|
1654
|
-
const resolvedState = resolveDeferredParseStates(preCompletedState);
|
|
1655
|
-
const resolvedArray = resolvedState;
|
|
1639
|
+
const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
|
|
1640
|
+
const childExec = {
|
|
1641
|
+
...exec,
|
|
1642
|
+
dependencyRuntime: runtime
|
|
1643
|
+
};
|
|
1644
|
+
const tuplePairs = syncParsers.map((p, i) => [String(i), p]);
|
|
1645
|
+
const tupleState = Object.fromEntries(stateArray.map((s, i) => [String(i), s]));
|
|
1646
|
+
const preCompleted = preCompleteAndRegisterDependencies(tupleState, tuplePairs, runtime.registry, childExec);
|
|
1647
|
+
const resolvedArray = require_dependency_runtime.resolveStateWithRuntime(stateArray, runtime);
|
|
1656
1648
|
const result = [];
|
|
1657
1649
|
const deferredKeys = /* @__PURE__ */ new Map();
|
|
1658
1650
|
let hasDeferred = false;
|
|
1659
1651
|
for (let i = 0; i < syncParsers.length; i++) {
|
|
1660
|
-
const elementResolvedState = resolvedArray[i];
|
|
1661
1652
|
const elementParser = syncParsers[i];
|
|
1662
|
-
|
|
1663
|
-
const
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
if (depResult.success) {
|
|
1669
|
-
result[i] = depResult.value;
|
|
1670
|
-
if (depResult.deferred) if (depResult.deferredKeys) deferredKeys.set(i, depResult.deferredKeys);
|
|
1671
|
-
else if (depResult.value == null || typeof depResult.value !== "object") deferredKeys.set(i, null);
|
|
1672
|
-
else hasDeferred = true;
|
|
1673
|
-
} else return {
|
|
1674
|
-
success: false,
|
|
1675
|
-
error: depResult.error
|
|
1676
|
-
};
|
|
1677
|
-
continue;
|
|
1653
|
+
let valueResult;
|
|
1654
|
+
const preCompletedResult = preCompleted.get(String(i));
|
|
1655
|
+
if (preCompletedResult !== void 0) valueResult = unwrapCompleteResult(preCompletedResult);
|
|
1656
|
+
else {
|
|
1657
|
+
const elementState = prepareStateForCompletion(resolvedArray[i], elementParser);
|
|
1658
|
+
valueResult = unwrapCompleteResult(elementParser.complete(elementState, childExec));
|
|
1678
1659
|
}
|
|
1679
|
-
const valueResult = elementParser.complete(elementResolvedState, exec);
|
|
1680
1660
|
if (valueResult.success) {
|
|
1681
1661
|
result[i] = valueResult.value;
|
|
1682
1662
|
if (valueResult.deferred) if (valueResult.deferredKeys) deferredKeys.set(i, valueResult.deferredKeys);
|
|
@@ -1698,48 +1678,27 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
|
|
|
1698
1678
|
};
|
|
1699
1679
|
}, async () => {
|
|
1700
1680
|
const stateArray = state;
|
|
1701
|
-
const
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
preCompletedState[i] = completed;
|
|
1711
|
-
} else if (elementState === void 0 && require_dependency.isWrappedDependencySource(elementParser)) {
|
|
1712
|
-
const pendingState = elementParser[require_dependency.wrappedDependencySourceMarker];
|
|
1713
|
-
const completed = await elementParser.complete([pendingState], exec);
|
|
1714
|
-
preCompletedState[i] = completed;
|
|
1715
|
-
} else preCompletedState[i] = elementState;
|
|
1716
|
-
}
|
|
1717
|
-
const resolvedState = await resolveDeferredParseStatesAsync(preCompletedState);
|
|
1718
|
-
const resolvedArray = resolvedState;
|
|
1681
|
+
const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
|
|
1682
|
+
const childExec = {
|
|
1683
|
+
...exec,
|
|
1684
|
+
dependencyRuntime: runtime
|
|
1685
|
+
};
|
|
1686
|
+
const tuplePairs = parsers.map((p, i) => [String(i), p]);
|
|
1687
|
+
const tupleState = Object.fromEntries(stateArray.map((s, i) => [String(i), s]));
|
|
1688
|
+
const preCompleted = await preCompleteAndRegisterDependenciesAsync(tupleState, tuplePairs, runtime.registry, childExec);
|
|
1689
|
+
const resolvedArray = await require_dependency_runtime.resolveStateWithRuntimeAsync(stateArray, runtime);
|
|
1719
1690
|
const result = [];
|
|
1720
1691
|
const deferredKeys = /* @__PURE__ */ new Map();
|
|
1721
1692
|
let hasDeferred = false;
|
|
1722
1693
|
for (let i = 0; i < parsers.length; i++) {
|
|
1723
|
-
const elementResolvedState = resolvedArray[i];
|
|
1724
1694
|
const elementParser = parsers[i];
|
|
1725
|
-
|
|
1726
|
-
const
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
if (depResult.success) {
|
|
1732
|
-
result[i] = depResult.value;
|
|
1733
|
-
if (depResult.deferred) if (depResult.deferredKeys) deferredKeys.set(i, depResult.deferredKeys);
|
|
1734
|
-
else if (depResult.value == null || typeof depResult.value !== "object") deferredKeys.set(i, null);
|
|
1735
|
-
else hasDeferred = true;
|
|
1736
|
-
} else return {
|
|
1737
|
-
success: false,
|
|
1738
|
-
error: depResult.error
|
|
1739
|
-
};
|
|
1740
|
-
continue;
|
|
1695
|
+
let valueResult;
|
|
1696
|
+
const preCompletedResult = preCompleted.get(String(i));
|
|
1697
|
+
if (preCompletedResult !== void 0) valueResult = unwrapCompleteResult(preCompletedResult);
|
|
1698
|
+
else {
|
|
1699
|
+
const elementState = prepareStateForCompletion(resolvedArray[i], elementParser);
|
|
1700
|
+
valueResult = unwrapCompleteResult(await elementParser.complete(elementState, childExec));
|
|
1741
1701
|
}
|
|
1742
|
-
const valueResult = await elementParser.complete(elementResolvedState, exec);
|
|
1743
1702
|
if (valueResult.success) {
|
|
1744
1703
|
result[i] = valueResult.value;
|
|
1745
1704
|
if (valueResult.deferred) if (valueResult.deferredKeys) deferredKeys.set(i, valueResult.deferredKeys);
|
|
@@ -1999,20 +1958,25 @@ function merge(...args) {
|
|
|
1999
1958
|
return parser.initialState;
|
|
2000
1959
|
};
|
|
2001
1960
|
if (!isAsync) {
|
|
1961
|
+
const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
|
|
1962
|
+
const childExec = {
|
|
1963
|
+
...exec,
|
|
1964
|
+
dependencyRuntime: runtime
|
|
1965
|
+
};
|
|
2002
1966
|
const childFieldPairs = collectChildFieldParsers(syncParsers);
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
const resolvedState = resolveDeferredParseStates(state, registry);
|
|
1967
|
+
preCompleteAndRegisterDependencies(state, childFieldPairs, runtime.registry, childExec);
|
|
1968
|
+
const resolvedState = require_dependency_runtime.resolveStateWithRuntime(state, runtime);
|
|
2006
1969
|
const object$1 = {};
|
|
2007
1970
|
const deferredKeys = /* @__PURE__ */ new Map();
|
|
2008
1971
|
let hasDeferred = false;
|
|
2009
1972
|
for (let i = 0; i < syncParsers.length; i++) {
|
|
2010
1973
|
const parser = syncParsers[i];
|
|
2011
1974
|
const parserState = extractCompleteState(parser, resolvedState, i);
|
|
2012
|
-
const result = parser.complete(parserState,
|
|
1975
|
+
const result = unwrapCompleteResult(parser.complete(parserState, childExec));
|
|
2013
1976
|
if (!result.success) return result;
|
|
2014
|
-
|
|
2015
|
-
|
|
1977
|
+
const resultValue = result.value;
|
|
1978
|
+
for (const field in resultValue) {
|
|
1979
|
+
object$1[field] = resultValue[field];
|
|
2016
1980
|
if (deferredKeys.has(field) && !(result.deferred && result.deferredKeys?.has(field))) deferredKeys.delete(field);
|
|
2017
1981
|
}
|
|
2018
1982
|
if (result.deferred && result.deferredKeys) for (const [key, value] of result.deferredKeys) deferredKeys.set(key, value);
|
|
@@ -2029,20 +1993,25 @@ function merge(...args) {
|
|
|
2029
1993
|
};
|
|
2030
1994
|
}
|
|
2031
1995
|
return (async () => {
|
|
1996
|
+
const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
|
|
1997
|
+
const childExec = {
|
|
1998
|
+
...exec,
|
|
1999
|
+
dependencyRuntime: runtime
|
|
2000
|
+
};
|
|
2032
2001
|
const childFieldPairs = collectChildFieldParsers(parsers);
|
|
2033
|
-
|
|
2034
|
-
await
|
|
2035
|
-
const resolvedState = await resolveDeferredParseStatesAsync(state, registry);
|
|
2002
|
+
await preCompleteAndRegisterDependenciesAsync(state, childFieldPairs, runtime.registry, childExec);
|
|
2003
|
+
const resolvedState = await require_dependency_runtime.resolveStateWithRuntimeAsync(state, runtime);
|
|
2036
2004
|
const object$1 = {};
|
|
2037
2005
|
const deferredKeys = /* @__PURE__ */ new Map();
|
|
2038
2006
|
let hasDeferred = false;
|
|
2039
2007
|
for (let i = 0; i < parsers.length; i++) {
|
|
2040
2008
|
const parser = parsers[i];
|
|
2041
2009
|
const parserState = extractCompleteState(parser, resolvedState, i);
|
|
2042
|
-
const result = await parser.complete(parserState,
|
|
2010
|
+
const result = unwrapCompleteResult(await parser.complete(parserState, childExec));
|
|
2043
2011
|
if (!result.success) return result;
|
|
2044
|
-
|
|
2045
|
-
|
|
2012
|
+
const resultValue = result.value;
|
|
2013
|
+
for (const field in resultValue) {
|
|
2014
|
+
object$1[field] = resultValue[field];
|
|
2046
2015
|
if (deferredKeys.has(field) && !(result.deferred && result.deferredKeys?.has(field))) deferredKeys.delete(field);
|
|
2047
2016
|
}
|
|
2048
2017
|
if (result.deferred && result.deferredKeys) for (const [key, value] of result.deferredKeys) deferredKeys.set(key, value);
|
|
@@ -2077,15 +2046,13 @@ function merge(...args) {
|
|
|
2077
2046
|
return p.initialState;
|
|
2078
2047
|
};
|
|
2079
2048
|
if (isAsync) return async function* () {
|
|
2080
|
-
const
|
|
2049
|
+
const runtime$1 = require_dependency_runtime.createDependencyRuntimeContext(context.dependencyRegistry?.clone());
|
|
2081
2050
|
const childFieldPairs$1 = collectChildFieldParsers(parsers);
|
|
2082
|
-
if (context.state && typeof context.state === "object")
|
|
2083
|
-
|
|
2084
|
-
collectDependencies(context.state, registry$1);
|
|
2085
|
-
} else await completeDependencySourceDefaultsAsync(context, childFieldPairs$1, registry$1, context.exec);
|
|
2051
|
+
if (context.state && typeof context.state === "object") require_dependency_runtime.collectSourcesFromState(context.state, runtime$1);
|
|
2052
|
+
await completeDependencySourceDefaultsAsync(context, childFieldPairs$1, runtime$1.registry, context.exec);
|
|
2086
2053
|
const contextWithRegistry$1 = {
|
|
2087
2054
|
...context,
|
|
2088
|
-
dependencyRegistry:
|
|
2055
|
+
dependencyRegistry: runtime$1.registry
|
|
2089
2056
|
};
|
|
2090
2057
|
const suggestions = [];
|
|
2091
2058
|
for (let i = 0; i < parsers.length; i++) {
|
|
@@ -2100,15 +2067,13 @@ function merge(...args) {
|
|
|
2100
2067
|
}
|
|
2101
2068
|
yield* require_suggestion.deduplicateSuggestions(suggestions);
|
|
2102
2069
|
}();
|
|
2103
|
-
const
|
|
2070
|
+
const runtime = require_dependency_runtime.createDependencyRuntimeContext(context.dependencyRegistry?.clone());
|
|
2104
2071
|
const childFieldPairs = collectChildFieldParsers(syncParsers);
|
|
2105
|
-
if (context.state && typeof context.state === "object")
|
|
2106
|
-
|
|
2107
|
-
collectDependencies(context.state, registry);
|
|
2108
|
-
} else completeDependencySourceDefaults(context, childFieldPairs, registry, context.exec);
|
|
2072
|
+
if (context.state && typeof context.state === "object") require_dependency_runtime.collectSourcesFromState(context.state, runtime);
|
|
2073
|
+
completeDependencySourceDefaults(context, childFieldPairs, runtime.registry, context.exec);
|
|
2109
2074
|
const contextWithRegistry = {
|
|
2110
2075
|
...context,
|
|
2111
|
-
dependencyRegistry: registry
|
|
2076
|
+
dependencyRegistry: runtime.registry
|
|
2112
2077
|
};
|
|
2113
2078
|
return function* () {
|
|
2114
2079
|
const suggestions = [];
|
|
@@ -2195,12 +2160,12 @@ function merge(...args) {
|
|
|
2195
2160
|
*/
|
|
2196
2161
|
function buildSuggestRegistry(preParsedContext) {
|
|
2197
2162
|
const stateArray = preParsedContext.state;
|
|
2198
|
-
const
|
|
2199
|
-
if (stateArray && Array.isArray(stateArray))
|
|
2163
|
+
const runtime = require_dependency_runtime.createDependencyRuntimeContext(preParsedContext.dependencyRegistry?.clone());
|
|
2164
|
+
if (stateArray && Array.isArray(stateArray)) require_dependency_runtime.collectSourcesFromState(stateArray, runtime);
|
|
2200
2165
|
return {
|
|
2201
2166
|
context: {
|
|
2202
2167
|
...preParsedContext,
|
|
2203
|
-
dependencyRegistry: registry
|
|
2168
|
+
dependencyRegistry: runtime.registry
|
|
2204
2169
|
},
|
|
2205
2170
|
stateArray
|
|
2206
2171
|
};
|
|
@@ -2432,16 +2397,19 @@ function concat(...parsers) {
|
|
|
2432
2397
|
};
|
|
2433
2398
|
const completeSync = (state, exec) => {
|
|
2434
2399
|
const stateArray = state;
|
|
2435
|
-
const
|
|
2436
|
-
|
|
2437
|
-
|
|
2400
|
+
const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
|
|
2401
|
+
const childExec = {
|
|
2402
|
+
...exec,
|
|
2403
|
+
dependencyRuntime: runtime
|
|
2404
|
+
};
|
|
2405
|
+
const resolvedArray = require_dependency_runtime.resolveStateWithRuntime(stateArray, runtime);
|
|
2438
2406
|
const results = [];
|
|
2439
2407
|
const deferredKeys = /* @__PURE__ */ new Map();
|
|
2440
2408
|
let hasDeferred = false;
|
|
2441
2409
|
for (let i = 0; i < syncParsers.length; i++) {
|
|
2442
2410
|
const parser = syncParsers[i];
|
|
2443
|
-
const parserState =
|
|
2444
|
-
const result = parser.complete(parserState,
|
|
2411
|
+
const parserState = prepareStateForCompletion(resolvedArray[i], parser);
|
|
2412
|
+
const result = unwrapCompleteResult(parser.complete(parserState, childExec));
|
|
2445
2413
|
if (!result.success) return result;
|
|
2446
2414
|
const baseIndex = results.length;
|
|
2447
2415
|
if (Array.isArray(result.value)) {
|
|
@@ -2471,16 +2439,19 @@ function concat(...parsers) {
|
|
|
2471
2439
|
};
|
|
2472
2440
|
const completeAsync = async (state, exec) => {
|
|
2473
2441
|
const stateArray = state;
|
|
2474
|
-
const
|
|
2475
|
-
|
|
2476
|
-
|
|
2442
|
+
const runtime = exec?.dependencyRuntime ?? require_dependency_runtime.createDependencyRuntimeContext(exec?.dependencyRegistry);
|
|
2443
|
+
const childExec = {
|
|
2444
|
+
...exec,
|
|
2445
|
+
dependencyRuntime: runtime
|
|
2446
|
+
};
|
|
2447
|
+
const resolvedArray = await require_dependency_runtime.resolveStateWithRuntimeAsync(stateArray, runtime);
|
|
2477
2448
|
const results = [];
|
|
2478
2449
|
const deferredKeys = /* @__PURE__ */ new Map();
|
|
2479
2450
|
let hasDeferred = false;
|
|
2480
2451
|
for (let i = 0; i < parsers.length; i++) {
|
|
2481
2452
|
const parser = parsers[i];
|
|
2482
|
-
const parserState =
|
|
2483
|
-
const result = await parser.complete(parserState,
|
|
2453
|
+
const parserState = prepareStateForCompletion(resolvedArray[i], parser);
|
|
2454
|
+
const result = unwrapCompleteResult(await parser.complete(parserState, childExec));
|
|
2484
2455
|
if (!result.success) return result;
|
|
2485
2456
|
const baseIndex = results.length;
|
|
2486
2457
|
if (Array.isArray(result.value)) {
|