@optique/core 0.10.0-dev.294 → 0.10.0-dev.296

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.
@@ -1,3 +1,4 @@
1
+ const require_message = require('./message.cjs');
1
2
 
2
3
  //#region src/dependency.ts
3
4
  /**
@@ -200,7 +201,16 @@ function createSyncDerivedFromParser(sourceId, options) {
200
201
  return derivedParser.parse(input);
201
202
  },
202
203
  [ParseWithDependency](input, dependencyValue) {
203
- const derivedParser = options.factory(...dependencyValue);
204
+ let derivedParser;
205
+ try {
206
+ derivedParser = options.factory(...dependencyValue);
207
+ } catch (e) {
208
+ const msg = e instanceof Error ? e.message : String(e);
209
+ return {
210
+ success: false,
211
+ error: require_message.message`Factory error: ${msg}`
212
+ };
213
+ }
204
214
  return derivedParser.parse(input);
205
215
  },
206
216
  format(value) {
@@ -233,7 +243,16 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
233
243
  return derivedParser.parse(input);
234
244
  },
235
245
  [ParseWithDependency](input, dependencyValue) {
236
- const derivedParser = options.factory(...dependencyValue);
246
+ let derivedParser;
247
+ try {
248
+ derivedParser = options.factory(...dependencyValue);
249
+ } catch (e) {
250
+ const msg = e instanceof Error ? e.message : String(e);
251
+ return Promise.resolve({
252
+ success: false,
253
+ error: require_message.message`Factory error: ${msg}`
254
+ });
255
+ }
237
256
  return derivedParser.parse(input);
238
257
  },
239
258
  format(value) {
@@ -266,7 +285,16 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
266
285
  return Promise.resolve(derivedParser.parse(input));
267
286
  },
268
287
  [ParseWithDependency](input, dependencyValue) {
269
- const derivedParser = options.factory(...dependencyValue);
288
+ let derivedParser;
289
+ try {
290
+ derivedParser = options.factory(...dependencyValue);
291
+ } catch (e) {
292
+ const msg = e instanceof Error ? e.message : String(e);
293
+ return Promise.resolve({
294
+ success: false,
295
+ error: require_message.message`Factory error: ${msg}`
296
+ });
297
+ }
270
298
  return Promise.resolve(derivedParser.parse(input));
271
299
  },
272
300
  format(value) {
@@ -311,7 +339,16 @@ function createSyncDerivedParser(sourceId, options) {
311
339
  return derivedParser.parse(input);
312
340
  },
313
341
  [ParseWithDependency](input, dependencyValue) {
314
- const derivedParser = options.factory(dependencyValue);
342
+ let derivedParser;
343
+ try {
344
+ derivedParser = options.factory(dependencyValue);
345
+ } catch (e) {
346
+ const msg = e instanceof Error ? e.message : String(e);
347
+ return {
348
+ success: false,
349
+ error: require_message.message`Factory error: ${msg}`
350
+ };
351
+ }
315
352
  return derivedParser.parse(input);
316
353
  },
317
354
  format(value) {
@@ -342,7 +379,16 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
342
379
  return derivedParser.parse(input);
343
380
  },
344
381
  [ParseWithDependency](input, dependencyValue) {
345
- const derivedParser = options.factory(dependencyValue);
382
+ let derivedParser;
383
+ try {
384
+ derivedParser = options.factory(dependencyValue);
385
+ } catch (e) {
386
+ const msg = e instanceof Error ? e.message : String(e);
387
+ return Promise.resolve({
388
+ success: false,
389
+ error: require_message.message`Factory error: ${msg}`
390
+ });
391
+ }
346
392
  return derivedParser.parse(input);
347
393
  },
348
394
  format(value) {
@@ -373,7 +419,16 @@ function createAsyncDerivedParserFromSyncFactory(sourceId, options) {
373
419
  return Promise.resolve(derivedParser.parse(input));
374
420
  },
375
421
  [ParseWithDependency](input, dependencyValue) {
376
- const derivedParser = options.factory(dependencyValue);
422
+ let derivedParser;
423
+ try {
424
+ derivedParser = options.factory(dependencyValue);
425
+ } catch (e) {
426
+ const msg = e instanceof Error ? e.message : String(e);
427
+ return Promise.resolve({
428
+ success: false,
429
+ error: require_message.message`Factory error: ${msg}`
430
+ });
431
+ }
377
432
  return Promise.resolve(derivedParser.parse(input));
378
433
  },
379
434
  format(value) {
@@ -457,6 +512,73 @@ function createDependencySourceState(result, dependencyId) {
457
512
  };
458
513
  }
459
514
  /**
515
+ * A unique symbol used to identify pending dependency source states.
516
+ * @since 0.10.0
517
+ */
518
+ const PendingDependencySourceStateMarker = Symbol.for("@optique/core/dependency/PendingDependencySourceStateMarker");
519
+ /**
520
+ * Checks if a value is a {@link PendingDependencySourceState}.
521
+ *
522
+ * @param value The value to check.
523
+ * @returns `true` if the value is a pending dependency source state.
524
+ * @since 0.10.0
525
+ */
526
+ function isPendingDependencySourceState(value) {
527
+ return typeof value === "object" && value !== null && PendingDependencySourceStateMarker in value && value[PendingDependencySourceStateMarker] === true;
528
+ }
529
+ /**
530
+ * Creates a pending dependency source state.
531
+ *
532
+ * @param dependencyId The dependency ID.
533
+ * @returns A PendingDependencySourceState object.
534
+ * @since 0.10.0
535
+ */
536
+ function createPendingDependencySourceState(dependencyId) {
537
+ return {
538
+ [PendingDependencySourceStateMarker]: true,
539
+ [DependencyId]: dependencyId
540
+ };
541
+ }
542
+ /**
543
+ * A unique symbol used to identify parsers that wrap a dependency source.
544
+ * This is used by withDefault to indicate it contains an inner parser
545
+ * with a PendingDependencySourceState initialState.
546
+ * @since 0.10.0
547
+ */
548
+ const WrappedDependencySourceMarker = Symbol.for("@optique/core/dependency/WrappedDependencySourceMarker");
549
+ /**
550
+ * A unique symbol used to indicate that a wrapper transforms the dependency
551
+ * source value. This is used by withDefault to determine whether its default
552
+ * value should be registered as the dependency value.
553
+ *
554
+ * When a wrapper has this marker set to `true`, it means the wrapper transforms
555
+ * the dependency source value (e.g., via map()), so the wrapper's output is NOT
556
+ * a valid dependency source value.
557
+ *
558
+ * @since 0.10.0
559
+ */
560
+ const TransformsDependencyValueMarker = Symbol.for("@optique/core/dependency/TransformsDependencyValueMarker");
561
+ /**
562
+ * Checks if a parser transforms the dependency value (has TransformsDependencyValueMarker).
563
+ *
564
+ * @param parser The parser to check.
565
+ * @returns `true` if the parser transforms the dependency value.
566
+ * @since 0.10.0
567
+ */
568
+ function transformsDependencyValue(parser) {
569
+ return typeof parser === "object" && parser !== null && TransformsDependencyValueMarker in parser && parser[TransformsDependencyValueMarker] === true;
570
+ }
571
+ /**
572
+ * Checks if a parser wraps a dependency source (has WrappedDependencySourceMarker).
573
+ *
574
+ * @param parser The parser to check.
575
+ * @returns `true` if the parser wraps a dependency source.
576
+ * @since 0.10.0
577
+ */
578
+ function isWrappedDependencySource(parser) {
579
+ return typeof parser === "object" && parser !== null && WrappedDependencySourceMarker in parser;
580
+ }
581
+ /**
460
582
  * A registry for storing resolved dependency values during parsing.
461
583
  * This is used to pass dependency values from DependencySource options
462
584
  * to DerivedValueParser options.
@@ -530,8 +652,12 @@ exports.DependencySourceMarker = DependencySourceMarker;
530
652
  exports.DependencySourceStateMarker = DependencySourceStateMarker;
531
653
  exports.DerivedValueParserMarker = DerivedValueParserMarker;
532
654
  exports.ParseWithDependency = ParseWithDependency;
655
+ exports.PendingDependencySourceStateMarker = PendingDependencySourceStateMarker;
656
+ exports.TransformsDependencyValueMarker = TransformsDependencyValueMarker;
657
+ exports.WrappedDependencySourceMarker = WrappedDependencySourceMarker;
533
658
  exports.createDeferredParseState = createDeferredParseState;
534
659
  exports.createDependencySourceState = createDependencySourceState;
660
+ exports.createPendingDependencySourceState = createPendingDependencySourceState;
535
661
  exports.dependency = dependency;
536
662
  exports.deriveFrom = deriveFrom;
537
663
  exports.deriveFromAsync = deriveFromAsync;
@@ -540,4 +666,7 @@ exports.formatDependencyError = formatDependencyError;
540
666
  exports.isDeferredParseState = isDeferredParseState;
541
667
  exports.isDependencySource = isDependencySource;
542
668
  exports.isDependencySourceState = isDependencySourceState;
543
- exports.isDerivedValueParser = isDerivedValueParser;
669
+ exports.isDerivedValueParser = isDerivedValueParser;
670
+ exports.isPendingDependencySourceState = isPendingDependencySourceState;
671
+ exports.isWrappedDependencySource = isWrappedDependencySource;
672
+ exports.transformsDependencyValue = transformsDependencyValue;
@@ -556,6 +556,84 @@ declare function isDependencySourceState<T>(value: unknown): value is Dependency
556
556
  * @since 0.10.0
557
557
  */
