@craft-ng/core 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, WritableSignal, ValueEqualityFn, Injector, InjectionToken, Provider, EventEmitter, Type, ResourceRef, ResourceOptions, ResourceStatus, ResourceLoaderParams, ResourceStreamingLoader } from '@angular/core';
2
+ import { Signal, WritableSignal, ValueEqualityFn, Injector, InjectionToken, Provider, Type, EventEmitter, ResourceRef, ResourceOptions, ResourceStatus, ResourceLoaderParams, ResourceStreamingLoader } from '@angular/core';
3
+ import { CompatFieldState, FieldState, ReadonlyArrayLike, MaybeFieldTree, Subfields, FieldTree, SchemaPathTree, PathKind, SchemaPath, SchemaPathRules, ValidationError } from '@angular/forms/signals';
4
+ import { AbstractControl } from '@angular/forms';
3
5
 
4
6
  type ReadonlySource<T> = Signal<T | undefined> & {
5
7
  preserveLastValue: Signal<T | undefined>;
@@ -2293,7 +2295,7 @@ type MergeObjects<F extends unknown[], Acc = {}> = F extends [
2293
2295
  infer First,
2294
2296
  ...infer Rest
2295
2297
  ] ? First extends object ? MergeObjects<Rest, MergeObject<Acc, First>> : Prettify<Acc> : Prettify<Acc>;
2296
- type InternalType<State, Params, Args, IsGroupedResource, IsMethod, Insertions, GroupIdentifier, SourceParams> = {
2298
+ type InternalType<State, Params, Args, IsGroupedResource, IsMethod, Insertions, GroupIdentifier, SourceParams, Exceptions extends ResourceExceptionConstraints> = {
2297
2299
  state: State;
2298
2300
  params: Params;
2299
2301
  args: Args;
@@ -2302,6 +2304,7 @@ type InternalType<State, Params, Args, IsGroupedResource, IsMethod, Insertions,
2302
2304
  isMethod?: IsMethod;
2303
2305
  insertions?: Insertions;
2304
2306
  sourceParams?: SourceParams;
2307
+ exceptions: Exceptions;
2305
2308
  };
2306
2309
  /**
2307
2310
  * trick to combine multiple unions of objects into a single object
@@ -2427,8 +2430,8 @@ type ResourceByIdConfig<State, ResourceParams, GroupIdentifier extends string, F
2427
2430
  declare function resourceById<State, ResourceParams, GroupIdentifier extends string, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams>(config: ResourceByIdConfig<State, ResourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>): ResourceByIdRef<GroupIdentifier, State, ResourceParams>;
2428
2431
 
2429
2432
  type QueryAndMutationRecordConstraints = {
2430
- query: InternalType<unknown, unknown, unknown, unknown, boolean, unknown, unknown, unknown>;
2431
- mutation: InternalType<unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown>;
2433
+ query: InternalType<unknown, unknown, unknown, unknown, boolean, unknown, unknown, unknown, ResourceExceptionConstraints>;
2434
+ mutation: InternalType<unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, ResourceExceptionConstraints>;
2432
2435
  };
2433
2436
  type CustomReloadOnSpecificMutationStatus<QueryAndMutationRecord extends QueryAndMutationRecordConstraints> = (data: MergeObjects<[
2434
2437
  {
@@ -2485,6 +2488,46 @@ type FilterQueryById<QueryAndMutationRecord extends QueryAndMutationRecordConstr
2485
2488
  } : {}
2486
2489
  ]>) => boolean;
2487
2490
 
2491
+ declare const CRAFT_EXCEPTION_SYMBOL: unique symbol;
2492
+ type CraftExceptionMeta<Code extends string = string, Scope extends string | undefined = string | undefined, Identifier extends string | undefined = string | undefined> = {
2493
+ code: Code;
2494
+ scope?: Scope;
2495
+ identifier?: Identifier;
2496
+ };
2497
+ type CraftExceptionResult<Meta extends CraftExceptionMeta, Payload = unknown> = {
2498
+ readonly [CRAFT_EXCEPTION_SYMBOL]: true;
2499
+ readonly payload: Payload;
2500
+ } & Meta & {
2501
+ [key in Meta['code']]: Payload;
2502
+ };
2503
+ type CraftException<Meta extends CraftExceptionMeta = CraftExceptionMeta, Payload = unknown> = CraftExceptionResult<Meta, Payload>;
2504
+ type AnyCraftException = CraftExceptionResult<CraftExceptionMeta, unknown>;
2505
+ declare function craftException<const Code extends string, Scope extends string | undefined = undefined, Identifier extends string | undefined = undefined, Payload = undefined>(meta: {
2506
+ code: Code;
2507
+ scope?: Scope;
2508
+ identifier?: Identifier;
2509
+ }, payload?: Payload): CraftExceptionResult<{
2510
+ code: Code;
2511
+ scope: Scope;
2512
+ identifier?: Identifier;
2513
+ }, Payload>;
2514
+ declare function isCraftException(value: unknown): value is AnyCraftException;
2515
+ type StripCraftException<T> = Exclude<T, AnyCraftException>;
2516
+ type ExtractCraftException<T> = Extract<T, AnyCraftException>;
2517
+ type InsertMetaInCraftExceptionIfExists<Exception, Scope extends string | undefined, Identifier extends string | undefined | unknown> = Exception extends CraftExceptionResult<infer CraftExceptionMeta, infer Payload> ? [unknown] extends [Identifier] ? CraftExceptionResult<{
2518
+ code: CraftExceptionMeta['code'];
2519
+ scope: Scope;
2520
+ }, Payload> : [Identifier] extends [string] ? CraftExceptionResult<{
2521
+ code: CraftExceptionMeta['code'];
2522
+ scope: Scope;
2523
+ identifier: Identifier;
2524
+ }, Payload> : CraftExceptionResult<{
2525
+ code: CraftExceptionMeta['code'];
2526
+ scope: Scope;
2527
+ }, Payload> : Exception;
2528
+ type ExtractCodeFromCraftResultUnion<T> = T extends CraftExceptionResult<infer E, any> ? E['code'] : never;
2529
+ type ExcludeByCode<T, C> = T extends CraftExceptionResult<infer E, any> ? E['code'] extends C ? never : T : never;
2530
+
2488
2531
  type MutationConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams> = Omit<ResourceOptions<NoInfer<ResourceState>, Params>, 'params' | 'loader'> & ({
2489
2532
  /**
2490
2533
  * Used to generate a method in the store, when called will trigger the resource loader/stream.
@@ -2501,10 +2544,10 @@ type MutationConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdenti
2501
2544
  * A unique identifier for the resource, derived from the params.
2502
2545
  * It should be a string that uniquely identifies the resource based on the params.
2503
2546
  */
2504
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
2547
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
2505
2548
  loader: (param: ResourceLoaderParams<NonNullable<[
2506
2549
  unknown
2507
- ] extends [Params] ? NoInfer<SourceParams> : NoInfer<Params>>>) => Promise<ResourceState>;
2550
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>) => Promise<ResourceState>;
2508
2551
  stream?: never;
2509
2552
  } | {
2510
2553
  /**
@@ -2519,14 +2562,14 @@ type MutationConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdenti
2519
2562
  method: ((args: ParamsArgs) => Params) | ReadonlySource<SourceParams>;
2520
2563
  loader?: never;
2521
2564
  fromResourceById?: never;
2522
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
2565
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
2523
2566
  /**
2524
2567
  * Loading function which returns a `Promise` of a signal of the resource's value for a given
2525
2568
  * request, which can change over time as new values are received from a stream.
2526
2569
  */
2527
2570
  stream: ResourceStreamingLoader<ResourceState, ResourceLoaderParams<NonNullable<[
2528
2571
  unknown
2529
- ] extends [Params] ? NoInfer<SourceParams> : NoInfer<Params>>>>;
2572
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>>;
2530
2573
  } | {
2531
2574
  /**
2532
2575
  * Use it, when you need to bind a ResourceByIdRef to another ResourceByIdRef.
@@ -2542,14 +2585,14 @@ type MutationConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdenti
2542
2585
  params: (entity: ResourceRef<NoInfer<FromObjectState>>) => Params;
2543
2586
  loader?: never;
2544
2587
  method?: never;
2545
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
2588
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
2546
2589
  /**
2547
2590
  * Loading function which returns a `Promise` of a signal of the resource's value for a given
2548
2591
  * request, which can change over time as new values are received from a stream.
2549
2592
  */
2550
2593
  stream: ResourceStreamingLoader<ResourceState, ResourceLoaderParams<NonNullable<[
2551
2594
  unknown
2552
- ] extends [Params] ? NoInfer<SourceParams> : NoInfer<Params>>>>;
2595
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>>;
2553
2596
  } | {
2554
2597
  /**
2555
2598
  * Use it, when you need to bind a ResourceByIdRef to another ResourceByIdRef.
@@ -2567,10 +2610,10 @@ type MutationConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdenti
2567
2610
  * A unique identifier for the resource, derived from the params.
2568
2611
  * It should be a string that uniquely identifies the resource based on the params.
2569
2612
  */
2570
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
2613
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
2571
2614
  loader: (param: ResourceLoaderParams<NonNullable<[
2572
2615
  unknown
2573
- ] extends [Params] ? NoInfer<SourceParams> : NoInfer<Params>>>) => Promise<ResourceState>;
2616
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>) => Promise<ResourceState>;
2574
2617
  stream?: never;
2575
2618
  } | {
2576
2619
  fromResourceById?: never;
@@ -2583,14 +2626,14 @@ type MutationConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdenti
2583
2626
  params: (entity: ResourceRef<NoInfer<FromObjectState>>) => Params;
2584
2627
  loader?: never;
2585
2628
  method?: never;
2586
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
2629
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
2587
2630
  /**
2588
2631
  * Loading function which returns a `Promise` of a signal of the resource's value for a given
2589
2632
  * request, which can change over time as new values are received from a stream.
2590
2633
  */
2591
2634
  stream: ResourceStreamingLoader<ResourceState, ResourceLoaderParams<NonNullable<[
2592
2635
  unknown
2593
- ] extends [Params] ? NoInfer<SourceParams> : NoInfer<Params>>>>;
2636
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>>;
2594
2637
  } | {
2595
2638
  /**
2596
2639
  * Use it, when you need to bind a ResourceByIdRef to another ResourceByIdRef.
@@ -2608,13 +2651,30 @@ type MutationConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdenti
2608
2651
  * A unique identifier for the resource, derived from the params.
2609
2652
  * It should be a string that uniquely identifies the resource based on the params.
2610
2653
  */
2611
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
2654
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
2612
2655
  loader: (param: ResourceLoaderParams<NonNullable<[
2613
2656
  unknown
2614
- ] extends [Params] ? NoInfer<SourceParams> : NoInfer<Params>>>) => Promise<ResourceState>;
2657
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>) => Promise<ResourceState>;
2615
2658
  stream?: never;
2616
2659
  });
2617
- type ResourceLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions> = {
2660
+ type HasDefinedException<MutationException extends ResourceExceptionConstraints> = [MutationException['params']] extends [never] ? [MutationException['loader']] extends [never] ? false : true : true;
2661
+ type ResourceLikeMutationExceptions<MutationException extends ResourceExceptionConstraints, GroupIdentifier = unknown> = HasDefinedException<MutationException> extends true ? {
2662
+ hasException: Signal<HasDefinedException<MutationException>>;
2663
+ exceptions: Signal<{
2664
+ list: (InsertMetaInCraftExceptionIfExists<MutationException['params'], 'params', unknown> | InsertMetaInCraftExceptionIfExists<MutationException['loader'], 'loader', GroupIdentifier>)[];
2665
+ params?: InsertMetaInCraftExceptionIfExists<MutationException['params'], 'params', unknown>;
2666
+ loader?: InsertMetaInCraftExceptionIfExists<MutationException['loader'], 'loader', GroupIdentifier>;
2667
+ }>;
2668
+ } : {};
2669
+ type ResourceByIdLikeMutationExceptions<MutationException extends ResourceExceptionConstraints, GroupIdentifier extends string> = {
2670
+ hasException: Signal<boolean>;
2671
+ exceptions: Signal<{
2672
+ list: (InsertMetaInCraftExceptionIfExists<MutationException['params'], 'params', unknown> | InsertMetaInCraftExceptionIfExists<MutationException['loader'], 'loader', GroupIdentifier>)[];
2673
+ params?: InsertMetaInCraftExceptionIfExists<MutationException['params'], 'params', unknown>;
2674
+ loader: Partial<Record<GroupIdentifier, InsertMetaInCraftExceptionIfExists<MutationException['loader'], 'loader', GroupIdentifier>>>;
2675
+ }>;
2676
+ };
2677
+ type ResourceLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, MutationException extends ResourceExceptionConstraints> = {
2618
2678
  type: 'resourceLike';
2619
2679
  kind: 'mutation';
2620
2680
  } & MergeObjects$1<[
@@ -2635,11 +2695,12 @@ type ResourceLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, I
2635
2695
  source: ReadonlySource<SourceParams>;
2636
2696
  },
2637
2697
  Insertions,
2698
+ ResourceLikeMutationExceptions<MutationException>,
2638
2699
  {
2639
2700
  [key in `~InternalType`]: 'Used to avoid TS type erasure';
2640
2701
  }
2641
2702
  ]>;
2642
- type ResourceByIdLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, GroupIdentifier> = {
2703
+ type ResourceByIdLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, GroupIdentifier, MutationException extends ResourceExceptionConstraints> = {
2643
2704
  type: 'resourceByGroupLike';
2644
2705
  kind: 'mutation';
2645
2706
  } & {
@@ -2653,14 +2714,14 @@ type ResourceByIdLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParam
2653
2714
  *
2654
2715
  * return the associated resource or undefined if not existing
2655
2716
  */
2656
- select: (id: GroupIdentifier) => {
2717
+ select: (id: GroupIdentifier) => ({
2657
2718
  readonly value: Signal<Value | undefined>;
2658
2719
  readonly status: Signal<ResourceStatus>;
2659
2720
  readonly error: Signal<Error | undefined>;
2660
2721
  readonly isLoading: Signal<boolean>;
2661
2722
  readonly safeValue: Signal<Value | undefined>;
2662
2723
  hasValue(): boolean;
2663
- } | undefined;
2724
+ } & ResourceLikeMutationExceptions<MutationException, GroupIdentifier>) | undefined;
2664
2725
  } & MergeObjects$1<[
2665
2726
  Insertions,
2666
2727
  IsMethod extends true ? {
@@ -2668,21 +2729,48 @@ type ResourceByIdLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParam
2668
2729
  } : {
2669
2730
  source: ReadonlySource<SourceParams>;
2670
2731
  },
2671
- ResourceByIdRef<GroupIdentifier & string, Value, Params>
2732
+ ResourceByIdRef<GroupIdentifier & string, Value, Params>,
2733
+ [
2734
+ GroupIdentifier
2735
+ ] extends [string] ? ResourceByIdLikeMutationExceptions<MutationException, GroupIdentifier> : {}
2672
2736
  ]>;
2673
- type MutationRef<Value, Params, ArgParams, Insertions, IsMethod, SourceParams, GroupIdentifier> = [unknown] extends [GroupIdentifier] ? ResourceLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions> : ResourceByIdLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, GroupIdentifier>;
2674
- type MutationOutput<State extends object | undefined, Params, ArgParams, SourceParams, GroupIdentifier, Insertions> = MutationRef<State, Params, ArgParams, Insertions, [
2737
+ type MutationRef<Value, Params, ArgParams, Insertions, IsMethod, SourceParams, GroupIdentifier, MutationExceptions extends ResourceExceptionConstraints = ResourceExceptionConstraints> = [unknown] extends [GroupIdentifier] ? ResourceLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, MutationExceptions> : ResourceByIdLikeMutationRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, GroupIdentifier, MutationExceptions>;
2738
+ type MutationOutput<State extends object | undefined, Params, ArgParams, SourceParams, GroupIdentifier, Insertions, MutationExceptions extends ResourceExceptionConstraints> = MutationRef<StripCraftException<State>, StripCraftException<Params>, ArgParams, Insertions, [
2675
2739
  unknown
2676
2740
  ] extends [ArgParams] ? false : true, // ! force to method to have one arg minimum, we can not compare SourceParams type, because it also infer Params
2677
- SourceParams, GroupIdentifier>;
2678
- declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>): MutationOutput<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, {}>;
2679
- declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion1>): MutationOutput<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, Insertion1>;
2680
- declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion2, Insertion1>): MutationOutput<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2>;
2681
- declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion3, Insertion1 & Insertion2>): MutationOutput<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3>;
2682
- declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>): MutationOutput<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4>;
2683
- declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>): MutationOutput<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>;
2684
- declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): MutationOutput<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>;
2685
- declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<MutationState>, NoInfer<MutationParams>, Insertion7, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): MutationOutput<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>;
2741
+ SourceParams, GroupIdentifier, MutationExceptions>;
2742
+ declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Exceptions extends ResourceExceptionConstraints = {
2743
+ params: ExtractCraftException<MutationParams>;
2744
+ loader: ExtractCraftException<MutationState>;
2745
+ }>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>): MutationOutput<StripCraftException<MutationState>, StripCraftException<MutationParams>, MutationArgsParams, StripCraftException<MutationParams>, GroupIdentifier, {}, Exceptions>;
2746
+ declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Exceptions extends ResourceExceptionConstraints = {
2747
+ params: ExtractCraftException<MutationParams>;
2748
+ loader: ExtractCraftException<MutationState>;
2749
+ }>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion1, {}>): MutationOutput<StripCraftException<MutationState>, StripCraftException<MutationParams>, MutationArgsParams, StripCraftException<MutationParams>, GroupIdentifier, Insertion1, Exceptions>;
2750
+ declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Exceptions extends ResourceExceptionConstraints = {
2751
+ params: ExtractCraftException<MutationParams>;
2752
+ loader: ExtractCraftException<MutationState>;
2753
+ }>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion2, Insertion1>): MutationOutput<StripCraftException<MutationState>, StripCraftException<MutationParams>, MutationArgsParams, StripCraftException<MutationParams>, GroupIdentifier, Insertion1 & Insertion2, Exceptions>;
2754
+ declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Exceptions extends ResourceExceptionConstraints = {
2755
+ params: ExtractCraftException<MutationParams>;
2756
+ loader: ExtractCraftException<MutationState>;
2757
+ }>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>): MutationOutput<StripCraftException<MutationState>, StripCraftException<MutationParams>, MutationArgsParams, StripCraftException<MutationParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3, Exceptions>;
2758
+ declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Exceptions extends ResourceExceptionConstraints = {
2759
+ params: ExtractCraftException<MutationParams>;
2760
+ loader: ExtractCraftException<MutationState>;
2761
+ }>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>): MutationOutput<StripCraftException<MutationState>, StripCraftException<MutationParams>, MutationArgsParams, StripCraftException<MutationParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4, Exceptions>;
2762
+ declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Exceptions extends ResourceExceptionConstraints = {
2763
+ params: ExtractCraftException<MutationParams>;
2764
+ loader: ExtractCraftException<MutationState>;
2765
+ }>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>): MutationOutput<StripCraftException<MutationState>, StripCraftException<MutationParams>, MutationArgsParams, StripCraftException<MutationParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5, Exceptions>;
2766
+ declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Exceptions extends ResourceExceptionConstraints = {
2767
+ params: ExtractCraftException<MutationParams>;
2768
+ loader: ExtractCraftException<MutationState>;
2769
+ }>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): MutationOutput<StripCraftException<MutationState>, StripCraftException<MutationParams>, MutationArgsParams, StripCraftException<MutationParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6, Exceptions>;
2770
+ declare function mutation<MutationState extends object | undefined, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Exceptions extends ResourceExceptionConstraints = {
2771
+ params: ExtractCraftException<MutationParams>;
2772
+ loader: ExtractCraftException<MutationState>;
2773
+ }>(mutationConfig: MutationConfig<MutationState, MutationParams, MutationArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<MutationState>>, NoInfer<StripCraftException<MutationParams>>, Exceptions, Insertion7, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): MutationOutput<StripCraftException<MutationState>, StripCraftException<MutationParams>, MutationArgsParams, StripCraftException<MutationParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7, Exceptions>;
2686
2774
 
