@ismael1361/router 1.0.1 → 1.0.6
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 +493 -738
- package/dist/Doc/index.d.ts +21 -0
- package/dist/Doc/index.d.ts.map +1 -0
- package/dist/Doc/type.d.ts +66 -0
- package/dist/Doc/type.d.ts.map +1 -0
- package/dist/HandleError.d.ts +42 -0
- package/dist/HandleError.d.ts.map +1 -1
- package/dist/Layer.d.ts +131 -0
- package/dist/Layer.d.ts.map +1 -0
- package/dist/Middlewares.d.ts +89 -0
- package/dist/Middlewares.d.ts.map +1 -0
- package/dist/handler.d.ts +91 -92
- package/dist/handler.d.ts.map +1 -1
- package/dist/index.d.ts +96 -117
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware.d.ts +101 -118
- package/dist/middleware.d.ts.map +1 -1
- package/dist/redocUi/index.d.ts +4 -0
- package/dist/redocUi/index.d.ts.map +1 -0
- package/dist/router.d.ts +210 -333
- package/dist/router.d.ts.map +1 -1
- package/dist/type.d.ts +45 -52
- package/dist/type.d.ts.map +1 -1
- package/dist/utils.d.ts +7 -2
- package/dist/utils.d.ts.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type swaggerJSDoc from "swagger-jsdoc";
|
|
2
|
+
import type { ExtractScopesBySecuritySchemes, Reference, ComponentSecurity, SecuritySchemesTypes, ComponentSchema } from "./type";
|
|
3
|
+
import type { MiddlewareFCDoc } from "../type";
|
|
4
|
+
export declare class Doc {
|
|
5
|
+
operation: swaggerJSDoc.Operation;
|
|
6
|
+
components: swaggerJSDoc.Components;
|
|
7
|
+
constructor(operation?: swaggerJSDoc.Operation, components?: swaggerJSDoc.Components);
|
|
8
|
+
get doc(): MiddlewareFCDoc;
|
|
9
|
+
summary(summary: string): this;
|
|
10
|
+
description(description: string): this;
|
|
11
|
+
tags<T extends string>(...tags: T[]): this;
|
|
12
|
+
operationId(operationId: string): this;
|
|
13
|
+
parameter(options: swaggerJSDoc.Parameter | swaggerJSDoc.Reference): this;
|
|
14
|
+
requestBody(): void;
|
|
15
|
+
security<S extends string | ComponentSecurity<any, any>, E extends ExtractScopesBySecuritySchemes<S>>(security: S, ...scopes: E[]): this;
|
|
16
|
+
static ref<R extends string | ComponentSecurity<any, any> | ComponentSchema<any, any>>(ref: R): Reference<R>;
|
|
17
|
+
static component: {
|
|
18
|
+
securityScheme<N extends string, O extends SecuritySchemesTypes>(name: N, options: O): ComponentSecurity<N, O>;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Doc/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,EAAsC,MAAM,QAAQ,CAAC;AACtK,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,SAAS,CAAC;AA2CzD,qBAAa,GAAG;IACI,SAAS,EAAE,YAAY,CAAC,SAAS;IAAc,UAAU,EAAE,YAAY,CAAC,UAAU;gBAAlF,SAAS,GAAE,YAAY,CAAC,SAAc,EAAS,UAAU,GAAE,YAAY,CAAC,UAAsB;IAEjH,IAAI,GAAG,IAAI,eAAe,CAKzB;IAED,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB,WAAW,CAAC,WAAW,EAAE,MAAM;IAK/B,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;IAKnC,WAAW,CAAC,WAAW,EAAE,MAAM;IAK/B,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS;IAKlE,WAAW;IAEX,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,8BAA8B,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE;IAiBjI,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAoB5G,MAAM,CAAC,SAAS;uBACA,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,oBAAoB,QAAQ,CAAC,WAAW,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;MAO7G;CACF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type swaggerJSDoc from "swagger-jsdoc";
|
|
2
|
+
import { Prettify } from "../type";
|
|
3
|
+
export type SecuritySchemes_apiKey = {
|
|
4
|
+
type: "apiKey";
|
|
5
|
+
name: string;
|
|
6
|
+
in: "query" | "header" | "cookie";
|
|
7
|
+
description?: string;
|
|
8
|
+
};
|
|
9
|
+
export type SecuritySchemes_http = {
|
|
10
|
+
type: "http";
|
|
11
|
+
scheme: "basic" | "bearer" | "digest" | "ntlm";
|
|
12
|
+
bearerFormat?: "JWT" | "SAML" | "WS-Security";
|
|
13
|
+
description?: string;
|
|
14
|
+
};
|
|
15
|
+
export type SecuritySchemes_oauth2 = {
|
|
16
|
+
type: "oauth2";
|
|
17
|
+
flows: swaggerJSDoc.OAuthFlows;
|
|
18
|
+
description?: string;
|
|
19
|
+
};
|
|
20
|
+
export type SecuritySchemes_openIdConnect = {
|
|
21
|
+
type: "openIdConnect";
|
|
22
|
+
openIdConnectUrl: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
};
|
|
25
|
+
export type SecuritySchemes_mutualTLS = {
|
|
26
|
+
type: "mutualTLS";
|
|
27
|
+
description?: string;
|
|
28
|
+
};
|
|
29
|
+
export type SecuritySchemesTypes = SecuritySchemes_apiKey | SecuritySchemes_http | SecuritySchemes_oauth2 | SecuritySchemes_openIdConnect | SecuritySchemes_mutualTLS | swaggerJSDoc.SecurityScheme;
|
|
30
|
+
export type ExtractScopesBySecuritySchemes<S> = S extends swaggerJSDoc.SecurityScheme & {
|
|
31
|
+
flows?: infer F;
|
|
32
|
+
} ? F extends Record<string, infer Flow> ? Flow extends swaggerJSDoc.OAuthFlow ? keyof NonNullable<Flow["scopes"]> : never : never : S extends ComponentSecurity<any, infer I> ? ExtractScopesBySecuritySchemes<I> : never;
|
|
33
|
+
export type ComponentSecurity<N extends string, O extends SecuritySchemesTypes> = {
|
|
34
|
+
securitySchemes: {
|
|
35
|
+
[k in N]: Prettify<O>;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export type ComponentSchema<N extends string, S extends swaggerJSDoc.Schema> = {
|
|
39
|
+
schemas: {
|
|
40
|
+
[k in N]: Prettify<S>;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
export type Reference<R> = R extends string ? R extends `#/components/${infer I}` ? {
|
|
44
|
+
$ref: `#/components/${I}`;
|
|
45
|
+
} : {
|
|
46
|
+
$ref: `#/components/${R}`;
|
|
47
|
+
} : R extends ComponentSecurity<infer N, any> ? `#/components/securitySchemes/${N}` : R extends ComponentSchema<infer N, any> ? `#/components/schemas/${N}` : never;
|
|
48
|
+
export interface ModelValueNumber extends swaggerJSDoc.Schema {
|
|
49
|
+
type?: "number" | "integer";
|
|
50
|
+
format?: "float" | "double" | "int32" | "int64";
|
|
51
|
+
minimum?: number;
|
|
52
|
+
maximum?: number;
|
|
53
|
+
exclusiveMinimum?: boolean;
|
|
54
|
+
exclusiveMaximum?: boolean;
|
|
55
|
+
description?: string;
|
|
56
|
+
nullable?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface ModelValueString extends swaggerJSDoc.Schema {
|
|
59
|
+
format?: "date" | "date-time" | "password" | "byte" | "binary" | "email" | "uuid" | "uri" | "hostname" | "ipv4" | "ipv6";
|
|
60
|
+
minLength?: number;
|
|
61
|
+
maxLength?: number;
|
|
62
|
+
description?: string;
|
|
63
|
+
pattern?: RegExp | string;
|
|
64
|
+
nullable?: boolean;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/Doc/type.ts"],"names":[],"mappings":"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"}
|
package/dist/HandleError.d.ts
CHANGED
|
@@ -62,13 +62,55 @@ declare const codes: {
|
|
|
62
62
|
readonly 510: "Not Extended";
|
|
63
63
|
readonly 511: "Network Authentication Required";
|
|
64
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* Uma classe de erro personalizada projetada para lidar com erros operacionais em uma aplicação,
|
|
67
|
+
* especialmente em um contexto de API HTTP. Permite encapsular uma mensagem de erro, um nome,
|
|
68
|
+
* um código de status HTTP e um nível de log.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* // Exemplo 1: Erro com mensagem e código de status.
|
|
72
|
+
* try {
|
|
73
|
+
* throw new HandleError("Recurso não encontrado.", "NOT_FOUND", 404);
|
|
74
|
+
* } catch (e) {
|
|
75
|
+
* if (e instanceof HandleError) {
|
|
76
|
+
* // Em um handler de API, você poderia usar e.code para definir o status da resposta.
|
|
77
|
+
* // res.status(e.code).json({ message: e.message, name: e.name });
|
|
78
|
+
* console.log(e.message); // "Recurso não encontrado."
|
|
79
|
+
* console.log(e.name); // "NOT_FOUND"
|
|
80
|
+
* console.log(e.code); // 404
|
|
81
|
+
* console.log(e.status); // { code: 404, message: 'Not Found' }
|
|
82
|
+
* }
|
|
83
|
+
* }
|
|
84
|
+
*
|
|
85
|
+
* // Exemplo 2: Erro de validação com nível de log 'WARN'.
|
|
86
|
+
* const validationError = new HandleError(
|
|
87
|
+
* "O campo 'email' é inválido.",
|
|
88
|
+
* "VALIDATION_ERROR",
|
|
89
|
+
* 400, // Bad Request
|
|
90
|
+
* "WARN"
|
|
91
|
+
* );
|
|
92
|
+
*
|
|
93
|
+
* // Exemplo 3: Erro genérico, usando os valores padrão.
|
|
94
|
+
* const genericError = new HandleError("Algo deu errado.");
|
|
95
|
+
* console.log(genericError.name); // "DEFAULT"
|
|
96
|
+
* console.log(genericError.code); // 200 (comportamento padrão quando 'cause' não é número)
|
|
97
|
+
* console.log(genericError.level); // "ERROR"
|
|
98
|
+
*/
|
|
65
99
|
export declare class HandleError extends Error {
|
|
66
100
|
readonly message: string;
|
|
67
101
|
readonly name: string;
|
|
68
102
|
readonly cause?: (keyof typeof codes | HandleError | Error | string | object) | undefined;
|
|
69
103
|
readonly level: "ERROR" | "WARN" | "INFO" | "NONE";
|
|
104
|
+
/**
|
|
105
|
+
* @param {string} message A mensagem de erro principal, legível para humanos.
|
|
106
|
+
* @param {string} [name="DEFAULT"] Um nome/código para categorizar o erro (ex: "VALIDATION_ERROR").
|
|
107
|
+
* @param {keyof typeof codes | HandleError | Error | string | object} [cause] A causa raiz do erro. Se for um número, será tratado como um código de status HTTP.
|
|
108
|
+
* @param {"ERROR" | "WARN" | "INFO" | "NONE"} [level="ERROR"] O nível de severidade do erro, usado para controle de logs.
|
|
109
|
+
*/
|
|
70
110
|
constructor(message: string, name?: string, cause?: (keyof typeof codes | HandleError | Error | string | object) | undefined, level?: "ERROR" | "WARN" | "INFO" | "NONE");
|
|
111
|
+
/** Retorna o código de status HTTP associado ao erro. Extraído da propriedade `cause` se for um número, caso contrário, o padrão é 200. */
|
|
71
112
|
get code(): 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226 | 300 | 301 | 302 | 303 | 304 | 305 | 307 | 308 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 | 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511;
|
|
113
|
+
/** Retorna um objeto contendo o código de status e a mensagem HTTP correspondente. */
|
|
72
114
|
get status(): {
|
|
73
115
|
code: 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226 | 300 | 301 | 302 | 303 | 304 | 305 | 307 | 308 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 | 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511;
|
|
74
116
|
message: "Continue" | "Switching Protocols" | "Processing" | "Early Hints" | "OK" | "Created" | "Accepted" | "Non-Authoritative Information" | "No Content" | "Reset Content" | "Partial Content" | "Multi-Status" | "Already Reported" | "IM Used" | "Multiple Choices" | "Moved Permanently" | "Found" | "See Other" | "Not Modified" | "Use Proxy" | "Temporary Redirect" | "Permanent Redirect" | "Bad Request" | "Unauthorized" | "Payment Required" | "Forbidden" | "Not Found" | "Method Not Allowed" | "Not Acceptable" | "Proxy Authentication Required" | "Request Timeout" | "Conflict" | "Gone" | "Length Required" | "Precondition Failed" | "Payload Too Large" | "URI Too Long" | "Unsupported Media Type" | "Range Not Satisfiable" | "Expectation Failed" | "I'm a Teapot" | "Misdirected Request" | "Unprocessable Entity" | "Locked" | "Failed Dependency" | "Too Early" | "Upgrade Required" | "Precondition Required" | "Too Many Requests" | "Request Header Fields Too Large" | "Unavailable For Legal Reasons" | "Internal Server Error" | "Not Implemented" | "Bad Gateway" | "Service Unavailable" | "Gateway Timeout" | "HTTP Version Not Supported" | "Variant Also Negotiates" | "Insufficient Storage" | "Loop Detected" | "Not Extended" | "Network Authentication Required";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandleError.d.ts","sourceRoot":"","sources":["../src/HandleError.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DD,CAAC;AAEX,qBAAa,WAAY,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"HandleError.d.ts","sourceRoot":"","sources":["../src/HandleError.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DD,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,WAAY,SAAQ,KAAK;IAQpC,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,KAAK,CAAC,GAAE,MAAM,OAAO,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM;IAC3E,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;IAVnD;;;;;OAKG;gBAEO,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAkB,EACxB,KAAK,CAAC,GAAE,MAAM,OAAO,KAAK,GAAG,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,aAAA,EAClE,KAAK,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAgB;IAK7D,2IAA2I;IAC3I,IAAI,IAAI,sXAEP;IAED,sFAAsF;IACtF,IAAI,MAAM;;;MAKT;CACD"}
|
package/dist/Layer.d.ts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { HandlerFC, ILayer, IRoute, MiddlewareFC, MiddlewareFCDoc, NextFunction, RouterMethods, Request, Response } from "./type";
|
|
2
|
+
import { EventEmitter } from "@ismael1361/utils";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
* Representa uma camada interna do roteador, funcionando como uma coleção estruturada
|
|
6
|
+
* de definições de rotas e middlewares.
|
|
7
|
+
*
|
|
8
|
+
* Esta classe é o núcleo do sistema de roteamento, permitindo a construção de uma árvore
|
|
9
|
+
* de rotas aninhadas, onde middlewares de camadas superiores são aplicados às camadas inferiores.
|
|
10
|
+
* Ela não deve ser usada diretamente pelo consumidor da biblioteca.
|
|
11
|
+
*/
|
|
12
|
+
export declare class Layer extends Array<ILayer> {
|
|
13
|
+
path: string;
|
|
14
|
+
doc: MiddlewareFCDoc;
|
|
15
|
+
private __event__;
|
|
16
|
+
/** @internal O índice da última camada adicionada. */
|
|
17
|
+
index: number;
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
* @param {string} [path=""] O prefixo de caminho para esta camada.
|
|
21
|
+
* @param {MiddlewareFCDoc} [doc={}] A documentação base para esta camada.
|
|
22
|
+
*/
|
|
23
|
+
constructor(path?: string, doc?: MiddlewareFCDoc);
|
|
24
|
+
/**
|
|
25
|
+
* Adiciona um ouvinte para eventos internos da camada.
|
|
26
|
+
* @param {"add"} event O nome do evento. Atualmente, apenas 'add' é suportado.
|
|
27
|
+
* @param {(route: IRoute) => void} listener A função a ser chamada quando o evento é emitido.
|
|
28
|
+
*/
|
|
29
|
+
addListener(event: "add", listener: (route: IRoute) => void): import("@ismael1361/utils").EventHandler;
|
|
30
|
+
/**
|
|
31
|
+
* Remove um ouvinte de eventos.
|
|
32
|
+
* @param {"add"} event O nome do evento.
|
|
33
|
+
* @param {(route: IRoute) => void} listener A função ouvinte a ser removida.
|
|
34
|
+
*/
|
|
35
|
+
removeListener(event: "add", listener: (route: IRoute) => void): EventEmitter<{
|
|
36
|
+
add: [route: IRoute];
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* @internal
|
|
40
|
+
* Adiciona uma nova definição (camada) à pilha. Este é o método base usado por `get`, `post`, `middleware`, etc.
|
|
41
|
+
* Retorna um objeto semelhante a `this` com um getter/setter para a documentação da camada recém-adicionada.
|
|
42
|
+
*/
|
|
43
|
+
pushPath(type: "layer" | "middleware", method: RouterMethods, path: string, handle: Array<HandlerFC | MiddlewareFC> | Layer, doc?: MiddlewareFCDoc): this;
|
|
44
|
+
/**
|
|
45
|
+
* Cria uma nova sub-camada (sub-roteador) aninhada dentro da camada atual.
|
|
46
|
+
* Permite agrupar rotas sob um prefixo de caminho comum.
|
|
47
|
+
*
|
|
48
|
+
* @returns {Layer} A nova instância de `Layer` que representa o sub-roteador.
|
|
49
|
+
*/
|
|
50
|
+
route(path: string, route: Layer, doc?: MiddlewareFCDoc): Layer;
|
|
51
|
+
route(path: string, doc?: MiddlewareFCDoc): Layer;
|
|
52
|
+
route(route: Layer, doc?: MiddlewareFCDoc): Layer;
|
|
53
|
+
route(doc?: MiddlewareFCDoc): Layer;
|
|
54
|
+
/**
|
|
55
|
+
* @internal
|
|
56
|
+
* Fábrica estática para criar uma nova instância de `Layer`.
|
|
57
|
+
*/
|
|
58
|
+
static route(path?: string, doc?: MiddlewareFCDoc): Layer;
|
|
59
|
+
/**
|
|
60
|
+
* Anexa uma instância de `Layer` (um roteador) existente a esta camada.
|
|
61
|
+
* É um método de conveniência para compor roteadores.
|
|
62
|
+
*
|
|
63
|
+
* @returns {this} A própria instância da camada para encadeamento.
|
|
64
|
+
*/
|
|
65
|
+
by(route: Layer, doc?: MiddlewareFCDoc): this;
|
|
66
|
+
/** @internal */
|
|
67
|
+
by(path: string, route: Layer, doc?: MiddlewareFCDoc): this;
|
|
68
|
+
/**
|
|
69
|
+
* @internal
|
|
70
|
+
* Retorna uma representação da pilha de camadas para fins de depuração.
|
|
71
|
+
*/
|
|
72
|
+
get stack(): ILayer[];
|
|
73
|
+
executeMiddlewares(request: Request, response: Response, next: NextFunction): Promise<any>;
|
|
74
|
+
/**
|
|
75
|
+
* Processa e achata a árvore de camadas em uma lista linear de rotas finais (`IRoute`).
|
|
76
|
+
* Este getter é fundamental, pois resolve os middlewares aninhados, aplica-os às rotas filhas
|
|
77
|
+
* e consolida os caminhos e a documentação.
|
|
78
|
+
*/
|
|
79
|
+
get routes(): IRoute[];
|
|
80
|
+
/**
|
|
81
|
+
* @internal
|
|
82
|
+
* Adiciona um middleware a esta camada.
|
|
83
|
+
*/
|
|
84
|
+
middleware(handle: Array<MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
85
|
+
/**
|
|
86
|
+
* @internal
|
|
87
|
+
* Adiciona uma rota do tipo GET.
|
|
88
|
+
*/
|
|
89
|
+
get(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
90
|
+
/**
|
|
91
|
+
* @internal
|
|
92
|
+
* Adiciona uma rota do tipo POST.
|
|
93
|
+
*/
|
|
94
|
+
post(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
95
|
+
/**
|
|
96
|
+
* @internal
|
|
97
|
+
* Adiciona uma rota do tipo PUT.
|
|
98
|
+
*/
|
|
99
|
+
put(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
100
|
+
/**
|
|
101
|
+
* @internal
|
|
102
|
+
* Adiciona uma rota do tipo DELETE.
|
|
103
|
+
*/
|
|
104
|
+
delete(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
105
|
+
/**
|
|
106
|
+
* @internal
|
|
107
|
+
* Adiciona uma rota do tipo PATCH.
|
|
108
|
+
*/
|
|
109
|
+
patch(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
110
|
+
/**
|
|
111
|
+
* @internal
|
|
112
|
+
* Adiciona uma rota do tipo OPTIONS.
|
|
113
|
+
*/
|
|
114
|
+
options(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
115
|
+
/**
|
|
116
|
+
* @internal
|
|
117
|
+
* Adiciona uma rota do tipo HEAD.
|
|
118
|
+
*/
|
|
119
|
+
head(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
120
|
+
/**
|
|
121
|
+
* @internal
|
|
122
|
+
* Adiciona uma rota que corresponde a todos os métodos HTTP.
|
|
123
|
+
*/
|
|
124
|
+
all(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
125
|
+
/**
|
|
126
|
+
* @internal
|
|
127
|
+
* Adiciona um middleware a um caminho específico.
|
|
128
|
+
*/
|
|
129
|
+
use(path: string, handle: Array<HandlerFC | MiddlewareFC>, doc?: MiddlewareFCDoc): this;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=Layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layer.d.ts","sourceRoot":"","sources":["../src/Layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { MiddlewareFC, Request, Response } from "./type";
|
|
2
|
+
import { OptionsJson, Options, OptionsText, OptionsUrlencoded } from "body-parser";
|
|
3
|
+
/**
|
|
4
|
+
* Retorna um middleware que analisa corpos de requisição JSON.
|
|
5
|
+
* Este middleware é um wrapper em torno do `body-parser.json()`.
|
|
6
|
+
*
|
|
7
|
+
* @param {OptionsJson} [options] - Opções de configuração para o `body-parser`.
|
|
8
|
+
* @returns {MiddlewareFC<Request, Response>} Uma função de middleware do Express.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* import { create, Middlewares } from '@ismael1361/router';
|
|
12
|
+
*
|
|
13
|
+
* const app = create();
|
|
14
|
+
*
|
|
15
|
+
* // Aplica o middleware para analisar JSON em todas as rotas
|
|
16
|
+
* app.middleware(Middlewares.json());
|
|
17
|
+
*
|
|
18
|
+
* app.post('/data').handler((req, res) => {
|
|
19
|
+
* // req.body agora contém o objeto JSON enviado
|
|
20
|
+
* res.json({ received: req.body });
|
|
21
|
+
* });
|
|
22
|
+
*/
|
|
23
|
+
export declare const json: (options?: OptionsJson | undefined) => MiddlewareFC<Request, Response>;
|
|
24
|
+
/**
|
|
25
|
+
* Retorna um middleware que analisa corpos de requisição como um Buffer.
|
|
26
|
+
* Este middleware é um wrapper em torno do `body-parser.raw()`.
|
|
27
|
+
*
|
|
28
|
+
* @param {Options} [options] - Opções de configuração para o `body-parser`.
|
|
29
|
+
* @returns {MiddlewareFC<Request, Response>} Uma função de middleware do Express.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* import { create, Middlewares } from '@ismael1361/router';
|
|
33
|
+
*
|
|
34
|
+
* const app = create();
|
|
35
|
+
*
|
|
36
|
+
* // Analisa corpos do tipo 'application/octet-stream' como Buffer
|
|
37
|
+
* app.middleware(Middlewares.raw({ type: 'application/octet-stream', limit: '10mb' }));
|
|
38
|
+
*
|
|
39
|
+
* app.post('/upload-raw').handler((req, res) => {
|
|
40
|
+
* // req.body é um Buffer com os dados brutos
|
|
41
|
+
* console.log('Buffer recebido:', req.body.length, 'bytes');
|
|
42
|
+
* res.send('Raw data received');
|
|
43
|
+
* });
|
|
44
|
+
*/
|
|
45
|
+
export declare const raw: (options?: Options) => MiddlewareFC<Request, Response>;
|
|
46
|
+
/**
|
|
47
|
+
* Retorna um middleware que analisa corpos de requisição como texto.
|
|
48
|
+
* Este middleware é um wrapper em torno do `body-parser.text()`.
|
|
49
|
+
*
|
|
50
|
+
* @param {OptionsText} [options] - Opções de configuração para o `body-parser`.
|
|
51
|
+
* @returns {MiddlewareFC<Request, Response>} Uma função de middleware do Express.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* import { create, Middlewares } from '@ismael1361/router';
|
|
55
|
+
*
|
|
56
|
+
* const app = create();
|
|
57
|
+
*
|
|
58
|
+
* // Analisa corpos do tipo 'text/plain' como string
|
|
59
|
+
* app.middleware(Middlewares.text({ type: 'text/plain' }));
|
|
60
|
+
*
|
|
61
|
+
* app.post('/log').handler((req, res) => {
|
|
62
|
+
* // req.body é uma string com o conteúdo do corpo
|
|
63
|
+
* console.log('Log recebido:', req.body);
|
|
64
|
+
* res.send('Log received');
|
|
65
|
+
* });
|
|
66
|
+
*/
|
|
67
|
+
export declare const text: (options?: OptionsText) => MiddlewareFC<Request, Response>;
|
|
68
|
+
/**
|
|
69
|
+
* Retorna um middleware que analisa corpos de requisição com o formato `application/x-www-form-urlencoded`.
|
|
70
|
+
* Este middleware é um wrapper em torno do `body-parser.urlencoded()`.
|
|
71
|
+
*
|
|
72
|
+
* @param {OptionsUrlencoded} [options] - Opções de configuração para o `body-parser`.
|
|
73
|
+
* @returns {MiddlewareFC<Request, Response>} Uma função de middleware do Express.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* import { create, Middlewares } from '@ismael1361/router';
|
|
77
|
+
*
|
|
78
|
+
* const app = create();
|
|
79
|
+
*
|
|
80
|
+
* // Aplica o middleware para analisar dados de formulário
|
|
81
|
+
* app.middleware(Middlewares.urlencoded({ extended: true }));
|
|
82
|
+
*
|
|
83
|
+
* app.post('/submit-form').handler((req, res) => {
|
|
84
|
+
* // req.body contém os dados do formulário
|
|
85
|
+
* res.json({ form_data: req.body });
|
|
86
|
+
* });
|
|
87
|
+
*/
|
|
88
|
+
export declare const urlencoded: (options?: OptionsUrlencoded) => MiddlewareFC<Request, Response>;
|
|
89
|
+
//# sourceMappingURL=Middlewares.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Middlewares.d.ts","sourceRoot":"","sources":["../src/Middlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAmB,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/F;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,IAAI,GAAI,UAAU,WAAW,GAAG,SAAS,KAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAEtF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,GAAG,GAAI,UAAU,OAAO,KAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAErE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,IAAI,GAAI,UAAU,WAAW,KAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAE1E,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,UAAU,GAAI,UAAU,iBAAiB,KAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAEtF,CAAC"}
|
package/dist/handler.d.ts
CHANGED
|
@@ -1,114 +1,113 @@
|
|
|
1
|
-
import type { Request, Response,
|
|
1
|
+
import type { Request, Response, RouterProps, MiddlewareFC, RouterMethods, MiddlewareFCDoc, HandlerCallback, MiddlewareCallback, NextFunction } from "./type";
|
|
2
2
|
import { RequestMiddleware } from "./middleware";
|
|
3
|
-
import {
|
|
3
|
+
import { Router } from "./router";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Representa um construtor de rotas encadeável.
|
|
6
6
|
*
|
|
7
|
-
* Esta classe
|
|
8
|
-
*
|
|
9
|
-
* Em vez de adicionar manualmente os mesmos middlewares a várias rotas, você pode agrupá-los
|
|
10
|
-
* com o handler em uma única unidade.
|
|
7
|
+
* Esta classe não deve ser instanciada diretamente. Em vez disso, uma instância é retornada
|
|
8
|
+
* quando você chama um método de rota como `.get()`, `.post()`, etc., em uma instância de `Router`.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* Ela permite encadear middlewares específicos para a rota e, finalmente, definir o manipulador
|
|
11
|
+
* da rota e sua documentação.
|
|
14
12
|
*
|
|
15
13
|
* @example
|
|
16
|
-
*
|
|
17
|
-
* interface UserRequest extends Request {
|
|
18
|
-
* user: { id: number; name: string; };
|
|
19
|
-
* }
|
|
20
|
-
* const findUserByIdMiddleware: MiddlewareFC<UserRequest> = (req, res, next) => {
|
|
21
|
-
* // Lógica para buscar o usuário pelo ID nos parâmetros da rota
|
|
22
|
-
* const userId = parseInt(req.params.id, 10);
|
|
23
|
-
* if (userId === 1) {
|
|
24
|
-
* req.user = { id: 1, name: "John Doe" };
|
|
25
|
-
* next();
|
|
26
|
-
* } else {
|
|
27
|
-
* res.status(404).send("User not found");
|
|
28
|
-
* }
|
|
29
|
-
* };
|
|
14
|
+
* const router = create();
|
|
30
15
|
*
|
|
31
|
-
* //
|
|
32
|
-
*
|
|
33
|
-
* //
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* // 3. Criar uma instância de `PreparedHandler` que agrupa o middleware e o handler.
|
|
38
|
-
* const getUserProfileController = new PreparedHandler(
|
|
39
|
-
* getUserProfileHandler,
|
|
40
|
-
* [findUserByIdMiddleware]
|
|
41
|
-
* );
|
|
42
|
-
*
|
|
43
|
-
* // 4. Usar o controller pré-preparado em uma definição de rota.
|
|
44
|
-
* // O `router` automaticamente aplicará `findUserByIdMiddleware` antes de `getUserProfileHandler`.
|
|
45
|
-
* router.get("/users/:id").handler(getUserProfileController);
|
|
46
|
-
*/
|
|
47
|
-
export declare class PreparedHandler<Rq extends Request = Request, Rs extends Response = Response> extends RequestMiddleware<Rq, Rs> {
|
|
48
|
-
readonly callback: HandlerFC<Rq, Rs>;
|
|
49
|
-
constructor(callback: HandlerFC<Rq, Rs>, middlewares?: MiddlewareFC<any, any>[]);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Construtor de rotas que permite o encadeamento de middlewares antes do handler final.
|
|
53
|
-
* Esta classe é a parte central da API fluente para definir rotas (ex: `router.get(...).middleware(...).handler(...)`).
|
|
54
|
-
* Ela herda da classe `RequestMiddleware` para acumular middlewares e seus tipos associados.
|
|
55
|
-
*
|
|
56
|
-
* @template Rq - O tipo de requisição (Request) acumulado a partir dos middlewares anteriores.
|
|
57
|
-
* @template Rs - O tipo de resposta (Response) acumulado a partir dos middlewares anteriores.
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* // Exemplo de como a classe Handler é usada internamente pelo RouterContext.
|
|
61
|
-
*
|
|
62
|
-
* // 1. RequestMiddleware de autenticação que adiciona `userId` à requisição.
|
|
63
|
-
* interface AuthRequest extends Request { userId: number; }
|
|
64
|
-
* const authMiddleware: MiddlewareFC<AuthRequest> = (req, res, next) => {
|
|
65
|
-
* req.userId = 123; // Simula a autenticação
|
|
66
|
-
* next();
|
|
67
|
-
* };
|
|
68
|
-
*
|
|
69
|
-
* // 2. Criação da rota usando a API fluente.
|
|
70
|
-
* // router.get() retorna uma instância de Handler.
|
|
71
|
-
* router
|
|
72
|
-
* .get("/users/me")
|
|
73
|
-
* // .middleware() retorna uma nova instância de Handler com o middleware adicionado.
|
|
74
|
-
* .middleware(authMiddleware)
|
|
75
|
-
* // .handler() finaliza a cadeia, registrando a rota e o handler no Express.
|
|
16
|
+
* // A chamada a `router.post()` retorna uma instância de RequestHandler.
|
|
17
|
+
* router.post('/users')
|
|
18
|
+
* // .middleware() aplica um middleware apenas a esta rota.
|
|
19
|
+
* .middleware(validationMiddleware)
|
|
20
|
+
* // .handler() define o controlador final da rota.
|
|
76
21
|
* .handler((req, res) => {
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
22
|
+
* res.status(201).json({ id: 1, ...req.body });
|
|
23
|
+
* })
|
|
24
|
+
* // .doc() anexa a documentação OpenAPI ao endpoint finalizado.
|
|
25
|
+
* .doc({
|
|
26
|
+
* summary: 'Cria um novo usuário',
|
|
27
|
+
* tags: ['Users'],
|
|
28
|
+
* body: { description: 'Dados do usuário' }
|
|
80
29
|
* });
|
|
81
30
|
*/
|
|
82
31
|
export declare class RequestHandler<Rq extends Request = Request, Rs extends Response = Response> extends RequestMiddleware<Rq, Rs> {
|
|
83
|
-
readonly router:
|
|
32
|
+
readonly router: Router;
|
|
84
33
|
readonly type: RouterMethods;
|
|
85
34
|
readonly path: string;
|
|
86
|
-
|
|
35
|
+
doc?: MiddlewareFCDoc | undefined;
|
|
36
|
+
readonly middlewares: MiddlewareFC<any, any>[];
|
|
37
|
+
/** @internal */
|
|
38
|
+
constructor(router: Router, type: RouterMethods, path: string, doc?: MiddlewareFCDoc | undefined);
|
|
87
39
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* @
|
|
40
|
+
* Anexa um middleware que será executado especificamente para esta rota.
|
|
41
|
+
* Múltiplos middlewares podem ser encadeados.
|
|
42
|
+
*
|
|
43
|
+
* @template Req - Tipo de Request estendido pelo middleware.
|
|
44
|
+
* @template Res - Tipo de Response estendido pelo middleware.
|
|
45
|
+
* @param {MiddlewareCallback<Rq & Req, Rs & Res>} callback - A função de middleware a ser aplicada.
|
|
46
|
+
* @param {MiddlewareFCDoc} [doc] - Documentação OpenAPI opcional para este middleware.
|
|
47
|
+
* @returns {RequestHandler<Rq & Req, Rs & Res>} A mesma instância de `RequestHandler` para permitir encadeamento.
|
|
92
48
|
*/
|
|
93
|
-
|
|
49
|
+
middleware<Req extends Request = Request, Res extends Response = Response>(callback: MiddlewareCallback<Rq & Req, Rs & Res>, doc?: MiddlewareFCDoc): RequestHandler<Rq & Req, Rs & Res>;
|
|
94
50
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* @
|
|
99
|
-
* @
|
|
51
|
+
* Define a função de manipulador (controller) final para a rota.
|
|
52
|
+
* Esta chamada finaliza a cadeia de middlewares e registra a rota no roteador.
|
|
53
|
+
*
|
|
54
|
+
* @template Req - Tipo de Request estendido pelo manipulador.
|
|
55
|
+
* @template Res - Tipo de Response estendido pelo manipulador.
|
|
56
|
+
* @param {HandlerCallback<Rq & Req, Rs & Res>} callback - A função que processará a requisição.
|
|
57
|
+
* @param {MiddlewareFCDoc} [doc] - Documentação OpenAPI opcional para este manipulador.
|
|
58
|
+
* @returns {RouterProps} Um objeto que contém as propriedades da rota e um método `.doc()` para adicionar a documentação final.
|
|
100
59
|
*/
|
|
101
|
-
|
|
60
|
+
handler<Req extends Request = Request, Res extends Response = Response>(callback: HandlerCallback<Rq & Req, Rs & Res>, doc?: MiddlewareFCDoc): RouterProps;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Cria um componente de manipulador (handler) reutilizável.
|
|
64
|
+
*
|
|
65
|
+
* Esta classe encapsula uma função de manipulador, permitindo que ela seja combinada
|
|
66
|
+
* com outros middlewares e reutilizada em diferentes rotas.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* // handler.ts
|
|
70
|
+
* export const getUserProfile = handler<{ user: { id: string } }>((req, res) => {
|
|
71
|
+
* res.json({ user: req.user });
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // routes.ts
|
|
75
|
+
* router.get('/profile')
|
|
76
|
+
* .middleware(authMiddleware) // Adiciona `req.user`
|
|
77
|
+
* .handler(getUserProfile); // Reutiliza o handler
|
|
78
|
+
*/
|
|
79
|
+
export declare class Handler<Rq extends Request = Request, Rs extends Response = Response> {
|
|
80
|
+
readonly router: Router;
|
|
81
|
+
doc?: MiddlewareFCDoc | undefined;
|
|
82
|
+
/** @internal */
|
|
83
|
+
constructor(callback: HandlerCallback<Rq, Rs> | undefined, router?: Router, doc?: MiddlewareFCDoc | undefined);
|
|
102
84
|
/**
|
|
103
|
-
*
|
|
104
|
-
* Este método
|
|
105
|
-
*
|
|
85
|
+
* Executa a cadeia de middlewares e o manipulador final encapsulados por esta instância de `Handler`.
|
|
86
|
+
* Este método é útil para testes unitários ou para invocar programaticamente a lógica do handler
|
|
87
|
+
* fora do ciclo de requisição/resposta padrão do Express.
|
|
88
|
+
*
|
|
89
|
+
* @param {Rq} request - O objeto de requisição (ou um mock dele).
|
|
90
|
+
* @param {Rs} response - O objeto de resposta (ou um mock dele).
|
|
91
|
+
* @param {NextFunction} next - A função `next` a ser chamada ao final da cadeia.
|
|
92
|
+
* @returns {Promise<void>} Uma promessa que resolve quando a execução da cadeia é concluída.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* import { handler, Request, Response, NextFunction } from '@ismael1361/router';
|
|
96
|
+
*
|
|
97
|
+
* // 1. Crie um handler reutilizável
|
|
98
|
+
* const myHandler = handler<{ user: { id: string } }>((req, res) => {
|
|
99
|
+
* res.json({ userId: req.user.id });
|
|
100
|
+
* });
|
|
101
|
+
*
|
|
102
|
+
* // 2. Crie mocks para os objetos de requisição e resposta (ex: com Jest)
|
|
103
|
+
* const mockRequest = { user: { id: '123' } } as Request & { user: { id: string } };
|
|
104
|
+
* const mockResponse = { json: (data) => console.log(data) } as Response;
|
|
105
|
+
* const mockNext = () => {};
|
|
106
106
|
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
* @returns {RouterProps} Uma instância que permite adicionar metadados, como documentação Swagger, à rota.
|
|
107
|
+
* // 3. Execute o handler programaticamente
|
|
108
|
+
* await myHandler.execute(mockRequest, mockResponse, mockNext);
|
|
109
|
+
* // Output: { userId: '123' }
|
|
111
110
|
*/
|
|
112
|
-
|
|
111
|
+
execute(request: Rq, response: Rs, next: NextFunction): Promise<any>;
|
|
113
112
|
}
|
|
114
113
|
//# sourceMappingURL=handler.d.ts.map
|
package/dist/handler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAa,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEzK,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAc,CAAC,EAAE,SAAS,OAAO,GAAG,OAAO,EAAE,EAAE,SAAS,QAAQ,GAAG,QAAQ,CAAE,SAAQ,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC;aAI9F,MAAM,EAAE,MAAM;aAAkB,IAAI,EAAE,aAAa;aAAkB,IAAI,EAAE,MAAM;IAAS,GAAG,CAAC,EAAE,eAAe;IAH3I,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAM;IAEpD,gBAAgB;gBACY,MAAM,EAAE,MAAM,EAAkB,IAAI,EAAE,aAAa,EAAkB,IAAI,EAAE,MAAM,EAAS,GAAG,CAAC,EAAE,eAAe,YAAA;IAI3I;;;;;;;;;OASG;IACH,UAAU,CAAC,GAAG,SAAS,OAAO,GAAG,OAAO,EAAE,GAAG,SAAS,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC;IAevL;;;;;;;;;OASG;IACH,OAAO,CAAC,GAAG,SAAS,OAAO,GAAG,OAAO,EAAE,GAAG,SAAS,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,WAAW;CAyB1J;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,OAAO,CAAC,EAAE,SAAS,OAAO,GAAG,OAAO,EAAE,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAErB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAwB,GAAG,CAAC,EAAE,eAAe;IAD/H,gBAAgB;gBACJ,QAAQ,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,SAAS,EAAW,MAAM,GAAE,MAAqB,EAAS,GAAG,CAAC,EAAE,eAAe,YAAA;IAc/H;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY;CAGrD"}
|