@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.
- package/README.md +482 -34
- package/dist/cli/extract-docs.d.ts +2 -0
- package/dist/cli/extract-docs.js +88 -0
- package/dist/cli/extract-docs.js.map +1 -0
- package/dist/define.d.ts +21 -1
- package/dist/define.js +71 -0
- package/dist/define.js.map +1 -1
- package/dist/defs.d.ts +163 -4
- package/dist/defs.js +30 -0
- package/dist/defs.js.map +1 -1
- package/dist/docs/introspect.d.ts +7 -0
- package/dist/docs/introspect.js +199 -0
- package/dist/docs/introspect.js.map +1 -0
- package/dist/docs/markdown.d.ts +2 -0
- package/dist/docs/markdown.js +148 -0
- package/dist/docs/markdown.js.map +1 -0
- package/dist/docs/model.d.ts +62 -0
- package/dist/docs/model.js +33 -0
- package/dist/docs/model.js.map +1 -0
- package/dist/express/docsRouter.d.ts +12 -0
- package/dist/express/docsRouter.js +54 -0
- package/dist/express/docsRouter.js.map +1 -0
- package/dist/globals/globalMiddleware.d.ts +1 -0
- package/dist/globals/globalMiddleware.js +2 -0
- package/dist/globals/globalMiddleware.js.map +1 -1
- package/dist/globals/middleware/timeout.middleware.d.ts +8 -0
- package/dist/globals/middleware/timeout.middleware.js +35 -0
- package/dist/globals/middleware/timeout.middleware.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/models/DependencyProcessor.js +2 -2
- package/dist/models/DependencyProcessor.js.map +1 -1
- package/dist/models/Store.d.ts +1 -1
- package/dist/models/StoreConstants.d.ts +1 -1
- package/dist/models/StoreConstants.js +2 -1
- package/dist/models/StoreConstants.js.map +1 -1
- package/dist/models/TaskRunner.d.ts +2 -3
- package/dist/models/TaskRunner.js +1 -2
- package/dist/models/TaskRunner.js.map +1 -1
- package/dist/testing.d.ts +24 -0
- package/dist/testing.js +41 -0
- package/dist/testing.js.map +1 -0
- package/package.json +4 -4
- package/src/__tests__/benchmark/task-benchmark.test.ts +132 -0
- package/src/__tests__/createTestResource.test.ts +139 -0
- package/src/__tests__/globals/timeout.middleware.test.ts +88 -0
- package/src/__tests__/models/Semaphore.test.ts +1 -1
- package/src/__tests__/override.test.ts +104 -0
- package/src/__tests__/run.overrides.test.ts +50 -21
- package/src/__tests__/run.test.ts +19 -0
- package/src/__tests__/tags.test.ts +396 -0
- package/src/__tests__/typesafety.test.ts +109 -1
- package/src/define.ts +97 -0
- package/src/defs.ts +168 -8
- package/src/globals/globalMiddleware.ts +2 -0
- package/src/globals/middleware/timeout.middleware.ts +46 -0
- package/src/index.ts +6 -0
- package/src/models/DependencyProcessor.ts +2 -10
- package/src/models/StoreConstants.ts +2 -1
- package/src/models/TaskRunner.ts +1 -3
- 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,
|
|
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
|
|
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
|
|
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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"}
|
package/dist/models/Store.d.ts
CHANGED
|
@@ -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,
|
|
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":";;
|
|
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,
|
|
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
|
|
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
|
|
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":";;;AAGA,0DAAuD;AAKvD,MAAa,UAAU;IAOA;IACA;IACA;IARF,WAAW,GAAG,IAAI,GAAG,EAGrC,CAAC;IAEJ,YACqB,KAAY,EACZ,YAA0B,EAC1B,MAAc;QAFd,UAAK,GAAL,KAAK,CAAO;QACZ,iBAAY,GAAZ,YAAY,CAAc;QAC1B,WAAM,GAAN,MAAM,CAAQ;IAChC,CAAC;IAEJ
|
|
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 {};
|
package/dist/testing.js
ADDED
|
@@ -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.
|
|
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": "
|
|
30
|
-
"@typescript-eslint/parser": "
|
|
29
|
+
"@typescript-eslint/eslint-plugin": "8.39.0",
|
|
30
|
+
"@typescript-eslint/parser": "8.39.0",
|
|
31
31
|
"benchmark": "^2.1.4",
|
|
32
|
-
"eslint": "^
|
|
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(
|
|
181
|
+
expect(elapsed).toBeLessThan(300); // Should not wait much longer
|
|
182
182
|
});
|
|
183
183
|
|
|
184
184
|
it("should timeout withPermit operation", async () => {
|