atomic-queues 1.1.1 → 1.2.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.
- package/dist/decorators/decorators.d.ts +118 -0
- package/dist/decorators/decorators.d.ts.map +1 -1
- package/dist/decorators/decorators.js +162 -1
- package/dist/decorators/decorators.js.map +1 -1
- package/dist/module/atomic-queues.module.d.ts.map +1 -1
- package/dist/module/atomic-queues.module.js +2 -0
- package/dist/module/atomic-queues.module.js.map +1 -1
- package/dist/services/command-discovery/command-discovery.service.d.ts +88 -0
- package/dist/services/command-discovery/command-discovery.service.d.ts.map +1 -0
- package/dist/services/command-discovery/command-discovery.service.js +235 -0
- package/dist/services/command-discovery/command-discovery.service.js.map +1 -0
- package/dist/services/command-discovery/index.d.ts +2 -0
- package/dist/services/command-discovery/index.d.ts.map +1 -0
- package/dist/services/command-discovery/index.js +18 -0
- package/dist/services/command-discovery/index.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/processor-discovery/processor-discovery.service.d.ts +30 -1
- package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +1 -1
- package/dist/services/processor-discovery/processor-discovery.service.js +78 -7
- package/dist/services/processor-discovery/processor-discovery.service.js.map +1 -1
- package/dist/services/queue-bus/index.d.ts +2 -0
- package/dist/services/queue-bus/index.d.ts.map +1 -0
- package/dist/services/queue-bus/index.js +18 -0
- package/dist/services/queue-bus/index.js.map +1 -0
- package/dist/services/queue-bus/queue-bus.service.d.ts +143 -0
- package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -0
- package/dist/services/queue-bus/queue-bus.service.js +214 -0
- package/dist/services/queue-bus/queue-bus.service.js.map +1 -0
- package/dist/services/queue-manager/queue-manager.service.d.ts +7 -1
- package/dist/services/queue-manager/queue-manager.service.d.ts.map +1 -1
- package/dist/services/queue-manager/queue-manager.service.js +26 -0
- package/dist/services/queue-manager/queue-manager.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,6 +13,8 @@ export declare const GET_ACTIVE_ENTITIES_METADATA = "atomic:get-active-entities"
|
|
|
13
13
|
export declare const GET_DESIRED_WORKER_COUNT_METADATA = "atomic:get-desired-worker-count";
|
|
14
14
|
export declare const ON_SPAWN_WORKER_METADATA = "atomic:on-spawn-worker";
|
|
15
15
|
export declare const ON_TERMINATE_WORKER_METADATA = "atomic:on-terminate-worker";
|
|
16
|
+
export declare const JOB_COMMAND_METADATA = "atomic:job-command";
|
|
17
|
+
export declare const JOB_QUERY_METADATA = "atomic:job-query";
|
|
16
18
|
/**
|
|
17
19
|
* Options for @WorkerProcessor decorator
|
|
18
20
|
*/
|
|
@@ -35,6 +37,48 @@ export interface EntityScalerOptions {
|
|
|
35
37
|
/** Maximum workers per entity */
|
|
36
38
|
maxWorkersPerEntity?: number;
|
|
37
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Options for @JobCommand decorator
|
|
42
|
+
*/
|
|
43
|
+
export interface JobCommandOptions {
|
|
44
|
+
/** Job name (defaults to kebab-case of class name without 'Command' suffix) */
|
|
45
|
+
name?: string;
|
|
46
|
+
/** Entity type this command belongs to (optional, for scoped routing) */
|
|
47
|
+
entityType?: string;
|
|
48
|
+
/** Which constructor parameter is the entityId (default: 0 = first param) */
|
|
49
|
+
entityIdParam?: number | string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Options for @JobQuery decorator
|
|
53
|
+
*/
|
|
54
|
+
export interface JobQueryOptions {
|
|
55
|
+
/** Job name (defaults to kebab-case of class name without 'Query' suffix) */
|
|
56
|
+
name?: string;
|
|
57
|
+
/** Entity type this query belongs to (optional, for scoped routing) */
|
|
58
|
+
entityType?: string;
|
|
59
|
+
/** Which constructor parameter is the entityId (default: 0 = first param) */
|
|
60
|
+
entityIdParam?: number | string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Stored job command metadata
|
|
64
|
+
*/
|
|
65
|
+
export interface JobCommandMetadata {
|
|
66
|
+
jobName: string;
|
|
67
|
+
entityType?: string;
|
|
68
|
+
entityIdParam: number | string;
|
|
69
|
+
targetClass: Function;
|
|
70
|
+
paramNames: string[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Stored job query metadata
|
|
74
|
+
*/
|
|
75
|
+
export interface JobQueryMetadata {
|
|
76
|
+
jobName: string;
|
|
77
|
+
entityType?: string;
|
|
78
|
+
entityIdParam: number | string;
|
|
79
|
+
targetClass: Function;
|
|
80
|
+
paramNames: string[];
|
|
81
|
+
}
|
|
38
82
|
/**
|
|
39
83
|
* Stored job handler metadata
|
|
40
84
|
*/
|
|
@@ -229,6 +273,80 @@ export declare function OnSpawnWorker(): MethodDecorator;
|
|
|
229
273
|
* Used within an @EntityScaler class.
|
|
230
274
|
*/
|
|
231
275
|
export declare function OnTerminateWorker(): MethodDecorator;
|
|
276
|
+
/**
|
|
277
|
+
* @JobCommand class decorator
|
|
278
|
+
*
|
|
279
|
+
* Marks a command class for automatic job routing. When a job with the
|
|
280
|
+
* specified name arrives, the library will automatically instantiate
|
|
281
|
+
* the command with entityId + job.data and execute it via CommandBus.
|
|
282
|
+
*
|
|
283
|
+
* This eliminates the need for @JobHandler boilerplate in processors.
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* ```typescript
|
|
287
|
+
* // Option 1: Explicit job name
|
|
288
|
+
* @JobCommand('make-bet')
|
|
289
|
+
* export class MakeBetCommand {
|
|
290
|
+
* constructor(
|
|
291
|
+
* public readonly tableId: string, // entityId (first param)
|
|
292
|
+
* public readonly playerId: string,
|
|
293
|
+
* public readonly amount: number,
|
|
294
|
+
* ) {}
|
|
295
|
+
* }
|
|
296
|
+
*
|
|
297
|
+
* // Option 2: Auto-derived job name (MakeBetCommand -> 'make-bet')
|
|
298
|
+
* @JobCommand()
|
|
299
|
+
* export class MakeBetCommand { ... }
|
|
300
|
+
*
|
|
301
|
+
* // Option 3: With options
|
|
302
|
+
* @JobCommand({
|
|
303
|
+
* name: 'place-bet',
|
|
304
|
+
* entityType: 'table',
|
|
305
|
+
* entityIdParam: 'tableId', // or 0 for first param
|
|
306
|
+
* })
|
|
307
|
+
* export class PlaceBetCommand { ... }
|
|
308
|
+
* ```
|
|
309
|
+
*/
|
|
310
|
+
export declare function JobCommand(options?: string | JobCommandOptions): ClassDecorator;
|
|
311
|
+
/**
|
|
312
|
+
* @JobQuery class decorator
|
|
313
|
+
*
|
|
314
|
+
* Marks a query class for automatic job routing. When a job with the
|
|
315
|
+
* specified name arrives, the library will automatically instantiate
|
|
316
|
+
* the query with entityId + job.data and execute it via QueryBus.
|
|
317
|
+
*
|
|
318
|
+
* @example
|
|
319
|
+
* ```typescript
|
|
320
|
+
* @JobQuery('get-score')
|
|
321
|
+
* export class GetScoreQuery {
|
|
322
|
+
* constructor(
|
|
323
|
+
* public readonly tableId: string,
|
|
324
|
+
* public readonly seatIndex: number,
|
|
325
|
+
* ) {}
|
|
326
|
+
* }
|
|
327
|
+
*
|
|
328
|
+
* // Auto-derived: GetTableStateQuery -> 'get-table-state'
|
|
329
|
+
* @JobQuery()
|
|
330
|
+
* export class GetTableStateQuery { ... }
|
|
331
|
+
* ```
|
|
332
|
+
*/
|
|
333
|
+
export declare function JobQuery(options?: string | JobQueryOptions): ClassDecorator;
|
|
334
|
+
/**
|
|
335
|
+
* Get JobCommand metadata from a class
|
|
336
|
+
*/
|
|
337
|
+
export declare function getJobCommandMetadata(target: Function): JobCommandMetadata | undefined;
|
|
338
|
+
/**
|
|
339
|
+
* Get JobQuery metadata from a class
|
|
340
|
+
*/
|
|
341
|
+
export declare function getJobQueryMetadata(target: Function): JobQueryMetadata | undefined;
|
|
342
|
+
/**
|
|
343
|
+
* Check if a class is a JobCommand
|
|
344
|
+
*/
|
|
345
|
+
export declare function isJobCommand(target: Function): boolean;
|
|
346
|
+
/**
|
|
347
|
+
* Check if a class is a JobQuery
|
|
348
|
+
*/
|
|
349
|
+
export declare function isJobQuery(target: Function): boolean;
|
|
232
350
|
/**
|
|
233
351
|
* Get WorkerProcessor metadata from a class
|
|
234
352
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAM1C;;GAEG;AACH,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAC5D,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AACzD,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AACnD,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AACnE,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AACzD,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAC7D,eAAO,MAAM,4BAA4B,+BAA+B,CAAC;AACzE,eAAO,MAAM,iCAAiC,oCAAoC,CAAC;AACnF,eAAO,MAAM,wBAAwB,2BAA2B,CAAC;AACjE,eAAO,MAAM,4BAA4B,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.InjectAtomicQueue = exports.JobType = exports.EntityType = exports.AtomicProcessor = exports.ON_TERMINATE_WORKER_METADATA = exports.ON_SPAWN_WORKER_METADATA = exports.GET_DESIRED_WORKER_COUNT_METADATA = exports.GET_ACTIVE_ENTITIES_METADATA = exports.ENTITY_SCALER_METADATA = exports.JOB_HANDLER_METADATA = exports.WORKER_PROCESSOR_METADATA = exports.JOB_TYPE_METADATA = exports.ENTITY_TYPE_METADATA = exports.ATOMIC_PROCESSOR_METADATA = void 0;
|
|
3
|
+
exports.InjectAtomicQueue = exports.JobType = exports.EntityType = exports.AtomicProcessor = exports.JOB_QUERY_METADATA = exports.JOB_COMMAND_METADATA = exports.ON_TERMINATE_WORKER_METADATA = exports.ON_SPAWN_WORKER_METADATA = exports.GET_DESIRED_WORKER_COUNT_METADATA = exports.GET_ACTIVE_ENTITIES_METADATA = exports.ENTITY_SCALER_METADATA = exports.JOB_HANDLER_METADATA = exports.WORKER_PROCESSOR_METADATA = exports.JOB_TYPE_METADATA = exports.ENTITY_TYPE_METADATA = exports.ATOMIC_PROCESSOR_METADATA = void 0;
|
|
4
4
|
exports.WorkerProcessor = WorkerProcessor;
|
|
5
5
|
exports.JobHandler = JobHandler;
|
|
6
6
|
exports.EntityScaler = EntityScaler;
|
|
@@ -8,6 +8,12 @@ exports.GetActiveEntities = GetActiveEntities;
|
|
|
8
8
|
exports.GetDesiredWorkerCount = GetDesiredWorkerCount;
|
|
9
9
|
exports.OnSpawnWorker = OnSpawnWorker;
|
|
10
10
|
exports.OnTerminateWorker = OnTerminateWorker;
|
|
11
|
+
exports.JobCommand = JobCommand;
|
|
12
|
+
exports.JobQuery = JobQuery;
|
|
13
|
+
exports.getJobCommandMetadata = getJobCommandMetadata;
|
|
14
|
+
exports.getJobQueryMetadata = getJobQueryMetadata;
|
|
15
|
+
exports.isJobCommand = isJobCommand;
|
|
16
|
+
exports.isJobQuery = isJobQuery;
|
|
11
17
|
exports.getWorkerProcessorMetadata = getWorkerProcessorMetadata;
|
|
12
18
|
exports.getJobHandlerMetadata = getJobHandlerMetadata;
|
|
13
19
|
exports.getEntityScalerMetadata = getEntityScalerMetadata;
|
|
@@ -30,6 +36,8 @@ exports.GET_ACTIVE_ENTITIES_METADATA = 'atomic:get-active-entities';
|
|
|
30
36
|
exports.GET_DESIRED_WORKER_COUNT_METADATA = 'atomic:get-desired-worker-count';
|
|
31
37
|
exports.ON_SPAWN_WORKER_METADATA = 'atomic:on-spawn-worker';
|
|
32
38
|
exports.ON_TERMINATE_WORKER_METADATA = 'atomic:on-terminate-worker';
|
|
39
|
+
exports.JOB_COMMAND_METADATA = 'atomic:job-command';
|
|
40
|
+
exports.JOB_QUERY_METADATA = 'atomic:job-query';
|
|
33
41
|
// =============================================================================
|
|
34
42
|
// LEGACY DECORATORS (Preserved for backward compatibility)
|
|
35
43
|
// =============================================================================
|
|
@@ -276,6 +284,159 @@ function OnTerminateWorker() {
|
|
|
276
284
|
};
|
|
277
285
|
}
|
|
278
286
|
// =============================================================================
|
|
287
|
+
// JOB COMMAND/QUERY DECORATORS - Zero-Boilerplate CQRS Integration
|
|
288
|
+
// =============================================================================
|
|
289
|
+
/**
|
|
290
|
+
* Helper to convert class name to kebab-case job name
|
|
291
|
+
* MakeBetCommand -> make-bet
|
|
292
|
+
* ProcessPaymentCommand -> process-payment
|
|
293
|
+
*/
|
|
294
|
+
function deriveJobName(className, suffix) {
|
|
295
|
+
return className
|
|
296
|
+
.replace(new RegExp(`${suffix}$`), '')
|
|
297
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
298
|
+
.toLowerCase();
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Helper to extract constructor parameter names using reflection
|
|
302
|
+
*/
|
|
303
|
+
function getConstructorParamNames(target) {
|
|
304
|
+
const paramTypes = Reflect.getMetadata('design:paramtypes', target) || [];
|
|
305
|
+
// Try to extract parameter names from the constructor string
|
|
306
|
+
const constructorStr = target.toString();
|
|
307
|
+
const match = constructorStr.match(/constructor\s*\(([^)]*)\)/);
|
|
308
|
+
if (match && match[1]) {
|
|
309
|
+
return match[1]
|
|
310
|
+
.split(',')
|
|
311
|
+
.map((param) => {
|
|
312
|
+
// Handle various patterns:
|
|
313
|
+
// "public readonly tableId: string" -> "tableId"
|
|
314
|
+
// "tableId" -> "tableId"
|
|
315
|
+
// "private tableId: string" -> "tableId"
|
|
316
|
+
const cleaned = param.trim();
|
|
317
|
+
const nameMatch = cleaned.match(/(?:public\s+)?(?:private\s+)?(?:protected\s+)?(?:readonly\s+)?(\w+)/);
|
|
318
|
+
return nameMatch ? nameMatch[1] : cleaned;
|
|
319
|
+
})
|
|
320
|
+
.filter((name) => name.length > 0);
|
|
321
|
+
}
|
|
322
|
+
// Fallback: generate param0, param1, etc.
|
|
323
|
+
return paramTypes.map((_, i) => `param${i}`);
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* @JobCommand class decorator
|
|
327
|
+
*
|
|
328
|
+
* Marks a command class for automatic job routing. When a job with the
|
|
329
|
+
* specified name arrives, the library will automatically instantiate
|
|
330
|
+
* the command with entityId + job.data and execute it via CommandBus.
|
|
331
|
+
*
|
|
332
|
+
* This eliminates the need for @JobHandler boilerplate in processors.
|
|
333
|
+
*
|
|
334
|
+
* @example
|
|
335
|
+
* ```typescript
|
|
336
|
+
* // Option 1: Explicit job name
|
|
337
|
+
* @JobCommand('make-bet')
|
|
338
|
+
* export class MakeBetCommand {
|
|
339
|
+
* constructor(
|
|
340
|
+
* public readonly tableId: string, // entityId (first param)
|
|
341
|
+
* public readonly playerId: string,
|
|
342
|
+
* public readonly amount: number,
|
|
343
|
+
* ) {}
|
|
344
|
+
* }
|
|
345
|
+
*
|
|
346
|
+
* // Option 2: Auto-derived job name (MakeBetCommand -> 'make-bet')
|
|
347
|
+
* @JobCommand()
|
|
348
|
+
* export class MakeBetCommand { ... }
|
|
349
|
+
*
|
|
350
|
+
* // Option 3: With options
|
|
351
|
+
* @JobCommand({
|
|
352
|
+
* name: 'place-bet',
|
|
353
|
+
* entityType: 'table',
|
|
354
|
+
* entityIdParam: 'tableId', // or 0 for first param
|
|
355
|
+
* })
|
|
356
|
+
* export class PlaceBetCommand { ... }
|
|
357
|
+
* ```
|
|
358
|
+
*/
|
|
359
|
+
function JobCommand(options) {
|
|
360
|
+
return (target) => {
|
|
361
|
+
const opts = typeof options === 'string'
|
|
362
|
+
? { name: options }
|
|
363
|
+
: (options || {});
|
|
364
|
+
const jobName = opts.name || deriveJobName(target.name, 'Command');
|
|
365
|
+
const paramNames = getConstructorParamNames(target);
|
|
366
|
+
const metadata = {
|
|
367
|
+
jobName,
|
|
368
|
+
entityType: opts.entityType,
|
|
369
|
+
entityIdParam: opts.entityIdParam ?? 0,
|
|
370
|
+
targetClass: target,
|
|
371
|
+
paramNames,
|
|
372
|
+
};
|
|
373
|
+
Reflect.defineMetadata(exports.JOB_COMMAND_METADATA, metadata, target);
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* @JobQuery class decorator
|
|
378
|
+
*
|
|
379
|
+
* Marks a query class for automatic job routing. When a job with the
|
|
380
|
+
* specified name arrives, the library will automatically instantiate
|
|
381
|
+
* the query with entityId + job.data and execute it via QueryBus.
|
|
382
|
+
*
|
|
383
|
+
* @example
|
|
384
|
+
* ```typescript
|
|
385
|
+
* @JobQuery('get-score')
|
|
386
|
+
* export class GetScoreQuery {
|
|
387
|
+
* constructor(
|
|
388
|
+
* public readonly tableId: string,
|
|
389
|
+
* public readonly seatIndex: number,
|
|
390
|
+
* ) {}
|
|
391
|
+
* }
|
|
392
|
+
*
|
|
393
|
+
* // Auto-derived: GetTableStateQuery -> 'get-table-state'
|
|
394
|
+
* @JobQuery()
|
|
395
|
+
* export class GetTableStateQuery { ... }
|
|
396
|
+
* ```
|
|
397
|
+
*/
|
|
398
|
+
function JobQuery(options) {
|
|
399
|
+
return (target) => {
|
|
400
|
+
const opts = typeof options === 'string'
|
|
401
|
+
? { name: options }
|
|
402
|
+
: (options || {});
|
|
403
|
+
const jobName = opts.name || deriveJobName(target.name, 'Query');
|
|
404
|
+
const paramNames = getConstructorParamNames(target);
|
|
405
|
+
const metadata = {
|
|
406
|
+
jobName,
|
|
407
|
+
entityType: opts.entityType,
|
|
408
|
+
entityIdParam: opts.entityIdParam ?? 0,
|
|
409
|
+
targetClass: target,
|
|
410
|
+
paramNames,
|
|
411
|
+
};
|
|
412
|
+
Reflect.defineMetadata(exports.JOB_QUERY_METADATA, metadata, target);
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Get JobCommand metadata from a class
|
|
417
|
+
*/
|
|
418
|
+
function getJobCommandMetadata(target) {
|
|
419
|
+
return Reflect.getMetadata(exports.JOB_COMMAND_METADATA, target);
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Get JobQuery metadata from a class
|
|
423
|
+
*/
|
|
424
|
+
function getJobQueryMetadata(target) {
|
|
425
|
+
return Reflect.getMetadata(exports.JOB_QUERY_METADATA, target);
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Check if a class is a JobCommand
|
|
429
|
+
*/
|
|
430
|
+
function isJobCommand(target) {
|
|
431
|
+
return Reflect.hasMetadata(exports.JOB_COMMAND_METADATA, target);
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Check if a class is a JobQuery
|
|
435
|
+
*/
|
|
436
|
+
function isJobQuery(target) {
|
|
437
|
+
return Reflect.hasMetadata(exports.JOB_QUERY_METADATA, target);
|
|
438
|
+
}
|
|
439
|
+
// =============================================================================
|
|
279
440
|
// UTILITY FUNCTIONS
|
|
280
441
|
// =============================================================================
|
|
281
442
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators/decorators.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators/decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-queues.module.d.ts","sourceRoot":"","sources":["../../src/module/atomic-queues.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAIb,IAAI,EACL,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,yBAAyB,EAAe,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"atomic-queues.module.d.ts","sourceRoot":"","sources":["../../src/module/atomic-queues.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAIb,IAAI,EACL,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,yBAAyB,EAAe,MAAM,WAAW,CAAC;AAoBnE;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAE1B;;OAEG;IACH,UAAU,EAAE,CACV,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,OAAO,CAAC,yBAAyB,CAAC,GAAG,yBAAyB,CAAC;IAEpE;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,qBAEa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,yBAAyB,GAAG,aAAa;IA0BhE;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,8BAA8B,GAAG,aAAa;IAyB3E;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7D,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,GAAG,aAAa;IAgBjB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAuBlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAUxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAqBxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-queues.module.js","sourceRoot":"","sources":["../../src/module/atomic-queues.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAMwB;AACxB,uCAAkF;AAClF,sDAA4B;AAE5B,
|
|
1
|
+
{"version":3,"file":"atomic-queues.module.js","sourceRoot":"","sources":["../../src/module/atomic-queues.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { OnModuleInit, Type } from '@nestjs/common';
|
|
2
|
+
import { DiscoveryService, Reflector } from '@nestjs/core';
|
|
3
|
+
import { Job } from 'bullmq';
|
|
4
|
+
interface ICommandBus {
|
|
5
|
+
execute<T>(command: T): Promise<any>;
|
|
6
|
+
}
|
|
7
|
+
interface IQueryBus {
|
|
8
|
+
execute<T>(query: T): Promise<any>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* CommandDiscoveryService
|
|
12
|
+
*
|
|
13
|
+
* Discovers all classes decorated with @JobCommand and @JobQuery,
|
|
14
|
+
* builds a routing map, and provides auto-execution capabilities.
|
|
15
|
+
*
|
|
16
|
+
* This eliminates the need for @JobHandler boilerplate - commands
|
|
17
|
+
* decorated with @JobCommand are automatically routed and executed.
|
|
18
|
+
*/
|
|
19
|
+
export declare class CommandDiscoveryService implements OnModuleInit {
|
|
20
|
+
private readonly discoveryService;
|
|
21
|
+
private readonly reflector;
|
|
22
|
+
private readonly logger;
|
|
23
|
+
/** Map of job name -> command metadata */
|
|
24
|
+
private readonly commandMap;
|
|
25
|
+
/** Map of job name -> query metadata */
|
|
26
|
+
private readonly queryMap;
|
|
27
|
+
/** Map of entityType:jobName -> command metadata (for scoped routing) */
|
|
28
|
+
private readonly scopedCommandMap;
|
|
29
|
+
/** Map of entityType:jobName -> query metadata (for scoped routing) */
|
|
30
|
+
private readonly scopedQueryMap;
|
|
31
|
+
private commandBus;
|
|
32
|
+
private queryBus;
|
|
33
|
+
constructor(discoveryService: DiscoveryService, reflector: Reflector);
|
|
34
|
+
/**
|
|
35
|
+
* Set the CommandBus for executing commands
|
|
36
|
+
* Called by the module setup if @nestjs/cqrs is available
|
|
37
|
+
*/
|
|
38
|
+
setCommandBus(commandBus: ICommandBus): void;
|
|
39
|
+
/**
|
|
40
|
+
* Set the QueryBus for executing queries
|
|
41
|
+
* Called by the module setup if @nestjs/cqrs is available
|
|
42
|
+
*/
|
|
43
|
+
setQueryBus(queryBus: IQueryBus): void;
|
|
44
|
+
onModuleInit(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Discover all @JobCommand decorated classes
|
|
47
|
+
*/
|
|
48
|
+
private discoverCommands;
|
|
49
|
+
/**
|
|
50
|
+
* Discover all @JobQuery decorated classes
|
|
51
|
+
*/
|
|
52
|
+
private discoverQueries;
|
|
53
|
+
/**
|
|
54
|
+
* Check if a job name has a registered command or query
|
|
55
|
+
*/
|
|
56
|
+
hasHandler(jobName: string, entityType?: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Get command class for a job name
|
|
59
|
+
*/
|
|
60
|
+
getCommandClass(jobName: string, entityType?: string): Type<any> | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Get query class for a job name
|
|
63
|
+
*/
|
|
64
|
+
getQueryClass(jobName: string, entityType?: string): Type<any> | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Execute a job by routing to the appropriate command or query
|
|
67
|
+
*
|
|
68
|
+
* @param job The BullMQ job
|
|
69
|
+
* @param entityId The entity ID (injected by the worker processor)
|
|
70
|
+
* @param entityType Optional entity type for scoped routing
|
|
71
|
+
* @returns The result of the command/query execution
|
|
72
|
+
* @throws Error if no handler is found
|
|
73
|
+
*/
|
|
74
|
+
executeJob(job: Job, entityId: string, entityType?: string): Promise<any>;
|
|
75
|
+
/**
|
|
76
|
+
* Instantiate a command/query class from job data
|
|
77
|
+
*/
|
|
78
|
+
private instantiateFromMetadata;
|
|
79
|
+
/**
|
|
80
|
+
* Get all registered job names (for debugging/documentation)
|
|
81
|
+
*/
|
|
82
|
+
getRegisteredJobNames(): {
|
|
83
|
+
commands: string[];
|
|
84
|
+
queries: string[];
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=command-discovery.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-discovery.service.d.ts","sourceRoot":"","sources":["../../../src/services/command-discovery/command-discovery.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,IAAI,EAAY,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAS7B,UAAU,WAAW;IACnB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACtC;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,qBACa,uBAAwB,YAAW,YAAY;IAmB5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAnBxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IAEnE,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;IAEpE,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAEhE,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;IAE1E,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuC;IAEtE,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,QAAQ,CAA0B;gBAGX,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS;IAGnD;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI;IAI5C;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IAIhC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;IAUzD;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;IAS5E;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;IAS1E;;;;;;;;OAQG;IACG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmD/E;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;IACH,qBAAqB,IAAI;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;CAMnE"}
|