@akanjs/service 0.9.47 → 0.9.49

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.
@@ -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
- let BaseService = class extends (0, import_serviceDecorators.LogService)("BaseService") {
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
- BaseService = __decorateClass([
65
- (0, import_serviceDecorators.Service)("BaseService")
66
- ], BaseService);
67
- const allSrvs = { BaseService };
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
- serviceOf: () => serviceOf
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 import_constant = require("@akanjs/constant");
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("serviceMeta", meta, srvRef.prototype);
67
+ Reflect.defineMetadata("akan:service", meta, srvRef.prototype);
67
68
  };
68
69
  const getServiceMeta = (srvRef) => {
69
- return Reflect.getMetadata("serviceMeta", srvRef.prototype);
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, import_constant.getFilterQuery)(database.Filter, queryKey);
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, import_constant.getFilterKeyMetaMapOnPrototype)(database.Filter.prototype);
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, import_constant.getFilterQuery)(database.Filter, queryKey);
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
- serviceOf
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
+ });
@@ -9,42 +9,33 @@ var __decorateClass = (decorators, target, key, kind) => {
9
9
  __defProp(target, key, result);
10
10
  return result;
11
11
  };
12
- import { getDictionary, translate } from "@akanjs/dictionary";
13
- import { Gen, LogService, Service, Sig } from "./serviceDecorators";
14
- let BaseService = class extends LogService("BaseService") {
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
- BaseService = __decorateClass([
44
- Service("BaseService")
45
- ], BaseService);
46
- const allSrvs = { BaseService };
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
@@ -1,2 +1,4 @@
1
1
  export * from "./serviceDecorators";
2
2
  export * from "./base.service";
3
+ export * from "./serviceInfo";
4
+ export * from "./serviceModule";
@@ -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/constant";
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("serviceMeta", meta, srvRef.prototype);
33
+ Reflect.defineMetadata("akan:service", meta, srvRef.prototype);
34
34
  };
35
35
  const getServiceMeta = (srvRef) => {
36
- return Reflect.getMetadata("serviceMeta", srvRef.prototype);
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
- serviceOf
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/service",
3
- "version": "0.9.47",
3
+ "version": "0.9.49",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,28 +1,21 @@
1
1
  import type { BaseSignal } from "@akanjs/signal";
2
- import { type GetServices, Sig } from "./serviceDecorators";
3
- declare const BaseService_base: {
4
- new (): {
5
- logger: import("@akanjs/common").Logger;
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
- readonly BaseService: typeof BaseService;
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,2 +1,4 @@
1
1
  export * from "./serviceDecorators";
2
2
  export * from "./base.service";
3
+ export * from "./serviceInfo";
4
+ export * from "./serviceModule";
@@ -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, type FilterType, FindQueryOption, ListQueryOption, QueryOf, type SortOf } from "@akanjs/constant";
5
- import type { BaseMiddleware, CRUDEventType, Database, DatabaseModel, DataInputOf, Doc as DbDoc, GetDocObject, QueryMethodPart, SaveEventType } from "@akanjs/document";
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> = DatabaseServiceWithQuerySort<T, Input, Doc, Obj, Model, Insight, GetActionObject<Filter>, SortOf<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<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, _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>, _DocObjectOfDoc = GetDocObject<Doc>, _MixedLibSrv = MergeAllTypes<LibSrvs>>(database: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter>, ...libSrvRefs: LibSrvs) => Type<DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter> & { [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]; }>;
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
+ }