@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,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TaskRunner = void 0;
|
|
4
|
-
const globalEvents_1 = require("../globals/globalEvents");
|
|
5
|
-
const errors_1 = require("../errors");
|
|
6
4
|
class TaskRunner {
|
|
7
5
|
store;
|
|
8
6
|
eventManager;
|
|
@@ -12,7 +10,11 @@ class TaskRunner {
|
|
|
12
10
|
this.store = store;
|
|
13
11
|
this.eventManager = eventManager;
|
|
14
12
|
this.logger = logger;
|
|
13
|
+
// Use the same MiddlewareManager instance from the Store so that
|
|
14
|
+
// any interceptors registered via resources (like debug) affect task runs.
|
|
15
|
+
this.middlewareManager = this.store.getMiddlewareManager();
|
|
15
16
|
}
|
|
17
|
+
middlewareManager;
|
|
16
18
|
/**
|
|
17
19
|
* Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.
|
|
18
20
|
* This function can throw only if any of the event listeners or run function throws
|
|
@@ -25,68 +27,7 @@ class TaskRunner {
|
|
|
25
27
|
runner = this.createRunnerWithMiddleware(task);
|
|
26
28
|
this.runnerStore.set(task.id, runner);
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
if (!isGlobalEventListener) {
|
|
30
|
-
await this.eventManager.emit(task.events.beforeRun, { input }, task.id);
|
|
31
|
-
}
|
|
32
|
-
if (!isGlobalEventListener &&
|
|
33
|
-
task.on !== globalEvents_1.globalEvents.tasks.beforeRun &&
|
|
34
|
-
task.on !== globalEvents_1.globalEvents.tasks.afterRun) {
|
|
35
|
-
await this.eventManager.emit(globalEvents_1.globalEvents.tasks.beforeRun, {
|
|
36
|
-
task,
|
|
37
|
-
input,
|
|
38
|
-
}, task.id);
|
|
39
|
-
}
|
|
40
|
-
let error;
|
|
41
|
-
try {
|
|
42
|
-
// craft the next function starting from the first next function
|
|
43
|
-
const result = {
|
|
44
|
-
output: await runner(input),
|
|
45
|
-
};
|
|
46
|
-
const setOutput = (newOutput) => {
|
|
47
|
-
result.output = newOutput;
|
|
48
|
-
};
|
|
49
|
-
// If it's a global event listener, we stop emitting so we don't get into an infinite loop.
|
|
50
|
-
if (!isGlobalEventListener) {
|
|
51
|
-
await this.eventManager.emit(task.events.afterRun, {
|
|
52
|
-
input,
|
|
53
|
-
get output() {
|
|
54
|
-
return result.output;
|
|
55
|
-
},
|
|
56
|
-
setOutput,
|
|
57
|
-
}, task.id);
|
|
58
|
-
}
|
|
59
|
-
if (!isGlobalEventListener &&
|
|
60
|
-
task.on !== globalEvents_1.globalEvents.tasks.beforeRun &&
|
|
61
|
-
task.on !== globalEvents_1.globalEvents.tasks.afterRun) {
|
|
62
|
-
// If it's a lifecycle listener we prevent from emitting further events.
|
|
63
|
-
await this.eventManager.emit(globalEvents_1.globalEvents.tasks.afterRun, {
|
|
64
|
-
task,
|
|
65
|
-
input,
|
|
66
|
-
get output() {
|
|
67
|
-
return result.output;
|
|
68
|
-
},
|
|
69
|
-
setOutput,
|
|
70
|
-
}, task.id);
|
|
71
|
-
}
|
|
72
|
-
return result.output;
|
|
73
|
-
}
|
|
74
|
-
catch (e) {
|
|
75
|
-
let isSuppressed = false;
|
|
76
|
-
function suppress() {
|
|
77
|
-
isSuppressed = true;
|
|
78
|
-
}
|
|
79
|
-
error = e;
|
|
80
|
-
// If you want to rewthrow the error, this should be done inside the onError event.
|
|
81
|
-
await this.eventManager.emit(task.events.onError, { error, suppress }, task.id);
|
|
82
|
-
await this.eventManager.emit(globalEvents_1.globalEvents.tasks.onError, {
|
|
83
|
-
task,
|
|
84
|
-
error,
|
|
85
|
-
suppress,
|
|
86
|
-
}, task.id);
|
|
87
|
-
if (!isSuppressed)
|
|
88
|
-
throw e;
|
|
89
|
-
}
|
|
30
|
+
return await runner(input);
|
|
90
31
|
}
|
|
91
32
|
/**
|
|
92
33
|
* Creates the function with the chain of middleware.
|
|
@@ -96,45 +37,7 @@ class TaskRunner {
|
|
|
96
37
|
* @returns
|
|
97
38
|
*/
|
|
98
39
|
createRunnerWithMiddleware(task) {
|
|
99
|
-
|
|
100
|
-
// this is the final next()
|
|
101
|
-
let next = async (input) => {
|
|
102
|
-
// Validate input with schema if provided
|
|
103
|
-
if (task.inputSchema) {
|
|
104
|
-
try {
|
|
105
|
-
input = task.inputSchema.parse(input);
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
throw new errors_1.ValidationError("Task input", task.id, error instanceof Error ? error : new Error(String(error)));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return task.run.call(null, input, storeTask?.computedDependencies);
|
|
112
|
-
};
|
|
113
|
-
const existingMiddlewares = task.middleware;
|
|
114
|
-
const createdMiddlewares = [
|
|
115
|
-
...this.store.getEverywhereMiddlewareForTasks(existingMiddlewares.map((x) => x.id)),
|
|
116
|
-
...existingMiddlewares,
|
|
117
|
-
];
|
|
118
|
-
if (createdMiddlewares.length === 0) {
|
|
119
|
-
return next;
|
|
120
|
-
}
|
|
121
|
-
// we need to run the middleware in reverse order
|
|
122
|
-
// so we can chain the next function
|
|
123
|
-
for (let i = createdMiddlewares.length - 1; i >= 0; i--) {
|
|
124
|
-
const middleware = createdMiddlewares[i];
|
|
125
|
-
const storeMiddleware = this.store.middlewares.get(middleware.id); // we know it exists because at this stage all sanity checks have been done.
|
|
126
|
-
const nextFunction = next;
|
|
127
|
-
next = async (input) => {
|
|
128
|
-
return storeMiddleware.middleware.run({
|
|
129
|
-
task: {
|
|
130
|
-
definition: task,
|
|
131
|
-
input,
|
|
132
|
-
},
|
|
133
|
-
next: nextFunction,
|
|
134
|
-
}, storeMiddleware.computedDependencies, middleware.config);
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
return next;
|
|
40
|
+
return this.middlewareManager.composeTaskRunner(task);
|
|
138
41
|
}
|
|
139
42
|
}
|
|
140
43
|
exports.TaskRunner = TaskRunner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../src/models/TaskRunner.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../src/models/TaskRunner.ts"],"names":[],"mappings":";;;AAQA,MAAa,UAAU;IAOA;IACA;IACA;IARF,WAAW,GAAG,IAAI,GAAG,EAGrC,CAAC;IAEJ,YACqB,KAAY,EACZ,YAA0B,EAC1B,MAAc;QAFd,UAAK,GAAL,KAAK,CAAO;QACZ,iBAAY,GAAZ,YAAY,CAAc;QAC1B,WAAM,GAAN,MAAM,CAAQ;QAEjC,iEAAiE;QACjE,2EAA2E;QAC3E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAC7D,CAAC;IAEgB,iBAAiB,CAAoB;IAEtD;;;;;OAKG;IACI,KAAK,CAAC,GAAG,CAKd,IAAmC,EACnC,KAAc;QAEd,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAyB,IAAI,CAAC,CAAC;YAEvE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACO,0BAA0B,CAIlC,IAAmC;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;CACF;AAxDD,gCAwDC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Logger } from "./Logger";
|
|
2
|
+
export type UnhandledErrorKind = "process" | "task" | "middleware" | "resourceInit" | "hook" | "run";
|
|
3
|
+
export interface OnUnhandledErrorInfo {
|
|
4
|
+
error: unknown;
|
|
5
|
+
kind?: UnhandledErrorKind;
|
|
6
|
+
source?: string;
|
|
7
|
+
}
|
|
8
|
+
export type OnUnhandledError = (info: OnUnhandledErrorInfo) => void | Promise<void>;
|
|
9
|
+
export declare function createDefaultUnhandledError(logger: Logger): OnUnhandledError;
|
|
10
|
+
export declare function bindProcessErrorHandler(handler: OnUnhandledError): (error: unknown, source: "uncaughtException" | "unhandledRejection") => void | Promise<void>;
|
|
11
|
+
export declare function safeReportUnhandledError(handler: OnUnhandledError, info: OnUnhandledErrorInfo): Promise<void>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDefaultUnhandledError = createDefaultUnhandledError;
|
|
4
|
+
exports.bindProcessErrorHandler = bindProcessErrorHandler;
|
|
5
|
+
exports.safeReportUnhandledError = safeReportUnhandledError;
|
|
6
|
+
function createDefaultUnhandledError(logger) {
|
|
7
|
+
return async ({ error, kind, source }) => {
|
|
8
|
+
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
9
|
+
await logger.error(`${normalizedError.toString()}`, {
|
|
10
|
+
source,
|
|
11
|
+
error: normalizedError,
|
|
12
|
+
data: kind ? { kind } : undefined,
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function bindProcessErrorHandler(handler) {
|
|
17
|
+
return async (error, source) => {
|
|
18
|
+
try {
|
|
19
|
+
await handler({ error, kind: "process", source });
|
|
20
|
+
}
|
|
21
|
+
catch { }
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async function safeReportUnhandledError(handler, info) {
|
|
25
|
+
try {
|
|
26
|
+
await handler(info);
|
|
27
|
+
}
|
|
28
|
+
catch { }
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=UnhandledError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnhandledError.js","sourceRoot":"","sources":["../../src/models/UnhandledError.ts"],"names":[],"mappings":";;AAoBA,kEAUC;AAED,0DAWC;AAED,4DAOC;AAhCD,SAAgB,2BAA2B,CAAC,MAAc;IACxD,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAwB,EAAE,EAAE;QAC7D,MAAM,eAAe,GACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE;YAClD,MAAM;YACN,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;SAClC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,uBAAuB,CACrC,OAAyB;IAKzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,wBAAwB,CAC5C,OAAyB,EACzB,IAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC"}
|
package/dist/models/index.d.ts
CHANGED
|
@@ -4,5 +4,8 @@ export * from "./Logger";
|
|
|
4
4
|
export * from "./Store";
|
|
5
5
|
export * from "./TaskRunner";
|
|
6
6
|
export * from "./ResourceInitializer";
|
|
7
|
+
export * from "./MiddlewareManager";
|
|
7
8
|
export * from "./Semaphore";
|
|
8
9
|
export * from "./Queue";
|
|
10
|
+
export * from "./UnhandledError";
|
|
11
|
+
export * from "./RunResult";
|
package/dist/models/index.js
CHANGED
|
@@ -20,6 +20,9 @@ __exportStar(require("./Logger"), exports);
|
|
|
20
20
|
__exportStar(require("./Store"), exports);
|
|
21
21
|
__exportStar(require("./TaskRunner"), exports);
|
|
22
22
|
__exportStar(require("./ResourceInitializer"), exports);
|
|
23
|
+
__exportStar(require("./MiddlewareManager"), exports);
|
|
23
24
|
__exportStar(require("./Semaphore"), exports);
|
|
24
25
|
__exportStar(require("./Queue"), exports);
|
|
26
|
+
__exportStar(require("./UnhandledError"), exports);
|
|
27
|
+
__exportStar(require("./RunResult"), exports);
|
|
25
28
|
//# sourceMappingURL=index.js.map
|
package/dist/models/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,iDAA+B;AAC/B,2CAAyB;AACzB,0CAAwB;AACxB,+CAA6B;AAC7B,wDAAsC;AACtC,8CAA4B;AAC5B,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,iDAA+B;AAC/B,2CAAyB;AACzB,0CAAwB;AACxB,+CAA6B;AAC7B,wDAAsC;AACtC,sDAAoC;AACpC,8CAA4B;AAC5B,0CAAwB;AACxB,mDAAiC;AACjC,8CAA4B"}
|
|
@@ -21,23 +21,15 @@ function findCircularDependencies(nodes) {
|
|
|
21
21
|
visited.add(node.id);
|
|
22
22
|
stack.add(node.id);
|
|
23
23
|
path.push(node.id);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
dfs(dependentNode);
|
|
24
|
+
for (const [depKey, dependentNode] of Object.entries(node.dependencies)) {
|
|
25
|
+
if (!dependentNode) {
|
|
26
|
+
result.missingDependencies.push({
|
|
27
|
+
nodeId: node.id,
|
|
28
|
+
dependencyId: depKey,
|
|
29
|
+
});
|
|
30
|
+
continue;
|
|
34
31
|
}
|
|
35
|
-
|
|
36
|
-
else {
|
|
37
|
-
result.missingDependencies.push({
|
|
38
|
-
nodeId: node.id,
|
|
39
|
-
dependencyId: "unknown",
|
|
40
|
-
});
|
|
32
|
+
dfs(dependentNode);
|
|
41
33
|
}
|
|
42
34
|
stack.delete(node.id);
|
|
43
35
|
path.pop();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findCircularDependencies.js","sourceRoot":"","sources":["../../../src/models/utils/findCircularDependencies.ts"],"names":[],"mappings":";;AAaA,4DAgDC;AAhDD,SAAgB,wBAAwB,CACtC,KAAuB;IAEvB,MAAM,MAAM,GAAmC;QAC7C,MAAM,EAAE,EAAE;QACV,mBAAmB,EAAE,EAAE;KACxB,CAAC;IACF,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;IACvC,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;IACrC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,SAAS,GAAG,CAAC,IAAoB;QAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACvB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAO;QAEjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnB,KAAK,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;oBAC9B,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,YAAY,EAAE,MAAM;iBACrB,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YACD,GAAG,CAAC,aAAa,CAAC,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,0BAA0B;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.safeStringify = safeStringify;
|
|
4
|
+
function safeStringify(value, space, options) {
|
|
5
|
+
const seen = new WeakSet();
|
|
6
|
+
const holderDepth = new WeakMap();
|
|
7
|
+
const maxDepth = typeof options?.maxDepth === "number" ? options.maxDepth : Infinity;
|
|
8
|
+
const replacer = function (_key, val) {
|
|
9
|
+
// Normalize functions to a readable placeholder
|
|
10
|
+
if (typeof val === "function") {
|
|
11
|
+
return "function()";
|
|
12
|
+
}
|
|
13
|
+
// Normalize BigInt safely
|
|
14
|
+
if (typeof val === "bigint") {
|
|
15
|
+
return val.toString();
|
|
16
|
+
}
|
|
17
|
+
// Compute the depth of the current value based on its holder (this)
|
|
18
|
+
const holderObject = Object(this);
|
|
19
|
+
const parentDepth = holderDepth.get(holderObject) || 0;
|
|
20
|
+
const currentDepth = parentDepth + 1;
|
|
21
|
+
if (typeof val === "object" && val !== null) {
|
|
22
|
+
if (seen.has(val))
|
|
23
|
+
return "[Circular]";
|
|
24
|
+
// Apply depth limiting beyond the configured depth
|
|
25
|
+
if (currentDepth > maxDepth) {
|
|
26
|
+
return Array.isArray(val) ? "[Array]" : "[Object]";
|
|
27
|
+
}
|
|
28
|
+
seen.add(val);
|
|
29
|
+
holderDepth.set(val, currentDepth);
|
|
30
|
+
}
|
|
31
|
+
return val;
|
|
32
|
+
};
|
|
33
|
+
try {
|
|
34
|
+
return JSON.stringify(value, replacer, space);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
try {
|
|
38
|
+
return String(value);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return "[Unserializable]";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=safeStringify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeStringify.js","sourceRoot":"","sources":["../../../src/models/utils/safeStringify.ts"],"names":[],"mappings":";;AAAA,sCAkDC;AAlDD,SAAgB,aAAa,CAC3B,KAAc,EACd,KAAc,EACd,OAA+B;IAE/B,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;IACnC,MAAM,WAAW,GAAG,IAAI,OAAO,EAAkB,CAAC;IAElD,MAAM,QAAQ,GACZ,OAAO,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAQ,CAAC,QAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAExE,MAAM,QAAQ,GAAG,UAAqB,IAAY,EAAE,GAAQ;QAC1D,gDAAgD;QAChD,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,0BAA0B;QAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QAED,oEAAoE;QACpE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,YAAsB,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAC;QAErC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,YAAY,CAAC;YAEvC,mDAAmD;YACnD,IAAI,YAAY,GAAG,QAAQ,EAAE,CAAC;gBAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;YACrD,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAgD,CAAC;IAEjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerProcessLevelSafetyNets = registerProcessLevelSafetyNets;
|
|
4
|
+
exports.registerShutdownHook = registerShutdownHook;
|
|
5
|
+
// Global registry of active error handlers for process-level safety nets
|
|
6
|
+
const activeErrorHandlers = new Set();
|
|
7
|
+
let processSafetyNetsInstalled = false;
|
|
8
|
+
function installGlobalProcessSafetyNetsOnce() {
|
|
9
|
+
if (processSafetyNetsInstalled)
|
|
10
|
+
return;
|
|
11
|
+
processSafetyNetsInstalled = true;
|
|
12
|
+
const onUncaughtException = async (err) => {
|
|
13
|
+
for (const handler of activeErrorHandlers) {
|
|
14
|
+
try {
|
|
15
|
+
await handler(err, "uncaughtException");
|
|
16
|
+
}
|
|
17
|
+
catch (_) { }
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const onUnhandledRejection = async (reason) => {
|
|
21
|
+
for (const handler of activeErrorHandlers) {
|
|
22
|
+
try {
|
|
23
|
+
await handler(reason, "unhandledRejection");
|
|
24
|
+
}
|
|
25
|
+
catch (_) { }
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
process.on("uncaughtException", onUncaughtException);
|
|
29
|
+
process.on("unhandledRejection", onUnhandledRejection);
|
|
30
|
+
}
|
|
31
|
+
function registerProcessLevelSafetyNets(handler) {
|
|
32
|
+
installGlobalProcessSafetyNetsOnce();
|
|
33
|
+
activeErrorHandlers.add(handler);
|
|
34
|
+
return () => {
|
|
35
|
+
activeErrorHandlers.delete(handler);
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Global shutdown registry: one listener per signal, dispatching to active disposers
|
|
39
|
+
const activeDisposers = new Set();
|
|
40
|
+
let shutdownHooksInstalled = false;
|
|
41
|
+
function installGlobalShutdownHooksOnce() {
|
|
42
|
+
if (shutdownHooksInstalled)
|
|
43
|
+
return;
|
|
44
|
+
shutdownHooksInstalled = true;
|
|
45
|
+
const handler = async (signal) => {
|
|
46
|
+
try {
|
|
47
|
+
const disposers = Array.from(activeDisposers);
|
|
48
|
+
for (const d of disposers) {
|
|
49
|
+
try {
|
|
50
|
+
await d();
|
|
51
|
+
}
|
|
52
|
+
catch { }
|
|
53
|
+
activeDisposers.delete(d);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
process.on("SIGINT", handler);
|
|
61
|
+
process.on("SIGTERM", handler);
|
|
62
|
+
}
|
|
63
|
+
function registerShutdownHook(disposeOnce) {
|
|
64
|
+
installGlobalShutdownHooksOnce();
|
|
65
|
+
activeDisposers.add(disposeOnce);
|
|
66
|
+
return () => {
|
|
67
|
+
activeDisposers.delete(disposeOnce);
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=processHooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processHooks.js","sourceRoot":"","sources":["../src/processHooks.ts"],"names":[],"mappings":";;AAgCA,wEAWC;AA0BD,oDAMC;AAzED,yEAAyE;AACzE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAKhC,CAAC;AACJ,IAAI,0BAA0B,GAAG,KAAK,CAAC;AAEvC,SAAS,kCAAkC;IACzC,IAAI,0BAA0B;QAAE,OAAO;IACvC,0BAA0B,GAAG,IAAI,CAAC;IAClC,MAAM,mBAAmB,GAAG,KAAK,EAAE,GAAQ,EAAE,EAAE;QAC7C,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,oBAAoB,GAAG,KAAK,EAAE,MAAW,EAAE,EAAE;QACjD,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,mBAA0B,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,oBAA2B,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,8BAA8B,CAC5C,OAGyB;IAEzB,kCAAkC,EAAE,CAAC;IACrC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,GAAG,EAAE;QACV,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuB,CAAC;AACvD,IAAI,sBAAsB,GAAG,KAAK,CAAC;AAEnC,SAAS,8BAA8B;IACrC,IAAI,sBAAsB;QAAE,OAAO;IACnC,sBAAsB,GAAG,IAAI,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,EAAE,MAAsB,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,CAAC,EAAE,CAAC;gBACZ,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACV,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,SAAgB,oBAAoB,CAAC,WAAgC;IACnE,8BAA8B,EAAE,CAAC;IACjC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACjC,OAAO,GAAG,EAAE;QACV,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/run.d.ts
CHANGED
|
@@ -1,27 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export type EventStoreElementType = {
|
|
16
|
-
event: IEventDefinition;
|
|
17
|
-
};
|
|
18
|
-
export type RunnerState = {
|
|
19
|
-
tasks: Record<string, TasksStoreElementType>;
|
|
20
|
-
resources: Record<string, ResourcesStoreElementType>;
|
|
21
|
-
events: Record<string, EventStoreElementType>;
|
|
22
|
-
middleware: Record<string, MiddlewareStoreElementType>;
|
|
23
|
-
};
|
|
24
|
-
export declare function run<C, V>(resource: IResource<C, V extends Promise<any> ? V : Promise<any>>, config?: C): Promise<{
|
|
25
|
-
value: V extends Promise<infer U> ? U : V;
|
|
26
|
-
dispose: () => Promise<void>;
|
|
27
|
-
}>;
|
|
1
|
+
import { IResource, IResourceWithConfig } from "./defs";
|
|
2
|
+
import { RunResult } from "./models/RunResult";
|
|
3
|
+
import { RunOptions } from "./types/runner";
|
|
4
|
+
/**
|
|
5
|
+
* This is the central function that kicks off you runner. You can run as many resources as you want in a single process, they will run in complete isolation.
|
|
6
|
+
*
|
|
7
|
+
* @param resourceOrResourceWithConfig - The resource or resource with config to run.
|
|
8
|
+
* @param options - The options for the run.
|
|
9
|
+
* @returns A promise that resolves to the result of the run.
|
|
10
|
+
*/
|
|
11
|
+
export declare function run<C, V extends Promise<any>>(resourceOrResourceWithConfig: IResourceWithConfig<C, V> | IResource<void, V, any, any> | IResource<{
|
|
12
|
+
[K in any]?: any;
|
|
13
|
+
}, V, any, any>, // For optional config
|
|
14
|
+
options?: RunOptions): Promise<RunResult<V extends Promise<infer U> ? U : V>>;
|
package/dist/run.js
CHANGED
|
@@ -6,47 +6,111 @@ const DependencyProcessor_1 = require("./models/DependencyProcessor");
|
|
|
6
6
|
const EventManager_1 = require("./models/EventManager");
|
|
7
7
|
const globalEvents_1 = require("./globals/globalEvents");
|
|
8
8
|
const Store_1 = require("./models/Store");
|
|
9
|
-
const findCircularDependencies_1 = require("./tools/findCircularDependencies");
|
|
10
|
-
const errors_1 = require("./errors");
|
|
11
|
-
const globalResources_1 = require("./globals/globalResources");
|
|
12
9
|
const Logger_1 = require("./models/Logger");
|
|
13
|
-
|
|
10
|
+
const define_1 = require("./define");
|
|
11
|
+
const debug_1 = require("./globals/resources/debug");
|
|
12
|
+
const processHooks_1 = require("./processHooks");
|
|
13
|
+
const UnhandledError_1 = require("./models/UnhandledError");
|
|
14
|
+
const RunResult_1 = require("./models/RunResult");
|
|
15
|
+
/**
|
|
16
|
+
* This is the central function that kicks off you runner. You can run as many resources as you want in a single process, they will run in complete isolation.
|
|
17
|
+
*
|
|
18
|
+
* @param resourceOrResourceWithConfig - The resource or resource with config to run.
|
|
19
|
+
* @param options - The options for the run.
|
|
20
|
+
* @returns A promise that resolves to the result of the run.
|
|
21
|
+
*/
|
|
22
|
+
async function run(resourceOrResourceWithConfig, // For optional config
|
|
23
|
+
options) {
|
|
24
|
+
const { debug = undefined, logs = {}, errorBoundary = true, shutdownHooks = true, onUnhandledError: onUnhandledErrorOpt, } = options || {};
|
|
25
|
+
const { printThreshold = process.env.NODE_ENV === "test" ? null : "info", printStrategy = "pretty", bufferLogs = false, } = logs;
|
|
14
26
|
const eventManager = new EventManager_1.EventManager();
|
|
27
|
+
let { resource, config } = extractResourceAndConfig(resourceOrResourceWithConfig);
|
|
15
28
|
// ensure for logger, that it can be used only after: computeAllDependencies() has executed
|
|
16
|
-
const logger = new Logger_1.Logger(
|
|
17
|
-
|
|
29
|
+
const logger = new Logger_1.Logger({
|
|
30
|
+
printThreshold,
|
|
31
|
+
printStrategy,
|
|
32
|
+
bufferLogs,
|
|
33
|
+
});
|
|
34
|
+
const onUnhandledError = onUnhandledErrorOpt || (0, UnhandledError_1.createDefaultUnhandledError)(logger);
|
|
35
|
+
const store = new Store_1.Store(eventManager, logger, onUnhandledError);
|
|
18
36
|
const taskRunner = new TaskRunner_1.TaskRunner(store, eventManager, logger);
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// We verify that there isn't any circular dependencies before we begin computing the dependencies
|
|
25
|
-
const dependentNodes = store.getDependentNodes();
|
|
26
|
-
const circularDependencies = (0, findCircularDependencies_1.findCircularDependencies)(dependentNodes);
|
|
27
|
-
if (circularDependencies.cycles.length > 0) {
|
|
28
|
-
throw new errors_1.CircularDependenciesError(circularDependencies.cycles);
|
|
37
|
+
store.setTaskRunner(taskRunner);
|
|
38
|
+
// Register this run's event manager for global process error safety nets
|
|
39
|
+
let unhookProcessSafetyNets;
|
|
40
|
+
if (errorBoundary) {
|
|
41
|
+
unhookProcessSafetyNets = (0, processHooks_1.registerProcessLevelSafetyNets)((0, UnhandledError_1.bindProcessErrorHandler)(onUnhandledError));
|
|
29
42
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
value: store.root.value,
|
|
49
|
-
dispose: () => store.dispose(),
|
|
43
|
+
const processor = new DependencyProcessor_1.DependencyProcessor(store, eventManager, taskRunner, logger);
|
|
44
|
+
// We may install shutdown hooks; capture unhook function to remove them on dispose
|
|
45
|
+
let unhookShutdown;
|
|
46
|
+
// Helper dispose that always unhooks process listeners first
|
|
47
|
+
const disposeAll = async () => {
|
|
48
|
+
try {
|
|
49
|
+
if (unhookProcessSafetyNets) {
|
|
50
|
+
unhookProcessSafetyNets();
|
|
51
|
+
unhookProcessSafetyNets = undefined;
|
|
52
|
+
}
|
|
53
|
+
if (unhookShutdown) {
|
|
54
|
+
unhookShutdown();
|
|
55
|
+
unhookShutdown = undefined;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
await store.dispose();
|
|
60
|
+
}
|
|
50
61
|
};
|
|
62
|
+
try {
|
|
63
|
+
if (debug) {
|
|
64
|
+
store.storeGenericItem(debug_1.debugResource.with(debug));
|
|
65
|
+
}
|
|
66
|
+
// In the registration phase we register deeply all the resources, tasks, middleware and events
|
|
67
|
+
store.initializeStore(resource, config);
|
|
68
|
+
// the overrides that were registered now will override the other registered resources
|
|
69
|
+
await store.processOverrides();
|
|
70
|
+
store.validateDependencyGraph();
|
|
71
|
+
// a form of hooking, we create the events for all tasks and store them so they can be referenced
|
|
72
|
+
await store.storeEventsForAllTRM();
|
|
73
|
+
await logger.debug("Events stored. Attaching listeners...");
|
|
74
|
+
await processor.attachListeners();
|
|
75
|
+
await logger.debug("Listeners attached. Computing dependencies...");
|
|
76
|
+
await processor.computeAllDependencies();
|
|
77
|
+
// After this stage, logger print policy could have been set.
|
|
78
|
+
await logger.debug("Dependencies computed. Proceeding with initialization...");
|
|
79
|
+
// Now we can safely compute dependencies without being afraid of an infinite loop.
|
|
80
|
+
// The hooking part is done here.
|
|
81
|
+
// Now we can initialise the root resource
|
|
82
|
+
await processor.initializeRoot();
|
|
83
|
+
// disallow manipulation or attaching more
|
|
84
|
+
store.lock();
|
|
85
|
+
eventManager.lock();
|
|
86
|
+
await logger.lock();
|
|
87
|
+
await eventManager.emit(globalEvents_1.globalEvents.ready, {
|
|
88
|
+
root: store.root.resource,
|
|
89
|
+
}, "system");
|
|
90
|
+
await logger.info("Runner online. Awaiting tasks and events.");
|
|
91
|
+
if (shutdownHooks) {
|
|
92
|
+
unhookShutdown = (0, processHooks_1.registerShutdownHook)(() => store.dispose());
|
|
93
|
+
}
|
|
94
|
+
return new RunResult_1.RunResult(store.root.value, logger, store, eventManager, taskRunner, disposeAll);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
// Rollback initialized resources
|
|
98
|
+
await disposeAll();
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// process hooks moved to processHooks.ts for clarity
|
|
103
|
+
function extractResourceAndConfig(resourceOrResourceWithConfig) {
|
|
104
|
+
let resource;
|
|
105
|
+
let config;
|
|
106
|
+
if ((0, define_1.isResourceWithConfig)(resourceOrResourceWithConfig)) {
|
|
107
|
+
resource = resourceOrResourceWithConfig.resource;
|
|
108
|
+
config = resourceOrResourceWithConfig.config;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
resource = resourceOrResourceWithConfig;
|
|
112
|
+
config = undefined;
|
|
113
|
+
}
|
|
114
|
+
return { resource, config };
|
|
51
115
|
}
|
|
52
116
|
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|