@akanjs/service 0.9.40 → 0.9.42

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.
@@ -34,9 +34,9 @@ var import_nest = require("@akanjs/nest");
34
34
  var import_serviceDecorators = require("./serviceDecorators");
35
35
  let BaseService = class extends (0, import_serviceDecorators.LogService)("BaseService") {
36
36
  onCleanup;
37
- websocket;
37
+ baseSignal;
38
38
  intervalPing() {
39
- this.websocket.pubsubPing((/* @__PURE__ */ new Date()).toISOString());
39
+ this.baseSignal.pubsubPing((/* @__PURE__ */ new Date()).toISOString());
40
40
  }
41
41
  async cleanup() {
42
42
  if (!this.onCleanup)
@@ -45,11 +45,11 @@ let BaseService = class extends (0, import_serviceDecorators.LogService)("BaseSe
45
45
  }
46
46
  };
47
47
  __decorateClass([
48
- (0, import_serviceDecorators.Use)()
48
+ (0, import_serviceDecorators.Gen)((env) => env.onCleanup)
49
49
  ], BaseService.prototype, "onCleanup", 2);
50
50
  __decorateClass([
51
- (0, import_serviceDecorators.Websocket)()
52
- ], BaseService.prototype, "websocket", 2);
51
+ (0, import_serviceDecorators.Sig)()
52
+ ], BaseService.prototype, "baseSignal", 2);
53
53
  __decorateClass([
54
54
  (0, import_nest.Interval)(5e3)
55
55
  ], BaseService.prototype, "intervalPing", 1);
@@ -28,18 +28,22 @@ var serviceDecorators_exports = {};
28
28
  __export(serviceDecorators_exports, {
29
29
  Db: () => Db,
30
30
  DbService: () => DbService,
31
+ Env: () => Env,
31
32
  ExtendedSettingService: () => ExtendedSettingService,
32
33
  ExtendedSummaryService: () => ExtendedSummaryService,
33
34
  ExtendedUserService: () => ExtendedUserService,
35
+ Gen: () => Gen,
34
36
  LogService: () => LogService,
35
37
  MixSrvs: () => MixSrvs,
36
- Queue: () => Queue,
37
38
  Service: () => Service,
38
39
  ServiceStorage: () => ServiceStorage,
40
+ Sig: () => Sig,
39
41
  Srv: () => Srv,
40
42
  Use: () => Use,
41
- Websocket: () => Websocket,
43
+ getServiceMeta: () => getServiceMeta,
44
+ getServiceRefs: () => getServiceRefs,
42
45
  isServiceEnabled: () => isServiceEnabled,
46
+ makeProvidersForSrv: () => makeProvidersForSrv,
43
47
  serviceOf: () => serviceOf
44
48
  });
45
49
  module.exports = __toCommonJS(serviceDecorators_exports);
@@ -56,12 +60,6 @@ const getServiceRefs = (refName) => {
56
60
  const setServiceRefs = (refName, services) => {
57
61
  Reflect.defineMetadata(refName, services, ServiceStorage.prototype);
58
62
  };
59
- const isServiceDefined = (srvRef) => {
60
- return Reflect.getMetadata("service", srvRef.prototype) ?? false;
61
- };
62
- const setServiceDefined = (srvRef) => {
63
- Reflect.defineMetadata("service", true, srvRef.prototype);
64
- };
65
63
  const setServiceMeta = (srvRef, meta) => {
66
64
  Reflect.defineMetadata("serviceMeta", meta, srvRef.prototype);
67
65
  };
@@ -103,17 +101,24 @@ function Use(name) {
103
101
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
104
102
  };
105
103
  }