2687
2775
  interface QueryParamNavigationOptions$1 {
2688
2776
  queryParamsHandling?: 'merge' | 'preserve' | '';
@@ -2691,20 +2779,32 @@ interface QueryParamNavigationOptions$1 {
2691
2779
  skipLocationChange?: boolean;
2692
2780
  }
2693
2781
  type QueryParamsToState<QueryParamConfigs> = {
2694
- [K in keyof QueryParamConfigs]: 'parse' extends keyof QueryParamConfigs[K] ? QueryParamConfigs[K]['parse'] extends (value: string) => infer U ? U : 'Error1: QueryParamsToState' : 'Error2: QueryParamsToState';
2782
+ [K in keyof QueryParamConfigs]: 'parse' extends keyof QueryParamConfigs[K] ? QueryParamConfigs[K]['parse'] extends (value: string) => infer U ? StripCraftException<U> : 'Error1: QueryParamsToState' : 'Error2: QueryParamsToState';
2783
+ };
2784
+ type QueryParamParseExceptionsByKey<QueryParamsType> = QueryParamsType extends Record<string, QueryParamConfig<unknown>> ? {
2785
+ [K in keyof QueryParamsType]: InsertMetaInCraftExceptionIfExists<ExtractCraftException<ReturnType<QueryParamsType[K]['parse']>>, 'parse', K & string>;
2786
+ } : Record<string, never>;
2787
+ type QueryParamParseExceptionUnion<QueryParamsType> = QueryParamParseExceptionsByKey<QueryParamsType>[keyof QueryParamParseExceptionsByKey<QueryParamsType>];
2788
+ type QueryParamExceptions<QueryParamsType> = {
2789
+ list: QueryParamParseExceptionUnion<QueryParamsType>[];
2790
+ parse: Partial<QueryParamParseExceptionsByKey<QueryParamsType>>;
2695
2791
  };
2696
2792
  type QueryParamOutput<QueryParamsType, Insertions, QueryParamsState> = Signal<QueryParamsState> & MergeObjects<[
2697
2793
  {
2698
2794
  [K in keyof QueryParamsState]: Signal<QueryParamsState[K]>;
2699
2795
  },
2700
2796
  IsEmptyObject<Insertions> extends true ? {} : FilterSource<Insertions>,
2797
+ {
2798
+ hasException: Signal<boolean>;
2799
+ exceptions: Signal<QueryParamExceptions<QueryParamsType>>;
2800
+ },
2701
2801
  {
2702
2802
  _config: QueryParamsType;
2703
2803
  }
2704
2804
  ]>;
2705
2805
  interface QueryParamConfig<T = unknown> {
2706
- fallbackValue: NoInfer<T>;
2707
2806
  parse: (value: string) => T;
2807
+ fallbackValue: NoInfer<T>;
2708
2808
  serialize: (value: NoInfer<T>) => string;
2709
2809
  }
2710
2810
  /**
@@ -2784,6 +2884,32 @@ interface QueryParamConfig<T = unknown> {
2784
2884
  *
2785
2885
  * myQueryParams.goTo(5); // Custom method from insertion
2786
2886
  * ```
2887
+ *
2888
+ * @example
2889
+ * Parse exceptions with `craftException`
2890
+ * ```ts
2891
+ * import { craftException, queryParam } from '@craft-ng/core';
2892
+ *
2893
+ * const mode = queryParam({
2894
+ * state: {
2895
+ * mode: {
2896
+ * fallbackValue: 'success' as const,
2897
+ * parse: (value: string) =>
2898
+ * value === 'success'
2899
+ * ? ('success' as const)
2900
+ * : craftException(
2901
+ * { code: 'INVALID_MODE_FROM_URL' },
2902
+ * { received: value },
2903
+ * ),
2904
+ * serialize: (value) => String(value),
2905
+ * },
2906
+ * },
2907
+ * });
2908
+ *
2909
+ * console.log(mode.mode()); // fallbackValue when parse exception occurs
2910
+ * console.log(mode.hasException()); // true/false
2911
+ * console.log(mode.exceptions().parse.mode?.INVALID_MODE_FROM_URL);
2912
+ * ```
2787
2913
  */
2788
2914
  declare function queryParam<QueryParamsType extends Record<string, QueryParamConfig<unknown>>, QueryParamsState = Prettify<QueryParamsToState<QueryParamsType>>>(config: {
2789
2915
  state: QueryParamsType;
@@ -2804,7 +2930,7 @@ interface QueryParamNavigationOptions {
2804
2930
  replaceUrl?: boolean;
2805
2931
  skipLocationChange?: boolean;
2806
2932
  }
2807
- type MutationResourceByIdRefHelper<QueryAndMutationRecord extends QueryAndMutationRecordConstraints> = ResourceByIdLikeMutationRef<QueryAndMutationRecord['mutation']['state'], QueryAndMutationRecord['mutation']['params'], QueryAndMutationRecord['mutation']['isMethod'], QueryAndMutationRecord['mutation']['args'], QueryAndMutationRecord['mutation']['sourceParams'], QueryAndMutationRecord['mutation']['insertions'], QueryAndMutationRecord['mutation']['groupIdentifier']>;
2933
+ type MutationResourceByIdRefHelper<QueryAndMutationRecord extends QueryAndMutationRecordConstraints> = ResourceByIdLikeMutationRef<QueryAndMutationRecord['mutation']['state'], QueryAndMutationRecord['mutation']['params'], QueryAndMutationRecord['mutation']['isMethod'], QueryAndMutationRecord['mutation']['args'], QueryAndMutationRecord['mutation']['sourceParams'], QueryAndMutationRecord['mutation']['insertions'], QueryAndMutationRecord['mutation']['groupIdentifier'], QueryAndMutationRecord['mutation']['exceptions']>;
2808
2934
  type UpdateData<QueryAndMutationRecord extends QueryAndMutationRecordConstraints> = MergeObjects<[
2809
2935
  {
2810
2936
  queryResource: CraftResourceRef<QueryAndMutationRecord['query']['state'], QueryAndMutationRecord['query']['params']>;
@@ -2825,9 +2951,7 @@ type QueryDeclarativeEffect<QueryAndMutationRecord extends QueryAndMutationRecor
2825
2951
  /**
2826
2952
  * Run when the mutation is in loading state.
2827
2953
  */
2828
- optimisticUpdate?: (data: UpdateData<QueryAndMutationRecord> & {
2829
- testData: QueryAndMutationRecord['query']['groupIdentifier'];
2830
- }) => QueryAndMutationRecord['query']['state'];
2954
+ optimisticUpdate?: (data: UpdateData<QueryAndMutationRecord>) => QueryAndMutationRecord['query']['state'];
2831
2955
  /**
2832
2956
  * Run when the mutation is in loaded state.
2833
2957
  */
@@ -2856,34 +2980,57 @@ type QueryDeclarativeEffect<QueryAndMutationRecord extends QueryAndMutationRecor
2856
2980
  filter: FilterQueryById<QueryAndMutationRecord>;
2857
2981
  } : {}
2858
2982
  ]>;
2859
- type InsertionParams<ResourceState extends object | undefined, ResourceParams, PreviousInsertionsOutputs> = {
2983
+ type ResourceExceptionConstraints = {
2984
+ params: unknown;
2985
+ loader: unknown;
2986
+ };
2987
+ type InsertionParams<ResourceState extends object | undefined, ResourceParams, Exceptions extends ResourceExceptionConstraints, PreviousInsertionsOutputs> = {
2988
+ test: ResourceState;
2860
2989
  state: Signal<ResourceState>;
2861
2990
  set: (newState: ResourceState) => ResourceState;
2862
2991
  update: (updateFn: (currentState: ResourceState) => ResourceState) => ResourceState;
2992
+ patch: (patchFn: (currentState: ResourceState) => Partial<ResourceState>) => ResourceState;
2863
2993
  insertions: keyof PreviousInsertionsOutputs extends string ? PreviousInsertionsOutputs : never;
2864
2994
  resource: CraftResourceRef<ResourceState, ResourceParams>;
2865
2995
  resourceParamsSrc: WritableSignal<ResourceParams | undefined>;
2996
+ hasException: Signal<boolean>;
2997
+ exceptions: Signal<{
2998
+ list: (InsertMetaInCraftExceptionIfExists<Exceptions['params'], 'params', unknown> | InsertMetaInCraftExceptionIfExists<Exceptions['loader'], 'loader', unknown>)[];
2999
+ params?: InsertMetaInCraftExceptionIfExists<Exceptions['params'], 'params', unknown>;
3000
+ loader?: InsertMetaInCraftExceptionIfExists<Exceptions['loader'], 'loader', unknown>;
3001
+ }>;
2866
3002
  resourceById: never;
2867
3003
  identifier: never;
2868
3004
  };
2869
- type InsertionByIdParams<GroupIdentifier extends string, ResourceState extends object | undefined, ResourceParams, PreviousInsertionsOutputs> = {
3005
+ type InsertionByIdParams<GroupIdentifier extends string, ResourceState extends object | undefined, ResourceParams, Exceptions extends ResourceExceptionConstraints, PreviousInsertionsOutputs> = {
2870
3006
  state: Signal<ResourceState>;
2871
3007
  set: (newState: ResourceState) => ResourceState;
2872
3008
  update: (updateFn: (currentState: ResourceState) => ResourceState) => ResourceState;
3009
+ patch: (patchFn: (currentState: ResourceState) => Partial<ResourceState>) => ResourceState;
2873
3010
  insertions: keyof PreviousInsertionsOutputs extends string ? PreviousInsertionsOutputs : never;
2874
3011
  resourceById: ResourceByIdRef<GroupIdentifier, ResourceState, ResourceParams>;
2875
3012
  resource: never;
2876
3013
  resourceParamsSrc: WritableSignal<ResourceParams | undefined>;
3014
+ hasException: Signal<boolean>;
3015
+ exceptions: Signal<{
3016
+ list: (InsertMetaInCraftExceptionIfExists<Exceptions['params'], 'params', unknown> | InsertMetaInCraftExceptionIfExists<Exceptions['loader'], 'loader', GroupIdentifier>)[];
3017
+ params?: InsertMetaInCraftExceptionIfExists<Exceptions['params'], 'params', unknown>;
3018
+ loader: Partial<Record<GroupIdentifier, InsertMetaInCraftExceptionIfExists<Exceptions['loader'], 'loader', GroupIdentifier>>>;
3019
+ }>;
2877
3020
  identifier: (params: NonNullable<ResourceParams>) => GroupIdentifier;
2878
3021
  };
2879
3022
  type InsertionStateFactoryContext<StateType, PreviousInsertionsOutputs> = {
2880
3023
  state: Signal<StateType>;
2881
3024
  set: (newState: StateType) => StateType;
2882
3025
  update: (updateFn: (currentState: StateType) => StateType) => StateType;
3026
+ patch: (patchFn: (currentState: StateType) => Partial<StateType>) => StateType;
2883
3027
  insertions: keyof PreviousInsertionsOutputs extends string ? PreviousInsertionsOutputs : never;
2884
3028
  };
2885
3029
  type QueryParamMethods<QueryParamsState> = {
2886
- patch: (params: Partial<QueryParamsState>, options?: QueryParamNavigationOptions) => void;
3030
+ patch: {
3031
+ (patchFn: (currentParams: QueryParamsState) => Partial<QueryParamsState>, options?: QueryParamNavigationOptions): QueryParamsState;
3032
+ (params: Partial<QueryParamsState>, options?: QueryParamNavigationOptions): QueryParamsState;
3033
+ };
2887
3034
  reset: (options?: QueryParamNavigationOptions) => void;
2888
3035
  set: (params: QueryParamsState, options?: QueryParamNavigationOptions) => QueryParamsState;
2889
3036
  update: (updateFn: (currentParams: QueryParamsState) => QueryParamsState, options?: QueryParamNavigationOptions) => QueryParamsState;
@@ -2891,14 +3038,16 @@ type QueryParamMethods<QueryParamsState> = {
2891
3038
  type InsertionQueryParamsFactoryContext<QueryParamsType, PreviousInsertionsOutputs, QueryParamsState = Prettify<QueryParamsToState<QueryParamsType>>> = QueryParamMethods<QueryParamsState> & {
2892
3039
  state: Signal<QueryParamsState>;
2893
3040
  config: QueryParamsType;
3041
+ hasException: Signal<boolean>;
3042
+ exceptions: Signal<QueryParamExceptions<QueryParamsType>>;
2894
3043
  insertions: keyof PreviousInsertionsOutputs extends string ? PreviousInsertionsOutputs : never;
2895
3044
  };
2896
- type InsertionResourceFactoryContext<GroupIdentifier, ResourceState extends object | undefined, ResourceParams, PreviousInsertionsOutputs> = [unknown] extends [GroupIdentifier] ? InsertionParams<ResourceState, ResourceParams, PreviousInsertionsOutputs> : InsertionByIdParams<GroupIdentifier & string, ResourceState, ResourceParams, PreviousInsertionsOutputs>;
2897
- type InsertionsResourcesFactory<GroupIdentifier, ResourceState extends object | undefined, ResourceParams, InsertionsOutputs, PreviousInsertionsOutputs = {}> = (context: InsertionResourceFactoryContext<GroupIdentifier, ResourceState, ResourceParams, PreviousInsertionsOutputs>) => InsertionsOutputs;
3045
+ type InsertionResourceFactoryContext<GroupIdentifier, ResourceState extends object | undefined, ResourceParams, Exceptions extends ResourceExceptionConstraints, PreviousInsertionsOutputs> = [unknown] extends [GroupIdentifier] ? InsertionParams<ResourceState, ResourceParams, Exceptions, PreviousInsertionsOutputs> : InsertionByIdParams<GroupIdentifier & string, ResourceState, ResourceParams, Exceptions, PreviousInsertionsOutputs>;
3046
+ type InsertionsResourcesFactory<GroupIdentifier, ResourceState extends object | undefined, ResourceParams, Exceptions extends ResourceExceptionConstraints, InsertionsOutputs, PreviousInsertionsOutputs = {}> = (context: InsertionResourceFactoryContext<GroupIdentifier, ResourceState, ResourceParams, Exceptions, PreviousInsertionsOutputs>) => InsertionsOutputs;
2898
3047
  type InsertionsStateFactory<State, InsertionsOutputs, PreviousInsertionsOutputs = {}> = (context: InsertionStateFactoryContext<State, PreviousInsertionsOutputs>) => InsertionsOutputs;
2899
3048
  type InsertionsQueryParamsFactory<QueryParamsType, InsertionsOutputs, PreviousInsertionsOutputs = {}> = (context: InsertionQueryParamsFactoryContext<QueryParamsType, PreviousInsertionsOutputs>) => InsertionsOutputs;
2900
3049
 
2901
- type AsyncProcessRef<Value, ArgParams, Params, Insertions, IsMethod, SourceParams, GroupIdentifier> = MergeObjects$1<[
3050
+ type AsyncProcessRef<Value, ArgParams, Params, Insertions, IsMethod, SourceParams, GroupIdentifier, AsyncProcessExceptions extends AsyncProcessExceptionConstraints = AsyncProcessExceptionConstraints> = MergeObjects$1<[
2902
3051
  [
2903
3052
  unknown
2904
3053
  ] extends [GroupIdentifier] ? {
@@ -2908,7 +3057,7 @@ type AsyncProcessRef<Value, ArgParams, Params, Insertions, IsMethod, SourceParam
2908
3057
  readonly isLoading: Signal<boolean>;
2909
3058
  readonly safeValue: Signal<Value | undefined>;
2910
3059
  hasValue(): boolean;
2911
- } : {},
3060
+ } & ResourceLikeAsyncProcessExceptions<AsyncProcessExceptions> : {},
2912
3061
  Insertions,
2913
3062
  IsMethod extends true ? {
2914
3063
  method: (args: ArgParams) => Params;
@@ -2926,15 +3075,15 @@ type AsyncProcessRef<Value, ArgParams, Params, Insertions, IsMethod, SourceParam
2926
3075
  *
2927
3076
  * return the associated resource or undefined if not existing
2928
3077
  */
2929
- select: (id: GroupIdentifier) => {
3078
+ select: (id: GroupIdentifier) => ({
2930
3079
  readonly value: Signal<Value | undefined>;
2931
3080
  readonly status: Signal<ResourceStatus>;
2932
3081
  readonly error: Signal<Error | undefined>;
2933
3082
  readonly isLoading: Signal<boolean>;
2934
3083
  readonly safeValue: Signal<Value | undefined>;
2935
3084
  hasValue(): boolean;
2936
- } | undefined;
2937
- }
3085
+ } & ResourceLikeAsyncProcessExceptions<AsyncProcessExceptions, GroupIdentifier>) | undefined;
3086
+ } & ([GroupIdentifier] extends [string] ? ResourceByIdLikeAsyncProcessExceptions<AsyncProcessExceptions, GroupIdentifier> : {})
2938
3087
  ]>;
2939
3088
  type AsyncProcessConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdentifier> = Omit<ResourceOptions<NoInfer<ResourceState>, Params>, 'params' | 'loader'> & ({
2940
3089
  /**
@@ -2947,29 +3096,49 @@ type AsyncProcessConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupId
2947
3096
  * A unique identifier for the resource, derived from the params.
2948
3097
  * It should be a string that uniquely identifies the resource based on the params.
2949
3098
  */
2950
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
3099
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
2951
3100
  loader: (param: ResourceLoaderParams<NonNullable<[
2952
3101
  unknown
2953
- ] extends [Params] ? NoInfer<SourceParams> : NoInfer<Params>>>) => Promise<ResourceState>;
3102
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>) => Promise<ResourceState>;
2954
3103
  stream?: never;
2955
3104
  preservePreviousValue?: () => boolean;
2956
3105
  } | {
2957
3106
  method: ((args: ParamsArgs) => Params) | ReadonlySource<SourceParams>;
2958
3107
  loader?: never;
2959
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
3108
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
2960
3109
  /**
2961
3110
  * Loading function which returns a `Promise` of a signal of the resource's value for a given
2962
3111
  * request, which can change over time as new values are received from a stream.
2963
3112
  */
2964
3113
  stream: ResourceStreamingLoader<ResourceState, ResourceLoaderParams<NonNullable<[
2965
3114
  unknown
2966
- ] extends [Params] ? NoInfer<SourceParams> : NoInfer<Params>>>>;
3115
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>>;
2967
3116
  preservePreviousValue?: () => boolean;
2968
3117
  });
2969
- type AsyncProcessOutput<State extends object | undefined, Params, ArgParams, SourceParams, GroupIdentifier, Insertions> = AsyncProcessRef<State, ArgParams, Params, Insertions, [
3118
+ type AsyncProcessExceptionConstraints = {
3119
+ params: AnyCraftException;
3120
+ loader: AnyCraftException;
3121
+ };
3122
+ type ResourceLikeAsyncProcessExceptions<AsyncProcessException extends AsyncProcessExceptionConstraints = AsyncProcessExceptionConstraints, GroupIdentifier = unknown> = {
3123
+ hasException: Signal<boolean>;
3124
+ exceptions: Signal<{
3125
+ list: (InsertMetaInCraftExceptionIfExists<AsyncProcessException['params'], 'params', GroupIdentifier> | InsertMetaInCraftExceptionIfExists<AsyncProcessException['loader'], 'loader', GroupIdentifier>)[];
3126
+ params?: InsertMetaInCraftExceptionIfExists<AsyncProcessException['params'], 'params', unknown>;
3127
+ loader?: InsertMetaInCraftExceptionIfExists<AsyncProcessException['loader'], 'loader', GroupIdentifier>;
3128
+ }>;
3129
+ };
3130
+ type ResourceByIdLikeAsyncProcessExceptions<AsyncProcessException extends AsyncProcessExceptionConstraints = AsyncProcessExceptionConstraints, GroupIdentifier extends string = string> = {
3131
+ hasException: Signal<boolean>;
3132
+ exceptions: Signal<{
3133
+ list: (InsertMetaInCraftExceptionIfExists<AsyncProcessException['params'], 'params', unknown> | InsertMetaInCraftExceptionIfExists<AsyncProcessException['loader'], 'loader', GroupIdentifier>)[];
3134
+ params?: InsertMetaInCraftExceptionIfExists<AsyncProcessException['params'], 'params', unknown>;
3135
+ loader: Partial<Record<GroupIdentifier, InsertMetaInCraftExceptionIfExists<AsyncProcessException['loader'], 'loader', GroupIdentifier>>>;
3136
+ }>;
3137
+ };
3138
+ type AsyncProcessOutput<State extends object | undefined, Params, ArgParams, SourceParams, GroupIdentifier, Insertions, AsyncProcessExceptions extends AsyncProcessExceptionConstraints> = AsyncProcessRef<StripCraftException<State>, ArgParams, StripCraftException<Params>, Insertions, [
2970
3139
  unknown
2971
3140
  ] extends [ArgParams] ? false : true, // ! force to method to have one arg minimum, we can not compare SourceParams type, because it also infer Params
2972
- SourceParams, GroupIdentifier>;
3141
+ SourceParams, GroupIdentifier, AsyncProcessExceptions>;
2973
3142
  /**
2974
3143
  * Creates an async method that manages asynchronous operations with automatic state tracking.
2975
3144
  *
@@ -3076,6 +3245,36 @@ SourceParams, GroupIdentifier>;
3076
3245
  * ```
3077
3246
  *
3078
3247
  * @example
3248
+ * Business exceptions with `craftException`
3249
+ * ```ts
3250
+ * import { asyncProcess, craftException } from '@craft-ng/core';
3251
+ *
3252
+ * const loadUser = asyncProcess({
3253
+ * method: (value: string) =>
3254
+ * value.length < 3
3255
+ * ? craftException(
3256
+ * { code: 'SEARCH_TERM_TOO_SHORT' },
3257
+ * { min: 3, received: value.length },
3258
+ * )
3259
+ * : value,
3260
+ * loader: async ({ params }) =>
3261
+ * params === 'blocked'
3262
+ * ? craftException(
3263
+ * { code: 'USER_ACCESS_FORBIDDEN' },
3264
+ * { id: params },
3265
+ * )
3266
+ * : { id: params, name: 'John Doe' },
3267
+ * });
3268
+ *
3269
+ * loadUser.method('ab');
3270
+ * console.log(loadUser.hasException()); // true
3271
+ * console.log(loadUser.exceptions().params?.SEARCH_TERM_TOO_SHORT);
3272
+ *
3273
+ * loadUser.method('blocked');
3274
+ * console.log(loadUser.exceptions().loader?.USER_ACCESS_FORBIDDEN);
3275
+ * ```
3276
+ *
3277
+ * @example
3079
3278
  * Async method with identifier for parallel operations
3080
3279
  * ```ts
3081
3280
  * const delayById = asyncProcess({
@@ -3116,14 +3315,38 @@ SourceParams, GroupIdentifier>;
3116
3315
  *
3117
3316
  * ```
3118
3317
  */
3119
- declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>): AsyncProcessOutput<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, {}>;
3120
- declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion1>): AsyncProcessOutput<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1>;
3121
- declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion2, Insertion1>): AsyncProcessOutput<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2>;
3122
- declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion3, Insertion1 & Insertion2>): AsyncProcessOutput<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3>;
3123
- declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Insertion4>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>): AsyncProcessOutput<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4>;
3124
- declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>): AsyncProcessOutput<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>;
3125
- declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): AsyncProcessOutput<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>;
3126
- declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<AsyncProcesstate>, NoInfer<AsyncProcessParams>, Insertion7, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): AsyncProcessOutput<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>;
3318
+ declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Exceptions extends AsyncProcessExceptionConstraints = {
3319
+ params: ExtractCraftException<AsyncProcessParams>;
3320
+ loader: ExtractCraftException<AsyncProcesstate>;
3321
+ }>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>): AsyncProcessOutput<StripCraftException<AsyncProcesstate>, StripCraftException<AsyncProcessParams>, AsyncProcessArgsParams, StripCraftException<AsyncProcessParams>, GroupIdentifier, {}, Exceptions>;
3322
+ declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Exceptions extends AsyncProcessExceptionConstraints = {
3323
+ params: ExtractCraftException<AsyncProcessParams>;
3324
+ loader: ExtractCraftException<AsyncProcesstate>;
3325
+ }>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion1, {}>): AsyncProcessOutput<StripCraftException<AsyncProcesstate>, StripCraftException<AsyncProcessParams>, AsyncProcessArgsParams, StripCraftException<AsyncProcessParams>, GroupIdentifier, Insertion1, Exceptions>;
3326
+ declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Exceptions extends AsyncProcessExceptionConstraints = {
3327
+ params: ExtractCraftException<AsyncProcessParams>;
3328
+ loader: ExtractCraftException<AsyncProcesstate>;
3329
+ }>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion2, Insertion1>): AsyncProcessOutput<StripCraftException<AsyncProcesstate>, StripCraftException<AsyncProcessParams>, AsyncProcessArgsParams, StripCraftException<AsyncProcessParams>, GroupIdentifier, Insertion1 & Insertion2, Exceptions>;
3330
+ declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Exceptions extends AsyncProcessExceptionConstraints = {
3331
+ params: ExtractCraftException<AsyncProcessParams>;
3332
+ loader: ExtractCraftException<AsyncProcesstate>;
3333
+ }>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>): AsyncProcessOutput<StripCraftException<AsyncProcesstate>, StripCraftException<AsyncProcessParams>, AsyncProcessArgsParams, StripCraftException<AsyncProcessParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3, Exceptions>;
3334
+ declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Insertion4, Exceptions extends AsyncProcessExceptionConstraints = {
3335
+ params: ExtractCraftException<AsyncProcessParams>;
3336
+ loader: ExtractCraftException<AsyncProcesstate>;
3337
+ }>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>): AsyncProcessOutput<StripCraftException<AsyncProcesstate>, StripCraftException<AsyncProcessParams>, AsyncProcessArgsParams, StripCraftException<AsyncProcessParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4, Exceptions>;
3338
+ declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Exceptions extends AsyncProcessExceptionConstraints = {
3339
+ params: ExtractCraftException<AsyncProcessParams>;
3340
+ loader: ExtractCraftException<AsyncProcesstate>;
3341
+ }>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>): AsyncProcessOutput<StripCraftException<AsyncProcesstate>, StripCraftException<AsyncProcessParams>, AsyncProcessArgsParams, StripCraftException<AsyncProcessParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5, Exceptions>;
3342
+ declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Exceptions extends AsyncProcessExceptionConstraints = {
3343
+ params: ExtractCraftException<AsyncProcessParams>;
3344
+ loader: ExtractCraftException<AsyncProcesstate>;
3345
+ }>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): AsyncProcessOutput<StripCraftException<AsyncProcesstate>, StripCraftException<AsyncProcessParams>, AsyncProcessArgsParams, StripCraftException<AsyncProcessParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6, Exceptions>;
3346
+ declare function asyncProcess<AsyncProcesstate extends object | undefined, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Exceptions extends AsyncProcessExceptionConstraints = {
3347
+ params: ExtractCraftException<AsyncProcessParams>;
3348
+ loader: ExtractCraftException<AsyncProcesstate>;
3349
+ }>(AsyncProcessConfig: AsyncProcessConfig<AsyncProcesstate, AsyncProcessParams, AsyncProcessArgsParams, SourceParams, GroupIdentifier>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<AsyncProcesstate>>, NoInfer<StripCraftException<AsyncProcessParams>>, Exceptions, Insertion7, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): AsyncProcessOutput<StripCraftException<AsyncProcesstate>, StripCraftException<AsyncProcessParams>, AsyncProcessArgsParams, StripCraftException<AsyncProcessParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7, Exceptions>;
3127
3350
 
