@morojs/moro 1.6.8 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/core/auth/morojs-adapter.js +16 -6
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-sources.js +27 -15
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.js +201 -6
- package/dist/core/config/config-validator.js.map +1 -1
- package/dist/core/docs/openapi-generator.js +8 -9
- package/dist/core/docs/openapi-generator.js.map +1 -1
- package/dist/core/events/event-bus.js +1 -1
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/framework.d.ts +4 -2
- package/dist/core/framework.js +25 -24
- package/dist/core/framework.js.map +1 -1
- package/dist/core/graphql/core.js +34 -8
- package/dist/core/graphql/core.js.map +1 -1
- package/dist/core/grpc/adapters/grpc-js-adapter.d.ts +28 -0
- package/dist/core/grpc/adapters/grpc-js-adapter.js +449 -0
- package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -0
- package/dist/core/grpc/adapters/index.d.ts +1 -0
- package/dist/core/grpc/adapters/index.js +6 -0
- package/dist/core/grpc/adapters/index.js.map +1 -0
- package/dist/core/grpc/grpc-adapter.d.ts +47 -0
- package/dist/core/grpc/grpc-adapter.js +4 -0
- package/dist/core/grpc/grpc-adapter.js.map +1 -0
- package/dist/core/grpc/grpc-manager.d.ts +59 -0
- package/dist/core/grpc/grpc-manager.js +218 -0
- package/dist/core/grpc/grpc-manager.js.map +1 -0
- package/dist/core/grpc/index.d.ts +7 -0
- package/dist/core/grpc/index.js +10 -0
- package/dist/core/grpc/index.js.map +1 -0
- package/dist/core/grpc/middleware/auth.d.ts +22 -0
- package/dist/core/grpc/middleware/auth.js +126 -0
- package/dist/core/grpc/middleware/auth.js.map +1 -0
- package/dist/core/grpc/middleware/logging.d.ts +19 -0
- package/dist/core/grpc/middleware/logging.js +57 -0
- package/dist/core/grpc/middleware/logging.js.map +1 -0
- package/dist/core/grpc/middleware/validation.d.ts +18 -0
- package/dist/core/grpc/middleware/validation.js +126 -0
- package/dist/core/grpc/middleware/validation.js.map +1 -0
- package/dist/core/grpc/types.d.ts +233 -0
- package/dist/core/grpc/types.js +36 -0
- package/dist/core/grpc/types.js.map +1 -0
- package/dist/core/http/http-server.d.ts +13 -84
- package/dist/core/http/http-server.js +338 -792
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/http2-server.d.ts +131 -0
- package/dist/core/http/http2-server.js +936 -0
- package/dist/core/http/http2-server.js.map +1 -0
- package/dist/core/http/index.d.ts +3 -1
- package/dist/core/http/index.js +2 -1
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/uws-http-server.js +154 -26
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/jobs/job-executor.js +6 -1
- package/dist/core/jobs/job-executor.js.map +1 -1
- package/dist/core/jobs/job-scheduler.js +4 -1
- package/dist/core/jobs/job-scheduler.js.map +1 -1
- package/dist/core/jobs/leader-election.js +2 -1
- package/dist/core/jobs/leader-election.js.map +1 -1
- package/dist/core/logger/logger.js +41 -18
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.js +9 -3
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/mail/adapters/console-adapter.d.ts +14 -0
- package/dist/core/mail/adapters/console-adapter.js +89 -0
- package/dist/core/mail/adapters/console-adapter.js.map +1 -0
- package/dist/core/mail/adapters/index.d.ts +5 -0
- package/dist/core/mail/adapters/index.js +8 -0
- package/dist/core/mail/adapters/index.js.map +1 -0
- package/dist/core/mail/adapters/nodemailer-adapter.d.ts +18 -0
- package/dist/core/mail/adapters/nodemailer-adapter.js +188 -0
- package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -0
- package/dist/core/mail/adapters/resend-adapter.d.ts +18 -0
- package/dist/core/mail/adapters/resend-adapter.js +169 -0
- package/dist/core/mail/adapters/resend-adapter.js.map +1 -0
- package/dist/core/mail/adapters/sendgrid-adapter.d.ts +19 -0
- package/dist/core/mail/adapters/sendgrid-adapter.js +186 -0
- package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -0
- package/dist/core/mail/adapters/ses-adapter.d.ts +18 -0
- package/dist/core/mail/adapters/ses-adapter.js +167 -0
- package/dist/core/mail/adapters/ses-adapter.js.map +1 -0
- package/dist/core/mail/index.d.ts +5 -0
- package/dist/core/mail/index.js +8 -0
- package/dist/core/mail/index.js.map +1 -0
- package/dist/core/mail/mail-adapter.d.ts +62 -0
- package/dist/core/mail/mail-adapter.js +83 -0
- package/dist/core/mail/mail-adapter.js.map +1 -0
- package/dist/core/mail/mail-manager.d.ts +63 -0
- package/dist/core/mail/mail-manager.js +302 -0
- package/dist/core/mail/mail-manager.js.map +1 -0
- package/dist/core/mail/template-engine.d.ts +43 -0
- package/dist/core/mail/template-engine.js +239 -0
- package/dist/core/mail/template-engine.js.map +1 -0
- package/dist/core/mail/types.d.ts +237 -0
- package/dist/core/mail/types.js +4 -0
- package/dist/core/mail/types.js.map +1 -0
- package/dist/core/middleware/built-in/body-size/core.d.ts +12 -0
- package/dist/core/middleware/built-in/body-size/core.js +52 -0
- package/dist/core/middleware/built-in/body-size/core.js.map +1 -0
- package/dist/core/middleware/built-in/body-size/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/body-size/hook.js +12 -0
- package/dist/core/middleware/built-in/body-size/hook.js.map +1 -0
- package/dist/core/middleware/built-in/body-size/index.d.ts +6 -0
- package/dist/core/middleware/built-in/body-size/index.js +7 -0
- package/dist/core/middleware/built-in/body-size/index.js.map +1 -0
- package/dist/core/middleware/built-in/body-size/middleware.d.ts +14 -0
- package/dist/core/middleware/built-in/body-size/middleware.js +22 -0
- package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cache/core.d.ts +20 -1
- package/dist/core/middleware/built-in/cache/core.js.map +1 -1
- package/dist/core/middleware/built-in/cache/hook.d.ts +38 -1
- package/dist/core/middleware/built-in/cache/hook.js +202 -16
- package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cache/index.js +1 -1
- package/dist/core/middleware/built-in/cache/index.js.map +1 -1
- package/dist/core/middleware/built-in/compression/core.d.ts +16 -0
- package/dist/core/middleware/built-in/compression/core.js +75 -0
- package/dist/core/middleware/built-in/compression/core.js.map +1 -0
- package/dist/core/middleware/built-in/compression/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/compression/hook.js +14 -0
- package/dist/core/middleware/built-in/compression/hook.js.map +1 -0
- package/dist/core/middleware/built-in/compression/index.d.ts +6 -0
- package/dist/core/middleware/built-in/compression/index.js +7 -0
- package/dist/core/middleware/built-in/compression/index.js.map +1 -0
- package/dist/core/middleware/built-in/compression/middleware.d.ts +20 -0
- package/dist/core/middleware/built-in/compression/middleware.js +28 -0
- package/dist/core/middleware/built-in/compression/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/core.js +37 -9
- package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/core.d.ts +19 -0
- package/dist/core/middleware/built-in/helmet/core.js +70 -0
- package/dist/core/middleware/built-in/helmet/core.js.map +1 -0
- package/dist/core/middleware/built-in/helmet/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/helmet/hook.js +12 -0
- package/dist/core/middleware/built-in/helmet/hook.js.map +1 -0
- package/dist/core/middleware/built-in/helmet/index.d.ts +6 -0
- package/dist/core/middleware/built-in/helmet/index.js +7 -0
- package/dist/core/middleware/built-in/helmet/index.js.map +1 -0
- package/dist/core/middleware/built-in/helmet/middleware.d.ts +22 -0
- package/dist/core/middleware/built-in/helmet/middleware.js +28 -0
- package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/http2/core.d.ts +35 -0
- package/dist/core/middleware/built-in/http2/core.js +128 -0
- package/dist/core/middleware/built-in/http2/core.js.map +1 -0
- package/dist/core/middleware/built-in/http2/hook.d.ts +5 -0
- package/dist/core/middleware/built-in/http2/hook.js +34 -0
- package/dist/core/middleware/built-in/http2/hook.js.map +1 -0
- package/dist/core/middleware/built-in/http2/index.d.ts +8 -0
- package/dist/core/middleware/built-in/http2/index.js +10 -0
- package/dist/core/middleware/built-in/http2/index.js.map +1 -0
- package/dist/core/middleware/built-in/http2/middleware.d.ts +20 -0
- package/dist/core/middleware/built-in/http2/middleware.js +31 -0
- package/dist/core/middleware/built-in/http2/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/index.d.ts +18 -0
- package/dist/core/middleware/built-in/index.js +28 -0
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/range/core.d.ts +16 -0
- package/dist/core/middleware/built-in/range/core.js +112 -0
- package/dist/core/middleware/built-in/range/core.js.map +1 -0
- package/dist/core/middleware/built-in/range/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/range/hook.js +12 -0
- package/dist/core/middleware/built-in/range/hook.js.map +1 -0
- package/dist/core/middleware/built-in/range/index.d.ts +6 -0
- package/dist/core/middleware/built-in/range/index.js +7 -0
- package/dist/core/middleware/built-in/range/index.js.map +1 -0
- package/dist/core/middleware/built-in/range/middleware.d.ts +21 -0
- package/dist/core/middleware/built-in/range/middleware.js +27 -0
- package/dist/core/middleware/built-in/range/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/session/core.js +14 -1
- package/dist/core/middleware/built-in/session/core.js.map +1 -1
- package/dist/core/middleware/built-in/static/core.d.ts +20 -0
- package/dist/core/middleware/built-in/static/core.js +143 -0
- package/dist/core/middleware/built-in/static/core.js.map +1 -0
- package/dist/core/middleware/built-in/static/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/static/hook.js +12 -0
- package/dist/core/middleware/built-in/static/hook.js.map +1 -0
- package/dist/core/middleware/built-in/static/index.d.ts +6 -0
- package/dist/core/middleware/built-in/static/index.js +7 -0
- package/dist/core/middleware/built-in/static/index.js.map +1 -0
- package/dist/core/middleware/built-in/static/middleware.d.ts +18 -0
- package/dist/core/middleware/built-in/static/middleware.js +26 -0
- package/dist/core/middleware/built-in/static/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/template/core.d.ts +19 -0
- package/dist/core/middleware/built-in/template/core.js +108 -0
- package/dist/core/middleware/built-in/template/core.js.map +1 -0
- package/dist/core/middleware/built-in/template/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/template/hook.js +12 -0
- package/dist/core/middleware/built-in/template/hook.js.map +1 -0
- package/dist/core/middleware/built-in/template/index.d.ts +6 -0
- package/dist/core/middleware/built-in/template/index.js +7 -0
- package/dist/core/middleware/built-in/template/index.js.map +1 -0
- package/dist/core/middleware/built-in/template/middleware.d.ts +21 -0
- package/dist/core/middleware/built-in/template/middleware.js +27 -0
- package/dist/core/middleware/built-in/template/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/upload/core.d.ts +29 -0
- package/dist/core/middleware/built-in/upload/core.js +66 -0
- package/dist/core/middleware/built-in/upload/core.js.map +1 -0
- package/dist/core/middleware/built-in/upload/hook.d.ts +2 -0
- package/dist/core/middleware/built-in/upload/hook.js +25 -0
- package/dist/core/middleware/built-in/upload/hook.js.map +1 -0
- package/dist/core/middleware/built-in/upload/index.d.ts +6 -0
- package/dist/core/middleware/built-in/upload/index.js +7 -0
- package/dist/core/middleware/built-in/upload/index.js.map +1 -0
- package/dist/core/middleware/built-in/upload/middleware.d.ts +18 -0
- package/dist/core/middleware/built-in/upload/middleware.js +41 -0
- package/dist/core/middleware/built-in/upload/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/validation/middleware.js +2 -1
- package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
- package/dist/core/networking/adapters/uws-adapter.js +54 -6
- package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
- package/dist/core/networking/adapters/ws-adapter.js +56 -17
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/pooling/object-pool-manager.js +9 -1
- package/dist/core/pooling/object-pool-manager.js.map +1 -1
- package/dist/core/queue/adapters/bull-adapter.d.ts +86 -0
- package/dist/core/queue/adapters/bull-adapter.js +330 -0
- package/dist/core/queue/adapters/bull-adapter.js.map +1 -0
- package/dist/core/queue/adapters/index.d.ts +9 -0
- package/dist/core/queue/adapters/index.js +10 -0
- package/dist/core/queue/adapters/index.js.map +1 -0
- package/dist/core/queue/adapters/kafka-adapter.d.ts +86 -0
- package/dist/core/queue/adapters/kafka-adapter.js +462 -0
- package/dist/core/queue/adapters/kafka-adapter.js.map +1 -0
- package/dist/core/queue/adapters/memory-adapter.d.ts +87 -0
- package/dist/core/queue/adapters/memory-adapter.js +419 -0
- package/dist/core/queue/adapters/memory-adapter.js.map +1 -0
- package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +86 -0
- package/dist/core/queue/adapters/rabbitmq-adapter.js +436 -0
- package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -0
- package/dist/core/queue/adapters/sqs-adapter.d.ts +102 -0
- package/dist/core/queue/adapters/sqs-adapter.js +522 -0
- package/dist/core/queue/adapters/sqs-adapter.js.map +1 -0
- package/dist/core/queue/index.d.ts +11 -0
- package/dist/core/queue/index.js +14 -0
- package/dist/core/queue/index.js.map +1 -0
- package/dist/core/queue/middleware/index.d.ts +7 -0
- package/dist/core/queue/middleware/index.js +8 -0
- package/dist/core/queue/middleware/index.js.map +1 -0
- package/dist/core/queue/middleware/monitoring.d.ts +84 -0
- package/dist/core/queue/middleware/monitoring.js +145 -0
- package/dist/core/queue/middleware/monitoring.js.map +1 -0
- package/dist/core/queue/middleware/priority.d.ts +61 -0
- package/dist/core/queue/middleware/priority.js +90 -0
- package/dist/core/queue/middleware/priority.js.map +1 -0
- package/dist/core/queue/middleware/rate-limit.d.ts +34 -0
- package/dist/core/queue/middleware/rate-limit.js +109 -0
- package/dist/core/queue/middleware/rate-limit.js.map +1 -0
- package/dist/core/queue/queue-adapter.d.ts +73 -0
- package/dist/core/queue/queue-adapter.js +20 -0
- package/dist/core/queue/queue-adapter.js.map +1 -0
- package/dist/core/queue/queue-manager.d.ts +92 -0
- package/dist/core/queue/queue-manager.js +327 -0
- package/dist/core/queue/queue-manager.js.map +1 -0
- package/dist/core/queue/types.d.ts +205 -0
- package/dist/core/queue/types.js +6 -0
- package/dist/core/queue/types.js.map +1 -0
- package/dist/core/routing/index.js +41 -10
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/routing/radix-tree.d.ts +48 -0
- package/dist/core/routing/radix-tree.js +211 -0
- package/dist/core/routing/radix-tree.js.map +1 -0
- package/dist/core/routing/router.d.ts +10 -9
- package/dist/core/routing/router.js +3 -1
- package/dist/core/routing/router.js.map +1 -1
- package/dist/core/routing/unified-router.d.ts +18 -12
- package/dist/core/routing/unified-router.js +220 -163
- package/dist/core/routing/unified-router.js.map +1 -1
- package/dist/core/runtime/aws-lambda-adapter.js +21 -10
- package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
- package/dist/core/runtime/base-adapter.js +15 -5
- package/dist/core/runtime/base-adapter.js.map +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.js +35 -12
- package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
- package/dist/core/runtime/vercel-edge-adapter.js +16 -6
- package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
- package/dist/core/utilities/container.js +3 -1
- package/dist/core/utilities/container.js.map +1 -1
- package/dist/core/utilities/index.d.ts +2 -0
- package/dist/core/utilities/index.js +2 -0
- package/dist/core/utilities/index.js.map +1 -1
- package/dist/core/utilities/response-helpers.d.ts +280 -0
- package/dist/core/utilities/response-helpers.js +359 -0
- package/dist/core/utilities/response-helpers.js.map +1 -0
- package/dist/core/workers/facade.d.ts +74 -0
- package/dist/core/workers/facade.js +98 -0
- package/dist/core/workers/facade.js.map +1 -0
- package/dist/core/workers/index.d.ts +2 -0
- package/dist/core/workers/index.js +6 -0
- package/dist/core/workers/index.js.map +1 -0
- package/dist/core/workers/worker-manager.d.ts +124 -0
- package/dist/core/workers/worker-manager.js +299 -0
- package/dist/core/workers/worker-manager.js.map +1 -0
- package/dist/core/workers/worker.d.ts +1 -0
- package/dist/core/workers/worker.js +225 -0
- package/dist/core/workers/worker.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +345 -13
- package/dist/moro.js +820 -221
- package/dist/moro.js.map +1 -1
- package/dist/types/cache.d.ts +4 -0
- package/dist/types/config.d.ts +42 -0
- package/dist/types/core.d.ts +18 -1
- package/dist/types/http.d.ts +21 -0
- package/package.json +98 -24
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Worker Threads Facade - Clean API for optional worker thread functionality
|
|
2
|
+
// Provides a clean interface that gracefully degrades when workers aren't available
|
|
3
|
+
/**
|
|
4
|
+
* Worker Threads Facade - Provides clean access to optional worker functionality
|
|
5
|
+
*/
|
|
6
|
+
export class WorkerThreadsFacade {
|
|
7
|
+
workerManager = null;
|
|
8
|
+
workerTasks = null;
|
|
9
|
+
executeOnWorker = null;
|
|
10
|
+
initialized = false;
|
|
11
|
+
/**
|
|
12
|
+
* Lazy initialize worker threads
|
|
13
|
+
*/
|
|
14
|
+
async ensureInitialized() {
|
|
15
|
+
if (this.initialized)
|
|
16
|
+
return;
|
|
17
|
+
try {
|
|
18
|
+
const workers = await import('./index.js');
|
|
19
|
+
this.workerManager = workers.getWorkerManager();
|
|
20
|
+
this.workerTasks = workers.workerTasks;
|
|
21
|
+
this.executeOnWorker = workers.executeOnWorker;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Workers not available - graceful degradation
|
|
25
|
+
this.workerManager = null;
|
|
26
|
+
this.workerTasks = null;
|
|
27
|
+
this.executeOnWorker = null;
|
|
28
|
+
}
|
|
29
|
+
this.initialized = true;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Execute a task on worker threads
|
|
33
|
+
*/
|
|
34
|
+
async executeTask(task) {
|
|
35
|
+
await this.ensureInitialized();
|
|
36
|
+
if (!this.workerManager) {
|
|
37
|
+
throw new Error('Worker threads are not available in this environment');
|
|
38
|
+
}
|
|
39
|
+
return this.workerManager.executeTask(task);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get worker thread statistics
|
|
43
|
+
*/
|
|
44
|
+
async getStats() {
|
|
45
|
+
await this.ensureInitialized();
|
|
46
|
+
return this.workerManager?.getStats() || null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Shutdown worker threads
|
|
50
|
+
*/
|
|
51
|
+
async shutdown() {
|
|
52
|
+
await this.ensureInitialized();
|
|
53
|
+
await this.workerManager?.shutdown();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* JWT operations using worker threads
|
|
57
|
+
*/
|
|
58
|
+
async getJwtWorker() {
|
|
59
|
+
await this.ensureInitialized();
|
|
60
|
+
if (!this.workerTasks)
|
|
61
|
+
return null;
|
|
62
|
+
return {
|
|
63
|
+
verify: this.workerTasks.verifyJWT.bind(this.workerTasks),
|
|
64
|
+
sign: this.workerTasks.signJWT.bind(this.workerTasks),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Crypto operations using worker threads
|
|
69
|
+
*/
|
|
70
|
+
async getCryptoWorker() {
|
|
71
|
+
await this.ensureInitialized();
|
|
72
|
+
if (!this.workerTasks)
|
|
73
|
+
return null;
|
|
74
|
+
return {
|
|
75
|
+
hash: this.workerTasks.hash.bind(this.workerTasks),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Heavy computation operations using worker threads
|
|
80
|
+
*/
|
|
81
|
+
async getComputeWorker() {
|
|
82
|
+
await this.ensureInitialized();
|
|
83
|
+
if (!this.workerTasks)
|
|
84
|
+
return null;
|
|
85
|
+
return {
|
|
86
|
+
heavy: this.workerTasks.heavyComputation.bind(this.workerTasks),
|
|
87
|
+
transformJSON: this.workerTasks.transformJSON.bind(this.workerTasks),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if worker threads are available
|
|
92
|
+
*/
|
|
93
|
+
async isAvailable() {
|
|
94
|
+
await this.ensureInitialized();
|
|
95
|
+
return this.workerManager !== null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../../src/core/workers/facade.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,oFAAoF;AA+BpF;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACtB,aAAa,GAAqB,IAAI,CAAC;IACvC,WAAW,GAAyB,IAAI,CAAC;IACzC,eAAe,GAAgD,IAAI,CAAC;IACpE,WAAW,GAAG,KAAK,CAAC;IAE5B;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAChD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;YAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAU,IAAgB;QACzC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAI,IAAI,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAIhB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAEnC,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YACzD,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;SACtD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAEnC,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;SACnD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QAIpB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAEnC,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YAC/D,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;SACrE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Worker Threads - CPU-intensive operations offloading
|
|
2
|
+
// Massive performance gains: 50-200% for CPU-bound tasks
|
|
3
|
+
export { WorkerManager, getWorkerManager, executeOnWorker, workerTasks, WORKER_TASKS, } from './worker-manager.js';
|
|
4
|
+
// Clean facade API
|
|
5
|
+
export { WorkerThreadsFacade, } from './facade.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/workers/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,yDAAyD;AAEzD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,WAAW,EAGX,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,mBAAmB,GAIpB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker task definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface WorkerTask {
|
|
5
|
+
id: string;
|
|
6
|
+
type: string;
|
|
7
|
+
data: any;
|
|
8
|
+
priority?: 'low' | 'normal' | 'high';
|
|
9
|
+
timeout?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Worker result
|
|
13
|
+
*/
|
|
14
|
+
export interface WorkerResult {
|
|
15
|
+
taskId: string;
|
|
16
|
+
success: boolean;
|
|
17
|
+
data?: any;
|
|
18
|
+
error?: string;
|
|
19
|
+
executionTime: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Built-in worker tasks
|
|
23
|
+
*/
|
|
24
|
+
export declare const WORKER_TASKS: {
|
|
25
|
+
readonly JWT_VERIFY: "jwt:verify";
|
|
26
|
+
readonly JWT_SIGN: "jwt:sign";
|
|
27
|
+
readonly CRYPTO_HASH: "crypto:hash";
|
|
28
|
+
readonly CRYPTO_ENCRYPT: "crypto:encrypt";
|
|
29
|
+
readonly CRYPTO_DECRYPT: "crypto:decrypt";
|
|
30
|
+
readonly DATA_COMPRESS: "data:compress";
|
|
31
|
+
readonly DATA_DECOMPRESS: "data:decompress";
|
|
32
|
+
readonly IMAGE_PROCESS: "image:process";
|
|
33
|
+
readonly HEAVY_COMPUTATION: "computation:heavy";
|
|
34
|
+
readonly JSON_TRANSFORM: "json:transform";
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Worker Thread Manager
|
|
38
|
+
* Manages a pool of worker threads for CPU-intensive operations
|
|
39
|
+
*/
|
|
40
|
+
export declare class WorkerManager {
|
|
41
|
+
private workers;
|
|
42
|
+
private taskQueue;
|
|
43
|
+
private activeTasks;
|
|
44
|
+
private workerCount;
|
|
45
|
+
private maxQueueSize;
|
|
46
|
+
private isShuttingDown;
|
|
47
|
+
constructor(options?: {
|
|
48
|
+
workerCount?: number;
|
|
49
|
+
maxQueueSize?: number;
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* Initialize worker threads
|
|
53
|
+
*/
|
|
54
|
+
private initializeWorkers;
|
|
55
|
+
/**
|
|
56
|
+
* Create a single worker thread
|
|
57
|
+
*/
|
|
58
|
+
private createWorker;
|
|
59
|
+
/**
|
|
60
|
+
* Restart a failed worker
|
|
61
|
+
*/
|
|
62
|
+
private restartWorker;
|
|
63
|
+
/**
|
|
64
|
+
* Execute a task on a worker thread
|
|
65
|
+
*/
|
|
66
|
+
executeTask<T = any>(task: WorkerTask): Promise<T>;
|
|
67
|
+
/**
|
|
68
|
+
* Process the task queue
|
|
69
|
+
*/
|
|
70
|
+
private processQueue;
|
|
71
|
+
/**
|
|
72
|
+
* Handle result from worker thread
|
|
73
|
+
*/
|
|
74
|
+
private handleWorkerResult;
|
|
75
|
+
/**
|
|
76
|
+
* Shutdown all workers
|
|
77
|
+
*/
|
|
78
|
+
shutdown(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Get worker statistics
|
|
81
|
+
*/
|
|
82
|
+
getStats(): {
|
|
83
|
+
workerCount: number;
|
|
84
|
+
activeTasks: number;
|
|
85
|
+
queuedTasks: number;
|
|
86
|
+
isShuttingDown: boolean;
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get or create the worker manager instance
|
|
91
|
+
*/
|
|
92
|
+
export declare function getWorkerManager(options?: {
|
|
93
|
+
workerCount?: number;
|
|
94
|
+
maxQueueSize?: number;
|
|
95
|
+
}): WorkerManager;
|
|
96
|
+
/**
|
|
97
|
+
* Execute task on worker thread (convenience function)
|
|
98
|
+
*/
|
|
99
|
+
export declare function executeOnWorker<T = any>(task: WorkerTask): Promise<T>;
|
|
100
|
+
/**
|
|
101
|
+
* Built-in task helpers
|
|
102
|
+
*/
|
|
103
|
+
export declare const workerTasks: {
|
|
104
|
+
/**
|
|
105
|
+
* JWT verification (CPU-intensive)
|
|
106
|
+
*/
|
|
107
|
+
verifyJWT(token: string, secret: string, options?: any): Promise<any>;
|
|
108
|
+
/**
|
|
109
|
+
* JWT signing (CPU-intensive)
|
|
110
|
+
*/
|
|
111
|
+
signJWT(payload: any, secret: string, options?: any): Promise<string>;
|
|
112
|
+
/**
|
|
113
|
+
* Crypto hash (CPU-intensive)
|
|
114
|
+
*/
|
|
115
|
+
hash(data: string, algorithm?: string): Promise<string>;
|
|
116
|
+
/**
|
|
117
|
+
* Heavy computation example
|
|
118
|
+
*/
|
|
119
|
+
heavyComputation(data: any): Promise<any>;
|
|
120
|
+
/**
|
|
121
|
+
* JSON transformation (can be CPU-intensive for large objects)
|
|
122
|
+
*/
|
|
123
|
+
transformJSON(data: any, transformer: (data: any) => any): Promise<any>;
|
|
124
|
+
};
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
// Worker Thread Manager - Offload CPU-intensive operations
|
|
2
|
+
import { Worker } from 'worker_threads';
|
|
3
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
4
|
+
import { cpus } from 'os';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { isPackageAvailable } from '../utilities/package-utils.js';
|
|
7
|
+
// Optional JWT import
|
|
8
|
+
const jwtAvailable = isPackageAvailable('jsonwebtoken');
|
|
9
|
+
const logger = createFrameworkLogger('WorkerManager');
|
|
10
|
+
/**
|
|
11
|
+
* Built-in worker tasks
|
|
12
|
+
*/
|
|
13
|
+
export const WORKER_TASKS = {
|
|
14
|
+
JWT_VERIFY: 'jwt:verify',
|
|
15
|
+
JWT_SIGN: 'jwt:sign',
|
|
16
|
+
CRYPTO_HASH: 'crypto:hash',
|
|
17
|
+
CRYPTO_ENCRYPT: 'crypto:encrypt',
|
|
18
|
+
CRYPTO_DECRYPT: 'crypto:decrypt',
|
|
19
|
+
DATA_COMPRESS: 'data:compress',
|
|
20
|
+
DATA_DECOMPRESS: 'data:decompress',
|
|
21
|
+
IMAGE_PROCESS: 'image:process',
|
|
22
|
+
HEAVY_COMPUTATION: 'computation:heavy',
|
|
23
|
+
JSON_TRANSFORM: 'json:transform',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Worker Thread Manager
|
|
27
|
+
* Manages a pool of worker threads for CPU-intensive operations
|
|
28
|
+
*/
|
|
29
|
+
export class WorkerManager {
|
|
30
|
+
workers = new Map();
|
|
31
|
+
taskQueue = [];
|
|
32
|
+
activeTasks = new Map();
|
|
33
|
+
workerCount;
|
|
34
|
+
maxQueueSize;
|
|
35
|
+
isShuttingDown = false;
|
|
36
|
+
constructor(options = {}) {
|
|
37
|
+
this.workerCount = options.workerCount || Math.max(1, cpus().length - 1); // Leave 1 core for main thread
|
|
38
|
+
this.maxQueueSize = options.maxQueueSize || 1000;
|
|
39
|
+
this.initializeWorkers();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize worker threads
|
|
43
|
+
*/
|
|
44
|
+
initializeWorkers() {
|
|
45
|
+
for (let i = 0; i < this.workerCount; i++) {
|
|
46
|
+
this.createWorker();
|
|
47
|
+
}
|
|
48
|
+
logger.info(`Initialized ${this.workerCount} worker threads`, 'WorkerInit', {
|
|
49
|
+
totalWorkers: this.workerCount,
|
|
50
|
+
maxQueueSize: this.maxQueueSize,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create a single worker thread
|
|
55
|
+
*/
|
|
56
|
+
createWorker() {
|
|
57
|
+
const workerPath = join(process.cwd(), 'src/core/workers/worker.ts');
|
|
58
|
+
const worker = new Worker(workerPath, {
|
|
59
|
+
workerData: { type: 'worker' },
|
|
60
|
+
});
|
|
61
|
+
worker.on('message', (result) => {
|
|
62
|
+
this.handleWorkerResult(result);
|
|
63
|
+
});
|
|
64
|
+
worker.on('error', error => {
|
|
65
|
+
logger.error('Worker thread error', 'WorkerError', { error: error.message });
|
|
66
|
+
this.restartWorker(worker);
|
|
67
|
+
});
|
|
68
|
+
worker.on('exit', code => {
|
|
69
|
+
if (code !== 0 && !this.isShuttingDown) {
|
|
70
|
+
logger.warn(`Worker exited with code ${code}, restarting`, 'WorkerExit');
|
|
71
|
+
this.restartWorker(worker);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
this.workers.set(worker.threadId, worker);
|
|
75
|
+
logger.debug(`Created worker thread ${worker.threadId}`, 'WorkerCreate');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Restart a failed worker
|
|
79
|
+
*/
|
|
80
|
+
restartWorker(oldWorker) {
|
|
81
|
+
const threadId = oldWorker.threadId;
|
|
82
|
+
this.workers.delete(threadId);
|
|
83
|
+
// Clean up any pending tasks for this worker
|
|
84
|
+
for (const [taskId, taskInfo] of this.activeTasks.entries()) {
|
|
85
|
+
if (taskInfo.timeout) {
|
|
86
|
+
clearTimeout(taskInfo.timeout);
|
|
87
|
+
}
|
|
88
|
+
taskInfo.reject(new Error('Worker thread failed'));
|
|
89
|
+
this.activeTasks.delete(taskId);
|
|
90
|
+
}
|
|
91
|
+
// Create new worker
|
|
92
|
+
this.createWorker();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Execute a task on a worker thread
|
|
96
|
+
*/
|
|
97
|
+
async executeTask(task) {
|
|
98
|
+
if (this.isShuttingDown) {
|
|
99
|
+
throw new Error('Worker manager is shutting down');
|
|
100
|
+
}
|
|
101
|
+
return new Promise((resolve, reject) => {
|
|
102
|
+
// Check queue size limit
|
|
103
|
+
if (this.taskQueue.length >= this.maxQueueSize) {
|
|
104
|
+
reject(new Error('Worker queue is full'));
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Add to queue
|
|
108
|
+
this.taskQueue.push(task);
|
|
109
|
+
// Set up promise handlers
|
|
110
|
+
const timeout = task.timeout
|
|
111
|
+
? setTimeout(() => {
|
|
112
|
+
this.activeTasks.delete(task.id);
|
|
113
|
+
reject(new Error(`Task ${task.id} timed out`));
|
|
114
|
+
}, task.timeout)
|
|
115
|
+
: null;
|
|
116
|
+
// Don't keep process alive for worker timeouts
|
|
117
|
+
if (timeout) {
|
|
118
|
+
timeout.unref();
|
|
119
|
+
}
|
|
120
|
+
this.activeTasks.set(task.id, { resolve, reject, timeout });
|
|
121
|
+
// Try to assign task to available worker
|
|
122
|
+
this.processQueue();
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Process the task queue
|
|
127
|
+
*/
|
|
128
|
+
processQueue() {
|
|
129
|
+
// Sort queue by priority (high first)
|
|
130
|
+
this.taskQueue.sort((a, b) => {
|
|
131
|
+
const priorityOrder = { high: 3, normal: 2, low: 1 };
|
|
132
|
+
return priorityOrder[b.priority || 'normal'] - priorityOrder[a.priority || 'normal'];
|
|
133
|
+
});
|
|
134
|
+
// Assign tasks to available workers
|
|
135
|
+
for (const [threadId, worker] of this.workers.entries()) {
|
|
136
|
+
if (this.taskQueue.length === 0)
|
|
137
|
+
break;
|
|
138
|
+
// Check if worker is available (not currently processing)
|
|
139
|
+
// For simplicity, we'll send tasks and let workers handle queuing
|
|
140
|
+
const task = this.taskQueue.shift();
|
|
141
|
+
if (task) {
|
|
142
|
+
worker.postMessage(task);
|
|
143
|
+
logger.debug(`Assigned task ${task.id} to worker ${threadId}`, 'TaskAssigned');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Handle result from worker thread
|
|
149
|
+
*/
|
|
150
|
+
handleWorkerResult(result) {
|
|
151
|
+
const taskInfo = this.activeTasks.get(result.taskId);
|
|
152
|
+
if (!taskInfo) {
|
|
153
|
+
logger.warn(`Received result for unknown task ${result.taskId}`, 'UnknownTaskResult');
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Clear timeout
|
|
157
|
+
if (taskInfo.timeout) {
|
|
158
|
+
clearTimeout(taskInfo.timeout);
|
|
159
|
+
}
|
|
160
|
+
// Remove from active tasks
|
|
161
|
+
this.activeTasks.delete(result.taskId);
|
|
162
|
+
// Handle result
|
|
163
|
+
if (result.success) {
|
|
164
|
+
logger.debug(`Task ${result.taskId} completed in ${result.executionTime}ms`, 'TaskCompleted');
|
|
165
|
+
taskInfo.resolve(result.data);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
logger.error(`Task ${result.taskId} failed: ${result.error}`, 'TaskFailed');
|
|
169
|
+
taskInfo.reject(new Error(result.error || 'Task failed'));
|
|
170
|
+
}
|
|
171
|
+
// Process next task in queue
|
|
172
|
+
this.processQueue();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Shutdown all workers
|
|
176
|
+
*/
|
|
177
|
+
async shutdown() {
|
|
178
|
+
this.isShuttingDown = true;
|
|
179
|
+
// Reject all pending tasks
|
|
180
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
181
|
+
for (const [taskId, taskInfo] of this.activeTasks.entries()) {
|
|
182
|
+
if (taskInfo.timeout) {
|
|
183
|
+
clearTimeout(taskInfo.timeout);
|
|
184
|
+
}
|
|
185
|
+
taskInfo.reject(new Error('Worker manager shutting down'));
|
|
186
|
+
}
|
|
187
|
+
// Terminate all workers
|
|
188
|
+
const shutdownPromises = Array.from(this.workers.values()).map(worker => new Promise(resolve => {
|
|
189
|
+
worker.once('exit', () => resolve());
|
|
190
|
+
worker.terminate();
|
|
191
|
+
}));
|
|
192
|
+
await Promise.all(shutdownPromises);
|
|
193
|
+
this.workers.clear();
|
|
194
|
+
this.activeTasks.clear();
|
|
195
|
+
this.taskQueue.length = 0;
|
|
196
|
+
logger.info('Worker manager shutdown complete', 'WorkerShutdown');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get worker statistics
|
|
200
|
+
*/
|
|
201
|
+
getStats() {
|
|
202
|
+
return {
|
|
203
|
+
workerCount: this.workers.size,
|
|
204
|
+
activeTasks: this.activeTasks.size,
|
|
205
|
+
queuedTasks: this.taskQueue.length,
|
|
206
|
+
isShuttingDown: this.isShuttingDown,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Singleton instance
|
|
211
|
+
let workerManagerInstance = null;
|
|
212
|
+
/**
|
|
213
|
+
* Get or create the worker manager instance
|
|
214
|
+
*/
|
|
215
|
+
export function getWorkerManager(options) {
|
|
216
|
+
if (!workerManagerInstance) {
|
|
217
|
+
workerManagerInstance = new WorkerManager(options);
|
|
218
|
+
}
|
|
219
|
+
return workerManagerInstance;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Execute task on worker thread (convenience function)
|
|
223
|
+
*/
|
|
224
|
+
export async function executeOnWorker(task) {
|
|
225
|
+
const manager = getWorkerManager();
|
|
226
|
+
return manager.executeTask(task);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Built-in task helpers
|
|
230
|
+
*/
|
|
231
|
+
export const workerTasks = {
|
|
232
|
+
/**
|
|
233
|
+
* JWT verification (CPU-intensive)
|
|
234
|
+
*/
|
|
235
|
+
async verifyJWT(token, secret, options) {
|
|
236
|
+
if (!jwtAvailable) {
|
|
237
|
+
throw new Error('JWT verification requires the "jsonwebtoken" package. Please install it with: npm install jsonwebtoken @types/jsonwebtoken');
|
|
238
|
+
}
|
|
239
|
+
return executeOnWorker({
|
|
240
|
+
id: `jwt-verify-${Date.now()}-${Math.random()}`,
|
|
241
|
+
type: WORKER_TASKS.JWT_VERIFY,
|
|
242
|
+
data: { token, secret, options },
|
|
243
|
+
priority: 'high',
|
|
244
|
+
timeout: 5000,
|
|
245
|
+
});
|
|
246
|
+
},
|
|
247
|
+
/**
|
|
248
|
+
* JWT signing (CPU-intensive)
|
|
249
|
+
*/
|
|
250
|
+
async signJWT(payload, secret, options) {
|
|
251
|
+
if (!jwtAvailable) {
|
|
252
|
+
throw new Error('JWT signing requires the "jsonwebtoken" package. Please install it with: npm install jsonwebtoken @types/jsonwebtoken');
|
|
253
|
+
}
|
|
254
|
+
return executeOnWorker({
|
|
255
|
+
id: `jwt-sign-${Date.now()}-${Math.random()}`,
|
|
256
|
+
type: WORKER_TASKS.JWT_SIGN,
|
|
257
|
+
data: { payload, secret, options },
|
|
258
|
+
priority: 'high',
|
|
259
|
+
timeout: 5000,
|
|
260
|
+
});
|
|
261
|
+
},
|
|
262
|
+
/**
|
|
263
|
+
* Crypto hash (CPU-intensive)
|
|
264
|
+
*/
|
|
265
|
+
async hash(data, algorithm = 'sha256') {
|
|
266
|
+
return executeOnWorker({
|
|
267
|
+
id: `crypto-hash-${Date.now()}-${Math.random()}`,
|
|
268
|
+
type: WORKER_TASKS.CRYPTO_HASH,
|
|
269
|
+
data: { data, algorithm },
|
|
270
|
+
priority: 'normal',
|
|
271
|
+
timeout: 10000,
|
|
272
|
+
});
|
|
273
|
+
},
|
|
274
|
+
/**
|
|
275
|
+
* Heavy computation example
|
|
276
|
+
*/
|
|
277
|
+
async heavyComputation(data) {
|
|
278
|
+
return executeOnWorker({
|
|
279
|
+
id: `computation-${Date.now()}-${Math.random()}`,
|
|
280
|
+
type: WORKER_TASKS.HEAVY_COMPUTATION,
|
|
281
|
+
data,
|
|
282
|
+
priority: 'normal',
|
|
283
|
+
timeout: 30000,
|
|
284
|
+
});
|
|
285
|
+
},
|
|
286
|
+
/**
|
|
287
|
+
* JSON transformation (can be CPU-intensive for large objects)
|
|
288
|
+
*/
|
|
289
|
+
async transformJSON(data, transformer) {
|
|
290
|
+
return executeOnWorker({
|
|
291
|
+
id: `json-transform-${Date.now()}-${Math.random()}`,
|
|
292
|
+
type: WORKER_TASKS.JSON_TRANSFORM,
|
|
293
|
+
data: { data, transformer: transformer.toString() },
|
|
294
|
+
priority: 'normal',
|
|
295
|
+
timeout: 15000,
|
|
296
|
+
});
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
//# sourceMappingURL=worker-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-manager.js","sourceRoot":"","sources":["../../../src/core/workers/worker-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|