akanjs 2.3.5-rc.1 → 2.3.5-rc.2

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.
@@ -18,10 +18,16 @@ export type FetchProxySignalInput<
18
18
 
19
19
  export type FetchSignalInput = FetchProxySignalInput | DatabaseSignal | ServiceSignal;
20
20
 
21
+ type MergeFetchParts<First, Second> = [First] extends [never]
22
+ ? Second
23
+ : [Second] extends [never]
24
+ ? First
25
+ : Assign<First, Second>;
26
+
21
27
  export type FetchTypeOfSignal<Signal extends FetchSignalInput> = Signal extends { _FetchType: infer FetchType }
22
28
  ? FetchType
23
29
  : Signal extends DatabaseSignal<infer _IntlCls, infer EndpCls, infer SlceCls, infer _SrvrCls>
24
- ? GetFetchTypeFromEndpoint<EndpCls, SlceCls> & GetFetchTypeFromSlice<SlceCls>
30
+ ? MergeFetchParts<GetFetchTypeFromEndpoint<EndpCls, SlceCls>, GetFetchTypeFromSlice<SlceCls>>
25
31
  : Signal extends ServiceSignal<infer _IntlCls, infer EndpCls, infer _SrvrCls>
26
32
  ? GetFetchTypeFromEndpoint<EndpCls>
27
33
  : unknown;
@@ -41,7 +47,7 @@ type MergeDirectFetchTypes<
41
47
  > = Signals extends readonly [infer First extends FetchSignalInput, ...infer Rest extends readonly FetchSignalInput[]]
42
48
  ? First extends { _FetchType: unknown }
43
49
  ? MergeDirectFetchTypes<Rest, Acc>
44
- : MergeDirectFetchTypes<Rest, Assign<Acc, FetchTypeOfSignal<First>>>
50
+ : MergeDirectFetchTypes<Rest, MergeFetchParts<Acc, FetchTypeOfSignal<First>>>
45
51
  : Acc;
46
52
 
47
53
  export type MergeAllFetchTypes<Signals extends readonly FetchSignalInput[]> =
@@ -65,33 +65,53 @@ type PubsubSubscribeFn<E, Context> = (
65
65
  ]
66
66
  ) => () => void;
67
67
 
68
- type PrimaryFetchFn<E, Context> =
69
- EndpInfoReqType<E> extends "query" | "mutation"
68
+ type PrimaryFetchFn<E, Context, ReqType = EndpInfoReqType<E>> =
69
+ ReqType extends "query" | "mutation"
70
70
  ? QueryOrMutationFetchFn<E, Context>
71
- : EndpInfoReqType<E> extends "message"
71
+ : ReqType extends "message"
72
72
  ? MessageEmitFn<E, Context>
73
73
  : never;
74
74
 
75
+ type UploadLikeArg = FileList | File | File[];
76
+ type HasUploadLikeArg<Args extends readonly unknown[]> = Extract<Args[number], UploadLikeArg> extends never ? false : true;
77
+ type RestApiArg<Arg> = Arg extends FileList ? FileList : Arg extends File | File[] ? FileList : Arg;
78
+ type RestApiArgs<Args extends readonly unknown[]> = {
79
+ [K in keyof Args]: RestApiArg<Args[K]>;
80
+ };
81
+ type UploadRestApiFetchFn<E, Context> = (
82
+ ...args: [...RestApiArgs<EndpInfoArgs<E>>, fetchPolicy?: FetchPolicy]
83
+ ) => Promise<EndpInfoReturns<E, Context>>;
84
+
75
85
  type PrimaryFetchType<EInfoObj extends { [key: string]: EndpointInfo }, Context> = {
76
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "query" | "mutation" | "message"
77
- ? K
78
- : never]: PrimaryFetchFn<EInfoObj[K], Context>;
86
+ [K in keyof EInfoObj as Extract<EndpInfoReqType<EInfoObj[K]>, "query" | "mutation" | "message"> extends never
87
+ ? never
88
+ : K]: PrimaryFetchFn<EInfoObj[K], Context>;
89
+ };
90
+
91
+ type UploadRestApiFetchType<EInfoObj extends { [key: string]: EndpointInfo }, Context> = {
92
+ [K in keyof EInfoObj as Extract<EndpInfoReqType<EInfoObj[K]>, "mutation"> extends never
93
+ ? never
94
+ : HasUploadLikeArg<EndpInfoArgs<EInfoObj[K]>> extends true
95
+ ? K extends string
96
+ ? `${K}RestApi`
97
+ : never
98
+ : never]: UploadRestApiFetchFn<EInfoObj[K], Context>;
79
99
  };
