@akanjs/service 0.9.48 → 0.9.50
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 +12 -20
- package/cjs/src/index.js +5 -1
- package/cjs/src/serviceDecorators.js +28 -21
- package/cjs/src/serviceInfo.js +52 -0
- package/cjs/src/serviceModule.js +40 -0
- package/esm/src/base.service.js +11 -20
- package/esm/src/index.js +2 -0
- package/esm/src/serviceDecorators.js +23 -17
- package/esm/src/serviceInfo.js +29 -0
- package/esm/src/serviceModule.js +17 -0
- package/package.json +1 -1
- package/src/base.service.d.ts +11 -18
- package/src/index.d.ts +2 -0
- package/src/serviceDecorators.d.ts +12 -11
- package/src/serviceInfo.d.ts +11 -0
- package/src/serviceModule.d.ts +13 -0
package/cjs/src/base.service.js
CHANGED
|
@@ -27,46 +27,38 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
27
27
|
var base_service_exports = {};
|
|
28
28
|
__export(base_service_exports, {
|
|
29
29
|
BaseService: () => BaseService,
|
|
30
|
-
allSrvs: () => allSrvs
|
|
30
|
+
allSrvs: () => allSrvs,
|
|
31
|
+
srv: () => srv
|
|
31
32
|
});
|
|
32
33
|
module.exports = __toCommonJS(base_service_exports);
|
|
33
|
-
var import_dictionary = require("@akanjs/dictionary");
|
|
34
34
|
var import_serviceDecorators = require("./serviceDecorators");
|
|
35
|
-
|
|
35
|
+
var import_serviceInfo = require("./serviceInfo");
|
|
36
|
+
var import_serviceModule = require("./serviceModule");
|
|
37
|
+
class BaseService extends (0, import_serviceDecorators.serve)("base") {
|
|
36
38
|
onCleanup;
|
|
37
39
|
baseSignal;
|
|
38
40
|
publishPing() {
|
|
39
41
|
this.baseSignal.pubsubPing("ping");
|
|
40
42
|
}
|
|
41
|
-
l(lang, key) {
|
|
42
|
-
try {
|
|
43
|
-
const res = { lang, key, str: (0, import_dictionary.translate)(lang, key) };
|
|
44
|
-
return res;
|
|
45
|
-
} catch (e) {
|
|
46
|
-
return { lang, key, str: key };
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
getDictionary(lang) {
|
|
50
|
-
return (0, import_dictionary.getDictionary)(lang);
|
|
51
|
-
}
|
|
52
43
|
async cleanup() {
|
|
53
44
|
if (!this.onCleanup)
|
|
54
45
|
throw new Error("onCleanup is not defined");
|
|
55
46
|
await this.onCleanup();
|
|
56
47
|
}
|
|
57
|
-
}
|
|
48
|
+
}
|
|
58
49
|
__decorateClass([
|
|
59
50
|
(0, import_serviceDecorators.Gen)((env) => env.onCleanup)
|
|
60
51
|
], BaseService.prototype, "onCleanup", 2);
|
|
61
52
|
__decorateClass([
|
|
62
53
|
(0, import_serviceDecorators.Sig)()
|
|
63
54
|
], BaseService.prototype, "baseSignal", 2);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
55
|
+
const allSrvs = import_serviceInfo.serviceInfo.registerServices({ BaseService });
|
|
56
|
+
const srv = {
|
|
57
|
+
base: new import_serviceModule.ServiceModule("base", { BaseService })
|
|
58
|
+
};
|
|
68
59
|
// Annotate the CommonJS export names for ESM import in node:
|
|
69
60
|
0 && (module.exports = {
|
|
70
61
|
BaseService,
|
|
71
|
-
allSrvs
|
|
62
|
+
allSrvs,
|
|
63
|
+
srv
|
|
72
64
|
});
|
package/cjs/src/index.js
CHANGED
|
@@ -16,8 +16,12 @@ var src_exports = {};
|
|
|
16
16
|
module.exports = __toCommonJS(src_exports);
|
|
17
17
|
__reExport(src_exports, require("./serviceDecorators"), module.exports);
|
|
18
18
|
__reExport(src_exports, require("./base.service"), module.exports);
|
|
19
|
+
__reExport(src_exports, require("./serviceInfo"), module.exports);
|
|
20
|
+
__reExport(src_exports, require("./serviceModule"), module.exports);
|
|
19
21
|
// Annotate the CommonJS export names for ESM import in node:
|
|
20
22
|
0 && (module.exports = {
|
|
21
23
|
...require("./serviceDecorators"),
|
|
22
|
-
...require("./base.service")
|
|
24
|
+
...require("./base.service"),
|
|
25
|
+
...require("./serviceInfo"),
|
|
26
|
+
...require("./serviceModule")
|
|
23
27
|
});
|
|
@@ -32,7 +32,6 @@ __export(serviceDecorators_exports, {
|
|
|
32
32
|
Gen: () => Gen,
|
|
33
33
|
LogService: () => LogService,
|
|
34
34
|
MixSrvs: () => MixSrvs,
|
|
35
|
-
Service: () => Service,
|
|
36
35
|
ServiceStorage: () => ServiceStorage,
|
|
37
36
|
Sig: () => Sig,
|
|
38
37
|
Srv: () => Srv,
|
|
@@ -42,12 +41,14 @@ __export(serviceDecorators_exports, {
|
|
|
42
41
|
getServiceRefs: () => getServiceRefs,
|
|
43
42
|
isServiceEnabled: () => isServiceEnabled,
|
|
44
43
|
makeProvidersForSrv: () => makeProvidersForSrv,
|
|
45
|
-
|
|
44
|
+
serve: () => serve,
|
|
45
|
+
serviceOf: () => serviceOf,
|
|
46
|
+
setServiceRefs: () => setServiceRefs
|
|
46
47
|
});
|
|
47
48
|
module.exports = __toCommonJS(serviceDecorators_exports);
|
|
48
49
|
var import_reflect_metadata = require("reflect-metadata");
|
|
49
50
|
var import_common = require("@akanjs/common");
|
|
50
|
-
var
|
|
51
|
+
var import_document = require("@akanjs/document");
|
|
51
52
|
var import_common2 = require("@nestjs/common");
|
|
52
53
|
var import_mongoose = require("@nestjs/mongoose");
|
|
53
54
|
class ServiceStorage {
|
|
@@ -63,10 +64,10 @@ const setServiceRefs = (refName, services) => {
|
|
|
63
64
|
Reflect.defineMetadata(refName, services, ServiceStorage.prototype);
|
|
64
65
|
};
|
|
65
66
|
const setServiceMeta = (srvRef, meta) => {
|
|
66
|
-
Reflect.defineMetadata("
|
|
67
|
+
Reflect.defineMetadata("akan:service", meta, srvRef.prototype);
|
|
67
68
|
};
|
|
68
69
|
const getServiceMeta = (srvRef) => {
|
|
69
|
-
return Reflect.getMetadata("
|
|
70
|
+
return Reflect.getMetadata("akan:service", srvRef.prototype);
|
|
70
71
|
};
|
|
71
72
|
const isServiceEnabled = (srvRef) => {
|
|
72
73
|
const meta = getServiceMeta(srvRef);
|
|
@@ -78,17 +79,6 @@ const getServiceInjectMetaMapOnPrototype = (prototype) => {
|
|
|
78
79
|
const setServiceInjectMetaMapOnPrototype = (prototype, injectMetaMap) => {
|
|
79
80
|
Reflect.defineMetadata("inject", injectMetaMap, prototype);
|
|
80
81
|
};
|
|
81
|
-
function Service(name, { enabled = true, serverMode } = {}) {
|
|
82
|
-
return function(target) {
|
|
83
|
-
const services = getServiceRefs(name);
|
|
84
|
-
const isEnabled = enabled && (!serverMode || process.env.SERVER_MODE === serverMode || process.env.SERVER_MODE === "all");
|
|
85
|
-
setServiceMeta(target, { name, enabled: isEnabled });
|
|
86
|
-
if (!isEnabled)
|
|
87
|
-
return target;
|
|
88
|
-
setServiceRefs(name, [...services, target]);
|
|
89
|
-
return target;
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
82
|
function Srv(name) {
|
|
93
83
|
return function(prototype, key) {
|
|
94
84
|
const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
|
|
@@ -300,16 +290,16 @@ const DbService = (database, ...libSrvRefs) => {
|
|
|
300
290
|
const getQueryDataFromKey = (queryKey, args) => {
|
|
301
291
|
const lastArg = args.at(-1);
|
|
302
292
|
const hasQueryOption = lastArg && typeof lastArg === "object" && (typeof lastArg.select === "object" || typeof lastArg.skip === "number" || typeof lastArg.limit === "number" || typeof lastArg.sort === "string");
|
|
303
|
-
const queryFn = (0,
|
|
293
|
+
const queryFn = (0, import_document.getFilterQuery)(database.Filter, queryKey);
|
|
304
294
|
const query = queryFn(...hasQueryOption ? args.slice(0, -1) : args);
|
|
305
295
|
const queryOption = hasQueryOption ? lastArg : {};
|
|
306
296
|
return { query, queryOption };
|
|
307
297
|
};
|
|
308
298
|
const DbService2 = libSrvRefs.length > 0 ? MixSrvs(...libSrvRefs) : getDefaultDbService();
|
|
309
|
-
const filterKeyMetaMap = (0,
|
|
299
|
+
const filterKeyMetaMap = (0, import_document.getFilterKeyMetaMapOnPrototype)(database.Filter.prototype);
|
|
310
300
|
const queryKeys = [...filterKeyMetaMap.keys()];
|
|
311
301
|
queryKeys.forEach((queryKey) => {
|
|
312
|
-
const queryFn = (0,
|
|
302
|
+
const queryFn = (0, import_document.getFilterQuery)(database.Filter, queryKey);
|
|
313
303
|
DbService2.prototype[`list${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
314
304
|
const { query, queryOption } = getQueryDataFromKey(queryKey, args);
|
|
315
305
|
return this.__list(query, queryOption);
|
|
@@ -346,9 +336,25 @@ const DbService = (database, ...libSrvRefs) => {
|
|
|
346
336
|
const query = queryFn(...args);
|
|
347
337
|
return this.__insight(query);
|
|
348
338
|
};
|
|
339
|
+
DbService2.prototype[`query${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
|
|
340
|
+
return queryFn(...args);
|
|
341
|
+
};
|
|
349
342
|
});
|
|
350
343
|
return DbService2;
|
|
351
344
|
};
|
|
345
|
+
function serve(refNameOrDb, optionOrExtendSrv, ...extendSrvs) {
|
|
346
|
+
const refName = typeof refNameOrDb === "string" ? (0, import_common.lowerlize)(refNameOrDb) : refNameOrDb.refName;
|
|
347
|
+
const extSrvs = [
|
|
348
|
+
...optionOrExtendSrv?.prototype ? [optionOrExtendSrv] : [],
|
|
349
|
+
...extendSrvs
|
|
350
|
+
];
|
|
351
|
+
const option = optionOrExtendSrv?.prototype ? { enabled: true } : optionOrExtendSrv ?? { enabled: true };
|
|
352
|
+
const srvRef = typeof refNameOrDb === "string" ? LogService(refNameOrDb) : DbService(refNameOrDb, ...extSrvs);
|
|
353
|
+
const isEnabled = option.enabled ?? (!option.serverMode || process.env.SERVER_MODE === option.serverMode || process.env.SERVER_MODE === "all");
|
|
354
|
+
const serviceMeta = { refName, name: `${(0, import_common.capitalize)(refName)}Service`, enabled: isEnabled };
|
|
355
|
+
setServiceMeta(srvRef, serviceMeta);
|
|
356
|
+
return srvRef;
|
|
357
|
+
}
|
|
352
358
|
const makeProvidersForSrv = (srvRef) => {
|
|
353
359
|
const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
|
|
354
360
|
const providers = [];
|
|
@@ -380,7 +386,6 @@ const makeProvidersForSrv = (srvRef) => {
|
|
|
380
386
|
Gen,
|
|
381
387
|
LogService,
|
|
382
388
|
MixSrvs,
|
|
383
|
-
Service,
|
|
384
389
|
ServiceStorage,
|
|
385
390
|
Sig,
|
|
386
391
|
Srv,
|
|
@@ -390,5 +395,7 @@ const makeProvidersForSrv = (srvRef) => {
|
|
|
390
395
|
getServiceRefs,
|
|
391
396
|
isServiceEnabled,
|
|
392
397
|
makeProvidersForSrv,
|
|
393
|
-
|
|
398
|
+
serve,
|
|
399
|
+
serviceOf,
|
|
400
|
+
setServiceRefs
|
|
394
401
|
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var serviceInfo_exports = {};
|
|
19
|
+
__export(serviceInfo_exports, {
|
|
20
|
+
serviceInfo: () => serviceInfo
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(serviceInfo_exports);
|
|
23
|
+
var import_serviceDecorators = require("./serviceDecorators");
|
|
24
|
+
const serviceInfo = {
|
|
25
|
+
database: /* @__PURE__ */ new Map(),
|
|
26
|
+
service: /* @__PURE__ */ new Map(),
|
|
27
|
+
setDatabase(refName, service) {
|
|
28
|
+
const srvSet = serviceInfo.database.get(refName) ?? /* @__PURE__ */ new Set();
|
|
29
|
+
srvSet.add(service);
|
|
30
|
+
serviceInfo.database.set(refName, srvSet);
|
|
31
|
+
},
|
|
32
|
+
getDatabase(refName) {
|
|
33
|
+
return [...serviceInfo.database.get(refName) ?? /* @__PURE__ */ new Set()];
|
|
34
|
+
},
|
|
35
|
+
setService(refName, service) {
|
|
36
|
+
serviceInfo.service.set(refName, service);
|
|
37
|
+
},
|
|
38
|
+
registerServices(services) {
|
|
39
|
+
Object.entries(services).forEach(([serviceName, service]) => {
|
|
40
|
+
const serviceMeta = (0, import_serviceDecorators.getServiceMeta)(service);
|
|
41
|
+
if (!serviceMeta?.enabled)
|
|
42
|
+
return;
|
|
43
|
+
const services2 = (0, import_serviceDecorators.getServiceRefs)(serviceName);
|
|
44
|
+
(0, import_serviceDecorators.setServiceRefs)(serviceName, [...services2, service]);
|
|
45
|
+
});
|
|
46
|
+
return services;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
50
|
+
0 && (module.exports = {
|
|
51
|
+
serviceInfo
|
|
52
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var serviceModule_exports = {};
|
|
19
|
+
__export(serviceModule_exports, {
|
|
20
|
+
ServiceModule: () => ServiceModule
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(serviceModule_exports);
|
|
23
|
+
class ServiceModule {
|
|
24
|
+
refName;
|
|
25
|
+
srv;
|
|
26
|
+
cnst;
|
|
27
|
+
constructor(refName, srv, cnst) {
|
|
28
|
+
this.refName = refName;
|
|
29
|
+
this.srv = srv;
|
|
30
|
+
this.cnst = cnst ?? null;
|
|
31
|
+
}
|
|
32
|
+
with(...srvs) {
|
|
33
|
+
this.srv = Object.assign(this.srv, ...srvs.map((srv) => srv.srv));
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
38
|
+
0 && (module.exports = {
|
|
39
|
+
ServiceModule
|
|
40
|
+
});
|
package/esm/src/base.service.js
CHANGED
|
@@ -9,42 +9,33 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
9
9
|
__defProp(target, key, result);
|
|
10
10
|
return result;
|
|
11
11
|
};
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
|
|
12
|
+
import { Gen, serve, Sig } from "./serviceDecorators";
|
|
13
|
+
import { serviceInfo } from "./serviceInfo";
|
|
14
|
+
import { ServiceModule } from "./serviceModule";
|
|
15
|
+
class BaseService extends serve("base") {
|
|
15
16
|
onCleanup;
|
|
16
17
|
baseSignal;
|
|
17
18
|
publishPing() {
|
|
18
19
|
this.baseSignal.pubsubPing("ping");
|
|
19
20
|
}
|
|
20
|
-
l(lang, key) {
|
|
21
|
-
try {
|
|
22
|
-
const res = { lang, key, str: translate(lang, key) };
|
|
23
|
-
return res;
|
|
24
|
-
} catch (e) {
|
|
25
|
-
return { lang, key, str: key };
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
getDictionary(lang) {
|
|
29
|
-
return getDictionary(lang);
|
|
30
|
-
}
|
|
31
21
|
async cleanup() {
|
|
32
22
|
if (!this.onCleanup)
|
|
33
23
|
throw new Error("onCleanup is not defined");
|
|
34
24
|
await this.onCleanup();
|
|
35
25
|
}
|
|
36
|
-
}
|
|
26
|
+
}
|
|
37
27
|
__decorateClass([
|
|
38
28
|
Gen((env) => env.onCleanup)
|
|
39
29
|
], BaseService.prototype, "onCleanup", 2);
|
|
40
30
|
__decorateClass([
|
|
41
31
|
Sig()
|
|
42
32
|
], BaseService.prototype, "baseSignal", 2);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
33
|
+
const allSrvs = serviceInfo.registerServices({ BaseService });
|
|
34
|
+
const srv = {
|
|
35
|
+
base: new ServiceModule("base", { BaseService })
|
|
36
|
+
};
|
|
47
37
|
export {
|
|
48
38
|
BaseService,
|
|
49
|
-
allSrvs
|
|
39
|
+
allSrvs,
|
|
40
|
+
srv
|
|
50
41
|
};
|
package/esm/src/index.js
CHANGED
|
@@ -10,11 +10,11 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
10
10
|
return result;
|
|
11
11
|
};
|
|
12
12
|
import "reflect-metadata";
|
|
13
|
-
import { applyMixins, capitalize, Logger } from "@akanjs/common";
|
|
13
|
+
import { applyMixins, capitalize, Logger, lowerlize } from "@akanjs/common";
|
|
14
14
|
import {
|
|
15
15
|
getFilterKeyMetaMapOnPrototype,
|
|
16
16
|
getFilterQuery
|
|
17
|
-
} from "@akanjs/
|
|
17
|
+
} from "@akanjs/document";
|
|
18
18
|
import { Inject, Injectable } from "@nestjs/common";
|
|
19
19
|
import { InjectConnection, InjectModel } from "@nestjs/mongoose";
|
|
20
20
|
class ServiceStorage {
|
|
@@ -30,10 +30,10 @@ const setServiceRefs = (refName, services) => {
|
|
|
30
30
|
Reflect.defineMetadata(refName, services, ServiceStorage.prototype);
|
|
31
31
|
};
|
|
32
32
|
const setServiceMeta = (srvRef, meta) => {
|
|
33
|
-
Reflect.defineMetadata("
|
|
33
|
+
Reflect.defineMetadata("akan:service", meta, srvRef.prototype);
|
|
34
34
|
};
|
|
35
35
|
const getServiceMeta = (srvRef) => {
|
|
36
|
-
return Reflect.getMetadata("
|
|
36
|
+
return Reflect.getMetadata("akan:service", srvRef.prototype);
|
|
37
37
|
};
|
|
38
38
|
const isServiceEnabled = (srvRef) => {
|
|
39
39
|
const meta = getServiceMeta(srvRef);
|
|
@@ -45,17 +45,6 @@ const getServiceInjectMetaMapOnPrototype = (prototype) => {
|
|
|
45
45
|
const setServiceInjectMetaMapOnPrototype = (prototype, injectMetaMap) => {
|
|
46
46
|
Reflect.defineMetadata("inject", injectMetaMap, prototype);
|
|
47
47
|
};
|
|
48
|
-
function Service(name, { enabled = true, serverMode } = {}) {
|
|
49
|
-
return function(target) {
|
|
50
|
-
const services = getServiceRefs(name);
|
|
51
|
-
const isEnabled = enabled && (!serverMode || process.env.SERVER_MODE === serverMode || process.env.SERVER_MODE === "all");
|
|
52
|
-
setServiceMeta(target, { name, enabled: isEnabled });
|
|
53
|
-
if (!isEnabled)
|
|
54
|
-
return target;
|
|
55
|
-
setServiceRefs(name, [...services, target]);
|
|
56
|
-
return target;
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
48
|
function Srv(name) {
|
|
60
49
|
return function(prototype, key) {
|
|
61
50
|
const metadataMap = getServiceInjectMetaMapOnPrototype(prototype);
|
|
@@ -313,9 +302,25 @@ const DbService = (database, ...libSrvRefs) => {
|
|
|
313
302
|
const query = queryFn(...args);
|
|
314
303
|
return this.__insight(query);
|
|
315
304
|
};
|
|
305
|
+
DbService2.prototype[`query${capitalize(queryKey)}`] = async function(...args) {
|
|
306
|
+
return queryFn(...args);
|
|
307
|
+
};
|
|
316
308
|
});
|
|
317
309
|
return DbService2;
|
|
318
310
|
};
|
|
311
|
+
function serve(refNameOrDb, optionOrExtendSrv, ...extendSrvs) {
|
|
312
|
+
const refName = typeof refNameOrDb === "string" ? lowerlize(refNameOrDb) : refNameOrDb.refName;
|
|
313
|
+
const extSrvs = [
|
|
314
|
+
...optionOrExtendSrv?.prototype ? [optionOrExtendSrv] : [],
|
|
315
|
+
...extendSrvs
|
|
316
|
+
];
|
|
317
|
+
const option = optionOrExtendSrv?.prototype ? { enabled: true } : optionOrExtendSrv ?? { enabled: true };
|
|
318
|
+
const srvRef = typeof refNameOrDb === "string" ? LogService(refNameOrDb) : DbService(refNameOrDb, ...extSrvs);
|
|
319
|
+
const isEnabled = option.enabled ?? (!option.serverMode || process.env.SERVER_MODE === option.serverMode || process.env.SERVER_MODE === "all");
|
|
320
|
+
const serviceMeta = { refName, name: `${capitalize(refName)}Service`, enabled: isEnabled };
|
|
321
|
+
setServiceMeta(srvRef, serviceMeta);
|
|
322
|
+
return srvRef;
|
|
323
|
+
}
|
|
319
324
|
const makeProvidersForSrv = (srvRef) => {
|
|
320
325
|
const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
|
|
321
326
|
const providers = [];
|
|
@@ -346,7 +351,6 @@ export {
|
|
|
346
351
|
Gen,
|
|
347
352
|
LogService,
|
|
348
353
|
MixSrvs,
|
|
349
|
-
Service,
|
|
350
354
|
ServiceStorage,
|
|
351
355
|
Sig,
|
|
352
356
|
Srv,
|
|
@@ -356,5 +360,7 @@ export {
|
|
|
356
360
|
getServiceRefs,
|
|
357
361
|
isServiceEnabled,
|
|
358
362
|
makeProvidersForSrv,
|
|
359
|
-
|
|
363
|
+
serve,
|
|
364
|
+
serviceOf,
|
|
365
|
+
setServiceRefs
|
|
360
366
|
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getServiceMeta, getServiceRefs, setServiceRefs } from "./serviceDecorators";
|
|
2
|
+
const serviceInfo = {
|
|
3
|
+
database: /* @__PURE__ */ new Map(),
|
|
4
|
+
service: /* @__PURE__ */ new Map(),
|
|
5
|
+
setDatabase(refName, service) {
|
|
6
|
+
const srvSet = serviceInfo.database.get(refName) ?? /* @__PURE__ */ new Set();
|
|
7
|
+
srvSet.add(service);
|
|
8
|
+
serviceInfo.database.set(refName, srvSet);
|
|
9
|
+
},
|
|
10
|
+
getDatabase(refName) {
|
|
11
|
+
return [...serviceInfo.database.get(refName) ?? /* @__PURE__ */ new Set()];
|
|
12
|
+
},
|
|
13
|
+
setService(refName, service) {
|
|
14
|
+
serviceInfo.service.set(refName, service);
|
|
15
|
+
},
|
|
16
|
+
registerServices(services) {
|
|
17
|
+
Object.entries(services).forEach(([serviceName, service]) => {
|
|
18
|
+
const serviceMeta = getServiceMeta(service);
|
|
19
|
+
if (!serviceMeta?.enabled)
|
|
20
|
+
return;
|
|
21
|
+
const services2 = getServiceRefs(serviceName);
|
|
22
|
+
setServiceRefs(serviceName, [...services2, service]);
|
|
23
|
+
});
|
|
24
|
+
return services;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
serviceInfo
|
|
29
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class ServiceModule {
|
|
2
|
+
refName;
|
|
3
|
+
srv;
|
|
4
|
+
cnst;
|
|
5
|
+
constructor(refName, srv, cnst) {
|
|
6
|
+
this.refName = refName;
|
|
7
|
+
this.srv = srv;
|
|
8
|
+
this.cnst = cnst ?? null;
|
|
9
|
+
}
|
|
10
|
+
with(...srvs) {
|
|
11
|
+
this.srv = Object.assign(this.srv, ...srvs.map((srv) => srv.srv));
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
ServiceModule
|
|
17
|
+
};
|
package/package.json
CHANGED
package/src/base.service.d.ts
CHANGED
|
@@ -1,28 +1,21 @@
|
|
|
1
1
|
import type { BaseSignal } from "@akanjs/signal";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
2
|
+
import { Sig } from "./serviceDecorators";
|
|
3
|
+
import { ServiceModule } from "./serviceModule";
|
|
4
|
+
declare const BaseService_base: import("@akanjs/base").Type<{
|
|
5
|
+
logger: import("@akanjs/common").Logger;
|
|
6
|
+
}>;
|
|
8
7
|
export declare class BaseService extends BaseService_base {
|
|
9
8
|
onCleanup?: () => Promise<void>;
|
|
10
9
|
baseSignal: Sig<BaseSignal>;
|
|
11
10
|
publishPing(): void;
|
|
12
|
-
l(lang: string, key: string): {
|
|
13
|
-
lang: string;
|
|
14
|
-
key: string;
|
|
15
|
-
str: string;
|
|
16
|
-
};
|
|
17
|
-
getDictionary(lang: string): {
|
|
18
|
-
[key: string]: {
|
|
19
|
-
[key: string]: string;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
11
|
cleanup(): Promise<void>;
|
|
23
12
|
}
|
|
24
13
|
export declare const allSrvs: {
|
|
25
|
-
|
|
14
|
+
BaseService: typeof BaseService;
|
|
15
|
+
};
|
|
16
|
+
export declare const srv: {
|
|
17
|
+
base: ServiceModule<"base", {
|
|
18
|
+
BaseService: typeof BaseService;
|
|
19
|
+
}, never, never, never, never>;
|
|
26
20
|
};
|
|
27
|
-
export type AllSrvs = GetServices<typeof allSrvs>;
|
|
28
21
|
export {};
|
package/src/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
import type { GetActionObject, MergeAllTypes, Prettify, PromiseOrObject, Type, UnType } from "@akanjs/base";
|
|
3
3
|
import { Logger } from "@akanjs/common";
|
|
4
|
-
import { type DocumentModel,
|
|
5
|
-
import
|
|
4
|
+
import { type DocumentModel, QueryOf } from "@akanjs/constant";
|
|
5
|
+
import { BaseMiddleware, CRUDEventType, Database, DatabaseModel, DataInputOf, Doc as DbDoc, FilterType, FindQueryOption, GetDocObject, ListQueryOption, QueryMethodPart, SaveEventType, type SortOf } from "@akanjs/document";
|
|
6
6
|
import { FilterOutInternalArgs } from "@akanjs/signal";
|
|
7
7
|
import { type Provider } from "@nestjs/common";
|
|
8
8
|
import type { Job, Queue as BullQueue } from "bull";
|
|
@@ -16,11 +16,13 @@ export type GetServices<AllSrvs extends {
|
|
|
16
16
|
export declare class ServiceStorage {
|
|
17
17
|
}
|
|
18
18
|
interface ServiceMeta {
|
|
19
|
+
refName: string;
|
|
19
20
|
name: string;
|
|
20
21
|
enabled: boolean;
|
|
21
22
|
}
|
|
22
23
|
export declare const getServiceRefs: (refName: string) => Type[];
|
|
23
24
|
export declare const getAllServiceRefs: () => Type[];
|
|
25
|
+
export declare const setServiceRefs: (refName: string, services: Type[]) => void;
|
|
24
26
|
export declare const getServiceMeta: (srvRef: Type) => ServiceMeta | undefined;
|
|
25
27
|
export declare const isServiceEnabled: (srvRef: Type) => boolean;
|
|
26
28
|
export interface ServiceInjectMeta {
|
|
@@ -29,11 +31,6 @@ export interface ServiceInjectMeta {
|
|
|
29
31
|
key: string;
|
|
30
32
|
generateFactory?: (...args: any[]) => any;
|
|
31
33
|
}
|
|
32
|
-
interface ServiceOptions {
|
|
33
|
-
enabled?: boolean;
|
|
34
|
-
serverMode?: "batch" | "federation";
|
|
35
|
-
}
|
|
36
|
-
export declare function Service(name: string, { enabled, serverMode }?: ServiceOptions): (target: Type) => Type;
|
|
37
34
|
export declare function Srv(name?: string): PropertyDecorator;
|
|
38
35
|
export declare function Use(name?: string): PropertyDecorator;
|
|
39
36
|
export declare function Env(envKey: string, generateFactory?: (envValue: string, options: any) => any): PropertyDecorator;
|
|
@@ -62,8 +59,7 @@ export declare const LogService: <T extends string>(name: T) => {
|
|
|
62
59
|
logger: Logger;
|
|
63
60
|
};
|
|
64
61
|
};
|
|
65
|
-
type DatabaseService<T extends string, Input, Doc, Obj, Model, Insight, Filter> =
|
|
66
|
-
type DatabaseServiceWithQuerySort<T extends string, Input, Doc, Obj, Model, Insight, 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>> = {
|
|
62
|
+
export type DatabaseService<T extends string, Input, Doc, Obj, Model, Insight, Filter, LibSrvs extends Type[] = [], _Query extends GetActionObject<Filter> = GetActionObject<Filter>, _Sort extends SortOf<Filter> = SortOf<Filter>, _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>, _DocObjectOfDoc = GetDocObject<Doc>, _MixedLibSrv = MergeAllTypes<LibSrvs>> = {
|
|
67
63
|
logger: Logger;
|
|
68
64
|
__databaseModel: Model;
|
|
69
65
|
__list(query?: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<Doc[]>;
|
|
@@ -112,7 +108,12 @@ type DatabaseServiceWithQuerySort<T extends string, Input, Doc, Obj, Model, Insi
|
|
|
112
108
|
[K in `searchDocs${_CapitalizedT}`]: (searchText: string, queryOption?: _ListQueryOption) => Promise<Doc[]>;
|
|
113
109
|
} & {
|
|
114
110
|
[K in `searchCount${_CapitalizedT}`]: (searchText: string) => Promise<number>;
|
|
115
|
-
} & QueryMethodPart<
|
|
116
|
-
|
|
111
|
+
} & QueryMethodPart<_Query, _Sort, Obj, Doc, Insight, _FindQueryOption, _ListQueryOption, _QueryOfDoc> & {
|
|
112
|
+
[K in keyof _MixedLibSrv]: _MixedLibSrv[K] extends (...args: infer Args) => Promise<infer Value> ? Value extends (infer SingleValue)[] ? SingleValue extends DbDoc<any> ? _DocObjectOfDoc extends GetDocObject<SingleValue> ? (...args: Args) => Promise<Doc[]> : _MixedLibSrv[K] : _MixedLibSrv[K] : Value extends DbDoc<any> ? _DocObjectOfDoc extends GetDocObject<Value> ? (...args: Args) => Promise<Doc> : _MixedLibSrv[K] : _MixedLibSrv[K] : _MixedLibSrv[K];
|
|
113
|
+
}>;
|
|
114
|
+
export declare const DbService: <T extends string, Input, Doc extends HydratedDocument<any>, Model extends DatabaseModel<T, Input, Doc, Obj, Insight, Filter, _CapitalizedT, _QueryOfDoc, _Query, _Sort, _DataInputOfDoc, _FindQueryOption, _ListQueryOption>, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterType, LibSrvs extends Type[], _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>, ...libSrvRefs: LibSrvs) => Type<DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter, LibSrvs>>;
|
|
115
|
+
export declare function serve<RefNameOrDb, LibSrvOrOption, LibSrvs extends Type[]>(refNameOrDb: RefNameOrDb, optionOrExtendSrv?: LibSrvOrOption, ...extendSrvs: LibSrvs): Type<RefNameOrDb extends Database<infer T, infer Input, infer Doc, infer Model, infer Middleware, infer Obj, infer Insight, infer Filter> ? DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter, LibSrvOrOption extends Type ? [LibSrvOrOption, ...LibSrvs] : LibSrvs> : {
|
|
116
|
+
logger: Logger;
|
|
117
|
+
}>;
|
|
117
118
|
export declare const makeProvidersForSrv: (srvRef: Type) => Provider[];
|
|
118
119
|
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Type } from "@akanjs/base";
|
|
2
|
+
export declare const serviceInfo: {
|
|
3
|
+
database: Map<string, Set<Type>>;
|
|
4
|
+
service: Map<string, Type>;
|
|
5
|
+
setDatabase(refName: string, service: Type): void;
|
|
6
|
+
getDatabase(refName: string): Type[];
|
|
7
|
+
setService(refName: string, service: Type): void;
|
|
8
|
+
registerServices<Srvs extends {
|
|
9
|
+
[key: string]: Type;
|
|
10
|
+
}>(services: Srvs): Srvs;
|
|
11
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MergeAllKeyOfObjects, Type } from "@akanjs/base";
|
|
2
|
+
import { ConstantModel } from "@akanjs/constant";
|
|
3
|
+
export declare class ServiceModule<T extends string = string, Srv extends {
|
|
4
|
+
[key: string]: Type;
|
|
5
|
+
} = {
|
|
6
|
+
[key: string]: Type;
|
|
7
|
+
}, Input = never, Full = never, Light = never, Insight = never> {
|
|
8
|
+
refName: T;
|
|
9
|
+
srv: Srv;
|
|
10
|
+
cnst: ConstantModel<string, Input, Full, Light, Insight> | null;
|
|
11
|
+
constructor(refName: T, srv: Srv, cnst?: ConstantModel<string, Input, Full, Light, Insight>);
|
|
12
|
+
with<SrvModules extends ServiceModule<string, any, any, any, any, any>[]>(...srvs: SrvModules): ServiceModule<T, Srv & MergeAllKeyOfObjects<SrvModules, "srv">, Input, Full, Light, Insight>;
|
|
13
|
+
}
|