558
558
  declare function createDependencySourceState<T>(result: ValueParserResult<T>, dependencyId: symbol): DependencySourceState<T>;
559
+ /**
560
+ * A unique symbol used to identify pending dependency source states.
561
+ * @since 0.10.0
562
+ */
563
+ declare const PendingDependencySourceStateMarker: unique symbol;
564
+ /**
565
+ * Represents a pending dependency source state.
566
+ * This is used when a dependency source option was not provided, but its
567
+ * dependency ID still needs to be tracked for later resolution with a
568
+ * default value.
569
+ *
570
+ * @since 0.10.0
571
+ */
572
+ interface PendingDependencySourceState {
573
+ /**
574
+ * Marker to identify this as a pending dependency source state.
575
+ */
576
+ readonly [PendingDependencySourceStateMarker]: true;
577
+ /**
578
+ * The dependency ID of the source.
579
+ */
580
+ readonly [DependencyId]: symbol;
581
+ }
582
+ /**
583
+ * Checks if a value is a {@link PendingDependencySourceState}.
584
+ *
585
+ * @param value The value to check.
586
+ * @returns `true` if the value is a pending dependency source state.
587
+ * @since 0.10.0
588
+ */
589
+ declare function isPendingDependencySourceState(value: unknown): value is PendingDependencySourceState;
590
+ /**
591
+ * Creates a pending dependency source state.
592
+ *
593
+ * @param dependencyId The dependency ID.
594
+ * @returns A PendingDependencySourceState object.
595
+ * @since 0.10.0
596
+ */
597
+ declare function createPendingDependencySourceState(dependencyId: symbol): PendingDependencySourceState;
598
+ /**
599
+ * A unique symbol used to identify parsers that wrap a dependency source.
600
+ * This is used by withDefault to indicate it contains an inner parser
601
+ * with a PendingDependencySourceState initialState.
602
+ * @since 0.10.0
603
+ */
604
+ declare const WrappedDependencySourceMarker: unique symbol;
605
+ /**
606
+ * A unique symbol used to indicate that a wrapper transforms the dependency
607
+ * source value. This is used by withDefault to determine whether its default
608
+ * value should be registered as the dependency value.
609
+ *
610
+ * When a wrapper has this marker set to `true`, it means the wrapper transforms
611
+ * the dependency source value (e.g., via map()), so the wrapper's output is NOT
612
+ * a valid dependency source value.
613
+ *
614
+ * @since 0.10.0
615
+ */
616
+ declare const TransformsDependencyValueMarker: unique symbol;
617
+ /**
618
+ * Checks if a parser transforms the dependency value (has TransformsDependencyValueMarker).
619
+ *
620
+ * @param parser The parser to check.
621
+ * @returns `true` if the parser transforms the dependency value.
622
+ * @since 0.10.0
623
+ */
624
+ declare function transformsDependencyValue(parser: unknown): parser is {
625
+ [TransformsDependencyValueMarker]: true;
626
+ };
627
+ /**
628
+ * Checks if a parser wraps a dependency source (has WrappedDependencySourceMarker).
629
+ *
630
+ * @param parser The parser to check.
631
+ * @returns `true` if the parser wraps a dependency source.
632
+ * @since 0.10.0
633
+ */
634
+ declare function isWrappedDependencySource(parser: unknown): parser is {
635
+ [WrappedDependencySourceMarker]: PendingDependencySourceState;
636
+ };
559
637
  /**
560
638
  * Represents a resolved dependency value stored during parsing.
561
639
  * @since 0.10.0
@@ -635,4 +713,4 @@ type DependencyError = {
635
713
  */