80
100
 
81
101
  type PubsubFetchType<EInfoObj extends { [key: string]: EndpointInfo }, Context> = {
82
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "pubsub"
83
- ? K extends string
102
+ [K in keyof EInfoObj as Extract<EndpInfoReqType<EInfoObj[K]>, "pubsub"> extends never
103
+ ? never
104
+ : K extends string
84
105
  ? `subscribe${Capitalize<K>}`
85
- : never
86
- : never]: PubsubSubscribeFn<EInfoObj[K], Context>;
106
+ : never]: PubsubSubscribeFn<EInfoObj[K], Context>;
87
107
  };
88
108
 
89
109
  type MessageListenFetchType<EInfoObj extends { [key: string]: EndpointInfo }, Context> = {
90
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "message"
91
- ? K extends string
110
+ [K in keyof EInfoObj as Extract<EndpInfoReqType<EInfoObj[K]>, "message"> extends never
111
+ ? never
112
+ : K extends string
92
113
  ? `listen${Capitalize<K>}`
93
- : never
94
- : never]: MessageListenFn<EInfoObj[K], Context>;
114
+ : never]: MessageListenFn<EInfoObj[K], Context>;
95
115
  };
96
116
 
97
117
  export type GetFetchTypeFromEndpoint<
@@ -100,5 +120,6 @@ export type GetFetchTypeFromEndpoint<
100
120
  _EndpointInfoObj extends { [key: string]: EndpointInfo } = EndpCls[typeof ENDPOINT_META],
101
121
  _ReturnContext = EndpointReturnContextOf<SlceCls>,
102
122
  > = PrimaryFetchType<_EndpointInfoObj, _ReturnContext> &
123
+ UploadRestApiFetchType<_EndpointInfoObj, _ReturnContext> &
103
124
  PubsubFetchType<_EndpointInfoObj, _ReturnContext> &
104
125
  MessageListenFetchType<_EndpointInfoObj, _ReturnContext>;
@@ -1,7 +1,7 @@
1
1
  import type { GetStateObject, SLICE_META } from "akanjs/base";
2
2
  import type { FetchPolicy } from "akanjs/common";
3
- import type { ConstantModel, DefaultOf, ProtoFile, PurifiedModel } from "akanjs/constant";
4
- import type { DatabaseModel, ExtractSort, FilterInstance } from "akanjs/document";
3
+ import type { DefaultOf, ProtoFile, PurifiedModel } from "akanjs/constant";
4
+ import type { ExtractSort, FilterInstance } from "akanjs/document";
5
5
  import type { SliceCls, SliceInfo, SliceInfoArgs } from "akanjs/signal";
6
6
  import type { ClientEdit, ClientInit, ClientView, EditReturn, InitReturn, ViewReturn } from "./appliedReturn.type";
7
7
 
@@ -16,12 +16,12 @@ export type SliceFetchDescriptor<
16
16
  Full = unknown,
17
17
  Light = unknown,
18
18
  Insight = unknown,
19
- PurifiedInput = PurifiedModel<Input>,
20
- DefaultInput = DefaultOf<Input>,
21
- StateLight = GetStateObject<LightWithId<Light>>,
22
- StateInsight = GetStateObject<Insight>,
19
+ PurifiedInput = unknown,
20
+ DefaultInput = unknown,
21
+ StateLight = unknown,
22
+ StateInsight = unknown,
23
23
  Filter extends FilterInstance = FilterInstance,
24
- Sort = ExtractSort<Filter>,
24
+ Sort = unknown,
25
25
  > = {
26
26
  sliceMap: SliceMap;
27
27
  refName: RefName;
@@ -38,25 +38,21 @@ export type SliceFetchDescriptor<
38
38
  sort: Sort;
39
39
  };
40
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;
41
+ export type SliceFetchDescriptorOf<SlceCls extends SliceCls> = SliceFetchDescriptor<
42
+ SlceCls[typeof SLICE_META],
43
+ SlceCls["baseName"],
44
+ SlceCls["srv"]["cnst"]["_CapitalizedRefName"],
45
+ SlceCls["srv"]["cnst"]["_Input"],
46
+ SlceCls["srv"]["cnst"]["_Full"],
47
+ SlceCls["srv"]["cnst"]["_Light"],
48
+ SlceCls["srv"]["cnst"]["_Insight"],
49
+ SlceCls["srv"]["cnst"]["_PurifiedInput"],
50
+ SlceCls["srv"]["cnst"]["_DefaultInput"],
51
+ GetStateObject<LightWithId<SlceCls["srv"]["cnst"]["_Light"]>>,
52
+ GetStateObject<SlceCls["srv"]["cnst"]["_Insight"]>,
53
+ SlceCls["srv"]["db"]["_Filter"],
54
+ SlceCls["srv"]["db"]["_Sort"]
55
+ >;
60
56
 
