snap-on-openapi 1.0.18 → 1.0.20

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
@@ -5,7 +5,6 @@ import { RoutingFactory } from './services/RoutingFactory/RoutingFactory.js';
5
5
  import { RouteMap } from './types/RouteMap.js';
6
6
  import { SchemaGenerator } from './services/SchemaGenerator/SchemaGenerator.js';
7
7
  import { AnyConfig } from './types/config/AnyConfig.js';
8
- import { Logger } from './services/Logger/Logger.js';
9
8
  import { DescriptionChecker } from './services/DescriptionChecker/DescriptionChecker.js';
10
9
  import { DevelopmentUtils } from './services/DevelopmentUtils/DevelopmentUtils.js';
11
10
  import { ClientGenerator } from './services/ClientGenerator/ClientGenerator.js';
@@ -24,6 +23,7 @@ import { DefaultRouteParamsMap } from './services/ConfigBuilder/types/DefaultRou
24
23
  import z from 'zod';
25
24
  import { OnResponseEvent } from './types/events/OnResponseEvent.js';
26
25
  import { RouteResponse } from './types/RouteResponse.js';
26
+ import { ILogger } from './services/Logger/types/ILogger.js';
27
27
  export declare class OpenApi<TRouteTypes extends string, TErrorCodes extends string, TConfig extends AnyConfig<TRouteTypes, TErrorCodes>> {
28
28
  static readonly builder: InitialBuilder;
29
29
  readonly validators: ValidationUtils;
@@ -32,7 +32,7 @@ export declare class OpenApi<TRouteTypes extends string, TErrorCodes extends str
32
32
  readonly clientGenerator: ClientGenerator<TRouteTypes, TErrorCodes, TConfig>;
33
33
  readonly wrappers: Wrappers<TRouteTypes, TErrorCodes, TConfig>;
34
34
  protected routes: AnyRoute<TRouteTypes>[];
35
- protected logger: Logger;
35
+ protected logger: ILogger;
36
36
  protected basePath: RoutePath;
37
37
  protected developmentUtils: DevelopmentUtils;
38
38
  protected config: TConfig;
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;
package/dist/index.d.ts CHANGED
@@ -41,5 +41,6 @@ export { ValidationUtils as OpenApiValidationUtils } from './services/Validation
41
41
  export { TanstackStartWrapper as OpenApiTanstackStartWrapper } from './services/TanstackStartWrapper/TanstackStartWrapper.js';
42
42
  export { ExpressWrapper as OpenApiExpressWrapper } from './services/ExpressWrapper/ExpressWrapper.js';
43
43
  export { Logger as OpenApiLogger } from './services/Logger/Logger.js';
44
+ export type { ILogger as IOpenApiLogger } from './services/Logger/types/ILogger.js';
44
45
  export { LogLevel as OpenApiLogLevel } from './services/Logger/types/LogLevel.js';
45
46
  export { ConfigBuilder as OpenApiConfigBuilder } from './services/ConfigBuilder/ConfigBuilder.js';
@@ -3,5 +3,4 @@ import { RouteContextMap } from '../../../types/config/RouteContextMap.js';
3
3
  import { DefaultRouteParamsMap } from './DefaultRouteParamsMap.js';
4
4
  export declare class DefaultRouteContextMap implements RouteContextMap<SampleRouteType, DefaultRouteParamsMap> {
5
5
  Public: () => Promise<{}>;
6
- User: () => Promise<{}>;
7
6
  }
@@ -1,4 +1,3 @@
1
1
  export class DefaultRouteContextMap {
2
2
  Public = async () => ({});
3
- User = async () => ({});
4
3
  }
@@ -16,7 +16,7 @@ export class DescriptionChecker {
16
16
  if (!route.description || route.description.length < minimalLength) {
17
17
  throw new Error(`Description for ${route.path} is missing or too small`);
18
18
  }
19
- this.checkValidatorDescriptions(route, 'responseValidator', 'responseValidator', route.validators.response ?? z.undefined());
19
+ this.checkValidatorDescriptions(route, 'responseValidator', 'responseValidator', route.validators.response ?? z.undefined(), !!route.validators.response);
20
20
  this.checkValidatorDescriptions(route, 'pathValidator', 'pathValidator', route.validators.path ?? z.object({}), false);
21
21
  this.checkValidatorDescriptions(route, 'queryValidator', 'queryValidator', route.validators.query ?? z.object({}), false);
22
22
  this.checkValidatorDescriptions(route, 'bodyValidator', 'bodyValidator', route.validators.body ?? z.object({}), false);
@@ -1,5 +1,6 @@
1
+ import { ILogger } from './types/ILogger.js';
1
2
  import { LogLevel } from './types/LogLevel.js';
2
- export declare class Logger {
3
+ export declare class Logger implements ILogger {
3
4
  protected invoker: string;
4
5
  static logLevel: LogLevel;
5
6
  static showTime: boolean;
@@ -0,0 +1,7 @@
1
+ export interface ILogger {
2
+ info(message: string, data?: Record<string, unknown>): void;
3
+ debug(message: string, data?: object): void;
4
+ error(message: string | null, error: unknown, data?: object): void;
5
+ getInvoker(): string;
6
+ derrive(invoker: string): ILogger;
7
+ }
@@ -2,16 +2,16 @@ import 'zod-openapi/extend';
2
2
  import { createDocument, ZodOpenApiOperationObject } from 'zod-openapi';
3
3
  import { AnyRoute } from '../../types/AnyRoute.js';
4
4
  import { AnyConfig } from '../../types/config/AnyConfig.js';
5
- import { Logger } from '../Logger/Logger.js';
6
5
  import { Server } from '../../types/config/Server.js';
7
6
  import { Info } from '../../types/config/Info.js';
7
+ import { ILogger } from '../Logger/types/ILogger.js';
8
8
  export declare class SchemaGenerator<TRouteTypes extends string, TErrorCodes extends string, TConfig extends AnyConfig<TRouteTypes, TErrorCodes>> {
9
- protected logger: Logger;
9
+ protected logger: ILogger;
10
10
  protected info: Info;
11
11
  protected routes: AnyRoute<TRouteTypes>[];
12
12
  protected servers: Server[];
13
13
  protected routeSpec: TConfig;
14
- constructor(logger: Logger, info: Info, spec: TConfig, routes: AnyRoute<TRouteTypes>[], servers: Server[]);
14
+ constructor(logger: ILogger, info: Info, spec: TConfig, routes: AnyRoute<TRouteTypes>[], servers: Server[]);
15
15
  getYaml(): string;
16
16
  getJson(): string;
17
17
  saveJson(path: string): void;
@@ -1,11 +1,6 @@
1
1
  import { Logger } from '../../Logger/Logger.js';
2
2
  export declare class TestLogger extends Logger {
3
3
  private messages;
4
- popMessage(): {
5
- message: string;
6
- level: string;
7
- data?: object;
8
- } | undefined;
9
4
  shiftMessage(): {
10
5
  message: string;
11
6
  level: string;
@@ -1,9 +1,6 @@
1
1
  import { Logger } from '../../Logger/Logger.js';
2
2
  export class TestLogger extends Logger {
3
3
  messages = [];
4
- popMessage() {
5
- return this.messages.pop();
6
- }
7
4
  shiftMessage() {
8
5
  return this.messages.shift();
9
6
  }
@@ -1,5 +1,4 @@
1
1
  import { ZodOpenApiVersion } from 'zod-openapi';
2
- import { Logger } from '../../services/Logger/Logger.js';
3
2
  import { LogLevel } from '../../services/Logger/types/LogLevel.js';
4
3
  import { RoutePath } from '../RoutePath.js';
5
4
  import { ErrorConfigMap } from './ErrorConfigMap.js';
@@ -13,9 +12,10 @@ import { OnHandlerEvent } from '../events/OnHandlerEvent.js';
13
12
  import { OnRequestEvent } from '../events/OnRequestEvent.js';
14
13
  import { OnResponseEvent } from '../events/OnResponseEvent.js';
15
14
  import { OnRouteEvent } from '../events/OnRouteEvent.js';
15
+ 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
- logger?: Logger;
18
+ logger?: ILogger;
19
19
  basePath: RoutePath;
20
20
  routes: TRouteConfigMap;
21
21
  generator?: {
@@ -1,11 +1,11 @@
1
1
  import { ZodObject, ZodRawShape } from 'zod';
2
2
  import { AnyRoute } from '../AnyRoute.js';
3
3
  import { RouteExtraProps } from './RouteExtraProps.js';
4
- import { Logger } from '../../services/Logger/Logger.js';
4
+ import { ILogger } from '../../services/Logger/types/ILogger.js';
5
5
  export type ContextParams<TRouteType extends string, TExtraProps extends ZodObject<ZodRawShape> | undefined> = {
6
6
  route: AnyRoute<TRouteType> & RouteExtraProps<TExtraProps>;
7
7
  request: Request;
8
- logger: Logger;
8
+ logger: ILogger;
9
9
  params: {
10
10
  body: unknown;
11
11
  query: unknown;
@@ -1,8 +1,8 @@
1
- import { Logger } from '../../services/Logger/Logger.js';
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
4
  export interface OnErrorEvent<TRouteType extends string, TContextMap extends RouteExtraPropsMap<TRouteType>> extends Partial<OnResponseEvent<TRouteType, TContextMap>> {
5
5
  request: Request;
6
- logger: Logger;
6
+ logger: ILogger;
7
7
  error: unknown;
8
8
  }
@@ -1,5 +1,5 @@
1
- import { Logger } from '../../services/Logger/Logger.js';
1
+ import { ILogger } from '../../services/Logger/types/ILogger.js';
2
2
  export interface OnRequestEvent {
3
3
  request: Request;
4
- logger: Logger;
4
+ logger: ILogger;
5
5
  }
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.18",
4
+ "version": "1.0.20",
5
5
  "description": "Swiftly build type-checked OpenAPI applications with Zod and TypeScript",
6
6
  "type": "module",
7
7
  "license": "ISC",
@@ -1,13 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { stringDateTimeTransformer } from './stringDateTimeTransformer.js';
3
- describe('stringDateTimeTransformer', () => {
4
- test('Can parse ISO datetime', async () => {
5
- const result = stringDateTimeTransformer.safeParse('2025-07-03T08:33:32.442Z');
6
- expect(result.success).toBe(true);
7
- expect(result.data?.toISOString()).toBe('2025-07-03T08:33:32.442Z');
8
- });
9
- test("Doesn't throw on bad input", async () => {
10
- const result = stringDateTimeTransformer.safeParse('jibberish');
11
- expect(result.success).toBe(false);
12
- });
13
- });