@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.
- package/cjs/src/base.service.js +4 -11
- package/cjs/src/serviceDecorators.js +90 -28
- package/esm/src/base.service.js +5 -12
- package/esm/src/serviceDecorators.js +83 -26
- package/package.json +1 -1
- package/src/base.service.d.ts +3 -4
- package/src/serviceDecorators.d.ts +62 -113
package/cjs/src/base.service.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
44
|
+
(0, import_serviceDecorators.Gen)((env) => env.onCleanup)
|
|
49
45
|
], BaseService.prototype, "onCleanup", 2);
|
|
50
46
|
__decorateClass([
|
|
51
|
-
(0, import_serviceDecorators.
|
|
52
|
-
], BaseService.prototype, "
|
|
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
|
-
|
|
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
|
|
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: "
|
|
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
|
|
123
|
+
function Sig(name) {
|
|
114
124
|
return function(prototype, key) {
|
|
115
125
|
const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
|
|
116
|
-
metadataMap.set(key, { type: "
|
|
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 = (
|
|
128
|
-
|
|
129
|
-
|
|
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(
|
|
141
|
-
} else if (injectMeta.type === "
|
|
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
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
172
|
+
restServices.reduce((acc, srvRef) => {
|
|
157
173
|
const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef);
|
|
158
|
-
(0, import_common.applyMixins)(Mix, [srvRef]
|
|
174
|
+
(0, import_common.applyMixins)(Mix, [srvRef]);
|
|
159
175
|
return [...acc, ...injectMetadataMap2];
|
|
160
176
|
}, [])
|
|
161
177
|
);
|
|
162
|
-
|
|
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
|
-
|
|
417
|
+
getAllServiceRefs,
|
|
418
|
+
getServiceMeta,
|
|
419
|
+
getServiceRefs,
|
|
359
420
|
isServiceEnabled,
|
|
421
|
+
makeProvidersForSrv,
|
|
360
422
|
serviceOf
|
|
361
423
|
});
|
package/esm/src/base.service.js
CHANGED
|
@@ -9,14 +9,10 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
9
9
|
__defProp(target, key, result);
|
|
10
10
|
return result;
|
|
11
11
|
};
|
|
12
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
23
|
+
Gen((env) => env.onCleanup)
|
|
28
24
|
], BaseService.prototype, "onCleanup", 2);
|
|
29
25
|
__decorateClass([
|
|
30
|
-
|
|
31
|
-
], BaseService.prototype, "
|
|
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
|
|
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: "
|
|
83
|
+
metadataMap.set(key, { type: "Gen", key, name: capitalize(key), generateFactory });
|
|
79
84
|
setServiceInjectMetaMapOnPrototype(prototype, metadataMap);
|
|
80
85
|
};
|
|
81
86
|
}
|
|
82
|
-
function
|
|
87
|
+
function Sig(name) {
|
|
83
88
|
return function(prototype, key) {
|
|
84
89
|
const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
|
|
85
|
-
metadataMap.set(key, { type: "
|
|
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 = (
|
|
97
|
-
|
|
98
|
-
|
|
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(
|
|
110
|
-
} else if (injectMeta.type === "
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
136
|
+
restServices.reduce((acc, srvRef) => {
|
|
126
137
|
const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef);
|
|
127
|
-
applyMixins(Mix, [srvRef]
|
|
138
|
+
applyMixins(Mix, [srvRef]);
|
|
128
139
|
return [...acc, ...injectMetadataMap2];
|
|
129
140
|
}, [])
|
|
130
141
|
);
|
|
131
|
-
|
|
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
|
-
|
|
380
|
+
getAllServiceRefs,
|
|
381
|
+
getServiceMeta,
|
|
382
|
+
getServiceRefs,
|
|
327
383
|
isServiceEnabled,
|
|
384
|
+
makeProvidersForSrv,
|
|
328
385
|
serviceOf
|
|
329
386
|
};
|
package/package.json
CHANGED
package/src/base.service.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import type { BaseSignal } from "@akanjs/signal";
|
|
2
|
-
import { type GetServices,
|
|
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
|
-
|
|
10
|
-
|
|
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,
|
|
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
|
-
[
|
|
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" | "
|
|
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
|
|
31
|
-
export
|
|
32
|
-
|
|
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
|
-
}> ?
|
|
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
|
|
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
|
-
|
|
54
|
+
queue: BullQueue;
|
|
55
|
+
websocket: Server;
|
|
49
56
|
};
|
|
50
57
|
export declare function Db(name: string): PropertyDecorator;
|
|
51
|
-
export declare const serviceOf: (
|
|
52
|
-
export declare function MixSrvs<
|
|
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
|
|
59
|
-
|
|
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?:
|
|
68
|
-
__listIds(query?:
|
|
69
|
-
__find(query?:
|
|
70
|
-
__findId(query?:
|
|
71
|
-
__pick(query?:
|
|
72
|
-
__pickId(query?:
|
|
73
|
-
__exists(query?:
|
|
74
|
-
__count(query?:
|
|
75
|
-
__insight(query?:
|
|
76
|
-
__search(query:
|
|
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:
|
|
81
|
-
__searchCount(query:
|
|
82
|
-
_preCreate(data:
|
|
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>):
|
|
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${
|
|
95
|
+
[K in `get${_CapitalizedT}`]: (id: string) => Promise<Doc>;
|
|
92
96
|
} & {
|
|
93
|
-
[K in `load${
|
|
97
|
+
[K in `load${_CapitalizedT}`]: (id?: string) => Promise<Doc | null>;
|
|
94
98
|
} & {
|
|
95
|
-
[K in `load${
|
|
99
|
+
[K in `load${_CapitalizedT}Many`]: (ids: string[]) => Promise<Doc[]>;
|
|
96
100
|
} & {
|
|
97
|
-
[K in `create${
|
|
101
|
+
[K in `create${_CapitalizedT}`]: (data: _DataInputOfDoc) => Promise<Doc>;
|
|
98
102
|
} & {
|
|
99
|
-
[K in `update${
|
|
103
|
+
[K in `update${_CapitalizedT}`]: (id: string, data: Partial<Doc>) => Promise<Doc>;
|
|
100
104
|
} & {
|
|
101
|
-
[K in `remove${
|
|
105
|
+
[K in `remove${_CapitalizedT}`]: (id: string) => Promise<Doc>;
|
|
102
106
|
} & {
|
|
103
|
-
[K in `search${
|
|
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${
|
|
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
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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 {};
|