61
57
  type _SliceMap<D extends SliceFetchDescriptor> = D["sliceMap"];
62
58
  type _RefName<D extends SliceFetchDescriptor> = D["refName"];
@@ -134,27 +130,25 @@ type SliceGetInitFetch<D extends SliceFetchDescriptor> = {
134
130
  >;
135
131
  };
136
132
 
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
- >
157
- : never;
133
+ export type GetFetchTypeFromSliceDescriptor<Descriptor extends SliceFetchDescriptor> = SliceListFetch<Descriptor> &
134
+ SliceInsightFetch<Descriptor> &
135
+ SliceInitFetch<Descriptor> &
136
+ SliceGetInitFetch<Descriptor> &
137
+ RawBaseSliceFetchType<
138
+ _RefName<Descriptor>,
139
+ _Input<Descriptor>,
140
+ _Full<Descriptor>,
141
+ _Light<Descriptor>,
142
+ _Cap<Descriptor>,
143
+ _PurifiedInput<Descriptor>
144
+ > &
145
+ AppliedBaseSliceFetchType<
146
+ _RefName<Descriptor>,
147
+ _Input<Descriptor>,
148
+ _Full<Descriptor>,
149
+ _Cap<Descriptor>,
150
+ _PurifiedInput<Descriptor>
151
+ >;
158
152
 
159
153
  export type GetFetchTypeFromSlice<SlceCls extends SliceCls> = GetFetchTypeFromSliceDescriptor<
160
154
  SliceFetchDescriptorOf<SlceCls>
@@ -180,7 +174,7 @@ type RawBaseSliceFetchType<
180
174
  fetchPolicy?: FetchPolicy,
181
175
  ) => Promise<Full>;
182
176
  } & {
183
- [K in `remove${_CapitalizedRefName}`]: (id: string, fetchPolicy?: FetchPolicy) => Promise<void>;
177
+ [K in `remove${_CapitalizedRefName}`]: (id: string, fetchPolicy?: FetchPolicy) => Promise<Full>;
184
178
  };
185
179
 
186
180
  type AppliedBaseSliceFetchType<
package/fetch/types.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { type Assign, type Environment, getEnv, type SLICE_META } from "akanjs/base";
2
- import type { DatabaseSignal } from "akanjs/signal";
1
+ import { type Environment, getEnv } from "akanjs/base";
3
2
  import type { SliceMeta } from "./fetchType/appliedReturn.type";
4
3
 
5
4
  /** Account data made available to services for the current app/environment. */
@@ -12,18 +11,6 @@ export const getDefaultAccount = (): Account => {
12
11
  return { appName: env.appName, environment: env.environment };
13
12
  };
14
13
 
15
- type GetSliceMetaObjFromSignal<Signal> = Signal extends {
16
- _SliceMetaObj: infer SliceMetaObj extends Record<string, SliceMeta>;
17
- }
18
- ? SliceMetaObj
19
- : Signal extends DatabaseSignal<infer _IntlCls, infer _EndpCls, infer SlceCls, infer _SrvrCls>
20
- ? {
21
- [K in `${SlceCls["baseName"]}${Capitalize<keyof SlceCls[typeof SLICE_META] & string>}`]: SliceMeta;
22
- }
23
- : Record<never, never>;
24
- export type GetSliceMetaObjFromDatabaseSignals<
25
- Signals extends readonly unknown[],
26
- Acc extends Record<string, SliceMeta> = Record<never, never>,
27
- > = Signals extends readonly [infer First, ...infer Rest]
28
- ? GetSliceMetaObjFromDatabaseSignals<Rest, Assign<Acc, GetSliceMetaObjFromSignal<First>>>
29
- : Acc;
14
+ export type GetSliceMetaObjFromDatabaseSignals<Signals extends readonly unknown[]> = Signals extends readonly []
15
+ ? Record<never, never>
16
+ : Record<string, SliceMeta>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akanjs",
3
- "version": "2.3.5-rc.1",
3
+ "version": "2.3.5-rc.2",
4
4
  "sourceType": "module",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -12,15 +12,16 @@ export type FetchProxySignalInput<FetchType = unknown, SliceMetaObj extends Reco