106
- function Queue(name) {
104
+ function Env(envKey, generateFactory) {
107
105
  return function(prototype, key) {
108
106
  const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
109
- metadataMap.set(key, { type: "Queue", key, name: name ?? (0, import_common.capitalize)(key) });
107
+ metadataMap.set(key, { type: "Env", key, name: envKey, generateFactory });
110
108
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
111
109
  };
112
110
  }
113
- function Websocket(name) {
111
+ function Gen(generateFactory) {
114
112
  return function(prototype, key) {
115
113
  const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
116
- metadataMap.set(key, { type: "Websocket", key, name: name ?? (0, import_common.capitalize)(key) });
114
+ metadataMap.set(key, { type: "Gen", key, name: (0, import_common.capitalize)(key), generateFactory });
115
+ setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
116
+ };
117
+ }
118
+ function Sig(name) {
119
+ return function(prototype, key) {
120
+ const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
121
+ metadataMap.set(key, { type: "Sig", key, name: name ?? (0, import_common.capitalize)(key) });
117
122
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
118
123
  };
119
124
  }
@@ -124,9 +129,12 @@ function Db(name) {
124
129
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
125
130
  };
126
131
  }
127
- const serviceOf = (srvRef) => {
128
- if (isServiceDefined(srvRef))
129
- return srvRef;
132
+ const serviceOf = (target) => {
133
+ const serviceMeta = getServiceMeta(target);
134
+ if (!serviceMeta)
135
+ throw new Error(`Service Meta of ${target.name} not found`);
136
+ const srvRefs = getServiceRefs(serviceMeta.name);
137
+ const srvRef = srvRefs.length === 1 ? srvRefs[0] : ExtSrvs(srvRefs[0], [target]);
130
138
  const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
131
139
  for (const injectMeta of [...injectMetaMap.values()]) {
132
140
  if (injectMeta.type === "Db")
@@ -137,15 +145,16 @@ const serviceOf = (srvRef) => {
137
145
  const services = getServiceRefs(injectMeta.name);
138
146
  if (!services.length)
139
147
  throw new Error(`Service ${injectMeta.name} not found`);
140
- (0, import_common2.Inject)(services.at(-1))(srvRef.prototype, injectMeta.key);
141
- } else if (injectMeta.type === "Queue")
148
+ (0, import_common2.Inject)(services.at(0))(srvRef.prototype, injectMeta.key);
149
+ } else if (injectMeta.type === "Env")
142
150
  (0, import_common2.Inject)(injectMeta.name)(srvRef.prototype, injectMeta.key);
143
- else
151
+ else if (injectMeta.type === "Gen")
152
+ (0, import_common2.Inject)(injectMeta.name)(srvRef.prototype, injectMeta.key);
153
+ else if (injectMeta.type === "Sig")
144
154
  (0, import_common2.Inject)(injectMeta.name)(srvRef.prototype, injectMeta.key);
145
155
  }
146
156
  (0, import_mongoose.InjectConnection)()(srvRef.prototype, "connection");
147
157
  (0, import_common2.Injectable)()(srvRef);
148
- setServiceDefined(srvRef);
149
158
  return srvRef;
150
159
  };
151
160
  const AVOID_MIX_SRV_KEY_SET = /* @__PURE__ */ new Set(["onModuleInit", "onModuleDestroy"]);
@@ -159,10 +168,19 @@ function MixSrvs(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t1
159
168
  return [...acc, ...injectMetadataMap2];
160
169
  }, [])
161
170
  );
162
- Reflect.defineMetadata("service", false, Mix.prototype);
163
- Reflect.defineMetadata("inject", injectMetadataMap, Mix.prototype);
171
+ setServiceInjectMetaMapOnPrototype(Mix.prototype, injectMetadataMap);
164
172
  return Mix;
165
173
  }
