@optique/core 1.0.0-dev.1495 → 1.0.0-dev.1500

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.
@@ -1225,6 +1225,8 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1225
1225
  }
1226
1226
  const resolvedState = resolveDeferredParseStates(preCompletedState);
1227
1227
  const result = {};
1228
+ const deferredKeys = /* @__PURE__ */ new Map();
1229
+ let hasDeferred = false;
1228
1230
  const getCompletionFieldState = createFieldStateGetter(state);
1229
1231
  for (const field of parserKeys) {
1230
1232
  const fieldKey = field;
@@ -1232,8 +1234,12 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1232
1234
  const fieldParser = parsers[field];
1233
1235
  if (isDependencySourceState(fieldResolvedState) && preCompletedKeys.has(fieldKey)) {
1234
1236
  const depResult = fieldResolvedState.result;
1235
- if (depResult.success) result[fieldKey] = depResult.value;
1236
- else return {
1237
+ if (depResult.success) {
1238
+ result[fieldKey] = depResult.value;
1239
+ if (depResult.deferred) if (depResult.deferredKeys) deferredKeys.set(fieldKey, depResult.deferredKeys);
1240
+ else if (depResult.value == null || typeof depResult.value !== "object") deferredKeys.set(fieldKey, null);
1241
+ else hasDeferred = true;
1242
+ } else return {
1237
1243
  success: false,
1238
1244
  error: depResult.error
1239
1245
  };
@@ -1241,15 +1247,24 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1241
1247
  }
1242
1248
  const completionState = fieldResolvedState === void 0 ? getCompletionFieldState(field, fieldParser) : fieldResolvedState;
1243
1249
  const valueResult = fieldParser.complete(completionState);
1244
- if (valueResult.success) result[fieldKey] = valueResult.value;
1245
- else return {
1250
+ if (valueResult.success) {
1251
+ result[fieldKey] = valueResult.value;
1252
+ if (valueResult.deferred) if (valueResult.deferredKeys) deferredKeys.set(fieldKey, valueResult.deferredKeys);
1253
+ else if (valueResult.value == null || typeof valueResult.value !== "object") deferredKeys.set(fieldKey, null);
1254
+ else hasDeferred = true;
1255
+ } else return {
1246
1256
  success: false,
1247
1257
  error: valueResult.error
1248
1258
  };
1249
1259
  }
1260
+ const isDeferred = deferredKeys.size > 0 || hasDeferred;
1250
1261
  return {
1251
1262
  success: true,
1252
- value: result
1263
+ value: result,
1264
+ ...isDeferred ? {
1265
+ deferred: true,
1266
+ ...deferredKeys.size > 0 ? { deferredKeys } : {}
1267
+ } : {}
1253
1268
  };
1254
1269
  }, async () => {
1255
1270
  const preCompletedState = {};
@@ -1286,6 +1301,8 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1286
1301
  }
1287
1302
  const resolvedState = await resolveDeferredParseStatesAsync(preCompletedState);
1288
1303
  const result = {};
1304
+ const deferredKeys = /* @__PURE__ */ new Map();
1305
+ let hasDeferred = false;
1289
1306
  const getCompletionFieldState = createFieldStateGetter(state);
1290
1307
  for (const field of parserKeys) {
1291
1308
  const fieldKey = field;
@@ -1293,8 +1310,12 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1293
1310
  const fieldParser = parsers[field];
1294
1311
  if (isDependencySourceState(fieldResolvedState) && preCompletedKeys.has(fieldKey)) {
1295
1312
  const depResult = fieldResolvedState.result;
1296
- if (depResult.success) result[fieldKey] = depResult.value;
1297
- else return {
1313
+ if (depResult.success) {
1314
+ result[fieldKey] = depResult.value;
1315
+ if (depResult.deferred) if (depResult.deferredKeys) deferredKeys.set(fieldKey, depResult.deferredKeys);
1316
+ else if (depResult.value == null || typeof depResult.value !== "object") deferredKeys.set(fieldKey, null);
1317
+ else hasDeferred = true;
1318
+ } else return {
1298
1319
  success: false,
1299
1320
  error: depResult.error
1300
1321
  };
@@ -1302,15 +1323,24 @@ function object(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1302
1323
  }
1303
1324
  const completionState = fieldResolvedState === void 0 ? getCompletionFieldState(field, fieldParser) : fieldResolvedState;
1304
1325
  const valueResult = await fieldParser.complete(completionState);
1305
- if (valueResult.success) result[fieldKey] = valueResult.value;
1306
- else return {
1326
+ if (valueResult.success) {
1327
+ result[fieldKey] = valueResult.value;
1328
+ if (valueResult.deferred) if (valueResult.deferredKeys) deferredKeys.set(fieldKey, valueResult.deferredKeys);
1329
+ else if (valueResult.value == null || typeof valueResult.value !== "object") deferredKeys.set(fieldKey, null);
1330
+ else hasDeferred = true;
1331
+ } else return {
1307
1332
  success: false,
1308
1333
  error: valueResult.error
1309
1334
  };
1310
1335
  }
1336
+ const isDeferred = deferredKeys.size > 0 || hasDeferred;
1311
1337
  return {
1312
1338
  success: true,
1313
- value: result
1339
+ value: result,
1340
+ ...isDeferred ? {
1341
+ deferred: true,
1342
+ ...deferredKeys.size > 0 ? { deferredKeys } : {}
1343
+ } : {}
1314
1344
  };
1315
1345
  });
1316
1346
  },
@@ -1550,6 +1580,8 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1550
1580
  const resolvedState = resolveDeferredParseStates(preCompletedState);
1551
1581
  const resolvedArray = resolvedState;
1552
1582
  const result = [];
1583
+ const deferredKeys = /* @__PURE__ */ new Map();
1584
+ let hasDeferred = false;
1553
1585
  for (let i = 0; i < syncParsers.length; i++) {
1554
1586
  const elementResolvedState = resolvedArray[i];
1555
1587
  const elementParser = syncParsers[i];
@@ -1559,23 +1591,36 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1559
1591
  const wasPreCompletedCase3 = originalElementState === void 0 && isWrappedDependencySource(elementParser);
1560
1592
  if (isDependencySourceState(elementResolvedState) && (wasPreCompletedCase1 || wasPreCompletedCase2 || wasPreCompletedCase3)) {
1561
1593
  const depResult = elementResolvedState.result;
1562
- if (depResult.success) result[i] = depResult.value;
1563
- else return {
1594
+ if (depResult.success) {
1595
+ result[i] = depResult.value;
1596
+ if (depResult.deferred) if (depResult.deferredKeys) deferredKeys.set(i, depResult.deferredKeys);
1597
+ else if (depResult.value == null || typeof depResult.value !== "object") deferredKeys.set(i, null);
1598
+ else hasDeferred = true;
1599
+ } else return {
1564
1600
  success: false,
1565
1601
  error: depResult.error
1566
1602
  };
1567
1603
  continue;
1568
1604
  }
1569
1605
  const valueResult = elementParser.complete(elementResolvedState);
1570
- if (valueResult.success) result[i] = valueResult.value;
1571
- else return {
1606
+ if (valueResult.success) {
1607
+ result[i] = valueResult.value;
1608
+ if (valueResult.deferred) if (valueResult.deferredKeys) deferredKeys.set(i, valueResult.deferredKeys);
1609
+ else if (valueResult.value == null || typeof valueResult.value !== "object") deferredKeys.set(i, null);
1610
+ else hasDeferred = true;
1611
+ } else return {
1572
1612
  success: false,
1573
1613
  error: valueResult.error
1574
1614
  };
1575
1615
  }
1616
+ const isDeferred = deferredKeys.size > 0 || hasDeferred;
1576
1617
  return {
1577
1618
  success: true,
1578
- value: result
1619
+ value: result,
1620
+ ...isDeferred ? {
1621
+ deferred: true,
1622
+ ...deferredKeys.size > 0 ? { deferredKeys } : {}
1623
+ } : {}
1579
1624
  };
1580
1625
  }, async () => {
1581
1626
  const stateArray = state;
@@ -1598,6 +1643,8 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1598
1643
  const resolvedState = await resolveDeferredParseStatesAsync(preCompletedState);
1599
1644
  const resolvedArray = resolvedState;
1600
1645
  const result = [];
1646
+ const deferredKeys = /* @__PURE__ */ new Map();
1647
+ let hasDeferred = false;
1601
1648
  for (let i = 0; i < parsers.length; i++) {
1602
1649
  const elementResolvedState = resolvedArray[i];
1603
1650
  const elementParser = parsers[i];
@@ -1607,23 +1654,36 @@ function tuple(labelOrParsers, maybeParsersOrOptions, maybeOptions) {
1607
1654
  const wasPreCompletedCase3 = originalElementState === void 0 && isWrappedDependencySource(elementParser);
1608
1655
  if (isDependencySourceState(elementResolvedState) && (wasPreCompletedCase1 || wasPreCompletedCase2 || wasPreCompletedCase3)) {
1609
1656
  const depResult = elementResolvedState.result;
1610
- if (depResult.success) result[i] = depResult.value;
1611
- else return {
1657
+ if (depResult.success) {
1658
+ result[i] = depResult.value;
1659
+ if (depResult.deferred) if (depResult.deferredKeys) deferredKeys.set(i, depResult.deferredKeys);
1660
+ else if (depResult.value == null || typeof depResult.value !== "object") deferredKeys.set(i, null);
1661
+ else hasDeferred = true;
1662
+ } else return {
1612
1663
  success: false,
1613
1664
  error: depResult.error
1614
1665
  };
1615
1666
  continue;
1616
1667
  }
1617
1668
  const valueResult = await elementParser.complete(elementResolvedState);
1618
- if (valueResult.success) result[i] = valueResult.value;
1619
- else return {
1669
+ if (valueResult.success) {
1670
+ result[i] = valueResult.value;
1671
+ if (valueResult.deferred) if (valueResult.deferredKeys) deferredKeys.set(i, valueResult.deferredKeys);
1672
+ else if (valueResult.value == null || typeof valueResult.value !== "object") deferredKeys.set(i, null);
1673
+ else hasDeferred = true;
1674
+ } else return {
1620
1675
  success: false,
1621
1676
  error: valueResult.error
1622
1677
  };
1623
1678
  }
1679
+ const isDeferred = deferredKeys.size > 0 || hasDeferred;
1624
1680
  return {
1625
1681
  success: true,
1626
- value: result
1682
+ value: result,
1683
+ ...isDeferred ? {
1684
+ deferred: true,
1685
+ ...deferredKeys.size > 0 ? { deferredKeys } : {}
1686
+ } : {}
1627
1687
  };
1628
1688
  });
1629
1689
  },
@@ -1842,16 +1902,28 @@ function merge(...args) {
1842
1902
  preCompleteAndRegisterDependencies(state, childFieldPairs, registry);
1843
1903
  const resolvedState = resolveDeferredParseStates(state, registry);
1844
1904
  const object$1 = {};
1905
+ const deferredKeys = /* @__PURE__ */ new Map();
1906
+ let hasDeferred = false;
1845
1907
  for (let i = 0; i < syncParsers.length; i++) {
1846
1908
  const parser = syncParsers[i];
1847
1909
  const parserState = extractCompleteState(parser, resolvedState, i);
1848
1910
  const result = parser.complete(parserState);
1849
1911
  if (!result.success) return result;
1850
- for (const field in result.value) object$1[field] = result.value[field];
1912
+ for (const field in result.value) {
1913
+ object$1[field] = result.value[field];
1914
+ if (deferredKeys.has(field) && !(result.deferred && result.deferredKeys?.has(field))) deferredKeys.delete(field);
1915
+ }
1916
+ if (result.deferred && result.deferredKeys) for (const [key, value] of result.deferredKeys) deferredKeys.set(key, value);
1917
+ else if (result.deferred) hasDeferred = true;
1851
1918
  }
1919
+ const isDeferred = deferredKeys.size > 0 || hasDeferred;
1852
1920
  return {
1853
1921
  success: true,
1854
- value: object$1
1922
+ value: object$1,
1923
+ ...isDeferred ? {
1924
+ deferred: true,
1925
+ ...deferredKeys.size > 0 ? { deferredKeys } : {}
1926
+ } : {}
1855
1927
  };
1856
1928
  }
1857
1929
  return (async () => {
@@ -1860,16 +1932,28 @@ function merge(...args) {
1860
1932
  await preCompleteAndRegisterDependenciesAsync(state, childFieldPairs, registry);
1861
1933
  const resolvedState = await resolveDeferredParseStatesAsync(state, registry);
1862
1934
  const object$1 = {};
1935
+ const deferredKeys = /* @__PURE__ */ new Map();
1936
+ let hasDeferred = false;
1863
1937
  for (let i = 0; i < parsers.length; i++) {
1864
1938
  const parser = parsers[i];
1865
1939
  const parserState = extractCompleteState(parser, resolvedState, i);
1866
1940
  const result = await parser.complete(parserState);
1867
1941
  if (!result.success) return result;
1868
- for (const field in result.value) object$1[field] = result.value[field];
1942
+ for (const field in result.value) {
1943
+ object$1[field] = result.value[field];
1944
+ if (deferredKeys.has(field) && !(result.deferred && result.deferredKeys?.has(field))) deferredKeys.delete(field);
1945
+ }
1946
+ if (result.deferred && result.deferredKeys) for (const [key, value] of result.deferredKeys) deferredKeys.set(key, value);
1947
+ else if (result.deferred) hasDeferred = true;
1869
1948
  }
1949
+ const isDeferred = deferredKeys.size > 0 || hasDeferred;
1870
1950
  return {
1871
1951
  success: true,
1872
- value: object$1
1952
+ value: object$1,
1953
+ ...isDeferred ? {
1954
+ deferred: true,
1955
+ ...deferredKeys.size > 0 ? { deferredKeys } : {}
1956
+ } : {}
1873
1957
  };
1874
1958
  })();
1875
1959
  },
@@ -2249,17 +2333,37 @@ function concat(...parsers) {
2249
2333
  for (let i = 0; i < stateArray.length; i++) combinedState[i] = stateArray[i];
2250
2334
  const resolvedCombinedState = resolveDeferredParseStates(combinedState);
2251
2335
  const results = [];
2336
+ const deferredKeys = /* @__PURE__ */ new Map();
2337
+ let hasDeferred = false;
2252
2338
  for (let i = 0; i < syncParsers.length; i++) {
2253
2339
  const parser = syncParsers[i];
2254
2340
  const parserState = resolvedCombinedState[i];
2255
2341
  const result = parser.complete(parserState);
2256
2342
  if (!result.success) return result;
2257
- if (Array.isArray(result.value)) results.push(...result.value);
2258
- else results.push(result.value);
2343
+ const baseIndex = results.length;
2344
+ if (Array.isArray(result.value)) {
2345
+ results.push(...result.value);
2346
+ if (result.deferred && result.deferredKeys) for (const [key, value] of result.deferredKeys) {
2347
+ const numKey = typeof key === "string" ? Number(key) : key;
2348
+ if (typeof numKey === "number" && Number.isInteger(numKey)) deferredKeys.set(baseIndex + numKey, value);
2349
+ else deferredKeys.set(key, value);
2350
+ }
2351
+ else if (result.deferred) hasDeferred = true;
2352
+ } else {
2353
+ results.push(result.value);
2354
+ if (result.deferred) if (result.deferredKeys) deferredKeys.set(baseIndex, result.deferredKeys);
2355
+ else if (result.value == null || typeof result.value !== "object") deferredKeys.set(baseIndex, null);
2356
+ else hasDeferred = true;
2357
+ }
2259
2358
  }
2359
+ const isDeferred = deferredKeys.size > 0 || hasDeferred;
2260
2360
  return {
2261
2361
  success: true,
2262
- value: results
2362
+ value: results,
2363
+ ...isDeferred ? {
2364
+ deferred: true,
2365
+ ...deferredKeys.size > 0 ? { deferredKeys } : {}
2366
+ } : {}
2263
2367
  };
2264
2368
  };
2265
2369
  const completeAsync = async (state) => {
@@ -2268,17 +2372,37 @@ function concat(...parsers) {
2268
2372
  for (let i = 0; i < stateArray.length; i++) combinedState[i] = stateArray[i];
2269
2373
  const resolvedCombinedState = await resolveDeferredParseStatesAsync(combinedState);
2270
2374
  const results = [];
2375
+ const deferredKeys = /* @__PURE__ */ new Map();
2376
+ let hasDeferred = false;
2271
2377
  for (let i = 0; i < parsers.length; i++) {
2272
2378
  const parser = parsers[i];
2273
2379
  const parserState = resolvedCombinedState[i];
2274
2380
  const result = await parser.complete(parserState);
2275
2381
  if (!result.success) return result;
2276
- if (Array.isArray(result.value)) results.push(...result.value);
2277
- else results.push(result.value);
2382
+ const baseIndex = results.length;
2383
+ if (Array.isArray(result.value)) {
2384
+ results.push(...result.value);
2385
+ if (result.deferred && result.deferredKeys) for (const [key, value] of result.deferredKeys) {
2386
+ const numKey = typeof key === "string" ? Number(key) : key;
2387
+ if (typeof numKey === "number" && Number.isInteger(numKey)) deferredKeys.set(baseIndex + numKey, value);
2388
+ else deferredKeys.set(key, value);
2389
+ }
2390
+ else if (result.deferred) hasDeferred = true;
2391
+ } else {
2392
+ results.push(result.value);
2393
+ if (result.deferred) if (result.deferredKeys) deferredKeys.set(baseIndex, result.deferredKeys);
2394
+ else if (result.value == null || typeof result.value !== "object") deferredKeys.set(baseIndex, null);
2395
+ else hasDeferred = true;
2396
+ }
2278
2397
  }
2398
+ const isDeferred = deferredKeys.size > 0 || hasDeferred;
2279
2399
  return {
2280
2400
  success: true,
2281
- value: results
2401
+ value: results,
2402
+ ...isDeferred ? {
2403
+ deferred: true,
2404
+ ...deferredKeys.size > 0 ? { deferredKeys } : {}
2405
+ } : {}
2282
2406
  };
2283
2407
  };
2284
2408
  return {
@@ -2357,7 +2481,7 @@ function concat(...parsers) {
2357
2481
  };
2358
2482
  }
2359
2483
  function group(label, parser, options = {}) {
2360
- return {
2484
+ const groupParser = {
2361
2485
  $mode: parser.$mode,
2362
2486
  $valueType: parser.$valueType,
2363
2487
  $stateType: parser.$stateType,
@@ -2410,6 +2534,14 @@ function group(label, parser, options = {}) {
2410
2534
  };
2411
2535
  }
2412
2536
  };
2537
+ if ("placeholder" in parser) Object.defineProperty(groupParser, "placeholder", {
2538
+ get() {
2539
+ return parser.placeholder;
2540
+ },
2541
+ configurable: true,
2542
+ enumerable: false
2543
+ });
2544
+ return groupParser;
2413
2545
  }
2414
2546
  /**
2415
2547
  * Creates a conditional parser that selects different branch parsers based on
@@ -2699,7 +2831,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
2699
2831
  if (!defaultResult.success) return defaultResult;
2700
2832
  return {
2701
2833
  success: true,
2702
- value: [void 0, defaultResult.value]
2834
+ value: [void 0, defaultResult.value],
2835
+ ...defaultResult.deferred ? {
2836
+ deferred: true,
2837
+ ...defaultResult.deferredKeys ? { deferredKeys: new Map([[1, defaultResult.deferredKeys]]) } : defaultResult.value == null || typeof defaultResult.value !== "object" ? { deferredKeys: new Map([[1, null]]) } : {}
2838
+ } : {}
2703
2839
  };
2704
2840
  }
2705
2841
  return {
@@ -2730,7 +2866,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
2730
2866
  else discriminatorValue = state.selectedBranch.key;
2731
2867
  return {
2732
2868
  success: true,
2733
- value: [discriminatorValue, branchResult.value]
2869
+ value: [discriminatorValue, branchResult.value],
2870
+ ...branchResult.deferred ? {
2871
+ deferred: true,
2872
+ ...branchResult.deferredKeys ? { deferredKeys: new Map([[1, branchResult.deferredKeys]]) } : branchResult.value == null || typeof branchResult.value !== "object" ? { deferredKeys: new Map([[1, null]]) } : {}
2873
+ } : {}
2734
2874
  };
2735
2875
  };
2736
2876
  const completeAsync = async (state) => {
@@ -2741,7 +2881,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
2741
2881
  if (!defaultResult.success) return defaultResult;
2742
2882
  return {
2743
2883
  success: true,
2744
- value: [void 0, defaultResult.value]
2884
+ value: [void 0, defaultResult.value],
2885
+ ...defaultResult.deferred ? {
2886
+ deferred: true,
2887
+ ...defaultResult.deferredKeys ? { deferredKeys: new Map([[1, defaultResult.deferredKeys]]) } : defaultResult.value == null || typeof defaultResult.value !== "object" ? { deferredKeys: new Map([[1, null]]) } : {}
2888
+ } : {}
2745
2889
  };
2746
2890
  }
2747
2891
  return {
@@ -2772,7 +2916,11 @@ function conditional(discriminator, branches, defaultBranch, options) {
2772
2916
  else discriminatorValue = state.selectedBranch.key;
2773
2917
  return {
2774
2918
  success: true,
2775
- value: [discriminatorValue, branchResult.value]
2919
+ value: [discriminatorValue, branchResult.value],
2920
+ ...branchResult.deferred ? {
2921
+ deferred: true,
2922
+ ...branchResult.deferredKeys ? { deferredKeys: new Map([[1, branchResult.deferredKeys]]) } : branchResult.value == null || typeof branchResult.value !== "object" ? { deferredKeys: new Map([[1, null]]) } : {}
2923
+ } : {}
2776
2924
  };
2777
2925
  };
2778
2926
  function* suggestSync(context, prefix) {
package/dist/context.cjs CHANGED
@@ -1,42 +1,6 @@
1
1
 
2
2
  //#region src/context.ts
3
3
  /**
4
- * Brand symbol for placeholder values.
5
- *
6
- * Placeholder values are sentinel objects that represent values to be
7
- * resolved later (e.g., deferred interactive prompts). During two-phase
8
- * parsing, placeholder values are stripped from parsed results before they
9
- * are passed to phase-2 context annotation collection, and `map()`
10
- * transformations skip them.
11
- *
12
- * Packages that produce placeholder values should set this symbol as a
13
- * property on their sentinel objects:
14
- *
15
- * ~~~~ typescript
16
- * import { placeholder } from "@optique/core/context";
17
- *
18
- * class MyPlaceholder {
19
- * readonly [placeholder] = true;
20
- * }
21
- * ~~~~
22
- *
23
- * @since 1.0.0
24
- */
25
- const placeholder = Symbol.for("@optique/core/placeholder");
26
- /**
27
- * Tests whether a value is a placeholder.
28
- *
29
- * Returns `true` if the value is a non-null object carrying the
30
- * {@link placeholder} property.
31
- *
32
- * @param value The value to test.
33
- * @returns `true` if the value is a placeholder.
34
- * @since 1.0.0
35
- */
36
- function isPlaceholderValue(value) {
37
- return value != null && typeof value === "object" && placeholder in value;
38
- }
39
- /**
40
4
  * Checks whether a context is static (returns annotations without needing
41
5
  * parsed results).
42
6
  *
@@ -56,6 +20,4 @@ function isStaticContext(context) {
56
20
  }
57
21
 
58
22
  //#endregion
59
- exports.isPlaceholderValue = isPlaceholderValue;
60
- exports.isStaticContext = isStaticContext;
61
- exports.placeholder = placeholder;
23
+ exports.isStaticContext = isStaticContext;
@@ -181,40 +181,6 @@ interface SourceContext<TRequiredOptions = void> {
181
181
  */
182
182
  [Symbol.asyncDispose]?(): void | PromiseLike<void>;
183
183
  }
184
- /**
185
- * Brand symbol for placeholder values.
186
- *
187
- * Placeholder values are sentinel objects that represent values to be
188
- * resolved later (e.g., deferred interactive prompts). During two-phase
189
- * parsing, placeholder values are stripped from parsed results before they
190
- * are passed to phase-2 context annotation collection, and `map()`
191
- * transformations skip them.
192
- *
193
- * Packages that produce placeholder values should set this symbol as a
194
- * property on their sentinel objects:
195
- *
196
- * ~~~~ typescript
197
- * import { placeholder } from "@optique/core/context";
198
- *
199
- * class MyPlaceholder {
200
- * readonly [placeholder] = true;
201
- * }
202
- * ~~~~
203
- *
204
- * @since 1.0.0
205
- */
206
- declare const placeholder: unique symbol;
207
- /**
208
- * Tests whether a value is a placeholder.
209
- *
210
- * Returns `true` if the value is a non-null object carrying the
211
- * {@link placeholder} property.
212
- *
213
- * @param value The value to test.
214
- * @returns `true` if the value is a placeholder.
215
- * @since 1.0.0
216
- */
217
- declare function isPlaceholderValue(value: unknown): boolean;
218
184
  /**
219
185
  * Checks whether a context is static (returns annotations without needing
220
186
  * parsed results).
@@ -229,4 +195,4 @@ declare function isPlaceholderValue(value: unknown): boolean;
229
195
  */
230
196
  declare function isStaticContext(context: SourceContext<unknown>): boolean;
231
197
  //#endregion
232
- export { type Annotations, ParserValuePlaceholder, SourceContext, SourceContextMode, isPlaceholderValue, isStaticContext, placeholder };
198
+ export { type Annotations, ParserValuePlaceholder, SourceContext, SourceContextMode, isStaticContext };
package/dist/context.d.ts CHANGED
@@ -181,40 +181,6 @@ interface SourceContext<TRequiredOptions = void> {
181
181
  */
182
182
  [Symbol.asyncDispose]?(): void | PromiseLike<void>;
183
183
  }
184
- /**
185
- * Brand symbol for placeholder values.
186
- *
187
- * Placeholder values are sentinel objects that represent values to be
188
- * resolved later (e.g., deferred interactive prompts). During two-phase
189
- * parsing, placeholder values are stripped from parsed results before they
190
- * are passed to phase-2 context annotation collection, and `map()`
191
- * transformations skip them.
192
- *
193
- * Packages that produce placeholder values should set this symbol as a
194
- * property on their sentinel objects:
195
- *
196
- * ~~~~ typescript
197
- * import { placeholder } from "@optique/core/context";
198
- *
199
- * class MyPlaceholder {
200
- * readonly [placeholder] = true;
201
- * }
202
- * ~~~~
203
- *
204
- * @since 1.0.0
205
- */
206
- declare const placeholder: unique symbol;
207
- /**
208
- * Tests whether a value is a placeholder.
209
- *
210
- * Returns `true` if the value is a non-null object carrying the
211
- * {@link placeholder} property.
212
- *
213
- * @param value The value to test.
214
- * @returns `true` if the value is a placeholder.
215
- * @since 1.0.0
216
- */
217
- declare function isPlaceholderValue(value: unknown): boolean;
218
184
  /**
219
185
  * Checks whether a context is static (returns annotations without needing
220
186
  * parsed results).
@@ -229,4 +195,4 @@ declare function isPlaceholderValue(value: unknown): boolean;
229
195
  */
230
196
  declare function isStaticContext(context: SourceContext<unknown>): boolean;
231
197
  //#endregion
232
- export { type Annotations, ParserValuePlaceholder, SourceContext, SourceContextMode, isPlaceholderValue, isStaticContext, placeholder };
198
+ export { type Annotations, ParserValuePlaceholder, SourceContext, SourceContextMode, isStaticContext };
package/dist/context.js CHANGED
@@ -1,41 +1,5 @@
1
1
  //#region src/context.ts
2
2
  /**
3
- * Brand symbol for placeholder values.
4
- *
5
- * Placeholder values are sentinel objects that represent values to be
6
- * resolved later (e.g., deferred interactive prompts). During two-phase
7
- * parsing, placeholder values are stripped from parsed results before they
8
- * are passed to phase-2 context annotation collection, and `map()`
9
- * transformations skip them.
10
- *
11
- * Packages that produce placeholder values should set this symbol as a
12
- * property on their sentinel objects:
13
- *
14
- * ~~~~ typescript
15
- * import { placeholder } from "@optique/core/context";
16
- *
17
- * class MyPlaceholder {
18
- * readonly [placeholder] = true;
19
- * }
20
- * ~~~~
21
- *
22
- * @since 1.0.0
23
- */
24
- const placeholder = Symbol.for("@optique/core/placeholder");
25
- /**
26
- * Tests whether a value is a placeholder.
27
- *
28
- * Returns `true` if the value is a non-null object carrying the
29
- * {@link placeholder} property.
30
- *
31
- * @param value The value to test.
32
- * @returns `true` if the value is a placeholder.
33
- * @since 1.0.0
34
- */
35
- function isPlaceholderValue(value) {
36
- return value != null && typeof value === "object" && placeholder in value;
37
- }
38
- /**
39
3
  * Checks whether a context is static (returns annotations without needing
40
4
  * parsed results).
41
5
  *
@@ -55,4 +19,4 @@ function isStaticContext(context) {
55
19
  }
56
20
 
57
21
  //#endregion
58
- export { isPlaceholderValue, isStaticContext, placeholder };
22
+ export { isStaticContext };