vona-module-a-queue 5.0.34 → 5.1.1

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.
Files changed (43) hide show
  1. package/LICENSE +0 -0
  2. package/dist/.metadata/index.d.ts +1 -0
  3. package/dist/.metadata/index.d.ts.map +1 -0
  4. package/dist/.metadata/this.d.ts +1 -0
  5. package/dist/.metadata/this.d.ts.map +1 -0
  6. package/dist/bean/hmr.queue.d.ts +1 -0
  7. package/dist/bean/hmr.queue.d.ts.map +1 -0
  8. package/dist/bean/startup.loadQueueWorkers.d.ts +1 -0
  9. package/dist/bean/startup.loadQueueWorkers.d.ts.map +1 -0
  10. package/dist/config/config.d.ts +1 -0
  11. package/dist/config/config.d.ts.map +1 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +6 -17
  15. package/dist/index.js.map +1 -0
  16. package/dist/lib/beanQueueBase.d.ts +2 -1
  17. package/dist/lib/beanQueueBase.d.ts.map +1 -0
  18. package/dist/lib/index.d.ts +1 -0
  19. package/dist/lib/index.d.ts.map +1 -0
  20. package/dist/lib/queue.d.ts +1 -0
  21. package/dist/lib/queue.d.ts.map +1 -0
  22. package/dist/monkey.d.ts +1 -0
  23. package/dist/monkey.d.ts.map +1 -0
  24. package/dist/service/queue.d.ts +2 -2
  25. package/dist/service/queue.d.ts.map +1 -0
  26. package/dist/types/index.d.ts +1 -0
  27. package/dist/types/index.d.ts.map +1 -0
  28. package/dist/types/queue.d.ts +1 -0
  29. package/dist/types/queue.d.ts.map +1 -0
  30. package/package.json +37 -32
  31. package/src/.metadata/index.ts +133 -0
  32. package/src/.metadata/this.ts +2 -0
  33. package/src/bean/hmr.queue.ts +12 -0
  34. package/src/bean/startup.loadQueueWorkers.ts +14 -0
  35. package/src/config/config.ts +12 -0
  36. package/src/index.ts +3 -0
  37. package/src/lib/beanQueueBase.ts +21 -0
  38. package/src/lib/index.ts +2 -0
  39. package/src/lib/queue.ts +7 -0
  40. package/src/monkey.ts +17 -0
  41. package/src/service/queue.ts +309 -0
  42. package/src/types/index.ts +1 -0
  43. package/src/types/queue.ts +83 -0
package/LICENSE CHANGED
File without changes
@@ -93,3 +93,4 @@ declare module 'vona' {
93
93
  }
94
94
  }
95
95
  /** scope: end */
96
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"AACA,qBAAqB;AACrB,cAAc,qBAAqB,CAAC;AAEpC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,QAAQ,oBAAoB,CAAC;IAEhC,UAAiB,cAAc;QAC7B,eAAe,EAAE,KAAK,CAAC;KACxB;CAGJ;AACD,OAAO,QAAQ,qBAAqB,CAAC;IAE7B,UAAiB,YAAY;KAG5B;IAEC,UAAiB,YAAY;QAC3B,IAAI,aAAa,IAAI,uBAAuB,CAAC;QAC7C,IAAI,UAAU,IAAI,eAAe,CAAC;KAEnC;CACV;AACD,mBAAmB;AACnB,qBAAqB;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,CAAC;CACvB;AACD,mBAAmB;AACnB,qBAAqB;AAErB,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,kBAAkB;QACjC,uBAAuB,EAAE,YAAY,CAAC;KACvC;CACF;AACD,mBAAmB;AACnB,qBAAqB;AACrB,cAAc,qCAAqC,CAAC;AAEpD,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,QAAQ,uBAAuB,CAAC;IAEnC,UAAiB,cAAc;QAC7B,0BAA0B,EAAE,wBAAwB,CAAC;KACtD;CAGJ;AACD,OAAO,QAAQ,qBAAqB,CAAC;IAE7B,UAAiB,uBAAuB;KAGvC;IAEC,UAAiB,uBAAuB;QACtC,IAAI,aAAa,IAAI,kCAAkC,CAAC;QACxD,IAAI,UAAU,IAAI,0BAA0B,CAAC;QAC7C,IAAI,aAAa,IAAI,wBAAwB,CAAC;KAC/C;CACV;AACD,mBAAmB;AACnB,iBAAiB;AACjB,cAAc,sBAAsB,CAAC;AAErC,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IAElB,UAAiB,UAAU;QACzB,eAAe,EAAE,KAAK,CAAC;KACxB;CAGJ;AACD,OAAO,QAAQ,qBAAqB,CAAC;IAE7B,UAAiB,QAAQ;KAGxB;IAEC,UAAiB,QAAQ;QACvB,IAAI,aAAa,IAAI,mBAAmB,CAAC;QACzC,IAAI,UAAU,IAAI,eAAe,CAAC;KAEnC;CACV;AACD,eAAe;AACf,oBAAoB;AACpB,cAAc,qBAAqB,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,kBAAkB;AAClB,oBAAoB;AACpB,cAAc,cAAc,CAAC;AAC7B,kBAAkB;AAClB,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAGhF,qBACa,iBAAkB,SAAQ,aAAa;CAAG;AAEvD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC,OAAO,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,cAAc,CAAC;CACvB;AAED,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,gBAAgB;QAC/B,SAAS,EAAE,iBAAiB,CAAC;KAC9B;IAED,UAAiB,mBAAmB;QAClC,KAAK,EAAE,iBAAiB,CAAC;KAC1B;IAED,UAAiB,gBAAgB;QAC/B,SAAS,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;KACtC;CAKF;AACD,iBAAiB"}
@@ -1,2 +1,3 @@
1
1
  export declare const __ThisModule__ = "a-queue";