174
+ function ExtSrvs(baseSrv, extSrvs) {
175
+ const injectMetadataMap = new Map(
176
+ [baseSrv, ...extSrvs].reduce((acc, srvRef) => {
177
+ const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
178
+ return [...acc, ...injectMetadataMap2];
179
+ }, [])
180
+ );
181
+ setServiceInjectMetaMapOnPrototype(baseSrv.prototype, injectMetadataMap);
182
+ return (0, import_common.applyMixins)(baseSrv, extSrvs);
183
+ }
166
184
  const LogService = (name) => {
167
185
  class LogService2 {
168
186
  logger = new import_common.Logger(name);
@@ -341,21 +359,48 @@ const ExtendedSummaryService = (database, srvRef, sigRef) => {
341
359
  const ExtendedSettingService = (database, srvRef, sigRef) => {
342
360
  return srvRef;
343
361
  };
362
+ const makeProvidersForSrv = (srvRef) => {
363
+ const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
364
+ const providers = [];
365
+ [...injectMetaMap.values()].forEach((injectMeta) => {
366
+ if (injectMeta.type === "Env") {
367
+ const envValue = process.env[injectMeta.name];
368
+ const generateFactory = injectMeta.generateFactory;
369
+ if (envValue === void 0)
370
+ throw new Error(`Environment variable ${injectMeta.name} not found`);
371
+ providers.push({
372
+ provide: injectMeta.name,
373
+ useFactory: (env) => generateFactory ? generateFactory(envValue, env) : envValue,
374
+ inject: ["GLOBAL_ENV"]
375
+ });
376
+ } else if (injectMeta.type === "Gen") {
377
+ const generateFactory = injectMeta.generateFactory;
378
+ if (!generateFactory)
379
+ throw new Error(`Generate factory not found for ${injectMeta.key}`);
380
+ providers.push({ provide: injectMeta.name, useFactory: generateFactory, inject: ["GLOBAL_ENV"] });
381
+ }
382
+ });
383
+ return providers;
384
+ };
344
385
  // Annotate the CommonJS export names for ESM import in node:
345
386
  0 && (module.exports = {
346
387
  Db,
347
388
  DbService,
389
+ Env,
348
390
  ExtendedSettingService,
349
391
  ExtendedSummaryService,
350
392
  ExtendedUserService,
393
+ Gen,
351
394
  LogService,
352
395
  MixSrvs,
353
- Queue,
354
396
  Service,
355
397
  ServiceStorage,
398
+ Sig,
356
399
  Srv,
357
400
  Use,
358
- Websocket,
401
+ getServiceMeta,
402
+ getServiceRefs,
359
403
  isServiceEnabled,
404
+ makeProvidersForSrv,
360
405
  serviceOf
361
406
  });
@@ -10,12 +10,12 @@ var __decorateClass = (decorators, target, key, kind) => {
10
10
  return result;
11
11
  };
12
12
  import { Interval } from "@akanjs/nest";
13
- import { LogService, Service, Use, Websocket } from "./serviceDecorators";
13
+ import { Gen, LogService, Service, Sig } from "./serviceDecorators";
14
14
  let BaseService = class extends LogService("BaseService") {
15
15
  onCleanup;
16
- websocket;
16
+ baseSignal;
17
17
  intervalPing() {
18
- this.websocket.pubsubPing((/* @__PURE__ */ new Date()).toISOString());
18
+ this.baseSignal.pubsubPing((/* @__PURE__ */ new Date()).toISOString());
19
19
  }
20
20
  async cleanup() {
21
21
  if (!this.onCleanup)
@@ -24,11 +24,11 @@ let BaseService = class extends LogService("BaseService") {
24
24
  }
25
25
  };
26
26
  __decorateClass([
27
- Use()
27
+ Gen((env) => env.onCleanup)
28
28
  ], BaseService.prototype, "onCleanup", 2);
29
29
  __decorateClass([
30
- Websocket()
31
- ], BaseService.prototype, "websocket", 2);
30
+ Sig()
31
+ ], BaseService.prototype, "baseSignal", 2);
32
32
  __decorateClass([
33
33
  Interval(5e3)
34
34
  ], BaseService.prototype, "intervalPing", 1);
@@ -25,12 +25,6 @@ const getServiceRefs = (refName) => {
25
25
  const setServiceRefs = (refName, services) => {
26
26
  Reflect.defineMetadata(refName, services, ServiceStorage.prototype);
27
27
  };
28
- const isServiceDefined = (srvRef) => {
29
- return Reflect.getMetadata("service", srvRef.prototype) ?? false;
30
- };
31
- const setServiceDefined = (srvRef) => {
32
- Reflect.defineMetadata("service", true, srvRef.prototype);
33
- };
34
28
  const setServiceMeta = (srvRef, meta) => {
35
29
  Reflect.defineMetadata("serviceMeta", meta, srvRef.prototype);
36
30
  };
@@ -72,17 +66,24 @@ function Use(name) {
72
66
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
73
67
  };
74
68
  }
75
- function Queue(name) {
69
+ function Env(envKey, generateFactory) {
76
70
  return function(prototype, key) {
77
71
  const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
78
- metadataMap.set(key, { type: "Queue", key, name: name ?? capitalize(key) });
72
+ metadataMap.set(key, { type: "Env", key, name: envKey, generateFactory });
79
73
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
80
74
  };
81
75
  }
82
- function Websocket(name) {
76
+ function Gen(generateFactory) {
83
77
  return function(prototype, key) {
84
78
  const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
85
- metadataMap.set(key, { type: "Websocket", key, name: name ?? capitalize(key) });
79
+ metadataMap.set(key, { type: "Gen", key, name: capitalize(key), generateFactory });
80
+ setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
81
+ };
82
+ }
83
+ function Sig(name) {
84
+ return function(prototype, key) {
85
+ const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
86
+ metadataMap.set(key, { type: "Sig", key, name: name ?? capitalize(key) });
86
87
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
87
88
  };
88
89
  }
@@ -93,9 +94,12 @@ function Db(name) {
93
94
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
94
95
  };
95
96
  }
96
- const serviceOf = (srvRef) => {
97
- if (isServiceDefined(srvRef))
98
- return srvRef;
97
+ const serviceOf = (target) => {
98
+ const serviceMeta = getServiceMeta(target);
99
+ if (!serviceMeta)
100
+ throw new Error(`Service Meta of ${target.name} not found`);
101
+ const srvRefs = getServiceRefs(serviceMeta.name);
102
+ const srvRef = srvRefs.length === 1 ? srvRefs[0] : ExtSrvs(srvRefs[0], [target]);
99
103
  const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
100
104
  for (const injectMeta of [...injectMetaMap.values()]) {
101
105
  if (injectMeta.type === "Db")
@@ -106,15 +110,16 @@ const serviceOf = (srvRef) => {
106
110
  const services = getServiceRefs(injectMeta.name);
107
111
  if (!services.length)
108
112
  throw new Error(`Service ${injectMeta.name} not found`);
109
- Inject(services.at(-1))(srvRef.prototype, injectMeta.key);
110
- } else if (injectMeta.type === "Queue")
113
+ Inject(services.at(0))(srvRef.prototype, injectMeta.key);
114
+ } else if (injectMeta.type === "Env")
111
115
  Inject(injectMeta.name)(srvRef.prototype, injectMeta.key);
112
- else
116
+ else if (injectMeta.type === "Gen")
117
+ Inject(injectMeta.name)(srvRef.prototype, injectMeta.key);
118
+ else if (injectMeta.type === "Sig")
113
119
  Inject(injectMeta.name)(srvRef.prototype, injectMeta.key);
114
120
  }
115
121
  InjectConnection()(srvRef.prototype, "connection");
116
122
  Injectable()(srvRef);
117
- setServiceDefined(srvRef);
118
123
  return srvRef;
119
124
  };
120
125
  const AVOID_MIX_SRV_KEY_SET = /* @__PURE__ */ new Set(["onModuleInit", "onModuleDestroy"]);
@@ -128,10 +133,19 @@ function MixSrvs(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t1
128
133
  return [...acc, ...injectMetadataMap2];
129
134
  }, [])
130
135
  );
131
- Reflect.defineMetadata("service", false, Mix.prototype);
132
- Reflect.defineMetadata("inject", injectMetadataMap, Mix.prototype);
136
+ setServiceInjectMetaMapOnPrototype(Mix.prototype, injectMetadataMap);
133
137
  return Mix;
134
138
  }
