akanjs 2.3.4 → 2.3.5-rc.1

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,4 +1,5 @@
1
- import type { DatabaseSignal, EndpointCls, SerializedSignal, ServiceSignal, SliceCls } from "akanjs/signal";
1
+ import type { Assign } from "akanjs/base";
2
+ import type { DatabaseSignal, SerializedSignal, ServiceSignal } from "akanjs/signal";
2
3
  import type { FetchProxy } from "../client";
3
4
  import type { GetSliceMetaObjFromDatabaseSignals } from "../types";
4
5
  import type { SliceMeta } from "./appliedReturn.type";
@@ -19,34 +20,20 @@ export type FetchSignalInput = FetchProxySignalInput | DatabaseSignal | ServiceS
19
20
 
20
21
  export type FetchTypeOfSignal<Signal extends FetchSignalInput> = Signal extends { _FetchType: infer FetchType }
21
22
  ? FetchType
22
- : Signal extends { endpoint: infer EndpCls extends EndpointCls; slice: infer SlceCls extends SliceCls }
23
+ : Signal extends DatabaseSignal<infer _IntlCls, infer EndpCls, infer SlceCls, infer _SrvrCls>
23
24
  ? GetFetchTypeFromEndpoint<EndpCls, SlceCls> & GetFetchTypeFromSlice<SlceCls>
24
- : Signal extends { endpoint: infer EndpCls extends EndpointCls }
25
+ : Signal extends ServiceSignal<infer _IntlCls, infer EndpCls, infer _SrvrCls>
25
26
  ? GetFetchTypeFromEndpoint<EndpCls>
26
27
  : unknown;
27
28
 
28
- type FetchKeysOfProxySignal<Signal> = Signal extends { _FetchType: infer FetchType } ? keyof FetchType : never;
29
- type FetchKeysOfProxySignals<Signals extends readonly FetchSignalInput[]> = FetchKeysOfProxySignal<Signals[number]>;
30
-
31
- type LastProxyFetchValue<
29
+ type MergeProxyFetchTypes<
32
30
  Signals extends readonly FetchSignalInput[],
33
- Key extends PropertyKey,
34
- Current = never,
31
+ Acc = Record<never, never>,
35
32
  > = Signals extends readonly [infer First extends FetchSignalInput, ...infer Rest extends readonly FetchSignalInput[]]
36
33
  ? First extends { _FetchType: infer FetchType }
37
- ? Key extends keyof FetchType
38
- ? LastProxyFetchValue<Rest, Key, FetchType[Key]>
39
- : LastProxyFetchValue<Rest, Key, Current>
40
- : LastProxyFetchValue<Rest, Key, Current>
41
- : Current;
42
-
43
- type MergeProxyFetchTypes<Signals extends readonly FetchSignalInput[]> = [FetchKeysOfProxySignals<Signals>] extends [
44
- never,
45
- ]
46
- ? Record<never, never>
47
- : {
48
- [Key in FetchKeysOfProxySignals<Signals>]: LastProxyFetchValue<Signals, Key>;
49
- };
34
+ ? MergeProxyFetchTypes<Rest, Assign<Acc, FetchType>>
35
+ : MergeProxyFetchTypes<Rest, Acc>
36
+ : Acc;
50
37
 
51
38
  type MergeDirectFetchTypes<
52
39
  Signals extends readonly FetchSignalInput[],
@@ -54,13 +41,13 @@ type MergeDirectFetchTypes<
54
41
  > = Signals extends readonly [infer First extends FetchSignalInput, ...infer Rest extends readonly FetchSignalInput[]]
55
42
  ? First extends { _FetchType: unknown }
56
43
  ? MergeDirectFetchTypes<Rest, Acc>
57
- : MergeDirectFetchTypes<Rest, Acc & FetchTypeOfSignal<First>>
44
+ : MergeDirectFetchTypes<Rest, Assign<Acc, FetchTypeOfSignal<First>>>
58
45
  : Acc;
59
46
 
60
47
  export type MergeAllFetchTypes<Signals extends readonly FetchSignalInput[]> =
61
48
  MergeProxyFetchTypes<Signals> extends infer ProxyFetch
62
49
  ? MergeDirectFetchTypes<Signals> extends infer DirectFetch
63
- ? Omit<ProxyFetch, keyof DirectFetch> & DirectFetch
50
+ ? Assign<ProxyFetch, DirectFetch>
64
51
  : never
65
52
  : never;
66
53
 
@@ -10,81 +10,95 @@ import type {
10
10
  SliceCls,
11
11
  } from "akanjs/signal";
12
12
 
13
- type ExtendedEndpointReturn<ClientReturns, Full, Light, Insight> = ClientReturns extends (infer R)[]
14
- ? ExtendedEndpointReturn<R, Full, Light, Insight>[]
15
- : Full extends ClientReturns
16
- ? Full
17
- : Light extends ClientReturns
18
- ? Light
19
- : Insight extends ClientReturns
20
- ? Insight
21
- : ClientReturns;
13
+ export type EndpointReturnContext<Full = unknown, Light = unknown, Insight = unknown> = {
14
+ full: Full;
15
+ light: Light;
16
+ insight: Insight;
17
+ };
18
+
19
+ type EndpointReturnContextOf<SlceCls extends SliceCls | never> = [SlceCls] extends [never]
20
+ ? never
21
+ : SlceCls extends SliceCls
22
+ ? EndpointReturnContext<
23
+ SlceCls["srv"]["cnst"]["_Full"],
24
+ SlceCls["srv"]["cnst"]["_Light"],
25
+ SlceCls["srv"]["cnst"]["_Insight"]
26
+ >
27
+ : never;
28
+
29
+ type ExtendedEndpointReturn<ClientReturns, Context> = ClientReturns extends (infer R)[]
30
+ ? ExtendedEndpointReturn<R, Context>[]
31
+ : Context extends EndpointReturnContext<infer Full, infer Light, infer Insight>
32
+ ? Full extends ClientReturns
33
+ ? Full
34
+ : Light extends ClientReturns
35
+ ? Light
36
+ : Insight extends ClientReturns
37
+ ? Insight
38
+ : ClientReturns
39
+ : ClientReturns;
22
40
 
23
- type EndpointClientReturns<E, SlceCls extends SliceCls | never> = [SlceCls] extends [never]
41
+ type EndpointClientReturns<E, Context> = [Context] extends [never]
24
42
  ? EndpInfoClientReturns<E>
25
- : ExtendedEndpointReturn<
26
- EndpInfoClientReturns<E>,
27
- SlceCls["srv"]["cnst"]["_Full"],
28
- SlceCls["srv"]["cnst"]["_Light"],
29
- SlceCls["srv"]["cnst"]["_Insight"]
30
- >;
43
+ : ExtendedEndpointReturn<EndpInfoClientReturns<E>, Context>;
31
44
 