3128
3351
  /**
3129
3352
  * Creates a derived readonly source that transforms values from an origin source using a computation function.
@@ -5175,7 +5398,7 @@ type QueryConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdentifie
5175
5398
  * If a request function isn't provided, the loader won't rerun unless the resource is reloaded.
5176
5399
  */
5177
5400
  params: () => Params;
5178
- loader: (param: NoInfer<ResourceLoaderParams<Params>>) => Promise<ResourceState>;
5401
+ loader: (param: NoInfer<ResourceLoaderParams<StripCraftException<Params>>>) => Promise<ResourceState>;
5179
5402
  method?: never;
5180
5403
  fromResourceById?: never;
5181
5404
  stream?: never;
@@ -5194,7 +5417,9 @@ type QueryConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdentifie
5194
5417
  * It also accepts a ReadonlySource<SourceParams> to connect the query params to an external signal source.
5195
5418
  */
5196
5419
  method: ((args: ParamsArgs) => Params) | ReadonlySource<SourceParams>;
5197
- loader: (param: NoInfer<ResourceLoaderParams<Params>>) => Promise<ResourceState>;
5420
+ loader: (param: ResourceLoaderParams<NonNullable<[
5421
+ unknown
5422
+ ] extends [Params] ? NoInfer<StripCraftException<SourceParams>> : NoInfer<StripCraftException<Params>>>>) => Promise<ResourceState>;
5198
5423
  params?: never;
5199
5424
  fromResourceById?: never;
5200
5425
  stream?: never;
@@ -5259,7 +5484,7 @@ type QueryConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdentifie
5259
5484
  * A unique identifier for the resource, derived from the params.
5260
5485
  * It should be a string that uniquely identifies the resource based on the params.
5261
5486
  */
5262
- identifier?: (params: NoInfer<NonNullable<Params>>) => GroupIdentifier;
5487
+ identifier?: (params: NoInfer<NonNullable<StripCraftException<Params>>>) => GroupIdentifier;
5263
5488
  /**
5264
5489
  * Under the hood, a resource is generated for each new identifier generated when the params source change.
5265
5490
  *
@@ -5280,7 +5505,23 @@ type QueryConfig<ResourceState, Params, ParamsArgs, SourceParams, GroupIdentifie
5280
5505
  */
5281
5506
  equalParams?: Params extends object ? 'default' | 'useIdentifier' | ((a: Params, b: Params, identifierFn: (params: Params) => GroupIdentifier) => boolean) : never;
5282
5507
  };
5283
- type ResourceLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions> = {
5508
+ type ResourceLikeExceptions<QueryException extends ResourceExceptionConstraints, GroupIdentifier = unknown> = {
5509
+ hasException: Signal<boolean>;
5510
+ exceptions: Signal<{
5511
+ list: (InsertMetaInCraftExceptionIfExists<QueryException['params'], 'params', unknown> | InsertMetaInCraftExceptionIfExists<QueryException['loader'], 'loader', GroupIdentifier>)[];
5512
+ params?: InsertMetaInCraftExceptionIfExists<QueryException['params'], 'params', unknown>;
5513
+ loader?: InsertMetaInCraftExceptionIfExists<QueryException['loader'], 'loader', GroupIdentifier>;
5514
+ }>;
5515
+ };
5516
+ type ResourceByIdLikeExceptions<QueryException extends ResourceExceptionConstraints, GroupIdentifier extends string> = {
5517
+ hasException: Signal<boolean>;
5518
+ exceptions: Signal<{
5519
+ list: (InsertMetaInCraftExceptionIfExists<QueryException['params'], 'params', unknown> | InsertMetaInCraftExceptionIfExists<QueryException['loader'], 'loader', GroupIdentifier>)[];
5520
+ params?: InsertMetaInCraftExceptionIfExists<QueryException['params'], 'params', unknown>;
5521
+ loader: Partial<Record<GroupIdentifier, InsertMetaInCraftExceptionIfExists<QueryException['loader'], 'loader', GroupIdentifier>>>;
5522
+ }>;
5523
+ };
5524
+ type ResourceLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, QueryException extends ResourceExceptionConstraints> = {
5284
5525
  type: 'resourceLike';
5285
5526
  kind: 'query';
5286
5527
  } & MergeObjects$1<[
@@ -5299,16 +5540,17 @@ type ResourceLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Inse
5299
5540
  readonly resourceParamsSrc: WritableSignal<NoInfer<Params>>;
5300
5541
  },
5301
5542
  IsMethod extends true ? {
5302
- mutate: (args: ArgParams) => Params;
5543
+ call: (args: ArgParams) => Params;
5303
5544
  } : {
5304
5545
  source: ReadonlySource<SourceParams>;
5305
5546
  },
5306
5547
  Insertions,
5548
+ ResourceLikeExceptions<QueryException>,
5307
5549
  {
5308
5550
  [key in `~InternalType`]: 'Used to avoid TS type erasure';
5309
5551
  }
5310
5552
  ]>;
