@bluelibs/runner 3.2.0 → 3.3.0

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.
Files changed (62) hide show
  1. package/README.md +482 -34
  2. package/dist/cli/extract-docs.d.ts +2 -0
  3. package/dist/cli/extract-docs.js +88 -0
  4. package/dist/cli/extract-docs.js.map +1 -0
  5. package/dist/define.d.ts +21 -1
  6. package/dist/define.js +71 -0
  7. package/dist/define.js.map +1 -1
  8. package/dist/defs.d.ts +163 -4
  9. package/dist/defs.js +30 -0
  10. package/dist/defs.js.map +1 -1
  11. package/dist/docs/introspect.d.ts +7 -0
  12. package/dist/docs/introspect.js +199 -0
  13. package/dist/docs/introspect.js.map +1 -0
  14. package/dist/docs/markdown.d.ts +2 -0
  15. package/dist/docs/markdown.js +148 -0
  16. package/dist/docs/markdown.js.map +1 -0
  17. package/dist/docs/model.d.ts +62 -0
  18. package/dist/docs/model.js +33 -0
  19. package/dist/docs/model.js.map +1 -0
  20. package/dist/express/docsRouter.d.ts +12 -0
  21. package/dist/express/docsRouter.js +54 -0
  22. package/dist/express/docsRouter.js.map +1 -0
  23. package/dist/globals/globalMiddleware.d.ts +1 -0
  24. package/dist/globals/globalMiddleware.js +2 -0
  25. package/dist/globals/globalMiddleware.js.map +1 -1
  26. package/dist/globals/middleware/timeout.middleware.d.ts +8 -0
  27. package/dist/globals/middleware/timeout.middleware.js +35 -0
  28. package/dist/globals/middleware/timeout.middleware.js.map +1 -0
  29. package/dist/index.d.ts +4 -2
  30. package/dist/index.js +5 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/models/DependencyProcessor.js +2 -2
  33. package/dist/models/DependencyProcessor.js.map +1 -1
  34. package/dist/models/Store.d.ts +1 -1
  35. package/dist/models/StoreConstants.d.ts +1 -1
  36. package/dist/models/StoreConstants.js +2 -1
  37. package/dist/models/StoreConstants.js.map +1 -1
  38. package/dist/models/TaskRunner.d.ts +2 -3
  39. package/dist/models/TaskRunner.js +1 -2
  40. package/dist/models/TaskRunner.js.map +1 -1
  41. package/dist/testing.d.ts +24 -0
  42. package/dist/testing.js +41 -0
  43. package/dist/testing.js.map +1 -0
  44. package/package.json +4 -4
  45. package/src/__tests__/benchmark/task-benchmark.test.ts +132 -0
  46. package/src/__tests__/createTestResource.test.ts +139 -0
  47. package/src/__tests__/globals/timeout.middleware.test.ts +88 -0
  48. package/src/__tests__/models/Semaphore.test.ts +1 -1
  49. package/src/__tests__/override.test.ts +104 -0
  50. package/src/__tests__/run.overrides.test.ts +50 -21
  51. package/src/__tests__/run.test.ts +19 -0
  52. package/src/__tests__/tags.test.ts +396 -0
  53. package/src/__tests__/typesafety.test.ts +109 -1
  54. package/src/define.ts +97 -0
  55. package/src/defs.ts +168 -8
  56. package/src/globals/globalMiddleware.ts +2 -0
  57. package/src/globals/middleware/timeout.middleware.ts +46 -0
  58. package/src/index.ts +6 -0
  59. package/src/models/DependencyProcessor.ts +2 -10
  60. package/src/models/StoreConstants.ts +2 -1
  61. package/src/models/TaskRunner.ts +1 -3
  62. package/src/testing.ts +66 -0
package/dist/index.js CHANGED
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Queue = exports.TaskRunner = exports.EventManager = exports.Store = exports.Semaphore = exports.definitions = exports.createContext = exports.run = exports.index = exports.middleware = exports.event = exports.resource = exports.task = exports.globals = void 0;
3
+ exports.Queue = exports.TaskRunner = exports.EventManager = exports.Store = exports.Semaphore = exports.definitions = exports.createTestResource = exports.createContext = exports.run = exports.override = exports.tag = exports.index = exports.middleware = exports.event = exports.resource = exports.task = exports.globals = void 0;
4
4
  const define_1 = require("./define");