636
714
  declare function formatDependencyError(error: DependencyError): Message;
637
715
  //#endregion
638
- export { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, ResolvedDependency, createDeferredParseState, createDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser };
716
+ export { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
@@ -556,6 +556,84 @@ declare function isDependencySourceState<T>(value: unknown): value is Dependency
556
556
  * @since 0.10.0
557
557
  */
558
558
  declare function createDependencySourceState<T>(result: ValueParserResult<T>, dependencyId: symbol): DependencySourceState<T>;
559
+ /**
560
+ * A unique symbol used to identify pending dependency source states.
561
+ * @since 0.10.0
562
+ */
563
+ declare const PendingDependencySourceStateMarker: unique symbol;
564
+ /**
565
+ * Represents a pending dependency source state.
566
+ * This is used when a dependency source option was not provided, but its
567
+ * dependency ID still needs to be tracked for later resolution with a
568
+ * default value.
569
+ *
570
+ * @since 0.10.0
571
+ */
572
+ interface PendingDependencySourceState {
573
+ /**
574
+ * Marker to identify this as a pending dependency source state.
575
+ */
576
+ readonly [PendingDependencySourceStateMarker]: true;
577
+ /**
578
+ * The dependency ID of the source.
579
+ */
580
+ readonly [DependencyId]: symbol;
581
+ }
582
+ /**
583
+ * Checks if a value is a {@link PendingDependencySourceState}.
584
+ *
585
+ * @param value The value to check.
586
+ * @returns `true` if the value is a pending dependency source state.
587
+ * @since 0.10.0
588
+ */
589
+ declare function isPendingDependencySourceState(value: unknown): value is PendingDependencySourceState;
590
+ /**
591
+ * Creates a pending dependency source state.
592
+ *
593
+ * @param dependencyId The dependency ID.
594
+ * @returns A PendingDependencySourceState object.
595
+ * @since 0.10.0
596
+ */
597
+ declare function createPendingDependencySourceState(dependencyId: symbol): PendingDependencySourceState;
598
+ /**
599
+ * A unique symbol used to identify parsers that wrap a dependency source.
600
+ * This is used by withDefault to indicate it contains an inner parser
601
+ * with a PendingDependencySourceState initialState.
602
+ * @since 0.10.0
603
+ */
604
+ declare const WrappedDependencySourceMarker: unique symbol;
605
+ /**
606
+ * A unique symbol used to indicate that a wrapper transforms the dependency
607
+ * source value. This is used by withDefault to determine whether its default
608
+ * value should be registered as the dependency value.
609
+ *
610
+ * When a wrapper has this marker set to `true`, it means the wrapper transforms
611
+ * the dependency source value (e.g., via map()), so the wrapper's output is NOT
612
+ * a valid dependency source value.
613
+ *
614
+ * @since 0.10.0
615
+ */
616
+ declare const TransformsDependencyValueMarker: unique symbol;
617
+ /**
618
+ * Checks if a parser transforms the dependency value (has TransformsDependencyValueMarker).
619
+ *
620
+ * @param parser The parser to check.
621
+ * @returns `true` if the parser transforms the dependency value.
622
+ * @since 0.10.0
623
+ */
624
+ declare function transformsDependencyValue(parser: unknown): parser is {
625
+ [TransformsDependencyValueMarker]: true;
626
+ };
627
+ /**
628
+ * Checks if a parser wraps a dependency source (has WrappedDependencySourceMarker).
629
+ *
630
+ * @param parser The parser to check.
631
+ * @returns `true` if the parser wraps a dependency source.
632
+ * @since 0.10.0
633
+ */
634
+ declare function isWrappedDependencySource(parser: unknown): parser is {
635
+ [WrappedDependencySourceMarker]: PendingDependencySourceState;
636
+ };
559
637
  /**
560
638
  * Represents a resolved dependency value stored during parsing.
561
639
  * @since 0.10.0
@@ -635,4 +713,4 @@ type DependencyError = {
635
713
  */
636
714
  declare function formatDependencyError(error: DependencyError): Message;
637
715
  //#endregion
638
- export { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, ResolvedDependency, createDeferredParseState, createDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser };
716
+ export { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
@@ -1,3 +1,5 @@
1
+ import { message } from "./message.js";
2
+
1
3
  //#region src/dependency.ts
2
4
  /**
3
5
  * A unique symbol used to identify dependency sources at compile time.
@@ -199,7 +201,16 @@ function createSyncDerivedFromParser(sourceId, options) {
199
201
  return derivedParser.parse(input);
200
202
  },
201
203
  [ParseWithDependency](input, dependencyValue) {
202
- const derivedParser = options.factory(...dependencyValue);
204
+ let derivedParser;
205
+ try {
206
+ derivedParser = options.factory(...dependencyValue);
207
+ } catch (e) {
208
+ const msg = e instanceof Error ? e.message : String(e);
209
+ return {
210
+ success: false,
211
+ error: message`Factory error: ${msg}`
212
+ };
213
+ }
203
214
  return derivedParser.parse(input);
204
215
  },
205
216
  format(value) {
@@ -232,7 +243,16 @@ function createAsyncDerivedFromParserFromAsyncFactory(sourceId, options) {
232
243
  return derivedParser.parse(input);
233
244
  },
234
245
  [ParseWithDependency](input, dependencyValue) {
235
- const derivedParser = options.factory(...dependencyValue);
246
+ let derivedParser;
247
+ try {
248
+ derivedParser = options.factory(...dependencyValue);
249
+ } catch (e) {
250
+ const msg = e instanceof Error ? e.message : String(e);
251
+ return Promise.resolve({
252
+ success: false,
253
+ error: message`Factory error: ${msg}`
254
+ });
255
+ }
236
256
  return derivedParser.parse(input);
237
257
  },
238
258
  format(value) {
@@ -265,7 +285,16 @@ function createAsyncDerivedFromParserFromSyncFactory(sourceId, options) {
265
285
  return Promise.resolve(derivedParser.parse(input));
266
286
  },
267
287
  [ParseWithDependency](input, dependencyValue) {
268
- const derivedParser = options.factory(...dependencyValue);
288
+ let derivedParser;
289
+ try {
290
+ derivedParser = options.factory(...dependencyValue);
291
+ } catch (e) {
292
+ const msg = e instanceof Error ? e.message : String(e);
293
+ return Promise.resolve({
294
+ success: false,
295
+ error: message`Factory error: ${msg}`
296
+ });
297
+ }
269
298
  return Promise.resolve(derivedParser.parse(input));
270
299
  },
271
300
  format(value) {
@@ -310,7 +339,16 @@ function createSyncDerivedParser(sourceId, options) {
310
339
  return derivedParser.parse(input);
311
340
  },
312
341
  [ParseWithDependency](input, dependencyValue) {
313
- const derivedParser = options.factory(dependencyValue);
342
+ let derivedParser;
343
+ try {
344
+ derivedParser = options.factory(dependencyValue);
345
+ } catch (e) {
346
+ const msg = e instanceof Error ? e.message : String(e);
347
+ return {
348
+ success: false,
349
+ error: message`Factory error: ${msg}`
350
+ };
351
+ }
314
352
  return derivedParser.parse(input);
315
353
  },
316
354
  format(value) {
@@ -341,7 +379,16 @@ function createAsyncDerivedParserFromAsyncFactory(sourceId, options) {
341
379
  return derivedParser.parse(input);
342
380
  },
343
381
  [ParseWithDependency](input, dependencyValue) {
344
- const derivedParser = options.factory(dependencyValue);
382
+ let derivedParser;
383
+ try {
384
+ derivedParser = options.factory(dependencyValue);
385
+ } catch (e) {
386
+ const msg = e instanceof Error ? e.message : String(e);
387
+ return Promise.resolve({
388
+ success: false,
389
+ error: message`Factory error: ${msg}`
390
+ });
391
+ }
345
392
  return derivedParser.parse(input);
346
393
  },
347
394
  format(value) {
@@ -372,7 +419,16 @@ function createAsyncDerivedParserFromSyncFactory(sourceId, options) {
372
419
  return Promise.resolve(derivedParser.parse(input));
373
420
  },
374
421
  [ParseWithDependency](input, dependencyValue) {
375
- const derivedParser = options.factory(dependencyValue);
422
+ let derivedParser;
423
+ try {
424
+ derivedParser = options.factory(dependencyValue);
425
+ } catch (e) {
426
+ const msg = e instanceof Error ? e.message : String(e);
427
+ return Promise.resolve({
428
+ success: false,
429
+ error: message`Factory error: ${msg}`
430
+ });
431
+ }
376
432
  return Promise.resolve(derivedParser.parse(input));
377
433
  },
378
434
  format(value) {
@@ -456,6 +512,73 @@ function createDependencySourceState(result, dependencyId) {
456
512
  };
457
513
  }
458
514
  /**
515
+ * A unique symbol used to identify pending dependency source states.
516
+ * @since 0.10.0
517
+ */
518
+ const PendingDependencySourceStateMarker = Symbol.for("@optique/core/dependency/PendingDependencySourceStateMarker");
519
+ /**
520
+ * Checks if a value is a {@link PendingDependencySourceState}.
521
+ *
522
+ * @param value The value to check.
523
+ * @returns `true` if the value is a pending dependency source state.
524
+ * @since 0.10.0
525
+ */
526
+ function isPendingDependencySourceState(value) {
527
+ return typeof value === "object" && value !== null && PendingDependencySourceStateMarker in value && value[PendingDependencySourceStateMarker] === true;
528
+ }
529
+ /**
530
+ * Creates a pending dependency source state.
531
+ *
532
+ * @param dependencyId The dependency ID.
533
+ * @returns A PendingDependencySourceState object.
534
+ * @since 0.10.0
535
+ */
536
+ function createPendingDependencySourceState(dependencyId) {
537
+ return {
538
+ [PendingDependencySourceStateMarker]: true,
539
+ [DependencyId]: dependencyId
540
+ };
541
+ }
542
+ /**
543
+ * A unique symbol used to identify parsers that wrap a dependency source.
544
+ * This is used by withDefault to indicate it contains an inner parser
545
+ * with a PendingDependencySourceState initialState.
546
+ * @since 0.10.0
547
+ */
548
+ const WrappedDependencySourceMarker = Symbol.for("@optique/core/dependency/WrappedDependencySourceMarker");
549
+ /**
550
+ * A unique symbol used to indicate that a wrapper transforms the dependency
551
+ * source value. This is used by withDefault to determine whether its default
552
+ * value should be registered as the dependency value.
553
+ *
554
+ * When a wrapper has this marker set to `true`, it means the wrapper transforms
555
+ * the dependency source value (e.g., via map()), so the wrapper's output is NOT
556
+ * a valid dependency source value.
557
+ *
558
+ * @since 0.10.0
559
+ */
560
+ const TransformsDependencyValueMarker = Symbol.for("@optique/core/dependency/TransformsDependencyValueMarker");
561
+ /**
562
+ * Checks if a parser transforms the dependency value (has TransformsDependencyValueMarker).
563
+ *
564
+ * @param parser The parser to check.
565
+ * @returns `true` if the parser transforms the dependency value.
566
+ * @since 0.10.0
567
+ */
568
+ function transformsDependencyValue(parser) {
569
+ return typeof parser === "object" && parser !== null && TransformsDependencyValueMarker in parser && parser[TransformsDependencyValueMarker] === true;
570
+ }
571
+ /**
572
+ * Checks if a parser wraps a dependency source (has WrappedDependencySourceMarker).
573
+ *
574
+ * @param parser The parser to check.
575
+ * @returns `true` if the parser wraps a dependency source.
576
+ * @since 0.10.0
577
+ */
578
+ function isWrappedDependencySource(parser) {
579
+ return typeof parser === "object" && parser !== null && WrappedDependencySourceMarker in parser;
580
+ }
581
+ /**
459
582
  * A registry for storing resolved dependency values during parsing.
460
583
  * This is used to pass dependency values from DependencySource options
461
584
  * to DerivedValueParser options.
@@ -521,4 +644,4 @@ function formatDependencyError(error) {
521
644
  }
522
645
 
523
646
  //#endregion
524
- export { DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, createDeferredParseState, createDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser };
647
+ export { DeferredParseMarker, DependencyId, DependencyIds, DependencyRegistry, DependencySourceMarker, DependencySourceStateMarker, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceStateMarker, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue };
package/dist/index.cjs CHANGED
@@ -20,9 +20,12 @@ exports.DependencySourceStateMarker = require_dependency.DependencySourceStateMa
20
20
  exports.DerivedValueParserMarker = require_dependency.DerivedValueParserMarker;
21
21
  exports.DuplicateOptionError = require_constructs.DuplicateOptionError;
22
22
  exports.ParseWithDependency = require_dependency.ParseWithDependency;
23
+ exports.PendingDependencySourceStateMarker = require_dependency.PendingDependencySourceStateMarker;
23
24
  exports.RunError = require_facade.RunError;
24
25
  exports.RunParserError = require_facade.RunParserError;
26
+ exports.TransformsDependencyValueMarker = require_dependency.TransformsDependencyValueMarker;
25
27
  exports.WithDefaultError = require_modifiers.WithDefaultError;
28
+ exports.WrappedDependencySourceMarker = require_dependency.WrappedDependencySourceMarker;
26
29
  exports.argument = require_primitives.argument;
27
30
  exports.bash = require_completion.bash;
28
31
  exports.choice = require_valueparser.choice;
@@ -33,6 +36,7 @@ exports.conditional = require_constructs.conditional;
33
36
  exports.constant = require_primitives.constant;
34
37
  exports.createDeferredParseState = require_dependency.createDeferredParseState;
35
38
  exports.createDependencySourceState = require_dependency.createDependencySourceState;
39
+ exports.createPendingDependencySourceState = require_dependency.createPendingDependencySourceState;
36
40
  exports.dependency = require_dependency.dependency;
37
41
  exports.deriveFrom = require_dependency.deriveFrom;
38
42
  exports.deriveFromAsync = require_dependency.deriveFromAsync;
@@ -60,7 +64,9 @@ exports.isDependencySource = require_dependency.isDependencySource;
60
64
  exports.isDependencySourceState = require_dependency.isDependencySourceState;
61
65
  exports.isDerivedValueParser = require_dependency.isDerivedValueParser;
62
66
  exports.isNonEmptyString = require_nonempty.isNonEmptyString;
67
+ exports.isPendingDependencySourceState = require_dependency.isPendingDependencySourceState;
63
68
  exports.isValueParser = require_valueparser.isValueParser;
69
+ exports.isWrappedDependencySource = require_dependency.isWrappedDependencySource;
64
70
  exports.locale = require_valueparser.locale;
65
71
  exports.longestMatch = require_constructs.longestMatch;
66
72
  exports.map = require_modifiers.map;
@@ -90,6 +96,7 @@ exports.suggest = require_parser.suggest;
90
96
  exports.suggestAsync = require_parser.suggestAsync;
91
97
  exports.suggestSync = require_parser.suggestSync;
92
98
  exports.text = require_message.text;
99
+ exports.transformsDependencyValue = require_dependency.transformsDependencyValue;
93
100
  exports.tuple = require_constructs.tuple;
94
101
  exports.url = require_valueparser.url;
95
102
  exports.uuid = require_valueparser.uuid;
package/dist/index.d.cts CHANGED
@@ -5,9 +5,9 @@ import { DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, Doc
5
5
  import { ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, FloatOptions, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, StringOptions, UrlOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, choice, float, integer, isValueParser, locale, string, url, uuid } from "./valueparser.cjs";
6
6
  import { ConditionalErrorOptions, ConditionalOptions, DuplicateOptionError, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, NoMatchContext, ObjectErrorOptions, ObjectOptions, OrErrorOptions, OrOptions, TupleOptions, concat, conditional, group, longestMatch, merge, object, or, tuple } from "./constructs.cjs";
7
7
  import { MultipleErrorOptions, MultipleOptions, WithDefaultError, WithDefaultOptions, map, multiple, optional, withDefault } from "./modifiers.cjs";
8
- import { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, ResolvedDependency, createDeferredParseState, createDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser } from "./dependency.cjs";
8
+ import { AnyDependencySource, CombineMode, CombinedDependencyMode, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, ParseWithDependency, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, TransformsDependencyValueMarker, WrappedDependencySourceMarker, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, formatDependencyError, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isPendingDependencySourceState, isWrappedDependencySource, transformsDependencyValue } from "./dependency.cjs";
9
9
  import { ArgumentErrorOptions, ArgumentOptions, CommandErrorOptions, CommandOptions, FlagErrorOptions, FlagOptions, OptionErrorOptions, OptionOptions, OptionState, PassThroughFormat, PassThroughOptions, argument, command, constant, flag, option, passThrough } from "./primitives.cjs";
10
10
  import { CombineModes, DocState, InferMode, InferValue, Mode, ModeIterable, ModeValue, Parser, ParserContext, ParserResult, Result, Suggestion, getDocPage, getDocPageAsync, getDocPageSync, parse, parseAsync, parseSync, suggest, suggestAsync, suggestSync } from "./parser.cjs";
11
11
  import { ShellCompletion, bash, fish, nu, pwsh, zsh } from "./completion.cjs";
12
12
  import { RunError, RunOptions, RunParserError, run, runParser, runParserAsync, runParserSync } from "./facade.cjs";
13
- export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, Suggestion, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isValueParser, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, tuple, url, uuid, value, valueSet, values, withDefault, zsh };
13
+ export { AnyDependencySource, ArgumentErrorOptions, ArgumentOptions, ChoiceOptions, ChoiceOptionsBase, ChoiceOptionsNumber, ChoiceOptionsString, CombineMode, CombineModes, CombinedDependencyMode, CommandErrorOptions, CommandOptions, ConditionalErrorOptions, ConditionalOptions, DeferredParseMarker, DeferredParseState, DependencyError, DependencyId, DependencyIds, DependencyMode, DependencyRegistry, DependencySource, DependencySourceMarker, DependencySourceState, DependencySourceStateMarker, DependencyValue, DependencyValues, DeriveAsyncOptions, DeriveFromAsyncOptions, DeriveFromOptions, DeriveFromSyncOptions, DeriveOptions, DeriveSyncOptions, DerivedValueParser, DerivedValueParserMarker, DocEntry, DocFragment, DocFragments, DocPage, DocPageFormatOptions, DocSection, DocState, DuplicateOptionError, FlagErrorOptions, FlagOptions, FloatOptions, InferMode, InferValue, IntegerOptionsBigInt, IntegerOptionsNumber, LocaleOptions, LongestMatchErrorOptions, LongestMatchOptions, MergeOptions, Message, MessageFormatOptions, MessageTerm, Mode, ModeIterable, ModeValue, MultipleErrorOptions, MultipleOptions, NoMatchContext, NonEmptyString, ObjectErrorOptions, ObjectOptions, OptionErrorOptions, OptionName, OptionOptions, OptionState, OrErrorOptions, OrOptions, ParseWithDependency, Parser, ParserContext, ParserResult, PassThroughFormat, PassThroughOptions, PendingDependencySourceState, PendingDependencySourceStateMarker, ResolvedDependency, Result, RunError, RunOptions, RunParserError, ShellCompletion, ShowDefaultOptions, StringOptions, Suggestion, TransformsDependencyValueMarker, TupleOptions, UrlOptions, Usage, UsageFormatOptions, UsageTerm, UsageTermFormatOptions, Uuid, UuidOptions, ValueParser, ValueParserResult, ValueSetOptions, WithDefaultError, WithDefaultOptions, WrappedDependencySourceMarker, argument, bash, choice, command, commandLine, concat, conditional, constant, createDeferredParseState, createDependencySourceState, createPendingDependencySourceState, dependency, deriveFrom, deriveFromAsync, deriveFromSync, ensureNonEmptyString, envVar, extractArgumentMetavars, extractCommandNames, extractOptionNames, fish, flag, float, formatDependencyError, formatDocPage, formatMessage, formatUsage, formatUsageTerm, getDocPage, getDocPageAsync, getDocPageSync, group, integer, isDeferredParseState, isDependencySource, isDependencySourceState, isDerivedValueParser, isNonEmptyString, isPendingDependencySourceState, isValueParser, isWrappedDependencySource, locale, longestMatch, map, merge, message, metavar, multiple, normalizeUsage, nu, object, option, optionName, optionNames, optional, or, parse, parseAsync, parseSync, passThrough, pwsh, run, runParser, runParserAsync, runParserSync, string, suggest, suggestAsync, suggestSync, text, transformsDependencyValue, tuple, url, uuid, value, valueSet, values, withDefault, zsh };