12
12
  _SliceMetaObj: SliceMetaObj;
13
13
  };
14
14
  export type FetchSignalInput = FetchProxySignalInput | DatabaseSignal | ServiceSignal;
15
+ type MergeFetchParts<First, Second> = [First] extends [never] ? Second : [Second] extends [never] ? First : Assign<First, Second>;
15
16
  export type FetchTypeOfSignal<Signal extends FetchSignalInput> = Signal extends {
16
17
  _FetchType: infer FetchType;
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
+ } ? FetchType : Signal extends DatabaseSignal<infer _IntlCls, infer EndpCls, infer SlceCls, infer _SrvrCls> ? MergeFetchParts<GetFetchTypeFromEndpoint<EndpCls, SlceCls>, GetFetchTypeFromSlice<SlceCls>> : Signal extends ServiceSignal<infer _IntlCls, infer EndpCls, infer _SrvrCls> ? GetFetchTypeFromEndpoint<EndpCls> : unknown;
18
19
  type MergeProxyFetchTypes<Signals extends readonly FetchSignalInput[], Acc = Record<never, never>> = Signals extends readonly [infer First extends FetchSignalInput, ...infer Rest extends readonly FetchSignalInput[]] ? First extends {
19
20
  _FetchType: infer FetchType;
20
21
  } ? MergeProxyFetchTypes<Rest, Assign<Acc, FetchType>> : MergeProxyFetchTypes<Rest, Acc> : Acc;
21
22
  type MergeDirectFetchTypes<Signals extends readonly FetchSignalInput[], Acc = Record<never, never>> = Signals extends readonly [infer First extends FetchSignalInput, ...infer Rest extends readonly FetchSignalInput[]] ? First extends {
22
23
  _FetchType: unknown;
23
- } ? MergeDirectFetchTypes<Rest, Acc> : MergeDirectFetchTypes<Rest, Assign<Acc, FetchTypeOfSignal<First>>> : Acc;
24
+ } ? MergeDirectFetchTypes<Rest, Acc> : MergeDirectFetchTypes<Rest, MergeFetchParts<Acc, FetchTypeOfSignal<First>>> : Acc;
24
25
  export type MergeAllFetchTypes<Signals extends readonly FetchSignalInput[]> = MergeProxyFetchTypes<Signals> extends infer ProxyFetch ? MergeDirectFetchTypes<Signals> extends infer DirectFetch ? Assign<ProxyFetch, DirectFetch> : never : never;
25
26
  export type FetchClientType<Signals extends readonly FetchSignalInput[]> = FetchProxy<MergeAllFetchTypes<Signals>, GetSliceMetaObjFromDatabaseSignals<Signals>>;
26
27
  export {};
@@ -18,23 +18,35 @@ type PubsubSubscribeFn<E, Context> = (...args: [
18
18
  handleEvent: (data: EndpInfoReturns<E, Context>) => PromiseOrObject<void>,
19
19
  options?: FetchPolicy
20
20
  ]) => () => void;
21
- type PrimaryFetchFn<E, Context> = EndpInfoReqType<E> extends "query" | "mutation" ? QueryOrMutationFetchFn<E, Context> : EndpInfoReqType<E> extends "message" ? MessageEmitFn<E, Context> : never;
21
+ type PrimaryFetchFn<E, Context, ReqType = EndpInfoReqType<E>> = ReqType extends "query" | "mutation" ? QueryOrMutationFetchFn<E, Context> : ReqType extends "message" ? MessageEmitFn<E, Context> : never;
22
+ type UploadLikeArg = FileList | File | File[];
23
+ type HasUploadLikeArg<Args extends readonly unknown[]> = Extract<Args[number], UploadLikeArg> extends never ? false : true;
24
+ type RestApiArg<Arg> = Arg extends FileList ? FileList : Arg extends File | File[] ? FileList : Arg;
25
+ type RestApiArgs<Args extends readonly unknown[]> = {
26
+ [K in keyof Args]: RestApiArg<Args[K]>;
27
+ };
28
+ type UploadRestApiFetchFn<E, Context> = (...args: [...RestApiArgs<EndpInfoArgs<E>>, fetchPolicy?: FetchPolicy]) => Promise<EndpInfoReturns<E, Context>>;
22
29
  type PrimaryFetchType<EInfoObj extends {
23
30
  [key: string]: EndpointInfo;
24
31
  }, Context> = {
25
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "query" | "mutation" | "message" ? K : never]: PrimaryFetchFn<EInfoObj[K], Context>;
32
+ [K in keyof EInfoObj as Extract<EndpInfoReqType<EInfoObj[K]>, "query" | "mutation" | "message"> extends never ? never : K]: PrimaryFetchFn<EInfoObj[K], Context>;
33
+ };
34
+ type UploadRestApiFetchType<EInfoObj extends {
35
+ [key: string]: EndpointInfo;
36
+ }, Context> = {
37
+ [K in keyof EInfoObj as Extract<EndpInfoReqType<EInfoObj[K]>, "mutation"> extends never ? never : HasUploadLikeArg<EndpInfoArgs<EInfoObj[K]>> extends true ? K extends string ? `${K}RestApi` : never : never]: UploadRestApiFetchFn<EInfoObj[K], Context>;
26
38
  };
