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 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 { RouteContext } from './types/config/RouteContext.js';
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<OnResponseEvent<TRouteTypes, TConfig['routes'][TRouteTypes]['extraProps'], RouteContext<TRouteTypes, TConfig>>>): Promise<{
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: this.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
- this.logger.info(`Route for ${originalReq.method}:${urlPath} not found`);
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: this.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: this.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: this.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, object>) => Promise<void>;
27
- onError?: (e: OnErrorEvent<SampleRouteType, DefaultRouteParamsMap, object>) => Promise<ErrorResponse<ErrorCode, DefaultErrorMap>>;
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, Awaited<ReturnType<TRouteContextMap[TRouteTypes]>>>) => Promise<void>;
38
- onResponse?: (e: OnResponseEvent<TRouteTypes, TRouteParamMap, Awaited<ReturnType<TRouteContextMap[TRouteTypes]>>>) => Promise<void>;
39
- onError?: (e: OnErrorEvent<TRouteTypes, TRouteParamMap, Awaited<ReturnType<TRouteContextMap[TRouteTypes]>>>) => Promise<ErrorResponse<TErrorCodes, TErrorConfigMap>>;
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 { ILogger } from '../../services/Logger/types/ILogger.js';
1
+ import { RouteContextMap } from '../config/RouteContextMap.js';
2
2
  import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
3
- import { OnResponseEvent } from './OnResponseEvent.js';
4
- export interface OnErrorEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>, TContext extends object> extends Partial<OnResponseEvent<TRouteType, TContextMap, TContext>> {
5
- request: Request;
6
- logger: ILogger;
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 { OnRouteEvent } from './OnRouteEvent.js';
3
- export interface OnHandlerEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>, TContext extends object> extends OnRouteEvent<TRouteType, TContextMap> {
4
- validated: {
5
- query: Record<string, unknown>;
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 { RouteResponse } from '../RouteResponse.js';
3
- import { OnHandlerEvent } from './OnHandlerEvent.js';
4
- export interface OnResponseEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>, TContext extends object> extends OnHandlerEvent<TRouteType, TContextMap, TContext> {
5
- response: RouteResponse;
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 { OnRequestEvent } from './OnRequestEvent.js';
5
- export interface OnRouteEvent<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>> extends OnRequestEvent {
6
- path: string;
7
- method: string;
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "snap-on-openapi",
3
3
  "author": "Alex Sarychev",
4
- "version": "1.0.21",
4
+ "version": "1.0.23",
5
5
  "description": "Swiftly build type-checked OpenAPI applications with Zod and TypeScript",
6
6
  "type": "module",
7
7
  "license": "ISC",