@akanjs/service 0.9.41 → 0.9.43

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.
@@ -30,14 +30,10 @@ __export(base_service_exports, {
30
30
  allSrvs: () => allSrvs
31
31
  });
32
32
  module.exports = __toCommonJS(base_service_exports);
33
- var import_nest = require("@akanjs/nest");
34
33
  var import_serviceDecorators = require("./serviceDecorators");
35
34
  let BaseService = class extends (0, import_serviceDecorators.LogService)("BaseService") {
36
35
  onCleanup;
37
- websocket;
38
- intervalPing() {
39
- this.websocket.pubsubPing((/* @__PURE__ */ new Date()).toISOString());
40
- }
36
+ baseSignal;
41
37
  async cleanup() {
42
38
  if (!this.onCleanup)
43
39
  throw new Error("onCleanup is not defined");
@@ -45,14 +41,11 @@ let BaseService = class extends (0, import_serviceDecorators.LogService)("BaseSe
45
41
  }
46
42
  };
47
43
  __decorateClass([
48
- (0, import_serviceDecorators.Use)()
44
+ (0, import_serviceDecorators.Gen)((env) => env.onCleanup)
49
45
  ], BaseService.prototype, "onCleanup", 2);
50
46
  __decorateClass([
51
- (0, import_serviceDecorators.Websocket)()
52
- ], BaseService.prototype, "websocket", 2);
53
- __decorateClass([
54
- (0, import_nest.Interval)(5e3)
55
- ], BaseService.prototype, "intervalPing", 1);
47
+ (0, import_serviceDecorators.Sig)()
48
+ ], BaseService.prototype, "baseSignal", 2);
56
49
  BaseService = __decorateClass([
57
50
  (0, import_serviceDecorators.Service)("BaseService")
58
51
  ], BaseService);
@@ -28,18 +28,23 @@ 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
+ getAllServiceRefs: () => getAllServiceRefs,
44
+ getServiceMeta: () => getServiceMeta,
45
+ getServiceRefs: () => getServiceRefs,
42
46
  isServiceEnabled: () => isServiceEnabled,
47
+ makeProvidersForSrv: () => makeProvidersForSrv,
43
48
  serviceOf: () => serviceOf
44
49
  });
45
50
  module.exports = __toCommonJS(serviceDecorators_exports);
@@ -53,15 +58,13 @@ class ServiceStorage {
53
58
  const getServiceRefs = (refName) => {
54
59
  return Reflect.getMetadata(refName, ServiceStorage.prototype) ?? [];
55
60
  };
61
+ const getAllServiceRefs = () => {
62
+ const keys = Reflect.getMetadataKeys(ServiceStorage.prototype);
63
+ return keys.map((key) => getServiceRefs(key)[0]);
64
+ };
56
65
  const setServiceRefs = (refName, services) => {
57
66
  Reflect.defineMetadata(refName, services, ServiceStorage.prototype);
58
67
  };
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
68
  const setServiceMeta = (srvRef, meta) => {
66
69
  Reflect.defineMetadata("serviceMeta", meta, srvRef.prototype);
67
70
  };
@@ -103,17 +106,24 @@ function Use(name) {
103
106
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
104
107
  };
105
108
  }
106
- function Queue(name) {
109
+ function Env(envKey, generateFactory) {
110
+ return function(prototype, key) {
111
+ const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
112
+ metadataMap.set(key, { type: "Env", key, name: envKey, generateFactory });
113
+ setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
114
+ };
115
+ }
116
+ function Gen(generateFactory) {
107
117
  return function(prototype, key) {
108
118
  const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
109
- metadataMap.set(key, { type: "Queue", key, name: name ?? (0, import_common.capitalize)(key) });
119
+ metadataMap.set(key, { type: "Gen", key, name: (0, import_common.capitalize)(key), generateFactory });
110
120
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
111
121
  };
112
122
  }
113
- function Websocket(name) {
123
+ function Sig(name) {
114
124
  return function(prototype, key) {
115
125
  const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
116
- metadataMap.set(key, { type: "Websocket", key, name: name ?? (0, import_common.capitalize)(key) });
126
+ metadataMap.set(key, { type: "Sig", key, name: name ?? (0, import_common.capitalize)(key) });
117
127
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
118
128
  };
119
129
  }
@@ -124,9 +134,12 @@ function Db(name) {
124
134
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
125
135
  };
126
136
  }
127
- const serviceOf = (srvRef) => {
128
- if (isServiceDefined(srvRef))
129
- return srvRef;
137
+ const serviceOf = (target) => {
138
+ const serviceMeta = getServiceMeta(target);
139
+ if (!serviceMeta)
140
+ throw new Error(`Service Meta of ${target.name} not found`);
141
+ const srvRefs = getServiceRefs(serviceMeta.name);
142
+ const srvRef = srvRefs.length === 1 ? srvRefs[0] : ExtSrvs(srvRefs[0], [target]);
130
143
  const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
131
144
  for (const injectMeta of [...injectMetaMap.values()]) {
132
145
  if (injectMeta.type === "Db")
@@ -137,32 +150,44 @@ const serviceOf = (srvRef) => {
137
150
  const services = getServiceRefs(injectMeta.name);
138
151
  if (!services.length)
139
152
  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")
153
+ (0, import_common2.Inject)(services.at(0))(srvRef.prototype, injectMeta.key);
154
+ } else if (injectMeta.type === "Env")
142
155
  (0, import_common2.Inject)(injectMeta.name)(srvRef.prototype, injectMeta.key);
143
- else
156
+ else if (injectMeta.type === "Gen")
157
+ (0, import_common2.Inject)(injectMeta.name)(srvRef.prototype, injectMeta.key);
158
+ else if (injectMeta.type === "Sig")
144
159
  (0, import_common2.Inject)(injectMeta.name)(srvRef.prototype, injectMeta.key);
145
160
  }
146
161
  (0, import_mongoose.InjectConnection)()(srvRef.prototype, "connection");
147
162
  (0, import_common2.Injectable)()(srvRef);
148
- setServiceDefined(srvRef);
149
163
  return srvRef;
150
164
  };
151
- const AVOID_MIX_SRV_KEY_SET = /* @__PURE__ */ new Set(["onModuleInit", "onModuleDestroy"]);
152
- function MixSrvs(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) {
153
- class Mix extends t1 {
165
+ function MixSrvs(...services) {
166
+ if (services.length === 0)
167
+ throw new Error("MixSrvs requires at least one service");
168
+ const [baseService, ...restServices] = services;
169
+ class Mix extends baseService {
154
170
  }
155
171
  const injectMetadataMap = new Map(
156
- [t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20].filter((t) => !!t).reduce((acc, srvRef) => {
172
+ restServices.reduce((acc, srvRef) => {
157
173
  const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef);
158
- (0, import_common.applyMixins)(Mix, [srvRef], AVOID_MIX_SRV_KEY_SET);
174
+ (0, import_common.applyMixins)(Mix, [srvRef]);
159
175
  return [...acc, ...injectMetadataMap2];
160
176
  }, [])
161
177
  );
162
- Reflect.defineMetadata("service", false, Mix.prototype);
163
- Reflect.defineMetadata("inject", injectMetadataMap, Mix.prototype);
178
+ setServiceInjectMetaMapOnPrototype(Mix.prototype, injectMetadataMap);
164
179
  return Mix;
165
180
  }
181
+ function ExtSrvs(baseSrv, extSrvs) {
182
+ const injectMetadataMap = new Map(
183
+ [baseSrv, ...extSrvs].reduce((acc, srvRef) => {
184
+ const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
185
+ return [...acc, ...injectMetadataMap2];
186
+ }, [])
187
+ );
188
+ setServiceInjectMetaMapOnPrototype(baseSrv.prototype, injectMetadataMap);
189
+ return (0, import_common.applyMixins)(baseSrv, extSrvs);
190
+ }
166
191
  const LogService = (name) => {
167
192
  class LogService2 {
168
193
  logger = new import_common.Logger(name);
@@ -228,6 +253,15 @@ const DbService = (database, sigRef) => {
228
253
  async _postRemove(doc) {
229
254
  return doc;
230
255
  }
256
+ async _preSummarize() {
257
+ return {};
258
+ }
259
+ async summarize() {
260
+ if (!database.Summary)
261
+ return {};
262
+ const [dbSummary, serviceSummary] = await Promise.all([this.__databaseModel.getSummary(), this._preSummarize()]);
263
+ return { ...dbSummary, ...serviceSummary };
264
+ }
231
265
  async [`get${className}`](id) {
232
266
  return await this.__databaseModel[`get${className}`](id);
233
267
  }
@@ -341,21 +375,49 @@ const ExtendedSummaryService = (database, srvRef, sigRef) => {
341
375
  const ExtendedSettingService = (database, srvRef, sigRef) => {
342
376
  return srvRef;
343
377
  };
378
+ const makeProvidersForSrv = (srvRef) => {
379
+ const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
380
+ const providers = [];
381
+ [...injectMetaMap.values()].forEach((injectMeta) => {
382
+ if (injectMeta.type === "Env") {
383
+ const envValue = process.env[injectMeta.name];
384
+ const generateFactory = injectMeta.generateFactory;
385
+ if (envValue === void 0)
386
+ throw new Error(`Environment variable ${injectMeta.name} not found`);
387
+ providers.push({
388
+ provide: injectMeta.name,
389
+ useFactory: (env) => generateFactory ? generateFactory(envValue, env) : envValue,
390
+ inject: ["GLOBAL_ENV"]
391
+ });
392
+ } else if (injectMeta.type === "Gen") {
393
+ const generateFactory = injectMeta.generateFactory;
394
+ if (!generateFactory)
395
+ throw new Error(`Generate factory not found for ${injectMeta.key}`);
396
+ providers.push({ provide: injectMeta.name, useFactory: generateFactory, inject: ["GLOBAL_ENV"] });
397
+ }
398
+ });
399
+ return providers;
400
+ };
344
401
  // Annotate the CommonJS export names for ESM import in node:
345
402
  0 && (module.exports = {
346
403
  Db,
347
404
  DbService,
405
+ Env,
348
406
  ExtendedSettingService,
349
407
  ExtendedSummaryService,
350
408
  ExtendedUserService,
409
+ Gen,
351
410
  LogService,
352
411
  MixSrvs,
353
- Queue,
354
412
  Service,
355
413
  ServiceStorage,
414
+ Sig,
356
415
  Srv,
357
416
  Use,
358
- Websocket,
417
+ getAllServiceRefs,
418
+ getServiceMeta,
419
+ getServiceRefs,
359
420
  isServiceEnabled,
421
+ makeProvidersForSrv,
360
422
  serviceOf
361
423
  });
@@ -9,14 +9,10 @@ var __decorateClass = (decorators, target, key, kind) => {
9
9
  __defProp(target, key, result);
10
10
  return result;
11
11
  };
12
- import { Interval } from "@akanjs/nest";
13
- import { LogService, Service, Use, Websocket } from "./serviceDecorators";
12
+ import { Gen, LogService, Service, Sig } from "./serviceDecorators";
14
13
  let BaseService = class extends LogService("BaseService") {
15
14
  onCleanup;
16
- websocket;
17
- intervalPing() {
18
- this.websocket.pubsubPing((/* @__PURE__ */ new Date()).toISOString());
19
- }
15
+ baseSignal;
20
16
  async cleanup() {
21
17
  if (!this.onCleanup)
22
18
  throw new Error("onCleanup is not defined");
@@ -24,14 +20,11 @@ let BaseService = class extends LogService("BaseService") {
24
20
  }
25
21
  };
26
22
  __decorateClass([
27
- Use()
23
+ Gen((env) => env.onCleanup)
28
24
  ], BaseService.prototype, "onCleanup", 2);
29
25
  __decorateClass([
30
- Websocket()
31
- ], BaseService.prototype, "websocket", 2);
32
- __decorateClass([
33
- Interval(5e3)
34
- ], BaseService.prototype, "intervalPing", 1);
26
+ Sig()
27
+ ], BaseService.prototype, "baseSignal", 2);
35
28
  BaseService = __decorateClass([
36
29
  Service("BaseService")
37
30
  ], BaseService);
@@ -22,15 +22,13 @@ class ServiceStorage {
22
22
  const getServiceRefs = (refName) => {
23
23
  return Reflect.getMetadata(refName, ServiceStorage.prototype) ?? [];
24
24
  };
25
+ const getAllServiceRefs = () => {
26
+ const keys = Reflect.getMetadataKeys(ServiceStorage.prototype);
27
+ return keys.map((key) => getServiceRefs(key)[0]);
28
+ };
25
29
  const setServiceRefs = (refName, services) => {
26
30
  Reflect.defineMetadata(refName, services, ServiceStorage.prototype);
27
31
  };
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
32
  const setServiceMeta = (srvRef, meta) => {
35
33
  Reflect.defineMetadata("serviceMeta", meta, srvRef.prototype);
36
34
  };
@@ -72,17 +70,24 @@ function Use(name) {
72
70
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
73
71
  };
74
72
  }
75
- function Queue(name) {
73
+ function Env(envKey, generateFactory) {
74
+ return function(prototype, key) {
75
+ const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
76
+ metadataMap.set(key, { type: "Env", key, name: envKey, generateFactory });
77
+ setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
78
+ };
79
+ }
80
+ function Gen(generateFactory) {
76
81
  return function(prototype, key) {
77
82
  const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
78
- metadataMap.set(key, { type: "Queue", key, name: name ?? capitalize(key) });
83
+ metadataMap.set(key, { type: "Gen", key, name: capitalize(key), generateFactory });
79
84
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
80
85
  };
81
86
  }
82
- function Websocket(name) {
87
+ function Sig(name) {
83
88
  return function(prototype, key) {
84
89
  const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
85
- metadataMap.set(key, { type: "Websocket", key, name: name ?? capitalize(key) });
90
+ metadataMap.set(key, { type: "Sig", key, name: name ?? capitalize(key) });
86
91
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
87
92
  };
88
93
  }
@@ -93,9 +98,12 @@ function Db(name) {
93
98
  setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
94
99
  };
95
100
  }
96
- const serviceOf = (srvRef) => {
97
- if (isServiceDefined(srvRef))
98
- return srvRef;
101
+ const serviceOf = (target) => {
102
+ const serviceMeta = getServiceMeta(target);
103
+ if (!serviceMeta)
104
+ throw new Error(`Service Meta of ${target.name} not found`);
105
+ const srvRefs = getServiceRefs(serviceMeta.name);
106
+ const srvRef = srvRefs.length === 1 ? srvRefs[0] : ExtSrvs(srvRefs[0], [target]);
99
107
  const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
100
108
  for (const injectMeta of [...injectMetaMap.values()]) {
101
109
  if (injectMeta.type === "Db")
@@ -106,32 +114,44 @@ const serviceOf = (srvRef) => {
106
114
  const services = getServiceRefs(injectMeta.name);
107
115
  if (!services.length)
108
116
  throw new Error(`Service ${injectMeta.name} not found`);
109
- Inject(services.at(-1))(srvRef.prototype, injectMeta.key);
110
- } else if (injectMeta.type === "Queue")
117
+ Inject(services.at(0))(srvRef.prototype, injectMeta.key);
118
+ } else if (injectMeta.type === "Env")
111
119
  Inject(injectMeta.name)(srvRef.prototype, injectMeta.key);
112
- else
120
+ else if (injectMeta.type === "Gen")
121
+ Inject(injectMeta.name)(srvRef.prototype, injectMeta.key);
122
+ else if (injectMeta.type === "Sig")
113
123
  Inject(injectMeta.name)(srvRef.prototype, injectMeta.key);
114
124
  }
115
125
  InjectConnection()(srvRef.prototype, "connection");
116
126
  Injectable()(srvRef);
117
- setServiceDefined(srvRef);
118
127
  return srvRef;
119
128
  };
120
- const AVOID_MIX_SRV_KEY_SET = /* @__PURE__ */ new Set(["onModuleInit", "onModuleDestroy"]);
121
- function MixSrvs(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) {
122
- class Mix extends t1 {
129
+ function MixSrvs(...services) {
130
+ if (services.length === 0)
131
+ throw new Error("MixSrvs requires at least one service");
132
+ const [baseService, ...restServices] = services;
133
+ class Mix extends baseService {
123
134
  }
124
135
  const injectMetadataMap = new Map(
125
- [t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20].filter((t) => !!t).reduce((acc, srvRef) => {
136
+ restServices.reduce((acc, srvRef) => {
126
137
  const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef);
127
- applyMixins(Mix, [srvRef], AVOID_MIX_SRV_KEY_SET);
138
+ applyMixins(Mix, [srvRef]);
128
139
  return [...acc, ...injectMetadataMap2];
129
140
  }, [])
130
141
  );
131
- Reflect.defineMetadata("service", false, Mix.prototype);
132
- Reflect.defineMetadata("inject", injectMetadataMap, Mix.prototype);
142
+ setServiceInjectMetaMapOnPrototype(Mix.prototype, injectMetadataMap);
133
143
  return Mix;
134
144
  }
145
+ function ExtSrvs(baseSrv, extSrvs) {
146
+ const injectMetadataMap = new Map(
147
+ [baseSrv, ...extSrvs].reduce((acc, srvRef) => {
148
+ const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
149
+ return [...acc, ...injectMetadataMap2];
150
+ }, [])
151
+ );
152
+ setServiceInjectMetaMapOnPrototype(baseSrv.prototype, injectMetadataMap);
153
+ return applyMixins(baseSrv, extSrvs);
154
+ }
135
155
  const LogService = (name) => {
136
156
  class LogService2 {
137
157
  logger = new Logger(name);
@@ -197,6 +217,15 @@ const DbService = (database, sigRef) => {
197
217
  async _postRemove(doc) {
198
218
  return doc;
199
219
  }
220
+ async _preSummarize() {
221
+ return {};
222
+ }
223
+ async summarize() {
224
+ if (!database.Summary)
225
+ return {};
226
+ const [dbSummary, serviceSummary] = await Promise.all([this.__databaseModel.getSummary(), this._preSummarize()]);
227
+ return { ...dbSummary, ...serviceSummary };
228
+ }
200
229
  async [`get${className}`](id) {
201
230
  return await this.__databaseModel[`get${className}`](id);
202
231
  }
@@ -310,20 +339,48 @@ const ExtendedSummaryService = (database, srvRef, sigRef) => {
310
339
  const ExtendedSettingService = (database, srvRef, sigRef) => {
311
340
  return srvRef;
312
341
  };
342
+ const makeProvidersForSrv = (srvRef) => {
343
+ const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
344
+ const providers = [];
345
+ [...injectMetaMap.values()].forEach((injectMeta) => {
346
+ if (injectMeta.type === "Env") {
347
+ const envValue = process.env[injectMeta.name];
348
+ const generateFactory = injectMeta.generateFactory;
349
+ if (envValue === void 0)
350
+ throw new Error(`Environment variable ${injectMeta.name} not found`);
351
+ providers.push({
352
+ provide: injectMeta.name,
353
+ useFactory: (env) => generateFactory ? generateFactory(envValue, env) : envValue,
354
+ inject: ["GLOBAL_ENV"]
355
+ });
356
+ } else if (injectMeta.type === "Gen") {
357
+ const generateFactory = injectMeta.generateFactory;
358
+ if (!generateFactory)
359
+ throw new Error(`Generate factory not found for ${injectMeta.key}`);
360
+ providers.push({ provide: injectMeta.name, useFactory: generateFactory, inject: ["GLOBAL_ENV"] });
361
+ }
362
+ });
363
+ return providers;
364
+ };
313
365
  export {
314
366
  Db,
315
367
  DbService,
368
+ Env,
316
369
  ExtendedSettingService,
317
370
  ExtendedSummaryService,
318
371
  ExtendedUserService,
372
+ Gen,
319
373
  LogService,
320
374
  MixSrvs,
321
- Queue,
322
375
  Service,
323
376
  ServiceStorage,
377
+ Sig,
324
378
  Srv,
325
379
  Use,
326
- Websocket,
380
+ getAllServiceRefs,
381
+ getServiceMeta,
382
+ getServiceRefs,
327
383
  isServiceEnabled,
384
+ makeProvidersForSrv,
328
385
  serviceOf
329
386
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/service",
3
- "version": "0.9.41",
3
+ "version": "0.9.43",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,14 +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>;
11
- intervalPing(): void;
9
+ onCleanup?: () => Promise<void>;
10
+ baseSignal: Sig<BaseSignal>;
12
11
  cleanup(): Promise<void>;
13
12
  }
14
13
  export declare const allSrvs: {
@@ -1,24 +1,33 @@
1
1
  import "reflect-metadata";
2
- import { BaseObject, Dayjs, type Prettify, Type } from "@akanjs/base";
2
+ import { BaseObject, type MergeAllTypes, type Prettify, type PromiseOrObject, Type, type UnType } 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
- import type { BaseMiddleware, Database, DatabaseModel, DataInputOf } from "@akanjs/document";
5
+ import type { BaseMiddleware, Database, DatabaseModel, DataInputOf, QueryMethodPart } 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";
10
11
  export type GetServices<AllSrvs extends {
11
12
  [key: string]: Type | undefined;
12
13
  }> = {
13
- [key in keyof AllSrvs]: AllSrvs[key] extends Type<infer Srv> | undefined ? Srv : AllSrvs[key] extends Type<infer Srv> ? Srv : never;
14
+ [K in keyof AllSrvs]: UnType<NonNullable<AllSrvs[K]>>;
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 getAllServiceRefs: () => Type[];
24
+ export declare const getServiceMeta: (srvRef: Type) => ServiceMeta | undefined;
17
25
  export declare const isServiceEnabled: (srvRef: Type) => boolean;
18
26
  export interface ServiceInjectMeta {
19
- type: "Db" | "Srv" | "Use" | "Queue" | "Websocket";
27
+ type: "Db" | "Srv" | "Use" | "Env" | "Gen" | "Sig" | (string & {});
20
28
  name: string;
21
29
  key: string;
30
+ generateFactory?: (...args: any[]) => any;
22
31
  }
23
32
  interface ServiceOptions {
24
33
  enabled?: boolean;
@@ -27,146 +36,86 @@ interface ServiceOptions {
27
36
  export declare function Service(name: string, { enabled, serverMode }?: ServiceOptions): (target: Type) => Type;
28
37
  export declare function Srv(name?: string): PropertyDecorator;
29
38
  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<{
39
+ export declare function Env(envKey: string, generateFactory?: (envValue: string, options: any) => any): PropertyDecorator;
40
+ export declare function Gen(generateFactory: (options: any) => any): PropertyDecorator;
41
+ export declare function Sig(name?: string): PropertyDecorator;
42
+ type ServiceSignalReturnType = {
43
+ __Returns__: "Done";
44
+ } | {
45
+ __Returns__: "Subscribe";
46
+ };
47
+ export type Sig<Signal> = {
48
+ [K in keyof Signal as Signal[K] extends (...args: any) => PromiseOrObject<ServiceSignalReturnType> ? K : never]: Signal[K] extends (...args: infer Args) => PromiseOrObject<{
33
49
  __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<{
50
+ }> ? (...args: FilterOutInternalArgs<Args>) => Promise<Job> : Signal[K] extends (...args: infer Args) => PromiseOrObject<{
43
51
  __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;
52
+ } & infer Return> ? (...args: [...FilterOutInternalArgs<Args>, data: DocumentModel<Return>]) => void : never;
47
53
  } & {
48
- server: Server;
54
+ queue: BullQueue;
55
+ websocket: Server;
49
56
  };
50
57
  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>;
58
+ export declare const serviceOf: (target: Type) => Type;
59
+ export declare function MixSrvs<T extends Type[]>(...services: [...T]): Type<MergeAllTypes<T>>;
53
60
  export declare const LogService: <T extends string>(name: T) => {
54
61
  new (): {
55
62
  logger: Logger;
56
63
  };
57
64
  };
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
+ type DatabaseService<T extends string, Input, Doc, Obj, Model, Insight, Filter, Summary> = DatabaseServiceWithQuerySort<T, Input, Doc, Obj, Model, Insight, Summary, GetActionObject<Filter>, SortOf<Filter>>;
66
+ type DatabaseServiceWithQuerySort<T extends string, Input, Doc, Obj, Model, Insight, Summary, Query, Sort, _CapitalizedT extends Capitalize<T> = Capitalize<T>, _DataInputOfDoc extends DataInputOf<Input, Doc> = DataInputOf<Input, Doc>, _QueryOfDoc extends QueryOf<Doc> = QueryOf<Doc>, _FindQueryOption extends FindQueryOption<Sort, Obj> = FindQueryOption<Sort, Obj>, _ListQueryOption extends ListQueryOption<Sort, Obj> = ListQueryOption<Sort, Obj>> = {
65
67
  logger: Logger;
66
68
  __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<{
69
+ __list(query?: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<Doc[]>;
70
+ __listIds(query?: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<string[]>;
71
+ __find(query?: _QueryOfDoc, queryOption?: _FindQueryOption): Promise<Doc | null>;
72
+ __findId(query?: _QueryOfDoc, queryOption?: _FindQueryOption): Promise<string | null>;
73
+ __pick(query?: _QueryOfDoc, queryOption?: _FindQueryOption): Promise<Doc>;
74
+ __pickId(query?: _QueryOfDoc, queryOption?: _FindQueryOption): Promise<string>;
75
+ __exists(query?: _QueryOfDoc): Promise<string | null>;
76
+ __count(query?: _QueryOfDoc): Promise<number>;
77
+ __insight(query?: _QueryOfDoc): Promise<Insight>;
78
+ __search(query: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<{
77
79
  docs: Doc[];
78
80
  count: number;
79
81
  }>;
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>;
82
+ __searchDocs(query: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<Doc[]>;
83
+ __searchCount(query: _QueryOfDoc): Promise<number>;
84
+ _preCreate(data: _DataInputOfDoc): PromiseOrObject<_DataInputOfDoc>;
83
85
  _postCreate(doc: Doc): Promise<Doc> | Doc;
84
- _preUpdate(id: string, data: Partial<Doc>): Promise<Partial<Doc>> | Partial<Doc>;
86
+ _preUpdate(id: string, data: Partial<Doc>): PromiseOrObject<Partial<Doc>>;
85
87
  _postUpdate(doc: Doc): Promise<Doc> | Doc;
86
88
  _preRemove(id: string): Promise<void> | void;
87
89
  _postRemove(doc: Doc): Promise<Doc> | Doc;
90
+ _preSummarize(): PromiseOrObject<Partial<Summary>>;
91
+ summarize(): Promise<Summary>;
88
92
  } & Prettify<{
89
93
  [key in `${T}Model`]: Model;
90
94
  } & {
91
- [K in `get${Capitalize<T>}`]: (id: string) => Promise<Doc>;
95
+ [K in `get${_CapitalizedT}`]: (id: string) => Promise<Doc>;
92
96
  } & {
93
- [K in `load${Capitalize<T>}`]: (id?: string) => Promise<Doc | null>;
97
+ [K in `load${_CapitalizedT}`]: (id?: string) => Promise<Doc | null>;
94
98
  } & {
95
- [K in `load${Capitalize<T>}Many`]: (ids: string[]) => Promise<Doc[]>;
99
+ [K in `load${_CapitalizedT}Many`]: (ids: string[]) => Promise<Doc[]>;
96
100
  } & {
97
- [K in `create${Capitalize<T>}`]: (data: DataInputOf<Input, Doc>) => Promise<Doc>;
101
+ [K in `create${_CapitalizedT}`]: (data: _DataInputOfDoc) => Promise<Doc>;
98
102
  } & {
99
- [K in `update${Capitalize<T>}`]: (id: string, data: Partial<Doc>) => Promise<Doc>;
103
+ [K in `update${_CapitalizedT}`]: (id: string, data: Partial<Doc>) => Promise<Doc>;
100
104
  } & {
101
- [K in `remove${Capitalize<T>}`]: (id: string) => Promise<Doc>;
105
+ [K in `remove${_CapitalizedT}`]: (id: string) => Promise<Doc>;
102
106
  } & {
103
- [K in `search${Capitalize<T>}`]: (searchText: string, queryOption?: ListQueryOption<Sort, Obj>) => Promise<{
107
+ [K in `search${_CapitalizedT}`]: (searchText: string, queryOption?: _ListQueryOption) => Promise<{
104
108
  docs: Doc[];
105
109
  count: number;
106
110
  }>;
107
111
  } & {
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;
112
+ [K in `searchDocs${_CapitalizedT}`]: (searchText: string, queryOption?: _ListQueryOption) => Promise<Doc[]>;
127
113
  } & {
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]; }>;
114
+ [K in `searchCount${_CapitalizedT}`]: (searchText: string) => Promise<number>;
115
+ } & QueryMethodPart<Query, Sort, Obj, Doc, Insight, _FindQueryOption, _ListQueryOption>>;
116
+ export declare const DbService: <T extends string, Input, Doc extends HydratedDocument<any>, Model extends DatabaseModel<T, Input, Doc, Obj, Insight, Filter, Summary, _CapitalizedT, _QueryOfDoc, _Query, _Sort, _DataInputOfDoc, _FindQueryOption, _ListQueryOption>, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterType, Summary, Signal = unknown, _CapitalizedT extends string = Capitalize<T>, _QueryOfDoc extends QueryOf<Doc> = QueryOf<Doc>, _Query extends GetActionObject<Filter> = GetActionObject<Filter>, _Sort extends SortOf<Filter> = SortOf<Filter>, _DataInputOfDoc extends DataInputOf<Input, Doc> = DataInputOf<Input, Doc>, _FindQueryOption extends FindQueryOption<_Sort, Obj> = FindQueryOption<_Sort, Obj>, _ListQueryOption extends ListQueryOption<_Sort, Obj> = ListQueryOption<_Sort, Obj>>(database: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter, Summary>, sigRef?: Type<Signal>) => Type<DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter, Summary>>;
117
+ 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> & { [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]; }>;
118
+ 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> & { [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">>;
119
+ 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> & { [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]; }>;
120
+ export declare const makeProvidersForSrv: (srvRef: Type) => Provider[];
172
121
  export {};