snap-on-openapi 1.0.19 → 1.0.21

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
@@ -24,6 +24,7 @@ import z from 'zod';
24
24
  import { OnResponseEvent } from './types/events/OnResponseEvent.js';
25
25
  import { RouteResponse } from './types/RouteResponse.js';
26
26
  import { ILogger } from './services/Logger/types/ILogger.js';
27
+ import { RouteContext } from './types/config/RouteContext.js';
27
28
  export declare class OpenApi<TRouteTypes extends string, TErrorCodes extends string, TConfig extends AnyConfig<TRouteTypes, TErrorCodes>> {
28
29
  static readonly builder: InitialBuilder;
29
30
  readonly validators: ValidationUtils;
@@ -49,7 +50,7 @@ export declare class OpenApi<TRouteTypes extends string, TErrorCodes extends str
49
50
  addServer(url: string, description: string): void;
50
51
  protected getRouteForPath(path: string, method: string): AnyRoute<TRouteTypes> | null;
51
52
  processRootRoute(originalReq: Request): Promise<RouteResponse>;
52
- protected handleError(e: unknown, req: Request, eventPieces?: Partial<OnResponseEvent<TRouteTypes, TConfig['routes'][TRouteTypes]['extraProps']>>): Promise<{
53
+ protected handleError(e: unknown, req: Request, eventPieces?: Partial<OnResponseEvent<TRouteTypes, TConfig['routes'][TRouteTypes]['extraProps'], RouteContext<TRouteTypes, TConfig>>>): Promise<{
53
54
  status: number;
54
55
  body: z.TypeOf<import("./index.js").OpenApiErrorConfigMap<TErrorCodes>[TErrorCodes]["responseValidator"]>;
55
56
  headers: {};
package/dist/OpenApi.js CHANGED
@@ -154,7 +154,7 @@ export class OpenApi {
154
154
  if (!pathParts[i]) {
155
155
  throw new Error(`Can't find '${name}' param in path`);
156
156
  }
157
- pathParams[name] = pathParts[i];
157
+ pathParams[name] = decodeURIComponent(pathParts[i]);
158
158
  continue;
159
159
  }
160
160
  }
@@ -169,10 +169,10 @@ export class OpenApi {
169
169
  for (const [key, val] of queryEntries) {
170
170
  if (reqQuery[key] !== undefined) {
171
171
  if (Array.isArray(reqQuery[key])) {
172
- reqQuery[key].push(val);
172
+ reqQuery[key].push(decodeURIComponent(val));
173
173
  continue;
174
174
  }
175
- reqQuery[key] = [reqQuery[key], val];
175
+ reqQuery[key] = [reqQuery[key], decodeURIComponent(val)];
176
176
  continue;
177
177
  }
178
178
  reqQuery[key] = val;
@@ -228,6 +228,7 @@ export class OpenApi {
228
228
  });
229
229
  onHandler = {
230
230
  ...onRoute,
231
+ context,
231
232
  validated: {
232
233
  query: query.data,
233
234
  path: path.data,
@@ -246,6 +247,9 @@ export class OpenApi {
246
247
  });
247
248
  return response;
248
249
  };
250
+ if (this.config.onHandler) {
251
+ await this.config.onHandler(onHandler);
252
+ }
249
253
  const response = await wrapper(handler, {
250
254
  route: route,
251
255
  request: originalReq,
@@ -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>) => Promise<void>;
27
- onError?: (e: OnErrorEvent<SampleRouteType, DefaultRouteParamsMap>) => Promise<ErrorResponse<ErrorCode, DefaultErrorMap>>;
26
+ onResponse?: (e: OnResponseEvent<SampleRouteType, DefaultRouteParamsMap, object>) => Promise<void>;
27
+ onError?: (e: OnErrorEvent<SampleRouteType, DefaultRouteParamsMap, object>) => Promise<ErrorResponse<ErrorCode, DefaultErrorMap>>;
28
28
  skipDescriptionsCheck?: boolean;
29
29
  }
@@ -6,5 +6,10 @@ export declare class TestLogger extends Logger {
6
6
  level: string;
7
7
  data?: object;
8
8
  } | undefined;
9
+ popMessage(): {
10
+ message: string;
11
+ level: string;
12
+ data?: object;
13
+ } | undefined;
9
14
  protected log(message: string, level: string, data?: object): void;
10
15
  }
@@ -4,6 +4,9 @@ export class TestLogger extends Logger {
4
4
  shiftMessage() {
5
5
  return this.messages.shift();
6
6
  }
7
+ popMessage() {
8
+ return this.messages.pop();
9
+ }
7
10
  log(message, level, data) {
8
11
  this.messages.push({ message, level, data });
9
12
  }
@@ -34,7 +34,7 @@ export type Config<TRouteTypes extends string, TErrorCodes extends string, TErro
34
34
  logLevel?: LogLevel;
35
35
  onRequest?: (e: OnRequestEvent) => Promise<void>;
36
36
  onRoute?: (e: OnRouteEvent<TRouteTypes, TRouteParamMap>) => Promise<void>;
37
- onHandler?: (e: OnHandlerEvent<TRouteTypes, TRouteParamMap>) => Promise<void>;
38
- onResponse?: (e: OnResponseEvent<TRouteTypes, TRouteParamMap>) => Promise<void>;
39
- onError?: (e: OnErrorEvent<TRouteTypes, TRouteParamMap>) => Promise<ErrorResponse<TErrorCodes, TErrorConfigMap>>;
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>>;
40
40
  };
@@ -0,0 +1,2 @@
1
+ import { AnyConfig } from './AnyConfig.js';
2
+ export type RouteContext<TRouteType extends string, TConfig extends AnyConfig<TRouteType, string>> = Awaited<ReturnType<TConfig['routes'][TRouteType]['contextFactory']>>;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { ILogger } from '../../services/Logger/types/ILogger.js';
2
2
  import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
3
3
  import { OnResponseEvent } from './OnResponseEvent.js';
4
- export interface OnErrorEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>> extends Partial<OnResponseEvent<TRouteType, TContextMap>> {
4
+ export interface OnErrorEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>, TContext extends object> extends Partial<OnResponseEvent<TRouteType, TContextMap, TContext>> {
5
5
  request: Request;
6
6
  logger: ILogger;
7
7
  error: unknown;
@@ -1,9 +1,10 @@
1
1
  import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
2
2
  import { OnRouteEvent } from './OnRouteEvent.js';
3
- export interface OnHandlerEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>> extends OnRouteEvent<TRouteType, TContextMap> {
3
+ export interface OnHandlerEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>, TContext extends object> extends OnRouteEvent<TRouteType, TContextMap> {
4
4
  validated: {
5
5
  query: Record<string, unknown>;
6
6
  path: Record<string, unknown>;
7
7
  body: unknown;
8
8
  };
9
+ context: TContext;
9
10
  }
@@ -1,6 +1,6 @@
1
1
  import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
2
2
  import { RouteResponse } from '../RouteResponse.js';
3
3
  import { OnHandlerEvent } from './OnHandlerEvent.js';
4
- export interface OnResponseEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>> extends OnHandlerEvent<TRouteType, TContextMap> {
4
+ export interface OnResponseEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>, TContext extends object> extends OnHandlerEvent<TRouteType, TContextMap, TContext> {
5
5
  response: RouteResponse;
6
6
  }
@@ -2,11 +2,11 @@ import { AnyRoute } from '../AnyRoute.js';
2
2
  import { RouteExtraProps } from '../config/RouteExtraProps.js';
3
3
  import { RouteExtraPropsMap } from '../config/RouteExtraPropsMap.js';
4
4
  import { OnRequestEvent } from './OnRequestEvent.js';
5
- export interface OnRouteEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>> extends OnRequestEvent {
5
+ export interface OnRouteEvent<TRouteType extends string, TExtraPropsMap extends RouteExtraPropsMap<TRouteType>> extends OnRequestEvent {
6
6
  path: string;
7
7
  method: string;
8
8
  params: Record<string, string>;
9
9
  query: Record<string, string | string[]>;
10
10
  body: unknown;
11
- route: AnyRoute<TRouteType> & RouteExtraProps<TContextMap[TRouteType]>;
11
+ route: AnyRoute<TRouteType> & RouteExtraProps<TExtraPropsMap[TRouteType]>;
12
12
  }
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.19",
4
+ "version": "1.0.21",
5
5
  "description": "Swiftly build type-checked OpenAPI applications with Zod and TypeScript",
6
6
  "type": "module",
7
7
  "license": "ISC",