5
5
  Object.defineProperty(exports, "task", { enumerable: true, get: function () { return define_1.defineTask; } });
6
6
  Object.defineProperty(exports, "resource", { enumerable: true, get: function () { return define_1.defineResource; } });
7
7
  Object.defineProperty(exports, "event", { enumerable: true, get: function () { return define_1.defineEvent; } });
8
8
  Object.defineProperty(exports, "middleware", { enumerable: true, get: function () { return define_1.defineMiddleware; } });
9
9
  Object.defineProperty(exports, "index", { enumerable: true, get: function () { return define_1.defineIndex; } });
10
+ Object.defineProperty(exports, "tag", { enumerable: true, get: function () { return define_1.defineTag; } });
11
+ Object.defineProperty(exports, "override", { enumerable: true, get: function () { return define_1.defineOverride; } });
10
12
  const context_1 = require("./context");
11
13
  Object.defineProperty(exports, "createContext", { enumerable: true, get: function () { return context_1.createContext; } });
12
14
  const globalEvents_1 = require("./globals/globalEvents");
@@ -14,6 +16,8 @@ const globalResources_1 = require("./globals/globalResources");
14
16
  const globalMiddleware_1 = require("./globals/globalMiddleware");
15
17
  const run_1 = require("./run");
16
18
  Object.defineProperty(exports, "run", { enumerable: true, get: function () { return run_1.run; } });
19
+ const testing_1 = require("./testing");
20
+ Object.defineProperty(exports, "createTestResource", { enumerable: true, get: function () { return testing_1.createTestResource; } });
17
21
  const globals = {
18
22
  events: globalEvents_1.globalEvents,
19
23
  resources: globalResources_1.globalResources,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAMkB;AAeF,qFApBd,mBAAU,OAoBQ;AACA,yFApBlB,uBAAc,OAoBY;AACX,sFApBf,oBAAW,OAoBS;AACA,2FApBpB,yBAAgB,OAoBc;AACf,sFApBf,oBAAW,OAoBS;AAlBtB,uCAA0C;AAoBxC,8FApBO,uBAAa,OAoBP;AAnBf,yDAAsD;AACtD,+DAA4D;AAC5D,iEAA+D;AAC/D,+BAA4B;AAe1B,oFAfO,SAAG,OAeP;AAbL,MAAM,OAAO,GAAG;IACd,MAAM,EAAE,2BAAY;IACpB,SAAS,EAAE,iCAAe;IAC1B,WAAW,EAAE,oCAAiB;CAC/B,CAAC;AAEO,0BAAO;AAWhB,wCAAsC;AACtC,mCAA6E;AAApE,mGAAA,SAAS,OAAA;AAAE,+FAAA,KAAK,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,+FAAA,KAAK,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAQkB;AAgBF,qFAvBd,mBAAU,OAuBQ;AACA,yFAvBlB,uBAAc,OAuBY;AACX,sFAvBf,oBAAW,OAuBS;AACA,2FAvBpB,yBAAgB,OAuBc;AACf,sFAvBf,oBAAW,OAuBS;AACP,oFAvBb,kBAAS,OAuBO;AACE,yFAvBlB,uBAAc,OAuBY;AArB5B,uCAA0C;AAuBxC,8FAvBO,uBAAa,OAuBP;AAtBf,yDAAsD;AACtD,+DAA4D;AAC5D,iEAA+D;AAC/D,+BAA4B;AAkB1B,oFAlBO,SAAG,OAkBP;AAjBL,uCAA+C;AAmB7C,mGAnBO,4BAAkB,OAmBP;AAjBpB,MAAM,OAAO,GAAG;IACd,MAAM,EAAE,2BAAY;IACpB,SAAS,EAAE,iCAAe;IAC1B,WAAW,EAAE,oCAAiB;CAC/B,CAAC;AAEO,0BAAO;AAchB,wCAAsC;AACtC,mCAA6E;AAApE,mGAAA,SAAS,OAAA;AAAE,+FAAA,KAAK,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,+FAAA,KAAK,OAAA"}
@@ -88,7 +88,7 @@ class DependencyProcessor {
88
88
  // process.exit(0);
89
89
  return;
90
90
  }
91
- return this.taskRunner.run(task.task, receivedEvent, task.computedDependencies);
91
+ return this.taskRunner.run(task.task, receivedEvent);
92
92
  };
