@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,549 +0,0 @@
|
|
|
1
|
-
import { defineMiddleware, defineTask, defineResource } from "../define";
|
|
2
|
-
import { run } from "../run";
|
|
3
|
-
import { retryMiddleware } from "../globals/middleware/retry.middleware";
|
|
4
|
-
|
|
5
|
-
// Middleware
|
|
6
|
-
describe("Middleware", () => {
|
|
7
|
-
it("should be able to register the middleware and execute it", async () => {
|
|
8
|
-
const testMiddleware = defineMiddleware({
|
|
9
|
-
id: "test.middleware",
|
|
10
|
-
run: async ({ next }) => {
|
|
11
|
-
const result = await next();
|
|
12
|
-
return `Middleware: ${result}`;
|
|
13
|
-
},
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
const testTask = defineTask({
|
|
17
|
-
id: "test.task",
|
|
18
|
-
middleware: [testMiddleware],
|
|
19
|
-
run: async () => "Task executed",
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const app = defineResource({
|
|
23
|
-
id: "app",
|
|
24
|
-
register: [testMiddleware, testTask],
|
|
25
|
-
dependencies: { testTask },
|
|
26
|
-
async init(_, { testTask }) {
|
|
27
|
-
const result = await testTask();
|
|
28
|
-
expect(result).toBe("Middleware: Task executed");
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
await run(app);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it("should work with global middleware", async () => {
|
|
36
|
-
const globalMiddleware = defineMiddleware({
|
|
37
|
-
id: "global.middleware",
|
|
38
|
-
run: async ({ next }) => {
|
|
39
|
-
const result = await next();
|
|
40
|
-
return `global.middleware: ${result}`;
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
const testMiddleware = defineMiddleware({
|
|
45
|
-
id: "test.middleware",
|
|
46
|
-
run: async ({ next }) => {
|
|
47
|
-
const result = await next();
|
|
48
|
-
return `Middleware: ${result}`;
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
const testTask = defineTask({
|
|
53
|
-
id: "test.task",
|
|
54
|
-
middleware: [testMiddleware],
|
|
55
|
-
run: async () => "Task executed",
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
const app = defineResource({
|
|
59
|
-
id: "app",
|
|
60
|
-
register: [globalMiddleware.everywhere(), testMiddleware, testTask],
|
|
61
|
-
dependencies: { testTask },
|
|
62
|
-
async init(_, { testTask }) {
|
|
63
|
-
const result = await testTask();
|
|
64
|
-
expect(result).toBe("global.middleware: Middleware: Task executed");
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
await run(app);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it("should work with global middleware but local one should have priority", async () => {
|
|
72
|
-
const createMiddleware = (id: string) =>
|
|
73
|
-
defineMiddleware({
|
|
74
|
-
id: "middleware",
|
|
75
|
-
run: async ({ next }) => {
|
|
76
|
-
const result = await next();
|
|
77
|
-
return `${id}: ${result}`;
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
const globalMiddleware = createMiddleware("global.middleware");
|
|
81
|
-
|
|
82
|
-
const testMiddleware = defineMiddleware({
|
|
83
|
-
id: "test.middleware",
|
|
84
|
-
run: async ({ next }) => {
|
|
85
|
-
const result = await next();
|
|
86
|
-
return `Middleware: ${result}`;
|
|
87
|
-
},
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
const testTask = defineTask({
|
|
91
|
-
id: "test.task",
|
|
92
|
-
middleware: [testMiddleware],
|
|
93
|
-
run: async () => "Task executed",
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
const app = defineResource({
|
|
97
|
-
id: "app",
|
|
98
|
-
register: [globalMiddleware.everywhere(), testMiddleware, testTask],
|
|
99
|
-
dependencies: { testTask },
|
|
100
|
-
async init(_, { testTask }) {
|
|
101
|
-
const result = await testTask();
|
|
102
|
-
expect(result).toBe("global.middleware: Middleware: Task executed");
|
|
103
|
-
},
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
await run(app);
|
|
107
|
-
});
|
|
108
|
-
it("should work with a middleware with functional() dependencies", async () => {
|
|
109
|
-
const task = defineTask({
|
|
110
|
-
id: "task",
|
|
111
|
-
run: async () => "Task executed",
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
const testMiddleware = defineMiddleware({
|
|
115
|
-
id: "test.middleware",
|
|
116
|
-
dependencies: () => ({ task }),
|
|
117
|
-
run: async ({ next }, { task }) => {
|
|
118
|
-
const result = await next();
|
|
119
|
-
expect(result).toBe(await task());
|
|
120
|
-
expect(result).toBe("Task executed");
|
|
121
|
-
return `Middleware: ${result}`;
|
|
122
|
-
},
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
const testTask = defineTask({
|
|
126
|
-
id: "test.task",
|
|
127
|
-
middleware: [testMiddleware],
|
|
128
|
-
run: async () => "Task executed",
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
let allSolved = jest.fn();
|
|
132
|
-
const app = defineResource({
|
|
133
|
-
id: "app",
|
|
134
|
-
register: [testMiddleware, testTask, task],
|
|
135
|
-
dependencies: { testTask },
|
|
136
|
-
async init(_, { testTask }) {
|
|
137
|
-
const result = await testTask();
|
|
138
|
-
expect(result).toBe("Middleware: Task executed");
|
|
139
|
-
allSolved();
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
await run(app);
|
|
144
|
-
expect(allSolved).toHaveBeenCalled();
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it("Should not work with a non-existing middleware", async () => {
|
|
148
|
-
const middlewareDef = defineMiddleware({
|
|
149
|
-
id: "middlewareId",
|
|
150
|
-
run: async ({ next }) => {
|
|
151
|
-
const result = await next();
|
|
152
|
-
return `Middleware: ${result}`;
|
|
153
|
-
},
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
const testTask = defineTask({
|
|
157
|
-
id: "test.task",
|
|
158
|
-
middleware: [middlewareDef],
|
|
159
|
-
run: async () => "Task executed",
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
const app = defineResource({
|
|
163
|
-
id: "app",
|
|
164
|
-
register: [testTask],
|
|
165
|
-
dependencies: { testTask },
|
|
166
|
-
async init(_, { testTask }) {
|
|
167
|
-
await testTask();
|
|
168
|
-
},
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
// expect it to contain this: Dependency Middleware test.task not found
|
|
172
|
-
await expect(run(app)).rejects.toThrowError(
|
|
173
|
-
/Dependency Middleware middlewareId in Task test.task not found/
|
|
174
|
-
);
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it("Should work with resources", async () => {
|
|
178
|
-
const middleware = defineMiddleware({
|
|
179
|
-
id: "middleware",
|
|
180
|
-
run: async ({ resource, next }) => {
|
|
181
|
-
const result = await next();
|
|
182
|
-
return `Middleware: ${result}`;
|
|
183
|
-
},
|
|
184
|
-
});
|
|
185
|
-
const app = defineResource({
|
|
186
|
-
id: "app",
|
|
187
|
-
register: [middleware],
|
|
188
|
-
middleware: [middleware],
|
|
189
|
-
async init(_, {}) {
|
|
190
|
-
return "App initialized";
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
const result = await run(app);
|
|
195
|
-
expect(result.value).toBe("Middleware: App initialized");
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
it("Should work with global middleware", async () => {
|
|
199
|
-
const middleware = defineMiddleware({
|
|
200
|
-
id: "middleware",
|
|
201
|
-
run: async ({ resource, next }) => {
|
|
202
|
-
const result = await next({});
|
|
203
|
-
return `Middleware: ${result}`;
|
|
204
|
-
},
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
const sub = defineResource({
|
|
208
|
-
id: "sub",
|
|
209
|
-
async init(_, {}) {
|
|
210
|
-
return "Sub initialized";
|
|
211
|
-
},
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
const app = defineResource({
|
|
215
|
-
id: "app",
|
|
216
|
-
register: [middleware.everywhere(), sub],
|
|
217
|
-
dependencies: { sub },
|
|
218
|
-
async init(_, { sub }) {
|
|
219
|
-
return sub;
|
|
220
|
-
},
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
const result = await run(app);
|
|
224
|
-
expect(String(result.value)).toBe(
|
|
225
|
-
"Middleware: Middleware: Sub initialized"
|
|
226
|
-
);
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it("Should prevent circular dependencies when middleware depends on the same task", async () => {
|
|
230
|
-
const middleware: any = defineMiddleware({
|
|
231
|
-
id: "middleware",
|
|
232
|
-
dependencies: (): any => ({ task }),
|
|
233
|
-
run: async (_: any, { task }: any) => {
|
|
234
|
-
// example
|
|
235
|
-
},
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
const task: any = defineTask({
|
|
239
|
-
id: "task",
|
|
240
|
-
middleware: [middleware],
|
|
241
|
-
run: async () => "Task executed",
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
const app = defineResource({
|
|
245
|
-
id: "sub",
|
|
246
|
-
async init(_, {}) {
|
|
247
|
-
return "Sub initialized";
|
|
248
|
-
},
|
|
249
|
-
register: [middleware, task],
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
expect(run(app)).rejects.toThrowError(/Circular dependencies detected/);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
describe("Configurable Middleware (.with)", () => {
|
|
257
|
-
it("should allow using middleware usage in a task and pass config to run", async () => {
|
|
258
|
-
let receivedConfig: any;
|
|
259
|
-
const validate = defineMiddleware({
|
|
260
|
-
id: "validate",
|
|
261
|
-
run: async ({ next }, deps, config: { schema: string }) => {
|
|
262
|
-
receivedConfig = config;
|
|
263
|
-
return next();
|
|
264
|
-
},
|
|
265
|
-
});
|
|
266
|
-
const usage = validate.with({ schema: "user" });
|
|
267
|
-
const task = defineTask({
|
|
268
|
-
id: "task",
|
|
269
|
-
middleware: [usage],
|
|
270
|
-
run: async () => "ok",
|
|
271
|
-
});
|
|
272
|
-
const app = defineResource({
|
|
273
|
-
id: "app",
|
|
274
|
-
register: [validate, task],
|
|
275
|
-
dependencies: { task },
|
|
276
|
-
async init(_, { task }) {
|
|
277
|
-
const result = await task();
|
|
278
|
-
expect(result).toBe("ok");
|
|
279
|
-
expect(receivedConfig).toEqual({ schema: "user" });
|
|
280
|
-
},
|
|
281
|
-
});
|
|
282
|
-
await run(app);
|
|
283
|
-
});
|
|
284
|
-
|
|
285
|
-
it("should allow multiple usages of the same middleware definition with different configs", async () => {
|
|
286
|
-
const calls: (string | undefined)[] = [];
|
|
287
|
-
const validate = defineMiddleware({
|
|
288
|
-
id: "validate",
|
|
289
|
-
run: async ({ next }, deps, config: { schema: string }) => {
|
|
290
|
-
calls.push(config.schema);
|
|
291
|
-
return next();
|
|
292
|
-
},
|
|
293
|
-
});
|
|
294
|
-
const usage1 = validate.with({ schema: "user" });
|
|
295
|
-
const usage2 = validate.with({ schema: "admin" });
|
|
296
|
-
const task1 = defineTask({
|
|
297
|
-
id: "task1",
|
|
298
|
-
middleware: [usage1],
|
|
299
|
-
run: async () => "ok1",
|
|
300
|
-
});
|
|
301
|
-
const task2 = defineTask({
|
|
302
|
-
id: "task2",
|
|
303
|
-
middleware: [usage2],
|
|
304
|
-
run: async () => "ok2",
|
|
305
|
-
});
|
|
306
|
-
const app = defineResource({
|
|
307
|
-
id: "app",
|
|
308
|
-
register: [validate, task1, task2],
|
|
309
|
-
dependencies: { task1, task2 },
|
|
310
|
-
async init(_, { task1, task2 }) {
|
|
311
|
-
await task1();
|
|
312
|
-
await task2();
|
|
313
|
-
expect(calls).toEqual(["user", "admin"]);
|
|
314
|
-
},
|
|
315
|
-
});
|
|
316
|
-
await run(app);
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
it("should work in an integration scenario with global and per-task middleware", async () => {
|
|
320
|
-
const calls: string[] = [];
|
|
321
|
-
const log = defineMiddleware({
|
|
322
|
-
id: "log",
|
|
323
|
-
run: async ({ next }) => {
|
|
324
|
-
calls.push("global");
|
|
325
|
-
return next();
|
|
326
|
-
},
|
|
327
|
-
});
|
|
328
|
-
const validate = defineMiddleware({
|
|
329
|
-
id: "validate",
|
|
330
|
-
run: async ({ next }, deps, config: { schema: string }) => {
|
|
331
|
-
expect(config).toBeDefined();
|
|
332
|
-
calls.push(config!.schema);
|
|
333
|
-
return next();
|
|
334
|
-
},
|
|
335
|
-
});
|
|
336
|
-
const usage = validate.with({ schema: "user" });
|
|
337
|
-
const task = defineTask({
|
|
338
|
-
id: "task",
|
|
339
|
-
middleware: [usage],
|
|
340
|
-
run: async () => "ok",
|
|
341
|
-
});
|
|
342
|
-
const app = defineResource({
|
|
343
|
-
id: "app",
|
|
344
|
-
register: [log.everywhere(), validate, task],
|
|
345
|
-
dependencies: { task },
|
|
346
|
-
async init(_, { task }) {
|
|
347
|
-
const result = await task();
|
|
348
|
-
expect(result).toBe("ok");
|
|
349
|
-
expect(calls).toContain("global");
|
|
350
|
-
expect(calls).toContain("user");
|
|
351
|
-
},
|
|
352
|
-
});
|
|
353
|
-
await run(app);
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
it("should enforce type safety for config in .with()", () => {
|
|
357
|
-
const validate = defineMiddleware({
|
|
358
|
-
id: "validate",
|
|
359
|
-
run: async ({ next }, deps, config: { schema: string }) => next(),
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
// Should error if config type is not correct
|
|
363
|
-
// @ts-expect-error
|
|
364
|
-
validate.with({ schema: 123 });
|
|
365
|
-
});
|
|
366
|
-
|
|
367
|
-
it("should modify task outputs independently based on middleware configs", async () => {
|
|
368
|
-
const prefixMiddleware = defineMiddleware({
|
|
369
|
-
id: "prefixer",
|
|
370
|
-
run: async ({ next }, deps, config: { prefix: string }) => {
|
|
371
|
-
const result = await next();
|
|
372
|
-
return `${config.prefix}: ${result}`;
|
|
373
|
-
},
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
const taskA = defineTask({
|
|
377
|
-
id: "taskA",
|
|
378
|
-
middleware: [prefixMiddleware.with({ prefix: "Alpha" })],
|
|
379
|
-
run: async () => "Result",
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
const taskB = defineTask({
|
|
383
|
-
id: "taskB",
|
|
384
|
-
middleware: [prefixMiddleware.with({ prefix: "Beta" })],
|
|
385
|
-
run: async () => "Result",
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
const app = defineResource({
|
|
389
|
-
id: "app",
|
|
390
|
-
register: [prefixMiddleware, taskA, taskB],
|
|
391
|
-
dependencies: { taskA, taskB },
|
|
392
|
-
async init(_, deps) {
|
|
393
|
-
const resultA = await deps.taskA();
|
|
394
|
-
const resultB = await deps.taskB();
|
|
395
|
-
|
|
396
|
-
expect(resultA).toBe("Alpha: Result");
|
|
397
|
-
expect(resultB).toBe("Beta: Result");
|
|
398
|
-
},
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
await run(app);
|
|
402
|
-
});
|
|
403
|
-
});
|
|
404
|
-
|
|
405
|
-
describe("Middleware.everywhere()", () => {
|
|
406
|
-
it("should work with { tasks: true, resources: true }", async () => {
|
|
407
|
-
const calls: string[] = [];
|
|
408
|
-
const everywhereMiddleware = defineMiddleware({
|
|
409
|
-
id: "everywhere.middleware",
|
|
410
|
-
run: async ({ next, task, resource }) => {
|
|
411
|
-
if (task) {
|
|
412
|
-
calls.push(`task:${String(task.definition.id)}`);
|
|
413
|
-
}
|
|
414
|
-
if (resource) {
|
|
415
|
-
calls.push(`resource:${String(resource.definition.id)}`);
|
|
416
|
-
}
|
|
417
|
-
return next();
|
|
418
|
-
},
|
|
419
|
-
});
|
|
420
|
-
|
|
421
|
-
const testTask = defineTask({
|
|
422
|
-
id: "test.task",
|
|
423
|
-
run: async () => "Task executed",
|
|
424
|
-
});
|
|
425
|
-
|
|
426
|
-
const testResource = defineResource({
|
|
427
|
-
id: "test.resource",
|
|
428
|
-
async init() {
|
|
429
|
-
return "Resource initialized";
|
|
430
|
-
},
|
|
431
|
-
});
|
|
432
|
-
|
|
433
|
-
const app = defineResource({
|
|
434
|
-
id: "app",
|
|
435
|
-
register: [
|
|
436
|
-
everywhereMiddleware.everywhere({ tasks: true, resources: true }),
|
|
437
|
-
testTask,
|
|
438
|
-
testResource,
|
|
439
|
-
],
|
|
440
|
-
dependencies: { testTask, testResource },
|
|
441
|
-
async init(_, { testTask, testResource }) {
|
|
442
|
-
await testTask();
|
|
443
|
-
expect(testResource).toBe("Resource initialized");
|
|
444
|
-
},
|
|
445
|
-
});
|
|
446
|
-
|
|
447
|
-
await run(app);
|
|
448
|
-
|
|
449
|
-
expect(calls).toContain("resource:app");
|
|
450
|
-
expect(calls).toContain("resource:test.resource");
|
|
451
|
-
expect(calls).toContain("task:test.task");
|
|
452
|
-
});
|
|
453
|
-
|
|
454
|
-
it("should work with { tasks: true, resources: false }", async () => {
|
|
455
|
-
const calls: string[] = [];
|
|
456
|
-
const everywhereMiddleware = defineMiddleware({
|
|
457
|
-
id: "everywhere.middleware",
|
|
458
|
-
run: async ({ next, task, resource }) => {
|
|
459
|
-
if (task) {
|
|
460
|
-
calls.push(`task:${String(task.definition.id)}`);
|
|
461
|
-
}
|
|
462
|
-
if (resource) {
|
|
463
|
-
calls.push(`resource:${String(resource.definition.id)}`);
|
|
464
|
-
}
|
|
465
|
-
return next();
|
|
466
|
-
},
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
const testTask = defineTask({
|
|
470
|
-
id: "test.task",
|
|
471
|
-
run: async () => "Task executed",
|
|
472
|
-
});
|
|
473
|
-
|
|
474
|
-
const testResource = defineResource({
|
|
475
|
-
id: "test.resource",
|
|
476
|
-
async init() {
|
|
477
|
-
return "Resource initialized";
|
|
478
|
-
},
|
|
479
|
-
});
|
|
480
|
-
|
|
481
|
-
const app = defineResource({
|
|
482
|
-
id: "app",
|
|
483
|
-
register: [
|
|
484
|
-
everywhereMiddleware.everywhere({ tasks: true, resources: false }),
|
|
485
|
-
testTask,
|
|
486
|
-
testResource,
|
|
487
|
-
],
|
|
488
|
-
dependencies: { testTask, testResource },
|
|
489
|
-
async init(_, { testTask, testResource }) {
|
|
490
|
-
await testTask();
|
|
491
|
-
expect(testResource).toBe("Resource initialized");
|
|
492
|
-
},
|
|
493
|
-
});
|
|
494
|
-
|
|
495
|
-
await run(app);
|
|
496
|
-
|
|
497
|
-
expect(calls).not.toContain("resource:app");
|
|
498
|
-
expect(calls).not.toContain("resource:test.resource");
|
|
499
|
-
expect(calls).toContain("task:test.task");
|
|
500
|
-
});
|
|
501
|
-
|
|
502
|
-
it("should work with { tasks: false, resources: true }", async () => {
|
|
503
|
-
const calls: string[] = [];
|
|
504
|
-
const everywhereMiddleware = defineMiddleware({
|
|
505
|
-
id: "everywhere.middleware",
|
|
506
|
-
run: async ({ next, task, resource }) => {
|
|
507
|
-
if (task) {
|
|
508
|
-
calls.push(`task:${String(task.definition.id)}`);
|
|
509
|
-
}
|
|
510
|
-
if (resource) {
|
|
511
|
-
calls.push(`resource:${String(resource.definition.id)}`);
|
|
512
|
-
}
|
|
513
|
-
return next();
|
|
514
|
-
},
|
|
515
|
-
});
|
|
516
|
-
|
|
517
|
-
const testTask = defineTask({
|
|
518
|
-
id: "test.task",
|
|
519
|
-
run: async () => "Task executed",
|
|
520
|
-
});
|
|
521
|
-
|
|
522
|
-
const testResource = defineResource({
|
|
523
|
-
id: "test.resource",
|
|
524
|
-
async init() {
|
|
525
|
-
return "Resource initialized";
|
|
526
|
-
},
|
|
527
|
-
});
|
|
528
|
-
|
|
529
|
-
const app = defineResource({
|
|
530
|
-
id: "app",
|
|
531
|
-
register: [
|
|
532
|
-
everywhereMiddleware.everywhere({ tasks: false, resources: true }),
|
|
533
|
-
testTask,
|
|
534
|
-
testResource,
|
|
535
|
-
],
|
|
536
|
-
dependencies: { testTask, testResource },
|
|
537
|
-
async init(_, { testTask, testResource }) {
|
|
538
|
-
await testTask();
|
|
539
|
-
expect(testResource).toBe("Resource initialized");
|
|
540
|
-
},
|
|
541
|
-
});
|
|
542
|
-
|
|
543
|
-
await run(app);
|
|
544
|
-
|
|
545
|
-
expect(calls).toContain("resource:app");
|
|
546
|
-
expect(calls).toContain("resource:test.resource");
|
|
547
|
-
expect(calls).not.toContain("task:test.task");
|
|
548
|
-
});
|
|
549
|
-
});
|