@akanjs/service 0.9.56 → 0.9.58-canary.0

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.
@@ -15,15 +15,6 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var __decorateClass = (decorators, target, key, kind) => {
19
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
20
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
21
- if (decorator = decorators[i])
22
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
23
- if (kind && result)
24
- __defProp(target, key, result);
25
- return result;
26
- };
27
18
  var base_service_exports = {};
28
19
  __export(base_service_exports, {
29
20
  BaseService: () => BaseService,
@@ -34,9 +25,10 @@ module.exports = __toCommonJS(base_service_exports);
34
25
  var import_serviceDecorators = require("./serviceDecorators");
35
26
  var import_serviceInfo = require("./serviceInfo");
36
27
  var import_serviceModule = require("./serviceModule");
37
- class BaseService extends (0, import_serviceDecorators.serve)("base") {
38
- onCleanup;
39
- baseSignal;
28
+ class BaseService extends (0, import_serviceDecorators.serve)("base", ({ generate, signal }) => ({
29
+ onCleanup: generate((env) => env.onCleanup ?? void 0),
30
+ baseSignal: signal()
31
+ })) {
40
32
  publishPing() {
41
33
  this.baseSignal.pubsubPing("ping");
42
34
  }
@@ -46,12 +38,6 @@ class BaseService extends (0, import_serviceDecorators.serve)("base") {
46
38
  await this.onCleanup();
47
39
  }
48
40
  }
49
- __decorateClass([
50
- (0, import_serviceDecorators.Gen)((env) => env.onCleanup)
51
- ], BaseService.prototype, "onCleanup", 2);
52
- __decorateClass([
53
- (0, import_serviceDecorators.Sig)()
54
- ], BaseService.prototype, "baseSignal", 2);
55
41
  const allSrvs = import_serviceInfo.serviceInfo.registerServices({ BaseService });
56
42
  const srv = {
57
43
  base: new import_serviceModule.ServiceModule("base", { BaseService })
package/cjs/src/index.js CHANGED
@@ -18,10 +18,12 @@ __reExport(src_exports, require("./serviceDecorators"), module.exports);
18
18
  __reExport(src_exports, require("./base.service"), module.exports);
19
19
  __reExport(src_exports, require("./serviceInfo"), module.exports);
20
20
  __reExport(src_exports, require("./serviceModule"), module.exports);
21
+ __reExport(src_exports, require("./injectInfo"), module.exports);
21
22
  // Annotate the CommonJS export names for ESM import in node:
22
23
  0 && (module.exports = {
23
24
  ...require("./serviceDecorators"),
24
25
  ...require("./base.service"),
25
26
  ...require("./serviceInfo"),
26
- ...require("./serviceModule")
27
+ ...require("./serviceModule"),
28
+ ...require("./injectInfo")
27
29
  });
@@ -0,0 +1,78 @@
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 injectInfo_exports = {};
19
+ __export(injectInfo_exports, {
20
+ InjectInfo: () => InjectInfo,
21
+ makeInjectBuilder: () => makeInjectBuilder
22
+ });
23
+ module.exports = __toCommonJS(injectInfo_exports);
24
+ var import__ = require(".");
25
+ class InjectInfo {
26
+ type;
27
+ generateFactory;
28
+ constructor(type, options = {}) {
29
+ this.type = type;
30
+ this.generateFactory = options.generateFactory ?? (() => void 0);
31
+ }
32
+ applyInjectInfo(srvRef, key) {
33
+ switch (this.type) {
34
+ case "service":
35
+ (0, import__.Srv)()(srvRef.prototype, key);
36
+ break;
37
+ case "use":
38
+ (0, import__.Use)()(srvRef.prototype, key);
39
+ break;
40
+ case "env":
41
+ (0, import__.Gen)(this.generateFactory)(srvRef.prototype, key);
42
+ break;
43
+ case "generate":
44
+ (0, import__.Gen)(this.generateFactory)(srvRef.prototype, key);
45
+ break;
46
+ case "signal":
47
+ (0, import__.Sig)()(srvRef.prototype, key);
48
+ break;
49
+ default:
50
+ throw new Error(`Invalid inject type: ${this.type}`);
51
+ }
52
+ }
53
+ }
54
+ const makeInjectBuilder = () => ({
55
+ service: () => new InjectInfo("service"),
56
+ use: () => new InjectInfo("use"),
57
+ env: (key, generateFactory = (envValue) => envValue) => new InjectInfo("env", {
58
+ generateFactory: (options) => {
59
+ const envValue = process.env[key];
60
+ if (!envValue)
61
+ throw new Error(`Environment variable ${key} not found`);
62
+ return generateFactory(envValue, options);
63
+ }
64
+ }),
65
+ envOptional: (key, generateFactory = (envValue) => envValue) => new InjectInfo("env", {
66
+ generateFactory: (options) => {
67
+ const envValue = process.env[key];
68
+ return generateFactory(envValue, options);
69
+ }
70
+ }),
71
+ generate: (generateFactory) => new InjectInfo("generate", { generateFactory }),
72
+ signal: () => new InjectInfo("signal")
73
+ });
74
+ // Annotate the CommonJS export names for ESM import in node:
75
+ 0 && (module.exports = {
76
+ InjectInfo,
77
+ makeInjectBuilder
78
+ });
@@ -51,6 +51,7 @@ var import_common = require("@akanjs/common");
51
51
  var import_document = require("@akanjs/document");
52
52
  var import_common2 = require("@nestjs/common");
53
53
  var import_mongoose = require("@nestjs/mongoose");
54
+ var import_injectInfo = require("./injectInfo");
54
55
  class ServiceStorage {
55
56
  }
56
57
  const getServiceRefs = (refName) => {
@@ -342,17 +343,21 @@ const DbService = (database, ...libSrvRefs) => {
342
343
  });
343
344
  return DbService2;
344
345
  };
345
- function serve(refNameOrDb, optionOrExtendSrv, ...extendSrvs) {
346
+ function serve(refNameOrDb, optionOrInjectBuilder, injectBuilderOrExtendSrv, ...extendSrvs) {
346
347
  const refName = typeof refNameOrDb === "string" ? (0, import_common.lowerlize)(refNameOrDb) : refNameOrDb.refName;
348
+ const option = typeof optionOrInjectBuilder === "object" ? optionOrInjectBuilder : { enabled: true };
349
+ const injectBuilder = typeof optionOrInjectBuilder === "function" ? optionOrInjectBuilder : injectBuilderOrExtendSrv;
347
350
  const extSrvs = [
348
- ...optionOrExtendSrv?.prototype ? [optionOrExtendSrv] : [],
351
+ ...typeof optionOrInjectBuilder === "function" && injectBuilderOrExtendSrv ? [injectBuilderOrExtendSrv] : [],
349
352
  ...extendSrvs
350
353
  ];
351
- const option = optionOrExtendSrv?.prototype ? { enabled: true } : optionOrExtendSrv ?? { enabled: true };
352
354
  const srvRef = typeof refNameOrDb === "string" ? LogService(refNameOrDb) : DbService(refNameOrDb, ...extSrvs);
353
355
  const isEnabled = option.enabled ?? (!option.serverMode || process.env.SERVER_MODE === option.serverMode || process.env.SERVER_MODE === "all");
354
356
  const serviceMeta = { refName, name: `${(0, import_common.capitalize)(refName)}Service`, enabled: isEnabled };
355
357
  setServiceMeta(srvRef, serviceMeta);
358
+ Object.entries(injectBuilder((0, import_injectInfo.makeInjectBuilder)())).forEach(([key, injectInfo]) => {
359
+ injectInfo.applyInjectInfo(srvRef, key);
360
+ });
356
361
  return srvRef;
357
362
  }
358
363
  const makeProvidersForSrv = (srvRef) => {
@@ -1,20 +1,10 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __decorateClass = (decorators, target, key, kind) => {
4
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
- if (decorator = decorators[i])
7
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
- if (kind && result)
9
- __defProp(target, key, result);
10
- return result;
11
- };
12
- import { Gen, serve, Sig } from "./serviceDecorators";
1
+ import { serve } from "./serviceDecorators";
13
2
  import { serviceInfo } from "./serviceInfo";
14
3
  import { ServiceModule } from "./serviceModule";
15
- class BaseService extends serve("base") {
16
- onCleanup;
17
- baseSignal;
4
+ class BaseService extends serve("base", ({ generate, signal }) => ({
5
+ onCleanup: generate((env) => env.onCleanup ?? void 0),
6
+ baseSignal: signal()
7
+ })) {
18
8
  publishPing() {
19
9
  this.baseSignal.pubsubPing("ping");
20
10
  }
@@ -24,12 +14,6 @@ class BaseService extends serve("base") {
24
14
  await this.onCleanup();
25
15
  }
26
16
  }
27
- __decorateClass([
28
- Gen((env) => env.onCleanup)
29
- ], BaseService.prototype, "onCleanup", 2);
30
- __decorateClass([
31
- Sig()
32
- ], BaseService.prototype, "baseSignal", 2);
33
17
  const allSrvs = serviceInfo.registerServices({ BaseService });
34
18
  const srv = {
35
19
  base: new ServiceModule("base", { BaseService })
package/esm/src/index.js CHANGED
@@ -2,3 +2,4 @@ export * from "./serviceDecorators";
2
2
  export * from "./base.service";
3
3
  export * from "./serviceInfo";
4
4
  export * from "./serviceModule";
5
+ export * from "./injectInfo";
@@ -0,0 +1,54 @@
1
+ import { Gen, Sig, Srv, Use } from ".";
2
+ class InjectInfo {
3
+ type;
4
+ generateFactory;
5
+ constructor(type, options = {}) {
6
+ this.type = type;
7
+ this.generateFactory = options.generateFactory ?? (() => void 0);
8
+ }
9
+ applyInjectInfo(srvRef, key) {
10
+ switch (this.type) {
11
+ case "service":
12
+ Srv()(srvRef.prototype, key);
13
+ break;
14
+ case "use":
15
+ Use()(srvRef.prototype, key);
16
+ break;
17
+ case "env":
18
+ Gen(this.generateFactory)(srvRef.prototype, key);
19
+ break;
20
+ case "generate":
21
+ Gen(this.generateFactory)(srvRef.prototype, key);
22
+ break;
23
+ case "signal":
24
+ Sig()(srvRef.prototype, key);
25
+ break;
26
+ default:
27
+ throw new Error(`Invalid inject type: ${this.type}`);
28
+ }
29
+ }
30
+ }
31
+ const makeInjectBuilder = () => ({
32
+ service: () => new InjectInfo("service"),
33
+ use: () => new InjectInfo("use"),
34
+ env: (key, generateFactory = (envValue) => envValue) => new InjectInfo("env", {
35
+ generateFactory: (options) => {
36
+ const envValue = process.env[key];
37
+ if (!envValue)
38
+ throw new Error(`Environment variable ${key} not found`);
39
+ return generateFactory(envValue, options);
40
+ }
41
+ }),
42
+ envOptional: (key, generateFactory = (envValue) => envValue) => new InjectInfo("env", {
43
+ generateFactory: (options) => {
44
+ const envValue = process.env[key];
45
+ return generateFactory(envValue, options);
46
+ }
47
+ }),
48
+ generate: (generateFactory) => new InjectInfo("generate", { generateFactory }),
49
+ signal: () => new InjectInfo("signal")
50
+ });
51
+ export {
52
+ InjectInfo,
53
+ makeInjectBuilder
54
+ };
@@ -17,6 +17,7 @@ import {
17
17
  } from "@akanjs/document";
18
18
  import { Inject, Injectable } from "@nestjs/common";
19
19
  import { InjectConnection, InjectModel } from "@nestjs/mongoose";
20
+ import { makeInjectBuilder } from "./injectInfo";
20
21
  class ServiceStorage {
21
22
  }
22
23
  const getServiceRefs = (refName) => {
@@ -308,17 +309,21 @@ const DbService = (database, ...libSrvRefs) => {
308
309
  });
309
310
  return DbService2;
310
311
  };
311
- function serve(refNameOrDb, optionOrExtendSrv, ...extendSrvs) {
312
+ function serve(refNameOrDb, optionOrInjectBuilder, injectBuilderOrExtendSrv, ...extendSrvs) {
312
313
  const refName = typeof refNameOrDb === "string" ? lowerlize(refNameOrDb) : refNameOrDb.refName;
314
+ const option = typeof optionOrInjectBuilder === "object" ? optionOrInjectBuilder : { enabled: true };
315
+ const injectBuilder = typeof optionOrInjectBuilder === "function" ? optionOrInjectBuilder : injectBuilderOrExtendSrv;
313
316
  const extSrvs = [
314
- ...optionOrExtendSrv?.prototype ? [optionOrExtendSrv] : [],
317
+ ...typeof optionOrInjectBuilder === "function" && injectBuilderOrExtendSrv ? [injectBuilderOrExtendSrv] : [],
315
318
  ...extendSrvs
316
319
  ];
317
- const option = optionOrExtendSrv?.prototype ? { enabled: true } : optionOrExtendSrv ?? { enabled: true };
318
320
  const srvRef = typeof refNameOrDb === "string" ? LogService(refNameOrDb) : DbService(refNameOrDb, ...extSrvs);
319
321
  const isEnabled = option.enabled ?? (!option.serverMode || process.env.SERVER_MODE === option.serverMode || process.env.SERVER_MODE === "all");
320
322
  const serviceMeta = { refName, name: `${capitalize(refName)}Service`, enabled: isEnabled };
321
323
  setServiceMeta(srvRef, serviceMeta);
324
+ Object.entries(injectBuilder(makeInjectBuilder())).forEach(([key, injectInfo]) => {
325
+ injectInfo.applyInjectInfo(srvRef, key);
326
+ });
322
327
  return srvRef;
323
328
  }
324
329
  const makeProvidersForSrv = (srvRef) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/service",
3
- "version": "0.9.56",
3
+ "version": "0.9.58-canary.0",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,12 +1,12 @@
1
- import type { BaseSignal } from "@akanjs/signal";
2
- import { Sig } from "./serviceDecorators";
1
+ import type { Base } from "@akanjs/signal";
3
2
  import { ServiceModule } from "./serviceModule";
4
- declare const BaseService_base: import("@akanjs/base").Type<{
3
+ declare const BaseService_base: new (...args: any[]) => {
5
4
  logger: import("@akanjs/common").Logger;
5
+ } & import("./injectInfo").ExtractInjectInfoObject<{
6
+ onCleanup: import("./injectInfo").InjectInfo<(() => Promise<void>) | undefined>;
7
+ baseSignal: import("./injectInfo").InjectInfo<Base>;
6
8
  }>;
7
9
  export declare class BaseService extends BaseService_base {
8
- onCleanup?: () => Promise<void>;
9
- baseSignal: Sig<BaseSignal>;
10
10
  publishPing(): void;
11
11
  cleanup(): Promise<void>;
12
12
  }
package/src/index.d.ts CHANGED
@@ -2,3 +2,4 @@ export * from "./serviceDecorators";
2
2
  export * from "./base.service";
3
3
  export * from "./serviceInfo";
4
4
  export * from "./serviceModule";
5
+ export * from "./injectInfo";
@@ -0,0 +1,28 @@
1
+ import { BackendEnv, Type } from "@akanjs/base";
2
+ interface InjectBuilderOptions<ReturnType> {
3
+ generateFactory?: (options: any) => ReturnType;
4
+ }
5
+ type InjectType = "service" | "use" | "env" | "generate" | "signal";
6
+ export declare class InjectInfo<ReturnType> {
7
+ type: InjectType;
8
+ generateFactory: (options: any) => ReturnType;
9
+ constructor(type: InjectType, options?: InjectBuilderOptions<ReturnType>);
10
+ applyInjectInfo(srvRef: Type, key: string): void;
11
+ }
12
+ export declare const makeInjectBuilder: () => {
13
+ service: <ReturnType>() => InjectInfo<ReturnType>;
14
+ use: <ReturnType>() => InjectInfo<ReturnType>;
15
+ env: <ReturnType>(key: string, generateFactory?: (envValue: string, options: BackendEnv) => ReturnType) => InjectInfo<ReturnType>;
16
+ envOptional: <ReturnType>(key: string, generateFactory?: (envValue: string | undefined, options: BackendEnv) => ReturnType) => InjectInfo<ReturnType | undefined>;
17
+ generate: <ReturnType>(generateFactory: (options: BackendEnv) => ReturnType) => InjectInfo<ReturnType>;
18
+ signal: <Signal>() => InjectInfo<Signal>;
19
+ };
20
+ export type InjectBuilder = (builder: ReturnType<typeof makeInjectBuilder>) => {
21
+ [key: string]: InjectInfo<any>;
22
+ };
23
+ export type ExtractInjectInfoObject<InjectInfoMap extends {
24
+ [key: string]: InjectInfo<any>;
25
+ }> = {
26
+ [K in keyof InjectInfoMap]: InjectInfoMap[K] extends InjectInfo<infer ReturnType> ? ReturnType : never;
27
+ };
28
+ export {};
@@ -1,13 +1,13 @@
1
1
  import "reflect-metadata";
2
- import type { GetActionObject, MergeAllTypes, Prettify, PromiseOrObject, Type, UnType } from "@akanjs/base";
2
+ import type { MergeAllTypes, Prettify, PromiseOrObject, Type, UnType } from "@akanjs/base";
3
3
  import { Logger } from "@akanjs/common";
4
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
- import { FilterOutInternalArgs } from "@akanjs/signal";
5
+ import { BaseMiddleware, CRUDEventType, Database, DatabaseModel, DataInputOf, Doc as DbDoc, ExtractQuery, ExtractSort, FilterInstance, FindQueryOption, GetDocObject, ListQueryOption, QueryMethodPart, SaveEventType } from "@akanjs/document";
7
6
  import { type Provider } from "@nestjs/common";
8
7
  import type { Job, Queue as BullQueue } from "bull";
9
8
  import type { HydratedDocument } from "mongoose";
10
9
  import type { Server } from "socket.io";
10
+ import { ExtractInjectInfoObject, InjectBuilder } from "./injectInfo";
11
11
  export type GetServices<AllSrvs extends {
12
12
  [key: string]: Type | undefined;
13
13
  }> = {
@@ -31,6 +31,10 @@ export interface ServiceInjectMeta {
31
31
  key: string;
32
32
  generateFactory?: (...args: any[]) => any;
33
33
  }
34
+ interface ServiceOptions {
35
+ enabled?: boolean;
36
+ serverMode?: "batch" | "federation";
37
+ }
34
38
  export declare function Srv(name?: string): PropertyDecorator;
35
39
  export declare function Use(name?: string): PropertyDecorator;
36
40
  export declare function Env(envKey: string, generateFactory?: (envValue: string, options: any) => any): PropertyDecorator;
@@ -44,22 +48,22 @@ type ServiceSignalReturnType = {
44
48
  export type Sig<Signal> = {
45
49
  [K in keyof Signal as Signal[K] extends (...args: any) => PromiseOrObject<ServiceSignalReturnType> ? K : never]: Signal[K] extends (...args: infer Args) => PromiseOrObject<{
46
50
  __Returns__: "Done";
47
- }> ? (...args: FilterOutInternalArgs<Args>) => Promise<Job> : Signal[K] extends (...args: infer Args) => PromiseOrObject<{
51
+ }> ? (...args: Args) => Promise<Job> : Signal[K] extends (...args: infer Args) => PromiseOrObject<{
48
52
  __Returns__: "Subscribe";
49
- } & infer Return> ? (...args: [...FilterOutInternalArgs<Args>, data: DocumentModel<Return>]) => void : never;
53
+ } & infer Return> ? (...args: [...Args, data: DocumentModel<Return>]) => void : never;
50
54
  } & {
51
55
  queue: BullQueue;
52
56
  websocket: Server;
53
57
  };
54
58
  export declare function Db(name: string): PropertyDecorator;
55
- export declare const serviceOf: (target: Type) => Type;
59
+ export declare const serviceOf: (target: Type) => new (...args: any[]) => any;
56
60
  export declare function MixSrvs<T extends Type[]>(...services: [...T]): Type<MergeAllTypes<T>>;
57
61
  export declare const LogService: <T extends string>(name: T) => {
58
62
  new (): {
59
63
  logger: Logger;
60
64
  };
61
65
  };
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>> = {
66
+ export type DatabaseService<T extends string, Input, Doc, Obj, Model, Insight, Filter extends FilterInstance, LibSrvs extends Type[] = [], _Query extends ExtractQuery<Filter> = ExtractQuery<Filter>, _Sort extends ExtractSort<Filter> = ExtractSort<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>> = {
63
67
  logger: Logger;
64
68
  __databaseModel: Model;
65
69
  __list(query?: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<Doc[]>;
@@ -111,9 +115,15 @@ export type DatabaseService<T extends string, Input, Doc, Obj, Model, Insight, F
111
115
  } & QueryMethodPart<_Query, _Sort, Obj, Doc, Insight, _FindQueryOption, _ListQueryOption, _QueryOfDoc> & {
112
116
  [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
117
  }>;
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> : {
118
+ 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 FilterInstance, LibSrvs extends Type[], _CapitalizedT extends string = Capitalize<T>, _QueryOfDoc extends QueryOf<Doc> = QueryOf<Doc>, _Query extends ExtractQuery<Filter> = ExtractQuery<Filter>, _Sort extends ExtractSort<Filter> = ExtractSort<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>>;
119
+ export declare function serve<Injection extends InjectBuilder>(refName: string, injectBuilder: Injection, ...extendSrvs: Type[]): Type<{
116
120
  logger: Logger;
117
- }>;
121
+ } & ExtractInjectInfoObject<ReturnType<Injection>>>;
122
+ export declare function serve<Injection extends InjectBuilder>(refName: string, option: ServiceOptions, injectBuilder: Injection, ...extendSrvs: Type[]): Type<{
123
+ logger: Logger;
124
+ } & ExtractInjectInfoObject<ReturnType<Injection>>>;
125
+ export declare function serve<T extends string, Input, Doc, Model, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterInstance, Injection extends InjectBuilder, LibSrvs extends Type[] = []>(db: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter>, injectBuilder: Injection, ...extendSrvs: LibSrvs): Type<DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter, LibSrvs> & ExtractInjectInfoObject<ReturnType<Injection>>>;
126
+ export declare function serve<T extends string, Input, Doc, Model, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterInstance, Injection extends InjectBuilder, LibSrvs extends Type[] = []>(db: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter>, injectBuilder: Injection, ...extendSrvs: LibSrvs): Type<DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter, LibSrvs> & ExtractInjectInfoObject<ReturnType<Injection>>>;
127
+ export declare function serve<T extends string, Input, Doc, Model, Middleware extends BaseMiddleware, Obj, Insight, Filter extends FilterInstance, Injection extends InjectBuilder, LibSrvs extends Type[] = []>(db: Database<T, Input, Doc, Model, Middleware, Obj, Insight, Filter>, option: ServiceOptions, injectBuilder: Injection, ...extendSrvs: LibSrvs): Type<DatabaseService<T, Input, Doc, Obj, Model, Insight, Filter, LibSrvs> & ExtractInjectInfoObject<ReturnType<Injection>>>;
118
128
  export declare const makeProvidersForSrv: (srvRef: Type) => Provider[];
119
129
  export {};
@@ -1,9 +1,9 @@
1
1
  import type { Type } from "@akanjs/base";
2
2
  export declare const serviceInfo: {
3
- database: Map<string, Set<Type>>;
4
- service: Map<string, Type>;
3
+ database: Map<string, Set<new (...args: any[]) => any>>;
4
+ service: Map<string, new (...args: any[]) => any>;
5
5
  setDatabase(refName: string, service: Type): void;
6
- getDatabase(refName: string): Type[];
6
+ getDatabase(refName: string): (new (...args: any[]) => any)[];
7
7
  setService(refName: string, service: Type): void;
8
8
  registerServices<Srvs extends {
9
9
  [key: string]: Type;