27
39
  type PubsubFetchType<EInfoObj extends {
28
40
  [key: string]: EndpointInfo;
29
41
  }, Context> = {
30
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "pubsub" ? K extends string ? `subscribe${Capitalize<K>}` : never : never]: PubsubSubscribeFn<EInfoObj[K], Context>;
42
+ [K in keyof EInfoObj as Extract<EndpInfoReqType<EInfoObj[K]>, "pubsub"> extends never ? never : K extends string ? `subscribe${Capitalize<K>}` : never]: PubsubSubscribeFn<EInfoObj[K], Context>;
31
43
  };
32
44
  type MessageListenFetchType<EInfoObj extends {
33
45
  [key: string]: EndpointInfo;
34
46
  }, Context> = {
35
- [K in keyof EInfoObj as EndpInfoReqType<EInfoObj[K]> extends "message" ? K extends string ? `listen${Capitalize<K>}` : never : never]: MessageListenFn<EInfoObj[K], Context>;
47
+ [K in keyof EInfoObj as Extract<EndpInfoReqType<EInfoObj[K]>, "message"> extends never ? never : K extends string ? `listen${Capitalize<K>}` : never]: MessageListenFn<EInfoObj[K], Context>;
36
48
  };
37
49
  export type GetFetchTypeFromEndpoint<EndpCls extends EndpointCls, SlceCls extends SliceCls | never = never, _EndpointInfoObj extends {
38
50
  [key: string]: EndpointInfo;
39
- } = EndpCls[typeof ENDPOINT_META], _ReturnContext = EndpointReturnContextOf<SlceCls>> = PrimaryFetchType<_EndpointInfoObj, _ReturnContext> & PubsubFetchType<_EndpointInfoObj, _ReturnContext> & MessageListenFetchType<_EndpointInfoObj, _ReturnContext>;
51
+ } = EndpCls[typeof ENDPOINT_META], _ReturnContext = EndpointReturnContextOf<SlceCls>> = PrimaryFetchType<_EndpointInfoObj, _ReturnContext> & UploadRestApiFetchType<_EndpointInfoObj, _ReturnContext> & PubsubFetchType<_EndpointInfoObj, _ReturnContext> & MessageListenFetchType<_EndpointInfoObj, _ReturnContext>;
40
52
  export {};
@@ -1,7 +1,7 @@
1
1
  import type { GetStateObject, SLICE_META } from "akanjs/base";
2
2
  import type { FetchPolicy } from "akanjs/common";
3
- import type { ConstantModel, DefaultOf, ProtoFile, PurifiedModel } from "akanjs/constant";
4
- import type { DatabaseModel, ExtractSort, FilterInstance } from "akanjs/document";
3
+ import type { DefaultOf, ProtoFile, PurifiedModel } from "akanjs/constant";
4
+ import type { ExtractSort, FilterInstance } from "akanjs/document";
5
5
  import type { SliceCls, SliceInfo, SliceInfoArgs } from "akanjs/signal";
6
6
  import type { ClientEdit, ClientInit, ClientView, EditReturn, InitReturn, ViewReturn } from "./appliedReturn.type";
