@quilla-be-kit/http 0.2.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/LICENSE +21 -0
- package/README.md +400 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/adapter/hono/create-http-request.d.ts +15 -0
- package/dist/adapter/hono/create-http-request.d.ts.map +1 -0
- package/dist/adapter/hono/create-http-request.js +57 -0
- package/dist/adapter/hono/create-http-request.js.map +1 -0
- package/dist/adapter/hono/get-request-attributes.d.ts +2 -0
- package/dist/adapter/hono/get-request-attributes.d.ts.map +1 -0
- package/dist/adapter/hono/get-request-attributes.js +10 -0
- package/dist/adapter/hono/get-request-attributes.js.map +1 -0
- package/dist/adapter/hono/hono-middleware.adapter.d.ts +10 -0
- package/dist/adapter/hono/hono-middleware.adapter.d.ts.map +1 -0
- package/dist/adapter/hono/hono-middleware.adapter.js +13 -0
- package/dist/adapter/hono/hono-middleware.adapter.js.map +1 -0
- package/dist/adapter/hono/hono-request.adapter.d.ts +12 -0
- package/dist/adapter/hono/hono-request.adapter.d.ts.map +1 -0
- package/dist/adapter/hono/hono-request.adapter.js +99 -0
- package/dist/adapter/hono/hono-request.adapter.js.map +1 -0
- package/dist/adapter/hono/hono.server.d.ts +30 -0
- package/dist/adapter/hono/hono.server.d.ts.map +1 -0
- package/dist/adapter/hono/hono.server.js +64 -0
- package/dist/adapter/hono/hono.server.js.map +1 -0
- package/dist/adapter/hono/hono.types.d.ts +9 -0
- package/dist/adapter/hono/hono.types.d.ts.map +1 -0
- package/dist/adapter/hono/hono.types.js +4 -0
- package/dist/adapter/hono/hono.types.js.map +1 -0
- package/dist/adapter/hono/index.d.ts +2 -0
- package/dist/adapter/hono/index.d.ts.map +1 -0
- package/dist/adapter/hono/index.js +2 -0
- package/dist/adapter/hono/index.js.map +1 -0
- package/dist/decorator/authorize-scope.decorator.d.ts +6 -0
- package/dist/decorator/authorize-scope.decorator.d.ts.map +1 -0
- package/dist/decorator/authorize-scope.decorator.js +30 -0
- package/dist/decorator/authorize-scope.decorator.js.map +1 -0
- package/dist/decorator/controller.decorator.d.ts +2 -0
- package/dist/decorator/controller.decorator.d.ts.map +1 -0
- package/dist/decorator/controller.decorator.js +7 -0
- package/dist/decorator/controller.decorator.js.map +1 -0
- package/dist/decorator/index.d.ts +5 -0
- package/dist/decorator/index.d.ts.map +1 -0
- package/dist/decorator/index.js +5 -0
- package/dist/decorator/index.js.map +1 -0
- package/dist/decorator/method.decorators.d.ts +11 -0
- package/dist/decorator/method.decorators.d.ts.map +1 -0
- package/dist/decorator/method.decorators.js +27 -0
- package/dist/decorator/method.decorators.js.map +1 -0
- package/dist/decorator/route.metadata.d.ts +22 -0
- package/dist/decorator/route.metadata.d.ts.map +1 -0
- package/dist/decorator/route.metadata.js +61 -0
- package/dist/decorator/route.metadata.js.map +1 -0
- package/dist/decorator/validate-request.decorator.d.ts +7 -0
- package/dist/decorator/validate-request.decorator.d.ts.map +1 -0
- package/dist/decorator/validate-request.decorator.js +57 -0
- package/dist/decorator/validate-request.decorator.js.map +1 -0
- package/dist/error/index.d.ts +2 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +2 -0
- package/dist/error/index.js.map +1 -0
- package/dist/error/resolve-http-error.d.ts +7 -0
- package/dist/error/resolve-http-error.d.ts.map +1 -0
- package/dist/error/resolve-http-error.js +43 -0
- package/dist/error/resolve-http-error.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/request/authenticated-token.interface.d.ts +4 -0
- package/dist/request/authenticated-token.interface.d.ts.map +1 -0
- package/dist/request/authenticated-token.interface.js +2 -0
- package/dist/request/authenticated-token.interface.js.map +1 -0
- package/dist/request/http-attributes.d.ts +6 -0
- package/dist/request/http-attributes.d.ts.map +1 -0
- package/dist/request/http-attributes.js +6 -0
- package/dist/request/http-attributes.js.map +1 -0
- package/dist/request/http-middleware.type.d.ts +3 -0
- package/dist/request/http-middleware.type.d.ts.map +1 -0
- package/dist/request/http-middleware.type.js +2 -0
- package/dist/request/http-middleware.type.js.map +1 -0
- package/dist/request/http-request.interface.d.ts +18 -0
- package/dist/request/http-request.interface.d.ts.map +1 -0
- package/dist/request/http-request.interface.js +2 -0
- package/dist/request/http-request.interface.js.map +1 -0
- package/dist/request/http-response.type.d.ts +18 -0
- package/dist/request/http-response.type.d.ts.map +1 -0
- package/dist/request/http-response.type.js +2 -0
- package/dist/request/http-response.type.js.map +1 -0
- package/dist/request/index.d.ts +6 -0
- package/dist/request/index.d.ts.map +1 -0
- package/dist/request/index.js +2 -0
- package/dist/request/index.js.map +1 -0
- package/dist/router/auth-middleware-stack.type.d.ts +13 -0
- package/dist/router/auth-middleware-stack.type.d.ts.map +1 -0
- package/dist/router/auth-middleware-stack.type.js +2 -0
- package/dist/router/auth-middleware-stack.type.js.map +1 -0
- package/dist/router/controller-registration.type.d.ts +7 -0
- package/dist/router/controller-registration.type.d.ts.map +1 -0
- package/dist/router/controller-registration.type.js +2 -0
- package/dist/router/controller-registration.type.js.map +1 -0
- package/dist/router/http-module-meta.type.d.ts +8 -0
- package/dist/router/http-module-meta.type.d.ts.map +1 -0
- package/dist/router/http-module-meta.type.js +2 -0
- package/dist/router/http-module-meta.type.js.map +1 -0
- package/dist/router/index.d.ts +6 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +2 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/normalized-route.type.d.ts +20 -0
- package/dist/router/normalized-route.type.d.ts.map +1 -0
- package/dist/router/normalized-route.type.js +2 -0
- package/dist/router/normalized-route.type.js.map +1 -0
- package/dist/router/router-options.type.d.ts +37 -0
- package/dist/router/router-options.type.d.ts.map +1 -0
- package/dist/router/router-options.type.js +2 -0
- package/dist/router/router-options.type.js.map +1 -0
- package/dist/router/router.d.ts +11 -0
- package/dist/router/router.d.ts.map +1 -0
- package/dist/router/router.js +143 -0
- package/dist/router/router.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middleware-adapter.interface.d.ts +5 -0
- package/dist/server/middleware-adapter.interface.d.ts.map +1 -0
- package/dist/server/middleware-adapter.interface.js +2 -0
- package/dist/server/middleware-adapter.interface.js.map +1 -0
- package/dist/server/request-adapter.interface.d.ts +7 -0
- package/dist/server/request-adapter.interface.d.ts.map +1 -0
- package/dist/server/request-adapter.interface.js +2 -0
- package/dist/server/request-adapter.interface.js.map +1 -0
- package/dist/server/web-server.interface.d.ts +6 -0
- package/dist/server/web-server.interface.d.ts.map +1 -0
- package/dist/server/web-server.interface.js +2 -0
- package/dist/server/web-server.interface.js.map +1 -0
- package/dist/validator/index.d.ts +4 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +2 -0
- package/dist/validator/index.js.map +1 -0
- package/dist/validator/request-source.type.d.ts +2 -0
- package/dist/validator/request-source.type.d.ts.map +1 -0
- package/dist/validator/request-source.type.js +2 -0
- package/dist/validator/request-source.type.js.map +1 -0
- package/dist/validator/request-validator.interface.d.ts +30 -0
- package/dist/validator/request-validator.interface.d.ts.map +1 -0
- package/dist/validator/request-validator.interface.js +2 -0
- package/dist/validator/request-validator.interface.js.map +1 -0
- package/dist/validator/validation-result.type.d.ts +8 -0
- package/dist/validator/validation-result.type.d.ts.map +1 -0
- package/dist/validator/validation-result.type.js +2 -0
- package/dist/validator/validation-result.type.js.map +1 -0
- package/dist/validator/zod.d.ts +29 -0
- package/dist/validator/zod.d.ts.map +1 -0
- package/dist/validator/zod.js +43 -0
- package/dist/validator/zod.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-request.interface.d.ts","sourceRoot":"","sources":["../../src/request/http-request.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,MAAM,CAAC;IAClB,SAAS,IAAI,MAAM,CAAC;IACpB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC;IACvD,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC;IACnB,SAAS,IAAI,UAAU,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACnC,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC;IAC5D,mBAAmB,IAAI,gBAAgB,CAAC;IACxC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC7C,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC5C,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-request.interface.js","sourceRoot":"","sources":["../../src/request/http-request.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type HttpResponse = {
|
|
2
|
+
readonly httpCode: number;
|
|
3
|
+
readonly headers?: Record<string, string>;
|
|
4
|
+
readonly payload?: unknown;
|
|
5
|
+
readonly error?: {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly message: string;
|
|
8
|
+
readonly details?: unknown;
|
|
9
|
+
};
|
|
10
|
+
readonly metadata?: {
|
|
11
|
+
readonly pagination?: {
|
|
12
|
+
readonly total: number;
|
|
13
|
+
readonly page: number;
|
|
14
|
+
readonly limit: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=http-response.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-response.type.d.ts","sourceRoot":"","sources":["../../src/request/http-response.type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-response.type.js","sourceRoot":"","sources":["../../src/request/http-response.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { HttpRequest } from './http-request.interface.js';
|
|
2
|
+
export type { HttpResponse } from './http-response.type.js';
|
|
3
|
+
export type { HttpMiddleware } from './http-middleware.type.js';
|
|
4
|
+
export type { AuthenticatedToken } from './authenticated-token.interface.js';
|
|
5
|
+
export { HttpAttributes } from './http-attributes.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { HttpMiddleware } from '../request/http-middleware.type.js';
|
|
2
|
+
/**
|
|
3
|
+
* Router runs phases in fixed order regardless of key declaration —
|
|
4
|
+
* `tokenVerification` first, then `sessionLoad` if present. Phase
|
|
5
|
+
* misordering is a type error, not a runtime bug.
|
|
6
|
+
*/
|
|
7
|
+
export type AuthMiddlewareStack = {
|
|
8
|
+
/** Must populate `HttpAttributes.VERIFIED_TOKEN` on success. */
|
|
9
|
+
readonly tokenVerification: HttpMiddleware;
|
|
10
|
+
/** Optional — omit for services that verify tokens but don't load sessions. */
|
|
11
|
+
readonly sessionLoad?: HttpMiddleware;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=auth-middleware-stack.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-middleware-stack.type.d.ts","sourceRoot":"","sources":["../../src/router/auth-middleware-stack.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,gEAAgE;IAChE,QAAQ,CAAC,iBAAiB,EAAE,cAAc,CAAC;IAC3C,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;CACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-middleware-stack.type.js","sourceRoot":"","sources":["../../src/router/auth-middleware-stack.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HttpMiddleware } from '../request/http-middleware.type.js';
|
|
2
|
+
export type ControllerRegistration = {
|
|
3
|
+
readonly controller: object;
|
|
4
|
+
readonly prefix?: string;
|
|
5
|
+
readonly middlewares?: readonly HttpMiddleware[];
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=controller-registration.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-registration.type.d.ts","sourceRoot":"","sources":["../../src/router/controller-registration.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAClD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-registration.type.js","sourceRoot":"","sources":["../../src/router/controller-registration.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HttpMiddleware } from '../request/http-middleware.type.js';
|
|
2
|
+
import type { ControllerRegistration } from './controller-registration.type.js';
|
|
3
|
+
export type HttpModuleMeta = {
|
|
4
|
+
readonly controllers?: readonly (object | ControllerRegistration)[];
|
|
5
|
+
readonly middlewares?: readonly HttpMiddleware[];
|
|
6
|
+
readonly prefix?: string;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=http-module-meta.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-module-meta.type.d.ts","sourceRoot":"","sources":["../../src/router/http-module-meta.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,sBAAsB,CAAC,EAAE,CAAC;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-module-meta.type.js","sourceRoot":"","sources":["../../src/router/http-module-meta.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { Router } from './router.js';
|
|
2
|
+
export type { RouterOptions, RouterExecutionContextOptions, } from './router-options.type.js';
|
|
3
|
+
export type { AuthMiddlewareStack } from './auth-middleware-stack.type.js';
|
|
4
|
+
export type { ControllerRegistration } from './controller-registration.type.js';
|
|
5
|
+
export type { HttpModuleMeta } from './http-module-meta.type.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EACV,aAAa,EACb,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { HttpMethod } from '../decorator/route.metadata.js';
|
|
2
|
+
import type { HttpMiddleware } from '../request/http-middleware.type.js';
|
|
3
|
+
import type { HttpRequest } from '../request/http-request.interface.js';
|
|
4
|
+
import type { HttpResponse } from '../request/http-response.type.js';
|
|
5
|
+
export type NormalizedRoute = {
|
|
6
|
+
readonly httpMethod: HttpMethod;
|
|
7
|
+
readonly fullPath: string;
|
|
8
|
+
readonly public: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Complete ordered middleware chain for this route:
|
|
11
|
+
* `[system? → globalMiddlewares → (public ? [] : authMiddlewares) → moduleMiddlewares → registrationMiddlewares]`.
|
|
12
|
+
* Adapters iterate and wrap each entry; they do not re-compose the chain.
|
|
13
|
+
*/
|
|
14
|
+
readonly middlewareChain: readonly HttpMiddleware[];
|
|
15
|
+
readonly handler: (request: HttpRequest) => Promise<HttpResponse>;
|
|
16
|
+
readonly handlerMethodName: string;
|
|
17
|
+
readonly controllerName: string;
|
|
18
|
+
readonly specificity: number;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=normalized-route.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalized-route.type.d.ts","sourceRoot":"","sources":["../../src/router/normalized-route.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAClE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalized-route.type.js","sourceRoot":"","sources":["../../src/router/normalized-route.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ExecutionContextProvider } from '@quilla-be-kit/execution-context';
|
|
2
|
+
import type { Component } from '@quilla-be-kit/runtime';
|
|
3
|
+
import type { HttpMiddleware } from '../request/http-middleware.type.js';
|
|
4
|
+
import type { AuthMiddlewareStack } from './auth-middleware-stack.type.js';
|
|
5
|
+
import type { ControllerRegistration } from './controller-registration.type.js';
|
|
6
|
+
import type { HttpModuleMeta } from './http-module-meta.type.js';
|
|
7
|
+
/**
|
|
8
|
+
* Execution-context bootstrap options. Router installs the bootstrap
|
|
9
|
+
* middleware internally so it runs before any consumer middleware on every
|
|
10
|
+
* route (public and non-public). Provider carries its own factory, so this
|
|
11
|
+
* option collapses to `{ provider, correlationIdHeader? }`.
|
|
12
|
+
*/
|
|
13
|
+
export type RouterExecutionContextOptions = {
|
|
14
|
+
readonly provider: ExecutionContextProvider;
|
|
15
|
+
/** Header name to read the inbound correlation id from. Default: `x-correlation-id`. */
|
|
16
|
+
readonly correlationIdHeader?: string;
|
|
17
|
+
};
|
|
18
|
+
export type RouterOptions = {
|
|
19
|
+
readonly controllers?: readonly (object | ControllerRegistration)[];
|
|
20
|
+
readonly modules?: readonly Component<HttpModuleMeta>[];
|
|
21
|
+
/**
|
|
22
|
+
* Optional — when provided, Router installs a system-owned bootstrap that
|
|
23
|
+
* runs on every route. Required iff `authMiddlewares` is set (Router
|
|
24
|
+
* throws at construction otherwise). Handlers that never read
|
|
25
|
+
* `ExecutionContext` can skip this.
|
|
26
|
+
*/
|
|
27
|
+
readonly executionContext?: RouterExecutionContextOptions;
|
|
28
|
+
/** Custom middlewares that run on every route after the system bootstrap. */
|
|
29
|
+
readonly globalMiddlewares?: readonly HttpMiddleware[];
|
|
30
|
+
/**
|
|
31
|
+
* Typed, phase-ordered auth stack. Runs only on non-public routes, after
|
|
32
|
+
* `globalMiddlewares`. `tokenVerification` always runs first, then
|
|
33
|
+
* `sessionLoad` if present.
|
|
34
|
+
*/
|
|
35
|
+
readonly authMiddlewares?: AuthMiddlewareStack;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=router-options.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-options.type.d.ts","sourceRoot":"","sources":["../../src/router/router-options.type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,wFAAwF;IACxF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,sBAAsB,CAAC,EAAE,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;IAExD;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,6BAA6B,CAAC;IAE1D,6EAA6E;IAC7E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAEvD;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC;CAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-options.type.js","sourceRoot":"","sources":["../../src/router/router-options.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ExecutionContextProvider } from '@quilla-be-kit/execution-context';
|
|
2
|
+
import type { NormalizedRoute } from './normalized-route.type.js';
|
|
3
|
+
import type { RouterOptions } from './router-options.type.js';
|
|
4
|
+
export declare class Router {
|
|
5
|
+
private readonly routes;
|
|
6
|
+
private readonly executionContextProvider;
|
|
7
|
+
constructor(options: RouterOptions);
|
|
8
|
+
getRoutes(): readonly NormalizedRoute[];
|
|
9
|
+
getExecutionContextProvider(): ExecutionContextProvider | undefined;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAWjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAiC,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAO7F,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAuC;gBAEpE,OAAO,EAAE,aAAa;IA0ClC,SAAS,IAAI,SAAS,eAAe,EAAE;IAIvC,2BAA2B,IAAI,wBAAwB,GAAG,SAAS;CAGpE"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { getControllerPrefix, getControllerRoutes, } from '../decorator/route.metadata.js';
|
|
2
|
+
export class Router {
|
|
3
|
+
routes;
|
|
4
|
+
executionContextProvider;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
if (options.authMiddlewares && !options.executionContext) {
|
|
7
|
+
throw new Error('Router: `authMiddlewares` requires `executionContext` — auth middlewares depend on an active ExecutionContext scope. Wire `{ provider }` on the `executionContext` option.');
|
|
8
|
+
}
|
|
9
|
+
this.executionContextProvider = options.executionContext?.provider;
|
|
10
|
+
const systemMiddleware = options.executionContext
|
|
11
|
+
? buildExecutionContextMiddleware(options.executionContext)
|
|
12
|
+
: undefined;
|
|
13
|
+
const globalMiddlewares = options.globalMiddlewares ?? [];
|
|
14
|
+
const authChain = flattenAuthStack(options.authMiddlewares);
|
|
15
|
+
const registrations = [];
|
|
16
|
+
for (const raw of options.controllers ?? []) {
|
|
17
|
+
registrations.push({
|
|
18
|
+
...normalizeRegistration(raw),
|
|
19
|
+
modulePrefix: '',
|
|
20
|
+
moduleMiddlewares: [],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
for (const mod of options.modules ?? []) {
|
|
24
|
+
const meta = mod.meta;
|
|
25
|
+
if (!meta?.controllers)
|
|
26
|
+
continue;
|
|
27
|
+
for (const raw of meta.controllers) {
|
|
28
|
+
registrations.push({
|
|
29
|
+
...normalizeRegistration(raw),
|
|
30
|
+
modulePrefix: meta.prefix ?? '',
|
|
31
|
+
moduleMiddlewares: meta.middlewares ?? [],
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
this.routes = buildRoutes(registrations, {
|
|
36
|
+
systemMiddleware,
|
|
37
|
+
globalMiddlewares,
|
|
38
|
+
authChain,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
getRoutes() {
|
|
42
|
+
return this.routes;
|
|
43
|
+
}
|
|
44
|
+
getExecutionContextProvider() {
|
|
45
|
+
return this.executionContextProvider;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function buildExecutionContextMiddleware(options) {
|
|
49
|
+
const header = options.correlationIdHeader ?? 'x-correlation-id';
|
|
50
|
+
const { provider } = options;
|
|
51
|
+
return async (request, next) => {
|
|
52
|
+
const correlationId = request.getHeader(header);
|
|
53
|
+
const ctx = provider.factory.createBaselineContext(correlationId !== null ? { correlationId } : undefined);
|
|
54
|
+
await provider.runWithContext(ctx, next);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function flattenAuthStack(stack) {
|
|
58
|
+
if (!stack)
|
|
59
|
+
return [];
|
|
60
|
+
return stack.sessionLoad
|
|
61
|
+
? [stack.tokenVerification, stack.sessionLoad]
|
|
62
|
+
: [stack.tokenVerification];
|
|
63
|
+
}
|
|
64
|
+
function buildRoutes(registrations, chain) {
|
|
65
|
+
const normalized = [];
|
|
66
|
+
const seen = new Map();
|
|
67
|
+
for (const reg of registrations) {
|
|
68
|
+
const controllerPrefix = getControllerPrefix(reg.controller);
|
|
69
|
+
const controllerName = reg.controller.constructor.name;
|
|
70
|
+
const routeDefs = getControllerRoutes(reg.controller);
|
|
71
|
+
for (const def of routeDefs) {
|
|
72
|
+
const fullPath = joinPath(reg.modulePrefix, reg.prefix ?? '', controllerPrefix, def.path);
|
|
73
|
+
const key = `${def.httpMethod} ${fullPath}`;
|
|
74
|
+
const existing = seen.get(key);
|
|
75
|
+
if (existing) {
|
|
76
|
+
throw new Error(`Duplicate route: ${key} declared in both "${existing}" and "${controllerName}.${def.handlerMethodName}"`);
|
|
77
|
+
}
|
|
78
|
+
seen.set(key, `${controllerName}.${def.handlerMethodName}`);
|
|
79
|
+
const registrationMiddlewares = reg.middlewares ?? [];
|
|
80
|
+
const middlewareChain = [];
|
|
81
|
+
if (chain.systemMiddleware)
|
|
82
|
+
middlewareChain.push(chain.systemMiddleware);
|
|
83
|
+
middlewareChain.push(...chain.globalMiddlewares);
|
|
84
|
+
if (!def.public)
|
|
85
|
+
middlewareChain.push(...chain.authChain);
|
|
86
|
+
middlewareChain.push(...reg.moduleMiddlewares, ...registrationMiddlewares);
|
|
87
|
+
normalized.push({
|
|
88
|
+
httpMethod: def.httpMethod,
|
|
89
|
+
fullPath,
|
|
90
|
+
public: def.public,
|
|
91
|
+
middlewareChain,
|
|
92
|
+
handler: buildHandler(reg.controller, def),
|
|
93
|
+
handlerMethodName: def.handlerMethodName,
|
|
94
|
+
controllerName,
|
|
95
|
+
specificity: computeSpecificity(fullPath),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return normalized.sort(compareBySpecificity);
|
|
100
|
+
}
|
|
101
|
+
function normalizeRegistration(raw) {
|
|
102
|
+
if ('controller' in raw && typeof raw.controller === 'object') {
|
|
103
|
+
return raw;
|
|
104
|
+
}
|
|
105
|
+
return { controller: raw };
|
|
106
|
+
}
|
|
107
|
+
function joinPath(...segments) {
|
|
108
|
+
const combined = segments
|
|
109
|
+
.map((s) => s.trim())
|
|
110
|
+
.filter((s) => s.length > 0)
|
|
111
|
+
.map((s) => (s.startsWith('/') ? s : `/${s}`))
|
|
112
|
+
.join('')
|
|
113
|
+
.replace(/\/+/g, '/')
|
|
114
|
+
.replace(/\/+$/, '');
|
|
115
|
+
return combined.length === 0 ? '/' : combined;
|
|
116
|
+
}
|
|
117
|
+
function buildHandler(controller, def) {
|
|
118
|
+
const methodName = def.handlerMethodName;
|
|
119
|
+
const methodRef = controller[methodName];
|
|
120
|
+
if (typeof methodRef !== 'function') {
|
|
121
|
+
throw new Error(`Controller "${controller.constructor.name}" has no method "${methodName}"`);
|
|
122
|
+
}
|
|
123
|
+
return (request) => methodRef.call(controller, request);
|
|
124
|
+
}
|
|
125
|
+
function computeSpecificity(path) {
|
|
126
|
+
const segments = path.split('/').filter(Boolean);
|
|
127
|
+
let score = 0;
|
|
128
|
+
for (const seg of segments) {
|
|
129
|
+
if (seg.startsWith(':'))
|
|
130
|
+
score += 2;
|
|
131
|
+
else if (seg === '*')
|
|
132
|
+
score += 1;
|
|
133
|
+
else
|
|
134
|
+
score += 3;
|
|
135
|
+
}
|
|
136
|
+
return score + segments.length;
|
|
137
|
+
}
|
|
138
|
+
function compareBySpecificity(a, b) {
|
|
139
|
+
if (a.specificity !== b.specificity)
|
|
140
|
+
return b.specificity - a.specificity;
|
|
141
|
+
return b.fullPath.length - a.fullPath.length;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-adapter.interface.d.ts","sourceRoot":"","sources":["../../src/server/middleware-adapter.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-adapter.interface.js","sourceRoot":"","sources":["../../src/server/middleware-adapter.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HttpRequest } from '../request/http-request.interface.js';
|
|
2
|
+
import type { HttpResponse } from '../request/http-response.type.js';
|
|
3
|
+
export interface RequestAdapter {
|
|
4
|
+
controller(handler: (request: HttpRequest) => Promise<HttpResponse>): (frameworkContext: unknown) => Promise<unknown>;
|
|
5
|
+
toHttpRequest(frameworkContext: unknown): Promise<HttpRequest>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=request-adapter.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-adapter.interface.d.ts","sourceRoot":"","sources":["../../src/server/request-adapter.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,UAAU,CACR,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,GACvD,CAAC,gBAAgB,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,aAAa,CAAC,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAChE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-adapter.interface.js","sourceRoot":"","sources":["../../src/server/request-adapter.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-server.interface.d.ts","sourceRoot":"","sources":["../../src/server/web-server.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,SAAS,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-server.interface.js","sourceRoot":"","sources":["../../src/server/web-server.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-source.type.d.ts","sourceRoot":"","sources":["../../src/validator/request-source.type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-source.type.js","sourceRoot":"","sources":["../../src/validator/request-source.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ValidationResult } from './validation-result.type.js';
|
|
2
|
+
export type SchemaDescription = {
|
|
3
|
+
readonly keys: readonly string[];
|
|
4
|
+
};
|
|
5
|
+
export interface RequestValidator {
|
|
6
|
+
validate(schema: unknown, input: unknown): ValidationResult;
|
|
7
|
+
/**
|
|
8
|
+
* Optional schema introspection. When implemented, `@ValidateRequest`
|
|
9
|
+
* uses it to inject auth-derived fields (`scopeId`, `userId`) from the
|
|
10
|
+
* `ExecutionContext` into the validated input **only when the schema
|
|
11
|
+
* declares them**.
|
|
12
|
+
*
|
|
13
|
+
* Return `null` (or leave unimplemented) when the wrapped validator
|
|
14
|
+
* can't enumerate top-level field names — auth-injection is skipped in
|
|
15
|
+
* that case (fail-safe: no surprise fields written into schemas that
|
|
16
|
+
* didn't ask for them).
|
|
17
|
+
*
|
|
18
|
+
* Zod example:
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* describeSchema(schema) {
|
|
22
|
+
* if (schema instanceof z.ZodObject) return { keys: Object.keys(schema.shape) };
|
|
23
|
+
* if (schema instanceof z.ZodEffects) return this.describeSchema(schema._def.schema);
|
|
24
|
+
* return null;
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
describeSchema?(schema: unknown): SchemaDescription | null;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=request-validator.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-validator.interface.d.ts","sourceRoot":"","sources":["../../src/validator/request-validator.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAC5D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,cAAc,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAAC;CAC5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-validator.interface.js","sourceRoot":"","sources":["../../src/validator/request-validator.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-result.type.d.ts","sourceRoot":"","sources":["../../src/validator/validation-result.type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-result.type.js","sourceRoot":"","sources":["../../src/validator/validation-result.type.ts"],"names":[],"mappings":""}
|