@akanjs/service 0.0.39 → 0.0.41

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/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./src";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/service",
3
- "version": "0.0.39",
3
+ "version": "0.0.41",
4
4
  "type": "commonjs",
5
5
  "publishConfig": {
6
6
  "access": "public"
package/src/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./serviceDecorators";
@@ -0,0 +1,172 @@
1
+ import "reflect-metadata";
2
+ import { BaseObject, Dayjs, Type } from "@akanjs/base";
3
+ import { Logger } from "@akanjs/common";
4
+ import { type DocumentModel, type FilterType, FindQueryOption, type GetActionObject, ListQueryOption, QueryOf, type SortOf } from "@akanjs/constant";
5
+ import type { BaseMiddleware, Database, DatabaseModel, DataInputOf } from "@akanjs/document";
6
+ import { FilterOutInternalArgs } from "@akanjs/signal";
7
+ import type { Job, Queue as BullQueue } from "bull";
8
+ import type { HydratedDocument } from "mongoose";
9
+ import type { Server } from "socket.io";
10
+ export type GetServices<AllSrvs extends {
11
+ [key: string]: Type | undefined;
12
+ }> = {
13
+ [key in keyof AllSrvs]: AllSrvs[key] extends Type<infer Srv> | undefined ? Srv : AllSrvs[key] extends Type<infer Srv> ? Srv : never;
14
+ };
15
+ export declare class ServiceStorage {
16
+ }
17
+ export declare const isServiceEnabled: (srvRef: Type) => boolean;
18
+ export interface ServiceInjectMeta {
19
+ type: "Db" | "Srv" | "Use" | "Queue" | "Websocket";
20
+ name: string;
21
+ key: string;
22
+ }
23
+ interface ServiceOptions {
24
+ enabled?: boolean;
25
+ serverMode?: "batch" | "federation";
26
+ }
27
+ export declare function Service(name: string, { enabled, serverMode }?: ServiceOptions): (target: Type) => Type;
28
+ export declare function Srv(name?: string): PropertyDecorator;
29
+ export declare function Use(name?: string): PropertyDecorator;
30
+ export declare function Queue(name?: string): PropertyDecorator;
31
+ export type Queue<Signal> = {
32
+ [K in keyof Signal as K extends string ? Signal[K] extends (...args: any) => Promise<{
33
+ __Returns__: "Done";
34
+ }> ? K : never : never]: Signal[K] extends (...args: infer Args) => Promise<infer R> ? (...args: FilterOutInternalArgs<Args>) => Promise<Job> : never;
35
+ } & BullQueue;
36
+ export declare function Websocket(name?: string): PropertyDecorator;
37
+ export type Websocket<Signal> = {
38
+ [K in keyof Signal as K extends string ? Signal[K] extends (...args: any) => Promise<{
39
+ __Returns__: "Subscribe";
40
+ }> ? K : Signal[K] extends (...args: any) => {
41
+ __Returns__: "Subscribe";
42
+ } ? K : never : never]: Signal[K] extends (...args: infer Args) => Promise<{
43
+ __Returns__: "Subscribe";
44
+ } & infer R> ? (...args: [...FilterOutInternalArgs<Args>, data: DocumentModel<R>]) => Promise<void> : Signal[K] extends (...args: infer Args) => {
45
+ __Returns__: "Subscribe";
46
+ } & infer R ? (...args: [...FilterOutInternalArgs<Args>, data: DocumentModel<R>]) => void : never;
47
+ } & {
48
+ server: Server;
49
+ };
50
+ export declare function Db(name: string): PropertyDecorator;
51
+ export declare const serviceOf: (srvRef: Type) => Type;
52
+ export declare function MixSrvs<T1 = unknown, T2 = unknown, T3 = unknown, T4 = unknown, T5 = unknown, T6 = unknown, T7 = unknown, T8 = unknown, T9 = unknown, T10 = unknown, T11 = unknown, T12 = unknown, T13 = unknown, T14 = unknown, T15 = unknown, T16 = unknown, T17 = unknown, T18 = unknown, T19 = unknown, T20 = unknown>(t1: Type<T1>, t2?: Type<T2>, t3?: Type<T3>, t4?: Type<T4>, t5?: Type<T5>, t6?: Type<T6>, t7?: Type<T7>, t8?: Type<T8>, t9?: Type<T9>, t10?: Type<T10>, t11?: Type<T11>, t12?: Type<T12>, t13?: Type<T13>, t14?: Type<T14>, t15?: Type<T15>, t16?: Type<T16>, t17?: Type<T17>, t18?: Type<T18>, t19?: Type<T19>, t20?: Type<T20>): Type<T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11 & T12 & T13 & T14 & T15 & T16 & T17 & T18 & T19 & T20>;
53
+ export declare const LogService: <T extends string>(name: T) => {
54
+ new (): {
55
+ logger: Logger;
56
+ };
57
+ };
58
+ type QueueService<Signal> = {
59
+ [K in keyof Signal as K extends string ? Signal[K] extends (...args: any) => Promise<{
60
+ __Returns__: "Done";
61
+ }> ? K : never : never]: Signal[K] extends (...args: infer Args) => Promise<infer R> ? (...args: FilterOutInternalArgs<Args>) => Promise<Job> : never;
62
+ };
63
+ type DatabaseService<T extends string, Input, Doc, Obj, Model, Insight, Filter, Summary> = DatabaseServiceWithQuerySort<T, Input, Doc, Obj, Model, Insight, GetActionObject<Filter>, SortOf<Filter>>;
64
+ type DatabaseServiceWithQuerySort<T extends string, Input, Doc, Obj, Model, Insight, Query, Sort> = {
65
+ logger: Logger;
66
+ __databaseModel: Model;
67
+ __list(query?: QueryOf<Doc>, queryOption?: ListQueryOption<Sort, Obj>): Promise<Doc[]>;
68
+ __listIds(query?: QueryOf<Doc>, queryOption?: ListQueryOption<Sort, Obj>): Promise<string[]>;
69
+ __find(query?: QueryOf<Doc>, queryOption?: FindQueryOption<Sort, Obj>): Promise<Doc | null>;
70
+ __findId(query?: QueryOf<Doc>, queryOption?: FindQueryOption<Sort, Obj>): Promise<string | null>;
71
+ __pick(query?: QueryOf<Doc>, queryOption?: FindQueryOption<Sort, Obj>): Promise<Doc>;
72
+ __pickId(query?: QueryOf<Doc>, queryOption?: FindQueryOption<Sort, Obj>): Promise<string>;
73
+ __exists(query?: QueryOf<Doc>): Promise<string | null>;
74
+ __count(query?: QueryOf<Doc>): Promise<number>;
75
+ __insight(query?: QueryOf<Doc>): Promise<Insight>;
76
+ __search(query: QueryOf<Doc>, queryOption?: ListQueryOption<Sort, Obj>): Promise<{
77
+ docs: Doc[];
78
+ count: number;
79
+ }>;
80
+ __searchDocs(query: QueryOf<Doc>, queryOption?: ListQueryOption<Sort, Obj>): Promise<Doc[]>;
81
+ __searchCount(query: QueryOf<Doc>): Promise<number>;
82
+ _preCreate(data: DataInputOf<Input, Doc>): Promise<DataInputOf<Input, Doc>> | DataInputOf<Input, Doc>;
83
+ _postCreate(doc: Doc): Promise<Doc> | Doc;
84
+ _preUpdate(id: string, data: Partial<Doc>): Promise<Partial<Doc>> | Partial<Doc>;
85
+ _postUpdate(doc: Doc): Promise<Doc> | Doc;
86
+ _preRemove(id: string): Promise<void> | void;
87
+ _postRemove(doc: Doc): Promise<Doc> | Doc;
88
+ } & {
89
+ [key in `${T}Model`]: Model;
90
+ } & {
91
+ [K in `get${Capitalize<T>}`]: (id: string) => Promise<Doc>;
92
+ } & {
93
+ [K in `load${Capitalize<T>}`]: (id?: string) => Promise<Doc | null>;
94
+ } & {
95
+ [K in `load${Capitalize<T>}Many`]: (ids: string[]) => Promise<Doc[]>;
96
+ } & {
97
+ [K in `create${Capitalize<T>}`]: (data: DataInputOf<Input, Doc>) => Promise<Doc>;
98
+ } & {
99
+ [K in `update${Capitalize<T>}`]: (id: string, data: Partial<Doc>) => Promise<Doc>;
100
+ } & {
101
+ [K in `remove${Capitalize<T>}`]: (id: string) => Promise<Doc>;
102
+ } & {
103
+ [K in `search${Capitalize<T>}`]: (searchText: string, queryOption?: ListQueryOption<Sort, Obj>) => Promise<{
104
+ docs: Doc[];
105
+ count: number;
106
+ }>;
107
+ } & {
108
+ [K in `searchDocs${Capitalize<T>}`]: (searchText: string, queryOption?: ListQueryOption<Sort, Obj>) => Promise<Doc[]>;
109
+ } & {
110
+ [K in `searchCount${Capitalize<T>}`]: (searchText: string) => Promise<number>;
111
+ } & {
112
+ [K in keyof Query as K extends string ? `list${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args, queryOption?: ListQueryOption<Sort, Obj>]) => Promise<Doc[]> : never;
113
+ } & {
114
+ [K in keyof Query as K extends string ? `listIds${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args, queryOption?: ListQueryOption<Sort, Obj>]) => Promise<string[]> : never;
115
+ } & {
116
+ [K in keyof Query as K extends string ? `find${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args, queryOption?: FindQueryOption<Sort, Obj>]) => Promise<Doc | null> : never;
117
+ } & {
118
+ [K in keyof Query as K extends string ? `findId${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args, queryOption?: FindQueryOption<Sort, Obj>]) => Promise<string | null> : never;
119
+ } & {
120
+ [K in keyof Query as K extends string ? `pick${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args, queryOption?: FindQueryOption<Sort, Obj>]) => Promise<Doc> : never;
121
+ } & {
122
+ [K in keyof Query as K extends string ? `pickId${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args, queryOption?: FindQueryOption<Sort, Obj>]) => Promise<string> : never;
123
+ } & {
124
+ [K in keyof Query as K extends string ? `exists${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args]) => Promise<string | null> : never;
125
+ } & {
126
+ [K in keyof Query as K extends string ? `count${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args]) => Promise<number> : never;
127
+ } & {
128
+ [K in keyof Query as K extends string ? `insight${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args]) => Promise<Insight> : never;
129
+ };
130
+ export declare const DbService: <T extends string, Input, Doc extends HydratedDocument<any>, Model extends DatabaseModel<T, Input, Doc, Obj, Insight, Filter, Summary>, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterType, Summary, Signal = unknown>(database: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter, Summary>, sigRef?: Type<Signal>) => Type<DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter, Summary>>;
131
+ export declare const ExtendedUserService: <T extends string, Input, Doc extends HydratedDocument<any>, Model extends DatabaseModel<T, Input, Doc, Obj, Insight, Filter, Summary>, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterType, Summary, Srv, Signal = unknown>(database: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter, Summary>, srvRef: Type<Srv>, sigRef?: Type<Signal>) => Type<DatabaseService<T, Input, Doc, BaseObject & {
132
+ nickname: string;
133
+ }, Model, Insight, Filter, Summary> & {
134
+ queue: QueueService<Signal>;
135
+ } & { [K in keyof Srv]: Srv[K] extends (...args: infer Args) => Promise<BaseObject & {
136
+ nickname: string;
137
+ }> ? (...args: Args) => Promise<Doc> : Srv[K] extends (...args: infer Args) => Promise<(BaseObject & {
138
+ nickname: string;
139
+ })[]> ? (...args: Args) => Promise<Doc[]> : Srv[K] extends BaseObject & {
140
+ nickname: string;
141
+ } ? Doc : Srv[K] extends (BaseObject & {
142
+ nickname: string;
143
+ })[] ? Doc[] : Srv[K]; }>;
144
+ export declare const ExtendedSummaryService: <T extends string, Input, Doc extends HydratedDocument<any>, Model, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterType, Summary, Srv, Signal = unknown>(database: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter, Summary>, srvRef: Type<Srv>, sigRef?: Type<Signal>) => Type<Omit<DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter, Summary> & {
145
+ queue: QueueService<Signal>;
146
+ } & { [K in keyof Srv]: Srv[K] extends (...args: infer Args) => Promise<BaseObject & {
147
+ type: string;
148
+ at: Dayjs;
149
+ }> ? (...args: Args) => Promise<Doc> : Srv[K] extends (...args: infer Args) => Promise<(BaseObject & {
150
+ type: string;
151
+ at: Dayjs;
152
+ })[]> ? (...args: Args) => Promise<Doc[]> : Srv[K] extends BaseObject & {
153
+ type: string;
154
+ at: Dayjs;
155
+ } ? Doc : Srv[K] extends (BaseObject & {
156
+ type: string;
157
+ at: Dayjs;
158
+ })[] ? Doc[] : Srv[K]; }, "userService">>;
159
+ export declare const ExtendedSettingService: <T extends string, Input, Doc extends HydratedDocument<any>, Model extends DatabaseModel<T, Input, Doc, Obj, Insight, Filter, Summary>, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterType, Summary, Srv, Signal = unknown>(database: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter, Summary>, srvRef: Type<Srv>, sigRef?: Type<Signal>) => Type<DatabaseService<T, Input, Doc, BaseObject & {
160
+ resignupDays: number;
161
+ }, Model, Insight, Filter, Summary> & {
162
+ queue: QueueService<Signal>;
163
+ } & { [K in keyof Srv]: Srv[K] extends (...args: infer Args) => Promise<BaseObject & {
164
+ resignupDays: number;
165
+ }> ? (...args: Args) => Promise<Doc> : Srv[K] extends (...args: infer Args) => Promise<(BaseObject & {
166
+ resignupDays: number;
167
+ })[]> ? (...args: Args) => Promise<Doc[]> : Srv[K] extends BaseObject & {
168
+ resignupDays: number;
169
+ } ? Doc : Srv[K] extends (BaseObject & {
170
+ resignupDays: number;
171
+ })[] ? Doc[] : Srv[K]; }>;
172
+ export {};