5311
- type ResourceByIdLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, GroupIdentifier> = {
5553
+ type ResourceByIdLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, GroupIdentifier, QueryException extends ResourceExceptionConstraints> = {
5312
5554
  type: 'resourceByGroupLike';
5313
5555
  kind: 'query';
5314
5556
  } & {
@@ -5322,7 +5564,7 @@ type ResourceByIdLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams,
5322
5564
  *
5323
5565
  * return the associated resource or undefined if not existing
5324
5566
  */
5325
- select: (id: GroupIdentifier) => {
5567
+ select: (id: GroupIdentifier) => ({
5326
5568
  readonly value: Signal<Value | undefined>;
5327
5569
  /**
5328
5570
  * Avoids to throw error when accessing value during error state
@@ -5332,39 +5574,66 @@ type ResourceByIdLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams,
5332
5574
  readonly error: Signal<Error | undefined>;
5333
5575
  readonly isLoading: Signal<boolean>;
5334
5576
  hasValue(): boolean;
5335
- } | undefined;
5577
+ } & ResourceLikeExceptions<QueryException, GroupIdentifier>) | undefined;
5336
5578
  } & MergeObjects$1<[
5337
5579
  Insertions,
5338
5580
  IsMethod extends true ? {
5339
- mutate: (args: ArgParams) => Params;
5581
+ call: (args: ArgParams) => Params;
5340
5582
  } : {
5341
5583
  source: ReadonlySource<SourceParams>;
5342
5584
  },
5343
- ResourceByIdRef<GroupIdentifier & string, Value, Params>
5585
+ ResourceByIdRef<GroupIdentifier & string, Value, Params>,
5586
+ [
5587
+ GroupIdentifier
5588
+ ] extends [string] ? ResourceByIdLikeExceptions<QueryException, GroupIdentifier> : {}
5344
5589
  ]>;
5345
- type QueryRef<Value, Params, ArgParams, Insertions, IsMethod, SourceParams, GroupIdentifier> = [unknown] extends [GroupIdentifier] ? ResourceLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions> : ResourceByIdLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, GroupIdentifier>;
5346
- type QueryOutput<State extends object | undefined, Params, ArgParams, SourceParams, GroupIdentifier, Insertions> = QueryRef<State, Params, ArgParams, Insertions, [
5590
+ type QueryRef<Value, Params, ArgParams, Insertions, IsMethod, SourceParams, GroupIdentifier, QueryExceptions extends ResourceExceptionConstraints> = [unknown] extends [GroupIdentifier] ? ResourceLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, QueryExceptions> : ResourceByIdLikeQueryRef<Value, Params, IsMethod, ArgParams, SourceParams, Insertions, GroupIdentifier, QueryExceptions>;
5591
+ type QueryOutput<State extends object | undefined, Params, ArgParams, SourceParams, GroupIdentifier, Insertions, QueryExceptions extends ResourceExceptionConstraints> = QueryRef<State, Params, ArgParams, Insertions, [
5347
5592
  unknown
5348
5593
  ] extends [ArgParams] ? false : true, // ! force to method to have one arg minimum, we can not compare SourceParams type, because it also infer Params
5349
- SourceParams, GroupIdentifier>;
5350
- declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>): QueryOutput<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, {}>;
5351
- declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion1>): QueryOutput<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, Insertion1>;
5352
- declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion2, Insertion1>): QueryOutput<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2>;
5353
- declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion3, Insertion1 & Insertion2>): QueryOutput<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3>;
5354
- declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>): QueryOutput<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4>;
5355
- declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>): QueryOutput<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>;
5356
- declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): QueryOutput<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>;
5357
- declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<QueryState>, NoInfer<QueryParams>, Insertion7, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): QueryOutput<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>;
5594
+ SourceParams, GroupIdentifier, QueryExceptions>;
5595
+ declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Exceptions extends ResourceExceptionConstraints = {
5596
+ params: ExtractCraftException<QueryParams>;
5597
+ loader: ExtractCraftException<QueryState>;
5598
+ }>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>): QueryOutput<StripCraftException<QueryState>, StripCraftException<QueryParams>, QueryArgsParams, StripCraftException<QueryParams>, GroupIdentifier, {}, Exceptions>;
5599
+ declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Exceptions extends ResourceExceptionConstraints = {
5600
+ params: ExtractCraftException<QueryParams>;
5601
+ loader: ExtractCraftException<QueryState>;
5602
+ }>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion1, {}>): QueryOutput<StripCraftException<QueryState>, StripCraftException<QueryParams>, QueryArgsParams, StripCraftException<QueryParams>, GroupIdentifier, Insertion1, Exceptions>;
5603
+ declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Exceptions extends ResourceExceptionConstraints = {
5604
+ params: ExtractCraftException<QueryParams>;
5605
+ loader: ExtractCraftException<QueryState>;
5606
+ }>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion2, Insertion1>): QueryOutput<StripCraftException<QueryState>, StripCraftException<QueryParams>, QueryArgsParams, StripCraftException<QueryParams>, GroupIdentifier, Insertion1 & Insertion2, Exceptions>;
5607
+ declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Exceptions extends ResourceExceptionConstraints = {
5608
+ params: ExtractCraftException<QueryParams>;
5609
+ loader: ExtractCraftException<QueryState>;
5610
+ }>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>): QueryOutput<StripCraftException<QueryState>, StripCraftException<QueryParams>, QueryArgsParams, StripCraftException<QueryParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3, Exceptions>;
5611
+ declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Exceptions extends ResourceExceptionConstraints = {
5612
+ params: ExtractCraftException<QueryParams>;
5613
+ loader: ExtractCraftException<QueryState>;
5614
+ }>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>): QueryOutput<StripCraftException<QueryState>, StripCraftException<QueryParams>, QueryArgsParams, StripCraftException<QueryParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4, Exceptions>;
5615
+ declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Exceptions extends ResourceExceptionConstraints = {
5616
+ params: ExtractCraftException<QueryParams>;
5617
+ loader: ExtractCraftException<QueryState>;
5618
+ }>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>): QueryOutput<StripCraftException<QueryState>, StripCraftException<QueryParams>, QueryArgsParams, StripCraftException<QueryParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5, Exceptions>;
5619
+ declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Exceptions extends ResourceExceptionConstraints = {
5620
+ params: ExtractCraftException<QueryParams>;
5621
+ loader: ExtractCraftException<QueryState>;
5622
+ }>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): QueryOutput<StripCraftException<QueryState>, StripCraftException<QueryParams>, QueryArgsParams, StripCraftException<QueryParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6, Exceptions>;
5623
+ declare function query<QueryState extends object | undefined, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier extends string, FromObjectState, FromObjectResourceParams, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Exceptions extends ResourceExceptionConstraints = {
5624
+ params: ExtractCraftException<QueryParams>;
5625
+ loader: ExtractCraftException<QueryState>;
5626
+ }>(queryConfig: QueryConfig<QueryState, QueryParams, QueryArgsParams, SourceParams, GroupIdentifier, FromObjectGroupIdentifier, FromObjectState, FromObjectResourceParams>, insertion1: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion1>, insertion2: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion2, Insertion1>, insertion3: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsResourcesFactory<NoInfer<GroupIdentifier>, NoInfer<StripCraftException<QueryState>>, NoInfer<StripCraftException<QueryParams>>, Exceptions, Insertion7, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): QueryOutput<StripCraftException<QueryState>, StripCraftException<QueryParams>, QueryArgsParams, StripCraftException<QueryParams>, GroupIdentifier, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7, Exceptions>;
5358
5627
 
5359
- type SpecificCraftQueryOutputs<ResourceName extends string, ResourceState extends object | undefined, ResourceParams, ResourceArgsParams, IsMethod, SourceParams, GroupIdentifier, InsertionsOutputs> = PartialContext<{
5628
+ type SpecificCraftQueryOutputs<ResourceName extends string, ResourceState extends object | undefined, ResourceParams, ResourceArgsParams, IsMethod, SourceParams, GroupIdentifier, InsertionsOutputs, QueryExceptions extends ResourceExceptionConstraints> = PartialContext<{
5360
5629
  props: {
5361
- [key in `${ResourceName & string}`]: QueryOutput<ResourceState, ResourceArgsParams, ResourceParams, SourceParams, GroupIdentifier, InsertionsOutputs>;
5630
+ [key in `${ResourceName & string}`]: QueryOutput<ResourceState, ResourceArgsParams, ResourceParams, SourceParams, GroupIdentifier, InsertionsOutputs, QueryExceptions>;
5362
5631
  };
5363
5632
  _query: {
5364
- [key in ResourceName & string]: QueryOutput<ResourceState, ResourceArgsParams, ResourceParams, SourceParams, GroupIdentifier, InsertionsOutputs>;
5633
+ [key in ResourceName & string]: QueryOutput<ResourceState, ResourceArgsParams, ResourceParams, SourceParams, GroupIdentifier, InsertionsOutputs, QueryExceptions>;
5365
5634
  };
5366
5635
  }>;
5367
- type CraftQueryOutputs<Context extends ContextConstraints, StoreConfig extends StoreConfigConstraints, ResourceName extends string, ResourceState extends object | undefined, ResourceParams, ResourceArgsParams, IsMethod, SourceParams, GroupIdentifier, InsertionsOutputs> = CraftFactoryUtility<Context, StoreConfig, SpecificCraftQueryOutputs<ResourceName, ResourceState, ResourceParams, ResourceArgsParams, IsMethod, SourceParams, GroupIdentifier, InsertionsOutputs>>;
5636
+ type CraftQueryOutputs<Context extends ContextConstraints, StoreConfig extends StoreConfigConstraints, ResourceName extends string, ResourceState extends object | undefined, ResourceParams, ResourceArgsParams, IsMethod, SourceParams, GroupIdentifier, InsertionsOutputs, QueryExceptions extends ResourceExceptionConstraints> = CraftFactoryUtility<Context, StoreConfig, SpecificCraftQueryOutputs<ResourceName, ResourceState, ResourceParams, ResourceArgsParams, IsMethod, SourceParams, GroupIdentifier, InsertionsOutputs, QueryExceptions>>;
5368
5637
  type ContextQueryEntries<Context extends ContextConstraints, StoreConfig extends StoreConfigConstraints, ResourceName extends string> = Context['_inputs'] & Context['_injections'] & Context['_sources'] & Omit<Context['props'], keyof Context['_mutation']> & Context['_AsyncProcess'] & Context['_mutation'] & {
5369
5638
  INSERT_CONFIG: {
5370
5639
  storeName: StoreConfig['name'];
@@ -5768,7 +6037,7 @@ type ContextQueryEntries<Context extends ContextConstraints, StoreConfig extends
5768
6037
  * );
5769
6038
  * ```
5770
6039
  */
5771
- declare function craftQuery<Context extends ContextConstraints, StoreConfig extends StoreConfigConstraints, const ResourceName extends string, ResourceState extends object | undefined, ResourceParams, ResourceArgsParams, InsertionsOutputs, IsMethod, SourceParams, GroupIdentifier>(resourceName: ResourceName, queryFactory: (context: ContextQueryEntries<Context, StoreConfig, ResourceName>) => QueryOutput<ResourceState, ResourceArgsParams, ResourceParams, SourceParams, GroupIdentifier, InsertionsOutputs>): CraftQueryOutputs<Context, StoreConfig, ResourceName, NoInfer<ResourceState>, ResourceParams, ResourceArgsParams, IsMethod, SourceParams, GroupIdentifier, InsertionsOutputs>;
6040
+ declare function craftQuery<Context extends ContextConstraints, StoreConfig extends StoreConfigConstraints, const ResourceName extends string, ResourceState extends object | undefined, ResourceParams, ResourceArgsParams, InsertionsOutputs, IsMethod, SourceParams, GroupIdentifier, QueryExceptions extends ResourceExceptionConstraints>(resourceName: ResourceName, queryFactory: (context: ContextQueryEntries<Context, StoreConfig, ResourceName>) => QueryOutput<ResourceState, ResourceArgsParams, ResourceParams, SourceParams, GroupIdentifier, InsertionsOutputs, QueryExceptions>): CraftQueryOutputs<Context, StoreConfig, ResourceName, NoInfer<ResourceState>, ResourceParams, ResourceArgsParams, IsMethod, SourceParams, GroupIdentifier, InsertionsOutputs, QueryExceptions>;
5772
6041
 
5773
6042
  type InferQueryParamsState<T> = T extends WritableSignal<infer U> ? U : never;
5774
6043
  type SpecificCraftSetAllQueriesParamsStandaloneOutputs<Context extends ContextConstraints> = {
@@ -6074,6 +6343,74 @@ type ReadonlySource$<T> = {
6074
6343
  subscribe: (callback: (value: T) => void) => ReturnType<EventEmitter<T>['subscribe']>;
6075
6344
  value: Signal<T | undefined>;
6076
6345
  };
6346
+ /**
6347
+ * Creates an event emitter with automatic cleanup and signal-based value tracking.
6348
+ *
6349
+ * `source$` provides a lightweight event streaming solution that combines event emission,
6350
+ * automatic subscription cleanup via `DestroyRef`, and signal-based reactive value tracking.
6351
+ *
6352
+ * @template T - The type of values emitted by the source
6353
+ *
6354
+ * @returns {Source$<T>} An object with the following methods and properties:
6355
+ * - `emit(value: T)` - Emits a value to all subscribers and updates the internal signal
6356
+ * - `subscribe(callback: (value: T) => void)` - Subscribes to emissions with automatic cleanup
6357
+ * - `value: Signal<T | undefined>` - A read-only signal containing the last emitted value
6358
+ * - `asReadonly()` - Returns a read-only version (only `subscribe` and `value`)
6359
+ * - `preserveLastValue()` - Returns a variant that immediately emits the last value to new subscribers
6360
+ *
6361
+ * @example
6362
+ * Basic usage with state coordination
6363
+ * ```typescript
6364
+ * import { source$, state, on$ } from '@craft-ng/core';
6365
+ *
6366
+ * @Component({
6367
+ * selector: 'app-counter',
6368
+ * template: `
6369
+ * <p>Count: {{ counter() }}</p>
6370
+ * <button (click)="counter.increment()">+1</button>
6371
+ * <button (click)="reset$.emit()">Reset</button>
6372
+ * `,
6373
+ * })
6374
+ * export class CounterComponent {
6375
+ * reset$ = source$<void>();
6376
+ *
6377
+ * counter = state(0, ({ set, update }) => ({
6378
+ * increment: () => update((v) => v + 1),
6379
+ * reset: on$(this.reset$, () => set(0)),
6380
+ * }));
6381
+ * }
6382
+ * ```
6383
+ *
6384
+ *
6385
+ * @example
6386
+ * Late subscriber with preserved last value
6387
+ * ```typescript
6388
+ * const notifications$ = source$<string>().preserveLastValue();
6389
+ *
6390
+ * notifications$.emit('Server started');
6391
+ * notifications$.emit('Database connected');
6392
+ *
6393
+ * // Late subscriber receives the last value immediately
6394
+ * notifications$.subscribe((msg) => {
6395
+ * console.log(msg); // 'Database connected'
6396
+ * });
6397
+ * ```
6398
+ *
6399
+ * @example
6400
+ * Read-only access pattern
6401
+ * ```typescript
6402
+ * class DataService {
6403
+ * private dataUpdated$ = source$<Data>();
6404
+ * readonly dataUpdated = this.dataUpdated$.asReadonly();
6405
+ *
6406
+ * updateData(data: Data) {
6407
+ * this.dataUpdated$.emit(data);
6408
+ * }
6409
+ * }
6410
+ * ```
6411
+ *
6412
+ * @see {@link https://ng-craft.dev/utils/source$ | source$ documentation}
6413
+ */
6077
6414
  declare function source$<T>(): Source$<T>;
6078
6415
 
6079
6416
  type InferSourceType<S> = S extends SignalSource<infer T> ? T : S extends Source$<infer U> ? U : S extends _Subscribable<infer V> ? V : never;
@@ -6124,8 +6461,12 @@ interface _Subscribable<T> {
6124
6461
  */
6125
6462
  declare function craftSources<Context extends ContextConstraints, StoreConfig extends StoreConfigConstraints, Sources extends Record<string, SignalSource<any> | Source$<any> | _Subscribable<any>>>(sourcesFactory: () => Sources): CraftSourcesOutputs<Context, StoreConfig, Sources>;
6126
6463
 
6127
- type StateOutput<StateType, Insertions> = MergeObject<Signal<StateType>, IsEmptyObject<Insertions> extends true ? {} : FilterSource<Insertions>>;
6128
- type StateConfig<State> = State | WritableSignal<State>;
6464
+ type Source$Method$2<SourceType> = [SourceType] extends [void] ? () => void : (value: SourceType) => void;
6465
+ type ExposedStateInsertions<Insertions> = MergeObject<IsEmptyObject<Insertions> extends true ? {} : FilterSource<Insertions>, {
6466
+ [K in keyof FilterSource<Insertions> as FilterSource<Insertions>[K] extends Source$<any> ? K : never]: FilterSource<Insertions>[K] extends Source$<infer SourceType> ? Source$Method$2<SourceType> : never;
6467
+ }>;
6468
+ type StateOutput<StateType, Insertions> = MergeObject<Signal<StateType>, ExposedStateInsertions<Insertions>>;
6469
+ type StateConfig<State> = State | Signal<State>;
6129
6470
  /**
6130
6471
  * Creates a signal state with optional insertions for adding methods and computed properties.
6131
6472
  *
@@ -6133,7 +6474,11 @@ type StateConfig<State> = State | WritableSignal<State>;
6133
6474
  * methods and properties through insertions. Each insertion receives a context object with
6134
6475
  * `state`, `set`, `update` methods and previous insertions.
6135
6476
  *
6136
- * @param stateConfig - The initial state value or a WritableSignal (e.g., linkedSignal)
6477
+ * @remarks
6478
+ * For the best TypeScript inference, pass Angular `Signal` values (e.g. `signal`, `linkedSignal`)
6479
+ * rather than manually widening to `WritableSignal`. This avoids some overload inference limits.
6480
+ *
6481
+ * @param stateConfig - The initial state value or a Signal (e.g., linkedSignal)
6137
6482
  * @param insertions - Optional insertion functions to extend the state with methods and properties
6138
6483
  * @returns A Signal representing the state, merged with all insertion properties and methods
6139
6484
  *
@@ -6206,7 +6551,7 @@ declare function state<StateType, Insertion1, Insertion2, Insertion3, Insertion4
6206
6551
  declare function state<StateType, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6>(stateConfig: StateConfig<StateType>, insertion1: InsertionsStateFactory<NoInfer<StateType>, Insertion1>, insertion2: InsertionsStateFactory<NoInfer<StateType>, Insertion2, Insertion1>, insertion3: InsertionsStateFactory<NoInfer<StateType>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsStateFactory<NoInfer<StateType>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsStateFactory<NoInfer<StateType>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsStateFactory<NoInfer<StateType>, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): StateOutput<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>;
6207
6552
  declare function state<StateType, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7>(stateConfig: StateConfig<StateType>, insertion1: InsertionsStateFactory<NoInfer<StateType>, Insertion1>, insertion2: InsertionsStateFactory<NoInfer<StateType>, Insertion2, Insertion1>, insertion3: InsertionsStateFactory<NoInfer<StateType>, Insertion3, Insertion1 & Insertion2>, insertion4: InsertionsStateFactory<NoInfer<StateType>, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsStateFactory<NoInfer<StateType>, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsStateFactory<NoInfer<StateType>, Insertion6, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsStateFactory<NoInfer<StateType>, Insertion7, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): StateOutput<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>;
6208
6553
 
6209
- type SpecificCraftStateOutputs<StateName extends string, State, Insertions> = DeferredExtract<Insertions> extends infer Extracted ? Extracted extends {
6554
+ type SpecificCraftStateOutputs<StateName extends string, State, Insertions> = DeferredExtract<ExposedStateInsertions<Insertions>> extends infer Extracted ? Extracted extends {
6210
6555
  props: unknown;
6211
6556
  methods: Record<string, Function>;
6212
6557
  } ? PartialContext<{
@@ -6726,7 +7071,7 @@ interface QueriesPersister {
6726
7071
  * dataQuery.persister.runGarbageCollection();
6727
7072
  * ```
6728
7073
  */
6729
- declare function insertLocalStoragePersister<GroupIdentifier extends string, ResourceState extends object | undefined, ResourceParams, PreviousInsertionsOutputs, StateType, const CacheTime = 300000>(config: {
7074
+ declare function insertLocalStoragePersister<GroupIdentifier extends string, ResourceState extends object | undefined, ResourceParams, PreviousInsertionsOutputs, StateType, QueryExceptions extends ResourceExceptionConstraints, const CacheTime = 300000>(config: {
6730
7075
  /** Name of your current store, it is mainly used as a prefix for localStorage keys */
6731
7076
  storeName: string;
6732
7077
  /** Key used to identify the specific data within the store */
@@ -6742,10 +7087,152 @@ declare function insertLocalStoragePersister<GroupIdentifier extends string, Res
6742
7087
  * If not specified, the default is 5 minutes (300000 ms).
6743
7088
  */
6744
7089
  cacheTime?: CacheTime;
6745
- }): (context: InsertionResourceFactoryContext<GroupIdentifier, ResourceState, ResourceParams, PreviousInsertionsOutputs> | InsertionStateFactoryContext<StateType, PreviousInsertionsOutputs>) => {
7090
+ }): (_context: unknown) => {
6746
7091
  persister: QueriesPersister;
6747
7092
  };
6748
7093
 
7094
+ /**
7095
+ * No-op insertion used to preserve contextual typing in insertion chains.
7096
+ *
7097
+ * Usage:
7098
+ * `insertSelect('grid', insertNoopTypingAnchor, insertSelect('row', ...))`
7099
+ */
7100
+ declare function insertNoopTypingAnchor<StateType, PreviousInsertionsOutputs = {}>(_context: InsertionStateFactoryContext<StateType, PreviousInsertionsOutputs>): {};
7101
+
7102
+ type SelectedTarget<StateType, Name extends string> = StateType extends readonly (infer Item)[] ? Extract<Item, object> : StateType extends Record<string, unknown> ? Name extends keyof StateType ? StateType[Name] : never : never;
7103
+ type MergeInsertions$1<Insertions extends readonly unknown[], Acc = {}> = Insertions extends readonly [infer Head, ...infer Tail] ? MergeInsertions$1<Tail, Acc & Head> : Acc;
7104
+ type Source$Method$1<SourceType> = [SourceType] extends [void] ? () => void : (value: SourceType) => void;
7105
+ type ExposedInsertions<Insertions> = MergeObject<IsEmptyObject<Insertions> extends true ? {} : FilterSource<Insertions>, {
7106
+ [K in keyof FilterSource<Insertions> as FilterSource<Insertions>[K] extends Source$<any> ? K : never]: FilterSource<Insertions>[K] extends Source$<infer SourceType> ? Source$Method$1<SourceType> : never;
7107
+ }>;
7108
+ type SelectItemMethodName<Name extends string> = `select${Capitalize<Name>}`;
7109
+ type SelectPropertyMethodName<Name extends string> = `select${Capitalize<Name>}`;
7110
+ type SelectedItem<StateType> = StateType extends readonly (infer Item)[] ? Extract<Item, object> : never;
7111
+ type ArraySelectedOutput<StateType, Insertions> = MergeObject<SelectedItem<StateType>, ExposedInsertions<Insertions>>;
7112
+ type ObjectSelectedOutput<StateType, Name extends string, Insertions> = StateType extends Record<string, unknown> ? Name extends keyof StateType & string ? MergeObject<Extract<StateType[Name], object>, ExposedInsertions<Insertions>> : never : never;
7113
+ type ArrayInsertSelectOutput<StateType, Name extends string, Insertions extends readonly unknown[]> = {
7114
+ [K in SelectItemMethodName<Name>]: (id: number) => ArraySelectedOutput<StateType, MergeInsertions$1<Insertions>> | undefined;
7115
+ } & {
7116
+ items: () => Array<ArraySelectedOutput<StateType, MergeInsertions$1<Insertions>>>;
7117
+ };
7118
+ type ObjectInsertSelectOutput<StateType, Name extends string, Insertions extends readonly unknown[]> = {
7119
+ [K in SelectPropertyMethodName<Name>]: () => ObjectSelectedOutput<StateType, Name, MergeInsertions$1<Insertions>>;
7120
+ };
7121
+ type InsertSelectReturn<StateType, Name extends string, Insertions extends readonly unknown[], PreviousInsertionsOutputs> = InsertionsStateFactory<StateType, StateType extends readonly object[] ? ArrayInsertSelectOutput<StateType, Name, Insertions> : ObjectInsertSelectOutput<StateType, Name, Insertions>, PreviousInsertionsOutputs>;
7122
+ type IsArray$1<T> = T extends any[] ? true : false;
7123
+ /**
7124
+ * Unified selector insertion for nested object properties and array items.
7125
+ *
7126
+ * `insertSelect` lets you compose nested insertions with the same API regardless
7127
+ * of whether the current state is an object or an array.
7128
+ *
7129
+ * You interact with the selected sub-state through generated methods like:
7130
+ * - `selectCell()` for object properties
7131
+ * - `selectCell(index)` for array items
7132
+ * The returned selection exposes both the original state fields and the
7133
+ * insertion methods/computed values.
7134
+ *
7135
+ * @example
7136
+ * ```ts
7137
+ * const board = state(
7138
+ * {
7139
+ * cell: { color: 'white', paintCount: 0 },
7140
+ * },
7141
+ * insertSelect('cell', ({ update }) => ({
7142
+ * paintBlack: () =>
7143
+ * update((cell) => ({
7144
+ * ...cell,
7145
+ * color: 'black',
7146
+ * paintCount: cell.paintCount + 1,
7147
+ * })),
7148
+ * })),
7149
+ * );
7150
+ *
7151
+ * board.selectCell().paintBlack();
7152
+ * console.log(board.selectCell().color); // 'black'
7153
+ * ```
7154
+ *
7155
+ * @example
7156
+ * ```ts
7157
+ * const cells = state(
7158
+ * [{ color: 'white', paintCount: 0 }],
7159
+ * insertSelect('cell', ({ update }) => ({
7160
+ * paint: () =>
7161
+ * update((cell) => ({
7162
+ * ...cell,
7163
+ * color: 'black',
7164
+ * paintCount: cell.paintCount + 1,
7165
+ * })),
7166
+ * })),
7167
+ * );
7168
+ *
7169
+ * cells.selectCell(0)?.paint();
7170
+ * console.log(cells.selectCell(0)?.paintCount); // 1
7171
+ * ```
7172
+ *
7173
+ * In some nested cases, TypeScript may lose contextual typing (notably when a
7174
+ * property is an array and the next insertion is another `insertSelect`).
7175
+ * In those cases, insert `insertNoopTypingAnchor` before the nested insertion
7176
+ * to preserve inference.
7177
+ *
7178
+ * @example
7179
+ * ```ts
7180
+ * insertSelect(
7181
+ * 'grid',
7182
+ * insertNoopTypingAnchor,
7183
+ * insertSelect('row', ({ update }) => ({
7184
+ * // ...
7185
+ * })),
7186
+ * );
7187
+ * ```
7188
+ */
7189
+ declare function insertSelect<StateType, const Name extends AutoCompleteName & string, Insertions1 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = NoInfer<StateType> extends readonly object[] ? string : keyof NoInfer<StateType>>(name: Name, insertion1: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions1, PreviousInsertionsOutputs>): InsertSelectReturn<[
7190
+ Name
7191
+ ] extends [keyof StateType] ? IsArray$1<StateType[Name]> extends true ? `craft-ng error, typing limitation: insertSelect does not currently support selecting items from an array property in first insertion position (e.g. insertSelect('grid', insertSelect('row', ...))). Consider using insertNoopTypingAnchor:
7192
+ insertSelect('${Name}', insertNoopTypingAnchor, insertSelect(...)) ` : StateType : StateType, Name, [
7193
+ Insertions1
7194
+ ], PreviousInsertionsOutputs>;
7195
+ declare function insertSelect<StateType, const Name extends AutoCompleteName & string, Insertions1 = {}, Insertions2 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = StateType extends readonly object[] ? string : keyof StateType>(name: Name, insertion1: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions1, PreviousInsertionsOutputs>, insertion2: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions2, PreviousInsertionsOutputs & Insertions1>): InsertSelectReturn<StateType, Name, [
7196
+ Insertions1,
7197
+ Insertions2
7198
+ ], PreviousInsertionsOutputs>;
7199
+ declare function insertSelect<StateType, const Name extends AutoCompleteName & string, Insertions1 = {}, Insertions2 = {}, Insertions3 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = StateType extends readonly object[] ? string : keyof StateType>(name: Name, insertion1: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions1, PreviousInsertionsOutputs>, insertion2: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions2, PreviousInsertionsOutputs & Insertions1>, insertion3: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions3, PreviousInsertionsOutputs & Insertions1 & Insertions2>): InsertSelectReturn<StateType, Name, [
7200
+ Insertions1,
7201
+ Insertions2,
7202
+ Insertions3
7203
+ ], PreviousInsertionsOutputs>;
7204
+ declare function insertSelect<StateType, const Name extends AutoCompleteName & string, Insertions1 = {}, Insertions2 = {}, Insertions3 = {}, Insertions4 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = StateType extends readonly object[] ? string : keyof StateType>(name: Name, insertion1: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions1, PreviousInsertionsOutputs>, insertion2: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions2, PreviousInsertionsOutputs & Insertions1>, insertion3: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions3, PreviousInsertionsOutputs & Insertions1 & Insertions2>, insertion4: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions4, PreviousInsertionsOutputs & Insertions1 & Insertions2 & Insertions3>): InsertSelectReturn<StateType, Name, [
7205
+ Insertions1,
7206
+ Insertions2,
7207
+ Insertions3,
7208
+ Insertions4
7209
+ ], PreviousInsertionsOutputs>;
7210
+ declare function insertSelect<StateType, const Name extends AutoCompleteName & string, Insertions1 = {}, Insertions2 = {}, Insertions3 = {}, Insertions4 = {}, Insertions5 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = StateType extends readonly object[] ? string : keyof StateType>(name: Name, insertion1: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions1, PreviousInsertionsOutputs>, insertion2: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions2, PreviousInsertionsOutputs & Insertions1>, insertion3: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions3, PreviousInsertionsOutputs & Insertions1 & Insertions2>, insertion4: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions4, PreviousInsertionsOutputs & Insertions1 & Insertions2 & Insertions3>, insertion5: InsertionsStateFactory<SelectedTarget<StateType, Name>, Insertions5, PreviousInsertionsOutputs & Insertions1 & Insertions2 & Insertions3 & Insertions4>): InsertSelectReturn<StateType, Name, [
7211
+ Insertions1,
7212
+ Insertions2,
7213
+ Insertions3,
7214
+ Insertions4,
7215
+ Insertions5
7216
+ ], PreviousInsertionsOutputs>;
7217
+
7218
+ type PublicServiceEntry<Entry> = Entry extends WritableSignal<any> ? Entry : Entry extends Signal<any> ? Entry : Entry extends (...args: infer Args) => infer Result ? (...args: Args) => Result : Entry;
7219
+ type InjectService2Public<Service> = Prettify<RemoveIndexSignature<{
7220
+ [K in keyof Service]: PublicServiceEntry<Service[K]>;
7221
+ }>>;
7222
+ type InjectService2Insertions<Service> = Prettify<Record<string, unknown> & {
7223
+ [K in keyof InjectService2Public<Service>]?: InjectService2Public<Service>[K] | SourceBranded;
7224
+ }>;
7225
+ type InjectService2InsertionContext<Service, PreviousInsertions = {}> = InjectService2Public<Service> & {
7226
+ insertions: HasKeys<PreviousInsertions> extends true ? PreviousInsertions : never;
7227
+ };
7228
+ type InjectService2InsertionFactory<Service, Insertions, PreviousInsertions = {}> = (context: InjectService2InsertionContext<Service, PreviousInsertions>) => InjectService2Insertions<Service> & Insertions;
7229
+ type InjectService2Output<Service, Insertions> = Prettify<FilterSource<Insertions>>;
7230
+ declare function injectService<Service, Insertion1>(token: Type<Service>, insertion1: InjectService2InsertionFactory<Service, Insertion1>): InjectService2Output<Service, Insertion1>;
7231
+ declare function injectService<Service, Insertion1, Insertion2>(token: Type<Service>, insertion1: InjectService2InsertionFactory<Service, Insertion1>, insertion2: InjectService2InsertionFactory<Service, Insertion2, Insertion1>): InjectService2Output<Service, Insertion1 & Insertion2>;
7232
+ declare function injectService<Service, Insertion1, Insertion2, Insertion3>(token: Type<Service>, insertion1: InjectService2InsertionFactory<Service, Insertion1>, insertion2: InjectService2InsertionFactory<Service, Insertion2, Insertion1>, insertion3: InjectService2InsertionFactory<Service, Insertion3, Insertion1 & Insertion2>): InjectService2Output<Service, Insertion1 & Insertion2 & Insertion3>;
7233
+ declare function injectService<Service, Insertion1, Insertion2, Insertion3, Insertion4>(token: Type<Service>, insertion1: InjectService2InsertionFactory<Service, Insertion1>, insertion2: InjectService2InsertionFactory<Service, Insertion2, Insertion1>, insertion3: InjectService2InsertionFactory<Service, Insertion3, Insertion1 & Insertion2>, insertion4: InjectService2InsertionFactory<Service, Insertion4, Insertion1 & Insertion2 & Insertion3>): InjectService2Output<Service, Insertion1 & Insertion2 & Insertion3 & Insertion4>;
7234
+ declare function injectService<Service, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5>(token: Type<Service>, insertion1: InjectService2InsertionFactory<Service, Insertion1>, insertion2: InjectService2InsertionFactory<Service, Insertion2, Insertion1>, insertion3: InjectService2InsertionFactory<Service, Insertion3, Insertion1 & Insertion2>, insertion4: InjectService2InsertionFactory<Service, Insertion4, Insertion1 & Insertion2 & Insertion3>, insertion5: InjectService2InsertionFactory<Service, Insertion5, Insertion1 & Insertion2 & Insertion3 & Insertion4>): InjectService2Output<Service, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>;
7235
+
6749
7236
  declare function linkedSource<SourceState, ComputedValue>(signalOrigin: SignalSource<SourceState> | ReadonlySource<SourceState>, computedFn: (sourceValue: NoInfer<SourceState>) => ComputedValue, options?: {
6750
7237
  equal?: ValueEqualityFn<NoInfer<ComputedValue> | undefined>;
6751
7238
  debugName?: string;
@@ -7433,6 +7920,35 @@ declare function toSource<SourceState, ComputedValue>(signalOrigin: Signal<Sourc
7433
7920
  debugName?: string;
7434
7921
  }): ReadonlySource<IsUnknown<ComputedValue> extends true ? SourceState : ComputedValue>;
7435
7922
 
7923
+ type EntryBindings<Service> = Prettify<Partial<{
7924
+ [K in keyof Service as K extends `${infer EntryKey}Entry` ? Service[K] extends WritableSignal<infer Value> ? EntryKey : never : never]: Service[K] extends WritableSignal<infer Value> ? Signal<Value> : never;
7925
+ }>>;
7926
+ type ToInjectBindings<Service> = EntryBindings<Service>;
7927
+ /**
7928
+ * Creates an Angular `inject()` helper bound to a service and keeps selected
7929
+ * `...Entry` writable signals synchronized with external signals.
7930
+ *
7931
+ * Service properties ending with `Entry` are exposed as configuration keys
7932
+ * without the suffix.
7933
+ *
7934
+ * @example
7935
+ * ```ts
7936
+ * @Injectable({ providedIn: 'root' })
7937
+ * class MyService {
7938
+ * myIdEntry = signal<string | undefined>(undefined);
7939
+ * }
7940
+ *
7941
+ * const injectMyService = toInject(MyService);
7942
+ *
7943
+ * @Component({})
7944
+ * class MyComponent {
7945
+ * id = input<string>();
7946
+ * myService = injectMyService({ myId: this.id });
7947
+ * }
7948
+ * ```
7949
+ */
7950
+ declare function toInject<Service>(token: Type<Service>): (bindings?: ToInjectBindings<Service>) => Service;
7951
+
7436
7952
  /**
7437
7953
  * Creates an insertion function that makes a query react to mutation state changes.
7438
7954
  *
@@ -7649,14 +8165,14 @@ declare function toSource<SourceState, ComputedValue>(signalOrigin: Signal<Sourc
7649
8165
  * });
7650
8166
  * ```
7651
8167
  */
7652
- declare function insertReactOnMutation<QueryResourceState extends object | undefined, QueryResourceParams, QueryResourceArgsParams, QueryIsMethod extends boolean, QuerySourceParams, QueryGroupIdentifier, QueryInsertions, MutationResourceState, MutationResourceParams, MutationResourceArgsParams, MutationIsMethod, MutationSourceParams, MutationGroupIdentifier, MutationInsertions>(mutation: ResourceLikeMutationRef<MutationResourceState, MutationResourceParams, MutationIsMethod, MutationResourceArgsParams, MutationSourceParams, MutationInsertions> | ResourceByIdLikeMutationRef<MutationResourceState, MutationResourceParams, MutationIsMethod, MutationResourceArgsParams, MutationSourceParams, MutationInsertions, MutationGroupIdentifier>, mutationEffectOptions: QueryDeclarativeEffect<{
8168
+ declare function insertReactOnMutation<QueryResourceState extends object | undefined, QueryResourceParams, QueryResourceArgsParams, QueryIsMethod extends boolean, QuerySourceParams, QueryGroupIdentifier, QueryInsertions, MutationResourceState, MutationResourceParams, MutationResourceArgsParams, MutationIsMethod, MutationSourceParams, MutationGroupIdentifier, MutationInsertions, MutationExceptions extends ResourceExceptionConstraints, QueryExceptions extends ResourceExceptionConstraints>(mutation: ResourceLikeMutationRef<MutationResourceState, MutationResourceParams, MutationIsMethod, MutationResourceArgsParams, MutationSourceParams, MutationInsertions, MutationExceptions> | ResourceByIdLikeMutationRef<MutationResourceState, MutationResourceParams, MutationIsMethod, MutationResourceArgsParams, MutationSourceParams, MutationInsertions, MutationGroupIdentifier, MutationExceptions>, mutationEffectOptions: QueryDeclarativeEffect<{
7653
8169
  query: InternalType<NoInfer<QueryResourceState>, NoInfer<QueryResourceParams>, NoInfer<QueryResourceArgsParams>, [
7654
8170
  unknown
7655
- ] extends [NoInfer<QueryGroupIdentifier>] ? false : true, NoInfer<QueryIsMethod>, NoInfer<QueryInsertions>, NoInfer<QueryGroupIdentifier>, NoInfer<QuerySourceParams>>;
8171
+ ] extends [NoInfer<QueryGroupIdentifier>] ? false : true, NoInfer<QueryIsMethod>, NoInfer<QueryInsertions>, NoInfer<QueryGroupIdentifier>, NoInfer<QuerySourceParams>, NoInfer<QueryExceptions>>;
7656
8172
  mutation: InternalType<NoInfer<MutationResourceState>, NoInfer<MutationResourceParams>, NoInfer<MutationResourceArgsParams>, [
7657
8173
  unknown
7658
- ] extends [MutationGroupIdentifier] ? false : true, NoInfer<MutationIsMethod>, NoInfer<MutationInsertions>, NoInfer<MutationGroupIdentifier>, NoInfer<MutationSourceParams>>;
7659
- }>): (context: InsertionParams<QueryResourceState, QueryResourceParams, QueryInsertions> | {
8174
+ ] extends [MutationGroupIdentifier] ? false : true, NoInfer<MutationIsMethod>, NoInfer<MutationInsertions>, NoInfer<MutationGroupIdentifier>, NoInfer<MutationSourceParams>, NoInfer<MutationExceptions>>;
8175
+ }>): (context: InsertionParams<QueryResourceState, QueryResourceParams, QueryExceptions, QueryInsertions> | {
7660
8176
  resourceById: ResourceByIdRef<QueryGroupIdentifier & string, QueryResourceState, QueryResourceParams>;
7661
8177
  resourceParamsSrc: WritableSignal<QueryResourceParams | undefined>;
7662
8178
  identifier: (params: NonNullable<QueryResourceParams>) => QueryGroupIdentifier;
@@ -7695,7 +8211,7 @@ declare function insertReactOnMutation<QueryResourceState extends object | undef
7695
8211
  * const isPlaceholder = userQuery.isPlaceHolderData();
7696
8212
  * ```
7697
8213
  */
7698
- declare const insertPaginationPlaceholderData: <QueryResourceState extends object | undefined, QueryResourceParams, QueryResourceArgsParams, QueryIsMethod extends boolean, QuerySourceParams, QueryGroupIdentifier extends string, QueryInsertions, PreviousInsertionsOutputs>({ resourceById, resourceParamsSrc, identifier, }: InsertionByIdParams<QueryGroupIdentifier, QueryResourceState, QueryResourceParams, PreviousInsertionsOutputs>) => {
8214
+ declare const insertPaginationPlaceholderData: <QueryResourceState extends object | undefined, QueryResourceParams, QueryResourceArgsParams, QueryIsMethod extends boolean, QuerySourceParams, QueryGroupIdentifier extends string, QueryInsertions, PreviousInsertionsOutputs, Exceptions extends ResourceExceptionConstraints>({ resourceById, resourceParamsSrc, identifier, }: InsertionByIdParams<QueryGroupIdentifier, QueryResourceState, QueryResourceParams, Exceptions, PreviousInsertionsOutputs>) => {
7699
8215
  currentPageData: _angular_core.Signal<QueryResourceState | undefined>;
7700
8216
  currentPageStatus: _angular_core.Signal<_angular_core.ResourceStatus>;
7701
8217
  isPlaceHolderData: _angular_core.Signal<boolean>;
@@ -8164,5 +8680,590 @@ declare function reactiveWritableSignal<State>(initialValue: State, reactionBuil
8164
8680
  current: NoInfer<State>;
8165
8681
  }) => NoInfer<State>, options?: SyncOptions) => ReactionEntry<State, Params>) => Record<string, ReactionEntry<State, any>>): WritableSignal<State>;
8166
8682
 
8167
- export { EXTERNALLY_PROVIDED, EmptyContext, GlobalPersisterHandlerService, STORE_CONFIG_TOKEN, SourceBrand, SourceBranded, addMany, addOne, afterRecomputation, asyncProcess, capitalize, computedIds, computedSource, computedTotal, contract, craft, craftAsyncProcesses, craftComputedStates, craftFactoryEntries, craftInject, craftInputs, craftMutations, craftQuery, craftQueryParam, craftQueryParams, craftSetAllQueriesParamsStandalone, craftSources, craftState, createMethodHandlers, insertLocalStoragePersister, insertPaginationPlaceholderData, insertReactOnMutation, isSource, linkedSource, localStoragePersister, map, mapOne, mutation, partialContext, query, queryParam, reactiveWritableSignal, removeAll, removeMany, removeOne, resourceById, serializeQueryParams, serializedQueryParamsObjectToString, setAll, setMany, setOne, signalSource, source$, sourceFromEvent, stackedSource, state, toSource, toggleMany, toggleOne, updateMany, updateOne, upsertMany, upsertOne };
8168
- export type { AsyncProcessOutput, AsyncProcessRef, CloudProxy, CloudProxySource, ContextConstraints, ContextInput, CraftFactory, CraftFactoryEntries, CraftFactoryUtility, DeferredExtract, EntitiesUtilBrand, EqualParams, ExcludeCommonKeys, ExtractSignalPropsAndMethods, FilterMethodsBoundToSources, FilterPrivateFields, FilterSource, FlatRecord, HasChild$1 as HasChild, HasKeys, IdSelector, Identifier, InferInjectedType, IsAny, IsEmptyObject, IsNever, IsUnknown, MakeOptionalPropertiesRequired$1 as MakeOptionalPropertiesRequired, MergeObject$1 as MergeObject, MergeObjects$1 as MergeObjects, MergeTwoContexts, MutationOutput, MutationRef, Not, OmitStrict, PartialContext, Prettify, QueryOutput, QueryParamConfig, QueryParamNavigationOptions$1 as QueryParamNavigationOptions, QueryParamOutput, QueryParamsToState, QueryRef, ReadonlySource, ReadonlySource$, RemoveIndexSignature, ReplaceStoreConfigToken, ResourceByIdHandler, ResourceByIdLikeMutationRef, ResourceByIdLikeQueryRef, ResourceByIdRef, ResourceLikeMutationRef, ResourceLikeQueryRef, SignalSource, Source$, SourceFromEvent, SourceSetterMethods, SourceSubscribe, SpecificCraftQueryParamOutputs, SpecificCraftQueryParamsOutputs, StackSource, StateOutput, StoreConfigConstraints, StoreConfigToken, ToConnectableMethodFromInject, ToConnectableSourceFromInject, UnionToIntersection$1 as UnionToIntersection, UnionToTuple$1 as UnionToTuple, Update };
8683
+ type FromEventToSource$<T> = ReadonlySource$<T> & {
8684
+ dispose: () => void;
8685
+ };
8686
+ /**
8687
+ * Converts DOM events to a ReadonlySource$ stream with automatic cleanup on component destruction.
8688
+ *
8689
+ * This function bridges DOM events with ng-craft's source$ reactive system by:
8690
+ * - Converting native DOM events to source emissions
8691
+ * - Automatically removing event listeners on component destruction
8692
+ * - Supporting optional event payload transformation
8693
+ * - Providing manual disposal capability
8694
+ * - Returning a readonly source with `subscribe` and `value` properties
8695
+ *
8696
+ * @remarks
8697
+ * **Automatic Cleanup:**
8698
+ * - Event listeners are automatically removed when the injection context is destroyed
8699
+ * - Uses Angular's `DestroyRef` for lifecycle management
8700
+ * - Manual cleanup available via `dispose()` method
8701
+ * - Prevents memory leaks from dangling event listeners
8702
+ *
8703
+ * **Use Cases:**
8704
+ * - **User interactions**: Click, input, scroll, keyboard events
8705
+ * - **Window events**: Resize, scroll, focus, online/offline
8706
+ * - **Document events**: Visibility changes, custom events
8707
+ * - **Media events**: Video/audio play, pause, ended
8708
+ * - **Form events**: Submit, change, input
8709
+ * - **Custom events**: Application-specific DOM events
8710
+ *
8711
+ * **Event Transformation:**
8712
+ * - Without `computedValue`: Emits the raw event object
8713
+ * - With `computedValue`: Transforms event before emission
8714
+ * - Useful for extracting specific event properties
8715
+ * - Reduces payload size and improves type safety
8716
+ *
8717
+ * **Integration with Stores:**
8718
+ * - Use the readonly source in queries/mutations via `on$()`
8719
+ * - Trigger async operations on DOM events
8720
+ * - Coordinate multiple components via event sources
8721
+ *
8722
+ * **Injection Context:**
8723
+ * - Must be called within Angular injection context
8724
+ * - Typically called in component constructor or class fields
8725
+ * - Uses `assertInInjectionContext()` for safety
8726
+ *
8727
+ * @template T - The type of the event object
8728
+ * @template ComputedValue - The type after optional transformation
8729
+ *
8730
+ * @param target - The DOM element or event target to listen to.
8731
+ * Can be any EventTarget (HTMLElement, Window, Document, etc.)
8732
+ *
8733
+ * @param eventName - The name of the event to listen for.
8734
+ * Standard DOM event names: 'click', 'input', 'scroll', etc.
8735
+ *
8736
+ * @param options - Optional configuration:
8737
+ * - `event`: Event listener options (capture, passive, once, etc.)
8738
+ * - `computedValue`: Function to transform event before emission
8739
+ *
8740
+ * @returns A readonly source that emits on DOM events with:
8741
+ * - `subscribe()`: Subscribe to event emissions
8742
+ * - `value`: Signal containing the last emitted value
8743
+ * - `dispose()`: Method to manually remove event listener
8744
+ * - Automatic cleanup on component destruction
8745
+ *
8746
+ * @example
8747
+ * Basic click event source
8748
+ * ```ts
8749
+ * @Component({
8750
+ * selector: 'app-clicker',
8751
+ * template: '<button #btn>Click me</button>',
8752
+ * })
8753
+ * export class ClickerComponent {
8754
+ * @ViewChild('btn', { read: ElementRef }) button!: ElementRef<HTMLButtonElement>;
8755
+ *
8756
+ * click$ = fromEventToSource$<MouseEvent>(
8757
+ * this.button.nativeElement,
8758
+ * 'click'
8759
+ * );
8760
+ *
8761
+ * counter = state(0, ({ update }) => ({
8762
+ * increment: on$(this.click$, () => update((v) => v + 1)),
8763
+ * }));
8764
+ * }
8765
+ * ```
8766
+ *
8767
+ * @example
8768
+ * Window scroll event with transformation
8769
+ * ```ts
8770
+ * @Component({
8771
+ * selector: 'app-infinite-scroll',
8772
+ * template: '...',
8773
+ * })
8774
+ * export class InfiniteScrollComponent {
8775
+ * scroll$ = fromEventToSource$(window, 'scroll', {
8776
+ * computedValue: () => ({
8777
+ * scrollY: window.scrollY,
8778
+ * scrollHeight: document.documentElement.scrollHeight,
8779
+ * clientHeight: window.innerHeight,
8780
+ * }),
8781
+ * event: { passive: true },
8782
+ * });
8783
+ *
8784
+ * // Access scroll position via signal
8785
+ * scrollPosition = this.scroll$.value;
8786
+ *
8787
+ * // Subscribe to scroll events
8788
+ * ngOnInit() {
8789
+ * this.scroll$.subscribe((data) => {
8790
+ * const nearBottom = data.scrollY + data.clientHeight >= data.scrollHeight - 100;
8791
+ * if (nearBottom) {
8792
+ * // Load more data
8793
+ * }
8794
+ * });
8795
+ * }
8796
+ * }
8797
+ * ```
8798
+ *
8799
+ * @example
8800
+ * Form input event for real-time search
8801
+ * ```ts
8802
+ * @Component({
8803
+ * selector: 'app-search',
8804
+ * template: '<input #searchInput type="text" placeholder="Search..." />',
8805
+ * })
8806
+ * export class SearchComponent {
8807
+ * @ViewChild('searchInput', { read: ElementRef }) input!: ElementRef<HTMLInputElement>;
8808
+ *
8809
+ * input$ = fromEventToSource$(this.input.nativeElement, 'input', {
8810
+ * computedValue: (event: Event) => {
8811
+ * const target = event.target as HTMLInputElement;
8812
+ * return target.value;
8813
+ * },
8814
+ * });
8815
+ *
8816
+ * // Current input value as signal
8817
+ * searchTerm = this.input$.value;
8818
+ *
8819
+ * // React to input changes
8820
+ * searchResults = state([], ({ set }) => ({
8821
+ * search: on$(this.input$, async (term) => {
8822
+ * if (term.length < 3) {
8823
+ * set([]);
8824
+ * return;
8825
+ * }
8826
+ * const results = await fetchResults(term);
8827
+ * set(results);
8828
+ * }),
8829
+ * }));
8830
+ * }
8831
+ * ```
8832
+ *
8833
+ * @example
8834
+ * Window resize event
8835
+ * ```ts
8836
+ * @Component({
8837
+ * selector: 'app-responsive',
8838
+ * template: '...',
8839
+ * })
8840
+ * export class ResponsiveComponent {
8841
+ * resize$ = fromEventToSource$(window, 'resize', {
8842
+ * computedValue: () => ({
8843
+ * width: window.innerWidth,
8844
+ * height: window.innerHeight,
8845
+ * }),
8846
+ * });
8847
+ *
8848
+ * dimensions = this.resize$.value;
8849
+ * }
8850
+ * ```
8851
+ *
8852
+ * @example
8853
+ * Manual disposal for dynamic elements
8854
+ * ```ts
8855
+ * @Component({
8856
+ * selector: 'app-dynamic',
8857
+ * template: '...',
8858
+ * })
8859
+ * export class DynamicComponent {
8860
+ * private click$?: FromEventToSource$<MouseEvent>;
8861
+ *
8862
+ * attachListener(element: HTMLElement) {
8863
+ * // Remove previous listener if exists
8864
+ * this.click$?.dispose();
8865
+ *
8866
+ * // Attach to new element
8867
+ * this.click$ = fromEventToSource$<MouseEvent>(element, 'click');
8868
+ * }
8869
+ *
8870
+ * detachListener() {
8871
+ * // Manually remove listener before component destruction
8872
+ * this.click$?.dispose();
8873
+ * this.click$ = undefined;
8874
+ * }
8875
+ * }
8876
+ * ```
8877
+ *
8878
+ * @see {@link https://ng-craft.dev/utils/from-event-to-source$ | fromEventToSource$ documentation}
8879
+ */
8880
+ declare function fromEventToSource$<T>(target: EventTarget, eventName: string, options?: {
8881
+ event?: boolean | AddEventListenerOptions;
8882
+ computedValue?: never;
8883
+ }): FromEventToSource$<T>;
8884
+ declare function fromEventToSource$<T, ComputedValue>(target: EventTarget, eventName: string, options?: {
8885
+ event?: boolean | AddEventListenerOptions;
8886
+ computedValue: (event: T) => ComputedValue;
8887
+ }): FromEventToSource$<ComputedValue>;
8888
+
8889
+ declare function on$<State, SourceType>(_source: {
8890
+ subscribe: EventEmitter<SourceType>['subscribe'];
8891
+ }, callback: (source: SourceType) => State): SourceBranded;
8892
+
8893
+ type Source$Method<SourceType> = [SourceType] extends [void] ? () => void : (value: SourceType) => void;
8894
+ type ExposedFormInsertions<Insertions> = MergeObject<IsEmptyObject<Insertions> extends true ? {} : FilterSource<Insertions>, {
8895
+ [K in keyof FilterSource<Insertions> as FilterSource<Insertions>[K] extends Source$<any> ? K : never]: FilterSource<Insertions>[K] extends Source$<infer SourceType> ? Source$Method<SourceType> : never;
8896
+ }>;
8897
+ type FormExceptionSignal<Insertions, ExceptionName extends string> = `${Uncapitalize<ExceptionName>}Exceptions` extends keyof ExposedFormInsertions<Insertions> ? ExposedFormInsertions<Insertions>[`${Uncapitalize<ExceptionName>}Exceptions`] extends Signal<infer Exceptions> ? Exceptions : never : never;
8898
+ type HasFormExceptionSignalPair<Insertions, ExceptionName extends string, HasExceptionKey extends keyof ExposedFormInsertions<Insertions>> = ExposedFormInsertions<Insertions>[HasExceptionKey] extends Signal<boolean> ? `${Uncapitalize<ExceptionName>}Exceptions` extends keyof ExposedFormInsertions<Insertions> ? ExposedFormInsertions<Insertions>[`${Uncapitalize<ExceptionName>}Exceptions`] extends Signal<unknown> ? true : false : false : false;
8899
+ type FormExceptionMap<Insertions> = {
8900
+ [K in keyof ExposedFormInsertions<Insertions> as K extends string ? K extends `has${infer Name}Exceptions` ? HasFormExceptionSignalPair<Insertions, Name, K> extends true ? Uncapitalize<Name> : never : never : never]: K extends `has${infer Name}Exceptions` ? FormExceptionSignal<Insertions, Name> : never;
8901
+ };
8902
+ type FormExceptionsInsertion<Insertions> = keyof FormExceptionMap<Insertions> extends never ? {} : {
8903
+ hasExceptions: Signal<boolean>;
8904
+ exceptions: Signal<FormExceptionMap<Insertions>>;
8905
+ };
8906
+ type CraftFieldTree<TModel, Insertions, TKey extends string | number = string | number> = (() => [TModel] extends [AbstractControl] ? CompatFieldState<TModel, TKey> & Insertions : FieldState<TModel, TKey> & Insertions) & ([TModel] extends [AbstractControl] ? object : [TModel] extends [ReadonlyArray<infer U>] ? ReadonlyArrayLike<MaybeFieldTree<U, number>> : TModel extends Record<string, any> ? Subfields<TModel> : object);
8907
+ type FormWithInsertions<Model, Insertions> = CraftFieldTree<Model, ExposedFormInsertions<Insertions> & {
8908
+ hasAttemptedSubmit: Signal<boolean>;
8909
+ validatedFormValue: Signal<ValidatedFormValue<Model>>;
8910
+ } & FormExceptionsInsertion<Insertions>, string | number>;
8911
+ type InsertionFormFactoryContext<StateType, PreviousInsertionsOutputs, FormIdentifier extends string | number | unknown> = InsertionStateFactoryContext<StateType, PreviousInsertionsOutputs> & {
8912
+ form: FieldTree<StateType, string | number>;
8913
+ schemaPath: SchemaPathTree<StateType>;
8914
+ validatedFormValue: Signal<ValidatedFormValue<StateType>>;
8915
+ validatorModelRef: Signal<StateType>;
8916
+ setValidatorModelRef: (nextModel: Signal<StateType>) => void;
8917
+ setAttemptedSubmit: () => void;
8918
+ setSubmitting: (submitting: boolean) => void;
8919
+ formIdentifier: FormIdentifier;
8920
+ };
8921
+ type InsertionsFormFactory<State, FormIdentifier extends string | number | unknown, InsertionsOutputs, PreviousInsertionsOutputs = {}> = (context: InsertionFormFactoryContext<State, PreviousInsertionsOutputs, FormIdentifier>) => InsertionsOutputs;
8922
+ declare const validatedFormValueSymbol: unique symbol;
8923
+ type ValidatedFormValue<FormValue> = (FormValue & {
8924
+ [validatedFormValueSymbol]: true;
8925
+ }) | undefined;
8926
+
8927
+ type ExtractItemType$1<T> = T extends readonly (infer Item)[] ? Item : never;
8928
+ type InsertFormSimpleOutput<StateType, Insertions> = {
8929
+ form: FormWithInsertions<StateType, Insertions>;
8930
+ };
8931
+ type InsertFormParallelOutput<StateType, Insertions> = {
8932
+ forms: Signal<FieldTree<ExtractItemType$1<StateType>, string | number>[]>;
8933
+ select: (formIdentifier: string | number) => FormWithInsertions<ExtractItemType$1<StateType>, Insertions>;
8934
+ };
8935
+ type InsertFormSimpleReturn<StateType, Insertions, PreviousInsertionsOutputs> = InsertionsStateFactory<StateType, InsertFormSimpleOutput<StateType, Insertions>, PreviousInsertionsOutputs>;
8936
+ type InsertFormParallelReturn<StateType, Insertions, PreviousInsertionsOutputs> = InsertionsStateFactory<StateType, InsertFormParallelOutput<StateType, Insertions>, PreviousInsertionsOutputs>;
8937
+ type ParallelInsertFormConfig<ItemType, GroupIdentifier extends string | number> = {
8938
+ identifier: (context: {
8939
+ item: ItemType;
8940
+ index: number;
8941
+ }) => GroupIdentifier;
8942
+ };
8943
+ declare function insertForm<StateType, PreviousInsertionsOutputs = {}>(): InsertFormSimpleReturn<StateType, {}, PreviousInsertionsOutputs>;
8944
+ declare function insertForm<StateType, Insertion1, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>): InsertFormSimpleReturn<StateType, Insertion1, PreviousInsertionsOutputs>;
8945
+ declare function insertForm<StateType, Insertion1, Insertion2, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2, PreviousInsertionsOutputs>;
8946
+ declare function insertForm<StateType, Insertion1, Insertion2, Insertion3, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<StateType, unknown, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2 & Insertion3, PreviousInsertionsOutputs>;
8947
+ declare function insertForm<StateType, Insertion1, Insertion2, Insertion3, Insertion4, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<StateType, unknown, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<StateType, unknown, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4, PreviousInsertionsOutputs>;
8948
+ declare function insertForm<StateType, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<StateType, unknown, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<StateType, unknown, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<StateType, unknown, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5, PreviousInsertionsOutputs>;
8949
+ declare function insertForm<StateType, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<StateType, unknown, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<StateType, unknown, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<StateType, unknown, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<StateType, unknown, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6, PreviousInsertionsOutputs>;
8950
+ declare function insertForm<StateType, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<StateType, unknown, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<StateType, unknown, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<StateType, unknown, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<StateType, unknown, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsFormFactory<StateType, unknown, Insertion7, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7, PreviousInsertionsOutputs>;
8951
+ declare function insertForm<StateType, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Insertion8, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<StateType, unknown, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<StateType, unknown, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<StateType, unknown, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<StateType, unknown, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsFormFactory<StateType, unknown, Insertion7, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>, insertion8: InsertionsFormFactory<StateType, unknown, Insertion8, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8, PreviousInsertionsOutputs>;
8952
+ declare function insertForm<StateType, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Insertion8, Insertion9, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<StateType, unknown, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<StateType, unknown, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<StateType, unknown, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<StateType, unknown, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsFormFactory<StateType, unknown, Insertion7, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>, insertion8: InsertionsFormFactory<StateType, unknown, Insertion8, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>, insertion9: InsertionsFormFactory<StateType, unknown, Insertion9, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8 & Insertion9, PreviousInsertionsOutputs>;
8953
+ declare function insertForm<StateType, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Insertion8, Insertion9, Insertion10, PreviousInsertionsOutputs = {}>(insertion1: InsertionsFormFactory<StateType, unknown, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<StateType, unknown, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<StateType, unknown, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<StateType, unknown, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<StateType, unknown, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<StateType, unknown, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsFormFactory<StateType, unknown, Insertion7, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>, insertion8: InsertionsFormFactory<StateType, unknown, Insertion8, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>, insertion9: InsertionsFormFactory<StateType, unknown, Insertion9, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8>, insertion10: InsertionsFormFactory<StateType, unknown, Insertion10, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8 & Insertion9>): InsertFormSimpleReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8 & Insertion9 & Insertion10, PreviousInsertionsOutputs>;
8954
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>): InsertFormParallelReturn<StateType, {}, PreviousInsertionsOutputs>;
8955
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>): InsertFormParallelReturn<StateType, Insertion1, PreviousInsertionsOutputs>;
8956
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2, PreviousInsertionsOutputs>;
8957
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, Insertion3, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2 & Insertion3, PreviousInsertionsOutputs>;
8958
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, Insertion3, Insertion4, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4, PreviousInsertionsOutputs>;
8959
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5, PreviousInsertionsOutputs>;
8960
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6, PreviousInsertionsOutputs>;
8961
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion7, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7, PreviousInsertionsOutputs>;
8962
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Insertion8, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion7, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>, insertion8: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion8, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8, PreviousInsertionsOutputs>;
8963
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Insertion8, Insertion9, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion7, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>, insertion8: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion8, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>, insertion9: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion9, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8 & Insertion9, PreviousInsertionsOutputs>;
8964
+ declare function insertForm<StateType extends unknown[], GroupIdentifier extends string | number, Insertion1, Insertion2, Insertion3, Insertion4, Insertion5, Insertion6, Insertion7, Insertion8, Insertion9, Insertion10, PreviousInsertionsOutputs = {}>(config: ParallelInsertFormConfig<ExtractItemType$1<StateType>, GroupIdentifier>, insertion1: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>, insertion6: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion6, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5>, insertion7: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion7, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6>, insertion8: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion8, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7>, insertion9: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion9, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8>, insertion10: InsertionsFormFactory<ExtractItemType$1<StateType>, GroupIdentifier, Insertion10, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8 & Insertion9>): InsertFormParallelReturn<StateType, Insertion1 & Insertion2 & Insertion3 & Insertion4 & Insertion5 & Insertion6 & Insertion7 & Insertion8 & Insertion9 & Insertion10, PreviousInsertionsOutputs>;
8965
+
8966
+ declare const VALIDATOR_OUTPUT_SYMBOL: unique symbol;
8967
+ type ValidatorType = 'sync' | 'async';
8968
+ type ValidatorUtilBrand<Name, Type extends ValidatorType = ValidatorType, Meta extends object = {}> = {
8969
+ __brand: Name;
8970
+ type: Type;
8971
+ } & Meta;
8972
+ type ValidatorSuccess<Name extends string, Type extends ValidatorType = 'sync', Meta extends object = {}> = {
8973
+ valid: true;
8974
+ } & ValidatorUtilBrand<Name, Type, Meta>;
8975
+ type ValidatorPending<Name extends string, Type extends ValidatorType = 'async', Meta extends object = {}> = {
8976
+ valid: false;
8977
+ } & ValidatorUtilBrand<Name, Type, Meta>;
8978
+ type ValidatorExceptionOutput<Name extends string, Exceptions, Type extends ValidatorType, Meta extends object> = Exclude<Exceptions, undefined> extends never ? never : (Exclude<Exceptions, undefined> & ValidatorUtilBrand<Name, Type, Meta>) | ((Exclude<Exceptions, undefined>[] | readonly Exclude<Exceptions, undefined>[]) & ValidatorUtilBrand<Name, Type, Meta>);
8979
+ type DirectValidatorExecutionOutput<Name extends string, Exceptions, Type extends ValidatorType, Meta extends object> = undefined | ValidatorSuccess<Name, Type, Meta> | ValidatorPending<Name, Type, Meta> | ValidatorExceptionOutput<Name, Exceptions, Type, Meta>;
8980
+ type ValidatorRuntimeKind = 'signal';
8981
+ type ValidatorRuntime<Name extends string = string, Type extends ValidatorType = ValidatorType, Kind extends ValidatorRuntimeKind = ValidatorRuntimeKind> = {
8982
+ readonly name: Name;
8983
+ readonly type: Type;
8984
+ readonly kind: Kind;
8985
+ };
8986
+ type ValidatorRuntimeCarrier<Name extends string = string, Type extends ValidatorType = ValidatorType, Kind extends ValidatorRuntimeKind = ValidatorRuntimeKind> = {
8987
+ readonly [VALIDATOR_OUTPUT_SYMBOL]: ValidatorRuntime<Name, Type, Kind>;
8988
+ };
8989
+ type ValidatorOutput<TValue, Name extends string, Exceptions, Type extends ValidatorType = 'sync', Identifier = unknown, Meta extends object = {}, TPathKind extends PathKind = PathKind.Root> = ((context: ValidatorBindingContext<TValue, Identifier, TPathKind>) => Signal<DirectValidatorExecutionOutput<Name, Exceptions, Type, Meta>>) & ValidatorRuntimeCarrier<Name, Type, 'signal'>;
8990
+ type ValidatorModel<TValue> = () => {
8991
+ value: () => TValue;
8992
+ };
8993
+ type ValidatorOption<TValue> = TValue | (() => TValue);
8994
+ type ValidatorConfig = {
8995
+ when?: ValidatorOption<boolean>;
8996
+ };
8997
+ type ValidatorBindingContext<TValue, Identifier = unknown, TPathKind extends PathKind = PathKind.Root> = {
8998
+ schemaPath: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>;
8999
+ errors: Signal<ValidationError.WithFieldTree[]>;
9000
+ } & ([unknown] extends [Identifier] ? {
9001
+ identifier?: undefined;
9002
+ } : {
9003
+ identifier: Identifier;
9004
+ });
9005
+ type ValueWithLengthOrSize = {
9006
+ length: number;
9007
+ } | {
9008
+ size: number;
9009
+ };
9010
+ type ValidatorException<Code extends string, Payload = undefined> = CraftExceptionResult<{
9011
+ code: Code;
9012
+ }, Payload>;
9013
+ type CRequiredException = ValidatorException<'required'>;
9014
+ type CEmailException = ValidatorException<'email'>;
9015
+ type CMinException = ValidatorException<'min', number>;
9016
+ type CMaxException = ValidatorException<'max', number>;
9017
+ type CMinLengthException = ValidatorException<'minLength', number>;
9018
+ type CMaxLengthException = ValidatorException<'maxLength', number>;
9019
+ type CPatternException = ValidatorException<'pattern', RegExp>;
9020
+ type CRequiredConfig<TValue> = ValidatorConfig;
9021
+ type CEmailConfig<TValue extends string | null | undefined> = ValidatorConfig;
9022
+ type CMinConfig<TValue extends number | string | null | undefined> = ValidatorConfig & ({
9023
+ min: ValidatorOption<number | undefined>;
9024
+ minValue?: never;
9025
+ } | {
9026
+ min?: never;
9027
+ minValue: ValidatorOption<number | undefined>;
9028
+ });
9029
+ type CMaxConfig<TValue extends number | string | null | undefined> = ValidatorConfig & ({
9030
+ max: ValidatorOption<number | undefined>;
9031
+ maxValue?: never;
9032
+ } | {
9033
+ max?: never;
9034
+ maxValue: ValidatorOption<number | undefined>;
9035
+ });
9036
+ type CMinLengthConfig<TValue extends ValueWithLengthOrSize> = ValidatorConfig & {
9037
+ minLength: ValidatorOption<number | undefined>;
9038
+ };
9039
+ type CMaxLengthConfig<TValue extends ValueWithLengthOrSize> = ValidatorConfig & {
9040
+ maxLength: ValidatorOption<number | undefined>;
9041
+ };
9042
+ type CPatternConfig<TValue extends string | null | undefined> = ValidatorConfig & {
9043
+ pattern: ValidatorOption<RegExp | undefined>;
9044
+ };
9045
+ type CValidateBaseConfig<TValue, Name extends string, Identifier = unknown, TPathKind extends PathKind = PathKind.Root> = {
9046
+ name: Name;
9047
+ type?: 'sync';
9048
+ };
9049
+ type CValidateAdvancedSyncConfig<TValue, Name extends string, Exceptions, Identifier = unknown, TPathKind extends PathKind = PathKind.Root> = CValidateBaseConfig<TValue, Name, Identifier, TPathKind> & {
9050
+ validate: (context: ValidatorBindingContext<TValue, Identifier, TPathKind>) => Signal<Exceptions | undefined>;
9051
+ };
9052
+ type CValidateSimpleSyncConfig<TValue, Name extends string, Exceptions, Identifier = unknown, TPathKind extends PathKind = PathKind.Root> = CValidateBaseConfig<TValue, Name, Identifier, TPathKind> & ValidatorConfig & {
9053
+ validWhen: ValidatorOption<boolean>;
9054
+ exception: ValidatorOption<Exceptions>;
9055
+ };
9056
+ type CValidateSyncConfig<TValue, Name extends string, Exceptions, Identifier = unknown, TPathKind extends PathKind = PathKind.Root> = CValidateAdvancedSyncConfig<TValue, Name, Exceptions, Identifier, TPathKind> | CValidateSimpleSyncConfig<TValue, Name, Exceptions, Identifier, TPathKind>;
9057
+ type AnyAsyncCraftResourceRef = ResourceLikeQueryRef<any, any, any, any, any, any, any> | ResourceByIdLikeQueryRef<any, any, any, any, any, any, any, any> | ResourceLikeMutationRef<any, any, any, any, any, any, any> | ResourceByIdLikeMutationRef<any, any, any, any, any, any, any, any>;
9058
+ type AsyncValidatorResourceTarget<TResourceRef> = TResourceRef extends {
9059
+ select: (...args: any[]) => infer SelectedResource;
9060
+ } ? NonNullable<SelectedResource> : TResourceRef;
9061
+ type AsyncValidatorResourceIdentifier<TResourceRef> = TResourceRef extends ResourceByIdLikeQueryRef<any, any, any, any, any, any, infer Identifier, any> ? Identifier : TResourceRef extends ResourceByIdLikeMutationRef<any, any, any, any, any, any, infer Identifier, any> ? Identifier : unknown;
9062
+ type AsyncValidatorResourceExceptionUnion<TResource> = TResource extends {
9063
+ exceptions: Signal<{
9064
+ list: (infer Exception)[];
9065
+ }>;
9066
+ } ? Exception : never;
9067
+ type ExtractValidatorExceptionItems<T> = T extends readonly (infer Item)[] ? Item : T;
9068
+ type AsyncValidatorContext<TValue, TResourceRef extends AnyAsyncCraftResourceRef, Identifier = unknown, TPathKind extends PathKind = PathKind.Root, TResource = AsyncValidatorResourceTarget<TResourceRef>, ResourceExceptions = AsyncValidatorResourceExceptionUnion<TResource>, ResourceExceptionCodes = ExtractCodeFromCraftResultUnion<ResourceExceptions>> = ValidatorBindingContext<TValue, Identifier, TPathKind> & {
9069
+ validateAsyncCraftResource: TResource;
9070
+ omitExceptions: <C extends ResourceExceptionCodes>(codes: readonly C[]) => ExcludeByCode<ResourceExceptions, C>[];
9071
+ };
9072
+ type IsValidAsyncExceptions<T> = [unknown] extends [T] ? true : NonNullable<T> extends AnyCraftException ? true : NonNullable<T> extends readonly (infer Item)[] ? Item extends AnyCraftException ? true : false : false;
9073
+ type HasValidAsyncExceptionReturn<SuccessExceptions, ErrorExceptions, ExceptionExceptions> = IsValidAsyncExceptions<SuccessExceptions> extends true ? IsValidAsyncExceptions<ErrorExceptions> extends true ? IsValidAsyncExceptions<ExceptionExceptions> extends true ? true : {
9074
+ success: true;
9075
+ error: true;
9076
+ exceptions: false;
9077
+ } : {
9078
+ success: true;
9079
+ error: false;
9080
+ exceptions: IsValidAsyncExceptions<ExceptionExceptions>;
9081
+ } : {
9082
+ success: false;
9083
+ error: IsValidAsyncExceptions<ErrorExceptions>;
9084
+ exceptions: IsValidAsyncExceptions<ExceptionExceptions>;
9085
+ };
9086
+ type ValidationDetails$1 = {
9087
+ success: boolean;
9088
+ error: boolean;
9089
+ exceptions: boolean;
9090
+ };
9091
+ type InvalidAsyncExceptionsMessage<T> = T extends true ? never : T extends ValidationDetails$1 ? `Not valid ${(T['success'] extends false ? 'exceptionsOnSuccess callback' : never) | (T['error'] extends false ? 'error callback' : never) | (T['exceptions'] extends false ? 'onException callback' : never)}` : never;
9092
+ type CAsyncValidateConfig<TValue, Name extends string, TResourceRef extends AnyAsyncCraftResourceRef, SuccessExceptions, ErrorExceptions, ExceptionExceptions, Identifier = unknown, TPathKind extends PathKind = PathKind.Root> = MergeObjects$1<[
9093
+ ValidatorConfig & {
9094
+ name: Name;
9095
+ isValidSuccess?: (context: AsyncValidatorContext<TValue, TResourceRef, Identifier, TPathKind>) => boolean;
9096
+ exceptionsOnSuccess?: (context: AsyncValidatorContext<TValue, TResourceRef, Identifier, TPathKind>) => SuccessExceptions;
9097
+ error?: (context: AsyncValidatorContext<TValue, TResourceRef, Identifier, TPathKind>) => ErrorExceptions;
9098
+ onException?: (context: AsyncValidatorContext<TValue, TResourceRef, Identifier, TPathKind>) => ExceptionExceptions;
9099
+ },
9100
+ HasValidAsyncExceptionReturn<SuccessExceptions, ErrorExceptions, ExceptionExceptions> extends true ? {} : {
9101
+ typingError: `cAsyncValidate callbacks must only return Craft exceptions, arrays of Craft exceptions, or undefined. ${InvalidAsyncExceptionsMessage<HasValidAsyncExceptionReturn<SuccessExceptions, ErrorExceptions, ExceptionExceptions>>}`;
9102
+ }
9103
+ ]>;
9104
+ type ToAsyncValidatorExceptions<ResourceExceptions, SuccessExceptions, ErrorExceptions, ExceptionExceptions> = [unknown] extends [ExceptionExceptions] ? Exclude<ResourceExceptions | ExtractValidatorExceptionItems<SuccessExceptions> | ExtractValidatorExceptionItems<ErrorExceptions>, undefined> : Exclude<ExtractValidatorExceptionItems<SuccessExceptions> | ExtractValidatorExceptionItems<ErrorExceptions> | ExtractValidatorExceptionItems<ExceptionExceptions>, undefined>;
9105
+ declare function cRequired<TValue>(config?: CRequiredConfig<TValue>): ValidatorOutput<TValue, 'cRequired', CRequiredException>;
9106
+ declare function cEmail<TValue extends string | null | undefined>(config?: CEmailConfig<TValue>): ValidatorOutput<TValue, 'cEmail', CEmailException>;
9107
+ declare function cMin<TValue extends number | string | null | undefined>(config: CMinConfig<TValue>): ValidatorOutput<TValue, 'cMin', CMinException>;
9108
+ declare function cMax<TValue extends number | string | null | undefined>(config: CMaxConfig<TValue>): ValidatorOutput<TValue, 'cMax', CMaxException>;
9109
+ declare function cMinLength<TValue extends ValueWithLengthOrSize>(config: CMinLengthConfig<TValue>): ValidatorOutput<TValue, 'cMinLength', CMinLengthException>;
9110
+ declare function cMaxLength<TValue extends ValueWithLengthOrSize>(config: CMaxLengthConfig<TValue>): ValidatorOutput<TValue, 'cMaxLength', CMaxLengthException>;
9111
+ declare function cPattern<TValue extends string | null | undefined>(config: CPatternConfig<TValue>): ValidatorOutput<TValue, 'cPattern', CPatternException>;
9112
+ declare function cValidate<TValue, const Name extends string, Exceptions, Identifier = unknown, TPathKind extends PathKind = PathKind.Root>(config: CValidateSyncConfig<TValue, Name, Exceptions, Identifier, TPathKind>): ValidatorOutput<TValue, Name, Exceptions, 'sync', Identifier, {}, TPathKind>;
9113
+ declare const cValidator: typeof cValidate;
9114
+ declare function cAsyncValidate<TValue, TResourceRef extends AnyAsyncCraftResourceRef, const Name extends string, SuccessExceptions = undefined, ErrorExceptions = undefined, ExceptionExceptions = unknown, TPathKind extends PathKind = PathKind.Root, Identifier = AsyncValidatorResourceIdentifier<TResourceRef>>(resourceRef: TResourceRef, config: CAsyncValidateConfig<TValue, Name, TResourceRef, SuccessExceptions, ErrorExceptions, ExceptionExceptions, Identifier, TPathKind>): ValidatorOutput<TValue, Name, ToAsyncValidatorExceptions<AsyncValidatorResourceExceptionUnion<AsyncValidatorResourceTarget<TResourceRef>>, SuccessExceptions, ErrorExceptions, ExceptionExceptions>, 'async', Identifier, {}, TPathKind>;
9115
+ declare const cAsyncValidator: typeof cAsyncValidate;
9116
+
9117
+ type FormAttributeInput<T> = Signal<T> | (() => T);
9118
+ type AnySignalValidatorOutput = ValidatorOutput<any, string, any, any, any, any, any>;
9119
+ type FormNodeExceptions = {
9120
+ list: unknown[];
9121
+ byValidator: Record<string, unknown>;
9122
+ };
9123
+ type InsertFormAttributesConfig<S, Validators extends AnySignalValidatorOutput = never> = {
9124
+ disable?: FormAttributeInput<boolean>;
9125
+ hidden?: FormAttributeInput<boolean>;
9126
+ readonly?: FormAttributeInput<boolean>;
9127
+ validators?: Validators[];
9128
+ };
9129
+ type InsertFormAttributesContext<TValue, PreviousInsertionsOutputs = {}, FormIdentifier extends string | number | unknown = unknown> = InsertionFormFactoryContext<TValue, PreviousInsertionsOutputs, FormIdentifier> & {
9130
+ nodeModel: ValidatorModel<TValue>;
9131
+ };
9132
+ type ExtractValidatorMetadata<Validator> = Validator extends ValidatorOutput<infer TValue, infer Name, infer Exceptions, infer Type, infer Identifier, infer Meta, infer TPathKind> ? Exceptions : never;
9133
+ type ExceptionsByValidatorFromTuple<ExceptionsTuple extends unknown[], Acc = {}> = ExceptionsTuple extends [infer Head, ...infer Tail] ? ExceptionsByValidatorFromTuple<Tail, Head extends CraftExceptionResult<infer M, infer P> ? MergeObject$1<Acc, {
9134
+ [Key in M['code']]: Head;
9135
+ }> : Head> : Prettify<Acc>;
9136
+ type ExceptionsList<Exception> = UnionToTuple$1<ExtractValidatorMetadata<NonNullable<Exception>>>;
9137
+ type ExceptionsByValidator<Validators> = ExceptionsByValidatorFromTuple<UnionToTuple$1<ExtractValidatorMetadata<NonNullable<Validators>>>>;
9138
+ declare function insertFormAttributes<StateType, Validators extends AnySignalValidatorOutput = never, FormIdentifier extends string | number | unknown = unknown, PreviousInsertionsOutputs = {}>(_factory: (context: InsertFormAttributesContext<StateType, PreviousInsertionsOutputs, FormIdentifier>) => InsertFormAttributesConfig<StateType, Validators>): InsertionsFormFactory<StateType, FormIdentifier, {
9139
+ exceptions: Signal<{
9140
+ list: ExceptionsList<Validators>;
9141
+ byValidator: ExceptionsByValidator<NonNullable<Validators>>;
9142
+ }>;
9143
+ /**
9144
+ * Exceptions that should be visible to the user. By default, all exceptions are hidden until the field is dirty or the form has been attempted to be submitted at least once.
9145
+ */
9146
+ visibleExceptions: Signal<{
9147
+ list: ExceptionsList<Validators>;
9148
+ byValidator: ExceptionsByValidator<NonNullable<Validators>>;
9149
+ }>;
9150
+ hasExceptions: Signal<boolean>;
9151
+ }, PreviousInsertionsOutputs>;
9152
+
9153
+ type ExtractItemType<T> = T extends readonly (infer Item)[] ? Item : never;
9154
+ type MergeInsertions<Insertions extends readonly unknown[], Acc = {}> = Insertions extends readonly [infer Head, ...infer Tail] ? MergeInsertions<Tail, Acc & Head> : Acc;
9155
+ type SelectedFormTreeTarget<StateType, Name extends string> = StateType extends readonly (infer Item)[] ? Extract<Item, object> : StateType extends Record<string, unknown> ? Name extends keyof StateType ? StateType[Name] : never : never;
9156
+ type IsArray<T> = T extends any[] ? true : false;
9157
+ type MaybeFormWithInsertions<Model, Insertions> = [Model] extends [never] ? never : undefined extends Model ? FormWithInsertions<Extract<Model, object>, Insertions> | undefined : FormWithInsertions<Extract<Model, object>, Insertions>;
9158
+ type SelectFormTreeMethodName<Name extends string> = `select${Capitalize<Name>}`;
9159
+ type ArrayInsertSelectFormTreeOutput<StateType, Name extends string, Insertions extends readonly unknown[]> = {
9160
+ [K in SelectFormTreeMethodName<Name>]: (id: number) => FormWithInsertions<Extract<ExtractItemType<StateType>, object>, MergeInsertions<Insertions>> | undefined;
9161
+ } & {
9162
+ items: () => Array<FormWithInsertions<Extract<ExtractItemType<StateType>, object>, MergeInsertions<Insertions>>>;
9163
+ };
9164
+ type ObjectInsertSelectFormTreeOutput<StateType, Name extends string, Insertions extends readonly unknown[]> = {
9165
+ [K in SelectFormTreeMethodName<Name>]: () => MaybeFormWithInsertions<StateType extends Record<string, unknown> ? Name extends keyof StateType ? StateType[Name] : never : never, MergeInsertions<Insertions>>;
9166
+ };
9167
+ type InsertSelectFormTreeReturn<StateType, Name extends string, FormIdentifier extends string | number | unknown, Insertions extends readonly unknown[], PreviousInsertionsOutputs> = InsertionsFormFactory<StateType, FormIdentifier, StateType extends readonly unknown[] ? ArrayInsertSelectFormTreeOutput<StateType, Name, Insertions> : ObjectInsertSelectFormTreeOutput<StateType, Name, Insertions>, PreviousInsertionsOutputs>;
9168
+ declare function insertSelectFormTree<StateType, const Name extends AutoCompleteName & string, FormIdentifier extends string | number | unknown = unknown, Insertion1 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = NoInfer<StateType> extends readonly object[] ? string : keyof NoInfer<StateType>>(name: Name, insertion1: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion1, PreviousInsertionsOutputs>): InsertSelectFormTreeReturn<[
9169
+ Name
9170
+ ] extends [keyof StateType] ? IsArray<StateType[Name]> extends true ? `craft-ng error, typing limitation: insertSelectFormTree does not currently support selecting items from an array property in first insertion position (e.g. insertSelectFormTree('addresses', insertSelectFormTree('address', ...))). Consider using insertNoopTypingAnchor:
9171
+ insertSelectFormTree('${Name}', insertNoopTypingAnchor, insertSelectFormTree(...)) ` : StateType : StateType, Name, FormIdentifier, [
9172
+ Insertion1
9173
+ ], PreviousInsertionsOutputs>;
9174
+ declare function insertSelectFormTree<StateType, const Name extends AutoCompleteName & string, FormIdentifier extends string | number | unknown = unknown, Insertion1 = {}, Insertion2 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = StateType extends readonly object[] ? string : keyof StateType>(name: Name, insertion1: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>): InsertSelectFormTreeReturn<StateType, Name, FormIdentifier, [
9175
+ Insertion1,
9176
+ Insertion2
9177
+ ], PreviousInsertionsOutputs>;
9178
+ declare function insertSelectFormTree<StateType, const Name extends AutoCompleteName & string, FormIdentifier extends string | number | unknown = unknown, Insertion1 = {}, Insertion2 = {}, Insertion3 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = StateType extends readonly object[] ? string : keyof StateType>(name: Name, insertion1: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>): InsertSelectFormTreeReturn<StateType, Name, FormIdentifier, [
9179
+ Insertion1,
9180
+ Insertion2,
9181
+ Insertion3
9182
+ ], PreviousInsertionsOutputs>;
9183
+ declare function insertSelectFormTree<StateType, const Name extends AutoCompleteName & string, FormIdentifier extends string | number | unknown = unknown, Insertion1 = {}, Insertion2 = {}, Insertion3 = {}, Insertion4 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = StateType extends readonly object[] ? string : keyof StateType>(name: Name, insertion1: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>): InsertSelectFormTreeReturn<StateType, Name, FormIdentifier, [
9184
+ Insertion1,
9185
+ Insertion2,
9186
+ Insertion3,
9187
+ Insertion4
9188
+ ], PreviousInsertionsOutputs>;
9189
+ declare function insertSelectFormTree<StateType, const Name extends AutoCompleteName & string, FormIdentifier extends string | number | unknown = unknown, Insertion1 = {}, Insertion2 = {}, Insertion3 = {}, Insertion4 = {}, Insertion5 = {}, PreviousInsertionsOutputs = {}, AutoCompleteName = StateType extends readonly object[] ? string : keyof StateType>(name: Name, insertion1: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion1, PreviousInsertionsOutputs>, insertion2: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion2, PreviousInsertionsOutputs & Insertion1>, insertion3: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion3, PreviousInsertionsOutputs & Insertion1 & Insertion2>, insertion4: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion4, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3>, insertion5: InsertionsFormFactory<SelectedFormTreeTarget<StateType, Name>, FormIdentifier, Insertion5, PreviousInsertionsOutputs & Insertion1 & Insertion2 & Insertion3 & Insertion4>): InsertSelectFormTreeReturn<StateType, Name, FormIdentifier, [
9190
+ Insertion1,
9191
+ Insertion2,
9192
+ Insertion3,
9193
+ Insertion4,
9194
+ Insertion5
9195
+ ], PreviousInsertionsOutputs>;
9196
+
9197
+ type SubmitExceptionUnion<SubmitCraftResource> = SubmitCraftResource extends {
9198
+ exceptions: Signal<{
9199
+ list: (infer ExceptionList)[];
9200
+ }>;
9201
+ } ? ExceptionList : AnyCraftException;
9202
+ type SubmitContext<FormValue, MutationValue, MutationParams, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions extends ResourceExceptionConstraints, SubmitCraftResource = ResourceLikeMutationRef<MutationValue, MutationParams, true, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions>, SubmitExceptions = ExtractCodeFromCraftResultUnion<SubmitExceptionUnion<SubmitCraftResource>>> = {
9203
+ submitCraftResource: SubmitCraftResource;
9204
+ form: FormWithInsertions<FormValue, {}>;
9205
+ exceptions: SubmitExceptionUnion<SubmitCraftResource>;
9206
+ omitExceptions: <C extends SubmitExceptions>(codes: readonly C[]) => ExcludeByCode<SubmitExceptionUnion<SubmitCraftResource>, C>;
9207
+ };
9208
+ type IsValidExceptions<T> = NonNullable<T> extends AnyCraftException ? true : [unknown] extends [T] ? true : false;
9209
+ type HasReturnValidExceptions<SuccessExceptions, ErrorExceptions, ExceptionExceptions> = IsValidExceptions<SuccessExceptions> extends true ? IsValidExceptions<ErrorExceptions> extends true ? IsValidExceptions<ExceptionExceptions> extends true ? true : {
9210
+ success: true;
9211
+ error: true;
9212
+ exceptions: false;
9213
+ } : {
9214
+ success: true;
9215
+ error: false;
9216
+ exceptions: IsValidExceptions<ExceptionExceptions>;
9217
+ } : {
9218
+ success: false;
9219
+ error: IsValidExceptions<ErrorExceptions>;
9220
+ exceptions: IsValidExceptions<ExceptionExceptions>;
9221
+ };
9222
+ type ValidationDetails = {
9223
+ success: boolean;
9224
+ error: boolean;
9225
+ exceptions: boolean;
9226
+ };
9227
+ type InvalidExceptionsMessage<T> = T extends true ? never : T extends ValidationDetails ? `Not valid ${(T['success'] extends false ? 'success callback' : never) | (T['error'] extends false ? 'error callback' : never) | (T['exceptions'] extends false ? 'exceptions callback' : never)}` : never;
9228
+ type InsertFormSubmitConfig<FormValue, SuccessExceptions, ErrorExceptions, ExceptionExceptions, MutationValue, MutationParams, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions extends ResourceExceptionConstraints, MutationIdentifier extends string | number | unknown, FormIdentifier extends string | number | unknown> = MergeObjects$1<[
9229
+ {
9230
+ /**
9231
+ * Add more exceptions on success, for example to handle specific cases where the resource returns a successful response but you want to display an exception
9232
+ */
9233
+ success?: (context: SubmitContext<FormValue, MutationValue, MutationParams, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions>) => SuccessExceptions;
9234
+ /**
9235
+ * Add more exceptions on error, for example to handle specific cases where the resource returns an error response but you want to display a different exception
9236
+ */
9237
+ error?: (context: SubmitContext<FormValue, MutationValue, MutationParams, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions>) => ErrorExceptions;
9238
+ /**
9239
+ * Override and add more exceptions on exception, for example to handle specific cases where the resource throws an exception but you want to display a different exception
9240
+ */
9241
+ exception?: (context: SubmitContext<FormValue, MutationValue, MutationParams, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions>) => ExceptionExceptions;
9242
+ },
9243
+ HasReturnValidExceptions<SuccessExceptions, ErrorExceptions, ExceptionExceptions> extends true ? {} : {
9244
+ typingError: `insertFormSubmit callbacks must only return Craft exceptions or undefined. ${InvalidExceptionsMessage<HasReturnValidExceptions<SuccessExceptions, ErrorExceptions, ExceptionExceptions>>}`;
9245
+ },
9246
+ [
9247
+ unknown
9248
+ ] extends [FormIdentifier] ? {} : {
9249
+ filter?: ({ formIdentifier, mutationIdentifier, mutationResource, }: {
9250
+ formIdentifier: FormIdentifier;
9251
+ mutationIdentifier: MutationIdentifier;
9252
+ mutationResource: ResourceLikeMutationRef<MutationValue, MutationParams, true, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions>;
9253
+ }) => boolean;
9254
+ }
9255
+ ]>;
9256
+ type ToSubmitExceptions<SubmitExceptions extends AnyCraftException | undefined | unknown, SuccessExceptions, ErrorExceptions, ExceptionExceptions, FormIdentifier extends string | number | unknown> = [unknown] extends [ExceptionExceptions] ? Exclude<SubmitExceptions & InsertMetaInCraftExceptionIfExists<SuccessExceptions, 'insertFormSubmitSuccess', FormIdentifier> & InsertMetaInCraftExceptionIfExists<ErrorExceptions, 'insertFormSubmitError', FormIdentifier>, undefined> : Exclude<InsertMetaInCraftExceptionIfExists<ExceptionExceptions, 'insertFormSubmitException', FormIdentifier> | InsertMetaInCraftExceptionIfExists<SuccessExceptions, 'insertFormSubmitSuccess', FormIdentifier> | InsertMetaInCraftExceptionIfExists<ErrorExceptions, 'insertFormSubmitError', FormIdentifier>, undefined>;
9257
+ declare function insertFormSubmit<FormValue, MutationValue, MutationParams, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions extends ResourceExceptionConstraints, SuccessExceptions, ErrorExceptions, ExceptionExceptions>(submitCraftResource: ResourceLikeMutationRef<MutationValue, MutationParams, true, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions>, config?: InsertFormSubmitConfig<FormValue, SuccessExceptions, ErrorExceptions, ExceptionExceptions, NoInfer<MutationValue>, NoInfer<MutationParams>, NoInfer<MutationArgParams>, NoInfer<MutationSourceParams>, NoInfer<MutationInsertions>, NoInfer<MutationExceptions>, unknown, unknown>): InsertionsFormFactory<FormValue, unknown, {
9258
+ submit: () => void;
9259
+ hasSubmitExceptions: Signal<boolean>;
9260
+ submitExceptions: Signal<ToSubmitExceptions<InsertMetaInCraftExceptionIfExists<MutationExceptions['params'], 'params', unknown> | InsertMetaInCraftExceptionIfExists<MutationExceptions['loader'], 'loader', unknown>, SuccessExceptions, ErrorExceptions, ExceptionExceptions, unknown>[]>;
9261
+ }>;
9262
+ declare function insertFormSubmit<FormValue, MutationValue, MutationParams, MutationArgParams, MutationSourceParams, MutationInsertions, MutationExceptions extends ResourceExceptionConstraints, SuccessExceptions, ErrorExceptions, ExceptionExceptions, MutationIdentifier extends string | number, FormIdentifier extends string | number>(submitCraftResourceById: ResourceByIdLikeMutationRef<MutationValue, MutationParams, true, MutationArgParams, MutationSourceParams, MutationInsertions, MutationIdentifier, MutationExceptions>, config?: InsertFormSubmitConfig<FormValue, SuccessExceptions, ErrorExceptions, ExceptionExceptions, NoInfer<MutationValue>, NoInfer<MutationParams>, NoInfer<MutationArgParams>, NoInfer<MutationSourceParams>, NoInfer<MutationInsertions>, NoInfer<MutationExceptions>, NoInfer<MutationIdentifier>, NoInfer<FormIdentifier>>): InsertionsFormFactory<FormValue, FormIdentifier, {
9263
+ submit: () => void;
9264
+ hasSubmitExceptions: Signal<boolean>;
9265
+ submitExceptions: Signal<ToSubmitExceptions<InsertMetaInCraftExceptionIfExists<MutationExceptions['params'], 'params', MutationIdentifier> | InsertMetaInCraftExceptionIfExists<MutationExceptions['loader'], 'loader', MutationIdentifier>, SuccessExceptions, ErrorExceptions, ExceptionExceptions, FormIdentifier>[]>;
9266
+ }>;
9267
+
9268
+ export { CRAFT_EXCEPTION_SYMBOL, EXTERNALLY_PROVIDED, EmptyContext, GlobalPersisterHandlerService, STORE_CONFIG_TOKEN, SourceBrand, SourceBranded, VALIDATOR_OUTPUT_SYMBOL, addMany, addOne, afterRecomputation, asyncProcess, cAsyncValidate, cAsyncValidator, cEmail, cMax, cMaxLength, cMin, cMinLength, cPattern, cRequired, cValidate, cValidator, capitalize, computedIds, computedSource, computedTotal, contract, craft, craftAsyncProcesses, craftComputedStates, craftException, craftFactoryEntries, craftInject, craftInputs, craftMutations, craftQuery, craftQueryParam, craftQueryParams, craftSetAllQueriesParamsStandalone, craftSources, craftState, createMethodHandlers, fromEventToSource$, injectService, insertForm, insertFormAttributes, insertFormSubmit, insertLocalStoragePersister, insertNoopTypingAnchor, insertPaginationPlaceholderData, insertReactOnMutation, insertSelect, insertSelectFormTree, isCraftException, isSource, linkedSource, localStoragePersister, map, mapOne, mutation, on$, partialContext, query, queryParam, reactiveWritableSignal, removeAll, removeMany, removeOne, resourceById, serializeQueryParams, serializedQueryParamsObjectToString, setAll, setMany, setOne, signalSource, source$, sourceFromEvent, stackedSource, state, toInject, toSource, toggleMany, toggleOne, updateMany, updateOne, upsertMany, upsertOne, validatedFormValueSymbol };
9269
+ export type { AnyCraftException, AsyncProcessExceptionConstraints, AsyncProcessOutput, AsyncProcessRef, CEmailException, CMaxException, CMaxLengthException, CMinException, CMinLengthException, CRequiredException, CloudProxy, CloudProxySource, ContextConstraints, ContextInput, CraftException, CraftExceptionMeta, CraftExceptionResult, CraftFactory, CraftFactoryEntries, CraftFactoryUtility, DeferredExtract, EntitiesUtilBrand, EqualParams, ExcludeByCode, ExcludeCommonKeys, ExposedStateInsertions, ExtractCodeFromCraftResultUnion, ExtractCraftException, ExtractSignalPropsAndMethods, FilterMethodsBoundToSources, FilterPrivateFields, FilterSource, FlatRecord, FormNodeExceptions, FormWithInsertions, FromEventToSource$, HasChild$1 as HasChild, HasKeys, IdSelector, Identifier, InferInjectedType, InjectService2InsertionContext, InjectService2InsertionFactory, InjectService2Insertions, InjectService2Output, InjectService2Public, InsertFormAttributesConfig, InsertFormAttributesContext, InsertMetaInCraftExceptionIfExists, InsertionFormFactoryContext, InsertionsFormFactory, IsAny, IsEmptyObject, IsNever, IsUnknown, MakeOptionalPropertiesRequired$1 as MakeOptionalPropertiesRequired, MergeObject$1 as MergeObject, MergeObjects$1 as MergeObjects, MergeTwoContexts, MutationOutput, MutationRef, Not, OmitStrict, PartialContext, Prettify, QueryOutput, QueryParamConfig, QueryParamExceptions, QueryParamNavigationOptions$1 as QueryParamNavigationOptions, QueryParamOutput, QueryParamsToState, QueryRef, ReadonlySource, ReadonlySource$, RemoveIndexSignature, ReplaceStoreConfigToken, ResourceByIdHandler, ResourceByIdLikeAsyncProcessExceptions, ResourceByIdLikeExceptions, ResourceByIdLikeMutationExceptions, ResourceByIdLikeMutationRef, ResourceByIdLikeQueryRef, ResourceByIdRef, ResourceLikeAsyncProcessExceptions, ResourceLikeExceptions, ResourceLikeMutationExceptions, ResourceLikeMutationRef, ResourceLikeQueryRef, SignalSource, Source$, SourceFromEvent, SourceSetterMethods, SourceSubscribe, SpecificCraftQueryParamOutputs, SpecificCraftQueryParamsOutputs, StackSource, StateOutput, StoreConfigConstraints, StoreConfigToken, StripCraftException, ToConnectableMethodFromInject, ToConnectableSourceFromInject, ToInjectBindings, UnionToIntersection$1 as UnionToIntersection, UnionToTuple$1 as UnionToTuple, Update, ValidatedFormValue, ValidatorBindingContext, ValidatorModel, ValidatorOutput, ValidatorPending, ValidatorSuccess, ValidatorType, ValidatorUtilBrand };