@context-action/core 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +214 -13
- package/dist/index.d.cts +7 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +214 -13
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -236,7 +236,7 @@ var require_toPropertyKey = /* @__PURE__ */ __commonJS({ "../../node_modules/.pn
|
|
|
236
236
|
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js
|
|
237
237
|
var require_defineProperty = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js": ((exports, module) => {
|
|
238
238
|
var toPropertyKey = require_toPropertyKey();
|
|
239
|
-
function _defineProperty$
|
|
239
|
+
function _defineProperty$3(e, r, t) {
|
|
240
240
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
241
241
|
value: t,
|
|
242
242
|
enumerable: !0,
|
|
@@ -244,12 +244,12 @@ var require_defineProperty = /* @__PURE__ */ __commonJS({ "../../node_modules/.p
|
|
|
244
244
|
writable: !0
|
|
245
245
|
}) : e[r] = t, e;
|
|
246
246
|
}
|
|
247
|
-
module.exports = _defineProperty$
|
|
247
|
+
module.exports = _defineProperty$3, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
248
248
|
}) });
|
|
249
249
|
|
|
250
250
|
//#endregion
|
|
251
251
|
//#region src/action-guard.ts
|
|
252
|
-
var import_defineProperty$
|
|
252
|
+
var import_defineProperty$2 = /* @__PURE__ */ __toESM(require_defineProperty(), 1);
|
|
253
253
|
/**
|
|
254
254
|
* Action Guard system for managing action execution timing
|
|
255
255
|
* @implements action-guard
|
|
@@ -280,7 +280,7 @@ var import_defineProperty$1 = /* @__PURE__ */ __toESM(require_defineProperty(),
|
|
|
280
280
|
*/
|
|
281
281
|
var ActionGuard = class {
|
|
282
282
|
constructor() {
|
|
283
|
-
(0, import_defineProperty$
|
|
283
|
+
(0, import_defineProperty$2.default)(this, "guards", /* @__PURE__ */ new Map());
|
|
284
284
|
}
|
|
285
285
|
/**
|
|
286
286
|
* Check if action should be debounced
|
|
@@ -300,15 +300,21 @@ var ActionGuard = class {
|
|
|
300
300
|
this.guards.set(actionKey, state);
|
|
301
301
|
}
|
|
302
302
|
/** Clear any existing debounce timer to restart the delay period */
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
303
|
+
if (state.debounceTimer) {
|
|
304
|
+
clearTimeout(state.debounceTimer);
|
|
305
|
+
if (state.debounceResolve) {
|
|
306
|
+
state.debounceResolve(false);
|
|
307
|
+
state.debounceResolve = void 0;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/** Create new debounce promise */
|
|
307
311
|
return new Promise((resolve) => {
|
|
312
|
+
state.debounceResolve = resolve;
|
|
308
313
|
state.debounceTimer = setTimeout(() => {
|
|
309
|
-
/** Clean up timer
|
|
314
|
+
/** Clean up timer and resolver references */
|
|
310
315
|
state.debounceTimer = void 0;
|
|
311
|
-
|
|
316
|
+
state.debounceResolve = void 0;
|
|
317
|
+
/** Update last execution timestamp */
|
|
312
318
|
state.lastExecuted = Date.now();
|
|
313
319
|
resolve(true);
|
|
314
320
|
}, debounceMs);
|
|
@@ -364,7 +370,10 @@ var ActionGuard = class {
|
|
|
364
370
|
const state = this.guards.get(actionKey);
|
|
365
371
|
if (state) {
|
|
366
372
|
/** Clear debounce timer if active to prevent memory leaks */
|
|
367
|
-
if (state.debounceTimer)
|
|
373
|
+
if (state.debounceTimer) {
|
|
374
|
+
clearTimeout(state.debounceTimer);
|
|
375
|
+
if (state.debounceResolve) state.debounceResolve(false);
|
|
376
|
+
}
|
|
368
377
|
/** Clear throttle timer if active to prevent memory leaks */
|
|
369
378
|
if (state.throttleTimer) clearTimeout(state.throttleTimer);
|
|
370
379
|
/** Remove guard state from memory */
|
|
@@ -379,7 +388,10 @@ var ActionGuard = class {
|
|
|
379
388
|
/** This prevents memory leaks when clearing the entire guard system */
|
|
380
389
|
for (const [, state] of this.guards) {
|
|
381
390
|
/** Clear any active debounce timers */
|
|
382
|
-
if (state.debounceTimer)
|
|
391
|
+
if (state.debounceTimer) {
|
|
392
|
+
clearTimeout(state.debounceTimer);
|
|
393
|
+
if (state.debounceResolve) state.debounceResolve(false);
|
|
394
|
+
}
|
|
383
395
|
/** Clear any active throttle timers */
|
|
384
396
|
if (state.throttleTimer) clearTimeout(state.throttleTimer);
|
|
385
397
|
}
|
|
@@ -401,6 +413,112 @@ var ActionGuard = class {
|
|
|
401
413
|
}
|
|
402
414
|
};
|
|
403
415
|
|
|
416
|
+
//#endregion
|
|
417
|
+
//#region src/concurrency/OperationQueue.ts
|
|
418
|
+
var import_defineProperty$1 = /* @__PURE__ */ __toESM(require_defineProperty(), 1);
|
|
419
|
+
/**
|
|
420
|
+
* 작업 큐 관리자
|
|
421
|
+
*
|
|
422
|
+
* 핵심 기능:
|
|
423
|
+
* 1. 작업 직렬화 - 모든 작업을 순서대로 실행
|
|
424
|
+
* 2. 우선순위 지원 - 중요한 작업 우선 처리
|
|
425
|
+
* 3. 에러 처리 - 개별 작업 실패가 전체에 영향 주지 않음
|
|
426
|
+
* 4. 메모리 관리 - 완료된 작업 자동 정리
|
|
427
|
+
*/
|
|
428
|
+
var OperationQueue = class {
|
|
429
|
+
constructor(name = "OperationQueue") {
|
|
430
|
+
this.name = name;
|
|
431
|
+
(0, import_defineProperty$1.default)(this, "queue", []);
|
|
432
|
+
(0, import_defineProperty$1.default)(this, "isProcessing", false);
|
|
433
|
+
(0, import_defineProperty$1.default)(this, "operationCounter", 0);
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* 작업을 큐에 추가하고 실행 결과를 반환
|
|
437
|
+
*
|
|
438
|
+
* @param operation 실행할 작업
|
|
439
|
+
* @param priority 우선순위 (높을수록 먼저 실행)
|
|
440
|
+
* @returns Promise로 래핑된 작업 결과
|
|
441
|
+
*/
|
|
442
|
+
enqueue(operation, priority = 0) {
|
|
443
|
+
return new Promise((resolve, reject) => {
|
|
444
|
+
const queuedOperation = {
|
|
445
|
+
id: `${this.name}-${++this.operationCounter}`,
|
|
446
|
+
operation,
|
|
447
|
+
resolve,
|
|
448
|
+
reject,
|
|
449
|
+
priority,
|
|
450
|
+
timestamp: Date.now()
|
|
451
|
+
};
|
|
452
|
+
let insertIndex = this.queue.length;
|
|
453
|
+
for (let i = 0; i < this.queue.length; i++) if ((this.queue[i].priority || 0) < priority) {
|
|
454
|
+
insertIndex = i;
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
this.queue.splice(insertIndex, 0, queuedOperation);
|
|
458
|
+
this.processQueue();
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* 큐 처리 메인 로직
|
|
463
|
+
*
|
|
464
|
+
* 한 번에 하나씩 순서대로 작업을 실행하여 동시성 문제 방지
|
|
465
|
+
*/
|
|
466
|
+
async processQueue() {
|
|
467
|
+
if (this.isProcessing || this.queue.length === 0) return;
|
|
468
|
+
this.isProcessing = true;
|
|
469
|
+
try {
|
|
470
|
+
while (this.queue.length > 0) {
|
|
471
|
+
const operation = this.queue.shift();
|
|
472
|
+
try {
|
|
473
|
+
const result = await Promise.resolve(operation.operation());
|
|
474
|
+
operation.resolve(result);
|
|
475
|
+
} catch (error) {
|
|
476
|
+
operation.reject(error);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
} finally {
|
|
480
|
+
this.isProcessing = false;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* 현재 큐 상태 조회 (디버깅용)
|
|
485
|
+
*/
|
|
486
|
+
getQueueInfo() {
|
|
487
|
+
return {
|
|
488
|
+
name: this.name,
|
|
489
|
+
queueLength: this.queue.length,
|
|
490
|
+
isProcessing: this.isProcessing,
|
|
491
|
+
operations: this.queue.map((op) => ({
|
|
492
|
+
id: op.id,
|
|
493
|
+
priority: op.priority,
|
|
494
|
+
timestamp: op.timestamp
|
|
495
|
+
}))
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* 큐 비우기 (테스트용)
|
|
500
|
+
*/
|
|
501
|
+
clear() {
|
|
502
|
+
this.queue.forEach((operation) => {
|
|
503
|
+
operation.reject(/* @__PURE__ */ new Error("Queue cleared"));
|
|
504
|
+
});
|
|
505
|
+
this.queue = [];
|
|
506
|
+
this.isProcessing = false;
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* 큐 크기 조회
|
|
510
|
+
*/
|
|
511
|
+
get size() {
|
|
512
|
+
return this.queue.length;
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* 처리 중 여부 조회
|
|
516
|
+
*/
|
|
517
|
+
get processing() {
|
|
518
|
+
return this.isProcessing;
|
|
519
|
+
}
|
|
520
|
+
};
|
|
521
|
+
|
|
404
522
|
//#endregion
|
|
405
523
|
//#region src/ActionRegister.ts
|
|
406
524
|
var import_defineProperty = /* @__PURE__ */ __toESM(require_defineProperty(), 1);
|
|
@@ -443,18 +561,93 @@ var ActionRegister = class {
|
|
|
443
561
|
(0, import_defineProperty.default)(this, "name", void 0);
|
|
444
562
|
(0, import_defineProperty.default)(this, "registryConfig", void 0);
|
|
445
563
|
(0, import_defineProperty.default)(this, "executionStats", /* @__PURE__ */ new Map());
|
|
564
|
+
(0, import_defineProperty.default)(this, "registrationQueue", void 0);
|
|
565
|
+
(0, import_defineProperty.default)(this, "dispatchQueue", void 0);
|
|
446
566
|
this.name = config.name || "ActionRegister";
|
|
447
567
|
this.registryConfig = config.registry;
|
|
448
568
|
this.actionGuard = new ActionGuard();
|
|
569
|
+
this.registrationQueue = new OperationQueue(`${this.name}-Registration`);
|
|
570
|
+
this.dispatchQueue = new OperationQueue(`${this.name}-Dispatch`);
|
|
449
571
|
if (this.registryConfig?.defaultExecutionMode) this.executionMode = this.registryConfig.defaultExecutionMode;
|
|
450
572
|
if (this.registryConfig?.debug && process.env.NODE_ENV === "development") console.log(`🎯 ActionRegister created: ${this.name}`, {
|
|
451
573
|
defaultExecutionMode: this.executionMode,
|
|
452
574
|
maxHandlers: this.registryConfig.maxHandlers,
|
|
453
|
-
autoCleanup: this.registryConfig.autoCleanup ?? true
|
|
575
|
+
autoCleanup: this.registryConfig.autoCleanup ?? true,
|
|
576
|
+
concurrencyProtection: true
|
|
454
577
|
});
|
|
455
578
|
}
|
|
456
579
|
register(action, handler, config = {}) {
|
|
457
580
|
const handlerId = config.id || `handler_${++this.handlerCounter}_${Math.random().toString(36).substr(2, 5)}`;
|
|
581
|
+
const unregisterFn = this._performRegistrationSync(action, handler, config, handlerId);
|
|
582
|
+
return unregisterFn;
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* 🆕 동기적 등록 수행 (개선된 버전)
|
|
586
|
+
*/
|
|
587
|
+
_performRegistrationSync(action, handler, config, handlerId) {
|
|
588
|
+
const registration = {
|
|
589
|
+
handler,
|
|
590
|
+
config: {
|
|
591
|
+
priority: config.priority ?? 0,
|
|
592
|
+
id: handlerId,
|
|
593
|
+
blocking: config.blocking ?? false,
|
|
594
|
+
once: config.once ?? false,
|
|
595
|
+
condition: config.condition || (() => true),
|
|
596
|
+
debounce: config.debounce ?? void 0,
|
|
597
|
+
throttle: config.throttle ?? void 0,
|
|
598
|
+
validation: config.validation ?? void 0,
|
|
599
|
+
middleware: config.middleware ?? false,
|
|
600
|
+
tags: config.tags ?? [],
|
|
601
|
+
category: config.category ?? void 0,
|
|
602
|
+
description: config.description ?? void 0,
|
|
603
|
+
version: config.version ?? void 0,
|
|
604
|
+
returnType: config.returnType ?? "value",
|
|
605
|
+
timeout: config.timeout ?? void 0,
|
|
606
|
+
retries: config.retries ?? 0,
|
|
607
|
+
dependencies: config.dependencies ?? [],
|
|
608
|
+
conflicts: config.conflicts ?? [],
|
|
609
|
+
environment: config.environment ?? void 0,
|
|
610
|
+
feature: config.feature ?? void 0,
|
|
611
|
+
metrics: config.metrics ?? {
|
|
612
|
+
collectTiming: false,
|
|
613
|
+
collectErrors: false,
|
|
614
|
+
customMetrics: {}
|
|
615
|
+
},
|
|
616
|
+
metadata: config.metadata ?? {}
|
|
617
|
+
},
|
|
618
|
+
id: handlerId
|
|
619
|
+
};
|
|
620
|
+
if (!this.pipelines.has(action)) this.pipelines.set(action, []);
|
|
621
|
+
const pipeline = this.pipelines.get(action);
|
|
622
|
+
const existingIndex = pipeline.findIndex((reg) => reg.id === handlerId);
|
|
623
|
+
if (existingIndex !== -1) return () => {};
|
|
624
|
+
if (this.registryConfig?.maxHandlers && pipeline.length >= this.registryConfig.maxHandlers) throw new Error(`Maximum number of handlers (${this.registryConfig.maxHandlers}) reached for action '${String(action)}' in registry '${this.name}'`);
|
|
625
|
+
pipeline.push(registration);
|
|
626
|
+
pipeline.sort((a, b) => b.config.priority - a.config.priority);
|
|
627
|
+
if (this.registryConfig?.debug && process.env.NODE_ENV === "development") console.log(`🎯 Handler registered: ${String(action)}`, {
|
|
628
|
+
handlerId,
|
|
629
|
+
priority: config.priority,
|
|
630
|
+
tags: config.tags,
|
|
631
|
+
category: config.category,
|
|
632
|
+
totalHandlers: pipeline.length,
|
|
633
|
+
registry: this.name
|
|
634
|
+
});
|
|
635
|
+
return () => {
|
|
636
|
+
const index = pipeline.findIndex((reg) => reg.id === handlerId && reg === registration);
|
|
637
|
+
if (index !== -1) {
|
|
638
|
+
pipeline.splice(index, 1);
|
|
639
|
+
if (this.registryConfig?.debug && process.env.NODE_ENV === "development") console.log(`🎯 Handler unregistered: ${String(action)}`, {
|
|
640
|
+
handlerId,
|
|
641
|
+
remainingHandlers: pipeline.length,
|
|
642
|
+
registry: this.name
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
/**
|
|
648
|
+
* 🆕 실제 등록 작업 수행 (큐에서 호출됨)
|
|
649
|
+
*/
|
|
650
|
+
_performRegistration(action, handler, config, handlerId) {
|
|
458
651
|
const registration = {
|
|
459
652
|
handler,
|
|
460
653
|
config: {
|
|
@@ -515,6 +708,14 @@ var ActionRegister = class {
|
|
|
515
708
|
};
|
|
516
709
|
}
|
|
517
710
|
async dispatch(action, payload, options) {
|
|
711
|
+
return this.dispatchQueue.enqueue(async () => {
|
|
712
|
+
return this._performDispatch(action, payload, options);
|
|
713
|
+
});
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* 🆕 실제 디스패치 작업 수행 (큐에서 호출됨)
|
|
717
|
+
*/
|
|
718
|
+
async _performDispatch(action, payload, options) {
|
|
518
719
|
let autoAbortController;
|
|
519
720
|
let effectiveSignal = options?.signal;
|
|
520
721
|
if (options?.autoAbort?.enabled) {
|
package/dist/index.d.cts
CHANGED
|
@@ -171,9 +171,14 @@ declare class ActionRegister<T extends ActionPayloadMap = ActionPayloadMap> {
|
|
|
171
171
|
readonly name: string;
|
|
172
172
|
private readonly registryConfig;
|
|
173
173
|
private executionStats;
|
|
174
|
+
private registrationQueue;
|
|
175
|
+
private dispatchQueue;
|
|
174
176
|
constructor(config?: ActionRegisterConfig);
|
|
175
177
|
register<K extends keyof T, R = void>(action: K, handler: ActionHandler<T[K], R>, config?: HandlerConfig): UnregisterFunction;
|
|
178
|
+
private _performRegistrationSync;
|
|
179
|
+
private _performRegistration;
|
|
176
180
|
dispatch<K extends keyof T>(action: K, payload?: T[K], options?: DispatchOptions): Promise<void>;
|
|
181
|
+
private _performDispatch;
|
|
177
182
|
dispatchWithResult<K extends keyof T, R = void>(action: K, payload?: T[K], options?: DispatchOptions): Promise<ExecutionResult<R>>;
|
|
178
183
|
private filterHandlers;
|
|
179
184
|
private processResults;
|
|
@@ -206,6 +211,8 @@ interface GuardState {
|
|
|
206
211
|
debounceTimer?: NodeJS.Timeout;
|
|
207
212
|
throttleTimer?: NodeJS.Timeout;
|
|
208
213
|
isThrottled: boolean;
|
|
214
|
+
debouncePromise?: Promise<boolean>;
|
|
215
|
+
debounceResolve?: (value: boolean) => void;
|
|
209
216
|
}
|
|
210
217
|
declare class ActionGuard {
|
|
211
218
|
private guards;
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/ActionRegister.ts","../src/action-guard.ts","../src/execution-modes.ts"],"sourcesContent":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/ActionRegister.ts","../src/action-guard.ts","../src/execution-modes.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -171,9 +171,14 @@ declare class ActionRegister<T extends ActionPayloadMap = ActionPayloadMap> {
|
|
|
171
171
|
readonly name: string;
|
|
172
172
|
private readonly registryConfig;
|
|
173
173
|
private executionStats;
|
|
174
|
+
private registrationQueue;
|
|
175
|
+
private dispatchQueue;
|
|
174
176
|
constructor(config?: ActionRegisterConfig);
|
|
175
177
|
register<K extends keyof T, R = void>(action: K, handler: ActionHandler<T[K], R>, config?: HandlerConfig): UnregisterFunction;
|
|
178
|
+
private _performRegistrationSync;
|
|
179
|
+
private _performRegistration;
|
|
176
180
|
dispatch<K extends keyof T>(action: K, payload?: T[K], options?: DispatchOptions): Promise<void>;
|
|
181
|
+
private _performDispatch;
|
|
177
182
|
dispatchWithResult<K extends keyof T, R = void>(action: K, payload?: T[K], options?: DispatchOptions): Promise<ExecutionResult<R>>;
|
|
178
183
|
private filterHandlers;
|
|
179
184
|
private processResults;
|
|
@@ -206,6 +211,8 @@ interface GuardState {
|
|
|
206
211
|
debounceTimer?: NodeJS.Timeout;
|
|
207
212
|
throttleTimer?: NodeJS.Timeout;
|
|
208
213
|
isThrottled: boolean;
|
|
214
|
+
debouncePromise?: Promise<boolean>;
|
|
215
|
+
debounceResolve?: (value: boolean) => void;
|
|
209
216
|
}
|
|
210
217
|
declare class ActionGuard {
|
|
211
218
|
private guards;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/ActionRegister.ts","../src/action-guard.ts","../src/execution-modes.ts"],"sourcesContent":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/ActionRegister.ts","../src/action-guard.ts","../src/execution-modes.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -235,7 +235,7 @@ var require_toPropertyKey = /* @__PURE__ */ __commonJS({ "../../node_modules/.pn
|
|
|
235
235
|
//#region ../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js
|
|
236
236
|
var require_defineProperty = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js": ((exports, module) => {
|
|
237
237
|
var toPropertyKey = require_toPropertyKey();
|
|
238
|
-
function _defineProperty$
|
|
238
|
+
function _defineProperty$3(e, r, t) {
|
|
239
239
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
240
240
|
value: t,
|
|
241
241
|
enumerable: !0,
|
|
@@ -243,12 +243,12 @@ var require_defineProperty = /* @__PURE__ */ __commonJS({ "../../node_modules/.p
|
|
|
243
243
|
writable: !0
|
|
244
244
|
}) : e[r] = t, e;
|
|
245
245
|
}
|
|
246
|
-
module.exports = _defineProperty$
|
|
246
|
+
module.exports = _defineProperty$3, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
247
247
|
}) });
|
|
248
248
|
|
|
249
249
|
//#endregion
|
|
250
250
|
//#region src/action-guard.ts
|
|
251
|
-
var import_defineProperty$
|
|
251
|
+
var import_defineProperty$2 = /* @__PURE__ */ __toESM(require_defineProperty(), 1);
|
|
252
252
|
/**
|
|
253
253
|
* Action Guard system for managing action execution timing
|
|
254
254
|
* @implements action-guard
|
|
@@ -279,7 +279,7 @@ var import_defineProperty$1 = /* @__PURE__ */ __toESM(require_defineProperty(),
|
|
|
279
279
|
*/
|
|
280
280
|
var ActionGuard = class {
|
|
281
281
|
constructor() {
|
|
282
|
-
(0, import_defineProperty$
|
|
282
|
+
(0, import_defineProperty$2.default)(this, "guards", /* @__PURE__ */ new Map());
|
|
283
283
|
}
|
|
284
284
|
/**
|
|
285
285
|
* Check if action should be debounced
|
|
@@ -299,15 +299,21 @@ var ActionGuard = class {
|
|
|
299
299
|
this.guards.set(actionKey, state);
|
|
300
300
|
}
|
|
301
301
|
/** Clear any existing debounce timer to restart the delay period */
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
302
|
+
if (state.debounceTimer) {
|
|
303
|
+
clearTimeout(state.debounceTimer);
|
|
304
|
+
if (state.debounceResolve) {
|
|
305
|
+
state.debounceResolve(false);
|
|
306
|
+
state.debounceResolve = void 0;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/** Create new debounce promise */
|
|
306
310
|
return new Promise((resolve) => {
|
|
311
|
+
state.debounceResolve = resolve;
|
|
307
312
|
state.debounceTimer = setTimeout(() => {
|
|
308
|
-
/** Clean up timer
|
|
313
|
+
/** Clean up timer and resolver references */
|
|
309
314
|
state.debounceTimer = void 0;
|
|
310
|
-
|
|
315
|
+
state.debounceResolve = void 0;
|
|
316
|
+
/** Update last execution timestamp */
|
|
311
317
|
state.lastExecuted = Date.now();
|
|
312
318
|
resolve(true);
|
|
313
319
|
}, debounceMs);
|
|
@@ -363,7 +369,10 @@ var ActionGuard = class {
|
|
|
363
369
|
const state = this.guards.get(actionKey);
|
|
364
370
|
if (state) {
|
|
365
371
|
/** Clear debounce timer if active to prevent memory leaks */
|
|
366
|
-
if (state.debounceTimer)
|
|
372
|
+
if (state.debounceTimer) {
|
|
373
|
+
clearTimeout(state.debounceTimer);
|
|
374
|
+
if (state.debounceResolve) state.debounceResolve(false);
|
|
375
|
+
}
|
|
367
376
|
/** Clear throttle timer if active to prevent memory leaks */
|
|
368
377
|
if (state.throttleTimer) clearTimeout(state.throttleTimer);
|
|
369
378
|
/** Remove guard state from memory */
|
|
@@ -378,7 +387,10 @@ var ActionGuard = class {
|
|
|
378
387
|
/** This prevents memory leaks when clearing the entire guard system */
|
|
379
388
|
for (const [, state] of this.guards) {
|
|
380
389
|
/** Clear any active debounce timers */
|
|
381
|
-
if (state.debounceTimer)
|
|
390
|
+
if (state.debounceTimer) {
|
|
391
|
+
clearTimeout(state.debounceTimer);
|
|
392
|
+
if (state.debounceResolve) state.debounceResolve(false);
|
|
393
|
+
}
|
|
382
394
|
/** Clear any active throttle timers */
|
|
383
395
|
if (state.throttleTimer) clearTimeout(state.throttleTimer);
|
|
384
396
|
}
|
|
@@ -400,6 +412,112 @@ var ActionGuard = class {
|
|
|
400
412
|
}
|
|
401
413
|
};
|
|
402
414
|
|
|
415
|
+
//#endregion
|
|
416
|
+
//#region src/concurrency/OperationQueue.ts
|
|
417
|
+
var import_defineProperty$1 = /* @__PURE__ */ __toESM(require_defineProperty(), 1);
|
|
418
|
+
/**
|
|
419
|
+
* 작업 큐 관리자
|
|
420
|
+
*
|
|
421
|
+
* 핵심 기능:
|
|
422
|
+
* 1. 작업 직렬화 - 모든 작업을 순서대로 실행
|
|
423
|
+
* 2. 우선순위 지원 - 중요한 작업 우선 처리
|
|
424
|
+
* 3. 에러 처리 - 개별 작업 실패가 전체에 영향 주지 않음
|
|
425
|
+
* 4. 메모리 관리 - 완료된 작업 자동 정리
|
|
426
|
+
*/
|
|
427
|
+
var OperationQueue = class {
|
|
428
|
+
constructor(name = "OperationQueue") {
|
|
429
|
+
this.name = name;
|
|
430
|
+
(0, import_defineProperty$1.default)(this, "queue", []);
|
|
431
|
+
(0, import_defineProperty$1.default)(this, "isProcessing", false);
|
|
432
|
+
(0, import_defineProperty$1.default)(this, "operationCounter", 0);
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* 작업을 큐에 추가하고 실행 결과를 반환
|
|
436
|
+
*
|
|
437
|
+
* @param operation 실행할 작업
|
|
438
|
+
* @param priority 우선순위 (높을수록 먼저 실행)
|
|
439
|
+
* @returns Promise로 래핑된 작업 결과
|
|
440
|
+
*/
|
|
441
|
+
enqueue(operation, priority = 0) {
|
|
442
|
+
return new Promise((resolve, reject) => {
|
|
443
|
+
const queuedOperation = {
|
|
444
|
+
id: `${this.name}-${++this.operationCounter}`,
|
|
445
|
+
operation,
|
|
446
|
+
resolve,
|
|
447
|
+
reject,
|
|
448
|
+
priority,
|
|
449
|
+
timestamp: Date.now()
|
|
450
|
+
};
|
|
451
|
+
let insertIndex = this.queue.length;
|
|
452
|
+
for (let i = 0; i < this.queue.length; i++) if ((this.queue[i].priority || 0) < priority) {
|
|
453
|
+
insertIndex = i;
|
|
454
|
+
break;
|
|
455
|
+
}
|
|
456
|
+
this.queue.splice(insertIndex, 0, queuedOperation);
|
|
457
|
+
this.processQueue();
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* 큐 처리 메인 로직
|
|
462
|
+
*
|
|
463
|
+
* 한 번에 하나씩 순서대로 작업을 실행하여 동시성 문제 방지
|
|
464
|
+
*/
|
|
465
|
+
async processQueue() {
|
|
466
|
+
if (this.isProcessing || this.queue.length === 0) return;
|
|
467
|
+
this.isProcessing = true;
|
|
468
|
+
try {
|
|
469
|
+
while (this.queue.length > 0) {
|
|
470
|
+
const operation = this.queue.shift();
|
|
471
|
+
try {
|
|
472
|
+
const result = await Promise.resolve(operation.operation());
|
|
473
|
+
operation.resolve(result);
|
|
474
|
+
} catch (error) {
|
|
475
|
+
operation.reject(error);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
} finally {
|
|
479
|
+
this.isProcessing = false;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* 현재 큐 상태 조회 (디버깅용)
|
|
484
|
+
*/
|
|
485
|
+
getQueueInfo() {
|
|
486
|
+
return {
|
|
487
|
+
name: this.name,
|
|
488
|
+
queueLength: this.queue.length,
|
|
489
|
+
isProcessing: this.isProcessing,
|
|
490
|
+
operations: this.queue.map((op) => ({
|
|
491
|
+
id: op.id,
|
|
492
|
+
priority: op.priority,
|
|
493
|
+
timestamp: op.timestamp
|
|
494
|
+
}))
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* 큐 비우기 (테스트용)
|
|
499
|
+
*/
|
|
500
|
+
clear() {
|
|
501
|
+
this.queue.forEach((operation) => {
|
|
502
|
+
operation.reject(/* @__PURE__ */ new Error("Queue cleared"));
|
|
503
|
+
});
|
|
504
|
+
this.queue = [];
|
|
505
|
+
this.isProcessing = false;
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* 큐 크기 조회
|
|
509
|
+
*/
|
|
510
|
+
get size() {
|
|
511
|
+
return this.queue.length;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* 처리 중 여부 조회
|
|
515
|
+
*/
|
|
516
|
+
get processing() {
|
|
517
|
+
return this.isProcessing;
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
|
|
403
521
|
//#endregion
|
|
404
522
|
//#region src/ActionRegister.ts
|
|
405
523
|
var import_defineProperty = /* @__PURE__ */ __toESM(require_defineProperty(), 1);
|
|
@@ -442,18 +560,93 @@ var ActionRegister = class {
|
|
|
442
560
|
(0, import_defineProperty.default)(this, "name", void 0);
|
|
443
561
|
(0, import_defineProperty.default)(this, "registryConfig", void 0);
|
|
444
562
|
(0, import_defineProperty.default)(this, "executionStats", /* @__PURE__ */ new Map());
|
|
563
|
+
(0, import_defineProperty.default)(this, "registrationQueue", void 0);
|
|
564
|
+
(0, import_defineProperty.default)(this, "dispatchQueue", void 0);
|
|
445
565
|
this.name = config.name || "ActionRegister";
|
|
446
566
|
this.registryConfig = config.registry;
|
|
447
567
|
this.actionGuard = new ActionGuard();
|
|
568
|
+
this.registrationQueue = new OperationQueue(`${this.name}-Registration`);
|
|
569
|
+
this.dispatchQueue = new OperationQueue(`${this.name}-Dispatch`);
|
|
448
570
|
if (this.registryConfig?.defaultExecutionMode) this.executionMode = this.registryConfig.defaultExecutionMode;
|
|
449
571
|
if (this.registryConfig?.debug && process.env.NODE_ENV === "development") console.log(`🎯 ActionRegister created: ${this.name}`, {
|
|
450
572
|
defaultExecutionMode: this.executionMode,
|
|
451
573
|
maxHandlers: this.registryConfig.maxHandlers,
|
|
452
|
-
autoCleanup: this.registryConfig.autoCleanup ?? true
|
|
574
|
+
autoCleanup: this.registryConfig.autoCleanup ?? true,
|
|
575
|
+
concurrencyProtection: true
|
|
453
576
|
});
|
|
454
577
|
}
|
|
455
578
|
register(action, handler, config = {}) {
|
|
456
579
|
const handlerId = config.id || `handler_${++this.handlerCounter}_${Math.random().toString(36).substr(2, 5)}`;
|
|
580
|
+
const unregisterFn = this._performRegistrationSync(action, handler, config, handlerId);
|
|
581
|
+
return unregisterFn;
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* 🆕 동기적 등록 수행 (개선된 버전)
|
|
585
|
+
*/
|
|
586
|
+
_performRegistrationSync(action, handler, config, handlerId) {
|
|
587
|
+
const registration = {
|
|
588
|
+
handler,
|
|
589
|
+
config: {
|
|
590
|
+
priority: config.priority ?? 0,
|
|
591
|
+
id: handlerId,
|
|
592
|
+
blocking: config.blocking ?? false,
|
|
593
|
+
once: config.once ?? false,
|
|
594
|
+
condition: config.condition || (() => true),
|
|
595
|
+
debounce: config.debounce ?? void 0,
|
|
596
|
+
throttle: config.throttle ?? void 0,
|
|
597
|
+
validation: config.validation ?? void 0,
|
|
598
|
+
middleware: config.middleware ?? false,
|
|
599
|
+
tags: config.tags ?? [],
|
|
600
|
+
category: config.category ?? void 0,
|
|
601
|
+
description: config.description ?? void 0,
|
|
602
|
+
version: config.version ?? void 0,
|
|
603
|
+
returnType: config.returnType ?? "value",
|
|
604
|
+
timeout: config.timeout ?? void 0,
|
|
605
|
+
retries: config.retries ?? 0,
|
|
606
|
+
dependencies: config.dependencies ?? [],
|
|
607
|
+
conflicts: config.conflicts ?? [],
|
|
608
|
+
environment: config.environment ?? void 0,
|
|
609
|
+
feature: config.feature ?? void 0,
|
|
610
|
+
metrics: config.metrics ?? {
|
|
611
|
+
collectTiming: false,
|
|
612
|
+
collectErrors: false,
|
|
613
|
+
customMetrics: {}
|
|
614
|
+
},
|
|
615
|
+
metadata: config.metadata ?? {}
|
|
616
|
+
},
|
|
617
|
+
id: handlerId
|
|
618
|
+
};
|
|
619
|
+
if (!this.pipelines.has(action)) this.pipelines.set(action, []);
|
|
620
|
+
const pipeline = this.pipelines.get(action);
|
|
621
|
+
const existingIndex = pipeline.findIndex((reg) => reg.id === handlerId);
|
|
622
|
+
if (existingIndex !== -1) return () => {};
|
|
623
|
+
if (this.registryConfig?.maxHandlers && pipeline.length >= this.registryConfig.maxHandlers) throw new Error(`Maximum number of handlers (${this.registryConfig.maxHandlers}) reached for action '${String(action)}' in registry '${this.name}'`);
|
|
624
|
+
pipeline.push(registration);
|
|
625
|
+
pipeline.sort((a, b) => b.config.priority - a.config.priority);
|
|
626
|
+
if (this.registryConfig?.debug && process.env.NODE_ENV === "development") console.log(`🎯 Handler registered: ${String(action)}`, {
|
|
627
|
+
handlerId,
|
|
628
|
+
priority: config.priority,
|
|
629
|
+
tags: config.tags,
|
|
630
|
+
category: config.category,
|
|
631
|
+
totalHandlers: pipeline.length,
|
|
632
|
+
registry: this.name
|
|
633
|
+
});
|
|
634
|
+
return () => {
|
|
635
|
+
const index = pipeline.findIndex((reg) => reg.id === handlerId && reg === registration);
|
|
636
|
+
if (index !== -1) {
|
|
637
|
+
pipeline.splice(index, 1);
|
|
638
|
+
if (this.registryConfig?.debug && process.env.NODE_ENV === "development") console.log(`🎯 Handler unregistered: ${String(action)}`, {
|
|
639
|
+
handlerId,
|
|
640
|
+
remainingHandlers: pipeline.length,
|
|
641
|
+
registry: this.name
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* 🆕 실제 등록 작업 수행 (큐에서 호출됨)
|
|
648
|
+
*/
|
|
649
|
+
_performRegistration(action, handler, config, handlerId) {
|
|
457
650
|
const registration = {
|
|
458
651
|
handler,
|
|
459
652
|
config: {
|
|
@@ -514,6 +707,14 @@ var ActionRegister = class {
|
|
|
514
707
|
};
|
|
515
708
|
}
|
|
516
709
|
async dispatch(action, payload, options) {
|
|
710
|
+
return this.dispatchQueue.enqueue(async () => {
|
|
711
|
+
return this._performDispatch(action, payload, options);
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* 🆕 실제 디스패치 작업 수행 (큐에서 호출됨)
|
|
716
|
+
*/
|
|
717
|
+
async _performDispatch(action, payload, options) {
|
|
517
718
|
let autoAbortController;
|
|
518
719
|
let effectiveSignal = options?.signal;
|
|
519
720
|
if (options?.autoAbort?.enabled) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["context: PipelineContext<T, R>","createController: (registration: HandlerRegistration<T, R>, index: number) => PipelineController<T, R>","error: any","handlerResult: R | undefined","_typeof","o","_typeof","toPrimitive","toPropertyKey","_defineProperty","actionKey: string","debounceMs: number","throttleMs: number","config: ActionRegisterConfig","action: K","handler: ActionHandler<T[K], R>","config: HandlerConfig","registration: HandlerRegistration<T[K], R>","payload?: T[K]","options?: import('./types.js').DispatchOptions","autoAbortController: AbortController | undefined","abortHandler","throttleMs: number | undefined","debounceMs: number | undefined","context: PipelineContext<T[K], any>","context: PipelineContext<T[K], R>","executionError: Error | undefined","handlerResults: Array<{\n id: string;\n executed: boolean;\n duration?: number;\n result?: R;\n error?: Error;\n metadata?: Record<string, any>;\n }>","errors: Array<{\n handlerId: string;\n error: Error;\n timestamp: number;\n }>","executionResult: ExecutionResult<R>","handlers: HandlerRegistration<T[K], any>[]","filterOptions?: import('./types.js').DispatchOptions['filter']","context: PipelineContext<any, R>","resultOptions?: import('./types.js').DispatchOptions['result']","autoAbortController?: AbortController","autoAbortOptions?: { allowHandlerAbort?: boolean }","_registration: HandlerRegistration<T[K], any>","_index: number","reason?: string","modifier: (payload: T[K]) => T[K]","priority: number","result: any","merger: (previousResults: any[], currentResult: any) => any","executedHandlers: HandlerRegistration<T[K], any>[]","success: boolean","duration: number","tag: string","category: string","mode: ExecutionMode"],"sources":["../src/execution-modes.ts","../../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/typeof.js","../../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js","../../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js","../../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js","../src/action-guard.ts","../src/ActionRegister.ts"],"sourcesContent":["/**\n * @fileoverview Execution mode implementations for ActionRegister\n * Provides different execution strategies for action pipelines\n */\n\nimport type { \n HandlerRegistration, \n PipelineContext, \n PipelineController\n} from './types.js';\n\n/**\n * Execute handlers in sequential mode (one after another)\n */\nexport async function executeSequential<T, R = void>(\n context: PipelineContext<T, R>,\n createController: (registration: HandlerRegistration<T, R>, index: number) => PipelineController<T, R>\n): Promise<void> {\n\n let i = 0;\n \n while (i < context.handlers.length) {\n // Check for abort or termination\n if (context.aborted || context.terminated) {\n break;\n }\n\n const registration = context.handlers[i];\n context.currentIndex = i;\n\n /** Check condition if provided */\n if (registration.config.condition && !registration.config.condition()) {\n i++;\n continue;\n }\n\n /** Check validation if provided */\n if (registration.config.validation && !registration.config.validation(context.payload)) {\n i++;\n continue;\n }\n\n const controller = createController(registration, i);\n\n try {\n // Check for abort before executing handler\n if (context.aborted) {\n break;\n }\n \n const result = registration.handler(context.payload, controller);\n\n /** Wait for async handlers if they're blocking */\n if (registration.config.blocking && result instanceof Promise) {\n const handlerResult = await result;\n \n /** Collect result if handler returned something and wasn't terminated */\n if (handlerResult !== undefined && !context.terminated) {\n context.results.push(handlerResult);\n }\n } else if (result !== undefined && !context.terminated) {\n /** Collect synchronous result */\n if (result instanceof Promise) {\n // Non-blocking async handler - don't wait but collect result when resolved\n result.then(asyncResult => {\n if (asyncResult !== undefined && !context.terminated) {\n context.results.push(asyncResult);\n }\n }).catch(() => {\n // Ignore errors from non-blocking handlers\n });\n } else {\n context.results.push(result);\n }\n }\n\n /** Check if pipeline was terminated by controller.return() */\n if (context.terminated) {\n break;\n }\n\n /** Handle jump to priority AFTER handler execution */\n if (context.jumpToPriority !== undefined) {\n const jumpIndex = context.handlers.findIndex(\n handler => handler.config.priority === context.jumpToPriority\n );\n \n if (jumpIndex !== -1) {\n // Jump to the target index directly (position movement)\n i = jumpIndex;\n context.jumpToPriority = undefined;\n continue; // Continue to execute the handler at jump destination\n } else {\n // Invalid jump target, clear and continue normally\n context.jumpToPriority = undefined;\n i++;\n }\n } else {\n // Normal progression to next handler\n i++;\n }\n\n } catch (error: any) {\n if (registration.config.blocking) {\n throw error;\n }\n // For non-blocking handlers, continue to next handler\n i++;\n }\n }\n}\n\n/**\n * Execute handlers in parallel mode (all at once)\n */\nexport async function executeParallel<T, R = void>(\n context: PipelineContext<T, R>,\n createController: (registration: HandlerRegistration<T, R>, index: number) => PipelineController<T, R>\n): Promise<void> {\n\n /** Filter handlers that should run */\n const runnableHandlers = context.handlers.filter((registration, _index) => {\n /** Check condition */\n if (registration.config.condition && !registration.config.condition()) {\n return false;\n }\n\n /** Check validation */\n if (registration.config.validation && !registration.config.validation(context.payload)) {\n return false;\n }\n\n return true;\n });\n\n /** Create promises for all handlers */\n const handlerPromises = runnableHandlers.map(async (registration, _index) => {\n const controller = createController(registration, _index);\n \n try {\n const result = registration.handler(context.payload, controller);\n \n let handlerResult: R | undefined;\n if (result instanceof Promise) {\n handlerResult = await result;\n } else {\n handlerResult = result;\n }\n \n /** Collect result if handler returned something and pipeline wasn't terminated */\n if (handlerResult !== undefined && !context.terminated) {\n context.results.push(handlerResult);\n }\n \n return { \n success: true, \n handlerId: registration.id, \n result: handlerResult,\n terminated: context.terminated \n };\n \n } catch (error: any) {\n if (registration.config.blocking) {\n throw error;\n }\n \n return { success: false, handlerId: registration.id, error };\n }\n });\n\n /** Wait for all handlers to complete */\n const results = await Promise.allSettled(handlerPromises);\n \n /** Check for any rejected blocking handlers */\n const failures = results.filter((result, index) => {\n if (result.status === 'rejected') {\n const registration = runnableHandlers[index];\n return registration.config.blocking;\n }\n return false;\n });\n\n if (failures.length > 0) {\n const firstFailure = failures[0] as PromiseRejectedResult;\n throw firstFailure.reason;\n }\n\n /** Check if any handler terminated the pipeline */\n const terminatedResults = results.filter(result => \n result.status === 'fulfilled' && result.value.terminated\n );\n \n if (terminatedResults.length > 0) {\n context.terminated = true;\n // In parallel mode, we can't determine which handler's termination result to use,\n // so we use the first one that terminated\n const firstTerminated = terminatedResults[0] as PromiseFulfilledResult<any>;\n context.terminationResult = firstTerminated.value.result;\n }\n}\n\n/**\n * Execute handlers in race mode (first to complete wins)\n */\nexport async function executeRace<T, R = void>(\n context: PipelineContext<T, R>,\n createController: (registration: HandlerRegistration<T, R>, index: number) => PipelineController<T, R>\n): Promise<void> {\n\n /** Filter handlers that should run */\n const runnableHandlers = context.handlers.filter((registration, _index) => {\n /** Check condition */\n if (registration.config.condition && !registration.config.condition()) {\n return false;\n }\n\n /** Check validation */\n if (registration.config.validation && !registration.config.validation(context.payload)) {\n return false;\n }\n\n return true;\n });\n\n if (runnableHandlers.length === 0) {\n return;\n }\n\n /** Create promises for all handlers */\n const handlerPromises = runnableHandlers.map(async (registration, _index) => {\n const controller = createController(registration, _index);\n \n try {\n const result = registration.handler(context.payload, controller);\n \n let handlerResult: R | undefined;\n if (result instanceof Promise) {\n handlerResult = await result;\n } else {\n handlerResult = result;\n }\n \n return { \n success: true, \n handlerId: registration.id, \n registration,\n result: handlerResult,\n terminated: context.terminated\n };\n \n } catch (error: any) {\n return { success: false, handlerId: registration.id, error, registration };\n }\n });\n\n /** Race all handlers */\n const winner = await Promise.race(handlerPromises);\n\n /** If the winner failed and was blocking, throw the error */\n if (!winner.success && winner.registration?.config.blocking) {\n throw winner.error;\n }\n\n /** Collect result from the winning handler */\n if (winner.success && winner.result !== undefined) {\n context.results.push(winner.result);\n }\n\n /** Check if the winning handler terminated the pipeline */\n if (winner.success && winner.terminated) {\n context.terminated = true;\n context.terminationResult = winner.result;\n }\n}","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * @fileoverview Action Guard system for debouncing, throttling and blocking\n * Provides rate limiting and user experience optimization for actions\n */\n\n\n/**\n * Action guard state tracking for debouncing and throttling\n * @memberof core-concepts\n * @internal\n * @since 1.0.0\n * \n * Tracks timing and execution state for action execution control\n */\ninterface GuardState {\n /** Timestamp of last successful execution for throttling calculations */\n lastExecuted: number;\n \n /** Active debounce timer - cleared when new debounce requests arrive */\n debounceTimer?: NodeJS.Timeout;\n \n /** Active throttle timer - tracks when throttle period will end */\n throttleTimer?: NodeJS.Timeout;\n \n /** Flag indicating if action is currently in throttled state */\n isThrottled: boolean;\n}\n\n/**\n * Action Guard system for managing action execution timing\n * @implements action-guard\n * @implements performance-optimization \n * @implements user-experience-optimization\n * @implements class-naming\n * @memberof core-concepts\n * @internal\n * @since 1.0.0\n * \n * Manages action execution timing through debouncing and throttling\n * @implements performance-optimization\n * \n * @example\n * ```typescript\n * const guard = new ActionGuard(logger);\n * \n * // Debounce search input (wait 300ms after typing stops)\n * if (await guard.debounce('search', 300)) {\n * executeSearch(); \n * }\n * \n * // Throttle scroll handler (max once per 100ms)\n * if (guard.throttle('scroll', 100)) {\n * updateScrollPosition();\n * }\n * ```\n */\nexport class ActionGuard {\n private guards = new Map<string, GuardState>();\n\n constructor() {\n // ActionGuard without logger\n }\n\n /**\n * Check if action should be debounced\n * @param actionKey - Unique key for the action\n * @param debounceMs - Debounce delay in milliseconds\n * @returns Promise that resolves when debounce period is complete\n */\n async debounce(actionKey: string, debounceMs: number): Promise<boolean> {\n\n /** Get or create guard state for this action */\n let state = this.guards.get(actionKey);\n if (!state) {\n /** Initialize new guard state with default values */\n state = {\n lastExecuted: 0,\n isThrottled: false\n };\n this.guards.set(actionKey, state);\n }\n\n /** Clear any existing debounce timer to restart the delay period */\n /** This implements the \"debounce\" behavior where rapid calls reset the timer */\n if (state.debounceTimer) {\n clearTimeout(state.debounceTimer);\n }\n\n /** Create new debounce promise that resolves after the delay period */\n /** The promise will only resolve if no new debounce requests arrive */\n return new Promise((resolve) => {\n state!.debounceTimer = setTimeout(() => {\n /** Clean up timer reference to prevent memory leaks */\n state!.debounceTimer = undefined;\n /** Update last execution timestamp for throttling calculations */\n state!.lastExecuted = Date.now();\n resolve(true);\n }, debounceMs);\n \n });\n }\n\n /**\n * Check if action should be throttled\n * @param actionKey - Unique key for the action\n * @param throttleMs - Throttle delay in milliseconds\n * @returns True if action should proceed, false if throttled\n */\n throttle(actionKey: string, throttleMs: number): boolean {\n\n /** Get or create guard state for this action */\n let state = this.guards.get(actionKey);\n if (!state) {\n /** Initialize new guard state with default values */\n state = {\n lastExecuted: 0,\n isThrottled: false\n };\n this.guards.set(actionKey, state);\n }\n\n const now = Date.now();\n const timeSinceLastExecution = now - state.lastExecuted;\n\n /** Check if enough time has passed since last execution */\n /** If throttle period has elapsed, allow immediate execution */\n if (timeSinceLastExecution >= throttleMs) {\n /** Update execution timestamp and clear throttled state */\n state.lastExecuted = now;\n state.isThrottled = false;\n \n \n return true;\n }\n\n /** If already in throttled state, don't create duplicate timers */\n /** This prevents timer accumulation and unnecessary processing */\n if (state.isThrottled) {\n return false;\n }\n\n /** Set throttle timer to automatically clear the throttled state */\n /** Calculate remaining time until throttle period expires */\n state.isThrottled = true;\n const remainingTime = throttleMs - timeSinceLastExecution;\n \n /** Create timer to reset throttled state when period expires */\n state.throttleTimer = setTimeout(() => {\n /** Clear throttled state and timer reference */\n state!.isThrottled = false;\n state!.throttleTimer = undefined;\n }, remainingTime);\n\n\n return false;\n }\n\n /**\n * Clear all guards for an action\n * @param actionKey - Action key to clear\n */\n clearGuards(actionKey: string): void {\n \n const state = this.guards.get(actionKey);\n if (state) {\n /** Clear debounce timer if active to prevent memory leaks */\n if (state.debounceTimer) {\n clearTimeout(state.debounceTimer);\n }\n /** Clear throttle timer if active to prevent memory leaks */\n if (state.throttleTimer) {\n clearTimeout(state.throttleTimer);\n }\n /** Remove guard state from memory */\n this.guards.delete(actionKey);\n \n }\n }\n\n /**\n * Clear all guards\n */\n clearAll(): void {\n \n /** Iterate through all guard states and clear their timers */\n /** This prevents memory leaks when clearing the entire guard system */\n for (const [, state] of this.guards) {\n /** Clear any active debounce timers */\n if (state.debounceTimer) {\n clearTimeout(state.debounceTimer);\n }\n /** Clear any active throttle timers */\n if (state.throttleTimer) {\n clearTimeout(state.throttleTimer);\n }\n }\n \n /** Remove all guard states from memory */\n this.guards.clear();\n }\n\n /**\n * Get current guard state for debugging\n * @param actionKey - Action key to inspect\n */\n getGuardState(actionKey: string): GuardState | undefined {\n return this.guards.get(actionKey);\n }\n\n /**\n * Get all active guards for debugging\n */\n getAllGuardStates(): Map<string, GuardState> {\n return new Map(this.guards);\n }\n}","\nimport {\n ActionPayloadMap,\n ActionHandler,\n HandlerConfig,\n HandlerRegistration,\n PipelineContext,\n PipelineController,\n ActionRegisterConfig,\n UnregisterFunction,\n ExecutionMode,\n ExecutionResult,\n ActionRegistryInfo,\n ActionHandlerStats,\n} from './types.js';\nimport { executeSequential, executeParallel, executeRace } from './execution-modes.js';\nimport { ActionGuard } from './action-guard.js';\n\n/**\n * 중앙화된 액션 등록 및 디스패치 시스템으로, 타입 안전한 액션 파이프라인 관리를 제공하는 핵심 클래스입니다.\n * \n * @implements {ActionRegister}\n * @implements {Action Pipeline System}\n * @memberof core-concepts\n * \n * @example\n * ```typescript\n * interface AppActions extends ActionPayloadMap {\n * updateUser: { id: string; name: string };\n * calculateTotal: void;\n * }\n * \n * const register = new ActionRegister<AppActions>({\n * name: 'AppRegister',\n * logLevel: LogLevel.DEBUG\n * });\n * \n * // 핸들러 등록\n * register.register('updateUser', ({ id, name }, controller) => {\n * userStore.setValue({ id, name });\n * // 핸들러가 자동으로 다음 핸들러로 진행\n * }, { priority: 10 });\n * \n * // 액션 디스패치\n * await register.dispatch('updateUser', { id: '1', name: 'John' });\n * ```\n */\nexport class ActionRegister<T extends ActionPayloadMap = ActionPayloadMap> {\n private pipelines = new Map<keyof T, HandlerRegistration<any, any>[]>();\n private handlerCounter = 0;\n private readonly actionGuard: ActionGuard;\n private executionMode: ExecutionMode = 'sequential';\n private actionExecutionModes = new Map<keyof T, ExecutionMode>();\n public readonly name: string;\n private readonly registryConfig: ActionRegisterConfig['registry'];\n private executionStats = new Map<keyof T, {\n totalExecutions: number;\n totalDuration: number;\n successCount: number;\n errorCount: number;\n }>();\n\n constructor(config: ActionRegisterConfig = {}) {\n this.name = config.name || 'ActionRegister';\n this.registryConfig = config.registry;\n this.actionGuard = new ActionGuard();\n \n if (this.registryConfig?.defaultExecutionMode) {\n this.executionMode = this.registryConfig.defaultExecutionMode;\n }\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 ActionRegister created: ${this.name}`, {\n defaultExecutionMode: this.executionMode,\n maxHandlers: this.registryConfig.maxHandlers,\n autoCleanup: this.registryConfig.autoCleanup ?? true\n });\n }\n }\n\n register<K extends keyof T, R = void>(\n action: K,\n handler: ActionHandler<T[K], R>,\n config: HandlerConfig = {}\n ): UnregisterFunction {\n \n // Generate unique handler ID with security consideration\n // Use counter + random suffix to prevent ID prediction attacks\n const handlerId = config.id || `handler_${++this.handlerCounter}_${Math.random().toString(36).substr(2, 5)}`;\n \n // Create handler registration with defaults\n const registration: HandlerRegistration<T[K], R> = {\n handler,\n config: {\n // Existing fields\n priority: config.priority ?? 0,\n id: handlerId,\n blocking: config.blocking ?? false,\n once: config.once ?? false,\n condition: config.condition || (() => true),\n debounce: config.debounce ?? undefined,\n throttle: config.throttle ?? undefined,\n validation: config.validation ?? undefined,\n middleware: config.middleware ?? false,\n \n // New metadata fields\n tags: config.tags ?? [],\n category: config.category ?? undefined,\n description: config.description ?? undefined,\n version: config.version ?? undefined,\n returnType: config.returnType ?? 'value',\n timeout: config.timeout ?? undefined,\n retries: config.retries ?? 0,\n dependencies: config.dependencies ?? [],\n conflicts: config.conflicts ?? [],\n environment: config.environment ?? undefined,\n feature: config.feature ?? undefined,\n metrics: config.metrics ?? {\n collectTiming: false,\n collectErrors: false,\n customMetrics: {}\n },\n metadata: config.metadata ?? {},\n } as Required<HandlerConfig>,\n id: handlerId,\n };\n \n // Initialize pipeline if it doesn't exist\n if (!this.pipelines.has(action)) {\n this.pipelines.set(action, []);\n }\n\n const pipeline = this.pipelines.get(action)!;\n \n // Check for duplicate handler IDs and prevent duplicate registration\n const existingIndex = pipeline.findIndex(reg => reg.id === handlerId);\n if (existingIndex !== -1) {\n // Return a no-op unregister function for the duplicate\n return () => {};\n }\n \n // Check maximum handlers limit\n if (this.registryConfig?.maxHandlers && pipeline.length >= this.registryConfig.maxHandlers) {\n throw new Error(\n `Maximum number of handlers (${this.registryConfig.maxHandlers}) reached for action '${String(action)}' in registry '${this.name}'`\n );\n }\n\n // Add handler to pipeline\n pipeline.push(registration);\n \n // Sort pipeline by priority (highest first)\n pipeline.sort((a, b) => b.config.priority - a.config.priority);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Handler registered: ${String(action)}`, {\n handlerId,\n priority: config.priority,\n tags: config.tags,\n category: config.category,\n totalHandlers: pipeline.length,\n registry: this.name\n });\n }\n\n // Return unregister function that removes this specific registration\n return () => {\n const index = pipeline.findIndex((reg) => reg.id === handlerId && reg === registration);\n if (index !== -1) {\n pipeline.splice(index, 1);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Handler unregistered: ${String(action)}`, {\n handlerId,\n remainingHandlers: pipeline.length,\n registry: this.name\n });\n }\n }\n };\n }\n\n async dispatch<K extends keyof T>(\n action: K,\n payload?: T[K],\n options?: import('./types.js').DispatchOptions\n ): Promise<void> {\n // Auto-abort: Create AbortController if enabled\n let autoAbortController: AbortController | undefined;\n let effectiveSignal = options?.signal;\n \n if (options?.autoAbort?.enabled) {\n autoAbortController = new AbortController();\n effectiveSignal = autoAbortController.signal;\n \n // Provide access to the created controller\n if (options.autoAbort.onControllerCreated) {\n options.autoAbort.onControllerCreated(autoAbortController);\n }\n \n // If original signal exists, link them together\n if (options?.signal) {\n const originalSignal = options.signal;\n if (originalSignal.aborted) {\n autoAbortController.abort();\n } else {\n const abortHandler = () => autoAbortController!.abort();\n originalSignal.addEventListener('abort', abortHandler, { once: true });\n }\n }\n }\n \n // Check if dispatch is aborted before starting\n if (effectiveSignal?.aborted) {\n return;\n }\n \n const pipeline = this.pipelines.get(action);\n if (!pipeline || pipeline.length === 0) {\n return;\n }\n\n // Apply handler filtering first\n const filteredHandlers = this.filterHandlers([...pipeline], options?.filter);\n\n // Apply ActionGuard controls - check both dispatch options and handler configs\n const actionKey = String(action);\n \n // Get throttle/debounce settings from dispatch options or handler configs\n let throttleMs: number | undefined;\n let debounceMs: number | undefined;\n \n // Priority: dispatch options > handler config\n if (options?.throttle !== undefined) {\n throttleMs = options.throttle;\n } else if (filteredHandlers.length > 0) {\n // Use throttle from the first handler that has it (handlers are sorted by priority)\n for (const handler of filteredHandlers) {\n if (handler.config.throttle !== undefined) {\n throttleMs = handler.config.throttle;\n break;\n }\n }\n }\n \n if (options?.debounce !== undefined) {\n debounceMs = options.debounce;\n } else if (filteredHandlers.length > 0) {\n // Use debounce from the first handler that has it (handlers are sorted by priority)\n for (const handler of filteredHandlers) {\n if (handler.config.debounce !== undefined) {\n debounceMs = handler.config.debounce;\n break;\n }\n }\n }\n \n // Apply debounce if specified\n if (debounceMs !== undefined) {\n const shouldProceed = await this.actionGuard.debounce(actionKey, debounceMs);\n if (!shouldProceed) {\n return; // Debounced - don't execute\n }\n }\n \n // Apply throttle if specified\n if (throttleMs !== undefined) {\n const shouldProceed = this.actionGuard.throttle(actionKey, throttleMs);\n if (!shouldProceed) {\n return; // Throttled - don't execute\n }\n }\n\n // Determine execution mode for this action (with option override)\n const currentExecutionMode = options?.executionMode || \n this.actionExecutionModes.get(action) || \n this.executionMode;\n\n // Create pipeline execution context\n const context: PipelineContext<T[K], any> = {\n action: String(action),\n payload: payload as T[K],\n handlers: filteredHandlers, // Use filtered handlers\n aborted: false,\n abortReason: undefined,\n currentIndex: 0,\n jumpToPriority: undefined,\n executionMode: currentExecutionMode,\n \n // New result collection fields\n results: [],\n terminated: false,\n terminationResult: undefined,\n };\n\n const startTime = Date.now();\n let executionSuccess = true;\n \n // Add abort listener if signal provided (use effectiveSignal for auto-abort)\n const abortHandler = effectiveSignal ? () => {\n context.aborted = true;\n context.abortReason = 'Action dispatch aborted by signal';\n } : undefined;\n \n if (effectiveSignal && abortHandler) {\n effectiveSignal.addEventListener('abort', abortHandler);\n }\n \n try {\n await this.executePipeline(context, autoAbortController, options?.autoAbort);\n } catch (error) {\n executionSuccess = false;\n throw error;\n } finally {\n // Clean up abort listener\n if (effectiveSignal && abortHandler) {\n effectiveSignal.removeEventListener('abort', abortHandler);\n }\n // Track execution statistics\n const duration = Date.now() - startTime;\n this.updateExecutionStats(action, executionSuccess, duration);\n }\n }\n\n async dispatchWithResult<K extends keyof T, R = void>(\n action: K,\n payload?: T[K],\n options?: import('./types.js').DispatchOptions\n ): Promise<ExecutionResult<R>> {\n const startTime = Date.now();\n \n // Auto-abort: Create AbortController if enabled (same as dispatch)\n let autoAbortController: AbortController | undefined;\n let effectiveSignal = options?.signal;\n \n if (options?.autoAbort?.enabled) {\n autoAbortController = new AbortController();\n effectiveSignal = autoAbortController.signal;\n \n // Provide access to the created controller\n if (options.autoAbort.onControllerCreated) {\n options.autoAbort.onControllerCreated(autoAbortController);\n }\n \n // If original signal exists, link them together\n if (options?.signal) {\n const originalSignal = options.signal;\n if (originalSignal.aborted) {\n autoAbortController.abort();\n } else {\n const abortHandler = () => autoAbortController!.abort();\n originalSignal.addEventListener('abort', abortHandler, { once: true });\n }\n }\n }\n \n // Check if dispatch is aborted before starting\n if (effectiveSignal?.aborted) {\n return {\n success: false,\n aborted: true,\n abortReason: 'Action dispatch aborted by signal',\n terminated: false,\n result: undefined,\n results: [],\n execution: {\n duration: 0,\n handlersExecuted: 0,\n handlersSkipped: 0,\n handlersFailed: 0,\n startTime,\n endTime: startTime,\n },\n handlers: [],\n errors: [],\n };\n }\n \n const pipeline = this.pipelines.get(action);\n \n if (!pipeline || pipeline.length === 0) {\n return {\n success: true,\n aborted: false,\n terminated: false,\n result: undefined,\n results: [],\n execution: {\n duration: 0,\n handlersExecuted: 0,\n handlersSkipped: 0,\n handlersFailed: 0,\n startTime,\n endTime: startTime,\n },\n handlers: [],\n errors: [],\n };\n }\n\n // Apply handler filtering first\n const filteredHandlers = this.filterHandlers([...pipeline], options?.filter);\n\n // Apply ActionGuard controls - check both dispatch options and handler configs\n const actionKey = String(action);\n \n // Get throttle/debounce settings from dispatch options or handler configs\n let throttleMs: number | undefined;\n let debounceMs: number | undefined;\n \n // Priority: dispatch options > handler config\n if (options?.throttle !== undefined) {\n throttleMs = options.throttle;\n } else if (filteredHandlers.length > 0) {\n // Use throttle from the first handler that has it (handlers are sorted by priority)\n for (const handler of filteredHandlers) {\n if (handler.config.throttle !== undefined) {\n throttleMs = handler.config.throttle;\n break;\n }\n }\n }\n \n if (options?.debounce !== undefined) {\n debounceMs = options.debounce;\n } else if (filteredHandlers.length > 0) {\n // Use debounce from the first handler that has it (handlers are sorted by priority)\n for (const handler of filteredHandlers) {\n if (handler.config.debounce !== undefined) {\n debounceMs = handler.config.debounce;\n break;\n }\n }\n }\n \n // Apply debounce if specified\n if (debounceMs !== undefined) {\n const shouldProceed = await this.actionGuard.debounce(actionKey, debounceMs);\n if (!shouldProceed) {\n return {\n success: false,\n aborted: true,\n abortReason: 'Debounced execution',\n terminated: false,\n result: undefined,\n results: [],\n execution: {\n duration: Date.now() - startTime,\n handlersExecuted: 0,\n handlersSkipped: pipeline.length,\n handlersFailed: 0,\n startTime,\n endTime: Date.now(),\n },\n handlers: [],\n errors: [],\n };\n }\n }\n \n // Apply throttle if specified\n if (throttleMs !== undefined) {\n const shouldProceed = this.actionGuard.throttle(actionKey, throttleMs);\n if (!shouldProceed) {\n return {\n success: false,\n aborted: true,\n abortReason: 'Throttled execution',\n terminated: false,\n result: undefined,\n results: [],\n execution: {\n duration: Date.now() - startTime,\n handlersExecuted: 0,\n handlersSkipped: pipeline.length,\n handlersFailed: 0,\n startTime,\n endTime: Date.now(),\n },\n handlers: [],\n errors: [],\n };\n }\n }\n\n // Determine execution mode for this action (with option override)\n const currentExecutionMode = options?.executionMode || \n this.actionExecutionModes.get(action) || \n this.executionMode;\n\n // Create pipeline execution context\n const context: PipelineContext<T[K], R> = {\n action: String(action),\n payload: payload as T[K],\n handlers: filteredHandlers,\n aborted: false,\n abortReason: undefined,\n currentIndex: 0,\n jumpToPriority: undefined,\n executionMode: currentExecutionMode,\n \n // Result collection fields\n results: [],\n terminated: false,\n terminationResult: undefined,\n };\n\n let executionError: Error | undefined;\n const handlerResults: Array<{\n id: string;\n executed: boolean;\n duration?: number;\n result?: R;\n error?: Error;\n metadata?: Record<string, any>;\n }> = [];\n\n const errors: Array<{\n handlerId: string;\n error: Error;\n timestamp: number;\n }> = [];\n\n // Add abort listener if signal provided (use effectiveSignal for auto-abort)\n const abortHandler = effectiveSignal ? () => {\n context.aborted = true;\n context.abortReason = 'Action dispatch aborted by signal';\n } : undefined;\n \n if (effectiveSignal && abortHandler) {\n effectiveSignal.addEventListener('abort', abortHandler);\n }\n \n try {\n await this.executePipeline(context, autoAbortController, options?.autoAbort);\n } catch (error) {\n executionError = error instanceof Error ? error : new Error(String(error));\n errors.push({\n handlerId: 'pipeline',\n error: executionError,\n timestamp: Date.now(),\n });\n } finally {\n // Clean up abort listener\n if (effectiveSignal && abortHandler) {\n effectiveSignal.removeEventListener('abort', abortHandler);\n }\n }\n\n const endTime = Date.now();\n const executionSuccess = !executionError && !context.aborted;\n \n // Track execution statistics\n this.updateExecutionStats(action, executionSuccess, endTime - startTime);\n\n // Process results based on options\n const processedResult = this.processResults(context, options?.result);\n\n // Build execution result\n const executionResult: ExecutionResult<R> = {\n success: !executionError && !context.aborted,\n aborted: context.aborted,\n abortReason: context.abortReason,\n terminated: context.terminated,\n result: processedResult,\n results: context.results,\n execution: {\n duration: endTime - startTime,\n handlersExecuted: context.currentIndex + (context.aborted ? 0 : 1),\n handlersSkipped: Math.max(0, filteredHandlers.length - (context.currentIndex + 1)),\n handlersFailed: errors.length,\n startTime,\n endTime,\n },\n handlers: handlerResults,\n errors,\n };\n\n /** Clean up one-time handlers after execution */\n this.cleanupOneTimeHandlers(action, context.handlers);\n\n return executionResult;\n }\n\n private filterHandlers<K extends keyof T>(\n handlers: HandlerRegistration<T[K], any>[],\n filterOptions?: import('./types.js').DispatchOptions['filter']\n ): HandlerRegistration<T[K], any>[] {\n if (!filterOptions) {\n return handlers;\n }\n\n return handlers.filter(registration => {\n const config = registration.config;\n\n // Check include filters\n if (filterOptions.tags && filterOptions.tags.length > 0) {\n const hasMatchingTag = filterOptions.tags.some(tag => config.tags.includes(tag));\n if (!hasMatchingTag) return false;\n }\n\n if (filterOptions.category && config.category !== filterOptions.category) {\n return false;\n }\n\n if (filterOptions.handlerIds && filterOptions.handlerIds.length > 0) {\n if (!filterOptions.handlerIds.includes(config.id)) {\n return false;\n }\n }\n\n if (filterOptions.environment && config.environment !== filterOptions.environment) {\n return false;\n }\n\n if (filterOptions.feature && config.feature !== filterOptions.feature) {\n return false;\n }\n\n // Check exclude filters\n if (filterOptions.excludeTags && filterOptions.excludeTags.length > 0) {\n const hasExcludedTag = filterOptions.excludeTags.some(tag => config.tags.includes(tag));\n if (hasExcludedTag) return false;\n }\n\n if (filterOptions.excludeCategory && config.category === filterOptions.excludeCategory) {\n return false;\n }\n\n if (filterOptions.excludeHandlerIds && filterOptions.excludeHandlerIds.length > 0) {\n if (filterOptions.excludeHandlerIds.includes(config.id)) {\n return false;\n }\n }\n\n // Custom filter\n if (filterOptions.custom && !filterOptions.custom(config)) {\n return false;\n }\n\n return true;\n });\n }\n\n private processResults<R>(\n context: PipelineContext<any, R>,\n resultOptions?: import('./types.js').DispatchOptions['result']\n ): R | undefined {\n if (!resultOptions || !resultOptions.collect) {\n return undefined;\n }\n\n const results = context.results;\n \n // Handle termination result\n if (context.terminated && context.terminationResult !== undefined) {\n return context.terminationResult;\n }\n\n // Apply maxResults limit\n const limitedResults = resultOptions.maxResults \n ? results.slice(0, resultOptions.maxResults)\n : results;\n\n if (limitedResults.length === 0) {\n return undefined;\n }\n\n // Process results based on strategy\n switch (resultOptions.strategy) {\n case 'first':\n return limitedResults[0];\n case 'last':\n return limitedResults[limitedResults.length - 1];\n case 'all':\n return limitedResults as unknown as R;\n case 'merge':\n if (resultOptions.merger) {\n return resultOptions.merger(limitedResults);\n }\n // Default merge: return last result\n return limitedResults[limitedResults.length - 1];\n case 'custom':\n if (resultOptions.merger) {\n return resultOptions.merger(limitedResults);\n }\n throw new Error('Custom result strategy requires a merger function');\n default:\n // Default: return all results\n return limitedResults as unknown as R;\n }\n }\n\n private async executePipeline<K extends keyof T>(\n context: PipelineContext<T[K], any>, \n autoAbortController?: AbortController,\n autoAbortOptions?: { allowHandlerAbort?: boolean }\n ): Promise<void> {\n const createController = (_registration: HandlerRegistration<T[K], any>, _index: number): PipelineController<T[K], any> => {\n return {\n abort: (reason?: string) => {\n context.aborted = true;\n context.abortReason = reason;\n \n // Auto-abort: Handler can trigger pipeline abort if enabled\n if (autoAbortController && autoAbortOptions?.allowHandlerAbort) {\n autoAbortController.abort(reason);\n }\n },\n modifyPayload: (modifier: (payload: T[K]) => T[K]) => {\n context.payload = modifier(context.payload);\n },\n getPayload: () => context.payload,\n jumpToPriority: (priority: number) => {\n context.jumpToPriority = priority;\n },\n return: (result: any) => {\n context.terminated = true;\n context.terminationResult = result;\n },\n setResult: (result: any) => {\n context.results.push(result);\n },\n getResults: () => {\n return [...context.results];\n },\n mergeResult: (merger: (previousResults: any[], currentResult: any) => any) => {\n const currentResult = context.results[context.results.length - 1];\n const previousResults = context.results.slice(0, -1);\n const mergedResult = merger(previousResults, currentResult);\n context.results[context.results.length - 1] = mergedResult;\n },\n };\n };\n\n switch (context.executionMode) {\n case 'sequential':\n await executeSequential<T[K], any>(context, createController);\n break;\n case 'parallel':\n await executeParallel<T[K], any>(context, createController);\n break;\n case 'race':\n await executeRace<T[K], any>(context, createController);\n break;\n default:\n throw new Error(`Unknown execution mode: ${context.executionMode}`);\n }\n\n this.cleanupOneTimeHandlers(context.action as K, context.handlers);\n }\n\n private cleanupOneTimeHandlers<K extends keyof T>(action: K, executedHandlers: HandlerRegistration<T[K], any>[]): void {\n const pipeline = this.pipelines.get(action);\n if (!pipeline) return;\n\n const oneTimeHandlers = executedHandlers.filter(reg => reg.config.once);\n if (oneTimeHandlers.length === 0) return;\n\n oneTimeHandlers.forEach(registration => {\n const index = pipeline.findIndex(reg => reg.id === registration.id);\n if (index !== -1) {\n pipeline.splice(index, 1);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 One-time handler removed: ${String(action)}`, {\n handlerId: registration.id,\n remainingHandlers: pipeline.length,\n registry: this.name\n });\n }\n }\n });\n }\n\n /**\n * Update execution statistics for an action\n * \n * @param action Action name\n * @param success Whether execution was successful\n * @param duration Execution duration in milliseconds\n */\n private updateExecutionStats<K extends keyof T>(action: K, success: boolean, duration: number): void {\n if (!this.executionStats.has(action)) {\n this.executionStats.set(action, {\n totalExecutions: 0,\n totalDuration: 0,\n successCount: 0,\n errorCount: 0,\n });\n }\n\n const stats = this.executionStats.get(action)!;\n stats.totalExecutions++;\n stats.totalDuration += duration;\n \n if (success) {\n stats.successCount++;\n } else {\n stats.errorCount++;\n }\n }\n\n getHandlerCount<K extends keyof T>(action: K): number {\n const pipeline = this.pipelines.get(action);\n return pipeline ? pipeline.length : 0;\n }\n\n hasHandlers<K extends keyof T>(action: K): boolean {\n return this.getHandlerCount(action) > 0;\n }\n\n getRegisteredActions(): (keyof T)[] {\n return Array.from(this.pipelines.keys());\n }\n\n clearAction<K extends keyof T>(action: K): void {\n this.pipelines.delete(action);\n }\n\n clearAll(): void {\n this.pipelines.clear();\n }\n\n getName(): string {\n return this.name;\n }\n\n /**\n * Get comprehensive registry information (similar to DeclarativeStoreRegistry pattern)\n * \n * @returns Registry information including actions, handlers, and execution modes\n */\n getRegistryInfo(): ActionRegistryInfo<T> {\n const totalHandlers = Array.from(this.pipelines.values()).reduce(\n (total, pipeline) => total + pipeline.length, \n 0\n );\n \n return {\n name: this.name,\n totalActions: this.pipelines.size,\n totalHandlers,\n registeredActions: Array.from(this.pipelines.keys()),\n actionExecutionModes: new Map(this.actionExecutionModes),\n defaultExecutionMode: this.executionMode,\n };\n }\n\n /**\n * Get detailed statistics for a specific action\n * \n * @param action Action name to get statistics for\n * @returns Detailed handler statistics\n */\n getActionStats<K extends keyof T>(action: K): ActionHandlerStats<T> | null {\n const pipeline = this.pipelines.get(action);\n if (!pipeline) {\n return null;\n }\n\n // Group handlers by priority\n const priorityMap = new Map<number, typeof pipeline>();\n pipeline.forEach(handler => {\n if (!priorityMap.has(handler.config.priority)) {\n priorityMap.set(handler.config.priority, []);\n }\n priorityMap.get(handler.config.priority)!.push(handler);\n });\n\n const handlersByPriority = Array.from(priorityMap.entries())\n .sort(([a], [b]) => b - a) // Sort by priority (highest first)\n .map(([priority, handlers]) => ({\n priority,\n handlers: handlers.map(h => ({\n id: h.config.id,\n tags: h.config.tags,\n category: h.config.category,\n description: h.config.description,\n version: h.config.version,\n }))\n }));\n\n // Get execution statistics if available\n const stats = this.executionStats.get(action);\n const executionStats = stats ? {\n totalExecutions: stats.totalExecutions,\n averageDuration: stats.totalExecutions > 0 ? stats.totalDuration / stats.totalExecutions : 0,\n successRate: stats.totalExecutions > 0 ? (stats.successCount / stats.totalExecutions) * 100 : 0,\n errorCount: stats.errorCount,\n } : undefined;\n\n return {\n action,\n handlerCount: pipeline.length,\n handlersByPriority,\n executionStats,\n };\n }\n\n /**\n * Get statistics for all registered actions\n * \n * @returns Array of statistics for all actions\n */\n getAllActionStats(): Array<ActionHandlerStats<T>> {\n return Array.from(this.pipelines.keys())\n .map(action => this.getActionStats(action))\n .filter((stats): stats is ActionHandlerStats<T> => stats !== null);\n }\n\n /**\n * Get handlers by tag across all actions\n * \n * @param tag Tag to filter handlers by\n * @returns Map of actions to handlers with the specified tag\n */\n getHandlersByTag(tag: string): Map<keyof T, HandlerRegistration<any, any>[]> {\n const result = new Map<keyof T, HandlerRegistration<any, any>[]>();\n \n for (const [action, pipeline] of this.pipelines.entries()) {\n const matchingHandlers = pipeline.filter(handler => \n handler.config.tags.includes(tag)\n );\n \n if (matchingHandlers.length > 0) {\n result.set(action, matchingHandlers);\n }\n }\n \n return result;\n }\n\n /**\n * Get handlers by category across all actions\n * \n * @param category Category to filter handlers by\n * @returns Map of actions to handlers with the specified category\n */\n getHandlersByCategory(category: string): Map<keyof T, HandlerRegistration<any, any>[]> {\n const result = new Map<keyof T, HandlerRegistration<any, any>[]>();\n \n for (const [action, pipeline] of this.pipelines.entries()) {\n const matchingHandlers = pipeline.filter(handler => \n handler.config.category === category\n );\n \n if (matchingHandlers.length > 0) {\n result.set(action, matchingHandlers);\n }\n }\n \n return result;\n }\n\n /**\n * Set execution mode for a specific action\n * \n * @param action Action name\n * @param mode Execution mode to set\n */\n setActionExecutionMode<K extends keyof T>(action: K, mode: ExecutionMode): void {\n this.actionExecutionModes.set(action, mode);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Execution mode set for action '${String(action)}': ${mode}`);\n }\n }\n\n /**\n * Get execution mode for a specific action\n * \n * @param action Action name\n * @returns Execution mode for the action, or default if not set\n */\n getActionExecutionMode<K extends keyof T>(action: K): ExecutionMode {\n return this.actionExecutionModes.get(action) || this.executionMode;\n }\n\n /**\n * Remove execution mode override for a specific action\n * \n * @param action Action name\n */\n removeActionExecutionMode<K extends keyof T>(action: K): void {\n this.actionExecutionModes.delete(action);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Execution mode reset for action '${String(action)}' to default: ${this.executionMode}`);\n }\n }\n\n /**\n * Clear execution statistics for all actions\n */\n clearExecutionStats(): void {\n this.executionStats.clear();\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Execution statistics cleared for registry: ${this.name}`);\n }\n }\n\n /**\n * Clear execution statistics for a specific action\n * \n * @param action Action name\n */\n clearActionExecutionStats<K extends keyof T>(action: K): void {\n this.executionStats.delete(action);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Execution statistics cleared for action: ${String(action)}`);\n }\n }\n\n /**\n * Get registry configuration (for debugging and inspection)\n * \n * @returns Current registry configuration\n */\n getRegistryConfig(): ActionRegisterConfig['registry'] {\n return this.registryConfig;\n }\n\n /**\n * Check if registry has debug mode enabled\n * \n * @returns Whether debug mode is enabled\n */\n isDebugEnabled(): boolean {\n return Boolean(this.registryConfig?.debug && process.env.NODE_ENV === 'development');\n }\n}"],"x_google_ignoreList":[1,2,3,4],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["context: PipelineContext<T, R>","createController: (registration: HandlerRegistration<T, R>, index: number) => PipelineController<T, R>","error: any","handlerResult: R | undefined","_typeof","o","_typeof","toPrimitive","toPropertyKey","_defineProperty","actionKey: string","debounceMs: number","throttleMs: number","name: string","operation: () => T | Promise<T>","priority: number","queuedOperation: QueuedOperation<T>","config: ActionRegisterConfig","action: K","handler: ActionHandler<T[K], R>","config: HandlerConfig","handlerId: string","registration: HandlerRegistration<T[K], R>","payload?: T[K]","options?: import('./types.js').DispatchOptions","autoAbortController: AbortController | undefined","abortHandler","throttleMs: number | undefined","debounceMs: number | undefined","context: PipelineContext<T[K], any>","context: PipelineContext<T[K], R>","executionError: Error | undefined","handlerResults: Array<{\n id: string;\n executed: boolean;\n duration?: number;\n result?: R;\n error?: Error;\n metadata?: Record<string, any>;\n }>","errors: Array<{\n handlerId: string;\n error: Error;\n timestamp: number;\n }>","executionResult: ExecutionResult<R>","handlers: HandlerRegistration<T[K], any>[]","filterOptions?: import('./types.js').DispatchOptions['filter']","context: PipelineContext<any, R>","resultOptions?: import('./types.js').DispatchOptions['result']","autoAbortController?: AbortController","autoAbortOptions?: { allowHandlerAbort?: boolean }","_registration: HandlerRegistration<T[K], any>","_index: number","reason?: string","modifier: (payload: T[K]) => T[K]","priority: number","result: any","merger: (previousResults: any[], currentResult: any) => any","executedHandlers: HandlerRegistration<T[K], any>[]","success: boolean","duration: number","tag: string","category: string","mode: ExecutionMode"],"sources":["../src/execution-modes.ts","../../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/typeof.js","../../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js","../../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js","../../../node_modules/.pnpm/@oxc-project+runtime@0.81.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js","../src/action-guard.ts","../src/concurrency/OperationQueue.ts","../src/ActionRegister.ts"],"sourcesContent":["/**\n * @fileoverview Execution mode implementations for ActionRegister\n * Provides different execution strategies for action pipelines\n */\n\nimport type { \n HandlerRegistration, \n PipelineContext, \n PipelineController\n} from './types.js';\n\n/**\n * Execute handlers in sequential mode (one after another)\n */\nexport async function executeSequential<T, R = void>(\n context: PipelineContext<T, R>,\n createController: (registration: HandlerRegistration<T, R>, index: number) => PipelineController<T, R>\n): Promise<void> {\n\n let i = 0;\n \n while (i < context.handlers.length) {\n // Check for abort or termination\n if (context.aborted || context.terminated) {\n break;\n }\n\n const registration = context.handlers[i];\n context.currentIndex = i;\n\n /** Check condition if provided */\n if (registration.config.condition && !registration.config.condition()) {\n i++;\n continue;\n }\n\n /** Check validation if provided */\n if (registration.config.validation && !registration.config.validation(context.payload)) {\n i++;\n continue;\n }\n\n const controller = createController(registration, i);\n\n try {\n // Check for abort before executing handler\n if (context.aborted) {\n break;\n }\n \n const result = registration.handler(context.payload, controller);\n\n /** Wait for async handlers if they're blocking */\n if (registration.config.blocking && result instanceof Promise) {\n const handlerResult = await result;\n \n /** Collect result if handler returned something and wasn't terminated */\n if (handlerResult !== undefined && !context.terminated) {\n context.results.push(handlerResult);\n }\n } else if (result !== undefined && !context.terminated) {\n /** Collect synchronous result */\n if (result instanceof Promise) {\n // Non-blocking async handler - don't wait but collect result when resolved\n result.then(asyncResult => {\n if (asyncResult !== undefined && !context.terminated) {\n context.results.push(asyncResult);\n }\n }).catch(() => {\n // Ignore errors from non-blocking handlers\n });\n } else {\n context.results.push(result);\n }\n }\n\n /** Check if pipeline was terminated by controller.return() */\n if (context.terminated) {\n break;\n }\n\n /** Handle jump to priority AFTER handler execution */\n if (context.jumpToPriority !== undefined) {\n const jumpIndex = context.handlers.findIndex(\n handler => handler.config.priority === context.jumpToPriority\n );\n \n if (jumpIndex !== -1) {\n // Jump to the target index directly (position movement)\n i = jumpIndex;\n context.jumpToPriority = undefined;\n continue; // Continue to execute the handler at jump destination\n } else {\n // Invalid jump target, clear and continue normally\n context.jumpToPriority = undefined;\n i++;\n }\n } else {\n // Normal progression to next handler\n i++;\n }\n\n } catch (error: any) {\n if (registration.config.blocking) {\n throw error;\n }\n // For non-blocking handlers, continue to next handler\n i++;\n }\n }\n}\n\n/**\n * Execute handlers in parallel mode (all at once)\n */\nexport async function executeParallel<T, R = void>(\n context: PipelineContext<T, R>,\n createController: (registration: HandlerRegistration<T, R>, index: number) => PipelineController<T, R>\n): Promise<void> {\n\n /** Filter handlers that should run */\n const runnableHandlers = context.handlers.filter((registration, _index) => {\n /** Check condition */\n if (registration.config.condition && !registration.config.condition()) {\n return false;\n }\n\n /** Check validation */\n if (registration.config.validation && !registration.config.validation(context.payload)) {\n return false;\n }\n\n return true;\n });\n\n /** Create promises for all handlers */\n const handlerPromises = runnableHandlers.map(async (registration, _index) => {\n const controller = createController(registration, _index);\n \n try {\n const result = registration.handler(context.payload, controller);\n \n let handlerResult: R | undefined;\n if (result instanceof Promise) {\n handlerResult = await result;\n } else {\n handlerResult = result;\n }\n \n /** Collect result if handler returned something and pipeline wasn't terminated */\n if (handlerResult !== undefined && !context.terminated) {\n context.results.push(handlerResult);\n }\n \n return { \n success: true, \n handlerId: registration.id, \n result: handlerResult,\n terminated: context.terminated \n };\n \n } catch (error: any) {\n if (registration.config.blocking) {\n throw error;\n }\n \n return { success: false, handlerId: registration.id, error };\n }\n });\n\n /** Wait for all handlers to complete */\n const results = await Promise.allSettled(handlerPromises);\n \n /** Check for any rejected blocking handlers */\n const failures = results.filter((result, index) => {\n if (result.status === 'rejected') {\n const registration = runnableHandlers[index];\n return registration.config.blocking;\n }\n return false;\n });\n\n if (failures.length > 0) {\n const firstFailure = failures[0] as PromiseRejectedResult;\n throw firstFailure.reason;\n }\n\n /** Check if any handler terminated the pipeline */\n const terminatedResults = results.filter(result => \n result.status === 'fulfilled' && result.value.terminated\n );\n \n if (terminatedResults.length > 0) {\n context.terminated = true;\n // In parallel mode, we can't determine which handler's termination result to use,\n // so we use the first one that terminated\n const firstTerminated = terminatedResults[0] as PromiseFulfilledResult<any>;\n context.terminationResult = firstTerminated.value.result;\n }\n}\n\n/**\n * Execute handlers in race mode (first to complete wins)\n */\nexport async function executeRace<T, R = void>(\n context: PipelineContext<T, R>,\n createController: (registration: HandlerRegistration<T, R>, index: number) => PipelineController<T, R>\n): Promise<void> {\n\n /** Filter handlers that should run */\n const runnableHandlers = context.handlers.filter((registration, _index) => {\n /** Check condition */\n if (registration.config.condition && !registration.config.condition()) {\n return false;\n }\n\n /** Check validation */\n if (registration.config.validation && !registration.config.validation(context.payload)) {\n return false;\n }\n\n return true;\n });\n\n if (runnableHandlers.length === 0) {\n return;\n }\n\n /** Create promises for all handlers */\n const handlerPromises = runnableHandlers.map(async (registration, _index) => {\n const controller = createController(registration, _index);\n \n try {\n const result = registration.handler(context.payload, controller);\n \n let handlerResult: R | undefined;\n if (result instanceof Promise) {\n handlerResult = await result;\n } else {\n handlerResult = result;\n }\n \n return { \n success: true, \n handlerId: registration.id, \n registration,\n result: handlerResult,\n terminated: context.terminated\n };\n \n } catch (error: any) {\n return { success: false, handlerId: registration.id, error, registration };\n }\n });\n\n /** Race all handlers */\n const winner = await Promise.race(handlerPromises);\n\n /** If the winner failed and was blocking, throw the error */\n if (!winner.success && winner.registration?.config.blocking) {\n throw winner.error;\n }\n\n /** Collect result from the winning handler */\n if (winner.success && winner.result !== undefined) {\n context.results.push(winner.result);\n }\n\n /** Check if the winning handler terminated the pipeline */\n if (winner.success && winner.terminated) {\n context.terminated = true;\n context.terminationResult = winner.result;\n }\n}","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * @fileoverview Action Guard system for debouncing, throttling and blocking\n * Provides rate limiting and user experience optimization for actions\n */\n\n\n/**\n * Action guard state tracking for debouncing and throttling\n * @memberof core-concepts\n * @internal\n * @since 1.0.0\n * \n * Tracks timing and execution state for action execution control\n */\ninterface GuardState {\n /** Timestamp of last successful execution for throttling calculations */\n lastExecuted: number;\n \n /** Active debounce timer - cleared when new debounce requests arrive */\n debounceTimer?: NodeJS.Timeout;\n \n /** Active throttle timer - tracks when throttle period will end */\n throttleTimer?: NodeJS.Timeout;\n \n /** Flag indicating if action is currently in throttled state */\n isThrottled: boolean;\n \n /** Current debounce promise - reused for concurrent calls */\n debouncePromise?: Promise<boolean>;\n \n /** Resolve function for current debounce promise */\n debounceResolve?: (value: boolean) => void;\n}\n\n/**\n * Action Guard system for managing action execution timing\n * @implements action-guard\n * @implements performance-optimization \n * @implements user-experience-optimization\n * @implements class-naming\n * @memberof core-concepts\n * @internal\n * @since 1.0.0\n * \n * Manages action execution timing through debouncing and throttling\n * @implements performance-optimization\n * \n * @example\n * ```typescript\n * const guard = new ActionGuard(logger);\n * \n * // Debounce search input (wait 300ms after typing stops)\n * if (await guard.debounce('search', 300)) {\n * executeSearch(); \n * }\n * \n * // Throttle scroll handler (max once per 100ms)\n * if (guard.throttle('scroll', 100)) {\n * updateScrollPosition();\n * }\n * ```\n */\nexport class ActionGuard {\n private guards = new Map<string, GuardState>();\n\n constructor() {\n // ActionGuard without logger\n }\n\n /**\n * Check if action should be debounced\n * @param actionKey - Unique key for the action\n * @param debounceMs - Debounce delay in milliseconds\n * @returns Promise that resolves when debounce period is complete\n */\n async debounce(actionKey: string, debounceMs: number): Promise<boolean> {\n\n /** Get or create guard state for this action */\n let state = this.guards.get(actionKey);\n if (!state) {\n /** Initialize new guard state with default values */\n state = {\n lastExecuted: 0,\n isThrottled: false\n };\n this.guards.set(actionKey, state);\n }\n\n /** Clear any existing debounce timer to restart the delay period */\n if (state.debounceTimer) {\n clearTimeout(state.debounceTimer);\n // 이전 debounce resolve 함수가 있으면 false로 해결\n if (state.debounceResolve) {\n state.debounceResolve(false);\n state.debounceResolve = undefined;\n }\n }\n\n /** Create new debounce promise */\n return new Promise<boolean>((resolve) => {\n // 새로운 resolve 함수 저장\n state!.debounceResolve = resolve;\n \n // 새 타이머 설정\n state!.debounceTimer = setTimeout(() => {\n /** Clean up timer and resolver references */\n state!.debounceTimer = undefined;\n state!.debounceResolve = undefined;\n /** Update last execution timestamp */\n state!.lastExecuted = Date.now();\n resolve(true);\n }, debounceMs);\n });\n }\n\n /**\n * Check if action should be throttled\n * @param actionKey - Unique key for the action\n * @param throttleMs - Throttle delay in milliseconds\n * @returns True if action should proceed, false if throttled\n */\n throttle(actionKey: string, throttleMs: number): boolean {\n\n /** Get or create guard state for this action */\n let state = this.guards.get(actionKey);\n if (!state) {\n /** Initialize new guard state with default values */\n state = {\n lastExecuted: 0,\n isThrottled: false\n };\n this.guards.set(actionKey, state);\n }\n\n const now = Date.now();\n const timeSinceLastExecution = now - state.lastExecuted;\n\n /** Check if enough time has passed since last execution */\n /** If throttle period has elapsed, allow immediate execution */\n if (timeSinceLastExecution >= throttleMs) {\n /** Update execution timestamp and clear throttled state */\n state.lastExecuted = now;\n state.isThrottled = false;\n \n \n return true;\n }\n\n /** If already in throttled state, don't create duplicate timers */\n /** This prevents timer accumulation and unnecessary processing */\n if (state.isThrottled) {\n return false;\n }\n\n /** Set throttle timer to automatically clear the throttled state */\n /** Calculate remaining time until throttle period expires */\n state.isThrottled = true;\n const remainingTime = throttleMs - timeSinceLastExecution;\n \n /** Create timer to reset throttled state when period expires */\n state.throttleTimer = setTimeout(() => {\n /** Clear throttled state and timer reference */\n state!.isThrottled = false;\n state!.throttleTimer = undefined;\n }, remainingTime);\n\n\n return false;\n }\n\n /**\n * Clear all guards for an action\n * @param actionKey - Action key to clear\n */\n clearGuards(actionKey: string): void {\n \n const state = this.guards.get(actionKey);\n if (state) {\n /** Clear debounce timer if active to prevent memory leaks */\n if (state.debounceTimer) {\n clearTimeout(state.debounceTimer);\n // 대기 중인 debounce 호출들을 취소로 해제\n if (state.debounceResolve) {\n state.debounceResolve(false);\n }\n }\n /** Clear throttle timer if active to prevent memory leaks */\n if (state.throttleTimer) {\n clearTimeout(state.throttleTimer);\n }\n /** Remove guard state from memory */\n this.guards.delete(actionKey);\n \n }\n }\n\n /**\n * Clear all guards\n */\n clearAll(): void {\n \n /** Iterate through all guard states and clear their timers */\n /** This prevents memory leaks when clearing the entire guard system */\n for (const [, state] of this.guards) {\n /** Clear any active debounce timers */\n if (state.debounceTimer) {\n clearTimeout(state.debounceTimer);\n // 대기 중인 debounce 호출들을 취소로 해제\n if (state.debounceResolve) {\n state.debounceResolve(false);\n }\n }\n /** Clear any active throttle timers */\n if (state.throttleTimer) {\n clearTimeout(state.throttleTimer);\n }\n }\n \n /** Remove all guard states from memory */\n this.guards.clear();\n }\n\n /**\n * Get current guard state for debugging\n * @param actionKey - Action key to inspect\n */\n getGuardState(actionKey: string): GuardState | undefined {\n return this.guards.get(actionKey);\n }\n\n /**\n * Get all active guards for debugging\n */\n getAllGuardStates(): Map<string, GuardState> {\n return new Map(this.guards);\n }\n}","/**\n * 동시성 문제 해결을 위한 작업 큐 시스템\n * \n * 모든 상태 변경 작업을 직렬화하여 race condition을 방지합니다.\n */\n\nexport interface QueuedOperation<T = any> {\n id: string;\n operation: () => T | Promise<T>;\n resolve: (value: T) => void;\n reject: (error: any) => void;\n priority?: number;\n timestamp: number;\n}\n\n/**\n * 작업 큐 관리자\n * \n * 핵심 기능:\n * 1. 작업 직렬화 - 모든 작업을 순서대로 실행\n * 2. 우선순위 지원 - 중요한 작업 우선 처리\n * 3. 에러 처리 - 개별 작업 실패가 전체에 영향 주지 않음\n * 4. 메모리 관리 - 완료된 작업 자동 정리\n */\nexport class OperationQueue {\n private queue: QueuedOperation[] = [];\n private isProcessing = false;\n private operationCounter = 0;\n \n constructor(private name: string = 'OperationQueue') {}\n\n /**\n * 작업을 큐에 추가하고 실행 결과를 반환\n * \n * @param operation 실행할 작업\n * @param priority 우선순위 (높을수록 먼저 실행)\n * @returns Promise로 래핑된 작업 결과\n */\n enqueue<T>(operation: () => T | Promise<T>, priority: number = 0): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const queuedOperation: QueuedOperation<T> = {\n id: `${this.name}-${++this.operationCounter}`,\n operation,\n resolve,\n reject,\n priority,\n timestamp: Date.now()\n };\n\n // 우선순위에 따라 삽입 위치 결정\n let insertIndex = this.queue.length;\n for (let i = 0; i < this.queue.length; i++) {\n if ((this.queue[i].priority || 0) < priority) {\n insertIndex = i;\n break;\n }\n }\n\n this.queue.splice(insertIndex, 0, queuedOperation);\n \n // 큐 처리 시작 (이미 처리 중이면 무시됨)\n this.processQueue();\n });\n }\n\n /**\n * 큐 처리 메인 로직\n * \n * 한 번에 하나씩 순서대로 작업을 실행하여 동시성 문제 방지\n */\n private async processQueue(): Promise<void> {\n // 이미 처리 중이거나 큐가 비어있으면 종료\n if (this.isProcessing || this.queue.length === 0) {\n return;\n }\n\n this.isProcessing = true;\n\n try {\n while (this.queue.length > 0) {\n const operation = this.queue.shift()!;\n \n try {\n // 작업 실행 (동기/비동기 모두 지원)\n const result = await Promise.resolve(operation.operation());\n operation.resolve(result);\n } catch (error) {\n // 개별 작업 실패는 전체 큐에 영향 주지 않음\n operation.reject(error);\n }\n }\n } finally {\n this.isProcessing = false;\n }\n }\n\n /**\n * 현재 큐 상태 조회 (디버깅용)\n */\n getQueueInfo() {\n return {\n name: this.name,\n queueLength: this.queue.length,\n isProcessing: this.isProcessing,\n operations: this.queue.map(op => ({\n id: op.id,\n priority: op.priority,\n timestamp: op.timestamp\n }))\n };\n }\n\n /**\n * 큐 비우기 (테스트용)\n */\n clear(): void {\n // 대기 중인 작업들에게 취소 알림\n this.queue.forEach(operation => {\n operation.reject(new Error('Queue cleared'));\n });\n \n this.queue = [];\n this.isProcessing = false;\n }\n\n /**\n * 큐 크기 조회\n */\n get size(): number {\n return this.queue.length;\n }\n\n /**\n * 처리 중 여부 조회 \n */\n get processing(): boolean {\n return this.isProcessing;\n }\n}","\nimport {\n ActionPayloadMap,\n ActionHandler,\n HandlerConfig,\n HandlerRegistration,\n PipelineContext,\n PipelineController,\n ActionRegisterConfig,\n UnregisterFunction,\n ExecutionMode,\n ExecutionResult,\n ActionRegistryInfo,\n ActionHandlerStats,\n} from './types.js';\nimport { executeSequential, executeParallel, executeRace } from './execution-modes.js';\nimport { ActionGuard } from './action-guard.js';\nimport { OperationQueue } from './concurrency/OperationQueue.js';\n\n/**\n * 중앙화된 액션 등록 및 디스패치 시스템으로, 타입 안전한 액션 파이프라인 관리를 제공하는 핵심 클래스입니다.\n * \n * @implements {ActionRegister}\n * @implements {Action Pipeline System}\n * @memberof core-concepts\n * \n * @example\n * ```typescript\n * interface AppActions extends ActionPayloadMap {\n * updateUser: { id: string; name: string };\n * calculateTotal: void;\n * }\n * \n * const register = new ActionRegister<AppActions>({\n * name: 'AppRegister',\n * logLevel: LogLevel.DEBUG\n * });\n * \n * // 핸들러 등록\n * register.register('updateUser', ({ id, name }, controller) => {\n * userStore.setValue({ id, name });\n * // 핸들러가 자동으로 다음 핸들러로 진행\n * }, { priority: 10 });\n * \n * // 액션 디스패치\n * await register.dispatch('updateUser', { id: '1', name: 'John' });\n * ```\n */\nexport class ActionRegister<T extends ActionPayloadMap = ActionPayloadMap> {\n private pipelines = new Map<keyof T, HandlerRegistration<any, any>[]>();\n private handlerCounter = 0;\n private readonly actionGuard: ActionGuard;\n private executionMode: ExecutionMode = 'sequential';\n private actionExecutionModes = new Map<keyof T, ExecutionMode>();\n public readonly name: string;\n private readonly registryConfig: ActionRegisterConfig['registry'];\n private executionStats = new Map<keyof T, {\n totalExecutions: number;\n totalDuration: number;\n successCount: number;\n errorCount: number;\n }>();\n\n // 🆕 동시성 문제 해결을 위한 큐 시스템\n private registrationQueue: OperationQueue;\n private dispatchQueue: OperationQueue;\n\n constructor(config: ActionRegisterConfig = {}) {\n this.name = config.name || 'ActionRegister';\n this.registryConfig = config.registry;\n this.actionGuard = new ActionGuard();\n \n // 🆕 큐 시스템 초기화\n this.registrationQueue = new OperationQueue(`${this.name}-Registration`);\n this.dispatchQueue = new OperationQueue(`${this.name}-Dispatch`);\n \n if (this.registryConfig?.defaultExecutionMode) {\n this.executionMode = this.registryConfig.defaultExecutionMode;\n }\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 ActionRegister created: ${this.name}`, {\n defaultExecutionMode: this.executionMode,\n maxHandlers: this.registryConfig.maxHandlers,\n autoCleanup: this.registryConfig.autoCleanup ?? true,\n concurrencyProtection: true // 🆕 동시성 보호 활성화\n });\n }\n }\n\n register<K extends keyof T, R = void>(\n action: K,\n handler: ActionHandler<T[K], R>,\n config: HandlerConfig = {}\n ): UnregisterFunction {\n // 🔄 임시로 기존 구현 유지하되 개선된 방식 적용\n // 동기적 API를 유지하면서 내부적으로만 동시성 보호\n \n // Generate unique handler ID with security consideration\n const handlerId = config.id || `handler_${++this.handlerCounter}_${Math.random().toString(36).substr(2, 5)}`;\n \n // 🆕 즉시 등록 수행하되 정렬까지 한 번에 처리\n const unregisterFn = this._performRegistrationSync(action, handler, config, handlerId);\n \n return unregisterFn;\n }\n\n /**\n * 🆕 동기적 등록 수행 (개선된 버전)\n */\n private _performRegistrationSync<K extends keyof T, R = void>(\n action: K,\n handler: ActionHandler<T[K], R>,\n config: HandlerConfig,\n handlerId: string\n ): UnregisterFunction {\n // Create handler registration with defaults\n const registration: HandlerRegistration<T[K], R> = {\n handler,\n config: {\n // Existing fields\n priority: config.priority ?? 0,\n id: handlerId,\n blocking: config.blocking ?? false,\n once: config.once ?? false,\n condition: config.condition || (() => true),\n debounce: config.debounce ?? undefined,\n throttle: config.throttle ?? undefined,\n validation: config.validation ?? undefined,\n middleware: config.middleware ?? false,\n \n // New metadata fields\n tags: config.tags ?? [],\n category: config.category ?? undefined,\n description: config.description ?? undefined,\n version: config.version ?? undefined,\n returnType: config.returnType ?? 'value',\n timeout: config.timeout ?? undefined,\n retries: config.retries ?? 0,\n dependencies: config.dependencies ?? [],\n conflicts: config.conflicts ?? [],\n environment: config.environment ?? undefined,\n feature: config.feature ?? undefined,\n metrics: config.metrics ?? {\n collectTiming: false,\n collectErrors: false,\n customMetrics: {}\n },\n metadata: config.metadata ?? {},\n } as Required<HandlerConfig>,\n id: handlerId,\n };\n \n // Initialize pipeline if it doesn't exist\n if (!this.pipelines.has(action)) {\n this.pipelines.set(action, []);\n }\n\n const pipeline = this.pipelines.get(action)!;\n \n // Check for duplicate handler IDs and prevent duplicate registration\n const existingIndex = pipeline.findIndex(reg => reg.id === handlerId);\n if (existingIndex !== -1) {\n // Return a no-op unregister function for the duplicate\n return () => {};\n }\n \n // Check maximum handlers limit\n if (this.registryConfig?.maxHandlers && pipeline.length >= this.registryConfig.maxHandlers) {\n throw new Error(\n `Maximum number of handlers (${this.registryConfig.maxHandlers}) reached for action '${String(action)}' in registry '${this.name}'`\n );\n }\n\n // Add handler to pipeline\n pipeline.push(registration);\n \n // 🆕 즉시 정렬 (동시성 보호)\n pipeline.sort((a, b) => b.config.priority - a.config.priority);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Handler registered: ${String(action)}`, {\n handlerId,\n priority: config.priority,\n tags: config.tags,\n category: config.category,\n totalHandlers: pipeline.length,\n registry: this.name\n });\n }\n\n // Return unregister function that removes this specific registration\n return () => {\n const index = pipeline.findIndex((reg) => reg.id === handlerId && reg === registration);\n if (index !== -1) {\n pipeline.splice(index, 1);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Handler unregistered: ${String(action)}`, {\n handlerId,\n remainingHandlers: pipeline.length,\n registry: this.name\n });\n }\n }\n };\n }\n\n /**\n * 🆕 실제 등록 작업 수행 (큐에서 호출됨)\n */\n private _performRegistration<K extends keyof T, R = void>(\n action: K,\n handler: ActionHandler<T[K], R>,\n config: HandlerConfig,\n handlerId: string\n ): UnregisterFunction {\n // Create handler registration with defaults\n const registration: HandlerRegistration<T[K], R> = {\n handler,\n config: {\n // Existing fields\n priority: config.priority ?? 0,\n id: handlerId,\n blocking: config.blocking ?? false,\n once: config.once ?? false,\n condition: config.condition || (() => true),\n debounce: config.debounce ?? undefined,\n throttle: config.throttle ?? undefined,\n validation: config.validation ?? undefined,\n middleware: config.middleware ?? false,\n \n // New metadata fields\n tags: config.tags ?? [],\n category: config.category ?? undefined,\n description: config.description ?? undefined,\n version: config.version ?? undefined,\n returnType: config.returnType ?? 'value',\n timeout: config.timeout ?? undefined,\n retries: config.retries ?? 0,\n dependencies: config.dependencies ?? [],\n conflicts: config.conflicts ?? [],\n environment: config.environment ?? undefined,\n feature: config.feature ?? undefined,\n metrics: config.metrics ?? {\n collectTiming: false,\n collectErrors: false,\n customMetrics: {}\n },\n metadata: config.metadata ?? {},\n } as Required<HandlerConfig>,\n id: handlerId,\n };\n \n // Initialize pipeline if it doesn't exist\n if (!this.pipelines.has(action)) {\n this.pipelines.set(action, []);\n }\n\n const pipeline = this.pipelines.get(action)!;\n \n // Check for duplicate handler IDs and prevent duplicate registration\n const existingIndex = pipeline.findIndex(reg => reg.id === handlerId);\n if (existingIndex !== -1) {\n // Return a no-op unregister function for the duplicate\n return () => {};\n }\n \n // Check maximum handlers limit\n if (this.registryConfig?.maxHandlers && pipeline.length >= this.registryConfig.maxHandlers) {\n throw new Error(\n `Maximum number of handlers (${this.registryConfig.maxHandlers}) reached for action '${String(action)}' in registry '${this.name}'`\n );\n }\n\n // Add handler to pipeline\n pipeline.push(registration);\n \n // Sort pipeline by priority (highest first)\n pipeline.sort((a, b) => b.config.priority - a.config.priority);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Handler registered: ${String(action)}`, {\n handlerId,\n priority: config.priority,\n tags: config.tags,\n category: config.category,\n totalHandlers: pipeline.length,\n registry: this.name\n });\n }\n\n // Return unregister function that removes this specific registration\n return () => {\n const index = pipeline.findIndex((reg) => reg.id === handlerId && reg === registration);\n if (index !== -1) {\n pipeline.splice(index, 1);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Handler unregistered: ${String(action)}`, {\n handlerId,\n remainingHandlers: pipeline.length,\n registry: this.name\n });\n }\n }\n };\n }\n\n async dispatch<K extends keyof T>(\n action: K,\n payload?: T[K],\n options?: import('./types.js').DispatchOptions\n ): Promise<void> {\n // 🆕 디스패치를 큐에 추가하여 동시성 보호\n // 모든 디스패치가 순차적으로 실행되어 race condition 방지\n return this.dispatchQueue.enqueue(async () => {\n return this._performDispatch(action, payload, options);\n });\n }\n\n /**\n * 🆕 실제 디스패치 작업 수행 (큐에서 호출됨)\n */\n private async _performDispatch<K extends keyof T>(\n action: K,\n payload?: T[K],\n options?: import('./types.js').DispatchOptions\n ): Promise<void> {\n // Auto-abort: Create AbortController if enabled\n let autoAbortController: AbortController | undefined;\n let effectiveSignal = options?.signal;\n \n if (options?.autoAbort?.enabled) {\n autoAbortController = new AbortController();\n effectiveSignal = autoAbortController.signal;\n \n // Provide access to the created controller\n if (options.autoAbort.onControllerCreated) {\n options.autoAbort.onControllerCreated(autoAbortController);\n }\n \n // If original signal exists, link them together\n if (options?.signal) {\n const originalSignal = options.signal;\n if (originalSignal.aborted) {\n autoAbortController.abort();\n } else {\n const abortHandler = () => autoAbortController!.abort();\n originalSignal.addEventListener('abort', abortHandler, { once: true });\n }\n }\n }\n \n // Check if dispatch is aborted before starting\n if (effectiveSignal?.aborted) {\n return;\n }\n \n const pipeline = this.pipelines.get(action);\n if (!pipeline || pipeline.length === 0) {\n return;\n }\n\n // Apply handler filtering first\n const filteredHandlers = this.filterHandlers([...pipeline], options?.filter);\n\n // Apply ActionGuard controls - check both dispatch options and handler configs\n const actionKey = String(action);\n \n // Get throttle/debounce settings from dispatch options or handler configs\n let throttleMs: number | undefined;\n let debounceMs: number | undefined;\n \n // Priority: dispatch options > handler config\n if (options?.throttle !== undefined) {\n throttleMs = options.throttle;\n } else if (filteredHandlers.length > 0) {\n // Use throttle from the first handler that has it (handlers are sorted by priority)\n for (const handler of filteredHandlers) {\n if (handler.config.throttle !== undefined) {\n throttleMs = handler.config.throttle;\n break;\n }\n }\n }\n \n if (options?.debounce !== undefined) {\n debounceMs = options.debounce;\n } else if (filteredHandlers.length > 0) {\n // Use debounce from the first handler that has it (handlers are sorted by priority)\n for (const handler of filteredHandlers) {\n if (handler.config.debounce !== undefined) {\n debounceMs = handler.config.debounce;\n break;\n }\n }\n }\n \n // Apply debounce if specified\n if (debounceMs !== undefined) {\n const shouldProceed = await this.actionGuard.debounce(actionKey, debounceMs);\n if (!shouldProceed) {\n return; // Debounced - don't execute\n }\n }\n \n // Apply throttle if specified\n if (throttleMs !== undefined) {\n const shouldProceed = this.actionGuard.throttle(actionKey, throttleMs);\n if (!shouldProceed) {\n return; // Throttled - don't execute\n }\n }\n\n // Determine execution mode for this action (with option override)\n const currentExecutionMode = options?.executionMode || \n this.actionExecutionModes.get(action) || \n this.executionMode;\n\n // Create pipeline execution context\n const context: PipelineContext<T[K], any> = {\n action: String(action),\n payload: payload as T[K],\n handlers: filteredHandlers, // Use filtered handlers\n aborted: false,\n abortReason: undefined,\n currentIndex: 0,\n jumpToPriority: undefined,\n executionMode: currentExecutionMode,\n \n // New result collection fields\n results: [],\n terminated: false,\n terminationResult: undefined,\n };\n\n const startTime = Date.now();\n let executionSuccess = true;\n \n // Add abort listener if signal provided (use effectiveSignal for auto-abort)\n const abortHandler = effectiveSignal ? () => {\n context.aborted = true;\n context.abortReason = 'Action dispatch aborted by signal';\n } : undefined;\n \n if (effectiveSignal && abortHandler) {\n effectiveSignal.addEventListener('abort', abortHandler);\n }\n \n try {\n await this.executePipeline(context, autoAbortController, options?.autoAbort);\n } catch (error) {\n executionSuccess = false;\n throw error;\n } finally {\n // Clean up abort listener\n if (effectiveSignal && abortHandler) {\n effectiveSignal.removeEventListener('abort', abortHandler);\n }\n // Track execution statistics\n const duration = Date.now() - startTime;\n this.updateExecutionStats(action, executionSuccess, duration);\n }\n }\n\n async dispatchWithResult<K extends keyof T, R = void>(\n action: K,\n payload?: T[K],\n options?: import('./types.js').DispatchOptions\n ): Promise<ExecutionResult<R>> {\n const startTime = Date.now();\n \n // Auto-abort: Create AbortController if enabled (same as dispatch)\n let autoAbortController: AbortController | undefined;\n let effectiveSignal = options?.signal;\n \n if (options?.autoAbort?.enabled) {\n autoAbortController = new AbortController();\n effectiveSignal = autoAbortController.signal;\n \n // Provide access to the created controller\n if (options.autoAbort.onControllerCreated) {\n options.autoAbort.onControllerCreated(autoAbortController);\n }\n \n // If original signal exists, link them together\n if (options?.signal) {\n const originalSignal = options.signal;\n if (originalSignal.aborted) {\n autoAbortController.abort();\n } else {\n const abortHandler = () => autoAbortController!.abort();\n originalSignal.addEventListener('abort', abortHandler, { once: true });\n }\n }\n }\n \n // Check if dispatch is aborted before starting\n if (effectiveSignal?.aborted) {\n return {\n success: false,\n aborted: true,\n abortReason: 'Action dispatch aborted by signal',\n terminated: false,\n result: undefined,\n results: [],\n execution: {\n duration: 0,\n handlersExecuted: 0,\n handlersSkipped: 0,\n handlersFailed: 0,\n startTime,\n endTime: startTime,\n },\n handlers: [],\n errors: [],\n };\n }\n \n const pipeline = this.pipelines.get(action);\n \n if (!pipeline || pipeline.length === 0) {\n return {\n success: true,\n aborted: false,\n terminated: false,\n result: undefined,\n results: [],\n execution: {\n duration: 0,\n handlersExecuted: 0,\n handlersSkipped: 0,\n handlersFailed: 0,\n startTime,\n endTime: startTime,\n },\n handlers: [],\n errors: [],\n };\n }\n\n // Apply handler filtering first\n const filteredHandlers = this.filterHandlers([...pipeline], options?.filter);\n\n // Apply ActionGuard controls - check both dispatch options and handler configs\n const actionKey = String(action);\n \n // Get throttle/debounce settings from dispatch options or handler configs\n let throttleMs: number | undefined;\n let debounceMs: number | undefined;\n \n // Priority: dispatch options > handler config\n if (options?.throttle !== undefined) {\n throttleMs = options.throttle;\n } else if (filteredHandlers.length > 0) {\n // Use throttle from the first handler that has it (handlers are sorted by priority)\n for (const handler of filteredHandlers) {\n if (handler.config.throttle !== undefined) {\n throttleMs = handler.config.throttle;\n break;\n }\n }\n }\n \n if (options?.debounce !== undefined) {\n debounceMs = options.debounce;\n } else if (filteredHandlers.length > 0) {\n // Use debounce from the first handler that has it (handlers are sorted by priority)\n for (const handler of filteredHandlers) {\n if (handler.config.debounce !== undefined) {\n debounceMs = handler.config.debounce;\n break;\n }\n }\n }\n \n // Apply debounce if specified\n if (debounceMs !== undefined) {\n const shouldProceed = await this.actionGuard.debounce(actionKey, debounceMs);\n if (!shouldProceed) {\n return {\n success: false,\n aborted: true,\n abortReason: 'Debounced execution',\n terminated: false,\n result: undefined,\n results: [],\n execution: {\n duration: Date.now() - startTime,\n handlersExecuted: 0,\n handlersSkipped: pipeline.length,\n handlersFailed: 0,\n startTime,\n endTime: Date.now(),\n },\n handlers: [],\n errors: [],\n };\n }\n }\n \n // Apply throttle if specified\n if (throttleMs !== undefined) {\n const shouldProceed = this.actionGuard.throttle(actionKey, throttleMs);\n if (!shouldProceed) {\n return {\n success: false,\n aborted: true,\n abortReason: 'Throttled execution',\n terminated: false,\n result: undefined,\n results: [],\n execution: {\n duration: Date.now() - startTime,\n handlersExecuted: 0,\n handlersSkipped: pipeline.length,\n handlersFailed: 0,\n startTime,\n endTime: Date.now(),\n },\n handlers: [],\n errors: [],\n };\n }\n }\n\n // Determine execution mode for this action (with option override)\n const currentExecutionMode = options?.executionMode || \n this.actionExecutionModes.get(action) || \n this.executionMode;\n\n // Create pipeline execution context\n const context: PipelineContext<T[K], R> = {\n action: String(action),\n payload: payload as T[K],\n handlers: filteredHandlers,\n aborted: false,\n abortReason: undefined,\n currentIndex: 0,\n jumpToPriority: undefined,\n executionMode: currentExecutionMode,\n \n // Result collection fields\n results: [],\n terminated: false,\n terminationResult: undefined,\n };\n\n let executionError: Error | undefined;\n const handlerResults: Array<{\n id: string;\n executed: boolean;\n duration?: number;\n result?: R;\n error?: Error;\n metadata?: Record<string, any>;\n }> = [];\n\n const errors: Array<{\n handlerId: string;\n error: Error;\n timestamp: number;\n }> = [];\n\n // Add abort listener if signal provided (use effectiveSignal for auto-abort)\n const abortHandler = effectiveSignal ? () => {\n context.aborted = true;\n context.abortReason = 'Action dispatch aborted by signal';\n } : undefined;\n \n if (effectiveSignal && abortHandler) {\n effectiveSignal.addEventListener('abort', abortHandler);\n }\n \n try {\n await this.executePipeline(context, autoAbortController, options?.autoAbort);\n } catch (error) {\n executionError = error instanceof Error ? error : new Error(String(error));\n errors.push({\n handlerId: 'pipeline',\n error: executionError,\n timestamp: Date.now(),\n });\n } finally {\n // Clean up abort listener\n if (effectiveSignal && abortHandler) {\n effectiveSignal.removeEventListener('abort', abortHandler);\n }\n }\n\n const endTime = Date.now();\n const executionSuccess = !executionError && !context.aborted;\n \n // Track execution statistics\n this.updateExecutionStats(action, executionSuccess, endTime - startTime);\n\n // Process results based on options\n const processedResult = this.processResults(context, options?.result);\n\n // Build execution result\n const executionResult: ExecutionResult<R> = {\n success: !executionError && !context.aborted,\n aborted: context.aborted,\n abortReason: context.abortReason,\n terminated: context.terminated,\n result: processedResult,\n results: context.results,\n execution: {\n duration: endTime - startTime,\n handlersExecuted: context.currentIndex + (context.aborted ? 0 : 1),\n handlersSkipped: Math.max(0, filteredHandlers.length - (context.currentIndex + 1)),\n handlersFailed: errors.length,\n startTime,\n endTime,\n },\n handlers: handlerResults,\n errors,\n };\n\n /** Clean up one-time handlers after execution */\n this.cleanupOneTimeHandlers(action, context.handlers);\n\n return executionResult;\n }\n\n private filterHandlers<K extends keyof T>(\n handlers: HandlerRegistration<T[K], any>[],\n filterOptions?: import('./types.js').DispatchOptions['filter']\n ): HandlerRegistration<T[K], any>[] {\n if (!filterOptions) {\n return handlers;\n }\n\n return handlers.filter(registration => {\n const config = registration.config;\n\n // Check include filters\n if (filterOptions.tags && filterOptions.tags.length > 0) {\n const hasMatchingTag = filterOptions.tags.some(tag => config.tags.includes(tag));\n if (!hasMatchingTag) return false;\n }\n\n if (filterOptions.category && config.category !== filterOptions.category) {\n return false;\n }\n\n if (filterOptions.handlerIds && filterOptions.handlerIds.length > 0) {\n if (!filterOptions.handlerIds.includes(config.id)) {\n return false;\n }\n }\n\n if (filterOptions.environment && config.environment !== filterOptions.environment) {\n return false;\n }\n\n if (filterOptions.feature && config.feature !== filterOptions.feature) {\n return false;\n }\n\n // Check exclude filters\n if (filterOptions.excludeTags && filterOptions.excludeTags.length > 0) {\n const hasExcludedTag = filterOptions.excludeTags.some(tag => config.tags.includes(tag));\n if (hasExcludedTag) return false;\n }\n\n if (filterOptions.excludeCategory && config.category === filterOptions.excludeCategory) {\n return false;\n }\n\n if (filterOptions.excludeHandlerIds && filterOptions.excludeHandlerIds.length > 0) {\n if (filterOptions.excludeHandlerIds.includes(config.id)) {\n return false;\n }\n }\n\n // Custom filter\n if (filterOptions.custom && !filterOptions.custom(config)) {\n return false;\n }\n\n return true;\n });\n }\n\n private processResults<R>(\n context: PipelineContext<any, R>,\n resultOptions?: import('./types.js').DispatchOptions['result']\n ): R | undefined {\n if (!resultOptions || !resultOptions.collect) {\n return undefined;\n }\n\n const results = context.results;\n \n // Handle termination result\n if (context.terminated && context.terminationResult !== undefined) {\n return context.terminationResult;\n }\n\n // Apply maxResults limit\n const limitedResults = resultOptions.maxResults \n ? results.slice(0, resultOptions.maxResults)\n : results;\n\n if (limitedResults.length === 0) {\n return undefined;\n }\n\n // Process results based on strategy\n switch (resultOptions.strategy) {\n case 'first':\n return limitedResults[0];\n case 'last':\n return limitedResults[limitedResults.length - 1];\n case 'all':\n return limitedResults as unknown as R;\n case 'merge':\n if (resultOptions.merger) {\n return resultOptions.merger(limitedResults);\n }\n // Default merge: return last result\n return limitedResults[limitedResults.length - 1];\n case 'custom':\n if (resultOptions.merger) {\n return resultOptions.merger(limitedResults);\n }\n throw new Error('Custom result strategy requires a merger function');\n default:\n // Default: return all results\n return limitedResults as unknown as R;\n }\n }\n\n private async executePipeline<K extends keyof T>(\n context: PipelineContext<T[K], any>, \n autoAbortController?: AbortController,\n autoAbortOptions?: { allowHandlerAbort?: boolean }\n ): Promise<void> {\n const createController = (_registration: HandlerRegistration<T[K], any>, _index: number): PipelineController<T[K], any> => {\n return {\n abort: (reason?: string) => {\n context.aborted = true;\n context.abortReason = reason;\n \n // Auto-abort: Handler can trigger pipeline abort if enabled\n if (autoAbortController && autoAbortOptions?.allowHandlerAbort) {\n autoAbortController.abort(reason);\n }\n },\n modifyPayload: (modifier: (payload: T[K]) => T[K]) => {\n context.payload = modifier(context.payload);\n },\n getPayload: () => context.payload,\n jumpToPriority: (priority: number) => {\n context.jumpToPriority = priority;\n },\n return: (result: any) => {\n context.terminated = true;\n context.terminationResult = result;\n },\n setResult: (result: any) => {\n context.results.push(result);\n },\n getResults: () => {\n return [...context.results];\n },\n mergeResult: (merger: (previousResults: any[], currentResult: any) => any) => {\n const currentResult = context.results[context.results.length - 1];\n const previousResults = context.results.slice(0, -1);\n const mergedResult = merger(previousResults, currentResult);\n context.results[context.results.length - 1] = mergedResult;\n },\n };\n };\n\n switch (context.executionMode) {\n case 'sequential':\n await executeSequential<T[K], any>(context, createController);\n break;\n case 'parallel':\n await executeParallel<T[K], any>(context, createController);\n break;\n case 'race':\n await executeRace<T[K], any>(context, createController);\n break;\n default:\n throw new Error(`Unknown execution mode: ${context.executionMode}`);\n }\n\n this.cleanupOneTimeHandlers(context.action as K, context.handlers);\n }\n\n private cleanupOneTimeHandlers<K extends keyof T>(action: K, executedHandlers: HandlerRegistration<T[K], any>[]): void {\n const pipeline = this.pipelines.get(action);\n if (!pipeline) return;\n\n const oneTimeHandlers = executedHandlers.filter(reg => reg.config.once);\n if (oneTimeHandlers.length === 0) return;\n\n oneTimeHandlers.forEach(registration => {\n const index = pipeline.findIndex(reg => reg.id === registration.id);\n if (index !== -1) {\n pipeline.splice(index, 1);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 One-time handler removed: ${String(action)}`, {\n handlerId: registration.id,\n remainingHandlers: pipeline.length,\n registry: this.name\n });\n }\n }\n });\n }\n\n /**\n * Update execution statistics for an action\n * \n * @param action Action name\n * @param success Whether execution was successful\n * @param duration Execution duration in milliseconds\n */\n private updateExecutionStats<K extends keyof T>(action: K, success: boolean, duration: number): void {\n if (!this.executionStats.has(action)) {\n this.executionStats.set(action, {\n totalExecutions: 0,\n totalDuration: 0,\n successCount: 0,\n errorCount: 0,\n });\n }\n\n const stats = this.executionStats.get(action)!;\n stats.totalExecutions++;\n stats.totalDuration += duration;\n \n if (success) {\n stats.successCount++;\n } else {\n stats.errorCount++;\n }\n }\n\n getHandlerCount<K extends keyof T>(action: K): number {\n const pipeline = this.pipelines.get(action);\n return pipeline ? pipeline.length : 0;\n }\n\n hasHandlers<K extends keyof T>(action: K): boolean {\n return this.getHandlerCount(action) > 0;\n }\n\n getRegisteredActions(): (keyof T)[] {\n return Array.from(this.pipelines.keys());\n }\n\n clearAction<K extends keyof T>(action: K): void {\n this.pipelines.delete(action);\n }\n\n clearAll(): void {\n this.pipelines.clear();\n }\n\n getName(): string {\n return this.name;\n }\n\n /**\n * Get comprehensive registry information (similar to DeclarativeStoreRegistry pattern)\n * \n * @returns Registry information including actions, handlers, and execution modes\n */\n getRegistryInfo(): ActionRegistryInfo<T> {\n const totalHandlers = Array.from(this.pipelines.values()).reduce(\n (total, pipeline) => total + pipeline.length, \n 0\n );\n \n return {\n name: this.name,\n totalActions: this.pipelines.size,\n totalHandlers,\n registeredActions: Array.from(this.pipelines.keys()),\n actionExecutionModes: new Map(this.actionExecutionModes),\n defaultExecutionMode: this.executionMode,\n };\n }\n\n /**\n * Get detailed statistics for a specific action\n * \n * @param action Action name to get statistics for\n * @returns Detailed handler statistics\n */\n getActionStats<K extends keyof T>(action: K): ActionHandlerStats<T> | null {\n const pipeline = this.pipelines.get(action);\n if (!pipeline) {\n return null;\n }\n\n // Group handlers by priority\n const priorityMap = new Map<number, typeof pipeline>();\n pipeline.forEach(handler => {\n if (!priorityMap.has(handler.config.priority)) {\n priorityMap.set(handler.config.priority, []);\n }\n priorityMap.get(handler.config.priority)!.push(handler);\n });\n\n const handlersByPriority = Array.from(priorityMap.entries())\n .sort(([a], [b]) => b - a) // Sort by priority (highest first)\n .map(([priority, handlers]) => ({\n priority,\n handlers: handlers.map(h => ({\n id: h.config.id,\n tags: h.config.tags,\n category: h.config.category,\n description: h.config.description,\n version: h.config.version,\n }))\n }));\n\n // Get execution statistics if available\n const stats = this.executionStats.get(action);\n const executionStats = stats ? {\n totalExecutions: stats.totalExecutions,\n averageDuration: stats.totalExecutions > 0 ? stats.totalDuration / stats.totalExecutions : 0,\n successRate: stats.totalExecutions > 0 ? (stats.successCount / stats.totalExecutions) * 100 : 0,\n errorCount: stats.errorCount,\n } : undefined;\n\n return {\n action,\n handlerCount: pipeline.length,\n handlersByPriority,\n executionStats,\n };\n }\n\n /**\n * Get statistics for all registered actions\n * \n * @returns Array of statistics for all actions\n */\n getAllActionStats(): Array<ActionHandlerStats<T>> {\n return Array.from(this.pipelines.keys())\n .map(action => this.getActionStats(action))\n .filter((stats): stats is ActionHandlerStats<T> => stats !== null);\n }\n\n /**\n * Get handlers by tag across all actions\n * \n * @param tag Tag to filter handlers by\n * @returns Map of actions to handlers with the specified tag\n */\n getHandlersByTag(tag: string): Map<keyof T, HandlerRegistration<any, any>[]> {\n const result = new Map<keyof T, HandlerRegistration<any, any>[]>();\n \n for (const [action, pipeline] of this.pipelines.entries()) {\n const matchingHandlers = pipeline.filter(handler => \n handler.config.tags.includes(tag)\n );\n \n if (matchingHandlers.length > 0) {\n result.set(action, matchingHandlers);\n }\n }\n \n return result;\n }\n\n /**\n * Get handlers by category across all actions\n * \n * @param category Category to filter handlers by\n * @returns Map of actions to handlers with the specified category\n */\n getHandlersByCategory(category: string): Map<keyof T, HandlerRegistration<any, any>[]> {\n const result = new Map<keyof T, HandlerRegistration<any, any>[]>();\n \n for (const [action, pipeline] of this.pipelines.entries()) {\n const matchingHandlers = pipeline.filter(handler => \n handler.config.category === category\n );\n \n if (matchingHandlers.length > 0) {\n result.set(action, matchingHandlers);\n }\n }\n \n return result;\n }\n\n /**\n * Set execution mode for a specific action\n * \n * @param action Action name\n * @param mode Execution mode to set\n */\n setActionExecutionMode<K extends keyof T>(action: K, mode: ExecutionMode): void {\n this.actionExecutionModes.set(action, mode);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Execution mode set for action '${String(action)}': ${mode}`);\n }\n }\n\n /**\n * Get execution mode for a specific action\n * \n * @param action Action name\n * @returns Execution mode for the action, or default if not set\n */\n getActionExecutionMode<K extends keyof T>(action: K): ExecutionMode {\n return this.actionExecutionModes.get(action) || this.executionMode;\n }\n\n /**\n * Remove execution mode override for a specific action\n * \n * @param action Action name\n */\n removeActionExecutionMode<K extends keyof T>(action: K): void {\n this.actionExecutionModes.delete(action);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Execution mode reset for action '${String(action)}' to default: ${this.executionMode}`);\n }\n }\n\n /**\n * Clear execution statistics for all actions\n */\n clearExecutionStats(): void {\n this.executionStats.clear();\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Execution statistics cleared for registry: ${this.name}`);\n }\n }\n\n /**\n * Clear execution statistics for a specific action\n * \n * @param action Action name\n */\n clearActionExecutionStats<K extends keyof T>(action: K): void {\n this.executionStats.delete(action);\n \n if (this.registryConfig?.debug && process.env.NODE_ENV === 'development') {\n console.log(`🎯 Execution statistics cleared for action: ${String(action)}`);\n }\n }\n\n /**\n * Get registry configuration (for debugging and inspection)\n * \n * @returns Current registry configuration\n */\n getRegistryConfig(): ActionRegisterConfig['registry'] {\n return this.registryConfig;\n }\n\n /**\n * Check if registry has debug mode enabled\n * \n * @returns Whether debug mode is enabled\n */\n isDebugEnabled(): boolean {\n return Boolean(this.registryConfig?.debug && process.env.NODE_ENV === 'development');\n }\n}"],"x_google_ignoreList":[1,2,3,4],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@context-action/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Type-safe action pipeline management library for JavaScript/TypeScript",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -70,5 +70,6 @@
|
|
|
70
70
|
},
|
|
71
71
|
"engines": {
|
|
72
72
|
"node": ">=18.0.0"
|
|
73
|
-
}
|
|
73
|
+
},
|
|
74
|
+
"gitHead": "c53f3e0c755c8f81b5146e880b3e23b83c845e68"
|
|
74
75
|
}
|