2
2
  export { ScopeModuleAQueue as ScopeModule } from './index.ts';
3
+ //# sourceMappingURL=this.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"this.d.ts","sourceRoot":"","sources":["../../src/.metadata/this.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -4,3 +4,4 @@ import { BeanBase } from 'vona';
4
4
  export declare class HmrQueue extends BeanBase implements IHmrReload {
5
5
  reload(_beanOptions: IDecoratorBeanOptionsBase): Promise<void>;
6
6
  }
7
+ //# sourceMappingURL=hmr.queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr.queue.d.ts","sourceRoot":"","sources":["../../src/bean/hmr.queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,qBACa,QAAS,SAAQ,QAAS,YAAW,UAAU;IACpD,MAAM,CAAC,YAAY,EAAE,yBAAyB;CAGrD"}
@@ -3,3 +3,4 @@ import { BeanBase } from 'vona';
3
3
  export declare class StartupLoadQueueWorkers extends BeanBase implements IStartupExecute {
4
4
  execute(): Promise<void>;
5
5
  }
6
+ //# sourceMappingURL=startup.loadQueueWorkers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup.loadQueueWorkers.d.ts","sourceRoot":"","sources":["../../src/bean/startup.loadQueueWorkers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,qBACa,uBAAwB,SAAQ,QAAS,YAAW,eAAe;IACxE,OAAO;CAMd"}
@@ -3,3 +3,4 @@ import type { VonaApplication } from 'vona';
3
3
  export declare function config(_app: VonaApplication): {
4
4
  worker: Bull.WorkerOptions;
5
5
  };
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe;YAMnC,IAAI,CAAC,aAAa;EAE1B"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './.metadata/index.ts';
2
2
  export * from './lib/index.ts';
3
3
  export * from './types/index.ts';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,10 @@
1
1
  import { BeanInfo, BeanBase, uuidv4, deepExtend, instanceDesp, beanFullNameFromOnionName, BeanSimple, BeanScopeBase, createBeanDecorator } from 'vona';
2
2
  import { __decorate } from 'tslib';
3
- import { catchError } from '@cabloy/utils';
4
3
  import * as Bull from 'bullmq';
5
4
  import { Service, Scope } from 'vona-module-a-bean';
6
5
  import { getRedisClientKeyPrefix } from 'vona-module-a-redis';
7
6
  import { Startup } from 'vona-module-a-startup';
8
- import { Hmr } from 'vona-module-a-hmr';
7
+ import { Hmr } from 'vona-module-a-hmrbase';
9
8
 