93
93
  if (eventDefinition === "*") {
94
94
  this.eventManager.addGlobalListener(handler, {
@@ -149,7 +149,7 @@ class DependencyProcessor {
149
149
  storeTask.computedDependencies = await this.extractDependencies(dependencies, storeTask.task.id);
150
150
  }
151
151
  return (input) => {
152
- return this.taskRunner.run(storeTask.task, input, storeTask.computedDependencies);
152
+ return this.taskRunner.run(storeTask.task, input);
153
153
  };
154
154
  }
155
155
  async extractResourceDependency(object) {
@@ -1 +1 @@
1
- {"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../../src/models/DependencyProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DependencyProcessor.js","sourceRoot":"","sources":["../../src/models/DependencyProcessor.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export declare class Store {
20
20
  get resources(): Map<string | symbol, ResourceStoreElementType>;
21
21
  get events(): Map<string | symbol, EventStoreElementType>;
22
22
  get middlewares(): Map<string | symbol, MiddlewareStoreElementType>;
23
- get overrides(): Map<string | symbol, IMiddleware<any, any> | IResource<void, any, any, any> | import("../defs").ITask<any, any, {}, undefined> | import("../defs").IResourceWithConfig<any, any, any>>;
23
+ get overrides(): Map<string | symbol, IResource<void, any, any, any> | import("../defs").ITask<any, any, {}, undefined> | IMiddleware<any, any> | import("../defs").IResourceWithConfig<any, any, any>>;
24
24
  get overrideRequests(): Set<{
25
25
  source: string | symbol;
26
26
  override: RegisterableItems;
@@ -8,4 +8,4 @@ export declare function getBuiltInResources(eventManager: EventManager, store: S
8
8
  }> | import("../defs").IResourceWithConfig<EventManager, EventManager, {}> | import("../defs").IResourceWithConfig<Store, Store, {}>)[];
9
9
  export declare function getBuiltInMiddlewares(): (import("../defs").IMiddleware<{
10
10
  context: import("../context").Context<any>;
11
- }, import("../defs").DependencyMapType> | import("../defs").IMiddleware<import("../globals/middleware/retry.middleware").RetryMiddlewareConfig, import("../defs").DependencyMapType>)[];
11
+ }, import("../defs").DependencyMapType> | import("../defs").IMiddleware<import("../globals/middleware/retry.middleware").RetryMiddlewareConfig, import("../defs").DependencyMapType> | import("../defs").IMiddleware<import("../globals/middleware/timeout.middleware").TimeoutMiddlewareConfig, import("../defs").DependencyMapType>)[];
@@ -5,6 +5,7 @@ exports.getBuiltInMiddlewares = getBuiltInMiddlewares;
5
5
  const globalResources_1 = require("../globals/globalResources");
6
6
  const requireContext_middleware_1 = require("../globals/middleware/requireContext.middleware");
7
7
  const retry_middleware_1 = require("../globals/middleware/retry.middleware");
8
+ const timeout_middleware_1 = require("../globals/middleware/timeout.middleware");
8
9
  function getBuiltInResources(eventManager, store) {
9
10
  return [
10
11
  globalResources_1.globalResources.eventManager.with(eventManager),
@@ -13,6 +14,6 @@ function getBuiltInResources(eventManager, store) {
13
14
  ];
14
15
  }
15
16
  function getBuiltInMiddlewares() {
16
- return [requireContext_middleware_1.requireContextMiddleware, retry_middleware_1.retryMiddleware];
17
+ return [requireContext_middleware_1.requireContextMiddleware, retry_middleware_1.retryMiddleware, timeout_middleware_1.timeoutMiddleware];
17
18
  }
18
19
  //# sourceMappingURL=StoreConstants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StoreConstants.js","sourceRoot":"","sources":["../../src/models/StoreConstants.ts"],"names":[],"mappings":";;AAMA,kDAMC;AAED,sDAEC;AAhBD,gEAA6D;AAC7D,+FAA2F;AAC3F,6EAAyE;AAIzE,SAAgB,mBAAmB,CAAC,YAA0B,EAAE,KAAY;IAC1E,OAAO;QACL,iCAAe,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/C,iCAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,iCAAe,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC;AAED,SAAgB,qBAAqB;IACnC,OAAO,CAAC,oDAAwB,EAAE,kCAAe,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"StoreConstants.js","sourceRoot":"","sources":["../../src/models/StoreConstants.ts"],"names":[],"mappings":";;AAOA,kDAMC;AAED,sDAEC;AAjBD,gEAA6D;AAC7D,+FAA2F;AAC3F,6EAAyE;AACzE,iFAA6E;AAI7E,SAAgB,mBAAmB,CAAC,YAA0B,EAAE,KAAY;IAC1E,OAAO;QACL,iCAAe,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/C,iCAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,iCAAe,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC;AAED,SAAgB,qBAAqB;IACnC,OAAO,CAAC,oDAAwB,EAAE,kCAAe,EAAE,sCAAiB,CAAC,CAAC;AACxE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { DependencyMapType, DependencyValuesType, ITask } from "../defs";
1
+ import { DependencyMapType, ITask } from "../defs";
2
2
  import { EventManager } from "./EventManager";
3
3
  import { Store } from "./Store";
4
4
  import { Logger } from "./Logger";
@@ -13,9 +13,8 @@ export declare class TaskRunner {
13
13
  * This function can throw only if any of the event listeners or run function throws
14
14
  * @param task the task to be run
15
15
  * @param input the input to be passed to the task
16
- * @param taskDependencies optional dependencies to be passed to the task, if not provided, the dependencies will be the ones already computed from the store.
17
16
  */
18
- run<TInput, TOutput extends Promise<any>, TDeps extends DependencyMapType>(task: ITask<TInput, TOutput, TDeps>, input: TInput, taskDependencies?: DependencyValuesType<TDeps>): Promise<TOutput | undefined>;
17
+ run<TInput, TOutput extends Promise<any>, TDeps extends DependencyMapType>(task: ITask<TInput, TOutput, TDeps>, input: TInput): Promise<TOutput | undefined>;
19
18
  /**
20
19
  * Creates the function with the chain of middleware.
21
20
  * @param task
@@ -17,9 +17,8 @@ class TaskRunner {
17
17
  * This function can throw only if any of the event listeners or run function throws
18
18
  * @param task the task to be run
19
19
  * @param input the input to be passed to the task
20
- * @param taskDependencies optional dependencies to be passed to the task, if not provided, the dependencies will be the ones already computed from the store.
21
20
  */
22
- async run(task, input, taskDependencies) {
21
+ async run(task, input) {
23
22
  let runner = this.runnerStore.get(task.id);
24
23
  if (!runner) {
25
24
  runner = this.createRunnerWithMiddleware(task);
@@ -1 +1 @@
1
- {"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../src/models/TaskRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskRunner.js","sourceRoot":"","sources":["../../src/models/TaskRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { IResource, IResourceWithConfig, IMiddleware, ITask, RegisterableItems, DependencyMapType } from "./defs";
2
+ import { EventManager, Logger, Store, TaskRunner } from "./models";
3
+ /**
4
+ * Helper to create a minimal test harness resource that wraps a root app (or any registerable)
5
+ * and exposes convenient testing utilities while running the full ecosystem
6
+ * (registration, overrides, middleware, events) without modifying the core API.
7
+ */
8
+ export declare function createTestResource(root: RegisterableItems, options?: {
9
+ overrides?: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
10
+ }): IResource<void, ReturnType<typeof buildTestFacade>>;
11
+ declare function buildTestFacade(deps: {
12
+ taskRunner: TaskRunner;
13
+ store: Store;
14
+ logger: Logger;
15
+ eventManager: EventManager;
16
+ }): {
17
+ runTask: <I, O extends Promise<any>, D extends DependencyMapType>(task: ITask<I, O, D>, input: I) => Promise<Awaited<O> | undefined>;
18
+ getResource: (id: string | symbol) => any;
19
+ taskRunner: TaskRunner;
20
+ store: Store;
21
+ logger: Logger;
22
+ eventManager: EventManager;
23
+ };
24
+ export {};
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTestResource = createTestResource;
4
+ const define_1 = require("./define");
5
+ const globalResources_1 = require("./globals/globalResources");
6
+ let testResourceCounter = 0;
7
+ /**
8
+ * Helper to create a minimal test harness resource that wraps a root app (or any registerable)
9
+ * and exposes convenient testing utilities while running the full ecosystem
10
+ * (registration, overrides, middleware, events) without modifying the core API.
11
+ */
12
+ function createTestResource(root, options) {
13
+ return (0, define_1.defineResource)({
14
+ id: `tests.createTestResource.${++testResourceCounter}`,
15
+ register: [root],
16
+ overrides: options?.overrides || [],
17
+ dependencies: {
18
+ taskRunner: globalResources_1.globalResources.taskRunner,
19
+ store: globalResources_1.globalResources.store,
20
+ logger: globalResources_1.globalResources.logger,
21
+ eventManager: globalResources_1.globalResources.eventManager,
22
+ },
23
+ async init(_, deps) {
24
+ return buildTestFacade(deps);
25
+ },
26
+ });
27
+ }
28
+ function buildTestFacade(deps) {
29
+ return {
30
+ // Run a task within the fully initialized ecosystem
31
+ runTask: (task, input) => deps.taskRunner.run(task, input),
32
+ // Access a resource value by id (string or symbol)
33
+ getResource: (id) => deps.store.resources.get(id)?.value,
34
+ // Expose internals when needed in tests (not recommended for app usage)
35
+ taskRunner: deps.taskRunner,
36
+ store: deps.store,
37
+ logger: deps.logger,
38
+ eventManager: deps.eventManager,
39
+ };
40
+ }
41
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":";;AAsBA,gDAoBC;AA1CD,qCAA0C;AAC1C,+DAA4D;AAc5D,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B;;;;GAIG;AACH,SAAgB,kBAAkB,CAChC,IAAuB,EACvB,OAEC;IAED,OAAO,IAAA,uBAAc,EAAC;QACpB,EAAE,EAAE,4BAA4B,EAAE,mBAAmB,EAAE;QACvD,QAAQ,EAAE,CAAC,IAAI,CAAC;QAChB,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;QACnC,YAAY,EAAE;YACZ,UAAU,EAAE,iCAAe,CAAC,UAAU;YACtC,KAAK,EAAE,iCAAe,CAAC,KAAK;YAC5B,MAAM,EAAE,iCAAe,CAAC,MAAM;YAC9B,YAAY,EAAE,iCAAe,CAAC,YAAY;SAC3C;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI;YAChB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,IAKxB;IACC,OAAO;QACL,oDAAoD;QACpD,OAAO,EAAE,CACP,IAAoB,EACpB,KAAQ,EACyB,EAAE,CACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAQ;QACzC,mDAAmD;QACnD,WAAW,EAAE,CAAC,EAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK;QACzE,wEAAwE;QACxE,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bluelibs/runner",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "BlueLibs Runner",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
@@ -26,10 +26,10 @@
26
26
  "@types/graphql": "^0.11.3",
27
27
  "@types/jest": "^27.0.0",
28
28
  "@types/node": "^20.0.0",
29
- "@typescript-eslint/eslint-plugin": "2.3.0",
30
- "@typescript-eslint/parser": "2.3.0",
29
+ "@typescript-eslint/eslint-plugin": "8.39.0",
30
+ "@typescript-eslint/parser": "8.39.0",
31
31
  "benchmark": "^2.1.4",
32
- "eslint": "^6.6.0",
32
+ "eslint": "^9.32.0",
33
33
  "eslint-config-prettier": "6.3.0",
34
34
  "eslint-plugin-prettier": "3.1.1",
35
35
  "express": "^5.1.0",
@@ -0,0 +1,132 @@
1
+ import { defineTask, defineResource, defineMiddleware } from "../../define";
2
+ import { run } from "../../run";
3
+
4
+ // Benchmarks are environment-sensitive; keep skipped by default.
5
+ describe("Task benchmarks - sync vs async", () => {
6
+ const iterations = 500;
7
+
8
+ it("compares sync vs async task execution without middleware", async () => {
9
+ const syncTask = defineTask<number, any>({
10
+ id: "bench.syncTask",
11
+ // Intentionally synchronous
12
+ run: ((n: number) => {
13
+ let acc = 0;
14
+ for (let i = 0; i < 200; i++) acc += (n + i) % 7;
15
+ return acc;
16
+ }) as any,
17
+ } as any);
18
+
19
+ const asyncTask = defineTask<number, Promise<number>>({
20
+ id: "bench.asyncTask",
21
+ run: async (n: number) => {
22
+ let acc = 0;
23
+ for (let i = 0; i < 200; i++) acc += (n + i) % 7;
24
+ return acc;
25
+ },
26
+ });
27
+
28
+ const app = defineResource({
29
+ id: "bench.app",
30
+ register: [syncTask, asyncTask],
31
+ dependencies: { syncTask, asyncTask },
32
+ async init(_, { syncTask, asyncTask }) {
33
+ // Warm-up
34
+ await asyncTask(0);
35
+ await syncTask(0 as any);
36
+
37
+ const syncStart = performance.now();
38
+ for (let i = 0; i < iterations; i++) {
39
+ // Note: sync path still awaited at the TaskRunner boundary
40
+ await syncTask(i as any);
41
+ }
42
+ const syncTime = performance.now() - syncStart;
43
+
44
+ const asyncStart = performance.now();
45
+ for (let i = 0; i < iterations; i++) {
46
+ await asyncTask(i);
47
+ }
48
+ const asyncTime = performance.now() - asyncStart;
49
+
50
+ // Log metrics for manual inspection
51
+ // eslint-disable-next-line no-console
52
+ console.log(
53
+ `Task benchmark (iterations=${iterations}) -> sync: ${syncTime.toFixed(
54
+ 2
55
+ )}ms, async: ${asyncTime.toFixed(2)}ms`
56
+ );
57
+ },
58
+ });
59
+
60
+ const { dispose } = await run(app);
61
+ await dispose();
62
+ });
63
+
64
+ it("compares with a chain of pass-through middlewares", async () => {
65
+ const chainLength = 10;
66
+
67
+ const middlewares = Array.from({ length: chainLength }, (_, idx) =>
68
+ defineMiddleware({
69
+ id: `mw.${idx}`,
70
+ // Return the result of next() directly; no extra async wrapper here
71
+ run: ({ next }: any) => next(),
72
+ })
73
+ );
74
+
75
+ const syncTask = defineTask<number, any>({
76
+ id: "bench.syncTask.withMw",
77
+ middleware: middlewares,
78
+ // Intentionally synchronous
79
+ run: ((n: number) => {
80
+ let acc = 0;
81
+ for (let i = 0; i < 200; i++) acc += (n + i) % 7;
82
+ return acc;
83
+ }) as any,
84
+ } as any);
85
+
86
+ const asyncTask = defineTask<number, Promise<number>>({
87
+ id: "bench.asyncTask.withMw",
88
+ middleware: middlewares,
89
+ run: async (n: number) => {
90
+ let acc = 0;
91
+ for (let i = 0; i < 200; i++) acc += (n + i) % 7;
92
+ return acc;
93
+ },
94
+ });
95
+
96
+ const app = defineResource({
97
+ id: "bench.app.mw",
98
+ register: [...middlewares, syncTask, asyncTask],
99
+ dependencies: { syncTask, asyncTask },
100
+ async init(_, { syncTask, asyncTask }) {
101
+ // Warm-up
102
+ await asyncTask(0);
103
+ await syncTask(0 as any);
104
+
105
+ const iters = 5000;
106
+ const t0 = process.hrtime.bigint();
107
+ for (let i = 0; i < iters; i++) {
108
+ await syncTask(i as any);
109
+ }
110
+ const t1 = process.hrtime.bigint();
111
+ const syncNs = Number(t1 - t0);
112
+
113
+ const t2 = process.hrtime.bigint();
114
+ for (let i = 0; i < iters; i++) {
115
+ await asyncTask(i);
116
+ }
117
+ const t3 = process.hrtime.bigint();
118
+ const asyncNs = Number(t3 - t2);
119
+
120
+ // eslint-disable-next-line no-console
121
+ console.log(
122
+ `Task benchmark with ${chainLength} middlewares (iterations=${iters}) -> sync: ${(
123
+ syncNs / 1e6
124
+ ).toFixed(2)}ms, async: ${(asyncNs / 1e6).toFixed(2)}ms`
125
+ );
126
+ },
127
+ });
128
+
129
+ const { dispose } = await run(app);
130
+ await dispose();
131
+ });
132
+ });
@@ -0,0 +1,139 @@
1
+ import {
2
+ task,
3
+ resource,
4
+ override,
5
+ run,
6
+ createTestResource,
7
+ globals,
8
+ event,
9
+ } from "..";
10
+
11
+ describe("createTestResource", () => {
12
+ it("runs tasks within the full ecosystem and returns results", async () => {
13
+ const double = task({ id: "t.double", run: async (x: number) => x * 2 });
14
+
15
+ const app = resource({
16
+ id: "app.root",
17
+ register: [double],
18
+ });
19
+
20
+ const harness = createTestResource(app);
21
+ const { value: t, dispose } = await run(harness);
22
+
23
+ const result = await t.runTask(double, 21);
24
+ expect(result).toBe(42);
25
+
26
+ await dispose();
27
+ });
28
+
29
+ it("supports overrides for integration tests", async () => {
30
+ const db = resource({ id: "db", init: async () => ({ kind: "real" }) });
31
+ const getDbKind = task({
32
+ id: "t.db.kind",
33
+ dependencies: { db },
34
+ run: async (_, { db }) => db.kind,
35
+ });
36
+ const app = resource({ id: "app", register: [db, getDbKind] });
37
+
38
+ const mockDb = override(db, { init: async () => ({ kind: "mock" }) });
39
+
40
+ const harness = createTestResource(app, { overrides: [mockDb] });
41
+ const { value: t, dispose } = await run(harness);
42
+
43
+ const kind = await t.runTask(getDbKind, undefined);
44
+ expect(kind).toBe("mock");
45
+
46
+ await dispose();
47
+ });
48
+
49
+ it("allows accessing resource values and subscribing to events", async () => {
50
+ const eventsSeen: Array<any> = [];
51
+
52
+ const say = task({ id: "t.say", run: async (m: string) => m });
53
+
54
+ const listener = task({
55
+ id: "tests.log-listener",
56
+ on: globals.events.tasks.beforeRun,
57
+ run: async (e: any) => eventsSeen.push(e.data),
58
+ });
59
+
60
+ const app = resource({ id: "app2", register: [say, listener] });
61
+
62
+ const harness = createTestResource(app);
63
+ const { value: t, dispose } = await run(harness);
64
+
65
+ // Subscribe via facade as well (no-op if using global path instead)
66
+ // t.on(globals.events.log, (e) => eventsSeen.push(e.data));
67
+
68
+ await t.runTask(say, "hello");
69
+
70
+ // We can also query resource values (will often be undefined for pure tasks)
71
+ expect(t.getResource("app2")).toBeUndefined();
72
+
73
+ // At least one event was recorded via the listener
74
+ expect(Array.isArray(eventsSeen)).toBe(true);
75
+
76
+ await dispose();
77
+ });
78
+
79
+ it("supports multiple harness instances without id collisions", async () => {
80
+ const add1 = task({ id: "t.add1", run: async (n: number) => n + 1 });
81
+ const app = resource({ id: "app.multi", register: [add1] });
82
+
83
+ const h1 = createTestResource(app);
84
+ const h2 = createTestResource(app);
85
+
86
+ const [r1, r2] = await Promise.all([run(h1), run(h2)]);
87
+
88
+ const v1 = await r1.value.runTask(add1, 1);
89
+ const v2 = await r2.value.runTask(add1, 2);
90
+ expect(v1).toBe(2);
91
+ expect(v2).toBe(3);
92
+
93
+ await Promise.all([r1.dispose(), r2.dispose()]);
94
+ });
95
+
96
+ it("runTask is typesafe in tests", async () => {
97
+ const sum = task<{ a: number; b: number }, Promise<number>>({
98
+ id: "t.sum",
99
+ run: async (i) => i.a + i.b,
100
+ });
101
+
102
+ const upper = task<{ v: string }, Promise<string>>({
103
+ id: "t.upper",
104
+ run: async (i) => i.v.toUpperCase(),
105
+ });
106
+
107
+ const usesUpper = task<
108
+ { n: number },
109
+ Promise<number>,
110
+ { upper: typeof upper }
111
+ >({
112
+ id: "t.usesUpper",
113
+ dependencies: { upper },
114
+ run: async (i, d) => Number(await d.upper({ v: String(i.n) })),
115
+ });
116
+
117
+ const app = resource({
118
+ id: "app.types",
119
+ register: [sum, upper, usesUpper],
120
+ });
121
+ const { value: t, dispose } = await run(createTestResource(app));
122
+
123
+ const ok1: number | undefined = await t.runTask(sum, { a: 1, b: 2 });
124
+ // Type-only checks (do not execute)
125
+ const typeOnly = () => {
126
+ // @ts-expect-error bad input
127
+ t.runTask(sum, { a: 1 });
128
+ // @ts-expect-error missing input
129
+ t.runTask(sum as any);
130
+ };
131
+ void typeOnly;
132
+
133
+ const ok2: number | undefined = await t.runTask(usesUpper, {
134
+ n: 3,
135
+ } as const);
136
+
137
+ await dispose();
138
+ });
139
+ });
@@ -0,0 +1,88 @@
1
+ import { defineResource, defineTask } from "../../define";
2
+ import { run } from "../../run";
3
+ import { timeoutMiddleware } from "../../globals/middleware/timeout.middleware";
4
+
5
+ const sleep = (ms: number) => new Promise((res) => setTimeout(res, ms));
6
+
7
+ describe("Timeout Middleware", () => {
8
+ it("should abort long-running tasks after ttl", async () => {
9
+ const slowTask = defineTask({
10
+ id: "timeout.slowTask",
11
+ middleware: [timeoutMiddleware.with({ ttl: 20 })],
12
+ run: async () => {
13
+ await sleep(50);
14
+ return "done";
15
+ },
16
+ });
17
+
18
+ const app = defineResource({
19
+ id: "app",
20
+ register: [slowTask],
21
+ dependencies: { slowTask },
22
+ async init(_, { slowTask }) {
23
+ await expect(slowTask()).rejects.toThrow(/timed out/i);
24
+ },
25
+ });
26
+
27
+ await run(app);
28
+ });
29
+
30
+ it("should allow tasks to complete before ttl", async () => {
31
+ const fastTask = defineTask({
32
+ id: "timeout.fastTask",
33
+ middleware: [timeoutMiddleware.with({ ttl: 50 })],
34
+ run: async () => {
35
+ await sleep(10);
36
+ return "ok";
37
+ },
38
+ });
39
+
40
+ const app = defineResource({
41
+ id: "app",
42
+ register: [fastTask],
43
+ dependencies: { fastTask },
44
+ async init(_, { fastTask }) {
45
+ await expect(fastTask()).resolves.toBe("ok");
46
+ },
47
+ });
48
+
49
+ await run(app);
50
+ });
51
+
52
+ it("should timeout resource initialization", async () => {
53
+ const slowResource = defineResource({
54
+ id: "timeout.slowResource",
55
+ middleware: [timeoutMiddleware.with({ ttl: 20 })],
56
+ async init() {
57
+ await sleep(50);
58
+ return "ready";
59
+ },
60
+ });
61
+
62
+ const app = defineResource({
63
+ id: "app",
64
+ register: [slowResource],
65
+ });
66
+
67
+ await expect(run(app)).rejects.toThrow(/timed out/i);
68
+ });
69
+
70
+ it("should throw immediately when ttl is 0", async () => {
71
+ const task = defineTask({
72
+ id: "timeout.immediate",
73
+ middleware: [timeoutMiddleware.with({ ttl: 0 })],
74
+ run: async () => "never",
75
+ });
76
+
77
+ const app = defineResource({
78
+ id: "app",
79
+ register: [task],
80
+ dependencies: { task },
81
+ async init(_, { task }) {
82
+ await expect(task()).rejects.toThrow(/timed out/i);
83
+ },
84
+ });
85
+
86
+ await run(app);
87
+ });
88
+ });
@@ -178,7 +178,7 @@ describe("Semaphore", () => {
178
178
 
179
179
  const elapsed = Date.now() - startTime;
180
180
  expect(elapsed).toBeGreaterThanOrEqual(100);
181
- expect(elapsed).toBeLessThan(200); // Should not wait much longer
181
+ expect(elapsed).toBeLessThan(300); // Should not wait much longer
182
182
  });
183
183
 
184
184
  it("should timeout withPermit operation", async () => {