@akanjs/service 0.9.42 → 0.9.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,13 +30,24 @@ __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");
33
+ var import_dictionary = require("@akanjs/dictionary");
34
34
  var import_serviceDecorators = require("./serviceDecorators");
35
35
  let BaseService = class extends (0, import_serviceDecorators.LogService)("BaseService") {
36
36
  onCleanup;
37
37
  baseSignal;
38
- intervalPing() {
39
- this.baseSignal.pubsubPing((/* @__PURE__ */ new Date()).toISOString());
38
+ publishPing() {
39
+ this.baseSignal.pubsubPing("ping");
40
+ }
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);
40
51
  }
41
52
  async cleanup() {
42
53
  if (!this.onCleanup)
@@ -50,9 +61,6 @@ __decorateClass([
50
61
  __decorateClass([
51
62
  (0, import_serviceDecorators.Sig)()
52
63
  ], BaseService.prototype, "baseSignal", 2);
53
- __decorateClass([
54
- (0, import_nest.Interval)(5e3)
55
- ], BaseService.prototype, "intervalPing", 1);
56
64
  BaseService = __decorateClass([
57
65
  (0, import_serviceDecorators.Service)("BaseService")
58
66
  ], BaseService);
@@ -29,9 +29,6 @@ __export(serviceDecorators_exports, {
29
29
  Db: () => Db,
30
30
  DbService: () => DbService,
31
31
  Env: () => Env,
32
- ExtendedSettingService: () => ExtendedSettingService,
33
- ExtendedSummaryService: () => ExtendedSummaryService,
34
- ExtendedUserService: () => ExtendedUserService,
35
32
  Gen: () => Gen,
36
33
  LogService: () => LogService,
37
34
  MixSrvs: () => MixSrvs,
@@ -40,6 +37,7 @@ __export(serviceDecorators_exports, {
40
37
  Sig: () => Sig,
41
38
  Srv: () => Srv,
42
39
  Use: () => Use,
40
+ getAllServiceRefs: () => getAllServiceRefs,
43
41
  getServiceMeta: () => getServiceMeta,
44
42
  getServiceRefs: () => getServiceRefs,
45
43
  isServiceEnabled: () => isServiceEnabled,
@@ -57,6 +55,10 @@ class ServiceStorage {
57
55
  const getServiceRefs = (refName) => {
58
56
  return Reflect.getMetadata(refName, ServiceStorage.prototype) ?? [];
59
57
  };
58
+ const getAllServiceRefs = () => {
59
+ const keys = Reflect.getMetadataKeys(ServiceStorage.prototype);
60
+ return keys.map((key) => getServiceRefs(key)[0]);
61
+ };
60
62
  const setServiceRefs = (refName, services) => {
61
63
  Reflect.defineMetadata(refName, services, ServiceStorage.prototype);
62
64
  };
@@ -157,14 +159,16 @@ const serviceOf = (target) => {
157
159
  (0, import_common2.Injectable)()(srvRef);
158
160
  return srvRef;
159
161
  };
160
- const AVOID_MIX_SRV_KEY_SET = /* @__PURE__ */ new Set(["onModuleInit", "onModuleDestroy"]);
161
- function MixSrvs(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) {
162
- class Mix extends t1 {
162
+ function MixSrvs(...services) {
163
+ if (services.length === 0)
164
+ throw new Error("MixSrvs requires at least one service");
165
+ const [baseService, ...restServices] = services;
166
+ class Mix extends baseService {
163
167
  }
164
168
  const injectMetadataMap = new Map(
165
- [t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20].filter((t) => !!t).reduce((acc, srvRef) => {
169
+ restServices.reduce((acc, srvRef) => {
166
170
  const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef);
167
- (0, import_common.applyMixins)(Mix, [srvRef], AVOID_MIX_SRV_KEY_SET);
171
+ (0, import_common.applyMixins)(Mix, [srvRef]);
168
172
  return [...acc, ...injectMetadataMap2];
169
173
  }, [])
170
174
  );
@@ -187,102 +191,112 @@ const LogService = (name) => {
187
191
  }
188
192
  return LogService2;
189
193
  };
190
- const DbService = (database, sigRef) => {
194
+ const DbService = (database, ...libSrvRefs) => {
191
195
  const [modelName, className] = [database.refName, (0, import_common.capitalize)(database.refName)];
192
- class DbService2 {
193
- logger = new import_common.Logger(`${(0, import_common.capitalize)(modelName)}Service`);
194
- __databaseModel;
195
- async __list(query, queryOption) {
196
- return await this.__databaseModel.__list(query, queryOption);
197
- }
198
- async __listIds(query, queryOption) {
199
- return await this.__databaseModel.__listIds(query, queryOption);
200
- }
201
- async __find(query, queryOption) {
202
- return await this.__databaseModel.__find(query, queryOption);
203
- }
204
- async __findId(query, queryOption) {
205
- return await this.__databaseModel.__findId(query, queryOption);
206
- }
207
- async __pick(query, queryOption) {
208
- return await this.__databaseModel.__pick(query, queryOption);
209
- }
210
- async __pickId(query, queryOption) {
211
- return await this.__databaseModel.__pickId(query, queryOption);
212
- }
213
- async __exists(query) {
214
- return await this.__databaseModel.__exists(query);
215
- }
216
- async __count(query) {
217
- return await this.__databaseModel.__count(query);
218
- }
219
- async __insight(query) {
220
- return await this.__databaseModel.__insight(query);
221
- }
222
- async __search(searchText, queryOption) {
223
- return await this.__databaseModel[`search${className}`](searchText, queryOption);
224
- }
225
- async __searchDocs(searchText, queryOption) {
226
- return await this.__databaseModel[`searchDocs${className}`](searchText, queryOption);
227
- }
228
- async __searchCount(searchText) {
229
- return await this.__databaseModel[`searchCount${className}`](searchText);
230
- }
231
- async _preCreate(data) {
232
- return data;
233
- }
234
- async _postCreate(doc) {
235
- return doc;
236
- }
237
- async _preUpdate(id, data) {
238
- return data;
239
- }
240
- async _postUpdate(doc) {
241
- return doc;
242
- }
243
- async _preRemove(id) {
244
- return;
245
- }
246
- async _postRemove(doc) {
247
- return doc;
248
- }
249
- async [`get${className}`](id) {
250
- return await this.__databaseModel[`get${className}`](id);
251
- }
252
- async [`load${className}`](id) {
253
- return await this.__databaseModel[`load${className}`](id);
254
- }
255
- async [`load${className}Many`](ids) {
256
- return await this.__databaseModel[`load${className}Many`](ids);
257
- }
258
- async [`create${className}`](data) {
259
- const input = await this._preCreate(data);
260
- const doc = await this.__databaseModel[`create${className}`](input);
261
- return await this._postCreate(doc);
262
- }
263
- async [`update${className}`](id, data) {
264
- const input = await this._preUpdate(id, data);
265
- const doc = await this.__databaseModel[`update${className}`](id, input);
266
- return await this._postUpdate(doc);
196
+ const getDefaultDbService = () => {
197
+ class DbService3 {
198
+ logger = new import_common.Logger(`${(0, import_common.capitalize)(modelName)}Service`);
199
+ __databaseModel;
200
+ async __list(query, queryOption) {
201
+ return await this.__databaseModel.__list(query, queryOption);
202
+ }
203
+ async __listIds(query, queryOption) {
204
+ return await this.__databaseModel.__listIds(query, queryOption);
205
+ }
206
+ async __find(query, queryOption) {
207
+ return await this.__databaseModel.__find(query, queryOption);
208
+ }
209
+ async __findId(query, queryOption) {
210
+ return await this.__databaseModel.__findId(query, queryOption);
211
+ }
212
+ async __pick(query, queryOption) {
213
+ return await this.__databaseModel.__pick(query, queryOption);
214
+ }
215
+ async __pickId(query, queryOption) {
216
+ return await this.__databaseModel.__pickId(query, queryOption);
217
+ }
218
+ async __exists(query) {
219
+ return await this.__databaseModel.__exists(query);
220
+ }
221
+ async __count(query) {
222
+ return await this.__databaseModel.__count(query);
223
+ }
224
+ async __insight(query) {
225
+ return await this.__databaseModel.__insight(query);
226
+ }
227
+ async __search(searchText, queryOption) {
228
+ return await this.__databaseModel[`search${className}`](searchText, queryOption);
229
+ }
230
+ async __searchDocs(searchText, queryOption) {
231
+ return await this.__databaseModel[`searchDocs${className}`](searchText, queryOption);
232
+ }
233
+ async __searchCount(searchText) {
234
+ return await this.__databaseModel[`searchCount${className}`](searchText);
235
+ }
236
+ async _preCreate(data) {
237
+ return data;
238
+ }
239
+ async _postCreate(doc) {
240
+ return doc;
241
+ }
242
+ async _preUpdate(id, data) {
243
+ return data;
244
+ }
245
+ async _postUpdate(doc) {
246
+ return doc;
247
+ }
248
+ async _preRemove(id) {
249
+ return;
250
+ }
251
+ async _postRemove(doc) {
252
+ return doc;
253
+ }
254
+ listenPre(type, listener) {
255
+ return this.__databaseModel.listenPre(type, listener);
256
+ }
257
+ listenPost(type, listener) {
258
+ return this.__databaseModel.listenPost(type, listener);
259
+ }
260
+ async [`get${className}`](id) {
261
+ return await this.__databaseModel[`get${className}`](id);
262
+ }
263
+ async [`load${className}`](id) {
264
+ return await this.__databaseModel[`load${className}`](id);
265
+ }
266
+ async [`load${className}Many`](ids) {
267
+ return await this.__databaseModel[`load${className}Many`](ids);
268
+ }
269
+ async [`create${className}`](data) {
270
+ const input = await this._preCreate(data);
271
+ const doc = await this.__databaseModel[`create${className}`](input);
272
+ return await this._postCreate(doc);
273
+ }
274
+ async [`update${className}`](id, data) {
275
+ const input = await this._preUpdate(id, data);
276
+ const doc = await this.__databaseModel[`update${className}`](id, input);
277
+ return await this._postUpdate(doc);
278
+ }
279
+ async [`remove${className}`](id) {
280
+ await this._preRemove(id);
281
+ const doc = await this.__databaseModel[`remove${className}`](id);
282
+ return await this._postRemove(doc);
283
+ }
284
+ async [`search${className}`](query, queryOption) {
285
+ return await this.__databaseModel[`search${className}`](query, queryOption);
286
+ }
287
+ async [`searchDocs${className}`](query, queryOption) {
288
+ return await this.__databaseModel[`searchDocs${className}`](query, queryOption);
289
+ }
290
+ async [`searchCount${className}`](query) {
291
+ return await this.__databaseModel[`searchCount${className}`](query);
292
+ }
267
293
  }
268
- async [`remove${className}`](id) {
269
- await this._preRemove(id);
270
- const doc = await this.__databaseModel[`remove${className}`](id);
271
- return await this._postRemove(doc);
272
- }
273
- async [`search${className}`](query, queryOption) {
274
- return await this.__databaseModel[`search${className}`](query, queryOption);
275
- }
276
- async [`searchDocs${className}`](query, queryOption) {
277
- return await this.__databaseModel[`searchDocs${className}`](query, queryOption);
278
- }
279
- async [`searchCount${className}`](query) {
280
- return await this.__databaseModel[`searchCount${className}`](query);
281
- }
282
- }
283
- __decorateClass([
284
- Use(`${modelName}Model`)
285
- ], DbService2.prototype, "__databaseModel", 2);
294
+ __decorateClass([
295
+ Use(`${modelName}Model`)
296
+ ], DbService3.prototype, "__databaseModel", 2);
297
+ Use(`${modelName}Model`)(DbService3.prototype, `${modelName}Model`);
298
+ return DbService3;
299
+ };
286
300
  const getQueryDataFromKey = (queryKey, args) => {
287
301
  const lastArg = args.at(-1);
288
302
  const hasQueryOption = lastArg && typeof lastArg === "object" && (typeof lastArg.select === "object" || typeof lastArg.skip === "number" || typeof lastArg.limit === "number" || typeof lastArg.sort === "string");
@@ -291,6 +305,7 @@ const DbService = (database, sigRef) => {
291
305
  const queryOption = hasQueryOption ? lastArg : {};
292
306
  return { query, queryOption };
293
307
  };
308
+ const DbService2 = libSrvRefs.length > 0 ? MixSrvs(...libSrvRefs) : getDefaultDbService();
294
309
  const filterKeyMetaMap = (0, import_constant.getFilterKeyMetaMapOnPrototype)(database.Filter.prototype);
295
310
  const queryKeys = [...filterKeyMetaMap.keys()];
296
311
  queryKeys.forEach((queryKey) => {
@@ -332,33 +347,8 @@ const DbService = (database, sigRef) => {
332
347
  return this.__insight(query);
333
348
  };
334
349
  });
335
- Use(`${modelName}Model`)(DbService2.prototype, `${modelName}Model`);
336
350
  return DbService2;
337
351
  };
338
- const ExtendedUserService = (database, srvRef, sigRef) => {
339
- const filterKeyMetaMap = (0, import_constant.getFilterKeyMetaMapOnPrototype)(database.Filter.prototype);
340
- const queryKeys = [...filterKeyMetaMap.keys()];
341
- queryKeys.forEach((queryKey) => {
342
- const queryFn = (0, import_constant.getFilterQuery)(database.Filter, queryKey);
343
- srvRef.prototype[`list${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
344
- const queryOption = args.at(-1);
345
- const hasQueryOption = typeof queryOption === "object" && (typeof queryOption.select === "object" || typeof queryOption.skip === "number" || typeof queryOption.limit === "number" || typeof queryOption.sort === "string");
346
- const query = queryFn(...hasQueryOption ? args.slice(0, -1) : args);
347
- return this.__list(query, queryOption);
348
- };
349
- srvRef.prototype[`insight${(0, import_common.capitalize)(queryKey)}`] = async function(...args) {
350
- const query = queryFn(...args);
351
- return this.__insight(query);
352
- };
353
- });
354
- return srvRef;
355
- };
356
- const ExtendedSummaryService = (database, srvRef, sigRef) => {
357
- return srvRef;
358
- };
359
- const ExtendedSettingService = (database, srvRef, sigRef) => {
360
- return srvRef;
361
- };
362
352
  const makeProvidersForSrv = (srvRef) => {
363
353
  const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
364
354
  const providers = [];
@@ -387,9 +377,6 @@ const makeProvidersForSrv = (srvRef) => {
387
377
  Db,
388
378
  DbService,
389
379
  Env,
390
- ExtendedSettingService,
391
- ExtendedSummaryService,
392
- ExtendedUserService,
393
380
  Gen,
394
381
  LogService,
395
382
  MixSrvs,
@@ -398,6 +385,7 @@ const makeProvidersForSrv = (srvRef) => {
398
385
  Sig,
399
386
  Srv,
400
387
  Use,
388
+ getAllServiceRefs,
401
389
  getServiceMeta,
402
390
  getServiceRefs,
403
391
  isServiceEnabled,
@@ -9,13 +9,24 @@ var __decorateClass = (decorators, target, key, kind) => {
9
9
  __defProp(target, key, result);
10
10
  return result;
11
11
  };
12
- import { Interval } from "@akanjs/nest";
12
+ import { getDictionary, translate } from "@akanjs/dictionary";
13
13
  import { Gen, LogService, Service, Sig } from "./serviceDecorators";
14
14
  let BaseService = class extends LogService("BaseService") {
15
15
  onCleanup;
16
16
  baseSignal;
17
- intervalPing() {
18
- this.baseSignal.pubsubPing((/* @__PURE__ */ new Date()).toISOString());
17
+ publishPing() {
18
+ this.baseSignal.pubsubPing("ping");
19
+ }
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);
19
30
  }
20
31
  async cleanup() {
21
32
  if (!this.onCleanup)
@@ -29,9 +40,6 @@ __decorateClass([
29
40
  __decorateClass([
30
41
  Sig()
31
42
  ], BaseService.prototype, "baseSignal", 2);
32
- __decorateClass([
33
- Interval(5e3)
34
- ], BaseService.prototype, "intervalPing", 1);
35
43
  BaseService = __decorateClass([
36
44
  Service("BaseService")
37
45
  ], BaseService);
@@ -22,6 +22,10 @@ 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
  };
@@ -122,14 +126,16 @@ const serviceOf = (target) => {
122
126
  Injectable()(srvRef);
123
127
  return srvRef;
124
128
  };
125
- const AVOID_MIX_SRV_KEY_SET = /* @__PURE__ */ new Set(["onModuleInit", "onModuleDestroy"]);
126
- function MixSrvs(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) {
127
- class Mix extends t1 {
129
+ function MixSrvs(...services) {
130
+ if (services.length === 0)
131
+ throw new Error("MixSrvs requires at least one service");
132
+ const [baseService, ...restServices] = services;
133
+ class Mix extends baseService {
128
134
  }
129
135
  const injectMetadataMap = new Map(
130
- [t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20].filter((t) => !!t).reduce((acc, srvRef) => {
136
+ restServices.reduce((acc, srvRef) => {
131
137
  const injectMetadataMap2 = getServiceInjectMetaMapOnPrototype(srvRef);
132
- applyMixins(Mix, [srvRef], AVOID_MIX_SRV_KEY_SET);
138
+ applyMixins(Mix, [srvRef]);
133
139
  return [...acc, ...injectMetadataMap2];
134
140
  }, [])
135
141
  );
@@ -152,102 +158,112 @@ const LogService = (name) => {
152
158
  }
153
159
  return LogService2;
154
160
  };
155
- const DbService = (database, sigRef) => {
161
+ const DbService = (database, ...libSrvRefs) => {
156
162
  const [modelName, className] = [database.refName, capitalize(database.refName)];
157
- class DbService2 {
158
- logger = new Logger(`${capitalize(modelName)}Service`);
159
- __databaseModel;
160
- async __list(query, queryOption) {
161
- return await this.__databaseModel.__list(query, queryOption);
162
- }
163
- async __listIds(query, queryOption) {
164
- return await this.__databaseModel.__listIds(query, queryOption);
165
- }
166
- async __find(query, queryOption) {
167
- return await this.__databaseModel.__find(query, queryOption);
168
- }
169
- async __findId(query, queryOption) {
170
- return await this.__databaseModel.__findId(query, queryOption);
171
- }
172
- async __pick(query, queryOption) {
173
- return await this.__databaseModel.__pick(query, queryOption);
174
- }
175
- async __pickId(query, queryOption) {
176
- return await this.__databaseModel.__pickId(query, queryOption);
177
- }
178
- async __exists(query) {
179
- return await this.__databaseModel.__exists(query);
180
- }
181
- async __count(query) {
182
- return await this.__databaseModel.__count(query);
183
- }
184
- async __insight(query) {
185
- return await this.__databaseModel.__insight(query);
186
- }
187
- async __search(searchText, queryOption) {
188
- return await this.__databaseModel[`search${className}`](searchText, queryOption);
189
- }
190
- async __searchDocs(searchText, queryOption) {
191
- return await this.__databaseModel[`searchDocs${className}`](searchText, queryOption);
192
- }
193
- async __searchCount(searchText) {
194
- return await this.__databaseModel[`searchCount${className}`](searchText);
195
- }
196
- async _preCreate(data) {
197
- return data;
198
- }
199
- async _postCreate(doc) {
200
- return doc;
201
- }
202
- async _preUpdate(id, data) {
203
- return data;
204
- }
205
- async _postUpdate(doc) {
206
- return doc;
207
- }
208
- async _preRemove(id) {
209
- return;
210
- }
211
- async _postRemove(doc) {
212
- return doc;
213
- }
214
- async [`get${className}`](id) {
215
- return await this.__databaseModel[`get${className}`](id);
216
- }
217
- async [`load${className}`](id) {
218
- return await this.__databaseModel[`load${className}`](id);
219
- }
220
- async [`load${className}Many`](ids) {
221
- return await this.__databaseModel[`load${className}Many`](ids);
222
- }
223
- async [`create${className}`](data) {
224
- const input = await this._preCreate(data);
225
- const doc = await this.__databaseModel[`create${className}`](input);
226
- return await this._postCreate(doc);
227
- }
228
- async [`update${className}`](id, data) {
229
- const input = await this._preUpdate(id, data);
230
- const doc = await this.__databaseModel[`update${className}`](id, input);
231
- return await this._postUpdate(doc);
163
+ const getDefaultDbService = () => {
164
+ class DbService3 {
165
+ logger = new Logger(`${capitalize(modelName)}Service`);
166
+ __databaseModel;
167
+ async __list(query, queryOption) {
168
+ return await this.__databaseModel.__list(query, queryOption);
169
+ }
170
+ async __listIds(query, queryOption) {
171
+ return await this.__databaseModel.__listIds(query, queryOption);
172
+ }
173
+ async __find(query, queryOption) {
174
+ return await this.__databaseModel.__find(query, queryOption);
175
+ }
176
+ async __findId(query, queryOption) {
177
+ return await this.__databaseModel.__findId(query, queryOption);
178
+ }
179
+ async __pick(query, queryOption) {
180
+ return await this.__databaseModel.__pick(query, queryOption);
181
+ }
182
+ async __pickId(query, queryOption) {
183
+ return await this.__databaseModel.__pickId(query, queryOption);
184
+ }
185
+ async __exists(query) {
186
+ return await this.__databaseModel.__exists(query);
187
+ }
188
+ async __count(query) {
189
+ return await this.__databaseModel.__count(query);
190
+ }
191
+ async __insight(query) {
192
+ return await this.__databaseModel.__insight(query);
193
+ }
194
+ async __search(searchText, queryOption) {
195
+ return await this.__databaseModel[`search${className}`](searchText, queryOption);
196
+ }
197
+ async __searchDocs(searchText, queryOption) {
198
+ return await this.__databaseModel[`searchDocs${className}`](searchText, queryOption);
199
+ }
200
+ async __searchCount(searchText) {
201
+ return await this.__databaseModel[`searchCount${className}`](searchText);
202
+ }
203
+ async _preCreate(data) {
204
+ return data;
205
+ }
206
+ async _postCreate(doc) {
207
+ return doc;
208
+ }
209
+ async _preUpdate(id, data) {
210
+ return data;
211
+ }
212
+ async _postUpdate(doc) {
213
+ return doc;
214
+ }
215
+ async _preRemove(id) {
216
+ return;
217
+ }
218
+ async _postRemove(doc) {
219
+ return doc;
220
+ }
221
+ listenPre(type, listener) {
222
+ return this.__databaseModel.listenPre(type, listener);
223
+ }
224
+ listenPost(type, listener) {
225
+ return this.__databaseModel.listenPost(type, listener);
226
+ }
227
+ async [`get${className}`](id) {
228
+ return await this.__databaseModel[`get${className}`](id);
229
+ }
230
+ async [`load${className}`](id) {
231
+ return await this.__databaseModel[`load${className}`](id);
232
+ }
233
+ async [`load${className}Many`](ids) {
234
+ return await this.__databaseModel[`load${className}Many`](ids);
235
+ }
236
+ async [`create${className}`](data) {
237
+ const input = await this._preCreate(data);
238
+ const doc = await this.__databaseModel[`create${className}`](input);
239
+ return await this._postCreate(doc);
240
+ }
241
+ async [`update${className}`](id, data) {
242
+ const input = await this._preUpdate(id, data);
243
+ const doc = await this.__databaseModel[`update${className}`](id, input);
244
+ return await this._postUpdate(doc);
245
+ }
246
+ async [`remove${className}`](id) {
247
+ await this._preRemove(id);
248
+ const doc = await this.__databaseModel[`remove${className}`](id);
249
+ return await this._postRemove(doc);
250
+ }
251
+ async [`search${className}`](query, queryOption) {
252
+ return await this.__databaseModel[`search${className}`](query, queryOption);
253
+ }
254
+ async [`searchDocs${className}`](query, queryOption) {
255
+ return await this.__databaseModel[`searchDocs${className}`](query, queryOption);
256
+ }
257
+ async [`searchCount${className}`](query) {
258
+ return await this.__databaseModel[`searchCount${className}`](query);
259
+ }
232
260
  }
233
- async [`remove${className}`](id) {
234
- await this._preRemove(id);
235
- const doc = await this.__databaseModel[`remove${className}`](id);
236
- return await this._postRemove(doc);
237
- }
238
- async [`search${className}`](query, queryOption) {
239
- return await this.__databaseModel[`search${className}`](query, queryOption);
240
- }
241
- async [`searchDocs${className}`](query, queryOption) {
242
- return await this.__databaseModel[`searchDocs${className}`](query, queryOption);
243
- }
244
- async [`searchCount${className}`](query) {
245
- return await this.__databaseModel[`searchCount${className}`](query);
246
- }
247
- }
248
- __decorateClass([
249
- Use(`${modelName}Model`)
250
- ], DbService2.prototype, "__databaseModel", 2);
261
+ __decorateClass([
262
+ Use(`${modelName}Model`)
263
+ ], DbService3.prototype, "__databaseModel", 2);
264
+ Use(`${modelName}Model`)(DbService3.prototype, `${modelName}Model`);
265
+ return DbService3;
266
+ };
251
267
  const getQueryDataFromKey = (queryKey, args) => {
252
268
  const lastArg = args.at(-1);
253
269
  const hasQueryOption = lastArg && typeof lastArg === "object" && (typeof lastArg.select === "object" || typeof lastArg.skip === "number" || typeof lastArg.limit === "number" || typeof lastArg.sort === "string");
@@ -256,6 +272,7 @@ const DbService = (database, sigRef) => {
256
272
  const queryOption = hasQueryOption ? lastArg : {};
257
273
  return { query, queryOption };
258
274
  };
275
+ const DbService2 = libSrvRefs.length > 0 ? MixSrvs(...libSrvRefs) : getDefaultDbService();
259
276
  const filterKeyMetaMap = getFilterKeyMetaMapOnPrototype(database.Filter.prototype);
260
277
  const queryKeys = [...filterKeyMetaMap.keys()];
261
278
  queryKeys.forEach((queryKey) => {
@@ -297,33 +314,8 @@ const DbService = (database, sigRef) => {
297
314
  return this.__insight(query);
298
315
  };
299
316
  });
300
- Use(`${modelName}Model`)(DbService2.prototype, `${modelName}Model`);
301
317
  return DbService2;
302
318
  };
303
- const ExtendedUserService = (database, srvRef, sigRef) => {
304
- const filterKeyMetaMap = getFilterKeyMetaMapOnPrototype(database.Filter.prototype);
305
- const queryKeys = [...filterKeyMetaMap.keys()];
306
- queryKeys.forEach((queryKey) => {
307
- const queryFn = getFilterQuery(database.Filter, queryKey);
308
- srvRef.prototype[`list${capitalize(queryKey)}`] = async function(...args) {
309
- const queryOption = args.at(-1);
310
- const hasQueryOption = typeof queryOption === "object" && (typeof queryOption.select === "object" || typeof queryOption.skip === "number" || typeof queryOption.limit === "number" || typeof queryOption.sort === "string");
311
- const query = queryFn(...hasQueryOption ? args.slice(0, -1) : args);
312
- return this.__list(query, queryOption);
313
- };
314
- srvRef.prototype[`insight${capitalize(queryKey)}`] = async function(...args) {
315
- const query = queryFn(...args);
316
- return this.__insight(query);
317
- };
318
- });
319
- return srvRef;
320
- };
321
- const ExtendedSummaryService = (database, srvRef, sigRef) => {
322
- return srvRef;
323
- };
324
- const ExtendedSettingService = (database, srvRef, sigRef) => {
325
- return srvRef;
326
- };
327
319
  const makeProvidersForSrv = (srvRef) => {
328
320
  const injectMetaMap = getServiceInjectMetaMapOnPrototype(srvRef.prototype);
329
321
  const providers = [];
@@ -351,9 +343,6 @@ export {
351
343
  Db,
352
344
  DbService,
353
345
  Env,
354
- ExtendedSettingService,
355
- ExtendedSummaryService,
356
- ExtendedUserService,
357
346
  Gen,
358
347
  LogService,
359
348
  MixSrvs,
@@ -362,6 +351,7 @@ export {
362
351
  Sig,
363
352
  Srv,
364
353
  Use,
354
+ getAllServiceRefs,
365
355
  getServiceMeta,
366
356
  getServiceRefs,
367
357
  isServiceEnabled,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/service",
3
- "version": "0.9.42",
3
+ "version": "0.9.44",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -8,7 +8,17 @@ declare const BaseService_base: {
8
8
  export declare class BaseService extends BaseService_base {
9
9
  onCleanup?: () => Promise<void>;
10
10
  baseSignal: Sig<BaseSignal>;
11
- intervalPing(): void;
11
+ 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
+ };
12
22
  cleanup(): Promise<void>;
13
23
  }
14
24
  export declare const allSrvs: {
@@ -1,8 +1,8 @@
1
1
  import "reflect-metadata";
2
- import { BaseObject, type Prettify, Type } from "@akanjs/base";
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, type GetActionObject, ListQueryOption, QueryOf, type SortOf } from "@akanjs/constant";
5
- import type { BaseMiddleware, Database, DatabaseModel, DataInputOf } from "@akanjs/document";
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";
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";
@@ -11,7 +11,7 @@ import type { Server } from "socket.io";
11
11
  export type GetServices<AllSrvs extends {
12
12
  [key: string]: Type | undefined;
13
13
  }> = {
14
- [key in keyof AllSrvs]: AllSrvs[key] extends Type<infer Srv> | undefined ? Srv : AllSrvs[key] extends Type<infer Srv> ? Srv : never;
14
+ [K in keyof AllSrvs]: UnType<NonNullable<AllSrvs[K]>>;
15
15
  };
16
16
  export declare class ServiceStorage {
17
17
  }
@@ -20,6 +20,7 @@ interface ServiceMeta {
20
20
  enabled: boolean;
21
21
  }
22
22
  export declare const getServiceRefs: (refName: string) => Type[];
23
+ export declare const getAllServiceRefs: () => Type[];
23
24
  export declare const getServiceMeta: (srvRef: Type) => ServiceMeta | undefined;
24
25
  export declare const isServiceEnabled: (srvRef: Type) => boolean;
25
26
  export interface ServiceInjectMeta {
@@ -37,117 +38,81 @@ export declare function Srv(name?: string): PropertyDecorator;
37
38
  export declare function Use(name?: string): PropertyDecorator;
38
39
  export declare function Env(envKey: string, generateFactory?: (envValue: string, options: any) => any): PropertyDecorator;
39
40
  export declare function Gen(generateFactory: (options: any) => any): PropertyDecorator;
40
- type Queue<Signal> = {
41
- [K in keyof Signal as K extends string ? Signal[K] extends (...args: any) => Promise<{
42
- __Returns__: "Done";
43
- }> ? K : never : never]: Signal[K] extends (...args: infer Args) => Promise<infer R> ? (...args: FilterOutInternalArgs<Args>) => Promise<Job> : never;
44
- } & {
45
- queue: BullQueue;
41
+ export declare function Sig(name?: string): PropertyDecorator;
42
+ type ServiceSignalReturnType = {
43
+ __Returns__: "Done";
44
+ } | {
45
+ __Returns__: "Subscribe";
46
46
  };
47
- type Websocket<Signal> = {
48
- [K in keyof Signal as K extends string ? Signal[K] extends (...args: any) => Promise<{
49
- __Returns__: "Subscribe";
50
- }> ? K : Signal[K] extends (...args: any) => {
51
- __Returns__: "Subscribe";
52
- } ? K : never : never]: Signal[K] extends (...args: infer Args) => Promise<{
53
- __Returns__: "Subscribe";
54
- } & infer R> ? (...args: [...FilterOutInternalArgs<Args>, data: DocumentModel<R>]) => Promise<void> : Signal[K] extends (...args: infer Args) => {
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<{
49
+ __Returns__: "Done";
50
+ }> ? (...args: FilterOutInternalArgs<Args>) => Promise<Job> : Signal[K] extends (...args: infer Args) => PromiseOrObject<{
55
51
  __Returns__: "Subscribe";
56
- } & infer R ? (...args: [...FilterOutInternalArgs<Args>, data: DocumentModel<R>]) => void : never;
52
+ } & infer Return> ? (...args: [...FilterOutInternalArgs<Args>, data: DocumentModel<Return>]) => void : never;
57
53
  } & {
54
+ queue: BullQueue;
58
55
  websocket: Server;
59
56
  };
60
- export declare function Sig(name?: string): PropertyDecorator;
61
- export type Sig<Signal> = Queue<Signal> & Websocket<Signal>;
62
57
  export declare function Db(name: string): PropertyDecorator;
63
58
  export declare const serviceOf: (target: Type) => Type;
64
- export declare function MixSrvs<T1 = unknown, T2 = unknown, T3 = unknown, T4 = unknown, T5 = unknown, T6 = unknown, T7 = unknown, T8 = unknown, T9 = unknown, T10 = unknown, T11 = unknown, T12 = unknown, T13 = unknown, T14 = unknown, T15 = unknown, T16 = unknown, T17 = unknown, T18 = unknown, T19 = unknown, T20 = unknown>(t1: Type<T1>, t2?: Type<T2>, t3?: Type<T3>, t4?: Type<T4>, t5?: Type<T5>, t6?: Type<T6>, t7?: Type<T7>, t8?: Type<T8>, t9?: Type<T9>, t10?: Type<T10>, t11?: Type<T11>, t12?: Type<T12>, t13?: Type<T13>, t14?: Type<T14>, t15?: Type<T15>, t16?: Type<T16>, t17?: Type<T17>, t18?: Type<T18>, t19?: Type<T19>, t20?: Type<T20>): Type<T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11 & T12 & T13 & T14 & T15 & T16 & T17 & T18 & T19 & T20>;
59
+ export declare function MixSrvs<T extends Type[]>(...services: [...T]): Type<MergeAllTypes<T>>;
65
60
  export declare const LogService: <T extends string>(name: T) => {
66
61
  new (): {
67
62
  logger: Logger;
68
63
  };
69
64
  };
70
- type QueueService<Signal> = {
71
- [K in keyof Signal as K extends string ? Signal[K] extends (...args: any) => Promise<{
72
- __Returns__: "Done";
73
- }> ? K : never : never]: Signal[K] extends (...args: infer Args) => Promise<infer R> ? (...args: FilterOutInternalArgs<Args>) => Promise<Job> : never;
74
- };
75
- type DatabaseService<T extends string, Input, Doc, Obj, Model, Insight, Filter, Summary> = DatabaseServiceWithQuerySort<T, Input, Doc, Obj, Model, Insight, GetActionObject<Filter>, SortOf<Filter>>;
76
- type DatabaseServiceWithQuerySort<T extends string, Input, Doc, Obj, Model, Insight, Query, Sort> = {
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>> = {
77
67
  logger: Logger;
78
68
  __databaseModel: Model;
79
- __list(query?: QueryOf<Doc>, queryOption?: ListQueryOption<Sort, Obj>): Promise<Doc[]>;
80
- __listIds(query?: QueryOf<Doc>, queryOption?: ListQueryOption<Sort, Obj>): Promise<string[]>;
81
- __find(query?: QueryOf<Doc>, queryOption?: FindQueryOption<Sort, Obj>): Promise<Doc | null>;
82
- __findId(query?: QueryOf<Doc>, queryOption?: FindQueryOption<Sort, Obj>): Promise<string | null>;
83
- __pick(query?: QueryOf<Doc>, queryOption?: FindQueryOption<Sort, Obj>): Promise<Doc>;
84
- __pickId(query?: QueryOf<Doc>, queryOption?: FindQueryOption<Sort, Obj>): Promise<string>;
85
- __exists(query?: QueryOf<Doc>): Promise<string | null>;
86
- __count(query?: QueryOf<Doc>): Promise<number>;
87
- __insight(query?: QueryOf<Doc>): Promise<Insight>;
88
- __search(query: QueryOf<Doc>, queryOption?: ListQueryOption<Sort, Obj>): Promise<{
69
+ __list(query?: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<Doc[]>;
70
+ __listIds(query?: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<string[]>;
71
+ __find(query?: _QueryOfDoc, queryOption?: _FindQueryOption): Promise<Doc | null>;
72
+ __findId(query?: _QueryOfDoc, queryOption?: _FindQueryOption): Promise<string | null>;
73
+ __pick(query?: _QueryOfDoc, queryOption?: _FindQueryOption): Promise<Doc>;
74
+ __pickId(query?: _QueryOfDoc, queryOption?: _FindQueryOption): Promise<string>;
75
+ __exists(query?: _QueryOfDoc): Promise<string | null>;
76
+ __count(query?: _QueryOfDoc): Promise<number>;
77
+ __insight(query?: _QueryOfDoc): Promise<Insight>;
78
+ __search(query: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<{
89
79
  docs: Doc[];
90
80
  count: number;
91
81
  }>;
92
- __searchDocs(query: QueryOf<Doc>, queryOption?: ListQueryOption<Sort, Obj>): Promise<Doc[]>;
93
- __searchCount(query: QueryOf<Doc>): Promise<number>;
94
- _preCreate(data: DataInputOf<Input, Doc>): Promise<DataInputOf<Input, Doc>> | DataInputOf<Input, Doc>;
82
+ __searchDocs(query: _QueryOfDoc, queryOption?: _ListQueryOption): Promise<Doc[]>;
83
+ __searchCount(query: _QueryOfDoc): Promise<number>;
84
+ _preCreate(data: _DataInputOfDoc): PromiseOrObject<_DataInputOfDoc>;
95
85
  _postCreate(doc: Doc): Promise<Doc> | Doc;
96
- _preUpdate(id: string, data: Partial<Doc>): Promise<Partial<Doc>> | Partial<Doc>;
86
+ _preUpdate(id: string, data: Partial<Doc>): PromiseOrObject<Partial<Doc>>;
97
87
  _postUpdate(doc: Doc): Promise<Doc> | Doc;
98
88
  _preRemove(id: string): Promise<void> | void;
99
89
  _postRemove(doc: Doc): Promise<Doc> | Doc;
90
+ listenPre: (type: SaveEventType, listener: (doc: Doc, type: CRUDEventType) => PromiseOrObject<void>) => () => void;
91
+ listenPost: (type: SaveEventType, listener: (doc: Doc, type: CRUDEventType) => PromiseOrObject<void>) => () => void;
100
92
  } & Prettify<{
101
93
  [key in `${T}Model`]: Model;
102
94
  } & {
103
- [K in `get${Capitalize<T>}`]: (id: string) => Promise<Doc>;
95
+ [K in `get${_CapitalizedT}`]: (id: string) => Promise<Doc>;
104
96
  } & {
105
- [K in `load${Capitalize<T>}`]: (id?: string) => Promise<Doc | null>;
97
+ [K in `load${_CapitalizedT}`]: (id?: string) => Promise<Doc | null>;
106
98
  } & {
107
- [K in `load${Capitalize<T>}Many`]: (ids: string[]) => Promise<Doc[]>;
99
+ [K in `load${_CapitalizedT}Many`]: (ids: string[]) => Promise<Doc[]>;
108
100
  } & {
109
- [K in `create${Capitalize<T>}`]: (data: DataInputOf<Input, Doc>) => Promise<Doc>;
101
+ [K in `create${_CapitalizedT}`]: (data: _DataInputOfDoc) => Promise<Doc>;
110
102
  } & {
111
- [K in `update${Capitalize<T>}`]: (id: string, data: Partial<Doc>) => Promise<Doc>;
103
+ [K in `update${_CapitalizedT}`]: (id: string, data: Partial<Doc>) => Promise<Doc>;
112
104
  } & {
113
- [K in `remove${Capitalize<T>}`]: (id: string) => Promise<Doc>;
105
+ [K in `remove${_CapitalizedT}`]: (id: string) => Promise<Doc>;
114
106
  } & {
115
- [K in `search${Capitalize<T>}`]: (searchText: string, queryOption?: ListQueryOption<Sort, Obj>) => Promise<{
107
+ [K in `search${_CapitalizedT}`]: (searchText: string, queryOption?: _ListQueryOption) => Promise<{
116
108
  docs: Doc[];
117
109
  count: number;
118
110
  }>;
119
111
  } & {
120
- [K in `searchDocs${Capitalize<T>}`]: (searchText: string, queryOption?: ListQueryOption<Sort, Obj>) => Promise<Doc[]>;
121
- } & {
122
- [K in `searchCount${Capitalize<T>}`]: (searchText: string) => Promise<number>;
123
- } & {
124
- [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;
125
- } & {
126
- [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;
127
- } & {
128
- [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;
129
- } & {
130
- [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;
131
- } & {
132
- [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;
133
- } & {
134
- [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;
135
- } & {
136
- [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;
137
- } & {
138
- [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[]>;
139
113
  } & {
140
- [K in keyof Query as K extends string ? `insight${Capitalize<K>}` : never]: Query[K] extends (...args: infer Args) => any ? (...args: [...Args]) => Promise<Insight> : never;
141
- }>;
142
- 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>>;
143
- 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> & {
144
- queue: QueueService<Signal>;
145
- } & { [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]; }>;
146
- 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> & {
147
- queue: QueueService<Signal>;
148
- } & { [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">>;
149
- 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> & {
150
- queue: QueueService<Signal>;
151
- } & { [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]; }>;
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, _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]; }>;
152
117
  export declare const makeProvidersForSrv: (srvRef: Type) => Provider[];
153
118
  export {};