10
9
  let ServiceQueue = class ServiceQueue extends BeanBase {
11
10
  constructor(...args) {
@@ -79,14 +78,14 @@ let ServiceQueue = class ServiceQueue extends BeanBase {
79
78
  _worker.worker = new Bull.Worker(queueKey, async job => {
80
79
  // concurrency
81
80
  if (queueConfig?.concurrency) {
82
- return await this._performTaskWrapper(job);
81
+ return await this._performTask(job);
83
82
  }
84
83
  // redlock
85
84
  const info = job.data;
86
85
  const queueNameSub = info.options?.queueNameSub;
87
86
  const _lockResource = `queue:${queueKey}${queueNameSub ? `#${queueNameSub}` : ''}`;
88
87
  return await this.$scope.redlock.service.redlock.lock(_lockResource, async () => {
89
- return await this._performTaskWrapper(job);
88
+ return await this._performTask(job);
90
89
  }, {
91
90
  // instanceName: job.data.instanceName, // need not
92
91
  redlock: _worker.redlock,
@@ -94,14 +93,14 @@ let ServiceQueue = class ServiceQueue extends BeanBase {
94
93
  });
95
94
  }, _workerOptions);
96
95
  _worker.worker.on('failed', (_job, err) => {
97
- this.$logger.error(err);
96
+ this.app.handleError(err);
98
97
  });
99
98
  _worker.worker.on('error', err => {
100
99
  if (err.message && err.message.includes('Missing lock for job')) {
101
100
  const workerInner = _worker.worker;
102
101
  if (!workerInner.running) {
103
102
  _worker.worker.run().catch(err => {
104
- this.$logger.error(err);
103
+ this.app.handleError(err);
105
104
  });
106
105
  }
107
106
  }
@@ -240,17 +239,6 @@ let ServiceQueue = class ServiceQueue extends BeanBase {
240
239
  const instanceName = instanceDesp(info.options?.instanceName);
241
240
  return `${instanceName}||${beanFullNameFromOnionName(info.queueName, 'queue')}`;
242
241
  }
243
- async _performTaskWrapper(job) {
244
- const [res, err] = await catchError(() => {
245
- return this._performTask(job);
246
- });
247
- if (err) {
248
- await this.app.handleError(err);
249
- throw err;
250
- } else {
251
- return res;
252
- }
253
- }
254
242
  async _performTask(job) {
255
243
  const info = job.data;
256
244
  // queue config
@@ -361,3 +349,4 @@ function Queue(options) {
361
349
  }
362
350
 
363
351
  export { BeanQueueBase, HmrQueue, Monkey, Queue, ScopeModuleAQueue, ServiceQueue, StartupLoadQueueWorkers, config };
352
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/service/queue.ts","../src/bean/startup.loadQueueWorkers.ts","../src/bean/hmr.queue.ts","../src/config/config.ts","../src/.metadata/this.ts","../src/monkey.ts","../src/.metadata/index.ts","../src/lib/beanQueueBase.ts","../src/lib/queue.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["ServiceQueue","BeanBase","constructor","args","_workers","_queues","_queueCallbacks","push","info","options","dbInfo","Error","_queuePush","pushAsync","loadQueueWorkers","instanceName","queueItem","bean","onion","queue","getOnionsEnabledCached","queueName","name","data","undefined","_ensureWorker","clearWorkers","queueKey","_worker","worker","close","clearQueues","_queue","queueEvents","_getPrefix","getRedisClientKeyPrefix","app","_createWorker","prefix","queueConfig","getOnionOptions","workerOptions","redlockOptions","redlock","_lockTTL","lockTTL","$scope","config","concurrency","service","create","connectionWorker","redis","get","_workerOptions","Object","assign","scope","connection","Bull","Worker","job","_performTask","queueNameSub","_lockResource","lock","on","_job","err","handleError","message","includes","workerInner","running","run","catch","_createQueue","queueOptions","connectionQueue","_queueOptions","Queue","connectionEvents","_queueEventsOptions","queueEventsOptions","QueueEvents","jobId","returnvalue","_callCallback","failedReason","_combineQueueKey","_ensureQueue","getQueue","_getQueue","ctx","_callback","callback","isAsync","jobOptionsBase","queueQueue","jobOptions","uuidv4","jobName","deepExtend","add","Promise","resolve","reject","_queueEventsReady","then","queueEventsReady","waitUntilReady","instanceDesp","beanFullNameFromOnionName","getOnionSlice","executor","newCtx","beanFullName","beanOptions","beanInstance","_getBean","execute","locale","tz","extraData","transaction","getRepeatKey","repeat","endDate","Date","getTime","pattern","suffix","String","every","prepareJobInfo","prepareGeneralInfo","__decorate","Service","__z_BeanInfo","module","StartupLoadQueueWorkers","meta","isTest","Startup","instance","after","HmrQueue","reload","_beanOptions","Hmr","_app","lockDuration","maxStalledCount","stalledInterval","__ThisModule__","Monkey","BeanSimple","appClose","scopeSelf","appClosed","ScopeModuleAQueue","BeanScopeBase","Scope","BeanQueueBase","$onionName","createBeanDecorator"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import type { IInstanceRecord } from 'vona';
2
- import type { IQueuePushOptions } from '../types/queue.ts';
3
2
  import { BeanBase } from 'vona';
3
+ import type { IQueuePushOptions } from '../types/queue.ts';
4
4
  export declare class BeanQueueBase<DATA = unknown, RESULT = unknown> extends BeanBase {
5
5
  pushAsync(data: DATA, options?: IQueuePushOptions): Promise<RESULT>;
6
6
  push(data: DATA, options?: IQueuePushOptions): void;
7
7
  getQueue(instanceName?: keyof IInstanceRecord): import("bullmq").Queue<any, any, string, any, any, string>;
8
8
  }
9
+ //# sourceMappingURL=beanQueueBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beanQueueBase.d.ts","sourceRoot":"","sources":["../../src/lib/beanQueueBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,KAAK,EAAE,iBAAiB,EAAgB,MAAM,mBAAmB,CAAC;AAEzE,qBAAa,aAAa,CAAC,IAAI,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO,CAAE,SAAQ,QAAQ;IACrE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAMzE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAI5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,eAAe;CAG9C"}
@@ -1,2 +1,3 @@
1
1
  export * from './beanQueueBase.ts';
2
2
  export * from './queue.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
@@ -1,2 +1,3 @@
1
1
  import type { IDecoratorQueueOptions } from '../types/queue.ts';
2
2
  export declare function Queue(options?: IDecoratorQueueOptions): ClassDecorator;
3
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/lib/queue.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,cAAc,CAEtE"}
package/dist/monkey.d.ts CHANGED
@@ -4,3 +4,4 @@ export declare class Monkey extends BeanSimple implements IMonkeyAppClose, IMonk
4
4
  appClose(): Promise<void>;
5
5
  appClosed(): Promise<void>;
6
6
  }
7
+ //# sourceMappingURL=monkey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monkey.d.ts","sourceRoot":"","sources":["../src/monkey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAIlC,qBAAa,MAAO,SAAQ,UAAW,YAAW,eAAe,EAAE,gBAAgB;IAC3E,QAAQ;IAKR,SAAS;CAIhB"}
@@ -1,7 +1,7 @@
1
1
  import type { IInstanceRecord } from 'vona';
2
- import type { IQueueCallbacks, IQueueJobContext, IQueuePushOptions, IQueueQueue, IQueueQueues, IQueueRecord, IQueueWork, IQueueWorks, TypeQueueJob } from '../types/queue.ts';
3
2
  import * as Bull from 'bullmq';
4
3
  import { BeanBase } from 'vona';
4
+ import type { IQueueCallbacks, IQueueJobContext, IQueuePushOptions, IQueueQueue, IQueueQueues, IQueueRecord, IQueueWork, IQueueWorks, TypeQueueJob } from '../types/queue.ts';
5
5
  export declare class ServiceQueue extends BeanBase {
6
6
  _workers: IQueueWorks;
7
7
  _queues: IQueueQueues;
@@ -22,8 +22,8 @@ export declare class ServiceQueue extends BeanBase {
22
22
  _queuePush<DATA, RESULT>(info: IQueueJobContext<DATA>, isAsync: boolean): Promise<RESULT>;
23
23
  _queueEventsReady(queueQueue: IQueueQueue): Promise<void>;
24
24
  _combineQueueKey<DATA>(info: IQueueJobContext<DATA>): string;
25
- _performTaskWrapper<DATA, RESULT>(job: TypeQueueJob<DATA, RESULT>): Promise<unknown>;
26
25
  _performTask<DATA, RESULT>(job: TypeQueueJob<DATA, RESULT>): Promise<unknown>;
27
26
  getRepeatKey(jobName: string, repeat: Bull.RepeatOptions): string;
28
27
  prepareJobInfo<DATA>(queueName: keyof IQueueRecord, data: DATA, options?: IQueuePushOptions): IQueueJobContext<DATA>;
29
28
  }
29
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/service/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAA+D,MAAM,MAAM,CAAC;AAI7F,OAAO,KAAK,EACV,eAAe,EAEf,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,qBACa,YAAa,SAAQ,QAAQ;IACxC,QAAQ,EAAE,WAAW,CAAM;IAC3B,OAAO,EAAE,YAAY,CAAM;IAC3B,eAAe,EAAE,eAAe,CAAM;IAEtC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAMvC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAKtE,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI;IAalE,YAAY;IAQZ,WAAW;IASjB,UAAU;IAIV,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM;IAsElE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM;IAkCjE,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAShD,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAa/C,QAAQ,CAAC,SAAS,EAAE,MAAM,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI;IAU/F,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAI5C,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS;IAQ9F,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA0CzF,iBAAiB,CAAC,UAAU,EAAE,WAAW;IAM/C,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAK7C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;IAuBhE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa;IAQxD,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC;CAKrH"}
@@ -1 +1,2 @@
1
1
  export * from './queue.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -71,3 +71,4 @@ declare module 'vona' {
71
71
  queue: never;
72
72
  }
73
73
  }
74
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/types/queue.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,30 +1,18 @@
1
1
  {
2
2
  "name": "vona-module-a-queue",
3
- "type": "module",
4
- "version": "5.0.34",
5
- "title": "a-queue",
6
- "vonaModule": {
7
- "dependencies": {},
8
- "globalDependencies": {
9
- "bullmq": true
10
- },
11
- "onions": {
12
- "queue": {
13
- "optionsGlobalInterfaceName": "IDecoratorQueueOptions",
14
- "optionsGlobalInterfaceFrom": "vona-module-a-queue",
15
- "scopeResource": true,
16
- "boilerplate": "boilerplate"
17
- }
18
- },
19
- "capabilities": {
20
- "monkey": true
21
- }
22
- },
3
+ "version": "5.1.1",
23
4
  "description": "",
24
- "author": "",
25
5
  "keywords": [
26
6
  "Vona Module"
27
7
  ],
8
+ "author": "",
9
+ "files": [
10
+ "assets",
11
+ "cli",
12
+ "dist",
13
+ "src"
14
+ ],
15
+ "type": "module",
28
16
  "exports": {
29
17
  ".": {
30
18
  "types": [
@@ -35,20 +23,37 @@
35
23
  },
36
24
  "./package.json": "./package.json"
37
25
  },
38
- "files": [
39
- "assets",
40
- "cli",
41
- "dist"
42
- ],
26
+ "scripts": {
27
+ "clean": "rimraf dist tsconfig.build.tsbuildinfo",
28
+ "tsc:publish": "npm run clean && vona :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
29
+ "prepublishOnly": "npm run tsc:publish",
30
+ "prepack": "clean-package",
31
+ "postpack": "clean-package restore && npm run clean"
32
+ },
43
33
  "dependencies": {
44
- "bullmq": "^5.66.1"
34
+ "bullmq": "^5.70.1"
45
35
  },
46
36
  "devDependencies": {
47
37
  "clean-package": "^2.2.0",
48
38
  "rimraf": "^6.0.1"
49
39
  },
50
- "scripts": {
51
- "clean": "rimraf dist tsconfig.build.tsbuildinfo",
52
- "tsc:publish": "npm run clean && vona :bin:buildModule && tsc -p tsconfig.build.json"
53
- }
54
- }
40
+ "title": "a-queue",
41
+ "vonaModule": {
42
+ "dependencies": {},
43
+ "globalDependencies": {
44
+ "bullmq": true
45
+ },
46
+ "onions": {
47
+ "queue": {
48
+ "optionsGlobalInterfaceName": "IDecoratorQueueOptions",
49
+ "optionsGlobalInterfaceFrom": "vona-module-a-queue",
50
+ "scopeResource": true,
51
+ "boilerplate": "boilerplate"
52
+ }
53
+ },
54
+ "capabilities": {
55
+ "monkey": true
56
+ }
57
+ },
58
+ "gitHead": "991189da4443b789fcf77872990b901ccf43bccb"
59
+ }
@@ -0,0 +1,133 @@
1
+ // eslint-disable
2
+ /** service: begin */
3
+ export * from '../service/queue.ts';
4
+
5
+ import 'vona-module-a-bean';
6
+ declare module 'vona-module-a-bean' {
7
+
8
+ export interface IServiceRecord {
9
+ 'a-queue:queue': never;
10
+ }
11
+
12
+
13
+ }
14
+ declare module 'vona-module-a-queue' {
15
+
16
+ export interface ServiceQueue {
17
+ /** @internal */
18
+ get scope(): ScopeModuleAQueue;
19
+ }
20
+
21
+ export interface ServiceQueue {
22
+ get $beanFullName(): 'a-queue.service.queue';
23
+ get $onionName(): 'a-queue:queue';
24
+
25
+ }
26
+ }
27
+ /** service: end */
28
+ /** service: begin */
29
+ import type { ServiceQueue } from '../service/queue.ts';
30
+ export interface IModuleService {
31
+ 'queue': ServiceQueue;
32
+ }
33
+ /** service: end */
34
+ /** service: begin */
35
+
36
+ import 'vona';
37
+ declare module 'vona' {
38
+ export interface IBeanRecordGeneral {
39
+ 'a-queue.service.queue': ServiceQueue;
40
+ }
41
+ }
42
+ /** service: end */
43
+ /** startup: begin */
44
+ export * from '../bean/startup.loadQueueWorkers.ts';
45
+
46
+ import { type IDecoratorStartupOptions } from 'vona-module-a-startup';
47
+ declare module 'vona-module-a-startup' {
48
+
49
+ export interface IStartupRecord {
50
+ 'a-queue:loadQueueWorkers': IDecoratorStartupOptions;
51
+ }
52
+
53
+
54
+ }
55
+ declare module 'vona-module-a-queue' {
56
+
57
+ export interface StartupLoadQueueWorkers {
58
+ /** @internal */
59
+ get scope(): ScopeModuleAQueue;
60
+ }
61
+
62
+ export interface StartupLoadQueueWorkers {
63
+ get $beanFullName(): 'a-queue.startup.loadQueueWorkers';
64
+ get $onionName(): 'a-queue:loadQueueWorkers';
65
+ get $onionOptions(): IDecoratorStartupOptions;
66
+ }
67
+ }
68
+ /** startup: end */
69
+ /** hmr: begin */
70
+ export * from '../bean/hmr.queue.ts';
71
+
72
+ import 'vona';
73
+ declare module 'vona' {
74
+
75
+ export interface IHmrRecord {
76
+ 'a-queue:queue': never;
77
+ }
78
+
79
+
80
+ }
81
+ declare module 'vona-module-a-queue' {
82
+
83
+ export interface HmrQueue {
84
+ /** @internal */
85
+ get scope(): ScopeModuleAQueue;
86
+ }
87
+
88
+ export interface HmrQueue {
89
+ get $beanFullName(): 'a-queue.hmr.queue';
90
+ get $onionName(): 'a-queue:queue';
91
+
92
+ }
93
+ }
94
+ /** hmr: end */
95
+ /** config: begin */
96
+ export * from '../config/config.ts';
97
+ import type { config } from '../config/config.ts';
98
+ /** config: end */
99
+ /** monkey: begin */
100
+ export * from '../monkey.ts';
101
+ /** monkey: end */
102
+ /** scope: begin */
103
+ import { BeanScopeBase, type BeanScopeUtil, type TypeModuleConfig } from 'vona';
104
+ import { Scope } from 'vona-module-a-bean';
105
+
106
+ @Scope()
107
+ export class ScopeModuleAQueue extends BeanScopeBase {}
108
+
109
+ export interface ScopeModuleAQueue {
110
+ util: BeanScopeUtil;
111
+ config: TypeModuleConfig<typeof config>;
112
+ service: IModuleService;
113
+ }
114
+
115
+ import 'vona';
116
+ declare module 'vona' {
117
+ export interface IBeanScopeRecord {
118
+ 'a-queue': ScopeModuleAQueue;
119
+ }
120
+
121
+ export interface IBeanScopeContainer {
122
+ queue: ScopeModuleAQueue;
123
+ }
124
+
125
+ export interface IBeanScopeConfig {
126
+ 'a-queue': ReturnType<typeof config>;
127
+ }
128
+
129
+
130
+
131
+
132
+ }
133
+ /** scope: end */
@@ -0,0 +1,2 @@
1
+ export const __ThisModule__ = 'a-queue';
2
+ export { ScopeModuleAQueue as ScopeModule } from './index.ts';
@@ -0,0 +1,12 @@
1
+ import type { IDecoratorBeanOptionsBase } from 'vona';
2
+ import type { IHmrReload } from 'vona-module-a-hmr';
3
+
4
+ import { BeanBase } from 'vona';
5
+ import { Hmr } from 'vona-module-a-hmrbase';
6
+
7
+ @Hmr()
8
+ export class HmrQueue extends BeanBase implements IHmrReload {
9
+ async reload(_beanOptions: IDecoratorBeanOptionsBase) {
10
+ this.app.bean.worker.reload();
11
+ }
12
+ }
@@ -0,0 +1,14 @@
1
+ import type { IStartupExecute } from 'vona-module-a-startup';
2
+
3
+ import { BeanBase } from 'vona';
4
+ import { Startup } from 'vona-module-a-startup';
5
+
6
+ @Startup({ instance: true, after: true })
7
+ export class StartupLoadQueueWorkers extends BeanBase implements IStartupExecute {
8
+ async execute() {
9
+ // load queue workers
10
+ if (!this.app.meta.isTest) {
11
+ this.scope.service.queue.loadQueueWorkers(this.ctx.instanceName);
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,12 @@
1
+ import type * as Bull from 'bullmq';
2
+ import type { VonaApplication } from 'vona';
3
+
4
+ export function config(_app: VonaApplication) {
5
+ return {
6
+ worker: {
7
+ lockDuration: 30 * 1000,
8
+ maxStalledCount: 1000,
9
+ stalledInterval: 10 * 1000,
10
+ } as Bull.WorkerOptions,
11
+ };
12
+ }
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './.metadata/index.ts';
2
+ export * from './lib/index.ts';
3
+ export * from './types/index.ts';
@@ -0,0 +1,21 @@
1
+ import type { IInstanceRecord } from 'vona';
2
+
3
+ import { BeanBase } from 'vona';
4
+
5
+ import type { IQueuePushOptions, IQueueRecord } from '../types/queue.ts';
6
+
7
+ export class BeanQueueBase<DATA = unknown, RESULT = unknown> extends BeanBase {
8
+ async pushAsync(data: DATA, options?: IQueuePushOptions): Promise<RESULT> {
9
+ return await this.$scope.queue.service.queue.pushAsync<DATA, RESULT>(
10
+ this.$scope.queue.service.queue.prepareJobInfo(this.$onionName as any, data, options),
11
+ );
12
+ }
13
+
14
+ push(data: DATA, options?: IQueuePushOptions) {
15
+ return this.$scope.queue.service.queue.push(this.$scope.queue.service.queue.prepareJobInfo(this.$onionName as any, data, options));
16
+ }
17
+
18
+ getQueue(instanceName?: keyof IInstanceRecord) {
19
+ return this.$scope.queue.service.queue.getQueue(this.$onionName as keyof IQueueRecord, instanceName);
20
+ }
21
+ }
@@ -0,0 +1,2 @@
1
+ export * from './beanQueueBase.ts';
2
+ export * from './queue.ts';
@@ -0,0 +1,7 @@
1
+ import { createBeanDecorator } from 'vona';
2
+
3
+ import type { IDecoratorQueueOptions } from '../types/queue.ts';
4
+
5
+ export function Queue(options?: IDecoratorQueueOptions): ClassDecorator {
6
+ return createBeanDecorator('queue', options);
7
+ }
package/src/monkey.ts ADDED
@@ -0,0 +1,17 @@
1
+ import type { IMonkeyAppClose, IMonkeyAppClosed } from 'vona';
2
+
3
+ import { BeanSimple } from 'vona';
4
+
5
+ import { __ThisModule__ } from './.metadata/this.ts';
6
+
7
+ export class Monkey extends BeanSimple implements IMonkeyAppClose, IMonkeyAppClosed {
8
+ async appClose() {
9
+ const scopeSelf = this.app.scope(__ThisModule__);
10
+ await scopeSelf.service.queue.clearWorkers();
11
+ }
12
+
13
+ async appClosed() {
14
+ const scopeSelf = this.app.scope(__ThisModule__);
15
+ await scopeSelf.service.queue.clearQueues();
16
+ }
17
+ }
@@ -0,0 +1,309 @@
1
+ import type { IInstanceRecord } from 'vona';
2
+
3
+ import * as Bull from 'bullmq';
4
+ import { BeanBase, beanFullNameFromOnionName, deepExtend, instanceDesp, uuidv4 } from 'vona';
5
+ import { Service } from 'vona-module-a-bean';
6
+ import { getRedisClientKeyPrefix } from 'vona-module-a-redis';
7
+
8
+ import type {
9
+ IQueueCallbacks,
10
+ IQueueExecute,
11
+ IQueueJobContext,
12
+ IQueuePushOptions,
13
+ IQueueQueue,
14
+ IQueueQueues,
15
+ IQueueRecord,
16
+ IQueueWork,
17
+ IQueueWorks,
18
+ TypeQueueJob,
19
+ } from '../types/queue.ts';
20
+
21
+ @Service()
22
+ export class ServiceQueue extends BeanBase {
23
+ _workers: IQueueWorks = {};
24
+ _queues: IQueueQueues = {};
25
+ _queueCallbacks: IQueueCallbacks = {};
26
+
27
+ push<DATA>(info: IQueueJobContext<DATA>) {
28
+ if (!info.options?.dbInfo) throw new Error('should specify the options.dbInfo');
29
+ this._queuePush(info, false);
30
+ }
31
+
32
+ // { locale, instanceName, module, queueName,queueNameSub,data }
33
+ pushAsync<DATA, RESULT>(info: IQueueJobContext<DATA>): Promise<RESULT> {
34
+ if (!info.options?.dbInfo) throw new Error('should specify the options.dbInfo');
35
+ return this._queuePush(info, true);
36
+ }
37
+
38
+ loadQueueWorkers(instanceName?: keyof IInstanceRecord | undefined | null) {
39
+ for (const queueItem of this.bean.onion.queue.getOnionsEnabledCached()) {
40
+ const info: IQueueJobContext<unknown> = {
41
+ queueName: queueItem.name as never,
42
+ data: undefined as any,
43
+ options: {
44
+ instanceName,
45
+ },
46
+ };
47
+ this._ensureWorker(info);
48
+ }
49
+ }
50
+
51
+ async clearWorkers() {
52
+ for (const queueKey in this._workers) {
53
+ const _worker = this._workers[queueKey];
54
+ await _worker.worker.close();
55
+ }
56
+ this._workers = {};
57
+ }
58
+
59
+ async clearQueues() {
60
+ for (const queueKey in this._queues) {
61
+ const _queue = this._queues[queueKey];
62
+ await _queue.queue.close();
63
+ await _queue.queueEvents.close();
64
+ }
65
+ this._queues = {};
66
+ }
67
+
68
+ _getPrefix() {
69
+ return `${getRedisClientKeyPrefix('bull', this.app)}queue`;
70
+ }
71
+
72
+ _createWorker<DATA>(info: IQueueJobContext<DATA>, queueKey: string) {
73
+ const app = this.app;
74
+ // worker
75
+ const _worker = {} as IQueueWork;
76
+ // prefix
77
+ const prefix = this._getPrefix();
78
+ // queue config
79
+ const queueConfig = app.bean.onion.queue.getOnionOptions(info.queueName);
80
+ // queueConfig.options: queue/worker/job/redlock
81
+ const workerOptions = queueConfig?.options?.worker;
82
+ const redlockOptions = queueConfig?.options?.redlock;
83
+ const _lockTTL = redlockOptions?.lockTTL ?? this.$scope.redlock.config.lockTTL;
84
+
85
+ // redlock
86
+ if (!queueConfig?.concurrency) {
87
+ _worker.redlock = this.$scope.redlock.service.redlock.create(redlockOptions);
88
+ }
89
+
90
+ // create work
91
+ const connectionWorker = app.bean.redis.get('queue');
92
+ const _workerOptions = Object.assign({}, this.scope.config.worker, workerOptions, {
93
+ prefix,
94
+ connection: connectionWorker,
95
+ });
96
+ _worker.workerOptions = _workerOptions;
97
+ _worker.worker = new Bull.Worker(
98
+ queueKey,
99
+ async job => {
100
+ // concurrency
101
+ if (queueConfig?.concurrency) {
102
+ return await this._performTask(job);
103
+ }
104
+ // redlock
105
+ const info = job.data as IQueueJobContext<DATA>;
106
+ const queueNameSub = info.options?.queueNameSub;
107
+ const _lockResource = `queue:${queueKey}${queueNameSub ? `#${queueNameSub}` : ''}`;
108
+ return await this.$scope.redlock.service.redlock.lock(
109
+ _lockResource,
110
+ async () => {
111
+ return await this._performTask(job);
112
+ },
113
+ {
114
+ // instanceName: job.data.instanceName, // need not
115
+ redlock: _worker.redlock,
116
+ lockTTL: _lockTTL,
117
+ },
118
+ );
119
+ },
120
+ _workerOptions,
121
+ );
122
+
123
+ _worker.worker.on('failed', (_job, err) => {
124
+ this.app.handleError(err);
125
+ });
126
+
127
+ _worker.worker.on('error', err => {
128
+ if (err.message && err.message.includes('Missing lock for job')) {
129
+ const workerInner = _worker.worker as any;
130
+ if (!workerInner.running) {
131
+ _worker.worker.run().catch(err => {
132
+ this.app.handleError(err);
133
+ });
134
+ }
135
+ }
136
+ });
137
+
138
+ // ok
139
+ return _worker;
140
+ }
141
+
142
+ _createQueue<DATA>(info: IQueueJobContext<DATA>, queueKey: string) {
143
+ const app = this.app;
144
+ // queue
145
+ const _queue = {} as IQueueQueue;
146
+ // prefix
147
+ const prefix = this._getPrefix();
148
+ // queue config
149
+ const queueConfig = app.bean.onion.queue.getOnionOptions(info.queueName);
150
+ // queueConfig.options: queue/worker/job/limiter
151
+ const queueOptions = queueConfig?.options?.queue;
152
+
153
+ // create queue
154
+ const connectionQueue = app.bean.redis.get('queue');
155
+ const _queueOptions = Object.assign({}, queueOptions, { prefix, connection: connectionQueue });
156
+ _queue.config = queueConfig;
157
+ _queue.options = _queueOptions;
158
+ _queue.queue = new Bull.Queue(queueKey, _queueOptions);
159
+
160
+ // create events
161
+ const connectionEvents = app.bean.redis.get('queue');
162
+ const _queueEventsOptions = { prefix, connection: connectionEvents } as Bull.QueueEventsOptions;
163
+ _queue.queueEventsOptions = _queueEventsOptions;
164
+ _queue.queueEvents = new Bull.QueueEvents(queueKey, _queueEventsOptions);
165
+ _queue.queueEvents.on('completed', ({ jobId, returnvalue }) => {
166
+ this._callCallback(jobId, undefined, returnvalue);
167
+ });
168
+ _queue.queueEvents.on('failed', ({ jobId, failedReason }) => {
169
+ this._callCallback(jobId, failedReason, undefined);
170
+ });
171
+
172
+ // ok
173
+ return _queue;
174
+ }
175
+
176
+ _ensureWorker<DATA>(info: IQueueJobContext<DATA>) {
177
+ // queueKey
178
+ const queueKey = this._combineQueueKey(info);
179
+ // worker
180
+ if (!this._workers[queueKey]) {
181
+ this._workers[queueKey] = this._createWorker(info, queueKey);
182
+ }
183
+ }
184
+
185
+ _ensureQueue<DATA>(info: IQueueJobContext<DATA>) {
186
+ // worker
187
+ this._ensureWorker(info);
188
+ // queueKey
189
+ const queueKey = this._combineQueueKey(info);
190
+ // queue
191
+ if (!this._queues[queueKey]) {
192
+ this._queues[queueKey] = this._createQueue(info, queueKey);
193
+ }
194
+ // ok
195
+ return this._queues[queueKey];
196
+ }
197
+
198
+ getQueue(queueName: keyof IQueueRecord, instanceName?: keyof IInstanceRecord | undefined | null) {
199
+ return this._getQueue({
200
+ queueName,
201
+ data: undefined as any,
202
+ options: {
203
+ instanceName: instanceName ?? this.ctx.instanceName,
204
+ },
205
+ });
206
+ }
207
+
208
+ _getQueue<DATA>(info: IQueueJobContext<DATA>) {
209
+ return this._ensureQueue(info).queue;
210
+ }
211
+
212
+ _callCallback<DATA>(jobId: string | number, failedReason: string | undefined, data: DATA | undefined) {
213
+ const _callback = this._queueCallbacks[jobId];
214
+ if (_callback) {
215
+ delete this._queueCallbacks[jobId];
216
+ _callback.callback(failedReason ? new Error(failedReason) : undefined, data);
217
+ }
218
+ }
219
+
220
+ async _queuePush<DATA, RESULT>(info: IQueueJobContext<DATA>, isAsync: boolean): Promise<RESULT> {
221
+ // queue config
222
+ const queueConfig = this.bean.onion.queue.getOnionOptions(info.queueName);
223
+ // queueConfig.options: queue/worker/job/limiter
224
+ const jobOptionsBase = queueConfig?.options?.job;
225
+ // queue
226
+ const queueQueue = this._ensureQueue(info);
227
+ const queue = queueQueue.queue;
228
+ // job
229
+ const jobId = info.options?.jobOptions?.jobId || uuidv4();
230
+ const jobName = info.options?.jobName || jobId;
231
+ const jobOptions = deepExtend({ jobId }, jobOptionsBase, info.options?.jobOptions);
232
+ // should not change info, hold original info.options?.jobName, info.options?.jobOptions
233
+ // info = deepExtend({}, info, { options: { jobName, jobOptions } });
234
+ // not async
235
+ if (!isAsync) {
236
+ // add job
237
+ queue.add(jobName, info, jobOptions);
238
+ return undefined as any;
239
+ }
240
+ // async
241
+ return new Promise((resolve, reject) => {
242
+ // queue events
243
+ return this._queueEventsReady(queueQueue)
244
+ .then(() => {
245
+ // callback
246
+ this._queueCallbacks[jobId] = {
247
+ info,
248
+ callback: (err, data) => {
249
+ if (err) return reject(err);
250
+ resolve(data as unknown as RESULT);
251
+ },
252
+ };
253
+ // add job
254
+ return queue.add(jobName, info, jobOptions);
255
+ })
256
+ .catch(err => {
257
+ return reject(err);
258
+ });
259
+ });
260
+ }
261
+
262
+ async _queueEventsReady(queueQueue: IQueueQueue) {
263
+ if (queueQueue.queueEventsReady) return;
264
+ await queueQueue.queueEvents.waitUntilReady();
265
+ queueQueue.queueEventsReady = true;
266
+ }
267
+
268
+ _combineQueueKey<DATA>(info: IQueueJobContext<DATA>) {
269
+ const instanceName = instanceDesp(info.options?.instanceName);
270
+ return `${instanceName}||${beanFullNameFromOnionName(info.queueName, 'queue')}`;
271
+ }
272
+
273
+ async _performTask<DATA, RESULT>(job: TypeQueueJob<DATA, RESULT>) {
274
+ const info = job.data;
275
+ // queue config
276
+ const queueItem = this.bean.onion.queue.getOnionSlice(info.queueName);
277
+ const queueConfig = this.bean.onion.queue.getOnionOptions(info.queueName);
278
+ // execute
279
+ return await this.bean.executor.newCtx(
280
+ async () => {
281
+ const beanFullName = queueItem.beanOptions.beanFullName;
282
+ const beanInstance = <IQueueExecute<DATA>>this.app.bean._getBean(beanFullName as any);
283
+ return await beanInstance.execute(info.data, info.options, job);
284
+ },
285
+ {
286
+ dbInfo: info.options?.dbInfo,
287
+ locale: info.options?.locale,
288
+ tz: info.options?.tz,
289
+ instanceName: info.options?.instanceName,
290
+ extraData: info.options?.extraData,
291
+ transaction: queueConfig?.transaction,
292
+ },
293
+ );
294
+ }
295
+
296
+ getRepeatKey(jobName: string, repeat: Bull.RepeatOptions) {
297
+ const endDate = repeat.endDate ? new Date(repeat.endDate).getTime() : '';
298
+ const tz = repeat.tz || '';
299
+ const pattern = repeat.pattern;
300
+ const suffix = pattern || String(repeat.every) || '';
301
+ return `${jobName}:${endDate}:${tz}:${suffix}`;
302
+ }
303
+
304
+ prepareJobInfo<DATA>(queueName: keyof IQueueRecord, data: DATA, options?: IQueuePushOptions): IQueueJobContext<DATA> {
305
+ options = this.$scope.executor.service.executor.prepareGeneralInfo(options);
306
+ // info
307
+ return { queueName, data, options };
308
+ }
309
+ }
@@ -0,0 +1 @@
1
+ export * from './queue.ts';
@@ -0,0 +1,83 @@
1
+ import type Redlock from '@sesamecare-oss/redlock';
2
+ import type * as Bull from 'bullmq';
3
+ import type { OmitNever, PowerPartial } from 'vona';
4
+ import type { IGeneralInfoOptions } from 'vona-module-a-executor';
5
+ import type { ServiceOnion, TypeOnionOptionsEnableSimple } from 'vona-module-a-onion';
6
+ import type { IRedlockClientOptions } from 'vona-module-a-redlock';
7
+
8
+ export interface IQueuePushOptions extends IGeneralInfoOptions {
9
+ queueNameSub?: string;
10
+ jobName?: string;
11
+ jobOptions?: Bull.JobsOptions;
12
+ }
13
+
14
+ export type TypeQueueJob<DATA = unknown, RESULT = unknown> = Bull.Job<IQueueJobContext<DATA>, RESULT>;
15
+ export interface IQueueExecute<DATA = unknown, RESULT = unknown> {
16
+ execute: (data: DATA, options?: IQueuePushOptions, job?: TypeQueueJob<DATA, RESULT>) => Promise<RESULT>;
17
+ }
18
+
19
+ export interface IQueueJobContext<DATA> {
20
+ queueName: keyof IQueueRecord;
21
+ data: DATA;
22
+ options?: IQueuePushOptions;
23
+ }
24
+
25
+ export interface IQueueWork {
26
+ redlock: Redlock.Redlock;
27
+ worker: Bull.Worker;
28
+ workerOptions: Bull.WorkerOptions;
29
+ }
30
+ export interface IQueueWorks {
31
+ [queueKey: string]: IQueueWork;
32
+ }
33
+
34
+ export interface IQueueQueue {
35
+ config?: IDecoratorQueueOptions;
36
+ options: Bull.QueueOptions;
37
+ queue: Bull.Queue;
38
+ queueEvents: Bull.QueueEvents;
39
+ queueEventsOptions: Bull.QueueEventsOptions;
40
+ queueEventsReady?: boolean;
41
+ }
42
+
43
+ export interface IQueueQueues {
44
+ [queueKey: string]: IQueueQueue;
45
+ }
46
+
47
+ export interface IQueueCallback<DATA, RESULT> {
48
+ info: IQueueJobContext<DATA>;
49
+ callback: (err: Error | undefined, data: RESULT | undefined) => void;
50
+ }
51
+
52
+ export interface IQueueCallbacks {
53
+ [jobId: string | number]: IQueueCallback<unknown, unknown>;
54
+ }
55
+
56
+ export interface IQueueRecord {}
57
+
58
+ export interface IDecoratorQueueOptions extends TypeOnionOptionsEnableSimple {
59
+ concurrency?: boolean;
60
+ transaction?: boolean;
61
+ options?: {
62
+ queue?: Partial<Bull.QueueOptions>;
63
+ worker?: Partial<Bull.WorkerOptions>;
64
+ redlock?: PowerPartial<IRedlockClientOptions> & { lockTTL?: number };
65
+ job?: Bull.JobsOptions;
66
+ };
67
+ }
68
+
69
+ declare module 'vona-module-a-onion' {
70
+ export interface BeanOnion {
71
+ queue: ServiceOnion<IQueueRecord>;
72
+ }
73
+ }
74
+
75
+ declare module 'vona' {
76
+ export interface ConfigOnions {
77
+ queue: OmitNever<IQueueRecord>;
78
+ }
79
+
80
+ export interface IBeanSceneRecord {
81
+ queue: never;
82
+ }
83
+ }