@akanjs/signal 0.9.47 → 0.9.49
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.
- package/cjs/src/apiInfo.js +167 -0
- package/cjs/src/base.signal.js +55 -93
- package/cjs/src/baseFetch.js +1 -2
- package/cjs/src/fetch.js +2 -0
- package/cjs/src/fetchInfo.js +364 -0
- package/cjs/src/gql.js +7 -762
- package/cjs/src/graphql.js +125 -0
- package/cjs/src/index.js +5 -0
- package/cjs/src/internalApiInfo.js +151 -0
- package/cjs/src/signalDecorators.js +114 -148
- package/cjs/src/signalInfo.js +185 -0
- package/cjs/src/sliceInfo.js +193 -0
- package/esm/src/apiInfo.js +152 -0
- package/esm/src/base.signal.js +56 -108
- package/esm/src/baseFetch.js +1 -2
- package/esm/src/fetch.js +2 -0
- package/esm/src/fetchInfo.js +345 -0
- package/esm/src/gql.js +7 -784
- package/esm/src/graphql.js +106 -0
- package/esm/src/index.js +5 -0
- package/esm/src/internalApiInfo.js +137 -0
- package/esm/src/signalDecorators.js +115 -152
- package/esm/src/signalInfo.js +174 -0
- package/esm/src/sliceInfo.js +178 -0
- package/package.json +1 -1
- package/src/apiInfo.d.ts +73 -0
- package/src/base.signal.d.ts +131 -19
- package/src/fetch.d.ts +10 -8
- package/src/fetchInfo.d.ts +19 -0
- package/src/gql.d.ts +12 -48
- package/src/graphql.d.ts +9 -0
- package/src/index.d.ts +5 -0
- package/src/internalApiInfo.d.ts +74 -0
- package/src/signalDecorators.d.ts +71 -42
- package/src/signalInfo.d.ts +78 -0
- package/src/sliceInfo.d.ts +68 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Client } from "./client";
|
|
2
|
+
import { SerializedSignal } from "./signalInfo";
|
|
3
|
+
declare global {
|
|
4
|
+
var builtFetch: typeof global.fetch & {
|
|
5
|
+
client: Client;
|
|
6
|
+
} & {
|
|
7
|
+
[key: string]: (...args: any[]) => Promise<any>;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare const serviceFetchOf: <Fetch = {
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
}>(signal: SerializedSignal) => Fetch;
|
|
13
|
+
export declare const databaseFetchOf: <Fetch = {
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}>(signal: SerializedSignal, option?: {
|
|
16
|
+
overwrite?: {
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
};
|
|
19
|
+
}) => Fetch;
|
package/src/gql.d.ts
CHANGED
|
@@ -1,24 +1,16 @@
|
|
|
1
1
|
import { DataList, type GetActionObject, type GetStateObject, type MergeAll, type MergedValues, type Prettify, type PromiseOrObject, Type, Upload } from "@akanjs/base";
|
|
2
2
|
import { FetchPolicy } from "@akanjs/common";
|
|
3
|
-
import { ConstantModel, DefaultOf, DocumentModel,
|
|
3
|
+
import { ConstantModel, DefaultOf, DocumentModel, ProtoFile, QueryOf } from "@akanjs/constant";
|
|
4
|
+
import type { FilterType, SortOf } from "@akanjs/document";
|
|
5
|
+
import { AnyVariables } from "@urql/core";
|
|
4
6
|
import { type Client } from ".";
|
|
5
|
-
import { type
|
|
7
|
+
import { type DefaultSignal, type SliceMeta } from "./signalDecorators";
|
|
6
8
|
export declare class GqlStorage {
|
|
7
9
|
}
|
|
8
|
-
export declare class FragmentStorage {
|
|
9
|
-
}
|
|
10
|
-
export declare class PurifyStorage {
|
|
11
|
-
}
|
|
12
|
-
export declare class DefaultStorage {
|
|
13
|
-
}
|
|
14
|
-
export declare class CrystalizeStorage {
|
|
15
|
-
}
|
|
16
|
-
export type PurifyFunc<Input, _DefaultInput = DefaultOf<Input>, _DocInput = DocumentModel<Input>> = (self: _DefaultInput, isChild?: boolean) => _DocInput | null;
|
|
17
|
-
export type CrystalizeFunc<Model> = (self: GetStateObject<Model>, isChild?: boolean) => Model;
|
|
18
10
|
export interface FetchInitForm<Input, Full, Filter extends FilterType, _DefaultInput = DefaultOf<Input>, _Sort = SortOf<Filter>> {
|
|
19
11
|
page?: number;
|
|
20
12
|
limit?: number;
|
|
21
|
-
sort?: _Sort
|
|
13
|
+
sort?: _Sort;
|
|
22
14
|
default?: Partial<_DefaultInput>;
|
|
23
15
|
invalidate?: boolean;
|
|
24
16
|
insight?: boolean;
|
|
@@ -57,13 +49,6 @@ export type ServerEdit<T extends string, Model> = {
|
|
|
57
49
|
[K in `${T}ViewAt`]: Date;
|
|
58
50
|
};
|
|
59
51
|
export type ClientEdit<T extends string, Model> = PromiseOrObject<ServerEdit<T, Model>>;
|
|
60
|
-
export type GqlScalarUtil<T extends string, Input, Model, Default, DefaultInput, Doc, DocInput, _CapitalizedT extends string = Capitalize<T>> = {
|
|
61
|
-
[K in `default${_CapitalizedT}`]: Default;
|
|
62
|
-
} & {
|
|
63
|
-
[K in `purify${_CapitalizedT}`]: PurifyFunc<Input, DefaultInput, DocInput>;
|
|
64
|
-
} & {
|
|
65
|
-
[K in `crystalize${_CapitalizedT}`]: CrystalizeFunc<Model>;
|
|
66
|
-
};
|
|
67
52
|
type RemoveLast3<T extends any[]> = T extends [...infer Rest, any, any, any] ? Rest : T;
|
|
68
53
|
export type FilterListArgs<Args extends any[]> = PartialNullableArgs<ConvertArgs<RemoveLast3<FilterInternalArgs<Args>>>>;
|
|
69
54
|
type FetchOption<Input, Full, Filter extends FilterType, _DefaultInput = DefaultOf<Input>, _Sort = SortOf<Filter>> = FetchPolicy & FetchInitForm<Input, Full, Filter, _DefaultInput, _Sort>;
|
|
@@ -89,10 +74,6 @@ type InitReturn<T extends string, Light extends {
|
|
|
89
74
|
type BasicMethods<T extends string, Input, Full, Light extends {
|
|
90
75
|
id: string;
|
|
91
76
|
}, Insight, _CapitalizedT extends string = Capitalize<T>> = {
|
|
92
|
-
[K in `lightCrystalize${_CapitalizedT}`]: CrystalizeFunc<Light>;
|
|
93
|
-
} & {
|
|
94
|
-
[K in `default${_CapitalizedT}Insight`]: Insight;
|
|
95
|
-
} & {
|
|
96
77
|
[K in `add${_CapitalizedT}Files`]: (fileList: FileList, parentId?: string, option?: FetchPolicy) => Promise<ProtoFile[]>;
|
|
97
78
|
} & {
|
|
98
79
|
[K in `merge${_CapitalizedT}`]: (modelOrId: Full | string, data: Partial<DocumentModel<Input>>, option?: FetchPolicy) => Promise<Full>;
|
|
@@ -139,7 +120,7 @@ export type DbGraphQL<T extends string, Input, Full, Light extends {
|
|
|
139
120
|
}, Insight, Filter extends FilterType, Fetch, Signal, _CapitalizedT extends string = Capitalize<T>, _Default = DefaultOf<Full>, _DefaultInput = DefaultOf<Input>, _DefaultState = GetStateObject<Full>, _DefaultStateInput = GetStateObject<Input>, _Doc = DocumentModel<Full>, _DocInput = DocumentModel<Input>, _QueryOfDoc = QueryOf<DocumentModel<Full>>, _Query = GetActionObject<Filter>, _Sort = SortOf<Filter>, _DynamicSliceArgMap = DynamicSliceArgMap<T, Input, Full, Filter, Signal, _CapitalizedT, _DefaultInput, _Sort>> = {
|
|
140
121
|
refName: string;
|
|
141
122
|
slices: SliceMeta[];
|
|
142
|
-
} & GetWsMessageOf<Signal> & GetWsPubsubOf<Signal> &
|
|
123
|
+
} & GetWsMessageOf<Signal> & GetWsPubsubOf<Signal> & BasicMethods<T, Input, Full, Light, Insight, _CapitalizedT> & ViewEditMethods<T, Full, _CapitalizedT> & InitMethods<T, Input, Full, Light, Insight, Filter, _CapitalizedT, _QueryOfDoc, _DefaultInput, _Sort> & Fetch & DynamicListMethods<T, Input, Full, Light, Insight, Filter, Signal, _CapitalizedT, _DefaultInput, _Sort, _DynamicSliceArgMap>;
|
|
143
124
|
type IsInternalArg<T> = T extends {
|
|
144
125
|
__InternalArg__: any;
|
|
145
126
|
} ? true : false;
|
|
@@ -180,41 +161,24 @@ type GenerateSubscribeMethod<Fn> = Fn extends (...args: infer Args) => infer R ?
|
|
|
180
161
|
export type GetWsPubsubOf<Sig> = {
|
|
181
162
|
[K in keyof Sig as K extends string ? HasMarker<Sig[K], "Subscribe"> extends true ? `subscribe${Capitalize<K>}` : never : never]: GenerateSubscribeMethod<Sig[K]>;
|
|
182
163
|
};
|
|
183
|
-
export declare const scalarUtilOf: <T extends string, Model, _Default, _Doc>(cnst: ScalarConstantModel<T, Model, _Default, _Doc>) => GqlScalarUtil<T, Model, Model, _Default, _Default, _Doc, _Doc>;
|
|
184
164
|
type LightWeightFetch<Fetch, Full, Light> = {
|
|
185
165
|
[K in keyof Fetch]: Fetch[K] extends (...args: infer Args) => Promise<Full[]> ? (...args: Args) => Promise<Light[]> : Fetch[K];
|
|
186
166
|
};
|
|
187
167
|
export declare const getGqlOnStorage: (refName: string) => {
|
|
188
168
|
[key: string]: any;
|
|
189
169
|
};
|
|
170
|
+
export declare const setGqlOnStorage: (refName: string, modelGql: any) => void;
|
|
190
171
|
export declare const gqlOf: <T extends string, Input, Full extends {
|
|
191
172
|
id: string;
|
|
192
173
|
}, Light extends {
|
|
193
174
|
id: string;
|
|
194
|
-
}, Insight, Filter extends FilterType, Signal, _CapitalizedT extends string, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc,
|
|
175
|
+
}, Insight, Filter extends FilterType, Signal, _CapitalizedT extends string, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _DefaultInsight, _PurifiedInput, _Doc, _DocInput, _QueryOfDoc, _Sort = SortOf<Filter>, _SignalAction = GetActionObject<Signal>>(constant: ConstantModel<T, Input, Full, Light, Insight, _CapitalizedT, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _DefaultInsight, _PurifiedInput, _Doc, _DocInput, _QueryOfDoc>, filterRef: Type<Filter>, sigRef: Type<Signal>, option?: {
|
|
195
176
|
overwrite?: {
|
|
196
177
|
[key: string]: any;
|
|
197
178
|
};
|
|
198
|
-
}) => DbGraphQL<T, Input, Full, Light, Insight, Filter, LightWeightFetch<GetQueryMutationOf<_SignalAction & DefaultSignal<T, Input, Full, Light, Insight, Filter, _CapitalizedT,
|
|
199
|
-
export declare const
|
|
200
|
-
|
|
201
|
-
overwrite?: any;
|
|
202
|
-
}) => DefaultOf<T>;
|
|
203
|
-
export declare const makePurify: <I>(target: Type<I>, option?: {
|
|
204
|
-
overwrite?: any;
|
|
205
|
-
}) => PurifyFunc<I>;
|
|
206
|
-
export declare const makeCrystalize: <M>(target: Type<M>, option?: {
|
|
207
|
-
overwrite?: any;
|
|
208
|
-
partial?: string[];
|
|
209
|
-
}) => CrystalizeFunc<M>;
|
|
210
|
-
export declare const makeFragment: (target: Type, option?: {
|
|
211
|
-
overwrite?: any;
|
|
212
|
-
excludeSelf?: boolean;
|
|
213
|
-
partial?: string[];
|
|
214
|
-
}) => string;
|
|
215
|
-
export declare const getGqlStr: (modelRef: Type, gqlMeta: GqlMeta, argMetas: ArgMeta[], returnRef: Type, partial?: string[]) => string;
|
|
216
|
-
export declare const serializeArg: (argMeta: ArgMeta, value: any) => object[] | null;
|
|
217
|
-
export declare const deserializeArg: (argMeta: ArgMeta, value: any) => object[] | null;
|
|
179
|
+
}) => DbGraphQL<T, Input, Full, Light, Insight, Filter, LightWeightFetch<GetQueryMutationOf<_SignalAction & DefaultSignal<T, Input, Full, Light, Insight, Filter, _CapitalizedT, _PurifiedInput, _QueryOfDoc, _Sort>, Full>, Full, Light>, _SignalAction, _CapitalizedT, _Default, _DefaultInput, _DefaultState, _DefaultStateInput, _Doc, _DocInput, _QueryOfDoc, _Sort>;
|
|
180
|
+
export declare const query: <Query = any>(fetchClient: Client, query: string, variables?: AnyVariables, option?: FetchPolicy) => Promise<NonNullable<Query> | undefined>;
|
|
181
|
+
export declare const mutate: <Mutation = any>(fetchClient: Client, mutation: string, variables?: AnyVariables, option?: FetchPolicy) => Promise<NonNullable<Mutation> | undefined>;
|
|
218
182
|
export declare const fetchOf: <Signal, _SignalAction = GetActionObject<Signal>>(sigRef: Type<Signal>) => GetWsMessageOf<_SignalAction> & GetWsPubsubOf<_SignalAction> & GetQueryMutationOf<_SignalAction>;
|
|
219
183
|
type CustomFetch<T> = Omit<T, "client" | "clone"> & {
|
|
220
184
|
client: Client;
|
|
@@ -222,5 +186,5 @@ type CustomFetch<T> = Omit<T, "client" | "clone"> & {
|
|
|
222
186
|
jwt: string | null;
|
|
223
187
|
}) => CustomFetch<T>;
|
|
224
188
|
};
|
|
225
|
-
export declare const makeFetch: <Fetches extends object[]>(...fetches:
|
|
189
|
+
export declare const makeFetch: <Fetches extends object[]>(...fetches: Fetches) => Prettify<CustomFetch<MergeAll<Fetches>>>;
|
|
226
190
|
export {};
|
package/src/graphql.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Type } from "@akanjs/base";
|
|
2
|
+
import { SerializedEndpoint } from ".";
|
|
3
|
+
export declare const makeFragment: (modelRef: Type, option?: {
|
|
4
|
+
overwrite?: any;
|
|
5
|
+
excludeSelf?: boolean;
|
|
6
|
+
partial?: string[];
|
|
7
|
+
}) => string;
|
|
8
|
+
export declare const getGqlStr: (modelRef: Type, key: string, endpoint: SerializedEndpoint, returnRef: Type, partial?: string[]) => string;
|
|
9
|
+
export declare function graphql(literals: string | readonly string[], ...args: any[]): string;
|
package/src/index.d.ts
CHANGED
|
@@ -6,3 +6,8 @@ export * from "./doc";
|
|
|
6
6
|
export * from "./baseFetch";
|
|
7
7
|
export * from "./base.signal";
|
|
8
8
|
export * from "./fetch";
|
|
9
|
+
export * from "./signalInfo";
|
|
10
|
+
export * from "./apiInfo";
|
|
11
|
+
export * from "./sliceInfo";
|
|
12
|
+
export * from "./fetchInfo";
|
|
13
|
+
export * from "./graphql";
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { JSON, PromiseOrObject, Type, UnType } from "@akanjs/base";
|
|
2
|
+
import { ConstantFieldTypeInput, DocumentModel, FieldToValue, PlainTypeToFieldType } from "@akanjs/constant";
|
|
3
|
+
import { GetInternalArg } from "./apiInfo";
|
|
4
|
+
import { ArgType, InternalArgType, Job, SignalOption } from "./signalDecorators";
|
|
5
|
+
type InternalApiType = "resolveField" | "interval" | "cron" | "timeout" | "init" | "destroy" | "process";
|
|
6
|
+
interface InternalApiArgProps<Nullable extends boolean = false> {
|
|
7
|
+
nullable?: Nullable;
|
|
8
|
+
}
|
|
9
|
+
export declare class InternalApiInfo<ReqType extends InternalApiType, Srvs extends {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
} = {
|
|
12
|
+
[key: string]: any;
|
|
13
|
+
}, Args extends any[] = [], InternalArgs extends any[] = [], Returns extends ConstantFieldTypeInput = ConstantFieldTypeInput, Parent extends DocumentModel<any> = DocumentModel<any>, Nullable extends boolean = false> {
|
|
14
|
+
#private;
|
|
15
|
+
readonly type: ReqType;
|
|
16
|
+
readonly args: {
|
|
17
|
+
type: Extract<ArgType, "Msg">;
|
|
18
|
+
name: string;
|
|
19
|
+
argRef: any;
|
|
20
|
+
option?: InternalApiArgProps<boolean>;
|
|
21
|
+
}[];
|
|
22
|
+
readonly internalArgs: {
|
|
23
|
+
type: InternalArgType;
|
|
24
|
+
option?: InternalApiArgProps<boolean>;
|
|
25
|
+
}[];
|
|
26
|
+
readonly returnRef: Returns;
|
|
27
|
+
readonly signalOption: SignalOption<Returns, Nullable>;
|
|
28
|
+
execFn: ((...args: [...Args, ...InternalArgs]) => any) | null;
|
|
29
|
+
constructor(type: ReqType, returnRef: Returns, signalOption?: SignalOption<Returns, Nullable>);
|
|
30
|
+
msg<ExplicitType, Arg extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, Nullable extends boolean = false, _FieldToValue = FieldToValue<Arg>>(name: string, argRef: Arg, option?: InternalApiArgProps<Nullable>): InternalApiInfo<ReqType, Srvs, [...Args, arg: _FieldToValue | (Nullable extends true ? undefined : never)], InternalArgs, Returns, Parent, Nullable>;
|
|
31
|
+
with<ArgType extends InternalArgType, Nullable extends boolean = false>(argType: ArgType, option?: InternalApiArgProps<Nullable>): InternalApiInfo<ReqType, Srvs, Args, [...InternalArgs, arg: ArgType extends "Job" ? Job : ArgType extends "Parent" ? Parent : GetInternalArg<ArgType> | (Nullable extends true ? null : never)], Returns, Parent, Nullable>;
|
|
32
|
+
exec(query: (this: {
|
|
33
|
+
[K in keyof Srvs as K extends string ? Uncapitalize<K> : never]: Srvs[K];
|
|
34
|
+
}, ...args: [...Args, ...InternalArgs]) => ReqType extends "process" | "resolveField" ? PromiseOrObject<DocumentModel<FieldToValue<Returns>> | (Nullable extends true ? null : never)> : PromiseOrObject<void>): this;
|
|
35
|
+
applyApiMeta(sigRef: Type, key: string): void;
|
|
36
|
+
}
|
|
37
|
+
export declare const makeInternalApiBuilder: <Srvs extends {
|
|
38
|
+
[key: string]: any;
|
|
39
|
+
} = {
|
|
40
|
+
[key: string]: any;
|
|
41
|
+
}, Parent extends DocumentModel<any> = DocumentModel<any>>() => {
|
|
42
|
+
resolveField: <Returns extends ConstantFieldTypeInput, Nullable extends boolean = false>(returnRef: Returns, signalOption?: Pick<SignalOption<Returns, Nullable>, "nullable">) => InternalApiInfo<"resolveField", Srvs, [], [], Returns, Parent, Nullable>;
|
|
43
|
+
interval: <Nullable_2 extends boolean = false>(scheduleTime: number, signalOption?: SignalOption<typeof JSON, Nullable_2>) => InternalApiInfo<"interval", Srvs, [], [], typeof JSON, Parent, Nullable_2>;
|
|
44
|
+
cron: <Nullable_2 extends boolean = false>(scheduleCron: string, signalOption?: SignalOption<typeof JSON, Nullable_2>) => InternalApiInfo<"cron", Srvs, [], [], typeof JSON, Parent, Nullable_2>;
|
|
45
|
+
timeout: <Nullable_2 extends boolean = false>(timeout: number, signalOption?: SignalOption<typeof JSON, Nullable_2>) => InternalApiInfo<"timeout", Srvs, [], [], typeof JSON, Parent, Nullable_2>;
|
|
46
|
+
initialize: <Nullable_2 extends boolean = false>(signalOption?: SignalOption<typeof JSON, Nullable_2>) => InternalApiInfo<"init", Srvs, [], [], typeof JSON, Parent, Nullable_2>;
|
|
47
|
+
destroy: <Nullable_2 extends boolean = false>(signalOption?: SignalOption<typeof JSON, Nullable_2>) => InternalApiInfo<"destroy", Srvs, [], [], typeof JSON, Parent, Nullable_2>;
|
|
48
|
+
process: <Returns extends ConstantFieldTypeInput, Nullable_1 extends boolean = false>(returnRef: Returns, signalOption?: SignalOption<Returns, Nullable_1>) => InternalApiInfo<"process", Srvs, [], [], Returns, Parent, Nullable_1>;
|
|
49
|
+
};
|
|
50
|
+
export type BuildInternalApiSignal<SigBuilder extends InternalApiBuilder<any>, _ApiMap = ReturnType<SigBuilder>> = {
|
|
51
|
+
[K in keyof _ApiMap as _ApiMap[K] extends InternalApiInfo<"process", any, any, any, any, any, any> ? K : never]: _ApiMap[K] extends InternalApiInfo<infer ReqType, any, infer Args, any, infer Returns, any, infer Nullable> ? (...args: Args) => ReqType extends "process" ? Promise<(FieldToValue<Returns> | (Nullable extends true ? null : never)) & {
|
|
52
|
+
__Returns__: "Done";
|
|
53
|
+
}> : never : never;
|
|
54
|
+
};
|
|
55
|
+
export type InternalApiBuilder<Srvs extends {
|
|
56
|
+
[key: string]: Type;
|
|
57
|
+
} = {
|
|
58
|
+
[key: string]: Type;
|
|
59
|
+
}, Parent extends DocumentModel<any> = DocumentModel<any>, _ThisSrvs extends {
|
|
60
|
+
[key: string]: any;
|
|
61
|
+
} = {
|
|
62
|
+
[K in keyof Srvs as K extends string ? Uncapitalize<K> : never]: UnType<Srvs[K]>;
|
|
63
|
+
}> = (builder: {
|
|
64
|
+
resolveField: <Returns extends ConstantFieldTypeInput, Nullable extends boolean = false>(returnRef: Returns, signalOption?: Pick<SignalOption<Returns, Nullable>, "nullable">) => InternalApiInfo<"resolveField", _ThisSrvs, [], [], Returns, Parent, Nullable>;
|
|
65
|
+
interval: <Nullable extends boolean = false>(scheduleTime: number, signalOption?: SignalOption<typeof JSON, Nullable>) => InternalApiInfo<"interval", _ThisSrvs, [], [], typeof JSON, Parent, Nullable>;
|
|
66
|
+
cron: <Nullable extends boolean = false>(scheduleCron: string, signalOption?: SignalOption<typeof JSON, Nullable>) => InternalApiInfo<"cron", _ThisSrvs, [], [], typeof JSON, Parent, Nullable>;
|
|
67
|
+
timeout: <Nullable extends boolean = false>(timeout: number, signalOption?: SignalOption<typeof JSON, Nullable>) => InternalApiInfo<"timeout", _ThisSrvs, [], [], typeof JSON, Parent, Nullable>;
|
|
68
|
+
initialize: <Nullable extends boolean = false>(signalOption?: SignalOption<typeof JSON, Nullable>) => InternalApiInfo<"init", _ThisSrvs, [], [], typeof JSON, Parent, Nullable>;
|
|
69
|
+
destroy: <Nullable extends boolean = false>(signalOption?: SignalOption<typeof JSON, Nullable>) => InternalApiInfo<"destroy", _ThisSrvs, [], [], typeof JSON, Parent, Nullable>;
|
|
70
|
+
process: <Returns extends ConstantFieldTypeInput, Nullable extends boolean = false>(returnRef: Returns, signalOption?: SignalOption<Returns, Nullable>) => InternalApiInfo<"process", _ThisSrvs, [], [], Returns, Parent, Nullable>;
|
|
71
|
+
}) => {
|
|
72
|
+
[key: string]: InternalApiInfo<any, any, any, any, any, any, any>;
|
|
73
|
+
};
|
|
74
|
+
export {};
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
|
-
import { BaseObject, Dayjs, Enum, Environment, SingleFieldType, Type } from "@akanjs/base";
|
|
3
|
-
import { ConstantModel, DocumentModel,
|
|
2
|
+
import { BaseObject, Dayjs, Enum, Environment, type MergeAllActionTypes, SingleFieldType, Type, UnType } from "@akanjs/base";
|
|
3
|
+
import { ConstantModel, DocumentModel, GqlReturn, PurifiedModel, QueryOf } from "@akanjs/constant";
|
|
4
|
+
import type { Doc, FilterType, SortOf } from "@akanjs/document";
|
|
5
|
+
import type { ServiceModule } from "@akanjs/service";
|
|
4
6
|
import type { Job as BullJob } from "bull";
|
|
5
7
|
import type { Request as ExpressRequest, Response as ExpressResponse } from "express";
|
|
6
8
|
import type { Socket } from "socket.io";
|
|
9
|
+
import { BuildSliceSignal, SliceApiBuilder } from ".";
|
|
10
|
+
import { type ApiBuilder, type BuildApiSignal } from "./apiInfo";
|
|
11
|
+
import { BuildInternalApiSignal, InternalApiBuilder } from "./internalApiInfo";
|
|
7
12
|
export declare const ssoTypes: readonly ["github", "google", "facebook", "apple", "naver", "kakao"];
|
|
8
13
|
export type SSOType = (typeof ssoTypes)[number];
|
|
9
14
|
export declare class SignalStorage {
|
|
10
15
|
}
|
|
11
16
|
export declare const getAllSignalRefs: () => Type[];
|
|
12
17
|
export declare const getSignalRefsOnStorage: (refName: string) => Type[];
|
|
18
|
+
export declare const setSignalRefOnStorage: (refName: string, signalRef: Type) => void;
|
|
13
19
|
export type Resolve<T> = T;
|
|
14
20
|
export declare const resolve: <T>(data: any) => Resolve<T>;
|
|
15
21
|
export declare const emit: <T>(data: any) => Resolve<T> & {
|
|
@@ -32,8 +38,8 @@ interface TimerOption {
|
|
|
32
38
|
lock?: boolean;
|
|
33
39
|
enabled?: boolean;
|
|
34
40
|
}
|
|
35
|
-
export interface SignalOption<Response = any
|
|
36
|
-
nullable?:
|
|
41
|
+
export interface SignalOption<Response = any, Nullable extends boolean = false, _Key = keyof UnType<Response>> extends InitOption, TimerOption {
|
|
42
|
+
nullable?: Nullable;
|
|
37
43
|
name?: string;
|
|
38
44
|
default?: boolean;
|
|
39
45
|
path?: string;
|
|
@@ -41,7 +47,7 @@ export interface SignalOption<Response = any> extends InitOption, TimerOption {
|
|
|
41
47
|
sso?: SSOType;
|
|
42
48
|
serverMode?: "federation" | "batch" | "all";
|
|
43
49
|
timeout?: number;
|
|
44
|
-
partial?:
|
|
50
|
+
partial?: _Key[] | readonly _Key[];
|
|
45
51
|
cache?: number;
|
|
46
52
|
scheduleType?: "init" | "destroy" | "cron" | "interval" | "timeout";
|
|
47
53
|
scheduleCron?: string;
|
|
@@ -50,14 +56,14 @@ export interface SignalOption<Response = any> extends InitOption, TimerOption {
|
|
|
50
56
|
enabled?: boolean;
|
|
51
57
|
}
|
|
52
58
|
export interface ResolveFieldMeta {
|
|
53
|
-
returns:
|
|
59
|
+
returns: GqlReturn;
|
|
54
60
|
argsOption: ArgsOption;
|
|
55
61
|
key: string;
|
|
56
62
|
descriptor: PropertyDescriptor;
|
|
57
63
|
}
|
|
58
64
|
export declare const signalTypes: readonly ["graphql", "restapi"];
|
|
59
65
|
export type SignalType = (typeof signalTypes)[number];
|
|
60
|
-
export declare const endpointTypes: readonly ["Query", "Mutation", "Message", "Pubsub", "Process", "Schedule"];
|
|
66
|
+
export declare const endpointTypes: readonly ["Query", "Mutation", "Message", "Pubsub", "Process", "Schedule", "ResolveField"];
|
|
61
67
|
export type EndpointType = (typeof endpointTypes)[number];
|
|
62
68
|
export declare const guardTypes: readonly ["Public", "None", "User", "Admin", "SuperAdmin", "Every", "Owner"];
|
|
63
69
|
export type GuardType = (typeof guardTypes)[number];
|
|
@@ -69,7 +75,7 @@ export declare const internalArgTypes: readonly ["Account", "Me", "Self", "UserI
|
|
|
69
75
|
export type InternalArgType = (typeof internalArgTypes)[number];
|
|
70
76
|
export interface GqlMeta {
|
|
71
77
|
returns: (of?: any) => Type;
|
|
72
|
-
signalOption: SignalOption
|
|
78
|
+
signalOption: SignalOption<any, any, any>;
|
|
73
79
|
key: string;
|
|
74
80
|
descriptor: PropertyDescriptor;
|
|
75
81
|
guards: GuardType[];
|
|
@@ -78,11 +84,11 @@ export interface GqlMeta {
|
|
|
78
84
|
export interface ArgsOption {
|
|
79
85
|
nullable?: boolean;
|
|
80
86
|
example?: string | number | boolean | Dayjs;
|
|
81
|
-
enum?: Enum
|
|
87
|
+
enum?: Enum;
|
|
82
88
|
}
|
|
83
89
|
export interface ArgMeta {
|
|
84
90
|
name: string;
|
|
85
|
-
returns:
|
|
91
|
+
returns: GqlReturn;
|
|
86
92
|
argsOption: ArgsOption;
|
|
87
93
|
key: string;
|
|
88
94
|
idx: number;
|
|
@@ -102,17 +108,14 @@ export interface SliceMeta {
|
|
|
102
108
|
argLength: number;
|
|
103
109
|
defaultArgs: any[];
|
|
104
110
|
}
|
|
111
|
+
export declare const getDefaultArg: (argRef: Type | Type[]) => object;
|
|
105
112
|
export interface SignalMeta {
|
|
106
113
|
refName: string;
|
|
107
114
|
slices: SliceMeta[];
|
|
108
115
|
returns?: (of?: any) => Type;
|
|
109
116
|
prefix?: string;
|
|
117
|
+
enabled: boolean;
|
|
110
118
|
}
|
|
111
|
-
interface SignalDecoratorInput {
|
|
112
|
-
name: string;
|
|
113
|
-
prefix?: string;
|
|
114
|
-
}
|
|
115
|
-
export declare function Signal(returnsOrObj: (() => Type) | SignalDecoratorInput): (target: Type) => void;
|
|
116
119
|
export declare const createArgMetaDecorator: (type: InternalArgType) => (option?: {
|
|
117
120
|
nullable?: boolean;
|
|
118
121
|
}) => (prototype: object, key: string, idx: number) => void;
|
|
@@ -212,7 +215,7 @@ export declare const Job: (option?: {
|
|
|
212
215
|
export type Job = {
|
|
213
216
|
__InternalArg__: "Job";
|
|
214
217
|
} & BullJob;
|
|
215
|
-
type Guard = <Response extends SingleFieldType>(returns:
|
|
218
|
+
type Guard = <Response extends SingleFieldType>(returns: GqlReturn<Response>, signalOption?: SignalOption<UnType<Response>>, guards?: GuardType[]) => MethodDecorator;
|
|
216
219
|
export declare const Query: {
|
|
217
220
|
Public: Guard;
|
|
218
221
|
Every: Guard;
|
|
@@ -261,20 +264,57 @@ export declare const Schedule: {
|
|
|
261
264
|
Timeout: (timeout: number, options?: TimerOption) => MethodDecorator;
|
|
262
265
|
Destroy: (options?: InitOption) => MethodDecorator;
|
|
263
266
|
};
|
|
264
|
-
export declare function ResolveField(returns:
|
|
267
|
+
export declare function ResolveField(returns: GqlReturn, argsOption?: ArgsOption): (target: any, key: string, descriptor: PropertyDescriptor) => void;
|
|
265
268
|
export declare const Arg: {
|
|
266
|
-
Body: (name: string, returns:
|
|
267
|
-
Param: (name: string, returns:
|
|
268
|
-
Query: (name: string, returns:
|
|
269
|
-
Upload: (name: string, returns:
|
|
270
|
-
Msg: (name: string, returns:
|
|
271
|
-
Room: (name: string, returns:
|
|
269
|
+
Body: (name: string, returns: GqlReturn, argsOption?: ArgsOption) => (prototype: object, key: string, idx: number) => void;
|
|
270
|
+
Param: (name: string, returns: GqlReturn, argsOption?: ArgsOption) => (prototype: object, key: string, idx: number) => void;
|
|
271
|
+
Query: (name: string, returns: GqlReturn, argsOption?: ArgsOption) => (prototype: object, key: string, idx: number) => void;
|
|
272
|
+
Upload: (name: string, returns: GqlReturn, argsOption?: ArgsOption) => (prototype: object, key: string, idx: number) => void;
|
|
273
|
+
Msg: (name: string, returns: GqlReturn, argsOption?: ArgsOption) => (prototype: object, key: string, idx: number) => void;
|
|
274
|
+
Room: (name: string, returns: GqlReturn, argsOption?: ArgsOption) => (prototype: object, key: string, idx: number) => void;
|
|
272
275
|
};
|
|
273
276
|
export declare function Parent(): (prototype: object, key: string, idx: number) => void;
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
277
|
+
interface SigOptionV2 {
|
|
278
|
+
guards?: {
|
|
279
|
+
get: GuardType;
|
|
280
|
+
cru: GuardType;
|
|
281
|
+
};
|
|
282
|
+
prefix?: string;
|
|
283
|
+
}
|
|
284
|
+
type ExtendedGqlReturn<Return, Input, Full, Light, Insight> = Full extends Return ? Full : Full[] extends Return ? Full[] : Light extends Return ? Light : Light[] extends Return ? Light[] : Insight extends Return ? Insight : Return;
|
|
285
|
+
type ExtendSignals<Input, Full, Light, Insight, LibSignals extends Type[], _Endpoints = MergeAllActionTypes<LibSignals>> = {
|
|
286
|
+
[K in keyof _Endpoints as _Endpoints[K] extends (...args: any) => any ? K : never]: _Endpoints[K] extends (...args: infer Args) => Promise<infer Return & {
|
|
287
|
+
__Returns__?: infer Rts;
|
|
288
|
+
}> ? (...args: Args) => Promise<ExtendedGqlReturn<Return, Input, Full, Light, Insight> & (Rts extends unknown ? unknown : {
|
|
289
|
+
__Returns__: Rts;
|
|
290
|
+
})> : _Endpoints[K] extends (...args: infer Args) => infer Return & {
|
|
291
|
+
__Returns__?: infer Rts;
|
|
292
|
+
} ? (...args: Args) => ExtendedGqlReturn<Return, Input, Full, Light, Insight> & (Rts extends unknown ? unknown : {
|
|
293
|
+
__Returns__: Rts;
|
|
294
|
+
}) : never;
|
|
295
|
+
};
|
|
296
|
+
export interface SrvOption<T extends string, Srv extends {
|
|
297
|
+
[key: string]: Type;
|
|
298
|
+
}, Input = never, Full = never, Light = never, Insight = never> {
|
|
299
|
+
ref: T;
|
|
300
|
+
srv: Srv;
|
|
301
|
+
cnst?: ConstantModel<T, Input, Full, Light, Insight>;
|
|
302
|
+
}
|
|
303
|
+
export declare function internal<Srv extends {
|
|
304
|
+
[key: string]: any;
|
|
305
|
+
}, Full, InternalBuilder extends InternalApiBuilder<Srv, Doc<Full>>, LibInternals extends Type[]>(srv: ServiceModule<string, Srv, any, Full, any, any>, internalBuilder: InternalBuilder, ...libInternals: LibInternals): Type<BuildInternalApiSignal<InternalBuilder> & ExtendSignals<any, Full, any, any, LibInternals>>;
|
|
306
|
+
export declare function slice<T extends string, Input, Full extends BaseObject & {
|
|
307
|
+
status: string;
|
|
308
|
+
}, Light extends BaseObject, Insight extends {
|
|
309
|
+
count: number;
|
|
310
|
+
}, Srv extends {
|
|
311
|
+
[key: string]: any;
|
|
312
|
+
}, SliceBuilder extends SliceApiBuilder<Full, Light, Insight, Srv>, LibSlices extends Type[]>(srv: ServiceModule<T, Srv, Input, Full, Light, Insight>, option: SigOptionV2, sliceBuilder: SliceBuilder, ...libSlices: LibSlices): Type<BuildSliceSignal<T, SliceBuilder, Full, Light, Insight> & ExtendSignals<Input, Full, Light, Insight, LibSlices>>;
|
|
313
|
+
export declare function endpoint<Input, Full, Light, Insight, Srv extends {
|
|
314
|
+
[key: string]: any;
|
|
315
|
+
}, Builder extends ApiBuilder<Srv>, LibSignals extends Type[]>(srv: ServiceModule<string, Srv, Input, Full, Light, Insight>, builder: Builder, ...libSignals: LibSignals): Type<BuildApiSignal<Builder> & ExtendSignals<Input, Full, Light, Insight, LibSignals>>;
|
|
316
|
+
export declare const mergeSignals: <Endpoint, Internal, Slice = unknown>(signalRef: Type<Endpoint>, internalRef: Type<Internal>, sliceRef?: Type<Slice>) => Type<Endpoint & Internal & Slice>;
|
|
317
|
+
export type DefaultSignal<T extends string, Input, Full, Light, Insight, Filter extends FilterType, _CapitalizedT extends string = Capitalize<T>, _PurifiedInput = PurifiedModel<Input>, _QueryOfDoc = QueryOf<DocumentModel<Full>>, _Sort = SortOf<Filter>> = {
|
|
278
318
|
[K in T]: (id: string) => Promise<Full>;
|
|
279
319
|
} & {
|
|
280
320
|
[K in `light${_CapitalizedT}`]: (id: string) => Promise<Light>;
|
|
@@ -283,32 +323,21 @@ type DefaultSignalWithQuerySort<T extends string, Input, Full, Light, Insight, F
|
|
|
283
323
|
} & {
|
|
284
324
|
[K in `${T}Insight`]: (query: _QueryOfDoc) => Promise<Insight>;
|
|
285
325
|
} & {
|
|
286
|
-
[K in
|
|
287
|
-
} & {
|
|
288
|
-
[K in `create${_CapitalizedT}`]: (data: _DocInput, account: Account) => Promise<Full>;
|
|
326
|
+
[K in `create${_CapitalizedT}`]: (data: _PurifiedInput, account: Account) => Promise<Full>;
|
|
289
327
|
} & {
|
|
290
|
-
[K in `update${_CapitalizedT}`]: (id: string, data:
|
|
328
|
+
[K in `update${_CapitalizedT}`]: (id: string, data: _PurifiedInput, account: Account) => Promise<Full>;
|
|
291
329
|
} & {
|
|
292
330
|
[K in `remove${_CapitalizedT}`]: (id: string, account: Account) => Promise<Full>;
|
|
293
331
|
};
|
|
294
|
-
export declare function DbSignal<Srv>(constant: ConstantModel<string, any, BaseObject & {
|
|
295
|
-
status: string;
|
|
296
|
-
}, BaseObject, {
|
|
297
|
-
count: number;
|
|
298
|
-
}, any>, srv: Srv, option: {
|
|
299
|
-
guards: {
|
|
300
|
-
get: Guard;
|
|
301
|
-
cru: Guard;
|
|
302
|
-
};
|
|
303
|
-
omit?: ("get" | "list" | "insight" | "exist" | "create" | "update" | "remove")[];
|
|
304
|
-
}): Type<{ [K in keyof Srv as K extends string ? Uncapitalize<K> : never]: Srv[K]; }>;
|
|
305
332
|
export declare const getSigMeta: (sigRef: Type) => SignalMeta;
|
|
333
|
+
export declare const setSigMeta: (sigRef: Type, sigMeta: SignalMeta) => void;
|
|
306
334
|
export declare const getGqlMeta: (sigRef: Type, key: string) => GqlMeta;
|
|
307
335
|
export declare const getGqlMetaMapOnPrototype: (prototype: object) => Map<string, GqlMeta>;
|
|
308
336
|
export declare const getGqlMetas: (sigRef: Type) => GqlMeta[];
|
|
309
337
|
export declare const setGqlMetaMapOnPrototype: (prototype: object, gqlMetaMap: Map<string, GqlMeta>) => void;
|
|
310
338
|
export declare const getArgMetas: (sigRef: Type, key: string) => [ArgMeta[], InternalArgMeta[]];
|
|
311
339
|
export declare const setArgMetas: (sigRef: Type, key: string, argMetas: ArgMeta[], internalArgMetas: InternalArgMeta[]) => void;
|
|
340
|
+
export declare const getResolveFieldMetaMapOnPrototype: (prototype: object) => Map<string, ResolveFieldMeta>;
|
|
312
341
|
export declare const getResolveFieldMetas: (sigRef: Type) => ResolveFieldMeta[];
|
|
313
342
|
export declare const getControllerPrefix: (sigMeta: SignalMeta) => string | undefined;
|
|
314
343
|
export declare const getControllerPath: (gqlMeta: GqlMeta, paramArgMetas: ArgMeta[]) => string;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { GqlScalarName, Type } from "@akanjs/base";
|
|
2
|
+
import { ArgsOption, ArgType, SignalOption, SliceMeta } from "./signalDecorators";
|
|
3
|
+
export declare const signalInfo: {
|
|
4
|
+
database: Map<string, Type>;
|
|
5
|
+
service: Map<string, Type>;
|
|
6
|
+
serializedSignals: SerializedSignal[];
|
|
7
|
+
setDatabase(refName: string, signal: Type): void;
|
|
8
|
+
getDatabase(refName: string): Type | undefined;
|
|
9
|
+
setRefNameTemp(sigRef: Type, refName: string): void;
|
|
10
|
+
getRefNameTemp(sigRef: Type): string;
|
|
11
|
+
setPrefixTemp(sigRef: Type, prefix: string): void;
|
|
12
|
+
getPrefixTemp(sigRef: Type): string | undefined;
|
|
13
|
+
setHandlerKey(execFn: (...args: any) => any, key: string): void;
|
|
14
|
+
getHandlerKey(execFn: (...args: any) => any): string;
|
|
15
|
+
setService(refName: string, signal: Type): void;
|
|
16
|
+
getService(refName: string): Type | undefined;
|
|
17
|
+
registerSignals<Signals extends Type[]>(...signals: Signals): Signals;
|
|
18
|
+
serialize(sigRef: Type): SerializedSignal;
|
|
19
|
+
initialize(): object;
|
|
20
|
+
buildFetch(signals?: SerializedSignal[], cnstInfo?: {
|
|
21
|
+
database: Map<string, import("@akanjs/constant").ConstantModel<any, any, any, any, any, any, import("@akanjs/constant").DefaultOf<any>, import("@akanjs/constant").DefaultOf<any>, import("@akanjs/base").GetStateObject<any>, import("@akanjs/base").GetStateObject<any>, import("@akanjs/constant").DefaultOf<any>, any, any, any, import("mongoose").FilterQuery<any>>>;
|
|
22
|
+
scalar: Map<string, import("@akanjs/constant").ScalarConstantModel<any, any, any, any, any>>;
|
|
23
|
+
modelRefNameMap: Map<Type, string>;
|
|
24
|
+
getRefName<AllowEmpty extends boolean = false>(modelRef: Type, { allowEmpty }?: {
|
|
25
|
+
allowEmpty?: AllowEmpty;
|
|
26
|
+
}): AllowEmpty extends true ? string | undefined : string;
|
|
27
|
+
getModelType<AllowEmpty extends boolean = false>(modelRef: Type, { allowEmpty }?: {
|
|
28
|
+
allowEmpty?: AllowEmpty;
|
|
29
|
+
}): AllowEmpty extends true ? import("@akanjs/constant").ModelType | undefined : import("@akanjs/constant").ModelType;
|
|
30
|
+
setModelType(modelRef: Type, modelType: import("@akanjs/constant").ModelType): void;
|
|
31
|
+
isObject(modelRef: Type): boolean;
|
|
32
|
+
isFull(modelRef: Type): boolean;
|
|
33
|
+
isLight(modelRef: Type): boolean;
|
|
34
|
+
isInsight(modelRef: Type): boolean;
|
|
35
|
+
isFilter(modelRef: Type): boolean;
|
|
36
|
+
isScalar(modelRef: Type): boolean;
|
|
37
|
+
setDatabase(refName: string, cnst: import("@akanjs/constant").ConstantModel<any, any, any, any, any, any>): void;
|
|
38
|
+
getDatabase<AllowEmpty extends boolean = false>(refName: string, { allowEmpty }?: {
|
|
39
|
+
allowEmpty?: AllowEmpty;
|
|
40
|
+
}): AllowEmpty extends true ? import("@akanjs/constant").ConstantModel<any, any, any, any, any, any> | undefined : import("@akanjs/constant").ConstantModel<any, any, any, any, any, any>;
|
|
41
|
+
setScalar(refName: string, cnst: import("@akanjs/constant").ScalarConstantModel<any, any, any, any, any>): void;
|
|
42
|
+
getScalar<AllowEmpty extends boolean = false>(refName: string, { allowEmpty }?: {
|
|
43
|
+
allowEmpty?: AllowEmpty;
|
|
44
|
+
}): AllowEmpty extends true ? import("@akanjs/constant").ScalarConstantModel<any, any, any, any, any> | undefined : import("@akanjs/constant").ScalarConstantModel<any, any, any, any, any>;
|
|
45
|
+
getModelRef(refName: string, modelType: "input" | "full" | "light" | "insight" | "scalar"): Type | import("@akanjs/base").GqlScalar;
|
|
46
|
+
}): object;
|
|
47
|
+
registerClient: (cnst: any) => Promise<{
|
|
48
|
+
fetch: typeof fetch;
|
|
49
|
+
signals: SerializedSignal[];
|
|
50
|
+
}>;
|
|
51
|
+
};
|
|
52
|
+
export interface SerializedReturns {
|
|
53
|
+
refName: Exclude<GqlScalarName, "Map" | "Upload"> | (string & {});
|
|
54
|
+
modelType: "input" | "full" | "light" | "insight" | "scalar";
|
|
55
|
+
arrDepth: number;
|
|
56
|
+
}
|
|
57
|
+
export interface SerializedArg {
|
|
58
|
+
type: ArgType;
|
|
59
|
+
refName: Exclude<GqlScalarName, "Map"> | (string & {});
|
|
60
|
+
modelType: "input" | "insight" | "scalar";
|
|
61
|
+
name: string;
|
|
62
|
+
argsOption: ArgsOption;
|
|
63
|
+
arrDepth: number;
|
|
64
|
+
}
|
|
65
|
+
export interface SerializedEndpoint {
|
|
66
|
+
type: "query" | "mutation" | "pubsub" | "message";
|
|
67
|
+
signalOption?: SignalOption<any, any, any>;
|
|
68
|
+
returns: SerializedReturns;
|
|
69
|
+
args: SerializedArg[];
|
|
70
|
+
}
|
|
71
|
+
export interface SerializedSignal {
|
|
72
|
+
refName: string;
|
|
73
|
+
slices: SliceMeta[];
|
|
74
|
+
prefix?: string;
|
|
75
|
+
endpoint: {
|
|
76
|
+
[key: string]: SerializedEndpoint;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { BaseObject, PromiseOrObject, Type, UnType } from "@akanjs/base";
|
|
2
|
+
import { ConstantFieldTypeInput, DocumentModel, FieldToValue, ParamFieldType, PlainTypeToFieldType, PurifiedModel, QueryOf } from "@akanjs/constant";
|
|
3
|
+
import { ApiArgProps } from "./apiInfo";
|
|
4
|
+
import { Access, Account, ArgType, GuardType, InternalArgType, Job, Me, Req, Res, Self, SignalOption, UserIp, Ws } from "./signalDecorators";
|
|
5
|
+
export declare class SliceInfo<Full extends BaseObject, Light extends BaseObject, Insight extends {
|
|
6
|
+
count: number;
|
|
7
|
+
}, Srvs extends {
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
} = {
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}, Args extends any[] = [], InternalArgs extends any[] = [], ServerArgs extends any[] = []> {
|
|
12
|
+
readonly full: Type<Full>;
|
|
13
|
+
readonly light: Type<Light>;
|
|
14
|
+
readonly insight: Type<Insight>;
|
|
15
|
+
readonly args: {
|
|
16
|
+
type: ArgType;
|
|
17
|
+
name: string;
|
|
18
|
+
argRef: ConstantFieldTypeInput;
|
|
19
|
+
option?: ApiArgProps<boolean>;
|
|
20
|
+
}[];
|
|
21
|
+
readonly internalArgs: {
|
|
22
|
+
type: InternalArgType;
|
|
23
|
+
option?: ApiArgProps<boolean>;
|
|
24
|
+
}[];
|
|
25
|
+
readonly signalOption: SignalOption;
|
|
26
|
+
readonly guards: GuardType[];
|
|
27
|
+
execFn: ((...args: [...ServerArgs, ...InternalArgs]) => QueryOf<DocumentModel<Full>>) | null;
|
|
28
|
+
constructor(full: Type<Full>, light: Type<Light>, insight: Type<Insight>, signalOptionOrGuard?: SignalOption | GuardType, ...guards: GuardType[]);
|
|
29
|
+
param<Arg extends ParamFieldType, _ClientArg = FieldToValue<Arg>, _ServerArg = DocumentModel<_ClientArg>>(name: string, argRef: Arg, option?: Omit<ApiArgProps, "nullable">): SliceInfo<Full, Light, Insight, Srvs, [...Args, arg: _ClientArg], InternalArgs, [...ServerArgs, arg: _ServerArg]>;
|
|
30
|
+
body<ExplicitType = unknown, Arg extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, _ArgType = unknown extends ExplicitType ? FieldToValue<Arg> : ExplicitType, _ClientArg = PurifiedModel<_ArgType>, _ServerArg = DocumentModel<_ArgType>>(name: string, argRef: Arg, option?: ApiArgProps): SliceInfo<Full, Light, Insight, Srvs, [...Args, arg: _ClientArg], InternalArgs, [...ServerArgs, arg: _ServerArg]>;
|
|
31
|
+
search<ExplicitType = unknown, Arg extends ConstantFieldTypeInput = PlainTypeToFieldType<ExplicitType>, _ArgType = unknown extends ExplicitType ? FieldToValue<Arg> : ExplicitType, _ClientArg = PurifiedModel<_ArgType>, _ServerArg = DocumentModel<_ArgType>>(name: string, argRef: Arg, option?: Omit<ApiArgProps, "nullable">): SliceInfo<Full, Light, Insight, Srvs, [...Args, arg: _ClientArg | null], InternalArgs, [...ServerArgs, arg: _ServerArg | undefined]>;
|
|
32
|
+
with<ArgType extends InternalArgType>(argType: Exclude<ArgType, "Parent">, option?: ApiArgProps): SliceInfo<Full, Light, Insight, Srvs, Args, [...InternalArgs, arg: ArgType extends "Account" ? Account : ArgType extends "Me" ? Me : ArgType extends "Self" ? Self : ArgType extends "UserIp" ? UserIp : ArgType extends "Access" ? Access : ArgType extends "Req" ? Req : ArgType extends "Res" ? Res : ArgType extends "Ws" ? Ws : ArgType extends "Job" ? Job : never], ServerArgs>;
|
|
33
|
+
exec(query: (this: {
|
|
34
|
+
[K in keyof Srvs as K extends string ? Uncapitalize<K> : never]: Srvs[K];
|
|
35
|
+
}, ...args: [...ServerArgs, ...InternalArgs]) => PromiseOrObject<QueryOf<DocumentModel<Full>>>): this;
|
|
36
|
+
applySliceMeta(refName: string, sigRef: Type, key: string): void;
|
|
37
|
+
}
|
|
38
|
+
export type BuildSliceSignal<T extends string, SliceBuilder extends SliceApiBuilder<any, any, any>, Full extends BaseObject = BaseObject, Light extends BaseObject = BaseObject, Insight extends {
|
|
39
|
+
count: number;
|
|
40
|
+
} = {
|
|
41
|
+
count: number;
|
|
42
|
+
}, _Query extends QueryOf<DocumentModel<Full>> = QueryOf<DocumentModel<Full>>, _ApiMap = ReturnType<SliceBuilder>> = {
|
|
43
|
+
[K in `${T}List`]: (query: _Query | null, skip: number | null, limit: number | null, sort: string | null) => Promise<Full[]>;
|
|
44
|
+
} & {
|
|
45
|
+
[K in `${T}Insight`]: (query: _Query) => Promise<Insight>;
|
|
46
|
+
} & {
|
|
47
|
+
[K in keyof _ApiMap as `${T}List${Capitalize<K & string>}`]: _ApiMap[K] extends SliceInfo<infer Full, any, infer Insight, any, infer Args, any, any> ? (...args: [...Args, skip: number | null, limit: number | null, sort: string | null]) => Promise<Full[]> : never;
|
|
48
|
+
} & {
|
|
49
|
+
[K in keyof _ApiMap as `${T}Insight${Capitalize<K & string>}`]: _ApiMap[K] extends SliceInfo<any, any, infer Insight, any, infer Args, any, any> ? (...args: Args) => Promise<Insight> : never;
|
|
50
|
+
};
|
|
51
|
+
export declare const sliceInit: <Full extends BaseObject, Light extends BaseObject, Insight extends {
|
|
52
|
+
count: number;
|
|
53
|
+
}, Srvs extends {
|
|
54
|
+
[key: string]: any;
|
|
55
|
+
}>(full: Type<Full>, light: Type<Light>, insight: Type<Insight>) => (signalOptionOrGuard?: SignalOption | GuardType, ...guards: GuardType[]) => SliceInfo<Full, Light, Insight, Srvs, [], [], []>;
|
|
56
|
+
export type SliceApiBuilder<Full extends BaseObject, Light extends BaseObject, Insight extends {
|
|
57
|
+
count: number;
|
|
58
|
+
}, Srvs extends {
|
|
59
|
+
[key: string]: any;
|
|
60
|
+
} = {
|
|
61
|
+
[key: string]: any;
|
|
62
|
+
}, _ThisSrvs extends {
|
|
63
|
+
[key: string]: any;
|
|
64
|
+
} = {
|
|
65
|
+
[K in keyof Srvs as K extends string ? Uncapitalize<K> : never]: UnType<Srvs[K]>;
|
|
66
|
+
}> = (init: (signalOptionOrGuard?: SignalOption | GuardType, ...guards: GuardType[]) => SliceInfo<Full, Light, Insight, _ThisSrvs>) => {
|
|
67
|
+
[key: string]: SliceInfo<any, any, any, any, any, any>;
|
|
68
|
+
};
|