7
7
  type SliceInfoMap = {
@@ -12,7 +12,7 @@ type LightWithId<Light> = Light extends {
12
12
  } ? Light : {
13
13
  id: string;
14
14
  };
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>> = {
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 = unknown, DefaultInput = unknown, StateLight = unknown, StateInsight = unknown, Filter extends FilterInstance = FilterInstance, Sort = unknown> = {
16
16
  sliceMap: SliceMap;
17
17
  refName: RefName;
18
18
  capRefName: CapRefName;
@@ -27,7 +27,7 @@ export type SliceFetchDescriptor<SliceMap extends SliceInfoMap = SliceInfoMap, R
27
27
  filter: Filter;
28
28
  sort: Sort;
29
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;
30
+ export type SliceFetchDescriptorOf<SlceCls extends SliceCls> = SliceFetchDescriptor<SlceCls[typeof SLICE_META], SlceCls["baseName"], 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"]>;
31
31
  type _SliceMap<D extends SliceFetchDescriptor> = D["sliceMap"];
32
32
  type _RefName<D extends SliceFetchDescriptor> = D["refName"];
33
33
  type _Cap<D extends SliceFetchDescriptor> = D["capRefName"];
@@ -61,7 +61,7 @@ type SliceInitFetch<D extends SliceFetchDescriptor> = {
61
61
  type SliceGetInitFetch<D extends SliceFetchDescriptor> = {
62
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>>;
63
63
  };
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;
64
+ export type GetFetchTypeFromSliceDescriptor<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>>;
65
65
  export type GetFetchTypeFromSlice<SlceCls extends SliceCls> = GetFetchTypeFromSliceDescriptor<SliceFetchDescriptorOf<SlceCls>>;
66
66
  type RawBaseSliceFetchType<RefName extends string, Input, Full, Light, _CapitalizedRefName extends string = Capitalize<RefName>, _PurifiedInput = PurifiedModel<Input>> = {
67
67
  [K in RefName]: (id: string, fetchPolicy?: FetchPolicy) => Promise<Full>;
@@ -72,7 +72,7 @@ type RawBaseSliceFetchType<RefName extends string, Input, Full, Light, _Capitali
72
72
  } & {
73
73
  [K in `update${_CapitalizedRefName}`]: (id: string, input: _PurifiedInput, fetchPolicy?: FetchPolicy) => Promise<Full>;
74
74
  } & {
75
- [K in `remove${_CapitalizedRefName}`]: (id: string, fetchPolicy?: FetchPolicy) => Promise<void>;
75
+ [K in `remove${_CapitalizedRefName}`]: (id: string, fetchPolicy?: FetchPolicy) => Promise<Full>;
76
76
  };
77
77
  type AppliedBaseSliceFetchType<RefName extends string, Input, Full, _CapitalizedRefName extends string = Capitalize<RefName>, _PurifiedInput = PurifiedModel<Input>> = {
78
78
  [K in `view${_CapitalizedRefName}`]: (id: string, option?: FetchPolicy) => Promise<ViewReturn<RefName, Full>>;
@@ -1,5 +1,4 @@
1
- import { type Assign, type Environment, type SLICE_META } from "akanjs/base";
2
- import type { DatabaseSignal } from "akanjs/signal";
1
+ import { type Environment } from "akanjs/base";
3
2
  import type { SliceMeta } from "./fetchType/appliedReturn.type";
4
3
  /** Account data made available to services for the current app/environment. */
5
4
  export type Account<AddData = unknown> = {
@@ -7,10 +6,4 @@ export type Account<AddData = unknown> = {
7
6
  environment: Environment;
8
7
  } & AddData;
9
8
  export declare const getDefaultAccount: () => Account;
10
- type GetSliceMetaObjFromSignal<Signal> = Signal extends {
11
- _SliceMetaObj: infer SliceMetaObj extends Record<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
- } : 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, Assign<Acc, GetSliceMetaObjFromSignal<First>>> : Acc;
16
- export {};
9
+ export type GetSliceMetaObjFromDatabaseSignals<Signals extends readonly unknown[]> = Signals extends readonly [] ? Record<never, never> : Record<string, SliceMeta>;
package/ui/More.tsx CHANGED
@@ -1,10 +1,8 @@
1
1
  "use client";
2
2
  import { clsx, isMobileDevice } from "akanjs/client";
3
- import { lazy } from "akanjs/webkit";
3
+ import { InfiniteScroll } from "./InfiniteScroll";
4
4
  import { Pagination } from "./Pagination";
5
5
 
6
- const InfiniteScroll = lazy(() => import("./InfiniteScroll").then((mod) => mod.InfiniteScroll), { ssr: false });
7
-
8
6
  interface MoreProps {
9
7
  total: number;
10
8
  itemsPerPage: number;