32
- type EndpInfoReturns<E, SlceCls extends SliceCls | never> =
33
- | EndpointClientReturns<E, SlceCls>
45
+ type EndpInfoReturns<E, Context> =
46
+ | EndpointClientReturns<E, Context>
34
47
  | (EndpInfoNullable<E> extends true ? null : never);
35
48
 
36
- type QueryOrMutationFetchFn<E, SlceCls extends SliceCls | never> = (
49
+ type QueryOrMutationFetchFn<E, Context> = (
37
50
  ...args: [...EndpInfoArgs<E>, fetchPolicy?: FetchPolicy]
38
- ) => Promise<EndpInfoReturns<E, SlceCls>>;
51
+ ) => Promise<EndpInfoReturns<E, Context>>;
39
52
 
40
- type MessageEmitFn<E, SlceCls extends SliceCls | never> = (...args: EndpInfoArgs<E>) => EndpInfoReturns<E, SlceCls>;
53
+ type MessageEmitFn<E, Context> = (...args: EndpInfoArgs<E>) => EndpInfoReturns<E, Context>;
41
54
 
42
- type MessageListenFn<E, SlceCls extends SliceCls | never> = (
43
- handleEvent: (data: EndpInfoReturns<E, SlceCls>) => PromiseOrObject<void>,
55
+ type MessageListenFn<E, Context> = (
56
+ handleEvent: (data: EndpInfoReturns<E, Context>) => PromiseOrObject<void>,
44
57
  options?: FetchPolicy,
45
58
  ) => () => void;
46
59
 
47
- type PubsubSubscribeFn<E, SlceCls extends SliceCls | never> = (
60
+ type PubsubSubscribeFn<E, Context> = (
48
61
  ...args: [
49
62
  ...EndpInfoArgs<E>,
50
- handleEvent: (data: EndpInfoReturns<E, SlceCls>) => PromiseOrObject<void>,
63
+ handleEvent: (data: EndpInfoReturns<E, Context>) => PromiseOrObject<void>,
51
64
  options?: FetchPolicy,
52
65
  ]
53
66
  ) => () => void;
54
67
 
55
- type PrimaryFetchFn<E, SlceCls extends SliceCls | never> =
68
+ type PrimaryFetchFn<E, Context> =
56
69
  EndpInfoReqType<E> extends "query" | "mutation"
57
- ? QueryOrMutationFetchFn<E, SlceCls>
70
+ ? QueryOrMutationFetchFn<E, Context>
58
71
  : EndpInfoReqType<E> extends "message"
59
- ? MessageEmitFn<E, SlceCls>
72
+ ? MessageEmitFn<E, Context>
60
73
  : never;
61
74
 
62
- type PrimaryFetchType<EInfoObj extends { [key: string]: EndpointInfo }, SlceCls extends SliceCls | never> = {
75
+ type PrimaryFetchType<EInfoObj extends { [key: string]: EndpointInfo }, Context> = {
63
76
  [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "query" | "mutation" | "message"
64
77
  ? K
65
- : never]: PrimaryFetchFn<EInfoObj[K], SlceCls>;
78
+ : never]: PrimaryFetchFn<EInfoObj[K], Context>;
66
79
  };
67
80
 
68
- type PubsubFetchType<EInfoObj extends { [key: string]: EndpointInfo }, SlceCls extends SliceCls | never> = {
81
+ type PubsubFetchType<EInfoObj extends { [key: string]: EndpointInfo }, Context> = {
69
82
  [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "pubsub"
70
83
  ? K extends string
71
84
  ? `subscribe${Capitalize<K>}`
72
85
  : never
73
- : never]: PubsubSubscribeFn<EInfoObj[K], SlceCls>;
86
+ : never]: PubsubSubscribeFn<EInfoObj[K], Context>;
74
87
  };
75
88
 
76
- type MessageListenFetchType<EInfoObj extends { [key: string]: EndpointInfo }, SlceCls extends SliceCls | never> = {
89
+ type MessageListenFetchType<EInfoObj extends { [key: string]: EndpointInfo }, Context> = {
77
90
  [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "message"
78
91
  ? K extends string
79
92
  ? `listen${Capitalize<K>}`
80
93
  : never
81
- : never]: MessageListenFn<EInfoObj[K], SlceCls>;
94
+ : never]: MessageListenFn<EInfoObj[K], Context>;
82
95
  };
83
96
 
84
97
  export type GetFetchTypeFromEndpoint<
85
98
  EndpCls extends EndpointCls,
86
99
  SlceCls extends SliceCls | never = never,
87
100
  _EndpointInfoObj extends { [key: string]: EndpointInfo } = EndpCls[typeof ENDPOINT_META],
88
- > = PrimaryFetchType<_EndpointInfoObj, SlceCls> &
89
- PubsubFetchType<_EndpointInfoObj, SlceCls> &
90
- MessageListenFetchType<_EndpointInfoObj, SlceCls>;
101
+ _ReturnContext = EndpointReturnContextOf<SlceCls>,
102
+ > = PrimaryFetchType<_EndpointInfoObj, _ReturnContext> &
103
+ PubsubFetchType<_EndpointInfoObj, _ReturnContext> &
104
+ MessageListenFetchType<_EndpointInfoObj, _ReturnContext>;
@@ -2,104 +2,164 @@ import type { GetStateObject, SLICE_META } from "akanjs/base";
2
2
  import type { FetchPolicy } from "akanjs/common";
3
3
  import type { ConstantModel, DefaultOf, ProtoFile, PurifiedModel } from "akanjs/constant";
4
4
  import type { DatabaseModel, ExtractSort, FilterInstance } from "akanjs/document";
5
- import type { SliceCls, SliceInfoArgs } from "akanjs/signal";
5
+ import type { SliceCls, SliceInfo, SliceInfoArgs } from "akanjs/signal";
6
6
  import type { ClientEdit, ClientInit, ClientView, EditReturn, InitReturn, ViewReturn } from "./appliedReturn.type";
7
7
 
8
- type _SliceMap<S extends SliceCls> = S[typeof SLICE_META];
9
- type _RefName<S extends SliceCls> = S["srv"]["cnst"]["refName"];
10
- type _Cap<S extends SliceCls> = S["srv"]["cnst"]["_CapitalizedRefName"];
11
- type _Input<S extends SliceCls> = S["srv"]["cnst"]["_Input"];
12
- type _Full<S extends SliceCls> = S["srv"]["cnst"]["_Full"];
13
- type _Light<S extends SliceCls> = S["srv"]["cnst"]["_Light"];
14
- type _Insight<S extends SliceCls> = S["srv"]["cnst"]["_Insight"];
15
- type _PurifiedInput<S extends SliceCls> = S["srv"]["cnst"]["_PurifiedInput"];
16
- type _DefaultInput<S extends SliceCls> = S["srv"]["cnst"]["_DefaultInput"];
17
- type _StateLight<S extends SliceCls> = S["srv"]["cnst"]["_StateLight"];
18
- type _StateInsight<S extends SliceCls> = S["srv"]["cnst"]["_StateInsight"];
19
- type _Filter<S extends SliceCls> = S["srv"]["db"]["_Filter"];
20
- type _Sort<S extends SliceCls> = S["srv"]["db"]["_Sort"];
21
- type _LightWithId<S extends SliceCls> = _Light<S> extends { id: string } ? _Light<S> : { id: string };
22
- type _SliceFetchInitOption<S extends SliceCls> = FetchInitOption<_Input<S>, _Filter<S>, _DefaultInput<S>, _Sort<S>>;
8
+ type SliceInfoMap = { [key: string]: SliceInfo };
9
+ type LightWithId<Light> = Light extends { id: string } ? Light : { id: string };
23
10
 
24
- type SliceListFetch<S extends SliceCls> = {
25
- [Suffix in keyof _SliceMap<S> as Suffix extends string ? `${_RefName<S>}List${Capitalize<Suffix>}` : never]: (
11
+ export type SliceFetchDescriptor<
12
+ SliceMap extends SliceInfoMap = SliceInfoMap,
13
+ RefName extends string = string,
14
+ CapRefName extends string = Capitalize<RefName>,
15
+ Input = unknown,
16
+ Full = unknown,
17
+ Light = unknown,
18
+ Insight = unknown,
19
+ PurifiedInput = PurifiedModel<Input>,
20
+ DefaultInput = DefaultOf<Input>,
21
+ StateLight = GetStateObject<LightWithId<Light>>,
22
+ StateInsight = GetStateObject<Insight>,
23
+ Filter extends FilterInstance = FilterInstance,
24
+ Sort = ExtractSort<Filter>,
25
+ > = {
26
+ sliceMap: SliceMap;
27
+ refName: RefName;
28
+ capRefName: CapRefName;
29
+ input: Input;
30
+ full: Full;
31
+ light: Light;
32
+ insight: Insight;
33
+ purifiedInput: PurifiedInput;
34
+ defaultInput: DefaultInput;
35
+ stateLight: StateLight;
36
+ stateInsight: StateInsight;
37
+ filter: Filter;
38
+ sort: Sort;
39
+ };
40
+
41
+ export type SliceFetchDescriptorOf<SlceCls extends SliceCls> = SlceCls["srv"]["cnst"] extends ConstantModel
42
+ ? SlceCls["srv"]["db"] extends DatabaseModel
43
+ ? SliceFetchDescriptor<
44
+ SlceCls[typeof SLICE_META],
45
+ SlceCls["srv"]["cnst"]["refName"],
46
+ SlceCls["srv"]["cnst"]["_CapitalizedRefName"],
47
+ SlceCls["srv"]["cnst"]["_Input"],
48
+ SlceCls["srv"]["cnst"]["_Full"],
49
+ SlceCls["srv"]["cnst"]["_Light"],
50
+ SlceCls["srv"]["cnst"]["_Insight"],
51
+ SlceCls["srv"]["cnst"]["_PurifiedInput"],
52
+ SlceCls["srv"]["cnst"]["_DefaultInput"],
53
+ GetStateObject<LightWithId<SlceCls["srv"]["cnst"]["_Light"]>>,
54
+ GetStateObject<SlceCls["srv"]["cnst"]["_Insight"]>,
55
+ SlceCls["srv"]["db"]["_Filter"],
56
+ SlceCls["srv"]["db"]["_Sort"]
57
+ >
58
+ : never
59
+ : never;
60
+
61
+ type _SliceMap<D extends SliceFetchDescriptor> = D["sliceMap"];
62
+ type _RefName<D extends SliceFetchDescriptor> = D["refName"];
63
+ type _Cap<D extends SliceFetchDescriptor> = D["capRefName"];
64
+ type _Input<D extends SliceFetchDescriptor> = D["input"];
65
+ type _Full<D extends SliceFetchDescriptor> = D["full"];
66
+ type _Light<D extends SliceFetchDescriptor> = D["light"];
67
+ type _Insight<D extends SliceFetchDescriptor> = D["insight"];
68
+ type _PurifiedInput<D extends SliceFetchDescriptor> = D["purifiedInput"];
69
+ type _DefaultInput<D extends SliceFetchDescriptor> = D["defaultInput"];
70
+ type _StateLight<D extends SliceFetchDescriptor> = D["stateLight"];
71
+ type _StateInsight<D extends SliceFetchDescriptor> = D["stateInsight"];
72
+ type _Filter<D extends SliceFetchDescriptor> = D["filter"];
73
+ type _Sort<D extends SliceFetchDescriptor> = D["sort"];
74
+ type _LightWithId<D extends SliceFetchDescriptor> = LightWithId<_Light<D>>;
75
+ type _SliceFetchInitOption<D extends SliceFetchDescriptor> = FetchInitOption<
76
+ _Input<D>,
77
+ _Filter<D>,
78
+ _DefaultInput<D>,
79
+ _Sort<D>
80
+ >;
81
+
82
+ type SliceListFetch<D extends SliceFetchDescriptor> = {
83
+ [Suffix in keyof _SliceMap<D> as Suffix extends string ? `${_RefName<D>}List${Capitalize<Suffix>}` : never]: (
26
84
  ...args: [
27
- ...SliceInfoArgs<_SliceMap<S>[Suffix]>,
85
+ ...SliceInfoArgs<_SliceMap<D>[Suffix]>,
28
86
  skip?: number | null,
29
87
  limit?: number | null,
30
- sort?: _Sort<S> | null,
88
+ sort?: _Sort<D> | null,
31
89
  fetchPolicy?: FetchPolicy,
32
90
  ]
33
- ) => Promise<_Light<S>[]>;
91
+ ) => Promise<_Light<D>[]>;
34
92
  };
35
93
 
36
- type SliceInsightFetch<S extends SliceCls> = {
37
- [Suffix in keyof _SliceMap<S> as Suffix extends string ? `${_RefName<S>}Insight${Capitalize<Suffix>}` : never]: (
38
- ...args: [...SliceInfoArgs<_SliceMap<S>[Suffix]>, fetchPolicy?: FetchPolicy]
39
- ) => Promise<_Insight<S>>;
94
+ type SliceInsightFetch<D extends SliceFetchDescriptor> = {
95
+ [Suffix in keyof _SliceMap<D> as Suffix extends string ? `${_RefName<D>}Insight${Capitalize<Suffix>}` : never]: (
96
+ ...args: [...SliceInfoArgs<_SliceMap<D>[Suffix]>, fetchPolicy?: FetchPolicy]
97
+ ) => Promise<_Insight<D>>;
40
98
  };
41
99
 
42
- type SliceInitFetch<S extends SliceCls> = {
43
- [Suffix in keyof _SliceMap<S> as Suffix extends string ? `init${_Cap<S>}${Capitalize<Suffix>}` : never]: (
44
- ...args: [...SliceInfoArgs<_SliceMap<S>[Suffix]>, option?: _SliceFetchInitOption<S>]
100
+ type SliceInitFetch<D extends SliceFetchDescriptor> = {
101
+ [Suffix in keyof _SliceMap<D> as Suffix extends string ? `init${_Cap<D>}${Capitalize<Suffix>}` : never]: (
102
+ ...args: [...SliceInfoArgs<_SliceMap<D>[Suffix]>, option?: _SliceFetchInitOption<D>]
45
103
  ) => Promise<
46
104
  InitReturn<
47
- _RefName<S>,
105
+ _RefName<D>,
48
106
  Suffix & string,
49
- _Light<S>,
50
- _Insight<S>,
51
- SliceInfoArgs<_SliceMap<S>[Suffix]>,
52
- _Filter<S>,
53
- _Cap<S>,
107
+ _Light<D>,
108
+ _Insight<D>,
109
+ SliceInfoArgs<_SliceMap<D>[Suffix]>,
110
+ _Filter<D>,
111
+ _Cap<D>,
54
112
  Suffix extends string ? Capitalize<Suffix> : never,
55
- _LightWithId<S>,
56
- GetStateObject<_LightWithId<S>>,
57
- GetStateObject<_Insight<S>>,
58
- _Sort<S>
113
+ _LightWithId<D>,
114
+ _StateLight<D>,
115
+ _StateInsight<D>,
116
+ _Sort<D>
59
117
  >
60
118
  >;
61
119
  };
62
120
 
63
- type SliceGetInitFetch<S extends SliceCls> = {
64
- [Suffix in keyof _SliceMap<S> as Suffix extends string ? `get${_Cap<S>}Init${Capitalize<Suffix>}` : never]: (
65
- ...args: [...SliceInfoArgs<_SliceMap<S>[Suffix]>, option?: _SliceFetchInitOption<S>]
121
+ type SliceGetInitFetch<D extends SliceFetchDescriptor> = {
122
+ [Suffix in keyof _SliceMap<D> as Suffix extends string ? `get${_Cap<D>}Init${Capitalize<Suffix>}` : never]: (
123
+ ...args: [...SliceInfoArgs<_SliceMap<D>[Suffix]>, option?: _SliceFetchInitOption<D>]
66
124
  ) => ClientInit<
67
- _RefName<S>,
68
- _Light<S>,
69
- _Insight<S>,
70
- SliceInfoArgs<_SliceMap<S>[Suffix]>,
71
- _Filter<S>,
72
- _Cap<S>,
73
- GetStateObject<_LightWithId<S>>,
74
- GetStateObject<_Insight<S>>,
75
- _Sort<S>
125
+ _RefName<D>,
126
+ _Light<D>,
127
+ _Insight<D>,
128
+ SliceInfoArgs<_SliceMap<D>[Suffix]>,
129
+ _Filter<D>,
130
+ _Cap<D>,
131
+ _StateLight<D>,
132
+ _StateInsight<D>,
133
+ _Sort<D>
76
134
  >;
77
135
  };
78
136
 
79
- export type GetFetchTypeFromSlice<SlceCls extends SliceCls> = SlceCls["srv"]["cnst"] extends ConstantModel
80
- ? SlceCls["srv"]["db"] extends DatabaseModel
81
- ? SliceListFetch<SlceCls> &
82
- SliceInsightFetch<SlceCls> &
83
- SliceInitFetch<SlceCls> &
84
- SliceGetInitFetch<SlceCls> &
85
- RawBaseSliceFetchType<
86
- _RefName<SlceCls>,
87
- _Input<SlceCls>,
88
- _Full<SlceCls>,
89
- _Light<SlceCls>,
90
- _Cap<SlceCls>,
91
- _PurifiedInput<SlceCls>
92
- > &
93
- AppliedBaseSliceFetchType<
94
- _RefName<SlceCls>,
95
- _Input<SlceCls>,
96
- _Full<SlceCls>,
97
- _Cap<SlceCls>,
98
- _PurifiedInput<SlceCls>
99
- >
100
- : never
137
+ export type GetFetchTypeFromSliceDescriptor<Descriptor> = [Descriptor] extends [SliceFetchDescriptor]
138
+ ? SliceListFetch<Descriptor> &
139
+ SliceInsightFetch<Descriptor> &
140
+ SliceInitFetch<Descriptor> &
141
+ SliceGetInitFetch<Descriptor> &
142
+ RawBaseSliceFetchType<
143
+ _RefName<Descriptor>,
144
+ _Input<Descriptor>,
145
+ _Full<Descriptor>,
146
+ _Light<Descriptor>,
147
+ _Cap<Descriptor>,
148
+ _PurifiedInput<Descriptor>
149
+ > &
150
+ AppliedBaseSliceFetchType<
151
+ _RefName<Descriptor>,
152
+ _Input<Descriptor>,
153
+ _Full<Descriptor>,
154
+ _Cap<Descriptor>,
155
+ _PurifiedInput<Descriptor>
156
+ >
101
157
  : never;
102
158
 
159
+ export type GetFetchTypeFromSlice<SlceCls extends SliceCls> = GetFetchTypeFromSliceDescriptor<
160
+ SliceFetchDescriptorOf<SlceCls>
161
+ >;
162
+
103
163
  type RawBaseSliceFetchType<
104
164
  RefName extends string,
105
165
  Input,
package/fetch/types.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type Environment, getEnv, type SLICE_META } from "akanjs/base";
1
+ import { type Assign, type Environment, getEnv, type SLICE_META } from "akanjs/base";
2
2
  import type { DatabaseSignal } from "akanjs/signal";
3
3
  import type { SliceMeta } from "./fetchType/appliedReturn.type";
4
4
 
@@ -16,14 +16,14 @@ type GetSliceMetaObjFromSignal<Signal> = Signal extends {
16
16
  _SliceMetaObj: infer SliceMetaObj extends Record<string, SliceMeta>;
17
17
  }
18
18
  ? SliceMetaObj
19
- : Signal extends DatabaseSignal
19
+ : Signal extends DatabaseSignal<infer _IntlCls, infer _EndpCls, infer SlceCls, infer _SrvrCls>
20
20
  ? {
21
- [K in `${Signal["slice"]["baseName"]}${Capitalize<keyof Signal["slice"][typeof SLICE_META] & string>}`]: SliceMeta;
21
+ [K in `${SlceCls["baseName"]}${Capitalize<keyof SlceCls[typeof SLICE_META] & string>}`]: SliceMeta;
22
22
  }
23
23
  : Record<never, never>;
24
24
  export type GetSliceMetaObjFromDatabaseSignals<
25
25
  Signals extends readonly unknown[],
26
26
  Acc extends Record<string, SliceMeta> = Record<never, never>,
27
27
  > = Signals extends readonly [infer First, ...infer Rest]
28
- ? GetSliceMetaObjFromDatabaseSignals<Rest, Acc & GetSliceMetaObjFromSignal<First>>
28
+ ? GetSliceMetaObjFromDatabaseSignals<Rest, Assign<Acc, GetSliceMetaObjFromSignal<First>>>
29
29
  : Acc;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akanjs",
3
- "version": "2.3.4",
3
+ "version": "2.3.5-rc.1",
4
4
  "sourceType": "module",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -1,4 +1,5 @@
1
- import type { DatabaseSignal, EndpointCls, SerializedSignal, ServiceSignal, SliceCls } from "akanjs/signal";
1
+ import type { Assign } from "akanjs/base";
2
+ import type { DatabaseSignal, SerializedSignal, ServiceSignal } from "akanjs/signal";
2
3
  import type { FetchProxy } from "../client.d.ts";
3
4
  import type { GetSliceMetaObjFromDatabaseSignals } from "../types.d.ts";
4
5
  import type { SliceMeta } from "./appliedReturn.type";
@@ -13,27 +14,13 @@ export type FetchProxySignalInput<FetchType = unknown, SliceMetaObj extends Reco
13
14
  export type FetchSignalInput = FetchProxySignalInput | DatabaseSignal | ServiceSignal;
14
15
  export type FetchTypeOfSignal<Signal extends FetchSignalInput> = Signal extends {
15
16
  _FetchType: infer FetchType;
16
- } ? FetchType : Signal extends {
17
- endpoint: infer EndpCls extends EndpointCls;
18
- slice: infer SlceCls extends SliceCls;
19
- } ? GetFetchTypeFromEndpoint<EndpCls, SlceCls> & GetFetchTypeFromSlice<SlceCls> : Signal extends {
20
- endpoint: infer EndpCls extends EndpointCls;
21
- } ? GetFetchTypeFromEndpoint<EndpCls> : unknown;
22
- type FetchKeysOfProxySignal<Signal> = Signal extends {
17
+ } ? FetchType : Signal extends DatabaseSignal<infer _IntlCls, infer EndpCls, infer SlceCls, infer _SrvrCls> ? GetFetchTypeFromEndpoint<EndpCls, SlceCls> & GetFetchTypeFromSlice<SlceCls> : Signal extends ServiceSignal<infer _IntlCls, infer EndpCls, infer _SrvrCls> ? GetFetchTypeFromEndpoint<EndpCls> : unknown;
18
+ type MergeProxyFetchTypes<Signals extends readonly FetchSignalInput[], Acc = Record<never, never>> = Signals extends readonly [infer First extends FetchSignalInput, ...infer Rest extends readonly FetchSignalInput[]] ? First extends {
23
19
  _FetchType: infer FetchType;
24
- } ? keyof FetchType : never;
25
- type FetchKeysOfProxySignals<Signals extends readonly FetchSignalInput[]> = FetchKeysOfProxySignal<Signals[number]>;
26
- type LastProxyFetchValue<Signals extends readonly FetchSignalInput[], Key extends PropertyKey, Current = never> = Signals extends readonly [infer First extends FetchSignalInput, ...infer Rest extends readonly FetchSignalInput[]] ? First extends {
27
- _FetchType: infer FetchType;
28
- } ? Key extends keyof FetchType ? LastProxyFetchValue<Rest, Key, FetchType[Key]> : LastProxyFetchValue<Rest, Key, Current> : LastProxyFetchValue<Rest, Key, Current> : Current;
29
- type MergeProxyFetchTypes<Signals extends readonly FetchSignalInput[]> = [FetchKeysOfProxySignals<Signals>] extends [
30
- never
31
- ] ? Record<never, never> : {
32
- [Key in FetchKeysOfProxySignals<Signals>]: LastProxyFetchValue<Signals, Key>;
33
- };
20
+ } ? MergeProxyFetchTypes<Rest, Assign<Acc, FetchType>> : MergeProxyFetchTypes<Rest, Acc> : Acc;
34
21
  type MergeDirectFetchTypes<Signals extends readonly FetchSignalInput[], Acc = Record<never, never>> = Signals extends readonly [infer First extends FetchSignalInput, ...infer Rest extends readonly FetchSignalInput[]] ? First extends {
35
22
  _FetchType: unknown;
36
- } ? MergeDirectFetchTypes<Rest, Acc> : MergeDirectFetchTypes<Rest, Acc & FetchTypeOfSignal<First>> : Acc;
37
- export type MergeAllFetchTypes<Signals extends readonly FetchSignalInput[]> = MergeProxyFetchTypes<Signals> extends infer ProxyFetch ? MergeDirectFetchTypes<Signals> extends infer DirectFetch ? Omit<ProxyFetch, keyof DirectFetch> & DirectFetch : never : never;
23
+ } ? MergeDirectFetchTypes<Rest, Acc> : MergeDirectFetchTypes<Rest, Assign<Acc, FetchTypeOfSignal<First>>> : Acc;
24
+ export type MergeAllFetchTypes<Signals extends readonly FetchSignalInput[]> = MergeProxyFetchTypes<Signals> extends infer ProxyFetch ? MergeDirectFetchTypes<Signals> extends infer DirectFetch ? Assign<ProxyFetch, DirectFetch> : never : never;
38
25
  export type FetchClientType<Signals extends readonly FetchSignalInput[]> = FetchProxy<MergeAllFetchTypes<Signals>, GetSliceMetaObjFromDatabaseSignals<Signals>>;
39
26
  export {};
@@ -1,34 +1,40 @@
1
1
  import type { ENDPOINT_META, PromiseOrObject } from "akanjs/base";
2
2
  import type { FetchPolicy } from "akanjs/common";
3
3
  import type { EndpInfoArgs, EndpInfoClientReturns, EndpInfoNullable, EndpInfoReqType, EndpointCls, EndpointInfo, SliceCls } from "akanjs/signal";
4
- type ExtendedEndpointReturn<ClientReturns, Full, Light, Insight> = ClientReturns extends (infer R)[] ? ExtendedEndpointReturn<R, Full, Light, Insight>[] : Full extends ClientReturns ? Full : Light extends ClientReturns ? Light : Insight extends ClientReturns ? Insight : ClientReturns;
5
- type EndpointClientReturns<E, SlceCls extends SliceCls | never> = [SlceCls] extends [never] ? EndpInfoClientReturns<E> : ExtendedEndpointReturn<EndpInfoClientReturns<E>, SlceCls["srv"]["cnst"]["_Full"], SlceCls["srv"]["cnst"]["_Light"], SlceCls["srv"]["cnst"]["_Insight"]>;
6
- type EndpInfoReturns<E, SlceCls extends SliceCls | never> = EndpointClientReturns<E, SlceCls> | (EndpInfoNullable<E> extends true ? null : never);
7
- type QueryOrMutationFetchFn<E, SlceCls extends SliceCls | never> = (...args: [...EndpInfoArgs<E>, fetchPolicy?: FetchPolicy]) => Promise<EndpInfoReturns<E, SlceCls>>;
8
- type MessageEmitFn<E, SlceCls extends SliceCls | never> = (...args: EndpInfoArgs<E>) => EndpInfoReturns<E, SlceCls>;
9
- type MessageListenFn<E, SlceCls extends SliceCls | never> = (handleEvent: (data: EndpInfoReturns<E, SlceCls>) => PromiseOrObject<void>, options?: FetchPolicy) => () => void;
10
- type PubsubSubscribeFn<E, SlceCls extends SliceCls | never> = (...args: [
4
+ export type EndpointReturnContext<Full = unknown, Light = unknown, Insight = unknown> = {
5
+ full: Full;
6
+ light: Light;
7
+ insight: Insight;
8
+ };
9
+ type EndpointReturnContextOf<SlceCls extends SliceCls | never> = [SlceCls] extends [never] ? never : SlceCls extends SliceCls ? EndpointReturnContext<SlceCls["srv"]["cnst"]["_Full"], SlceCls["srv"]["cnst"]["_Light"], SlceCls["srv"]["cnst"]["_Insight"]> : never;
10
+ type ExtendedEndpointReturn<ClientReturns, Context> = ClientReturns extends (infer R)[] ? ExtendedEndpointReturn<R, Context>[] : Context extends EndpointReturnContext<infer Full, infer Light, infer Insight> ? Full extends ClientReturns ? Full : Light extends ClientReturns ? Light : Insight extends ClientReturns ? Insight : ClientReturns : ClientReturns;
11
+ type EndpointClientReturns<E, Context> = [Context] extends [never] ? EndpInfoClientReturns<E> : ExtendedEndpointReturn<EndpInfoClientReturns<E>, Context>;
12
+ type EndpInfoReturns<E, Context> = EndpointClientReturns<E, Context> | (EndpInfoNullable<E> extends true ? null : never);
13
+ type QueryOrMutationFetchFn<E, Context> = (...args: [...EndpInfoArgs<E>, fetchPolicy?: FetchPolicy]) => Promise<EndpInfoReturns<E, Context>>;
14
+ type MessageEmitFn<E, Context> = (...args: EndpInfoArgs<E>) => EndpInfoReturns<E, Context>;
15
+ type MessageListenFn<E, Context> = (handleEvent: (data: EndpInfoReturns<E, Context>) => PromiseOrObject<void>, options?: FetchPolicy) => () => void;
16
+ type PubsubSubscribeFn<E, Context> = (...args: [
11
17
  ...EndpInfoArgs<E>,
12
- handleEvent: (data: EndpInfoReturns<E, SlceCls>) => PromiseOrObject<void>,
18
+ handleEvent: (data: EndpInfoReturns<E, Context>) => PromiseOrObject<void>,
13
19
  options?: FetchPolicy
14
20
  ]) => () => void;
15
- type PrimaryFetchFn<E, SlceCls extends SliceCls | never> = EndpInfoReqType<E> extends "query" | "mutation" ? QueryOrMutationFetchFn<E, SlceCls> : EndpInfoReqType<E> extends "message" ? MessageEmitFn<E, SlceCls> : never;
21
+ type PrimaryFetchFn<E, Context> = EndpInfoReqType<E> extends "query" | "mutation" ? QueryOrMutationFetchFn<E, Context> : EndpInfoReqType<E> extends "message" ? MessageEmitFn<E, Context> : never;
16
22
  type PrimaryFetchType<EInfoObj extends {
17
23
  [key: string]: EndpointInfo;
18
- }, SlceCls extends SliceCls | never> = {
19
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "query" | "mutation" | "message" ? K : never]: PrimaryFetchFn<EInfoObj[K], SlceCls>;
24
+ }, Context> = {
25
+ [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "query" | "mutation" | "message" ? K : never]: PrimaryFetchFn<EInfoObj[K], Context>;
20
26
  };
21
27
  type PubsubFetchType<EInfoObj extends {
22
28
  [key: string]: EndpointInfo;
23
- }, SlceCls extends SliceCls | never> = {
24
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "pubsub" ? K extends string ? `subscribe${Capitalize<K>}` : never : never]: PubsubSubscribeFn<EInfoObj[K], SlceCls>;
29
+ }, Context> = {
30
+ [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "pubsub" ? K extends string ? `subscribe${Capitalize<K>}` : never : never]: PubsubSubscribeFn<EInfoObj[K], Context>;
25
31
  };
26
32
  type MessageListenFetchType<EInfoObj extends {
27
33
  [key: string]: EndpointInfo;
28
- }, SlceCls extends SliceCls | never> = {
29
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "message" ? K extends string ? `listen${Capitalize<K>}` : never : never]: MessageListenFn<EInfoObj[K], SlceCls>;
34
+ }, Context> = {
35
+ [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "message" ? K extends string ? `listen${Capitalize<K>}` : never : never]: MessageListenFn<EInfoObj[K], Context>;
30
36
  };
31
37
  export type GetFetchTypeFromEndpoint<EndpCls extends EndpointCls, SlceCls extends SliceCls | never = never, _EndpointInfoObj extends {
32
38
  [key: string]: EndpointInfo;
33
- } = EndpCls[typeof ENDPOINT_META]> = PrimaryFetchType<_EndpointInfoObj, SlceCls> & PubsubFetchType<_EndpointInfoObj, SlceCls> & MessageListenFetchType<_EndpointInfoObj, SlceCls>;
39
+ } = EndpCls[typeof ENDPOINT_META], _ReturnContext = EndpointReturnContextOf<SlceCls>> = PrimaryFetchType<_EndpointInfoObj, _ReturnContext> & PubsubFetchType<_EndpointInfoObj, _ReturnContext> & MessageListenFetchType<_EndpointInfoObj, _ReturnContext>;
34
40
  export {};
@@ -2,44 +2,67 @@ import type { GetStateObject, SLICE_META } from "akanjs/base";
2
2
  import type { FetchPolicy } from "akanjs/common";
3
3
  import type { ConstantModel, DefaultOf, ProtoFile, PurifiedModel } from "akanjs/constant";
4
4
  import type { DatabaseModel, ExtractSort, FilterInstance } from "akanjs/document";
5
- import type { SliceCls, SliceInfoArgs } from "akanjs/signal";
5
+ import type { SliceCls, SliceInfo, SliceInfoArgs } from "akanjs/signal";
6
6
  import type { ClientEdit, ClientInit, ClientView, EditReturn, InitReturn, ViewReturn } from "./appliedReturn.type";
7
- type _SliceMap<S extends SliceCls> = S[typeof SLICE_META];
8
- type _RefName<S extends SliceCls> = S["srv"]["cnst"]["refName"];
9
- type _Cap<S extends SliceCls> = S["srv"]["cnst"]["_CapitalizedRefName"];
10
- type _Input<S extends SliceCls> = S["srv"]["cnst"]["_Input"];
11
- type _Full<S extends SliceCls> = S["srv"]["cnst"]["_Full"];
12
- type _Light<S extends SliceCls> = S["srv"]["cnst"]["_Light"];
13
- type _Insight<S extends SliceCls> = S["srv"]["cnst"]["_Insight"];
14
- type _PurifiedInput<S extends SliceCls> = S["srv"]["cnst"]["_PurifiedInput"];
15
- type _DefaultInput<S extends SliceCls> = S["srv"]["cnst"]["_DefaultInput"];
16
- type _Filter<S extends SliceCls> = S["srv"]["db"]["_Filter"];
17
- type _Sort<S extends SliceCls> = S["srv"]["db"]["_Sort"];
18
- type _LightWithId<S extends SliceCls> = _Light<S> extends {
7
+ type SliceInfoMap = {
8
+ [key: string]: SliceInfo;
9
+ };
10
+ type LightWithId<Light> = Light extends {
19
11
  id: string;
20
- } ? _Light<S> : {
12
+ } ? Light : {
21
13
  id: string;
22
14
  };
23
- type _SliceFetchInitOption<S extends SliceCls> = FetchInitOption<_Input<S>, _Filter<S>, _DefaultInput<S>, _Sort<S>>;
24
- type SliceListFetch<S extends SliceCls> = {
25
- [Suffix in keyof _SliceMap<S> as Suffix extends string ? `${_RefName<S>}List${Capitalize<Suffix>}` : never]: (...args: [
26
- ...SliceInfoArgs<_SliceMap<S>[Suffix]>,
15
+ export type SliceFetchDescriptor<SliceMap extends SliceInfoMap = SliceInfoMap, RefName extends string = string, CapRefName extends string = Capitalize<RefName>, Input = unknown, Full = unknown, Light = unknown, Insight = unknown, PurifiedInput = PurifiedModel<Input>, DefaultInput = DefaultOf<Input>, StateLight = GetStateObject<LightWithId<Light>>, StateInsight = GetStateObject<Insight>, Filter extends FilterInstance = FilterInstance, Sort = ExtractSort<Filter>> = {
16
+ sliceMap: SliceMap;
17
+ refName: RefName;
18
+ capRefName: CapRefName;
19
+ input: Input;
20
+ full: Full;
21
+ light: Light;
22
+ insight: Insight;
23
+ purifiedInput: PurifiedInput;
24
+ defaultInput: DefaultInput;
25
+ stateLight: StateLight;
26
+ stateInsight: StateInsight;
27
+ filter: Filter;
28
+ sort: Sort;
29
+ };
30
+ export type SliceFetchDescriptorOf<SlceCls extends SliceCls> = SlceCls["srv"]["cnst"] extends ConstantModel ? SlceCls["srv"]["db"] extends DatabaseModel ? SliceFetchDescriptor<SlceCls[typeof SLICE_META], SlceCls["srv"]["cnst"]["refName"], SlceCls["srv"]["cnst"]["_CapitalizedRefName"], SlceCls["srv"]["cnst"]["_Input"], SlceCls["srv"]["cnst"]["_Full"], SlceCls["srv"]["cnst"]["_Light"], SlceCls["srv"]["cnst"]["_Insight"], SlceCls["srv"]["cnst"]["_PurifiedInput"], SlceCls["srv"]["cnst"]["_DefaultInput"], GetStateObject<LightWithId<SlceCls["srv"]["cnst"]["_Light"]>>, GetStateObject<SlceCls["srv"]["cnst"]["_Insight"]>, SlceCls["srv"]["db"]["_Filter"], SlceCls["srv"]["db"]["_Sort"]> : never : never;
31
+ type _SliceMap<D extends SliceFetchDescriptor> = D["sliceMap"];
32
+ type _RefName<D extends SliceFetchDescriptor> = D["refName"];
33
+ type _Cap<D extends SliceFetchDescriptor> = D["capRefName"];
34
+ type _Input<D extends SliceFetchDescriptor> = D["input"];
35
+ type _Full<D extends SliceFetchDescriptor> = D["full"];
36
+ type _Light<D extends SliceFetchDescriptor> = D["light"];
37
+ type _Insight<D extends SliceFetchDescriptor> = D["insight"];
38
+ type _PurifiedInput<D extends SliceFetchDescriptor> = D["purifiedInput"];
39
+ type _DefaultInput<D extends SliceFetchDescriptor> = D["defaultInput"];
40
+ type _StateLight<D extends SliceFetchDescriptor> = D["stateLight"];
41
+ type _StateInsight<D extends SliceFetchDescriptor> = D["stateInsight"];
42
+ type _Filter<D extends SliceFetchDescriptor> = D["filter"];
43
+ type _Sort<D extends SliceFetchDescriptor> = D["sort"];
44
+ type _LightWithId<D extends SliceFetchDescriptor> = LightWithId<_Light<D>>;
45
+ type _SliceFetchInitOption<D extends SliceFetchDescriptor> = FetchInitOption<_Input<D>, _Filter<D>, _DefaultInput<D>, _Sort<D>>;
46
+ type SliceListFetch<D extends SliceFetchDescriptor> = {
47
+ [Suffix in keyof _SliceMap<D> as Suffix extends string ? `${_RefName<D>}List${Capitalize<Suffix>}` : never]: (...args: [
48
+ ...SliceInfoArgs<_SliceMap<D>[Suffix]>,
27
49
  skip?: number | null,
28
50
  limit?: number | null,
29
- sort?: _Sort<S> | null,
51
+ sort?: _Sort<D> | null,
30
52
  fetchPolicy?: FetchPolicy
31
- ]) => Promise<_Light<S>[]>;
53
+ ]) => Promise<_Light<D>[]>;
32
54
  };
33
- type SliceInsightFetch<S extends SliceCls> = {
34
- [Suffix in keyof _SliceMap<S> as Suffix extends string ? `${_RefName<S>}Insight${Capitalize<Suffix>}` : never]: (...args: [...SliceInfoArgs<_SliceMap<S>[Suffix]>, fetchPolicy?: FetchPolicy]) => Promise<_Insight<S>>;
55
+ type SliceInsightFetch<D extends SliceFetchDescriptor> = {
56
+ [Suffix in keyof _SliceMap<D> as Suffix extends string ? `${_RefName<D>}Insight${Capitalize<Suffix>}` : never]: (...args: [...SliceInfoArgs<_SliceMap<D>[Suffix]>, fetchPolicy?: FetchPolicy]) => Promise<_Insight<D>>;
35
57
  };
36
- type SliceInitFetch<S extends SliceCls> = {
37
- [Suffix in keyof _SliceMap<S> as Suffix extends string ? `init${_Cap<S>}${Capitalize<Suffix>}` : never]: (...args: [...SliceInfoArgs<_SliceMap<S>[Suffix]>, option?: _SliceFetchInitOption<S>]) => Promise<InitReturn<_RefName<S>, Suffix & string, _Light<S>, _Insight<S>, SliceInfoArgs<_SliceMap<S>[Suffix]>, _Filter<S>, _Cap<S>, Suffix extends string ? Capitalize<Suffix> : never, _LightWithId<S>, GetStateObject<_LightWithId<S>>, GetStateObject<_Insight<S>>, _Sort<S>>>;
58
+ type SliceInitFetch<D extends SliceFetchDescriptor> = {
59
+ [Suffix in keyof _SliceMap<D> as Suffix extends string ? `init${_Cap<D>}${Capitalize<Suffix>}` : never]: (...args: [...SliceInfoArgs<_SliceMap<D>[Suffix]>, option?: _SliceFetchInitOption<D>]) => Promise<InitReturn<_RefName<D>, Suffix & string, _Light<D>, _Insight<D>, SliceInfoArgs<_SliceMap<D>[Suffix]>, _Filter<D>, _Cap<D>, Suffix extends string ? Capitalize<Suffix> : never, _LightWithId<D>, _StateLight<D>, _StateInsight<D>, _Sort<D>>>;
38
60
  };
39
- type SliceGetInitFetch<S extends SliceCls> = {
40
- [Suffix in keyof _SliceMap<S> as Suffix extends string ? `get${_Cap<S>}Init${Capitalize<Suffix>}` : never]: (...args: [...SliceInfoArgs<_SliceMap<S>[Suffix]>, option?: _SliceFetchInitOption<S>]) => ClientInit<_RefName<S>, _Light<S>, _Insight<S>, SliceInfoArgs<_SliceMap<S>[Suffix]>, _Filter<S>, _Cap<S>, GetStateObject<_LightWithId<S>>, GetStateObject<_Insight<S>>, _Sort<S>>;
61
+ type SliceGetInitFetch<D extends SliceFetchDescriptor> = {
62
+ [Suffix in keyof _SliceMap<D> as Suffix extends string ? `get${_Cap<D>}Init${Capitalize<Suffix>}` : never]: (...args: [...SliceInfoArgs<_SliceMap<D>[Suffix]>, option?: _SliceFetchInitOption<D>]) => ClientInit<_RefName<D>, _Light<D>, _Insight<D>, SliceInfoArgs<_SliceMap<D>[Suffix]>, _Filter<D>, _Cap<D>, _StateLight<D>, _StateInsight<D>, _Sort<D>>;
41
63
  };
42
- export type GetFetchTypeFromSlice<SlceCls extends SliceCls> = SlceCls["srv"]["cnst"] extends ConstantModel ? SlceCls["srv"]["db"] extends DatabaseModel ? SliceListFetch<SlceCls> & SliceInsightFetch<SlceCls> & SliceInitFetch<SlceCls> & SliceGetInitFetch<SlceCls> & RawBaseSliceFetchType<_RefName<SlceCls>, _Input<SlceCls>, _Full<SlceCls>, _Light<SlceCls>, _Cap<SlceCls>, _PurifiedInput<SlceCls>> & AppliedBaseSliceFetchType<_RefName<SlceCls>, _Input<SlceCls>, _Full<SlceCls>, _Cap<SlceCls>, _PurifiedInput<SlceCls>> : never : never;
64
+ export type GetFetchTypeFromSliceDescriptor<Descriptor> = [Descriptor] extends [SliceFetchDescriptor] ? SliceListFetch<Descriptor> & SliceInsightFetch<Descriptor> & SliceInitFetch<Descriptor> & SliceGetInitFetch<Descriptor> & RawBaseSliceFetchType<_RefName<Descriptor>, _Input<Descriptor>, _Full<Descriptor>, _Light<Descriptor>, _Cap<Descriptor>, _PurifiedInput<Descriptor>> & AppliedBaseSliceFetchType<_RefName<Descriptor>, _Input<Descriptor>, _Full<Descriptor>, _Cap<Descriptor>, _PurifiedInput<Descriptor>> : never;
65
+ export type GetFetchTypeFromSlice<SlceCls extends SliceCls> = GetFetchTypeFromSliceDescriptor<SliceFetchDescriptorOf<SlceCls>>;
43
66
  type RawBaseSliceFetchType<RefName extends string, Input, Full, Light, _CapitalizedRefName extends string = Capitalize<RefName>, _PurifiedInput = PurifiedModel<Input>> = {
44
67
  [K in RefName]: (id: string, fetchPolicy?: FetchPolicy) => Promise<Full>;
45
68
  } & {
@@ -1,4 +1,4 @@
1
- import { type Environment, type SLICE_META } from "akanjs/base";
1
+ import { type Assign, type Environment, type SLICE_META } from "akanjs/base";
2
2
  import type { DatabaseSignal } from "akanjs/signal";
3
3
  import type { SliceMeta } from "./fetchType/appliedReturn.type";
4
4
  /** Account data made available to services for the current app/environment. */
@@ -9,8 +9,8 @@ export type Account<AddData = unknown> = {
9
9
  export declare const getDefaultAccount: () => Account;
10
10
  type GetSliceMetaObjFromSignal<Signal> = Signal extends {
11
11
  _SliceMetaObj: infer SliceMetaObj extends Record<string, SliceMeta>;
12
- } ? SliceMetaObj : Signal extends DatabaseSignal ? {
13
- [K in `${Signal["slice"]["baseName"]}${Capitalize<keyof Signal["slice"][typeof SLICE_META] & string>}`]: SliceMeta;
12
+ } ? SliceMetaObj : Signal extends DatabaseSignal<infer _IntlCls, infer _EndpCls, infer SlceCls, infer _SrvrCls> ? {
13
+ [K in `${SlceCls["baseName"]}${Capitalize<keyof SlceCls[typeof SLICE_META] & string>}`]: SliceMeta;
14
14
  } : Record<never, never>;
15
- export type GetSliceMetaObjFromDatabaseSignals<Signals extends readonly unknown[], Acc extends Record<string, SliceMeta> = Record<never, never>> = Signals extends readonly [infer First, ...infer Rest] ? GetSliceMetaObjFromDatabaseSignals<Rest, Acc & GetSliceMetaObjFromSignal<First>> : Acc;
15
+ export type GetSliceMetaObjFromDatabaseSignals<Signals extends readonly unknown[], Acc extends Record<string, SliceMeta> = Record<never, never>> = Signals extends readonly [infer First, ...infer Rest] ? GetSliceMetaObjFromDatabaseSignals<Rest, Assign<Acc, GetSliceMetaObjFromSignal<First>>> : Acc;
16
16
  export {};