139
+ function ExtSrvs(baseSrv, extSrvs) {
140
+ const injectMetadataMap = new Map(
141
+ [baseSrv, ...extSrvs].reduce((acc, srvRef) => {
142
+ const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
143
+ return [...acc, ...injectMetadataMap2];
144
+ }, [])
145
+ );
146
+ setServiceInjectMetaMapOnPrototype(baseSrv.prototype, injectMetadataMap);
147
+ return applyMixins(baseSrv, extSrvs);
148
+ }
135
149
  const LogService = (name) => {
136
150
  class LogService2 {
137
151
  logger = new Logger(name);
@@ -310,20 +324,47 @@ const ExtendedSummaryService = (database, srvRef, sigRef) => {
310
324
  const ExtendedSettingService = (database, srvRef, sigRef) => {
311
325
  return srvRef;
312
326
  };
327
+ const makeProvidersForSrv = (srvRef) => {
328
+ const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
329
+ const providers = [];
330
+ [...injectMetaMap.values()].forEach((injectMeta) => {
331
+ if (injectMeta.type === "Env") {
332
+ const envValue = process.env[injectMeta.name];
333
+ const generateFactory = injectMeta.generateFactory;
334
+ if (envValue === void 0)
335
+ throw new Error(`Environment variable ${injectMeta.name} not found`);
336
+ providers.push({
337
+ provide: injectMeta.name,
338
+ useFactory: (env) => generateFactory ? generateFactory(envValue, env) : envValue,
339
+ inject: ["GLOBAL_ENV"]
340
+ });
341
+ } else if (injectMeta.type === "Gen") {
342
+ const generateFactory = injectMeta.generateFactory;
343
+ if (!generateFactory)
344
+ throw new Error(`Generate factory not found for ${injectMeta.key}`);
345
+ providers.push({ provide: injectMeta.name, useFactory: generateFactory, inject: ["GLOBAL_ENV"] });
346
+ }
347
+ });
348
+ return providers;
349
+ };
313
350
  export {
314
351
  Db,
315
352
  DbService,
353
+ Env,
316
354
  ExtendedSettingService,
317
355
  ExtendedSummaryService,
318
356
  ExtendedUserService,
357
+ Gen,
319
358
  LogService,
320
359
  MixSrvs,
321
- Queue,
322
360
  Service,
323
361
  ServiceStorage,
362
+ Sig,
324
363
  Srv,
325
364
  Use,
326
- Websocket,
365
+ getServiceMeta,
366
+ getServiceRefs,
327
367
  isServiceEnabled,
368
+ makeProvidersForSrv,
328
369
  serviceOf
329
370
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/service",
3
- "version": "0.9.40",
3
+ "version": "0.9.42",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,13 +1,13 @@
1
1
  import type { BaseSignal } from "@akanjs/signal";
2
- import { type GetServices, Websocket } from "./serviceDecorators";
2
+ import { type GetServices, Sig } from "./serviceDecorators";
3
3
  declare const BaseService_base: {
4
4
  new (): {
5
5
  logger: import("@akanjs/common").Logger;
6
6
  };
7
7
  };
8
8
  export declare class BaseService extends BaseService_base {
9
- protected onCleanup?: () => Promise<void>;
10
- websocket: Websocket<BaseSignal>;
9
+ onCleanup?: () => Promise<void>;
10
+ baseSignal: Sig<BaseSignal>;
11
11
  intervalPing(): void;
12
12
  cleanup(): Promise<void>;
13
13
  }
@@ -1,9 +1,10 @@
1
1
  import "reflect-metadata";
2
- import { BaseObject, Dayjs, type Prettify, Type } from "@akanjs/base";
2
+ import { BaseObject, type Prettify, Type } from "@akanjs/base";
3
3
  import { Logger } from "@akanjs/common";
4
4
  import { type DocumentModel, type FilterType, FindQueryOption, type GetActionObject, ListQueryOption, QueryOf, type SortOf } from "@akanjs/constant";
5
5
  import type { BaseMiddleware, Database, DatabaseModel, DataInputOf } from "@akanjs/document";
6
6
  import { FilterOutInternalArgs } from "@akanjs/signal";
7
+ import { type Provider } from "@nestjs/common";
7
8
  import type { Job, Queue as BullQueue } from "bull";
8
9
  import type { HydratedDocument } from "mongoose";
9
10
  import type { Server } from "socket.io";
@@ -14,11 +15,18 @@ export type GetServices<AllSrvs extends {
14
15
  };
15
16
  export declare class ServiceStorage {
16
17
  }
18
+ interface ServiceMeta {
19
+ name: string;
20
+ enabled: boolean;
21
+ }
22
+ export declare const getServiceRefs: (refName: string) => Type[];
23
+ export declare const getServiceMeta: (srvRef: Type) => ServiceMeta | undefined;
17
24
  export declare const isServiceEnabled: (srvRef: Type) => boolean;
18
25
  export interface ServiceInjectMeta {
19
- type: "Db" | "Srv" | "Use" | "Queue" | "Websocket";
26
+ type: "Db" | "Srv" | "Use" | "Env" | "Gen" | "Sig" | (string & {});
20
27
  name: string;
21
28
  key: string;
29
+ generateFactory?: (...args: any[]) => any;
22
30
  }
23
31
  interface ServiceOptions {
24
32
  enabled?: boolean;
@@ -27,14 +35,16 @@ interface ServiceOptions {
27
35
  export declare function Service(name: string, { enabled, serverMode }?: ServiceOptions): (target: Type) => Type;
28
36
  export declare function Srv(name?: string): PropertyDecorator;
29
37
  export declare function Use(name?: string): PropertyDecorator;
30
- export declare function Queue(name?: string): PropertyDecorator;
31
- export type Queue<Signal> = {
38
+ export declare function Env(envKey: string, generateFactory?: (envValue: string, options: any) => any): PropertyDecorator;
39
+ export declare function Gen(generateFactory: (options: any) => any): PropertyDecorator;
40
+ type Queue<Signal> = {
32
41
  [K in keyof Signal as K extends string ? Signal[K] extends (...args: any) => Promise<{
33
42
  __Returns__: "Done";
34
43
  }> ? 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> = {
44
+ } & {
45
+ queue: BullQueue;
46
+ };
47
+ type Websocket<Signal> = {
38
48
  [K in keyof Signal as K extends string ? Signal[K] extends (...args: any) => Promise<{
39
49
  __Returns__: "Subscribe";
40
50
  }> ? K : Signal[K] extends (...args: any) => {
@@ -45,10 +55,12 @@ export type Websocket<Signal> = {
45
55
  __Returns__: "Subscribe";
46
56
  } & infer R ? (...args: [...FilterOutInternalArgs<Args>, data: DocumentModel<R>]) => void : never;
47
57
  } & {
48
- server: Server;
58
+ websocket: Server;
49
59
  };
60
+ export declare function Sig(name?: string): PropertyDecorator;
61
+ export type Sig<Signal> = Queue<Signal> & Websocket<Signal>;
50
62
  export declare function Db(name: string): PropertyDecorator;
51
- export declare const serviceOf: (srvRef: Type) => Type;
63
+ export declare const serviceOf: (target: Type) => Type;
52
64
  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
65
  export declare const LogService: <T extends string>(name: T) => {
54
66
  new (): {
@@ -128,45 +140,14 @@ type DatabaseServiceWithQuerySort<T extends string, Input, Doc, Obj, Model, Insi
128
140
  [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
141
  }>;
130
142
  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> & {
143
+ 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, Model, Insight, Filter, Summary> & {
134
144
  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]; }>;
145
+ } & { [K in keyof Srv]: Srv[K] extends (...args: infer Args) => Promise<BaseObject> ? (...args: Args) => Promise<Doc> : Srv[K] extends (...args: infer Args) => Promise<BaseObject[]> ? (...args: Args) => Promise<Doc[]> : Srv[K] extends BaseObject ? Doc : Srv[K] extends BaseObject[] ? Doc[] : Srv[K]; }>;
144
146
  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
147
  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> & {
148
+ } & { [K in keyof Srv]: Srv[K] extends (...args: infer Args) => Promise<BaseObject> ? (...args: Args) => Promise<Doc> : Srv[K] extends (...args: infer Args) => Promise<BaseObject[]> ? (...args: Args) => Promise<Doc[]> : Srv[K] extends BaseObject ? Doc : Srv[K] extends BaseObject[] ? Doc[] : Srv[K]; }, "userService">>;
149
+ 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, Model, Insight, Filter, Summary> & {
162
150
  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]; }>;
151
+ } & { [K in keyof Srv]: Srv[K] extends (...args: infer Args) => Promise<BaseObject> ? (...args: Args) => Promise<Doc> : Srv[K] extends (...args: infer Args) => Promise<BaseObject[]> ? (...args: Args) => Promise<Doc[]> : Srv[K] extends BaseObject ? Doc : Srv[K] extends BaseObject[] ? Doc[] : Srv[K]; }>;
152
+ export declare const makeProvidersForSrv: (srvRef: Type) => Provider[];
172
153
  export {};