@bluelibs/runner 3.4.2 → 4.0.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/AI.md +621 -0
- package/README.md +1024 -577
- package/dist/context.d.ts +4 -8
- package/dist/context.js +5 -12
- package/dist/context.js.map +1 -1
- package/dist/define.d.ts +9 -113
- package/dist/define.js +29 -358
- package/dist/define.js.map +1 -1
- package/dist/definers/defineEvent.d.ts +2 -0
- package/dist/definers/defineEvent.js +23 -0
- package/dist/definers/defineEvent.js.map +1 -0
- package/dist/definers/defineHook.d.ts +6 -0
- package/dist/definers/defineHook.js +24 -0
- package/dist/definers/defineHook.js.map +1 -0
- package/dist/definers/defineOverride.d.ts +14 -0
- package/dist/definers/defineOverride.js +13 -0
- package/dist/definers/defineOverride.js.map +1 -0
- package/dist/definers/defineResource.d.ts +2 -0
- package/dist/definers/defineResource.js +69 -0
- package/dist/definers/defineResource.js.map +1 -0
- package/dist/definers/defineResourceMiddleware.d.ts +2 -0
- package/dist/definers/defineResourceMiddleware.js +42 -0
- package/dist/definers/defineResourceMiddleware.js.map +1 -0
- package/dist/definers/defineTag.d.ts +12 -0
- package/dist/definers/defineTag.js +106 -0
- package/dist/definers/defineTag.js.map +1 -0
- package/dist/definers/defineTask.d.ts +15 -0
- package/dist/definers/defineTask.js +42 -0
- package/dist/definers/defineTask.js.map +1 -0
- package/dist/definers/defineTaskMiddleware.d.ts +2 -0
- package/dist/definers/defineTaskMiddleware.js +42 -0
- package/dist/definers/defineTaskMiddleware.js.map +1 -0
- package/dist/definers/tools.d.ts +45 -0
- package/dist/definers/tools.js +75 -0
- package/dist/definers/tools.js.map +1 -0
- package/dist/defs.d.ts +16 -424
- package/dist/defs.js +26 -38
- package/dist/defs.js.map +1 -1
- package/dist/errors.d.ts +23 -8
- package/dist/errors.js +50 -10
- package/dist/errors.js.map +1 -1
- package/dist/globals/globalEvents.d.ts +15 -39
- package/dist/globals/globalEvents.js +20 -81
- package/dist/globals/globalEvents.js.map +1 -1
- package/dist/globals/globalMiddleware.d.ts +24 -17
- package/dist/globals/globalMiddleware.js +12 -4
- package/dist/globals/globalMiddleware.js.map +1 -1
- package/dist/globals/globalResources.d.ts +13 -28
- package/dist/globals/globalResources.js +15 -7
- package/dist/globals/globalResources.js.map +1 -1
- package/dist/globals/globalTags.d.ts +9 -0
- package/dist/globals/globalTags.js +23 -0
- package/dist/globals/globalTags.js.map +1 -0
- package/dist/globals/middleware/cache.middleware.d.ts +10 -17
- package/dist/globals/middleware/cache.middleware.js +4 -16
- package/dist/globals/middleware/cache.middleware.js.map +1 -1
- package/dist/globals/middleware/requireContext.middleware.d.ts +1 -1
- package/dist/globals/middleware/requireContext.middleware.js +5 -14
- package/dist/globals/middleware/requireContext.middleware.js.map +1 -1
- package/dist/globals/middleware/retry.middleware.d.ts +2 -1
- package/dist/globals/middleware/retry.middleware.js +32 -5
- package/dist/globals/middleware/retry.middleware.js.map +1 -1
- package/dist/globals/middleware/timeout.middleware.d.ts +2 -1
- package/dist/globals/middleware/timeout.middleware.js +31 -5
- package/dist/globals/middleware/timeout.middleware.js.map +1 -1
- package/dist/globals/resources/debug/debug.resource.d.ts +7 -0
- package/dist/globals/resources/debug/debug.resource.js +29 -0
- package/dist/globals/resources/debug/debug.resource.js.map +1 -0
- package/dist/globals/resources/debug/debug.tag.d.ts +2 -0
- package/dist/globals/resources/debug/debug.tag.js +12 -0
- package/dist/globals/resources/debug/debug.tag.js.map +1 -0
- package/dist/globals/resources/debug/debugConfig.resource.d.ts +22 -0
- package/dist/globals/resources/debug/debugConfig.resource.js +20 -0
- package/dist/globals/resources/debug/debugConfig.resource.js.map +1 -0
- package/dist/globals/resources/debug/executionTracker.middleware.d.ts +50 -0
- package/dist/globals/resources/debug/executionTracker.middleware.js +87 -0
- package/dist/globals/resources/debug/executionTracker.middleware.js.map +1 -0
- package/dist/globals/resources/debug/globalEvent.hook.d.ts +27 -0
- package/dist/globals/resources/debug/globalEvent.hook.js +38 -0
- package/dist/globals/resources/debug/globalEvent.hook.js.map +1 -0
- package/dist/globals/resources/debug/hook.hook.d.ts +25 -0
- package/dist/globals/resources/debug/hook.hook.js +42 -0
- package/dist/globals/resources/debug/hook.hook.js.map +1 -0
- package/dist/globals/resources/debug/index.d.ts +6 -0
- package/dist/{types → globals/resources/debug}/index.js +6 -11
- package/dist/globals/resources/debug/index.js.map +1 -0
- package/dist/globals/resources/debug/middleware.hook.d.ts +25 -0
- package/dist/globals/resources/debug/middleware.hook.js +71 -0
- package/dist/globals/resources/debug/middleware.hook.js.map +1 -0
- package/dist/globals/resources/debug/types.d.ts +25 -0
- package/dist/globals/resources/debug/types.js +65 -0
- package/dist/globals/resources/debug/types.js.map +1 -0
- package/dist/globals/resources/debug/utils.d.ts +2 -0
- package/dist/globals/resources/debug/utils.js +9 -0
- package/dist/globals/resources/debug/utils.js.map +1 -0
- package/dist/globals/resources/queue.resource.d.ts +3 -3
- package/dist/globals/resources/queue.resource.js.map +1 -1
- package/dist/globals/types.d.ts +1 -0
- package/dist/{task.types.js → globals/types.js} +2 -7
- package/dist/globals/types.js.map +1 -0
- package/dist/index.d.ts +58 -85
- package/dist/index.js +23 -10
- package/dist/index.js.map +1 -1
- package/dist/models/DependencyProcessor.d.ts +8 -6
- package/dist/models/DependencyProcessor.js +116 -33
- package/dist/models/DependencyProcessor.js.map +1 -1
- package/dist/models/EventManager.d.ts +127 -7
- package/dist/models/EventManager.js +251 -78
- package/dist/models/EventManager.js.map +1 -1
- package/dist/models/LogPrinter.d.ts +55 -0
- package/dist/models/LogPrinter.js +196 -0
- package/dist/models/LogPrinter.js.map +1 -0
- package/dist/models/Logger.d.ts +47 -27
- package/dist/models/Logger.js +133 -155
- package/dist/models/Logger.js.map +1 -1
- package/dist/models/MiddlewareManager.d.ts +86 -0
- package/dist/models/MiddlewareManager.js +409 -0
- package/dist/models/MiddlewareManager.js.map +1 -0
- package/dist/models/OverrideManager.d.ts +3 -3
- package/dist/models/OverrideManager.js +22 -7
- package/dist/models/OverrideManager.js.map +1 -1
- package/dist/models/ResourceInitializer.d.ts +4 -3
- package/dist/models/ResourceInitializer.js +12 -68
- package/dist/models/ResourceInitializer.js.map +1 -1
- package/dist/models/RunResult.d.ts +35 -0
- package/dist/models/RunResult.js +68 -0
- package/dist/models/RunResult.js.map +1 -0
- package/dist/models/Store.d.ts +30 -17
- package/dist/models/Store.js +87 -25
- package/dist/models/Store.js.map +1 -1
- package/dist/models/StoreRegistry.d.ts +34 -19
- package/dist/models/StoreRegistry.js +248 -100
- package/dist/models/StoreRegistry.js.map +1 -1
- package/dist/models/StoreValidator.d.ts +5 -7
- package/dist/models/StoreValidator.js +50 -17
- package/dist/models/StoreValidator.js.map +1 -1
- package/dist/models/TaskRunner.d.ts +3 -2
- package/dist/models/TaskRunner.js +6 -103
- package/dist/models/TaskRunner.js.map +1 -1
- package/dist/models/UnhandledError.d.ts +11 -0
- package/dist/models/UnhandledError.js +30 -0
- package/dist/models/UnhandledError.js.map +1 -0
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -1
- package/dist/{tools → models/utils}/findCircularDependencies.js +8 -16
- package/dist/models/utils/findCircularDependencies.js.map +1 -0
- package/dist/models/utils/safeStringify.d.ts +3 -0
- package/dist/models/utils/safeStringify.js +45 -0
- package/dist/models/utils/safeStringify.js.map +1 -0
- package/dist/processHooks.d.ts +2 -0
- package/dist/processHooks.js +70 -0
- package/dist/processHooks.js.map +1 -0
- package/dist/run.d.ts +14 -27
- package/dist/run.js +100 -36
- package/dist/run.js.map +1 -1
- package/dist/testing.d.ts +5 -4
- package/dist/testing.js +3 -2
- package/dist/testing.js.map +1 -1
- package/dist/tools/getCallerFile.d.ts +0 -8
- package/dist/tools/getCallerFile.js +0 -51
- package/dist/tools/getCallerFile.js.map +1 -1
- package/dist/types/contracts.d.ts +55 -0
- package/dist/types/contracts.js +4 -0
- package/dist/types/contracts.js.map +1 -0
- package/dist/types/event.d.ts +26 -7
- package/dist/types/event.js +1 -1
- package/dist/types/event.js.map +1 -1
- package/dist/types/hook.d.ts +21 -0
- package/dist/{models/StoreTypes.js → types/hook.js} +2 -1
- package/dist/types/hook.js.map +1 -0
- package/dist/types/meta.d.ts +6 -1
- package/dist/types/meta.js +4 -2
- package/dist/types/meta.js.map +1 -1
- package/dist/types/resource.d.ts +40 -52
- package/dist/types/resource.js +1 -0
- package/dist/types/resource.js.map +1 -1
- package/dist/types/resourceMiddleware.d.ts +47 -0
- package/dist/{middleware.types.js → types/resourceMiddleware.js} +1 -1
- package/dist/types/resourceMiddleware.js.map +1 -0
- package/dist/types/runner.d.ts +37 -0
- package/dist/types/{base.js → runner.js} +1 -1
- package/dist/types/runner.js.map +1 -0
- package/dist/types/storeTypes.d.ts +40 -0
- package/dist/types/{metadata.js → storeTypes.js} +1 -1
- package/dist/types/storeTypes.js.map +1 -0
- package/dist/types/symbols.d.ts +10 -21
- package/dist/types/symbols.js +17 -22
- package/dist/types/symbols.js.map +1 -1
- package/dist/types/tag.d.ts +46 -0
- package/dist/{resource.types.js → types/tag.js} +2 -1
- package/dist/types/tag.js.map +1 -0
- package/dist/types/task.d.ts +28 -52
- package/dist/types/task.js +1 -0
- package/dist/types/task.js.map +1 -1
- package/dist/types/taskMiddleware.d.ts +48 -0
- package/dist/{event.types.js → types/taskMiddleware.js} +1 -1
- package/dist/types/taskMiddleware.js.map +1 -0
- package/dist/types/utilities.d.ts +105 -6
- package/dist/types/utilities.js +16 -2
- package/dist/types/utilities.js.map +1 -1
- package/package.json +14 -5
- package/dist/cli/extract-docs.d.ts +0 -2
- package/dist/cli/extract-docs.js +0 -88
- package/dist/cli/extract-docs.js.map +0 -1
- package/dist/common.types.d.ts +0 -20
- package/dist/common.types.js +0 -4
- package/dist/common.types.js.map +0 -1
- package/dist/defs/core.d.ts +0 -144
- package/dist/defs/core.js +0 -6
- package/dist/defs/core.js.map +0 -1
- package/dist/defs/symbols.d.ts +0 -42
- package/dist/defs/symbols.js +0 -45
- package/dist/defs/symbols.js.map +0 -1
- package/dist/defs/tags.d.ts +0 -70
- package/dist/defs/tags.js +0 -6
- package/dist/defs/tags.js.map +0 -1
- package/dist/defs.returnTag.d.ts +0 -36
- package/dist/defs.returnTag.js +0 -4
- package/dist/defs.returnTag.js.map +0 -1
- package/dist/docs/introspect.d.ts +0 -7
- package/dist/docs/introspect.js +0 -199
- package/dist/docs/introspect.js.map +0 -1
- package/dist/docs/markdown.d.ts +0 -2
- package/dist/docs/markdown.js +0 -148
- package/dist/docs/markdown.js.map +0 -1
- package/dist/docs/model.d.ts +0 -62
- package/dist/docs/model.js +0 -33
- package/dist/docs/model.js.map +0 -1
- package/dist/event.types.d.ts +0 -18
- package/dist/event.types.js.map +0 -1
- package/dist/examples/express-mongo/index.d.ts +0 -0
- package/dist/examples/express-mongo/index.js +0 -3
- package/dist/examples/express-mongo/index.js.map +0 -1
- package/dist/examples/registrator-example.d.ts +0 -122
- package/dist/examples/registrator-example.js +0 -147
- package/dist/examples/registrator-example.js.map +0 -1
- package/dist/express/docsRouter.d.ts +0 -12
- package/dist/express/docsRouter.js +0 -54
- package/dist/express/docsRouter.js.map +0 -1
- package/dist/globalEvents.d.ts +0 -40
- package/dist/globalEvents.js +0 -94
- package/dist/globalEvents.js.map +0 -1
- package/dist/globalResources.d.ts +0 -10
- package/dist/globalResources.js +0 -43
- package/dist/globalResources.js.map +0 -1
- package/dist/middleware.types.d.ts +0 -40
- package/dist/middleware.types.js.map +0 -1
- package/dist/models/StoreConstants.d.ts +0 -14
- package/dist/models/StoreConstants.js +0 -19
- package/dist/models/StoreConstants.js.map +0 -1
- package/dist/models/StoreTypes.d.ts +0 -21
- package/dist/models/StoreTypes.js.map +0 -1
- package/dist/models/VarStore.d.ts +0 -17
- package/dist/models/VarStore.js +0 -60
- package/dist/models/VarStore.js.map +0 -1
- package/dist/resource.types.d.ts +0 -31
- package/dist/resource.types.js.map +0 -1
- package/dist/symbols.d.ts +0 -24
- package/dist/symbols.js +0 -29
- package/dist/symbols.js.map +0 -1
- package/dist/t1.d.ts +0 -1
- package/dist/t1.js +0 -13
- package/dist/t1.js.map +0 -1
- package/dist/task.types.d.ts +0 -55
- package/dist/task.types.js.map +0 -1
- package/dist/tools/findCircularDependencies.js.map +0 -1
- package/dist/tools/registratorId.d.ts +0 -4
- package/dist/tools/registratorId.js +0 -40
- package/dist/tools/registratorId.js.map +0 -1
- package/dist/tools/simpleHash.d.ts +0 -9
- package/dist/tools/simpleHash.js +0 -34
- package/dist/tools/simpleHash.js.map +0 -1
- package/dist/types/base-interfaces.d.ts +0 -18
- package/dist/types/base-interfaces.js +0 -6
- package/dist/types/base-interfaces.js.map +0 -1
- package/dist/types/base.d.ts +0 -13
- package/dist/types/base.js.map +0 -1
- package/dist/types/dependencies.d.ts +0 -51
- package/dist/types/dependencies.js +0 -3
- package/dist/types/dependencies.js.map +0 -1
- package/dist/types/dependency-core.d.ts +0 -14
- package/dist/types/dependency-core.js +0 -5
- package/dist/types/dependency-core.js.map +0 -1
- package/dist/types/events.d.ts +0 -52
- package/dist/types/events.js +0 -6
- package/dist/types/events.js.map +0 -1
- package/dist/types/hooks.d.ts +0 -16
- package/dist/types/hooks.js +0 -5
- package/dist/types/hooks.js.map +0 -1
- package/dist/types/index.d.ts +0 -8
- package/dist/types/index.js.map +0 -1
- package/dist/types/metadata.d.ts +0 -75
- package/dist/types/metadata.js.map +0 -1
- package/dist/types/middleware.d.ts +0 -63
- package/dist/types/middleware.js +0 -3
- package/dist/types/middleware.js.map +0 -1
- package/dist/types/registerable.d.ts +0 -10
- package/dist/types/registerable.js +0 -5
- package/dist/types/registerable.js.map +0 -1
- package/dist/types/resources.d.ts +0 -44
- package/dist/types/resources.js +0 -5
- package/dist/types/resources.js.map +0 -1
- package/dist/types/tasks.d.ts +0 -41
- package/dist/types/tasks.js +0 -5
- package/dist/types/tasks.js.map +0 -1
- package/src/__tests__/benchmark/benchmark.test.ts +0 -148
- package/src/__tests__/benchmark/task-benchmark.test.ts +0 -132
- package/src/__tests__/context.test.ts +0 -91
- package/src/__tests__/createTestResource.test.ts +0 -139
- package/src/__tests__/errors.test.ts +0 -341
- package/src/__tests__/globalEvents.test.ts +0 -542
- package/src/__tests__/globals/cache.middleware.test.ts +0 -772
- package/src/__tests__/globals/queue.resource.test.ts +0 -141
- package/src/__tests__/globals/requireContext.middleware.test.ts +0 -98
- package/src/__tests__/globals/retry.middleware.test.ts +0 -157
- package/src/__tests__/globals/timeout.middleware.test.ts +0 -88
- package/src/__tests__/index.helper.test.ts +0 -55
- package/src/__tests__/models/EventManager.test.ts +0 -585
- package/src/__tests__/models/Logger.test.ts +0 -519
- package/src/__tests__/models/Queue.test.ts +0 -189
- package/src/__tests__/models/ResourceInitializer.test.ts +0 -148
- package/src/__tests__/models/Semaphore.test.ts +0 -713
- package/src/__tests__/models/Store.test.ts +0 -227
- package/src/__tests__/models/TaskRunner.test.ts +0 -221
- package/src/__tests__/override.test.ts +0 -104
- package/src/__tests__/recursion/README.md +0 -3
- package/src/__tests__/recursion/a.resource.ts +0 -25
- package/src/__tests__/recursion/b.resource.ts +0 -33
- package/src/__tests__/recursion/c.resource.ts +0 -18
- package/src/__tests__/run.anonymous.test.ts +0 -706
- package/src/__tests__/run.dynamic-register-and-dependencies.test.ts +0 -1185
- package/src/__tests__/run.middleware.test.ts +0 -549
- package/src/__tests__/run.overrides.test.ts +0 -424
- package/src/__tests__/run.test.ts +0 -1040
- package/src/__tests__/setOutput.test.ts +0 -244
- package/src/__tests__/tags.test.ts +0 -396
- package/src/__tests__/tools/findCircularDependencies.test.ts +0 -217
- package/src/__tests__/tools/getCallerFile.test.ts +0 -179
- package/src/__tests__/typesafety.test.ts +0 -423
- package/src/__tests__/validation-edge-cases.test.ts +0 -111
- package/src/__tests__/validation-interface.test.ts +0 -428
- package/src/context.ts +0 -86
- package/src/define.ts +0 -480
- package/src/defs.returnTag.ts +0 -91
- package/src/defs.ts +0 -596
- package/src/errors.ts +0 -105
- package/src/globals/globalEvents.ts +0 -125
- package/src/globals/globalMiddleware.ts +0 -16
- package/src/globals/globalResources.ts +0 -53
- package/src/globals/middleware/cache.middleware.ts +0 -115
- package/src/globals/middleware/requireContext.middleware.ts +0 -36
- package/src/globals/middleware/retry.middleware.ts +0 -56
- package/src/globals/middleware/timeout.middleware.ts +0 -46
- package/src/globals/resources/queue.resource.ts +0 -34
- package/src/index.ts +0 -39
- package/src/models/DependencyProcessor.ts +0 -257
- package/src/models/EventManager.ts +0 -210
- package/src/models/Logger.ts +0 -282
- package/src/models/OverrideManager.ts +0 -79
- package/src/models/Queue.ts +0 -66
- package/src/models/ResourceInitializer.ts +0 -165
- package/src/models/Semaphore.ts +0 -208
- package/src/models/Store.ts +0 -193
- package/src/models/StoreConstants.ts +0 -18
- package/src/models/StoreRegistry.ts +0 -253
- package/src/models/StoreTypes.ts +0 -47
- package/src/models/StoreValidator.ts +0 -43
- package/src/models/TaskRunner.ts +0 -203
- package/src/models/index.ts +0 -8
- package/src/run.ts +0 -116
- package/src/testing.ts +0 -66
- package/src/tools/findCircularDependencies.ts +0 -69
- package/src/tools/getCallerFile.ts +0 -96
- /package/dist/{tools → models/utils}/findCircularDependencies.d.ts +0 -0
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { defineEvent } from "../define";
|
|
2
|
-
import { ITask, IResource, IEvent } from "../defs";
|
|
3
|
-
import { ILog } from "../models/Logger";
|
|
4
|
-
|
|
5
|
-
export const globalEvents = {
|
|
6
|
-
beforeInit: defineEvent({
|
|
7
|
-
id: "globals.events.beforeInit",
|
|
8
|
-
meta: {
|
|
9
|
-
title: "Before Initialization",
|
|
10
|
-
description:
|
|
11
|
-
"Triggered before any resource or system-wide initialization occurs.",
|
|
12
|
-
tags: ["system"],
|
|
13
|
-
},
|
|
14
|
-
}),
|
|
15
|
-
afterInit: defineEvent({
|
|
16
|
-
id: "globals.events.afterInit",
|
|
17
|
-
meta: {
|
|
18
|
-
title: "After Initialization",
|
|
19
|
-
description:
|
|
20
|
-
"Fired after the system or resource initialization is completed.",
|
|
21
|
-
tags: ["system"],
|
|
22
|
-
},
|
|
23
|
-
}),
|
|
24
|
-
log: defineEvent<ILog>({
|
|
25
|
-
id: "globals.events.log",
|
|
26
|
-
meta: {
|
|
27
|
-
title: "Log Event",
|
|
28
|
-
description: "Used to log events and messages across the system.",
|
|
29
|
-
tags: ["system"],
|
|
30
|
-
},
|
|
31
|
-
}),
|
|
32
|
-
tasks: {
|
|
33
|
-
beforeRun: defineEvent<{
|
|
34
|
-
task: ITask<any, any, any>;
|
|
35
|
-
input: any;
|
|
36
|
-
}>({
|
|
37
|
-
id: "globals.events.tasks.beforeRun",
|
|
38
|
-
meta: {
|
|
39
|
-
title: "Before Task Execution",
|
|
40
|
-
description:
|
|
41
|
-
"Triggered before a task starts running, providing access to the input data.",
|
|
42
|
-
tags: ["system"],
|
|
43
|
-
},
|
|
44
|
-
}),
|
|
45
|
-
afterRun: defineEvent<{
|
|
46
|
-
task: ITask<any, any, any>;
|
|
47
|
-
input: any;
|
|
48
|
-
output: any;
|
|
49
|
-
setOutput: (newOutput: any) => void;
|
|
50
|
-
}>({
|
|
51
|
-
id: "globals.events.tasks.afterRun",
|
|
52
|
-
meta: {
|
|
53
|
-
title: "After Task Execution",
|
|
54
|
-
description:
|
|
55
|
-
"Fired after a task has completed, providing both the input and output data.",
|
|
56
|
-
tags: ["system"],
|
|
57
|
-
},
|
|
58
|
-
}),
|
|
59
|
-
onError: defineEvent<{
|
|
60
|
-
error: any;
|
|
61
|
-
suppress: () => void;
|
|
62
|
-
task: ITask<any, any, any>;
|
|
63
|
-
}>({
|
|
64
|
-
id: "globals.events.tasks.onError",
|
|
65
|
-
meta: {
|
|
66
|
-
title: "Task Error",
|
|
67
|
-
description:
|
|
68
|
-
"Triggered when an error occurs during task execution. Allows error suppression.",
|
|
69
|
-
tags: ["system"],
|
|
70
|
-
},
|
|
71
|
-
}),
|
|
72
|
-
},
|
|
73
|
-
resources: {
|
|
74
|
-
beforeInit: defineEvent<{
|
|
75
|
-
resource: IResource<any, any, any>;
|
|
76
|
-
config: any;
|
|
77
|
-
}>({
|
|
78
|
-
id: "globals.events.resources.beforeInit",
|
|
79
|
-
meta: {
|
|
80
|
-
title: "Before Resource Initialization",
|
|
81
|
-
description:
|
|
82
|
-
"Fired before a resource is initialized, with access to the configuration.",
|
|
83
|
-
tags: ["system"],
|
|
84
|
-
},
|
|
85
|
-
}),
|
|
86
|
-
afterInit: defineEvent<{
|
|
87
|
-
resource: IResource<any, any, any>;
|
|
88
|
-
config: any;
|
|
89
|
-
value: any;
|
|
90
|
-
}>({
|
|
91
|
-
id: "globals.events.resources.afterInit",
|
|
92
|
-
meta: {
|
|
93
|
-
title: "After Resource Initialization",
|
|
94
|
-
description:
|
|
95
|
-
"Fired after a resource has been initialized, providing the final value.",
|
|
96
|
-
tags: ["system"],
|
|
97
|
-
},
|
|
98
|
-
}),
|
|
99
|
-
onError: defineEvent<{
|
|
100
|
-
error: Error;
|
|
101
|
-
suppress: () => void;
|
|
102
|
-
resource: IResource<any, any, any>;
|
|
103
|
-
}>({
|
|
104
|
-
id: "globals.events.resources.onError",
|
|
105
|
-
meta: {
|
|
106
|
-
title: "Resource Error",
|
|
107
|
-
description:
|
|
108
|
-
"Triggered when an error occurs during resource initialization. Allows error suppression.",
|
|
109
|
-
tags: ["system"],
|
|
110
|
-
},
|
|
111
|
-
}),
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
export const globalEventsArray = [
|
|
116
|
-
globalEvents.log,
|
|
117
|
-
globalEvents.beforeInit,
|
|
118
|
-
globalEvents.afterInit,
|
|
119
|
-
globalEvents.tasks.beforeRun,
|
|
120
|
-
globalEvents.tasks.afterRun,
|
|
121
|
-
globalEvents.tasks.onError,
|
|
122
|
-
globalEvents.resources.beforeInit,
|
|
123
|
-
globalEvents.resources.afterInit,
|
|
124
|
-
globalEvents.resources.onError,
|
|
125
|
-
];
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Context, ContextError } from "../context";
|
|
2
|
-
import { defineMiddleware } from "../define";
|
|
3
|
-
import { cacheMiddleware } from "./middleware/cache.middleware";
|
|
4
|
-
import { requireContextMiddleware } from "./middleware/requireContext.middleware";
|
|
5
|
-
import { retryMiddleware } from "./middleware/retry.middleware";
|
|
6
|
-
import { timeoutMiddleware } from "./middleware/timeout.middleware";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Global middlewares
|
|
10
|
-
*/
|
|
11
|
-
export const globalMiddlewares = {
|
|
12
|
-
requireContext: requireContextMiddleware,
|
|
13
|
-
retry: retryMiddleware,
|
|
14
|
-
cache: cacheMiddleware,
|
|
15
|
-
timeout: timeoutMiddleware,
|
|
16
|
-
};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { defineResource } from "../define";
|
|
2
|
-
import { EventManager } from "../models/EventManager";
|
|
3
|
-
import { Logger } from "../models/Logger";
|
|
4
|
-
import { Store } from "../models/Store";
|
|
5
|
-
import { TaskRunner } from "../models/TaskRunner";
|
|
6
|
-
import { cacheResource } from "./middleware/cache.middleware";
|
|
7
|
-
import { queueResource } from "./resources/queue.resource";
|
|
8
|
-
|
|
9
|
-
const store = defineResource({
|
|
10
|
-
id: "globals.resources.store",
|
|
11
|
-
init: async (store: Store) => store,
|
|
12
|
-
meta: {
|
|
13
|
-
title: "Store",
|
|
14
|
-
description:
|
|
15
|
-
"A global store that can be used to store and retrieve tasks, resources, events and middleware",
|
|
16
|
-
tags: ["internal"],
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
export const globalResources = {
|
|
21
|
-
store,
|
|
22
|
-
eventManager: defineResource({
|
|
23
|
-
id: "globals.resources.eventManager",
|
|
24
|
-
init: async (em: EventManager) => em,
|
|
25
|
-
meta: {
|
|
26
|
-
title: "Event Manager",
|
|
27
|
-
description:
|
|
28
|
-
"Manages all events and event listeners. This is meant to be used internally for most use-cases.",
|
|
29
|
-
tags: ["internal"],
|
|
30
|
-
},
|
|
31
|
-
}),
|
|
32
|
-
taskRunner: defineResource({
|
|
33
|
-
id: "globals.resources.taskRunner",
|
|
34
|
-
init: async (runner: TaskRunner) => runner,
|
|
35
|
-
meta: {
|
|
36
|
-
title: "Task Runner",
|
|
37
|
-
description:
|
|
38
|
-
"Manages the execution of tasks and task dependencies. This is meant to be used internally for most use-cases.",
|
|
39
|
-
tags: ["internal"],
|
|
40
|
-
},
|
|
41
|
-
}),
|
|
42
|
-
logger: defineResource({
|
|
43
|
-
id: "globals.resources.logger",
|
|
44
|
-
init: async (logger: Logger) => logger,
|
|
45
|
-
meta: {
|
|
46
|
-
title: "Logger",
|
|
47
|
-
description:
|
|
48
|
-
"Logs all events and errors. This is meant to be used internally for most use-cases. Emits a globals.log event for each log.",
|
|
49
|
-
},
|
|
50
|
-
}),
|
|
51
|
-
cache: cacheResource,
|
|
52
|
-
queue: queueResource,
|
|
53
|
-
};
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { defineMiddleware, defineResource, defineTask } from "../../define";
|
|
2
|
-
import { LRUCache } from "lru-cache";
|
|
3
|
-
import { IResource, ITask } from "../../defs";
|
|
4
|
-
|
|
5
|
-
export interface ICacheInstance {
|
|
6
|
-
set(key: string, value: any): void;
|
|
7
|
-
get(key: string): any;
|
|
8
|
-
clear(): void;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// Default cache factory task that can be overridden
|
|
12
|
-
export const cacheFactoryTask = defineTask({
|
|
13
|
-
id: "globals.tasks.cacheFactory",
|
|
14
|
-
run: async (options: any) => {
|
|
15
|
-
return new LRUCache(options) as ICacheInstance;
|
|
16
|
-
},
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
type CacheResourceConfig = {
|
|
20
|
-
defaultOptions?: any;
|
|
21
|
-
/**
|
|
22
|
-
* This specifies whether the cache handler is async or not (get, set, clear)
|
|
23
|
-
* This is for speed purposes.
|
|
24
|
-
*/
|
|
25
|
-
async?: boolean;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
type CacheMiddlewareConfig = {
|
|
29
|
-
keyBuilder?: (taskId: string, input: any) => string;
|
|
30
|
-
} & any;
|
|
31
|
-
|
|
32
|
-
export const cacheResource = defineResource({
|
|
33
|
-
id: "globals.resources.cache",
|
|
34
|
-
register: [cacheFactoryTask],
|
|
35
|
-
dependencies: {
|
|
36
|
-
cacheFactoryTask,
|
|
37
|
-
},
|
|
38
|
-
init: async (config: CacheResourceConfig, { cacheFactoryTask }) => {
|
|
39
|
-
return {
|
|
40
|
-
map: new Map<string | symbol, ICacheInstance>(),
|
|
41
|
-
cacheFactoryTask,
|
|
42
|
-
async: config.async,
|
|
43
|
-
defaultOptions: {
|
|
44
|
-
ttl: 10 * 1000,
|
|
45
|
-
max: 100, // Maximum number of items in cache
|
|
46
|
-
ttlAutopurge: true, // Automatically purge expired items
|
|
47
|
-
...config.defaultOptions,
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
},
|
|
51
|
-
dispose: async (cache) => {
|
|
52
|
-
for (const cacheInstance of cache.map.values()) {
|
|
53
|
-
await cacheInstance.clear();
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
const defaultKeyBuilder = (taskId: string, input: any) =>
|
|
59
|
-
`${taskId}-${JSON.stringify(input)}`;
|
|
60
|
-
|
|
61
|
-
export const cacheMiddleware = defineMiddleware({
|
|
62
|
-
id: "globals.middleware.cache",
|
|
63
|
-
dependencies: { cache: cacheResource },
|
|
64
|
-
async run({ task, resource, next }, deps, config: CacheMiddlewareConfig) {
|
|
65
|
-
const { cache } = deps;
|
|
66
|
-
config = {
|
|
67
|
-
keyBuilder: defaultKeyBuilder,
|
|
68
|
-
ttl: 10 * 1000,
|
|
69
|
-
max: 100, // Maximum number of items in cache
|
|
70
|
-
ttlAutopurge: true, // Automatically purge expired items
|
|
71
|
-
...config,
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
if (!task) {
|
|
75
|
-
throw new Error("Cache middleware can only be used in tasks");
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const taskId = task.definition.id;
|
|
79
|
-
const isAsync = cache.async;
|
|
80
|
-
let cacheHolderForTask = cache.map.get(taskId);
|
|
81
|
-
if (!cacheHolderForTask) {
|
|
82
|
-
// Extract only LRUCache options, excluding keyBuilder
|
|
83
|
-
const { keyBuilder, ...lruOptions } = config;
|
|
84
|
-
const cacheOptions = {
|
|
85
|
-
...cache.defaultOptions,
|
|
86
|
-
...lruOptions,
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
// Use the factory task to create the cache instance
|
|
90
|
-
cacheHolderForTask = await cache.cacheFactoryTask(cacheOptions);
|
|
91
|
-
|
|
92
|
-
cache.map.set(taskId, cacheHolderForTask);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const key = config.keyBuilder!(taskId, task.input);
|
|
96
|
-
|
|
97
|
-
const cachedValue = isAsync
|
|
98
|
-
? await cacheHolderForTask.get(key)
|
|
99
|
-
: cacheHolderForTask.get(key);
|
|
100
|
-
|
|
101
|
-
if (cachedValue) {
|
|
102
|
-
return cachedValue;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const result = await next(task.input);
|
|
106
|
-
|
|
107
|
-
if (isAsync) {
|
|
108
|
-
await cacheHolderForTask.set(key, result);
|
|
109
|
-
} else {
|
|
110
|
-
cacheHolderForTask.set(key, result);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return result;
|
|
114
|
-
},
|
|
115
|
-
});
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Context, ContextError } from "../../context";
|
|
2
|
-
import { defineMiddleware } from "../../define";
|
|
3
|
-
|
|
4
|
-
type RequireContextMiddlewareConfig = {
|
|
5
|
-
context: Context<any>;
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
export const requireContextMiddleware = defineMiddleware({
|
|
9
|
-
id: "globals.middleware.requireContext",
|
|
10
|
-
async run(
|
|
11
|
-
{ task, resource, next },
|
|
12
|
-
deps,
|
|
13
|
-
config: RequireContextMiddlewareConfig
|
|
14
|
-
) {
|
|
15
|
-
if (!config.context) {
|
|
16
|
-
throw new Error(
|
|
17
|
-
"Context not available. Did you forget to pass 'context' to the middleware?"
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const ctx = config.context.use();
|
|
22
|
-
if (!ctx) {
|
|
23
|
-
throw new ContextError(
|
|
24
|
-
"Context not available. Did you forget to provide the context via ContextName.provide()?"
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
if (task) {
|
|
28
|
-
return next(task.input);
|
|
29
|
-
}
|
|
30
|
-
if (resource) {
|
|
31
|
-
return next(resource.config);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return next();
|
|
35
|
-
},
|
|
36
|
-
});
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { defineMiddleware } from "../../define";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Configuration options for the retry middleware
|
|
5
|
-
*/
|
|
6
|
-
export interface RetryMiddlewareConfig {
|
|
7
|
-
/**
|
|
8
|
-
* Maximum number of retry attempts (default: 3)
|
|
9
|
-
*/
|
|
10
|
-
retries?: number;
|
|
11
|
-
/**
|
|
12
|
-
* Callback to determine if retry should stop based on error
|
|
13
|
-
* @default () => false (retry all errors)
|
|
14
|
-
*/
|
|
15
|
-
stopRetryIf?: (error: Error) => boolean;
|
|
16
|
-
/**
|
|
17
|
-
* Custom delay strategy function
|
|
18
|
-
* @default Exponential backoff starting at 100ms
|
|
19
|
-
*/
|
|
20
|
-
delayStrategy?: (attempt: number, error: Error) => number;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export const retryMiddleware = defineMiddleware({
|
|
24
|
-
id: "globals.middleware.retry",
|
|
25
|
-
async run({ task, resource, next }, deps, config: RetryMiddlewareConfig) {
|
|
26
|
-
const input = task ? task.input : resource?.config;
|
|
27
|
-
let attempts = 0;
|
|
28
|
-
|
|
29
|
-
// Set defaults for required parameters
|
|
30
|
-
const maxRetries = config.retries ?? 3;
|
|
31
|
-
const shouldStop = config.stopRetryIf ?? (() => false);
|
|
32
|
-
|
|
33
|
-
while (true) {
|
|
34
|
-
try {
|
|
35
|
-
return await next(input);
|
|
36
|
-
} catch (error) {
|
|
37
|
-
const err = error as Error;
|
|
38
|
-
|
|
39
|
-
if (shouldStop(err) || attempts >= maxRetries) {
|
|
40
|
-
throw error;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Calculate delay using custom strategy or default exponential backoff
|
|
44
|
-
const delay = config.delayStrategy
|
|
45
|
-
? config.delayStrategy(attempts, err)
|
|
46
|
-
: 100 * Math.pow(2, attempts);
|
|
47
|
-
|
|
48
|
-
if (delay > 0) {
|
|
49
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
attempts++;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
});
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { defineMiddleware } from "../../define";
|
|
2
|
-
|
|
3
|
-
export interface TimeoutMiddlewareConfig {
|
|
4
|
-
/**
|
|
5
|
-
* Maximum time in milliseconds before the wrapped operation is aborted
|
|
6
|
-
* and a timeout error is thrown. Defaults to 5000ms.
|
|
7
|
-
*/
|
|
8
|
-
ttl: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export const timeoutMiddleware = defineMiddleware({
|
|
12
|
-
id: "globals.middleware.timeout",
|
|
13
|
-
async run({ task, resource, next }, _deps, config: TimeoutMiddlewareConfig) {
|
|
14
|
-
const input = task ? task.input : resource?.config;
|
|
15
|
-
|
|
16
|
-
const ttl = Math.max(0, config.ttl);
|
|
17
|
-
const message = `Operation timed out after ${ttl}ms`;
|
|
18
|
-
|
|
19
|
-
// Fast-path: immediate timeout
|
|
20
|
-
if (ttl === 0) {
|
|
21
|
-
const error = new Error(message);
|
|
22
|
-
(error as any).name = "TimeoutError";
|
|
23
|
-
throw error;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const controller = new AbortController();
|
|
27
|
-
|
|
28
|
-
// Create a timeout promise that rejects when aborted
|
|
29
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
30
|
-
const timeoutId = setTimeout(() => {
|
|
31
|
-
controller.abort();
|
|
32
|
-
const error = new Error(message);
|
|
33
|
-
(error as any).name = "TimeoutError";
|
|
34
|
-
reject(error);
|
|
35
|
-
}, ttl);
|
|
36
|
-
|
|
37
|
-
// Clean up timeout if abort signal fires for other reasons
|
|
38
|
-
controller.signal.addEventListener("abort", () => {
|
|
39
|
-
clearTimeout(timeoutId);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
// Race between the actual operation and the timeout
|
|
44
|
-
return Promise.race([next(input), timeoutPromise]);
|
|
45
|
-
},
|
|
46
|
-
});
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { defineResource } from "../../define";
|
|
2
|
-
import { Queue } from "../../models/Queue";
|
|
3
|
-
|
|
4
|
-
export const queueResource = defineResource({
|
|
5
|
-
id: "globals.resources.queue",
|
|
6
|
-
context: () => ({
|
|
7
|
-
map: new Map<string | symbol, Queue>(),
|
|
8
|
-
}),
|
|
9
|
-
init: async (_, deps, context) => {
|
|
10
|
-
const map = context.map;
|
|
11
|
-
|
|
12
|
-
return {
|
|
13
|
-
map,
|
|
14
|
-
run: <T>(
|
|
15
|
-
id: string,
|
|
16
|
-
task: (signal: AbortSignal) => Promise<T>
|
|
17
|
-
): Promise<T> => {
|
|
18
|
-
if (!map.has(id)) {
|
|
19
|
-
map.set(id, new Queue());
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return map.get(id)!.run(task);
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
},
|
|
26
|
-
dispose: async (value, _, deps, context) => {
|
|
27
|
-
context.map.forEach((queue) => queue.dispose());
|
|
28
|
-
},
|
|
29
|
-
meta: {
|
|
30
|
-
title: "Queue Map",
|
|
31
|
-
description:
|
|
32
|
-
"A global map that can be used to store and retrieve queues. You can run exclusive tasks based on using an id. queue.run(id, task) will run the task in the queue with the given id. If the queue does not exist, it will be created.",
|
|
33
|
-
},
|
|
34
|
-
});
|
package/src/index.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
defineTask,
|
|
3
|
-
defineResource,
|
|
4
|
-
defineEvent,
|
|
5
|
-
defineMiddleware,
|
|
6
|
-
defineIndex,
|
|
7
|
-
defineTag,
|
|
8
|
-
defineOverride,
|
|
9
|
-
} from "./define";
|
|
10
|
-
import { createContext } from "./context";
|
|
11
|
-
import { globalEvents } from "./globals/globalEvents";
|
|
12
|
-
import { globalResources } from "./globals/globalResources";
|
|
13
|
-
import { globalMiddlewares } from "./globals/globalMiddleware";
|
|
14
|
-
import { run } from "./run";
|
|
15
|
-
import { createTestResource } from "./testing";
|
|
16
|
-
|
|
17
|
-
const globals = {
|
|
18
|
-
events: globalEvents,
|
|
19
|
-
resources: globalResources,
|
|
20
|
-
middlewares: globalMiddlewares,
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export { globals };
|
|
24
|
-
export {
|
|
25
|
-
defineTask as task,
|
|
26
|
-
defineResource as resource,
|
|
27
|
-
defineEvent as event,
|
|
28
|
-
defineMiddleware as middleware,
|
|
29
|
-
defineIndex as index,
|
|
30
|
-
defineTag as tag,
|
|
31
|
-
defineOverride as override,
|
|
32
|
-
run,
|
|
33
|
-
createContext,
|
|
34
|
-
createTestResource,
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export * as definitions from "./defs";
|
|
38
|
-
export { Semaphore, Store, EventManager, TaskRunner, Queue } from "./models";
|
|
39
|
-
export * as Errors from "./errors";
|