@zudojs/middleware 0.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/LICENSE +21 -0
- package/README.md +43 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/middlewareCore/index.d.ts +7 -0
- package/dist/middlewareCore/index.d.ts.map +1 -0
- package/dist/middlewareCore/index.js +7 -0
- package/dist/middlewareCore/index.js.map +1 -0
- package/dist/middlewareCore/middlewareCore.compose.d.ts +32 -0
- package/dist/middlewareCore/middlewareCore.compose.d.ts.map +1 -0
- package/dist/middlewareCore/middlewareCore.compose.js +68 -0
- package/dist/middlewareCore/middlewareCore.compose.js.map +1 -0
- package/dist/middlewareErrors/index.d.ts +7 -0
- package/dist/middlewareErrors/index.d.ts.map +1 -0
- package/dist/middlewareErrors/index.js +7 -0
- package/dist/middlewareErrors/index.js.map +1 -0
- package/dist/middlewareErrors/middlewareError.base.d.ts +28 -0
- package/dist/middlewareErrors/middlewareError.base.d.ts.map +1 -0
- package/dist/middlewareErrors/middlewareError.base.js +43 -0
- package/dist/middlewareErrors/middlewareError.base.js.map +1 -0
- package/dist/middlewarePipeline/index.d.ts +7 -0
- package/dist/middlewarePipeline/index.d.ts.map +1 -0
- package/dist/middlewarePipeline/index.js +7 -0
- package/dist/middlewarePipeline/index.js.map +1 -0
- package/dist/middlewarePipeline/middlewarePipeline.core.d.ts +17 -0
- package/dist/middlewarePipeline/middlewarePipeline.core.d.ts.map +1 -0
- package/dist/middlewarePipeline/middlewarePipeline.core.js +65 -0
- package/dist/middlewarePipeline/middlewarePipeline.core.js.map +1 -0
- package/dist/middlewareTypes/index.d.ts +8 -0
- package/dist/middlewareTypes/index.d.ts.map +1 -0
- package/dist/middlewareTypes/index.js +8 -0
- package/dist/middlewareTypes/index.js.map +1 -0
- package/dist/middlewareTypes/middlewareContext.type.d.ts +30 -0
- package/dist/middlewareTypes/middlewareContext.type.d.ts.map +1 -0
- package/dist/middlewareTypes/middlewareContext.type.js +7 -0
- package/dist/middlewareTypes/middlewareContext.type.js.map +1 -0
- package/dist/middlewareTypes/middlewareDefinition.type.d.ts +30 -0
- package/dist/middlewareTypes/middlewareDefinition.type.d.ts.map +1 -0
- package/dist/middlewareTypes/middlewareDefinition.type.js +7 -0
- package/dist/middlewareTypes/middlewareDefinition.type.js.map +1 -0
- package/dist/middlewareUtils/index.d.ts +7 -0
- package/dist/middlewareUtils/index.d.ts.map +1 -0
- package/dist/middlewareUtils/index.js +7 -0
- package/dist/middlewareUtils/index.js.map +1 -0
- package/dist/middlewareUtils/middlewareUtils.builtins.d.ts +38 -0
- package/dist/middlewareUtils/middlewareUtils.builtins.d.ts.map +1 -0
- package/dist/middlewareUtils/middlewareUtils.builtins.js +92 -0
- package/dist/middlewareUtils/middlewareUtils.builtins.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compose multiple middleware functions into a single handler.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareCore/middlewareCore
|
|
5
|
+
*
|
|
6
|
+
* Middleware executes in order (first added = first executed).
|
|
7
|
+
* Each middleware calls `next()` to proceed to the next one.
|
|
8
|
+
*/
|
|
9
|
+
const MAX_DEPTH = 100;
|
|
10
|
+
/**
|
|
11
|
+
* Compose an array of middleware into a single function.
|
|
12
|
+
*
|
|
13
|
+
* The returned function executes middleware in order.
|
|
14
|
+
* If no middleware is provided, the handler is called directly.
|
|
15
|
+
*
|
|
16
|
+
* @param middlewareList - Array of middleware functions
|
|
17
|
+
* @param handler - The final handler to execute after all middleware
|
|
18
|
+
* @returns Composed function
|
|
19
|
+
*/
|
|
20
|
+
export function compose(middlewareList, handler) {
|
|
21
|
+
if (middlewareList.length === 0) {
|
|
22
|
+
return handler;
|
|
23
|
+
}
|
|
24
|
+
return async (context) => {
|
|
25
|
+
let index = -1;
|
|
26
|
+
async function dispatch(i) {
|
|
27
|
+
if (i <= index) {
|
|
28
|
+
throw new Error("next() called multiple times");
|
|
29
|
+
}
|
|
30
|
+
index = i;
|
|
31
|
+
if (i < middlewareList.length) {
|
|
32
|
+
const mw = middlewareList[i];
|
|
33
|
+
return mw(context, () => dispatch(i + 1));
|
|
34
|
+
}
|
|
35
|
+
return handler(context);
|
|
36
|
+
}
|
|
37
|
+
return dispatch(0);
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sort and filter named middleware by priority.
|
|
42
|
+
*
|
|
43
|
+
* @param middlewareList - Array of named middleware
|
|
44
|
+
* @returns Sorted and filtered array of middleware handler functions
|
|
45
|
+
*/
|
|
46
|
+
export function resolveMiddleware(middlewareList) {
|
|
47
|
+
return middlewareList
|
|
48
|
+
.filter((mw) => mw.enabled !== false)
|
|
49
|
+
.sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100))
|
|
50
|
+
.map((mw) => mw.handler);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create a middleware that wraps another with timing.
|
|
54
|
+
*/
|
|
55
|
+
export function withTiming(name, middleware) {
|
|
56
|
+
return {
|
|
57
|
+
name,
|
|
58
|
+
handler: async (ctx, next) => {
|
|
59
|
+
const start = performance.now();
|
|
60
|
+
await middleware(ctx, next);
|
|
61
|
+
const duration = performance.now() - start;
|
|
62
|
+
if (duration > 100) {
|
|
63
|
+
console.warn(`[middleware] ${name} took ${duration.toFixed(1)}ms`);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=middlewareCore.compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareCore.compose.js","sourceRoot":"","sources":["../../src/middlewareCore/middlewareCore.compose.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CACrB,cAAwD,EACxD,OAAgD;IAEhD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,EAAE,OAAiB,EAAoB,EAAE;QACnD,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QAEf,KAAK,UAAU,QAAQ,CAAC,CAAS;YAC/B,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,KAAK,GAAG,CAAC,CAAC;YAEV,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC9B,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC;gBAC9B,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,cAA6D;IAE7D,OAAO,cAAc;SAClB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC;SACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,UAAsC;IAEtC,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAC3C,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,SAAS,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middlewareErrors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,sCAAsC,GACvC,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middlewareErrors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,sCAAsC,GACvC,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware-specific error classes.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareErrors
|
|
5
|
+
*/
|
|
6
|
+
import { BaseError } from "@zudojs/errors";
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when a middleware pipeline fails.
|
|
9
|
+
*/
|
|
10
|
+
export declare class MiddlewareError extends BaseError {
|
|
11
|
+
constructor(message: string, options?: {
|
|
12
|
+
readonly middlewareName?: string;
|
|
13
|
+
readonly cause?: unknown;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when a middleware exceeds its timeout.
|
|
18
|
+
*/
|
|
19
|
+
export declare class MiddlewareTimeoutError extends MiddlewareError {
|
|
20
|
+
constructor(middlewareName: string, timeoutMs: number);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Error thrown when a middleware calls next() multiple times.
|
|
24
|
+
*/
|
|
25
|
+
export declare class MiddlewareNextCalledMultipleTimesError extends MiddlewareError {
|
|
26
|
+
constructor(middlewareName: string);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=middlewareError.base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareError.base.d.ts","sourceRoot":"","sources":["../../src/middlewareErrors/middlewareError.base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,SAAS,EAIV,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,YACE,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;KAC1B,EAWF;CACF;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;IACzD,YAAY,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAIpD;CACF;AAED;;GAEG;AACH,qBAAa,sCAAuC,SAAQ,eAAe;IACzE,YAAY,cAAc,EAAE,MAAM,EAIjC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware-specific error classes.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareErrors
|
|
5
|
+
*/
|
|
6
|
+
import { BaseError, ErrorCode, ErrorCategory, ErrorSeverity, } from "@zudojs/errors";
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when a middleware pipeline fails.
|
|
9
|
+
*/
|
|
10
|
+
export class MiddlewareError extends BaseError {
|
|
11
|
+
constructor(message, options) {
|
|
12
|
+
super(message, {
|
|
13
|
+
code: ErrorCode.OPERATION_FAILED,
|
|
14
|
+
category: ErrorCategory.INTERNAL,
|
|
15
|
+
severity: ErrorSeverity.ERROR,
|
|
16
|
+
metadata: {
|
|
17
|
+
middlewareName: options?.middlewareName,
|
|
18
|
+
},
|
|
19
|
+
cause: options?.cause,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Error thrown when a middleware exceeds its timeout.
|
|
25
|
+
*/
|
|
26
|
+
export class MiddlewareTimeoutError extends MiddlewareError {
|
|
27
|
+
constructor(middlewareName, timeoutMs) {
|
|
28
|
+
super(`Middleware "${middlewareName}" timed out after ${timeoutMs}ms`, {
|
|
29
|
+
middlewareName,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Error thrown when a middleware calls next() multiple times.
|
|
35
|
+
*/
|
|
36
|
+
export class MiddlewareNextCalledMultipleTimesError extends MiddlewareError {
|
|
37
|
+
constructor(middlewareName) {
|
|
38
|
+
super(`Middleware "${middlewareName}" called next() multiple times`, {
|
|
39
|
+
middlewareName,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=middlewareError.base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareError.base.js","sourceRoot":"","sources":["../../src/middlewareErrors/middlewareError.base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC5C,YACE,OAAe,EACf,OAGC;QAED,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,SAAS,CAAC,gBAAgB;YAChC,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,QAAQ,EAAE,aAAa,CAAC,KAAK;YAC7B,QAAQ,EAAE;gBACR,cAAc,EAAE,OAAO,EAAE,cAAc;aACxC;YACD,KAAK,EAAE,OAAO,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,eAAe;IACzD,YAAY,cAAsB,EAAE,SAAiB;QACnD,KAAK,CAAC,eAAe,cAAc,qBAAqB,SAAS,IAAI,EAAE;YACrE,cAAc;SACf,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sCAAuC,SAAQ,eAAe;IACzE,YAAY,cAAsB;QAChC,KAAK,CAAC,eAAe,cAAc,gCAAgC,EAAE;YACnE,cAAc;SACf,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middlewarePipeline/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middlewarePipeline/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware pipeline with execution tracking and result reporting.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewarePipeline/middlewarePipeline
|
|
5
|
+
*/
|
|
6
|
+
import type { NamedMiddleware } from "../middlewareTypes/middlewareDefinition.type.js";
|
|
7
|
+
import type { PipelineResult, PipelineOptions } from "../middlewareTypes/middlewareContext.type.js";
|
|
8
|
+
/**
|
|
9
|
+
* Create a middleware pipeline that tracks execution.
|
|
10
|
+
*
|
|
11
|
+
* @param middlewareList - Named middleware to include
|
|
12
|
+
* @param handler - Final handler function
|
|
13
|
+
* @param options - Pipeline configuration
|
|
14
|
+
* @returns Pipeline execution function
|
|
15
|
+
*/
|
|
16
|
+
export declare function createPipeline<TContext, TResult>(middlewareList: readonly NamedMiddleware<TContext, TResult>[], handler: (context: TContext) => Promise<TResult>, options?: PipelineOptions): (context: TContext) => Promise<PipelineResult<TResult>>;
|
|
17
|
+
//# sourceMappingURL=middlewarePipeline.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewarePipeline.core.d.ts","sourceRoot":"","sources":["../../src/middlewarePipeline/middlewarePipeline.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,eAAe,EAChB,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAChB,MAAM,8CAA8C,CAAC;AAKtD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAC9C,cAAc,EAAE,SAAS,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAC7D,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,EAChD,OAAO,CAAC,EAAE,eAAe,GACxB,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAuDzD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware pipeline with execution tracking and result reporting.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewarePipeline/middlewarePipeline
|
|
5
|
+
*/
|
|
6
|
+
import { resolveMiddleware } from "../middlewareCore/middlewareCore.compose.js";
|
|
7
|
+
const DEFAULT_MAX = 50;
|
|
8
|
+
/**
|
|
9
|
+
* Create a middleware pipeline that tracks execution.
|
|
10
|
+
*
|
|
11
|
+
* @param middlewareList - Named middleware to include
|
|
12
|
+
* @param handler - Final handler function
|
|
13
|
+
* @param options - Pipeline configuration
|
|
14
|
+
* @returns Pipeline execution function
|
|
15
|
+
*/
|
|
16
|
+
export function createPipeline(middlewareList, handler, options) {
|
|
17
|
+
const resolved = resolveMiddleware(middlewareList);
|
|
18
|
+
const maxMiddleware = options?.maxMiddleware ?? DEFAULT_MAX;
|
|
19
|
+
const stopOnError = options?.stopOnError ?? true;
|
|
20
|
+
if (resolved.length > maxMiddleware) {
|
|
21
|
+
throw new Error(`Pipeline has ${resolved.length} middleware, exceeding maximum of ${maxMiddleware}`);
|
|
22
|
+
}
|
|
23
|
+
const enabledNames = middlewareList
|
|
24
|
+
.filter((mw) => mw.enabled !== false)
|
|
25
|
+
.sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100))
|
|
26
|
+
.map((mw) => mw.name);
|
|
27
|
+
return async (context) => {
|
|
28
|
+
const startTime = performance.now();
|
|
29
|
+
const executed = [];
|
|
30
|
+
let index = -1;
|
|
31
|
+
async function dispatch(i) {
|
|
32
|
+
if (i <= index) {
|
|
33
|
+
throw new Error("next() called multiple times");
|
|
34
|
+
}
|
|
35
|
+
index = i;
|
|
36
|
+
if (i < resolved.length) {
|
|
37
|
+
executed.push(enabledNames[i] ?? `middleware-${i}`);
|
|
38
|
+
const mw = resolved[i];
|
|
39
|
+
return mw(context, () => dispatch(i + 1));
|
|
40
|
+
}
|
|
41
|
+
return handler(context);
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const result = await dispatch(0);
|
|
45
|
+
return {
|
|
46
|
+
success: true,
|
|
47
|
+
result,
|
|
48
|
+
durationMs: performance.now() - startTime,
|
|
49
|
+
executedMiddleware: executed,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (stopOnError) {
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
error,
|
|
57
|
+
durationMs: performance.now() - startTime,
|
|
58
|
+
executedMiddleware: executed,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=middlewarePipeline.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewarePipeline.core.js","sourceRoot":"","sources":["../../src/middlewarePipeline/middlewarePipeline.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,cAA6D,EAC7D,OAAgD,EAChD,OAAyB;IAEzB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,WAAW,CAAC;IAC5D,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;IAEjD,IAAI,QAAQ,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,gBAAgB,QAAQ,CAAC,MAAM,qCAAqC,aAAa,EAAE,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,cAAc;SAChC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC;SACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO,KAAK,EAAE,OAAiB,EAAoC,EAAE;QACnE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QAEf,KAAK,UAAU,QAAQ,CAAC,CAAS;YAC/B,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,KAAK,GAAG,CAAC,CAAC;YAEV,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;gBACpD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;gBACxB,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM;gBACN,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS;gBACzC,kBAAkB,EAAE,QAAQ;aAC7B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK;oBACL,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS;oBACzC,kBAAkB,EAAE,QAAQ;iBAC7B,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core middleware type definitions: functions, contexts, and pipelines.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareTypes
|
|
5
|
+
*/
|
|
6
|
+
export { type Middleware, type NamedMiddleware, type MiddlewareFactory, } from "./middlewareDefinition.type.js";
|
|
7
|
+
export { type PipelineResult, type PipelineOptions, } from "./middlewareContext.type.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middlewareTypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middlewareTypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAIN,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGN,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware context and pipeline result types.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareTypes/middlewareContext
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Result of executing a middleware pipeline.
|
|
8
|
+
*/
|
|
9
|
+
export interface PipelineResult<TResult> {
|
|
10
|
+
/** Whether the pipeline completed successfully */
|
|
11
|
+
readonly success: boolean;
|
|
12
|
+
/** The result value (if successful) */
|
|
13
|
+
readonly result?: TResult;
|
|
14
|
+
/** Error that occurred (if failed) */
|
|
15
|
+
readonly error?: unknown;
|
|
16
|
+
/** Execution time in milliseconds */
|
|
17
|
+
readonly durationMs: number;
|
|
18
|
+
/** Names of middleware that executed */
|
|
19
|
+
readonly executedMiddleware: readonly string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for creating a middleware pipeline.
|
|
23
|
+
*/
|
|
24
|
+
export interface PipelineOptions {
|
|
25
|
+
/** Maximum number of middleware allowed */
|
|
26
|
+
readonly maxMiddleware?: number;
|
|
27
|
+
/** Whether to stop on first error (default: true) */
|
|
28
|
+
readonly stopOnError?: boolean;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=middlewareContext.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareContext.type.d.ts","sourceRoot":"","sources":["../../src/middlewareTypes/middlewareContext.type.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareContext.type.js","sourceRoot":"","sources":["../../src/middlewareTypes/middlewareContext.type.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core middleware type definitions.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareTypes/middlewareDefinition
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* A middleware function that processes a context and calls the next middleware.
|
|
8
|
+
*
|
|
9
|
+
* @typeParam TContext - The context type flowing through the pipeline
|
|
10
|
+
* @typeParam TResult - The result type returned by the pipeline
|
|
11
|
+
*/
|
|
12
|
+
export type Middleware<TContext, TResult = void> = (context: TContext, next: () => Promise<TResult>) => Promise<TResult>;
|
|
13
|
+
/**
|
|
14
|
+
* A middleware function with metadata.
|
|
15
|
+
*/
|
|
16
|
+
export interface NamedMiddleware<TContext, TResult = void> {
|
|
17
|
+
/** Human-readable name for debugging */
|
|
18
|
+
readonly name: string;
|
|
19
|
+
/** The middleware function */
|
|
20
|
+
readonly handler: Middleware<TContext, TResult>;
|
|
21
|
+
/** Execution priority (lower = earlier). Default: 100 */
|
|
22
|
+
readonly priority?: number;
|
|
23
|
+
/** Whether this middleware is enabled */
|
|
24
|
+
readonly enabled?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Middleware factory function.
|
|
28
|
+
*/
|
|
29
|
+
export type MiddlewareFactory<TContext, TResult = void> = (options?: Record<string, unknown>) => NamedMiddleware<TContext, TResult>;
|
|
30
|
+
//# sourceMappingURL=middlewareDefinition.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareDefinition.type.d.ts","sourceRoot":"","sources":["../../src/middlewareTypes/middlewareDefinition.type.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,UAAU,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,IAAI,CACjD,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KACzB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IACvD,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,IAAI,CACxD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareDefinition.type.js","sourceRoot":"","sources":["../../src/middlewareTypes/middlewareDefinition.type.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in middleware: logging, error handling, timeout, rate limiting.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareUtils
|
|
5
|
+
*/
|
|
6
|
+
export { loggingMiddleware, errorMiddleware, timeoutMiddleware, rateLimitMiddleware, } from "./middlewareUtils.builtins.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middlewareUtils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in middleware: logging, error handling, timeout, rate limiting.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareUtils
|
|
5
|
+
*/
|
|
6
|
+
export { loggingMiddleware, errorMiddleware, timeoutMiddleware, rateLimitMiddleware, } from "./middlewareUtils.builtins.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middlewareUtils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in middleware for common concerns.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareUtils/middlewareUtils
|
|
5
|
+
*/
|
|
6
|
+
import type { NamedMiddleware } from "../middlewareTypes/middlewareDefinition.type.js";
|
|
7
|
+
export interface LoggingContext {
|
|
8
|
+
readonly requestId?: string;
|
|
9
|
+
readonly path?: string;
|
|
10
|
+
readonly method?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a logging middleware.
|
|
14
|
+
*
|
|
15
|
+
* Logs request start, completion, and errors.
|
|
16
|
+
*/
|
|
17
|
+
export declare function loggingMiddleware(logger?: (msg: string) => void): NamedMiddleware<LoggingContext>;
|
|
18
|
+
/**
|
|
19
|
+
* Create an error-handling middleware.
|
|
20
|
+
*
|
|
21
|
+
* Catches errors and wraps them with context.
|
|
22
|
+
*/
|
|
23
|
+
export declare function errorMiddleware(onError?: (error: unknown, ctx: unknown) => void): NamedMiddleware<unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* Create a timeout middleware.
|
|
26
|
+
*
|
|
27
|
+
* Rejects if the pipeline takes too long.
|
|
28
|
+
*/
|
|
29
|
+
export declare function timeoutMiddleware<TContext>(timeoutMs: number): NamedMiddleware<TContext>;
|
|
30
|
+
/**
|
|
31
|
+
* Create a rate-limiting middleware.
|
|
32
|
+
*
|
|
33
|
+
* Uses a sliding window counter per key.
|
|
34
|
+
*/
|
|
35
|
+
export declare function rateLimitMiddleware<TContext extends {
|
|
36
|
+
readonly key?: string;
|
|
37
|
+
}>(maxRequests: number, windowMs: number): NamedMiddleware<TContext>;
|
|
38
|
+
//# sourceMappingURL=middlewareUtils.builtins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareUtils.builtins.d.ts","sourceRoot":"","sources":["../../src/middlewareUtils/middlewareUtils.builtins.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,eAAe,EAChB,MAAM,iDAAiD,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC7B,eAAe,CAAC,cAAc,CAAC,CAkBjC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,GAC/C,eAAe,CAAC,OAAO,CAAC,CAa1B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EACxC,SAAS,EAAE,MAAM,GAChB,eAAe,CAAC,QAAQ,CAAC,CAe3B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,SAAS;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5E,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,eAAe,CAAC,QAAQ,CAAC,CAyB3B"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in middleware for common concerns.
|
|
3
|
+
*
|
|
4
|
+
* @module middlewareUtils/middlewareUtils
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create a logging middleware.
|
|
8
|
+
*
|
|
9
|
+
* Logs request start, completion, and errors.
|
|
10
|
+
*/
|
|
11
|
+
export function loggingMiddleware(logger) {
|
|
12
|
+
const log = logger ?? console.log;
|
|
13
|
+
return {
|
|
14
|
+
name: "logging",
|
|
15
|
+
handler: async (ctx, next) => {
|
|
16
|
+
const start = performance.now();
|
|
17
|
+
log(`[middleware] → ${ctx.method ?? "UNKNOWN"} ${ctx.path ?? "/"}`);
|
|
18
|
+
try {
|
|
19
|
+
await next();
|
|
20
|
+
const ms = (performance.now() - start).toFixed(1);
|
|
21
|
+
log(`[middleware] ✓ completed in ${ms}ms`);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const ms = (performance.now() - start).toFixed(1);
|
|
25
|
+
log(`[middleware] ✗ failed in ${ms}ms: ${error}`);
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create an error-handling middleware.
|
|
33
|
+
*
|
|
34
|
+
* Catches errors and wraps them with context.
|
|
35
|
+
*/
|
|
36
|
+
export function errorMiddleware(onError) {
|
|
37
|
+
return {
|
|
38
|
+
name: "error-handler",
|
|
39
|
+
priority: 0,
|
|
40
|
+
handler: async (ctx, next) => {
|
|
41
|
+
try {
|
|
42
|
+
return await next();
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
onError?.(error, ctx);
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create a timeout middleware.
|
|
53
|
+
*
|
|
54
|
+
* Rejects if the pipeline takes too long.
|
|
55
|
+
*/
|
|
56
|
+
export function timeoutMiddleware(timeoutMs) {
|
|
57
|
+
return {
|
|
58
|
+
name: "timeout",
|
|
59
|
+
handler: async (ctx, next) => {
|
|
60
|
+
return Promise.race([
|
|
61
|
+
next(),
|
|
62
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(`Middleware timeout after ${timeoutMs}ms`)), timeoutMs)),
|
|
63
|
+
]);
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a rate-limiting middleware.
|
|
69
|
+
*
|
|
70
|
+
* Uses a sliding window counter per key.
|
|
71
|
+
*/
|
|
72
|
+
export function rateLimitMiddleware(maxRequests, windowMs) {
|
|
73
|
+
const counts = new Map();
|
|
74
|
+
return {
|
|
75
|
+
name: "rate-limit",
|
|
76
|
+
handler: async (ctx, next) => {
|
|
77
|
+
const key = ctx.key ?? "global";
|
|
78
|
+
const now = Date.now();
|
|
79
|
+
const entry = counts.get(key);
|
|
80
|
+
if (!entry || now > entry.resetAt) {
|
|
81
|
+
counts.set(key, { count: 1, resetAt: now + windowMs });
|
|
82
|
+
return next();
|
|
83
|
+
}
|
|
84
|
+
if (entry.count >= maxRequests) {
|
|
85
|
+
throw new Error(`Rate limit exceeded: ${maxRequests} requests per ${windowMs}ms`);
|
|
86
|
+
}
|
|
87
|
+
entry.count++;
|
|
88
|
+
return next();
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=middlewareUtils.builtins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middlewareUtils.builtins.js","sourceRoot":"","sources":["../../src/middlewareUtils/middlewareUtils.builtins.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA8B;IAE9B,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAClC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAChC,GAAG,CAAC,kBAAkB,GAAG,CAAC,MAAM,IAAI,SAAS,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC;gBACH,MAAM,IAAI,EAAE,CAAC;gBACb,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClD,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClD,GAAG,CAAC,4BAA4B,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAgD;IAEhD,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACtB,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB;IAEjB,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,OAAO,OAAO,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE;gBACN,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CACR,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,SAAS,IAAI,CAAC,CAAC,EAClE,SAAS,CACV,CACF;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,QAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8C,CAAC;IAErE,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,QAAQ,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC;gBACvD,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,wBAAwB,WAAW,iBAAiB,QAAQ,IAAI,CACjE,CAAC;YACJ,CAAC;YAED,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zudojs/middleware",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Composable middleware pipeline with composition, timing, error handling, and context propagation.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@zudojs/errors": "0.0.1"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=24.0.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"typescript": "^7.0.2",
|
|
28
|
+
"vitest": "^4.1.11"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"zudojs",
|
|
35
|
+
"middleware",
|
|
36
|
+
"pipeline",
|
|
37
|
+
"composition"
|
|
38
|
+
],
|
|
39
|
+
"homepage": "https://github.com/oyinlola-tech/zudo#readme",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/oyinlola-tech/zudo"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsc -p tsconfig.json",
|
|
46
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
47
|
+
"clean": "rm -rf dist",
|
|
48
|
+
"test": "vitest run",
|
|
49
|
+
"test:watch": "vitest"
|
|
50
|
+
}
|
|
51
|
+
}
|