@bluelibs/runner 3.4.2 → 3.4.3
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/dist/define.d.ts +1 -1
- package/dist/define.js +37 -31
- package/dist/define.js.map +1 -1
- package/dist/globals/globalMiddleware.d.ts +3 -3
- package/dist/globals/middleware/requireContext.middleware.d.ts +1 -1
- package/dist/globals/middleware/retry.middleware.d.ts +1 -1
- package/dist/globals/middleware/timeout.middleware.d.ts +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/models/StoreConstants.d.ts +1 -1
- package/package.json +1 -1
- package/src/__tests__/run.middleware.test.ts +71 -0
- package/src/define.ts +49 -37
package/dist/define.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export type MiddlewareEverywhereOptions = {
|
|
|
58
58
|
* @param middlewareDef - The middleware definition config.
|
|
59
59
|
* @returns A branded middleware definition usable by the runner.
|
|
60
60
|
*/
|
|
61
|
-
export declare function defineMiddleware<TConfig extends Record<string, any
|
|
61
|
+
export declare function defineMiddleware<TConfig extends Record<string, any> = any, TDependencies extends DependencyMapType = any>(middlewareDef: IMiddlewareDefinition<TConfig, TDependencies>): IMiddleware<TConfig, TDependencies>;
|
|
62
62
|
/**
|
|
63
63
|
* Type guard: checks if a definition is a Task.
|
|
64
64
|
* @param definition - Any value to test.
|
package/dist/define.js
CHANGED
|
@@ -232,7 +232,7 @@ function defineEvent(config) {
|
|
|
232
232
|
*/
|
|
233
233
|
function defineMiddleware(middlewareDef) {
|
|
234
234
|
const filePath = (0, getCallerFile_1.getCallerFile)();
|
|
235
|
-
const
|
|
235
|
+
const base = {
|
|
236
236
|
[defs_1.symbolFilePath]: filePath,
|
|
237
237
|
[defs_1.symbolMiddleware]: true,
|
|
238
238
|
config: {},
|
|
@@ -240,39 +240,45 @@ function defineMiddleware(middlewareDef) {
|
|
|
240
240
|
...middlewareDef,
|
|
241
241
|
dependencies: middlewareDef.dependencies || {},
|
|
242
242
|
};
|
|
243
|
-
return
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
243
|
+
// Wrap an object to ensure we always return chainable helpers
|
|
244
|
+
const wrap = (obj) => {
|
|
245
|
+
return {
|
|
246
|
+
...obj,
|
|
247
|
+
with: (config) => {
|
|
248
|
+
// Validate config with schema if provided (fail fast)
|
|
249
|
+
if (obj.configSchema) {
|
|
250
|
+
try {
|
|
251
|
+
config = obj.configSchema.parse(config);
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
throw new errors_1.ValidationError("Middleware config", obj.id, error instanceof Error ? error : new Error(String(error)));
|
|
255
|
+
}
|
|
250
256
|
}
|
|
251
|
-
|
|
252
|
-
|
|
257
|
+
return wrap({
|
|
258
|
+
...obj,
|
|
259
|
+
[defs_1.symbolMiddlewareConfigured]: true,
|
|
260
|
+
config: {
|
|
261
|
+
...obj.config,
|
|
262
|
+
...config,
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
},
|
|
266
|
+
everywhere(options = {}) {
|
|
267
|
+
const { tasks = true, resources = true } = options;
|
|
268
|
+
// If already global, prevent calling again
|
|
269
|
+
if (obj[defs_1.symbolMiddlewareEverywhereTasks] ||
|
|
270
|
+
obj[defs_1.symbolMiddlewareEverywhereResources]) {
|
|
271
|
+
throw new errors_1.MiddlewareAlreadyGlobalError(obj.id);
|
|
253
272
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
},
|
|
262
|
-
};
|
|
263
|
-
},
|
|
264
|
-
everywhere(options = {}) {
|
|
265
|
-
const { tasks = true, resources = true } = options;
|
|
266
|
-
return {
|
|
267
|
-
...object,
|
|
268
|
-
[defs_1.symbolMiddlewareEverywhereTasks]: tasks,
|
|
269
|
-
[defs_1.symbolMiddlewareEverywhereResources]: resources,
|
|
270
|
-
everywhere() {
|
|
271
|
-
throw new errors_1.MiddlewareAlreadyGlobalError(object.id);
|
|
272
|
-
},
|
|
273
|
-
};
|
|
274
|
-
},
|
|
273
|
+
return wrap({
|
|
274
|
+
...obj,
|
|
275
|
+
[defs_1.symbolMiddlewareEverywhereTasks]: tasks,
|
|
276
|
+
[defs_1.symbolMiddlewareEverywhereResources]: resources,
|
|
277
|
+
});
|
|
278
|
+
},
|
|
279
|
+
};
|
|
275
280
|
};
|
|
281
|
+
return wrap(base);
|
|
276
282
|
}
|
|
277
283
|
/**
|
|
278
284
|
* Type guard: checks if a definition is a Task.
|
package/dist/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":";;AA4DA,gCAmDC;AAED,wCAyGC;AAQD,kCAiCC;AAED,kCAoBC;AA0BD,
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,8 @@ import { Context } from "../context";
|
|
|
5
5
|
export declare const globalMiddlewares: {
|
|
6
6
|
requireContext: import("../defs").IMiddleware<{
|
|
7
7
|
context: Context<any>;
|
|
8
|
-
},
|
|
9
|
-
retry: import("../defs").IMiddleware<import("./middleware/retry.middleware").RetryMiddlewareConfig,
|
|
8
|
+
}, any>;
|
|
9
|
+
retry: import("../defs").IMiddleware<import("./middleware/retry.middleware").RetryMiddlewareConfig, any>;
|
|
10
10
|
cache: import("../defs").IMiddleware<any, {
|
|
11
11
|
cache: import("../defs").IResource<{
|
|
12
12
|
defaultOptions?: any;
|
|
@@ -20,5 +20,5 @@ export declare const globalMiddlewares: {
|
|
|
20
20
|
cacheFactoryTask: import("../defs").ITask<any, Promise<import("./middleware/cache.middleware").ICacheInstance>, any, undefined, any>;
|
|
21
21
|
}, any, any>;
|
|
22
22
|
}>;
|
|
23
|
-
timeout: import("../defs").IMiddleware<import("./middleware/timeout.middleware").TimeoutMiddlewareConfig,
|
|
23
|
+
timeout: import("../defs").IMiddleware<import("./middleware/timeout.middleware").TimeoutMiddlewareConfig, any>;
|
|
24
24
|
};
|
|
@@ -2,5 +2,5 @@ import { Context } from "../../context";
|
|
|
2
2
|
type RequireContextMiddlewareConfig = {
|
|
3
3
|
context: Context<any>;
|
|
4
4
|
};
|
|
5
|
-
export declare const requireContextMiddleware: import("../../defs").IMiddleware<RequireContextMiddlewareConfig,
|
|
5
|
+
export declare const requireContextMiddleware: import("../../defs").IMiddleware<RequireContextMiddlewareConfig, any>;
|
|
6
6
|
export {};
|
|
@@ -17,4 +17,4 @@ export interface RetryMiddlewareConfig {
|
|
|
17
17
|
*/
|
|
18
18
|
delayStrategy?: (attempt: number, error: Error) => number;
|
|
19
19
|
}
|
|
20
|
-
export declare const retryMiddleware: import("../../defs").IMiddleware<RetryMiddlewareConfig,
|
|
20
|
+
export declare const retryMiddleware: import("../../defs").IMiddleware<RetryMiddlewareConfig, any>;
|
|
@@ -5,4 +5,4 @@ export interface TimeoutMiddlewareConfig {
|
|
|
5
5
|
*/
|
|
6
6
|
ttl: number;
|
|
7
7
|
}
|
|
8
|
-
export declare const timeoutMiddleware: import("../../defs").IMiddleware<TimeoutMiddlewareConfig,
|
|
8
|
+
export declare const timeoutMiddleware: import("../../defs").IMiddleware<TimeoutMiddlewareConfig, any>;
|
package/dist/index.d.ts
CHANGED
|
@@ -85,8 +85,8 @@ declare const globals: {
|
|
|
85
85
|
middlewares: {
|
|
86
86
|
requireContext: import("./defs").IMiddleware<{
|
|
87
87
|
context: import("./context").Context<any>;
|
|
88
|
-
},
|
|
89
|
-
retry: import("./defs").IMiddleware<import("./globals/middleware/retry.middleware").RetryMiddlewareConfig,
|
|
88
|
+
}, any>;
|
|
89
|
+
retry: import("./defs").IMiddleware<import("./globals/middleware/retry.middleware").RetryMiddlewareConfig, any>;
|
|
90
90
|
cache: import("./defs").IMiddleware<any, {
|
|
91
91
|
cache: import("./defs").IResource<{
|
|
92
92
|
defaultOptions?: any;
|
|
@@ -100,7 +100,7 @@ declare const globals: {
|
|
|
100
100
|
cacheFactoryTask: import("./defs").ITask<any, Promise<import("./defs").ICacheInstance>, any, undefined, any>;
|
|
101
101
|
}, any, any>;
|
|
102
102
|
}>;
|
|
103
|
-
timeout: import("./defs").IMiddleware<import("./globals/middleware/timeout.middleware").TimeoutMiddlewareConfig,
|
|
103
|
+
timeout: import("./defs").IMiddleware<import("./globals/middleware/timeout.middleware").TimeoutMiddlewareConfig, any>;
|
|
104
104
|
};
|
|
105
105
|
};
|
|
106
106
|
export { globals };
|
|
@@ -11,4 +11,4 @@ export declare function getBuiltInResources(eventManager: EventManager, store: S
|
|
|
11
11
|
}> | import("../defs").IResourceWithConfig<EventManager, Promise<EventManager>, {}> | import("../defs").IResourceWithConfig<Store, Promise<Store>, {}>)[];
|
|
12
12
|
export declare function getBuiltInMiddlewares(): (import("../defs").IMiddleware<{
|
|
13
13
|
context: import("../context").Context<any>;
|
|
14
|
-
},
|
|
14
|
+
}, any> | import("../defs").IMiddleware<import("../globals/middleware/retry.middleware").RetryMiddlewareConfig, any> | import("../defs").IMiddleware<import("../globals/middleware/timeout.middleware").TimeoutMiddlewareConfig, any>)[];
|
package/package.json
CHANGED
|
@@ -400,6 +400,77 @@ describe("Configurable Middleware (.with)", () => {
|
|
|
400
400
|
|
|
401
401
|
await run(app);
|
|
402
402
|
});
|
|
403
|
+
|
|
404
|
+
it("should allow configured middleware to be global for tasks", async () => {
|
|
405
|
+
const calls: string[] = [];
|
|
406
|
+
const validate = defineMiddleware<{ schema: string }>({
|
|
407
|
+
id: "validate.global.tasks",
|
|
408
|
+
run: async ({ next }, _deps, config) => {
|
|
409
|
+
calls.push(`global:${config.schema}`);
|
|
410
|
+
return next();
|
|
411
|
+
},
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
const task = defineTask({
|
|
415
|
+
id: "task.global",
|
|
416
|
+
run: async () => "ok",
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
const app = defineResource({
|
|
420
|
+
id: "app.global.tasks",
|
|
421
|
+
register: [
|
|
422
|
+
validate
|
|
423
|
+
.with({ schema: "user" })
|
|
424
|
+
.everywhere({ tasks: true, resources: false }),
|
|
425
|
+
task,
|
|
426
|
+
],
|
|
427
|
+
dependencies: { task },
|
|
428
|
+
async init(_, { task }) {
|
|
429
|
+
const result = await task();
|
|
430
|
+
expect(result).toBe("ok");
|
|
431
|
+
},
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
await run(app);
|
|
435
|
+
expect(calls).toContain("global:user");
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
it("should allow configured middleware to be global for resources", async () => {
|
|
439
|
+
const calls: string[] = [];
|
|
440
|
+
const m = defineMiddleware<{ flag: string }>({
|
|
441
|
+
id: "validate.global.resources",
|
|
442
|
+
run: async ({ next, resource }, _deps, config) => {
|
|
443
|
+
if (resource) {
|
|
444
|
+
calls.push(`${String(resource.definition.id)}:${config.flag}`);
|
|
445
|
+
}
|
|
446
|
+
return next();
|
|
447
|
+
},
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
const sub = defineResource({
|
|
451
|
+
id: "res.sub",
|
|
452
|
+
async init() {
|
|
453
|
+
return "Sub";
|
|
454
|
+
},
|
|
455
|
+
});
|
|
456
|
+
|
|
457
|
+
const app = defineResource({
|
|
458
|
+
id: "res.app",
|
|
459
|
+
register: [
|
|
460
|
+
m.with({ flag: "X" }).everywhere({ tasks: false, resources: true }),
|
|
461
|
+
sub,
|
|
462
|
+
],
|
|
463
|
+
dependencies: { sub },
|
|
464
|
+
async init(_, { sub }) {
|
|
465
|
+
return sub;
|
|
466
|
+
},
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
const result = await run(app);
|
|
470
|
+
expect(String(result.value)).toBe("Sub");
|
|
471
|
+
expect(calls).toContain("res.app:X");
|
|
472
|
+
expect(calls).toContain("res.sub:X");
|
|
473
|
+
});
|
|
403
474
|
});
|
|
404
475
|
|
|
405
476
|
describe("Middleware.everywhere()", () => {
|
package/src/define.ts
CHANGED
|
@@ -306,13 +306,13 @@ export type MiddlewareEverywhereOptions = {
|
|
|
306
306
|
* @returns A branded middleware definition usable by the runner.
|
|
307
307
|
*/
|
|
308
308
|
export function defineMiddleware<
|
|
309
|
-
TConfig extends Record<string, any
|
|
310
|
-
TDependencies extends DependencyMapType
|
|
309
|
+
TConfig extends Record<string, any> = any,
|
|
310
|
+
TDependencies extends DependencyMapType = any
|
|
311
311
|
>(
|
|
312
312
|
middlewareDef: IMiddlewareDefinition<TConfig, TDependencies>
|
|
313
313
|
): IMiddleware<TConfig, TDependencies> {
|
|
314
314
|
const filePath = getCallerFile();
|
|
315
|
-
const
|
|
315
|
+
const base = {
|
|
316
316
|
[symbolFilePath]: filePath,
|
|
317
317
|
[symbolMiddleware]: true,
|
|
318
318
|
config: {} as TConfig,
|
|
@@ -321,44 +321,56 @@ export function defineMiddleware<
|
|
|
321
321
|
dependencies: middlewareDef.dependencies || ({} as TDependencies),
|
|
322
322
|
} as IMiddleware<TConfig, TDependencies>;
|
|
323
323
|
|
|
324
|
-
return
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
324
|
+
// Wrap an object to ensure we always return chainable helpers
|
|
325
|
+
const wrap = (
|
|
326
|
+
obj: IMiddleware<TConfig, TDependencies>
|
|
327
|
+
): IMiddleware<TConfig, TDependencies> => {
|
|
328
|
+
return {
|
|
329
|
+
...obj,
|
|
330
|
+
with: (config: TConfig) => {
|
|
331
|
+
// Validate config with schema if provided (fail fast)
|
|
332
|
+
if (obj.configSchema) {
|
|
333
|
+
try {
|
|
334
|
+
config = obj.configSchema.parse(config);
|
|
335
|
+
} catch (error) {
|
|
336
|
+
throw new ValidationError(
|
|
337
|
+
"Middleware config",
|
|
338
|
+
obj.id,
|
|
339
|
+
error instanceof Error ? error : new Error(String(error))
|
|
340
|
+
);
|
|
341
|
+
}
|
|
337
342
|
}
|
|
338
|
-
}
|
|
339
343
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
344
|
+
return wrap({
|
|
345
|
+
...obj,
|
|
346
|
+
[symbolMiddlewareConfigured]: true,
|
|
347
|
+
config: {
|
|
348
|
+
...(obj.config as TConfig),
|
|
349
|
+
...config,
|
|
350
|
+
},
|
|
351
|
+
} as IMiddleware<TConfig, TDependencies>);
|
|
352
|
+
},
|
|
353
|
+
everywhere(options: MiddlewareEverywhereOptions = {}) {
|
|
354
|
+
const { tasks = true, resources = true } = options;
|
|
351
355
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
throw new MiddlewareAlreadyGlobalError(
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
|
|
356
|
+
// If already global, prevent calling again
|
|
357
|
+
if (
|
|
358
|
+
obj[symbolMiddlewareEverywhereTasks] ||
|
|
359
|
+
obj[symbolMiddlewareEverywhereResources]
|
|
360
|
+
) {
|
|
361
|
+
throw new MiddlewareAlreadyGlobalError(obj.id);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
return wrap({
|
|
365
|
+
...obj,
|
|
366
|
+
[symbolMiddlewareEverywhereTasks]: tasks,
|
|
367
|
+
[symbolMiddlewareEverywhereResources]: resources,
|
|
368
|
+
} as IMiddleware<TConfig, TDependencies>);
|
|
369
|
+
},
|
|
370
|
+
} as IMiddleware<TConfig, TDependencies>;
|
|
361
371
|
};
|
|
372
|
+
|
|
373
|
+
return wrap(base);
|
|
362
374
|
}
|
|
363
375
|
|
|
364
376
|
/**
|