snap-on-openapi 1.0.21 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/OpenApi.d.ts +3 -3
- package/dist/OpenApi.js +8 -6
- package/dist/services/ConfigBuilder/types/DefaultConfig.d.ts +2 -2
- package/dist/types/config/Config.d.ts +4 -3
- package/dist/types/events/OnErrorEvent.d.ts +5 -7
- package/dist/types/events/OnErrorEventData.d.ts +9 -0
- package/dist/types/events/OnErrorEventData.js +1 -0
- package/dist/types/events/OnHandlerEvent.d.ts +5 -9
- package/dist/types/events/OnHandlerEventData.d.ts +11 -0
- package/dist/types/events/OnHandlerEventData.js +1 -0
- package/dist/types/events/OnResponseEvent.d.ts +5 -5
- package/dist/types/events/OnResponseEventData.d.ts +7 -0
- package/dist/types/events/OnResponseEventData.js +1 -0
- package/dist/types/events/OnRouteEvent.d.ts +4 -11
- package/dist/types/events/OnRouteEventData.d.ts +13 -0
- package/dist/types/events/OnRouteEventData.js +1 -0
- package/package.json +1 -1
package/dist/OpenApi.d.ts
CHANGED
|
@@ -21,10 +21,10 @@ import { InitialBuilder } from './types/InitialBuilder.js';
|
|
|
21
21
|
import { DefaultRouteContextMap } from './services/ConfigBuilder/types/DefaultRouteContextMap.js';
|
|
22
22
|
import { DefaultRouteParamsMap } from './services/ConfigBuilder/types/DefaultRouteParamsMap.js';
|
|
23
23
|
import z from 'zod';
|
|
24
|
-
import { OnResponseEvent } from './types/events/OnResponseEvent.js';
|
|
25
24
|
import { RouteResponse } from './types/RouteResponse.js';
|
|
26
25
|
import { ILogger } from './services/Logger/types/ILogger.js';
|
|
27
|
-
import {
|
|
26
|
+
import { RouteContextMap } from './types/config/RouteContextMap.js';
|
|
27
|
+
import { OnResponseEventData } from './types/events/OnResponseEventData.js';
|
|
28
28
|
export declare class OpenApi<TRouteTypes extends string, TErrorCodes extends string, TConfig extends AnyConfig<TRouteTypes, TErrorCodes>> {
|
|
29
29
|
static readonly builder: InitialBuilder;
|
|
30
30
|
readonly validators: ValidationUtils;
|
|
@@ -50,7 +50,7 @@ export declare class OpenApi<TRouteTypes extends string, TErrorCodes extends str
|
|
|
50
50
|
addServer(url: string, description: string): void;
|
|
51
51
|
protected getRouteForPath(path: string, method: string): AnyRoute<TRouteTypes> | null;
|
|
52
52
|
processRootRoute(originalReq: Request): Promise<RouteResponse>;
|
|
53
|
-
protected handleError(e: unknown, req: Request, eventPieces?: Partial<
|
|
53
|
+
protected handleError(e: unknown, req: Request, eventPieces?: Partial<OnResponseEventData<TRouteTypes, TConfig['routes'][TRouteTypes]['extraProps'], RouteContextMap<TRouteTypes, TConfig['routes'][TRouteTypes]['extraProps']>>>): Promise<{
|
|
54
54
|
status: number;
|
|
55
55
|
body: z.TypeOf<import("./index.js").OpenApiErrorConfigMap<TErrorCodes>[TErrorCodes]["responseValidator"]>;
|
|
56
56
|
headers: {};
|
package/dist/OpenApi.js
CHANGED
|
@@ -133,8 +133,9 @@ export class OpenApi {
|
|
|
133
133
|
let onResponse;
|
|
134
134
|
let onHandler;
|
|
135
135
|
try {
|
|
136
|
+
const logger = await this.config.requestLogger?.(originalReq) ?? this.logger;
|
|
136
137
|
if (this.config.onRequest) {
|
|
137
|
-
onRequest = { request: originalReq, logger
|
|
138
|
+
onRequest = { request: originalReq, logger };
|
|
138
139
|
await this.config.onRequest(onRequest);
|
|
139
140
|
}
|
|
140
141
|
const url = new URL(originalReq.url);
|
|
@@ -142,7 +143,7 @@ export class OpenApi {
|
|
|
142
143
|
const urlPath = url.pathname.replace(basePath, '');
|
|
143
144
|
const route = this.getRouteForPath(urlPath, originalReq.method);
|
|
144
145
|
if (!route) {
|
|
145
|
-
|
|
146
|
+
logger.info(`Route for ${originalReq.method}:${urlPath} not found`);
|
|
146
147
|
throw new BuiltInError(ErrorCode.NotFound);
|
|
147
148
|
}
|
|
148
149
|
const pathParams = {};
|
|
@@ -185,8 +186,9 @@ export class OpenApi {
|
|
|
185
186
|
body: body,
|
|
186
187
|
};
|
|
187
188
|
onRoute = {
|
|
189
|
+
routeType: route.type,
|
|
188
190
|
request: originalReq,
|
|
189
|
-
logger
|
|
191
|
+
logger,
|
|
190
192
|
path: urlPath,
|
|
191
193
|
method: originalReq.method,
|
|
192
194
|
params: pathParams,
|
|
@@ -219,7 +221,7 @@ export class OpenApi {
|
|
|
219
221
|
const context = await this.config.routes[route.type].contextFactory({
|
|
220
222
|
route: route,
|
|
221
223
|
request: originalReq,
|
|
222
|
-
logger
|
|
224
|
+
logger,
|
|
223
225
|
params: {
|
|
224
226
|
query: query.data,
|
|
225
227
|
path: path.data,
|
|
@@ -253,7 +255,7 @@ export class OpenApi {
|
|
|
253
255
|
const response = await wrapper(handler, {
|
|
254
256
|
route: route,
|
|
255
257
|
request: originalReq,
|
|
256
|
-
logger
|
|
258
|
+
logger,
|
|
257
259
|
params: {
|
|
258
260
|
query: query.data,
|
|
259
261
|
path: path.data,
|
|
@@ -297,8 +299,8 @@ export class OpenApi {
|
|
|
297
299
|
try {
|
|
298
300
|
const event = {
|
|
299
301
|
...eventPieces,
|
|
302
|
+
logger: eventPieces?.logger ?? this.logger,
|
|
300
303
|
request: req,
|
|
301
|
-
logger: this.logger,
|
|
302
304
|
error: e,
|
|
303
305
|
};
|
|
304
306
|
const response = this.config.onError ? await this.config.onError(event) : this.config.defaultError;
|
|
@@ -23,7 +23,7 @@ export declare class DefaultConfig implements Config<SampleRouteType, ErrorCode,
|
|
|
23
23
|
onRequest?: () => Promise<void>;
|
|
24
24
|
onRoute?: (e: OnRouteEvent<SampleRouteType, DefaultRouteParamsMap>) => Promise<void>;
|
|
25
25
|
onHandler?: () => Promise<void>;
|
|
26
|
-
onResponse?: (e: OnResponseEvent<SampleRouteType, DefaultRouteParamsMap,
|
|
27
|
-
onError?: (e: OnErrorEvent<SampleRouteType, DefaultRouteParamsMap,
|
|
26
|
+
onResponse?: (e: OnResponseEvent<SampleRouteType, DefaultRouteParamsMap, DefaultRouteContextMap>) => Promise<void>;
|
|
27
|
+
onError?: (e: OnErrorEvent<SampleRouteType, DefaultRouteParamsMap, DefaultRouteContextMap>) => Promise<ErrorResponse<ErrorCode, DefaultErrorMap>>;
|
|
28
28
|
skipDescriptionsCheck?: boolean;
|
|
29
29
|
}
|
|
@@ -16,6 +16,7 @@ import { ILogger } from '../../services/Logger/types/ILogger.js';
|
|
|
16
16
|
export type Config<TRouteTypes extends string, TErrorCodes extends string, TErrorConfigMap extends ErrorConfigMap<TErrorCodes>, TRouteParamMap extends RouteExtraPropsMap<TRouteTypes>, TRouteContextMap extends RouteContextMap<TRouteTypes, TRouteParamMap>, TRouteConfigMap extends RouteConfigMap<TRouteTypes, TErrorCodes, TRouteParamMap, TRouteContextMap>> = {
|
|
17
17
|
disableResponseValidation?: boolean;
|
|
18
18
|
logger?: ILogger;
|
|
19
|
+
requestLogger?: (req: Request) => Promise<ILogger>;
|
|
19
20
|
basePath: RoutePath;
|
|
20
21
|
routes: TRouteConfigMap;
|
|
21
22
|
generator?: {
|
|
@@ -34,7 +35,7 @@ export type Config<TRouteTypes extends string, TErrorCodes extends string, TErro
|
|
|
34
35
|
logLevel?: LogLevel;
|
|
35
36
|
onRequest?: (e: OnRequestEvent) => Promise<void>;
|
|
36
37
|
onRoute?: (e: OnRouteEvent<TRouteTypes, TRouteParamMap>) => Promise<void>;
|
|
37
|
-
onHandler?: (e: OnHandlerEvent<TRouteTypes, TRouteParamMap,
|
|
38
|
-
onResponse?: (e: OnResponseEvent<TRouteTypes, TRouteParamMap,
|
|
39
|
-
onError?: (e: OnErrorEvent<TRouteTypes, TRouteParamMap,
|
|
38
|
+
onHandler?: (e: OnHandlerEvent<TRouteTypes, TRouteParamMap, TRouteContextMap>) => Promise<void>;
|
|
39
|
+
onResponse?: (e: OnResponseEvent<TRouteTypes, TRouteParamMap, TRouteContextMap>) => Promise<void>;
|
|
40
|
+
onError?: (e: OnErrorEvent<TRouteTypes, TRouteParamMap, TRouteContextMap>) => Promise<ErrorResponse<TErrorCodes, TErrorConfigMap>>;
|
|
40
41
|
};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RouteContextMap } from '../config/RouteContextMap.js';
|
|
2
2
|
import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
|
|
3
|
-
import {
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
error: unknown;
|
|
8
|
-
}
|
|
3
|
+
import { OnErrorEventData } from './OnErrorEventData.js';
|
|
4
|
+
export type OnErrorEvent<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>, TContext extends RouteContextMap<TRouteType, TExtraPropsMap>> = {
|
|
5
|
+
[key in TRouteType]: OnErrorEventData<key, TExtraPropsMap, TContext>;
|
|
6
|
+
}[TRouteType];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ILogger } from '../../services/Logger/types/ILogger.js';
|
|
2
|
+
import { RouteContextMap } from '../config/RouteContextMap.js';
|
|
3
|
+
import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
|
|
4
|
+
import { OnResponseEventData } from './OnResponseEventData.js';
|
|
5
|
+
export interface OnErrorEventData<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>, TContext extends RouteContextMap<TRouteType, TExtraPropsMap>> extends Partial<OnResponseEventData<TRouteType, TExtraPropsMap, TContext>> {
|
|
6
|
+
request: Request;
|
|
7
|
+
logger: ILogger;
|
|
8
|
+
error: unknown;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
+
import { RouteContextMap } from '../config/RouteContextMap.js';
|
|
1
2
|
import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
|
|
2
|
-
import {
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
path: Record<string, unknown>;
|
|
7
|
-
body: unknown;
|
|
8
|
-
};
|
|
9
|
-
context: TContext;
|
|
10
|
-
}
|
|
3
|
+
import { OnHandlerEventData } from './OnHandlerEventData.js';
|
|
4
|
+
export type OnHandlerEvent<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>, TContext extends RouteContextMap<TRouteType, TExtraPropsMap>> = {
|
|
5
|
+
[key in TRouteType]: OnHandlerEventData<key, TExtraPropsMap, TContext>;
|
|
6
|
+
}[TRouteType];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RouteContextMap } from '../config/RouteContextMap.js';
|
|
2
|
+
import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
|
|
3
|
+
import { OnRouteEventData } from './OnRouteEventData.js';
|
|
4
|
+
export interface OnHandlerEventData<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>, TContext extends RouteContextMap<TRouteType, TExtraPropsMap>> extends OnRouteEventData<TRouteType, TExtraPropsMap> {
|
|
5
|
+
validated: {
|
|
6
|
+
query: Record<string, unknown>;
|
|
7
|
+
path: Record<string, unknown>;
|
|
8
|
+
body: unknown;
|
|
9
|
+
};
|
|
10
|
+
context: Awaited<ReturnType<TContext[TRouteType]>>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { RouteContextMap } from '../config/RouteContextMap.js';
|
|
1
2
|
import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
3
|
+
import { OnResponseEventData } from './OnResponseEventData.js';
|
|
4
|
+
export type OnResponseEvent<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>, TContextMap extends RouteContextMap<TRouteType, TExtraPropsMap>> = {
|
|
5
|
+
[key in TRouteType]: OnResponseEventData<key, TExtraPropsMap, TContextMap>;
|
|
6
|
+
}[TRouteType];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RouteContextMap } from '../config/RouteContextMap.js';
|
|
2
|
+
import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
|
|
3
|
+
import { RouteResponse } from '../RouteResponse.js';
|
|
4
|
+
import { OnHandlerEventData } from './OnHandlerEventData.js';
|
|
5
|
+
export interface OnResponseEventData<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>, TContext extends RouteContextMap<TRouteType, TExtraPropsMap>> extends OnHandlerEventData<TRouteType, TExtraPropsMap, TContext> {
|
|
6
|
+
response: RouteResponse;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import { AnyRoute } from '../AnyRoute.js';
|
|
2
|
-
import { RouteExtraProps } from '../config/RouteExtraProps.js';
|
|
3
1
|
import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
|
|
4
|
-
import {
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
params: Record<string, string>;
|
|
9
|
-
query: Record<string, string | string[]>;
|
|
10
|
-
body: unknown;
|
|
11
|
-
route: AnyRoute<TRouteType> & RouteExtraProps<TExtraPropsMap[TRouteType]>;
|
|
12
|
-
}
|
|
2
|
+
import { OnRouteEventData } from './OnRouteEventData.js';
|
|
3
|
+
export type OnRouteEvent<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>> = {
|
|
4
|
+
[key in TRouteType]: OnRouteEventData<key, TExtraPropsMap>;
|
|
5
|
+
}[TRouteType];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AnyRoute } from '../AnyRoute.js';
|
|
2
|
+
import { RouteExtraProps } from '../config/RouteExtraProps.js';
|
|
3
|
+
import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
|
|
4
|
+
import { OnRequestEvent } from './OnRequestEvent.js';
|
|
5
|
+
export interface OnRouteEventData<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>> extends OnRequestEvent {
|
|
6
|
+
routeType: TRouteType;
|
|
7
|
+
path: string;
|
|
8
|
+
method: string;
|
|
9
|
+
params: Record<string, string>;
|
|
10
|
+
query: Record<string, string | string[]>;
|
|
11
|
+
body: unknown;
|
|
12
|
+
route: AnyRoute<TRouteType> & RouteExtraProps<TExtraPropsMap[TRouteType]>;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED