@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
|
@@ -26,16 +26,28 @@ class DependencyProcessor {
|
|
|
26
26
|
* This function is going to go through all the resources, tasks and middleware to compute their required dependencies.
|
|
27
27
|
*/
|
|
28
28
|
async computeAllDependencies() {
|
|
29
|
-
for (const middleware of this.store.
|
|
30
|
-
const
|
|
31
|
-
middleware.computedDependencies =
|
|
29
|
+
for (const middleware of this.store.resourceMiddlewares.values()) {
|
|
30
|
+
const computedDependencies = await this.extractDependencies(middleware.middleware.dependencies, middleware.middleware.id);
|
|
31
|
+
middleware.computedDependencies = computedDependencies;
|
|
32
|
+
middleware.isInitialized = true;
|
|
32
33
|
}
|
|
33
|
-
for (const
|
|
34
|
-
await this.
|
|
34
|
+
for (const middleware of this.store.taskMiddlewares.values()) {
|
|
35
|
+
const computedDependencies = await this.extractDependencies(middleware.middleware.dependencies, middleware.middleware.id);
|
|
36
|
+
middleware.computedDependencies = computedDependencies;
|
|
37
|
+
middleware.isInitialized = true;
|
|
35
38
|
}
|
|
36
39
|
for (const resource of this.store.resources.values()) {
|
|
37
40
|
await this.processResourceDependencies(resource);
|
|
38
41
|
}
|
|
42
|
+
for (const task of this.store.tasks.values()) {
|
|
43
|
+
await this.computeTaskDependencies(task);
|
|
44
|
+
}
|
|
45
|
+
// Compute hook dependencies (hooks cannot be dependencies themselves)
|
|
46
|
+
for (const hookStoreElement of this.store.hooks.values()) {
|
|
47
|
+
const hook = hookStoreElement.hook;
|
|
48
|
+
const deps = hook.dependencies;
|
|
49
|
+
hookStoreElement.computedDependencies = await this.extractDependencies(deps, hook.id);
|
|
50
|
+
}
|
|
39
51
|
// leftovers that were registered but not depended upon, except root
|
|
40
52
|
// they should still be initialized as they might extend other
|
|
41
53
|
await this.initializeUninitializedResources();
|
|
@@ -63,45 +75,88 @@ class DependencyProcessor {
|
|
|
63
75
|
* @param resource
|
|
64
76
|
*/
|
|
65
77
|
async processResourceDependencies(resource) {
|
|
66
|
-
const deps = resource.resource.dependencies;
|
|
67
|
-
|
|
78
|
+
const deps = (resource.resource.dependencies || {});
|
|
79
|
+
const extracted = await this.extractDependencies(deps, resource.resource.id);
|
|
80
|
+
resource.computedDependencies = this.wrapResourceDependencies(deps, extracted);
|
|
81
|
+
// resource.isInitialized = true;
|
|
82
|
+
}
|
|
83
|
+
wrapResourceDependencies(deps, extracted) {
|
|
84
|
+
const wrapped = {};
|
|
85
|
+
for (const key of Object.keys(deps)) {
|
|
86
|
+
const original = deps[key];
|
|
87
|
+
const value = extracted[key];
|
|
88
|
+
// Handle optional wrappers
|
|
89
|
+
if (utils.isOptional(original)) {
|
|
90
|
+
const inner = original.inner;
|
|
91
|
+
if (utils.isTask(inner)) {
|
|
92
|
+
wrapped[key] = value
|
|
93
|
+
? this.makeTaskWithIntercept(inner)
|
|
94
|
+
: undefined;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
wrapped[key] = value;
|
|
98
|
+
}
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (utils.isTask(original)) {
|
|
102
|
+
wrapped[key] = this.makeTaskWithIntercept(original);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
wrapped[key] = value;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return wrapped;
|
|
109
|
+
}
|
|
110
|
+
makeTaskWithIntercept(original) {
|
|
111
|
+
const taskId = original.id;
|
|
112
|
+
const fn = (input) => {
|
|
113
|
+
const storeTask = this.store.tasks.get(taskId);
|
|
114
|
+
const effective = storeTask.task;
|
|
115
|
+
return this.taskRunner.run(effective, input);
|
|
116
|
+
};
|
|
117
|
+
return Object.assign(fn, {
|
|
118
|
+
intercept: (middleware) => {
|
|
119
|
+
this.store.checkLock();
|
|
120
|
+
const storeTask = this.store.tasks.get(taskId);
|
|
121
|
+
if (!storeTask.interceptors)
|
|
122
|
+
storeTask.interceptors = [];
|
|
123
|
+
storeTask.interceptors.push(middleware);
|
|
124
|
+
},
|
|
125
|
+
});
|
|
68
126
|
}
|
|
69
127
|
async initializeRoot() {
|
|
70
|
-
const
|
|
71
|
-
const { value, context } = await this.resourceInitializer.initializeResource(
|
|
128
|
+
const rootResource = this.store.root;
|
|
129
|
+
const { value, context } = await this.resourceInitializer.initializeResource(rootResource.resource, rootResource.config,
|
|
72
130
|
// They are already computed
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
131
|
+
rootResource.computedDependencies);
|
|
132
|
+
rootResource.context = context;
|
|
133
|
+
rootResource.value = value;
|
|
134
|
+
rootResource.isInitialized = true;
|
|
77
135
|
}
|
|
78
136
|
/**
|
|
79
137
|
* Processes all hooks, should run before emission of any event.
|
|
80
138
|
*/
|
|
81
139
|
attachListeners() {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
140
|
+
// Attach listeners for dedicated hooks map
|
|
141
|
+
for (const hookStoreElement of this.store.hooks.values()) {
|
|
142
|
+
const hook = hookStoreElement.hook;
|
|
143
|
+
if (hook.on) {
|
|
144
|
+
const eventDefinition = hook.on;
|
|
85
145
|
const handler = async (receivedEvent) => {
|
|
86
|
-
if (receivedEvent.source ===
|
|
87
|
-
// we don't want to trigger the same task that emitted the event
|
|
88
|
-
// process.exit(0);
|
|
146
|
+
if (receivedEvent.source === hook.id) {
|
|
89
147
|
return;
|
|
90
148
|
}
|
|
91
|
-
return this.
|
|
149
|
+
return this.eventManager.executeHookWithInterceptors(hook, receivedEvent, hookStoreElement.computedDependencies);
|
|
92
150
|
};
|
|
151
|
+
const order = hook.order ?? 0;
|
|
93
152
|
if (eventDefinition === "*") {
|
|
94
|
-
this.eventManager.addGlobalListener(handler, {
|
|
95
|
-
order: task.task.listenerOrder || 0,
|
|
96
|
-
});
|
|
153
|
+
this.eventManager.addGlobalListener(handler, { order });
|
|
97
154
|
}
|
|
98
155
|
else {
|
|
99
156
|
if (this.store.events.get(eventDefinition.id) === undefined) {
|
|
100
157
|
throw new errors_1.EventNotFoundError(eventDefinition.id);
|
|
101
158
|
}
|
|
102
|
-
this.eventManager.addListener(eventDefinition, handler, {
|
|
103
|
-
order: task.task.listenerOrder || 0,
|
|
104
|
-
});
|
|
159
|
+
this.eventManager.addListener(eventDefinition, handler, { order });
|
|
105
160
|
}
|
|
106
161
|
}
|
|
107
162
|
}
|
|
@@ -109,11 +164,36 @@ class DependencyProcessor {
|
|
|
109
164
|
async extractDependencies(map, source) {
|
|
110
165
|
const object = {};
|
|
111
166
|
for (const key in map) {
|
|
112
|
-
|
|
167
|
+
try {
|
|
168
|
+
object[key] = await this.extractDependency(map[key], source);
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
const errorMessage = String(e);
|
|
172
|
+
this.logger.error(`Failed to extract dependency from source: ${source} -> ${key} with error: ${errorMessage}`);
|
|
173
|
+
throw e;
|
|
174
|
+
}
|
|
113
175
|
}
|
|
176
|
+
this.logger.trace(`Finished computing dependencies for source: ${source}`);
|
|
114
177
|
return object;
|
|
115
178
|
}
|
|
116
179
|
async extractDependency(object, source) {
|
|
180
|
+
this.logger.trace(`Extracting dependency -> ${source} -> ${object?.id}`);
|
|
181
|
+
if (utils.isOptional(object)) {
|
|
182
|
+
const inner = object.inner;
|
|
183
|
+
if (utils.isResource(inner)) {
|
|
184
|
+
const exists = this.store.resources.get(inner.id) !== undefined;
|
|
185
|
+
return exists ? this.extractResourceDependency(inner) : undefined;
|
|
186
|
+
}
|
|
187
|
+
else if (utils.isTask(inner)) {
|
|
188
|
+
const exists = this.store.tasks.get(inner.id) !== undefined;
|
|
189
|
+
return exists ? this.extractTaskDependency(inner) : undefined;
|
|
190
|
+
}
|
|
191
|
+
else if (utils.isEvent(inner)) {
|
|
192
|
+
const exists = this.store.events.get(inner.id) !== undefined;
|
|
193
|
+
return exists ? this.extractEventDependency(inner, source) : undefined;
|
|
194
|
+
}
|
|
195
|
+
throw new errors_1.UnknownItemTypeError(inner);
|
|
196
|
+
}
|
|
117
197
|
if (utils.isResource(object)) {
|
|
118
198
|
return this.extractResourceDependency(object);
|
|
119
199
|
}
|
|
@@ -140,13 +220,13 @@ class DependencyProcessor {
|
|
|
140
220
|
async extractTaskDependency(object) {
|
|
141
221
|
const storeTask = this.store.tasks.get(object.id);
|
|
142
222
|
if (storeTask === undefined) {
|
|
143
|
-
throw new errors_1.DependencyNotFoundError(`Task ${object.id
|
|
223
|
+
throw new errors_1.DependencyNotFoundError(`Task ${object.id}`);
|
|
144
224
|
}
|
|
145
225
|
if (!storeTask.isInitialized) {
|
|
146
|
-
storeTask.isInitialized = true;
|
|
147
226
|
// it's sanitised
|
|
148
227
|
const dependencies = object.dependencies;
|
|
149
228
|
storeTask.computedDependencies = await this.extractDependencies(dependencies, storeTask.task.id);
|
|
229
|
+
storeTask.isInitialized = true;
|
|
150
230
|
}
|
|
151
231
|
return (input) => {
|
|
152
232
|
return this.taskRunner.run(storeTask.task, input);
|
|
@@ -156,21 +236,24 @@ class DependencyProcessor {
|
|
|
156
236
|
// check if it exists in the store with the value
|
|
157
237
|
const storeResource = this.store.resources.get(object.id);
|
|
158
238
|
if (storeResource === undefined) {
|
|
159
|
-
throw new errors_1.DependencyNotFoundError(`Resource ${object.id
|
|
239
|
+
throw new errors_1.DependencyNotFoundError(`Resource ${object.id}`);
|
|
160
240
|
}
|
|
161
241
|
const { resource, config } = storeResource;
|
|
162
242
|
if (storeResource.isInitialized) {
|
|
163
243
|
return storeResource.value;
|
|
164
244
|
}
|
|
165
245
|
else {
|
|
166
|
-
// we need to initialize the resource
|
|
167
|
-
storeResource.isInitialized = true;
|
|
168
246
|
// check if it has an initialisation function that provides the value
|
|
169
247
|
if (resource.init) {
|
|
170
|
-
const
|
|
248
|
+
const depMap = (resource.dependencies || {});
|
|
249
|
+
const raw = await this.extractDependencies(depMap, resource.id);
|
|
250
|
+
const wrapped = this.wrapResourceDependencies(depMap, raw);
|
|
251
|
+
const { value, context } = await this.resourceInitializer.initializeResource(resource, config, wrapped);
|
|
171
252
|
storeResource.context = context;
|
|
172
253
|
storeResource.value = value;
|
|
173
254
|
}
|
|
255
|
+
// we need to initialize the resource
|
|
256
|
+
storeResource.isInitialized = true;
|
|
174
257
|
}
|
|
175
258
|
return storeResource.value;
|
|
176
259
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../../src/models/DependencyProcessor.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../../src/models/DependencyProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { EventHandlerType, IEvent, IEventEmission } from "../defs";
|
|
1
|
+
import { DependencyValuesType, EventHandlerType, IEvent, IEventEmission } from "../defs";
|
|
2
|
+
import { IHook } from "../types/hook";
|
|
3
|
+
/**
|
|
4
|
+
* Options for configuring event listeners
|
|
5
|
+
*/
|
|
2
6
|
export interface IEventHandlerOptions<T = any> {
|
|
3
7
|
order?: number;
|
|
4
8
|
filter?: (event: IEventEmission<T>) => boolean;
|
|
@@ -7,21 +11,137 @@ export interface IEventHandlerOptions<T = any> {
|
|
|
7
11
|
*/
|
|
8
12
|
id?: string;
|
|
9
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Interceptor for event emissions
|
|
16
|
+
*/
|
|
17
|
+
export type EventEmissionInterceptor = (next: (event: IEventEmission<any>) => Promise<void>, event: IEventEmission<any>) => Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Interceptor for hook execution
|
|
20
|
+
*/
|
|
21
|
+
export type HookExecutionInterceptor = (next: (hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>, hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* EventManager handles event emission, listener registration, and event processing.
|
|
24
|
+
* It supports both specific event listeners and global listeners that handle all events.
|
|
25
|
+
* Listeners are processed in order based on their priority.
|
|
26
|
+
*/
|
|
10
27
|
export declare class EventManager {
|
|
11
28
|
#private;
|
|
12
29
|
private listeners;
|
|
13
30
|
private globalListeners;
|
|
14
31
|
private cachedMergedListeners;
|
|
15
32
|
private globalListenersCacheValid;
|
|
33
|
+
private emissionInterceptors;
|
|
34
|
+
private hookInterceptors;
|
|
35
|
+
/**
|
|
36
|
+
* Gets the current lock status of the EventManager
|
|
37
|
+
*/
|
|
16
38
|
get isLocked(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Locks the EventManager, preventing any further modifications to listeners
|
|
41
|
+
*/
|
|
17
42
|
lock(): void;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Emits an event to all registered listeners for that event type.
|
|
45
|
+
* Listeners are processed in order of priority and can stop event propagation.
|
|
46
|
+
*
|
|
47
|
+
* @param eventDefinition - The event definition to emit
|
|
48
|
+
* @param data - The event payload data
|
|
49
|
+
* @param source - The source identifier of the event emitter
|
|
50
|
+
*/
|
|
51
|
+
emit<TInput>(eventDefinition: IEvent<TInput>, data: TInput, source: string): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Registers an event listener for specific event(s).
|
|
54
|
+
* Listeners are ordered by priority and executed in ascending order.
|
|
55
|
+
*
|
|
56
|
+
* @param event - The event definition(s) to listen for
|
|
57
|
+
* @param handler - The callback function to handle the event
|
|
58
|
+
* @param options - Configuration options for the listener
|
|
59
|
+
*/
|
|
24
60
|
addListener<T>(event: IEvent<T> | Array<IEvent<T>>, handler: EventHandlerType<T>, options?: IEventHandlerOptions<T>): void;
|
|
61
|
+
/**
|
|
62
|
+
* Registers a global event listener that handles all events.
|
|
63
|
+
* Global listeners are mixed with specific listeners and ordered by priority.
|
|
64
|
+
*
|
|
65
|
+
* @param handler - The callback function to handle events
|
|
66
|
+
* @param options - Configuration options for the listener
|
|
67
|
+
*/
|
|
25
68
|
addGlobalListener(handler: EventHandlerType, options?: IEventHandlerOptions): void;
|
|
69
|
+
/**
|
|
70
|
+
* Checks if there are any listeners registered for the given event
|
|
71
|
+
*
|
|
72
|
+
* @param eventDefinition - The event definition to check
|
|
73
|
+
* @returns true if listeners exist, false otherwise
|
|
74
|
+
*/
|
|
26
75
|
hasListeners<T>(eventDefinition: IEvent<T>): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Adds an interceptor for all event emissions
|
|
78
|
+
* Interceptors are executed in the order they are added, with the ability to
|
|
79
|
+
* modify, log, or prevent event emissions
|
|
80
|
+
*
|
|
81
|
+
* @param interceptor - The interceptor function to add
|
|
82
|
+
*/
|
|
83
|
+
intercept(interceptor: EventEmissionInterceptor): void;
|
|
84
|
+
/**
|
|
85
|
+
* Adds an interceptor for hook execution
|
|
86
|
+
* Interceptors are executed in the order they are added, with the ability to
|
|
87
|
+
* modify, log, or prevent hook execution
|
|
88
|
+
*
|
|
89
|
+
* @param interceptor - The interceptor function to add
|
|
90
|
+
*/
|
|
91
|
+
interceptHook(interceptor: HookExecutionInterceptor): void;
|
|
92
|
+
/**
|
|
93
|
+
* Executes a hook with all registered hook interceptors applied
|
|
94
|
+
* This method should be used by TaskRunner when executing hooks
|
|
95
|
+
*
|
|
96
|
+
* @param hook - The hook to execute
|
|
97
|
+
* @param event - The event that triggered the hook
|
|
98
|
+
* @param computedDependencies - The computed dependencies for the hook
|
|
99
|
+
* @returns Promise resolving to the hook execution result
|
|
100
|
+
*/
|
|
101
|
+
executeHookWithInterceptors(hook: IHook<any, any>, event: IEventEmission<any>, computedDependencies: DependencyValuesType<any>): Promise<any>;
|
|
102
|
+
/**
|
|
103
|
+
* Throws an error if the EventManager is locked
|
|
104
|
+
*/
|
|
105
|
+
private checkLock;
|
|
106
|
+
/**
|
|
107
|
+
* Merges two sorted arrays of listeners while maintaining order.
|
|
108
|
+
* Used to combine event-specific listeners with global listeners.
|
|
109
|
+
*
|
|
110
|
+
* @param a - First array of listeners
|
|
111
|
+
* @param b - Second array of listeners
|
|
112
|
+
* @returns Merged and sorted array of listeners
|
|
113
|
+
*/
|
|
114
|
+
private mergeSortedListeners;
|
|
115
|
+
/**
|
|
116
|
+
* Inserts a new listener into a sorted array using binary search.
|
|
117
|
+
* Maintains order based on listener priority.
|
|
118
|
+
*
|
|
119
|
+
* @param listeners - Array to insert into
|
|
120
|
+
* @param newListener - Listener to insert
|
|
121
|
+
*/
|
|
122
|
+
private insertListener;
|
|
123
|
+
/**
|
|
124
|
+
* Returns true if the given emission carries the tag that marks
|
|
125
|
+
* it as excluded from global ("*") listeners.
|
|
126
|
+
*
|
|
127
|
+
* @param event - The event emission to check
|
|
128
|
+
* @returns true if event should exclude global listeners
|
|
129
|
+
*/
|
|
130
|
+
private isExcludedFromGlobal;
|
|
131
|
+
/**
|
|
132
|
+
* Retrieves cached merged listeners for an event, or creates them if not cached.
|
|
133
|
+
* Combines event-specific listeners with global listeners and sorts them by priority.
|
|
134
|
+
*
|
|
135
|
+
* @param eventId - The event ID to get listeners for
|
|
136
|
+
* @returns Array of merged listeners sorted by priority
|
|
137
|
+
*/
|
|
138
|
+
private getCachedMergedListeners;
|
|
139
|
+
/**
|
|
140
|
+
* Invalidates the cached merged listeners.
|
|
141
|
+
* If eventId is provided, only invalidates cache for that specific event.
|
|
142
|
+
* Otherwise, invalidates the global cache.
|
|
143
|
+
*
|
|
144
|
+
* @param eventId - Optional specific event ID to invalidate
|
|
145
|
+
*/
|
|
146
|
+
private invalidateCache;
|
|
27
147
|
}
|