snap-on-openapi 1.0.1
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 +643 -0
- package/dist/OpenApi.d.ts +58 -0
- package/dist/OpenApi.js +272 -0
- package/dist/README.md +643 -0
- package/dist/assets/stoplight.html +27 -0
- package/dist/assets/swagger.html +892 -0
- package/dist/enums/ErrorCode.d.ts +5 -0
- package/dist/enums/ErrorCode.js +6 -0
- package/dist/enums/Methods.d.ts +7 -0
- package/dist/enums/Methods.js +8 -0
- package/dist/enums/SampleRouteType.d.ts +3 -0
- package/dist/enums/SampleRouteType.js +4 -0
- package/dist/enums/ValidationLocations.d.ts +6 -0
- package/dist/enums/ValidationLocations.js +7 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +23 -0
- package/dist/services/ClientGenerator/ClientGenerator.d.ts +9 -0
- package/dist/services/ClientGenerator/ClientGenerator.js +48 -0
- package/dist/services/ConfigBuilder/ConfigBuilder.d.ts +31 -0
- package/dist/services/ConfigBuilder/ConfigBuilder.js +65 -0
- package/dist/services/ConfigBuilder/types/DefaultConfig.d.ts +22 -0
- package/dist/services/ConfigBuilder/types/DefaultConfig.js +47 -0
- package/dist/services/ConfigBuilder/types/DefaultErrorMap.d.ts +113 -0
- package/dist/services/ConfigBuilder/types/DefaultErrorMap.js +21 -0
- package/dist/services/ConfigBuilder/types/DefaultRouteContextMap.d.ts +6 -0
- package/dist/services/ConfigBuilder/types/DefaultRouteContextMap.js +3 -0
- package/dist/services/ConfigBuilder/types/DefaultRouteMap.d.ts +12 -0
- package/dist/services/ConfigBuilder/types/DefaultRouteMap.js +9 -0
- package/dist/services/ConfigBuilder/types/DefaultRouteParamsMap.d.ts +5 -0
- package/dist/services/ConfigBuilder/types/DefaultRouteParamsMap.js +3 -0
- package/dist/services/ConfigBuilder/types/OpenApiConstructor.d.ts +2 -0
- package/dist/services/ConfigBuilder/types/OpenApiConstructor.js +1 -0
- package/dist/services/DescriptionChecker/DescriptionChecker.d.ts +16 -0
- package/dist/services/DescriptionChecker/DescriptionChecker.js +47 -0
- package/dist/services/DevelopmentUtils/DevelopmentUtils.d.ts +4 -0
- package/dist/services/DevelopmentUtils/DevelopmentUtils.js +15 -0
- package/dist/services/ExpressWrapper/ExpressWrapper.d.ts +15 -0
- package/dist/services/ExpressWrapper/ExpressWrapper.js +68 -0
- package/dist/services/ExpressWrapper/types/ExpressApp.d.ts +8 -0
- package/dist/services/ExpressWrapper/types/ExpressApp.js +1 -0
- package/dist/services/ExpressWrapper/types/ExpressHandler.d.ts +3 -0
- package/dist/services/ExpressWrapper/types/ExpressHandler.js +1 -0
- package/dist/services/ExpressWrapper/types/ExpressRequest.d.ts +8 -0
- package/dist/services/ExpressWrapper/types/ExpressRequest.js +1 -0
- package/dist/services/ExpressWrapper/types/ExpressResponse.d.ts +6 -0
- package/dist/services/ExpressWrapper/types/ExpressResponse.js +1 -0
- package/dist/services/Logger/Logger.d.ts +15 -0
- package/dist/services/Logger/Logger.js +100 -0
- package/dist/services/Logger/types/LogLevel.d.ts +6 -0
- package/dist/services/Logger/types/LogLevel.js +7 -0
- package/dist/services/RoutingFactory/RoutingFactory.d.ts +10 -0
- package/dist/services/RoutingFactory/RoutingFactory.js +23 -0
- package/dist/services/SchemaGenerator/SchemaGenerator.d.ts +19 -0
- package/dist/services/SchemaGenerator/SchemaGenerator.js +131 -0
- package/dist/services/TanstackStartWrapper/TanstackStartWrapper.d.ts +35 -0
- package/dist/services/TanstackStartWrapper/TanstackStartWrapper.js +67 -0
- package/dist/services/TestUtils/TestUtils.d.ts +13 -0
- package/dist/services/TestUtils/TestUtils.js +48 -0
- package/dist/services/ValidationUtils/ValidationUtils.d.ts +56 -0
- package/dist/services/ValidationUtils/ValidationUtils.js +38 -0
- package/dist/services/ValidationUtils/transformers/stringBooleanTransformer.d.ts +3 -0
- package/dist/services/ValidationUtils/transformers/stringBooleanTransformer.js +5 -0
- package/dist/services/ValidationUtils/transformers/stringDateTransformer.d.ts +3 -0
- package/dist/services/ValidationUtils/transformers/stringDateTransformer.js +16 -0
- package/dist/services/ValidationUtils/transformers/stringNumberTransfromer.d.ts +3 -0
- package/dist/services/ValidationUtils/transformers/stringNumberTransfromer.js +24 -0
- package/dist/services/ValidationUtils/types/PaginatedResponse.d.ts +8 -0
- package/dist/services/ValidationUtils/types/PaginatedResponse.js +1 -0
- package/dist/types/AnyRoute.d.ts +3 -0
- package/dist/types/AnyRoute.js +1 -0
- package/dist/types/InitialBuilder.d.ts +9 -0
- package/dist/types/InitialBuilder.js +1 -0
- package/dist/types/NonEmptyArray.d.ts +1 -0
- package/dist/types/NonEmptyArray.js +1 -0
- package/dist/types/Route.d.ts +22 -0
- package/dist/types/Route.js +1 -0
- package/dist/types/RouteMap.d.ts +3 -0
- package/dist/types/RouteMap.js +1 -0
- package/dist/types/RoutePath.d.ts +1 -0
- package/dist/types/RoutePath.js +1 -0
- package/dist/types/Wrappers.d.ts +7 -0
- package/dist/types/Wrappers.js +1 -0
- package/dist/types/config/AnyConfig.d.ts +4 -0
- package/dist/types/config/AnyConfig.js +1 -0
- package/dist/types/config/AnyRouteConfigMap.d.ts +4 -0
- package/dist/types/config/AnyRouteConfigMap.js +1 -0
- package/dist/types/config/Config.d.ts +19 -0
- package/dist/types/config/Config.js +1 -0
- package/dist/types/config/ContextParams.d.ts +12 -0
- package/dist/types/config/ContextParams.js +1 -0
- package/dist/types/config/ErrorConfig.d.ts +6 -0
- package/dist/types/config/ErrorConfig.js +1 -0
- package/dist/types/config/ErrorConfigMap.d.ts +5 -0
- package/dist/types/config/ErrorConfigMap.js +1 -0
- package/dist/types/config/ErrorResponse.d.ts +8 -0
- package/dist/types/config/ErrorResponse.js +1 -0
- package/dist/types/config/ISpecificationExtension.d.ts +6 -0
- package/dist/types/config/ISpecificationExtension.js +1 -0
- package/dist/types/config/Info.d.ts +7 -0
- package/dist/types/config/Info.js +1 -0
- package/dist/types/config/OmitMappedField.d.ts +3 -0
- package/dist/types/config/OmitMappedField.js +1 -0
- package/dist/types/config/RouteConfig.d.ts +10 -0
- package/dist/types/config/RouteConfig.js +1 -0
- package/dist/types/config/RouteConfigMap.d.ts +7 -0
- package/dist/types/config/RouteConfigMap.js +1 -0
- package/dist/types/config/RouteContextMap.d.ts +6 -0
- package/dist/types/config/RouteContextMap.js +1 -0
- package/dist/types/config/RouteExtraProps.d.ts +2 -0
- package/dist/types/config/RouteExtraProps.js +1 -0
- package/dist/types/config/RouteExtraPropsMap.d.ts +4 -0
- package/dist/types/config/RouteExtraPropsMap.js +1 -0
- package/dist/types/config/Server.d.ts +5 -0
- package/dist/types/config/Server.js +1 -0
- package/dist/types/errors/ApiError.d.ts +5 -0
- package/dist/types/errors/ApiError.js +10 -0
- package/dist/types/errors/BuiltInError.d.ts +4 -0
- package/dist/types/errors/BuiltInError.js +3 -0
- package/dist/types/errors/FieldError.d.ts +33 -0
- package/dist/types/errors/FieldError.js +9 -0
- package/dist/types/errors/ValidationError.d.ts +10 -0
- package/dist/types/errors/ValidationError.js +17 -0
- package/dist/types/errors/responses/NotFoundErrorResponse.d.ts +12 -0
- package/dist/types/errors/responses/NotFoundErrorResponse.js +6 -0
- package/dist/types/errors/responses/UnknownErrorResponse.d.ts +12 -0
- package/dist/types/errors/responses/UnknownErrorResponse.js +6 -0
- package/dist/types/errors/responses/ValidationErrorResponse.d.ts +89 -0
- package/dist/types/errors/responses/ValidationErrorResponse.js +12 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +25 -0
- package/package.json +53 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { ZodObject, ZodRawShape, ZodType } from 'zod';
|
|
3
|
+
export declare class ValidationUtils {
|
|
4
|
+
readonly strings: {
|
|
5
|
+
datetime: import("zod").ZodEffects<import("zod").ZodEffects<import("zod").ZodString, string, string>, Date, string>;
|
|
6
|
+
number: import("zod").ZodEffects<import("zod").ZodEffects<import("zod").ZodString, string, string>, number, string>;
|
|
7
|
+
boolean: import("zod").ZodEffects<import("zod").ZodEnum<["true", "false"]>, boolean, "true" | "false">;
|
|
8
|
+
};
|
|
9
|
+
describeShape<TShape extends ZodRawShape>(val: ZodObject<TShape>, descriptions: Record<keyof TShape, string>): ZodObject<TShape>;
|
|
10
|
+
paginatedQuery<X extends ZodRawShape>(filter: X): ZodObject<import("zod").objectUtil.extendShape<{
|
|
11
|
+
page: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
|
|
12
|
+
pageSize: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
13
|
+
}, X>, "strip", import("zod").ZodTypeAny, import("zod").objectUtil.addQuestionMarks<import("zod").baseObjectOutputType<import("zod").objectUtil.extendShape<{
|
|
14
|
+
page: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
|
|
15
|
+
pageSize: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
16
|
+
}, X>>, any> extends infer T ? { [k in keyof T]: import("zod").objectUtil.addQuestionMarks<import("zod").baseObjectOutputType<import("zod").objectUtil.extendShape<{
|
|
17
|
+
page: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
|
|
18
|
+
pageSize: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
19
|
+
}, X>>, any>[k]; } : never, import("zod").baseObjectInputType<import("zod").objectUtil.extendShape<{
|
|
20
|
+
page: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
|
|
21
|
+
pageSize: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
22
|
+
}, X>> extends infer T_1 ? { [k_1 in keyof T_1]: import("zod").baseObjectInputType<import("zod").objectUtil.extendShape<{
|
|
23
|
+
page: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
|
|
24
|
+
pageSize: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
25
|
+
}, X>>[k_1]; } : never>;
|
|
26
|
+
paginatedResponse<T extends ZodType>(arr: T): ZodObject<{
|
|
27
|
+
items: import("zod").ZodArray<T, "many">;
|
|
28
|
+
info: ZodObject<{
|
|
29
|
+
count: import("zod").ZodNumber;
|
|
30
|
+
page: import("zod").ZodNumber;
|
|
31
|
+
pageSize: import("zod").ZodNumber;
|
|
32
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
33
|
+
page: number;
|
|
34
|
+
pageSize: number;
|
|
35
|
+
count: number;
|
|
36
|
+
}, {
|
|
37
|
+
page: number;
|
|
38
|
+
pageSize: number;
|
|
39
|
+
count: number;
|
|
40
|
+
}>;
|
|
41
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
42
|
+
info: {
|
|
43
|
+
page: number;
|
|
44
|
+
pageSize: number;
|
|
45
|
+
count: number;
|
|
46
|
+
};
|
|
47
|
+
items: T["_output"][];
|
|
48
|
+
}, {
|
|
49
|
+
info: {
|
|
50
|
+
page: number;
|
|
51
|
+
pageSize: number;
|
|
52
|
+
count: number;
|
|
53
|
+
};
|
|
54
|
+
items: T["_input"][];
|
|
55
|
+
}>;
|
|
56
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { array, number, object } from 'zod';
|
|
3
|
+
import { stringDateTransformer } from './transformers/stringDateTransformer.js';
|
|
4
|
+
import { stringNumberTransformer } from './transformers/stringNumberTransfromer.js';
|
|
5
|
+
import { stringBooleanTransformer } from './transformers/stringBooleanTransformer.js';
|
|
6
|
+
export class ValidationUtils {
|
|
7
|
+
strings = {
|
|
8
|
+
datetime: stringDateTransformer,
|
|
9
|
+
number: stringNumberTransformer,
|
|
10
|
+
boolean: stringBooleanTransformer,
|
|
11
|
+
};
|
|
12
|
+
describeShape(val, descriptions) {
|
|
13
|
+
const newShape = {};
|
|
14
|
+
for (const entry of Object.entries(val.shape)) {
|
|
15
|
+
newShape[entry[0]] = entry[1].openapi({ description: descriptions[entry[0]] });
|
|
16
|
+
}
|
|
17
|
+
return object(newShape);
|
|
18
|
+
}
|
|
19
|
+
paginatedQuery(filter) {
|
|
20
|
+
return object({
|
|
21
|
+
page: number().min(1).optional().default(1).openapi({ description: 'Page number' }),
|
|
22
|
+
pageSize: number().min(1).optional().openapi({
|
|
23
|
+
description: 'Number of items to display in the page.',
|
|
24
|
+
}),
|
|
25
|
+
}).extend(filter).openapi({ description: 'Pagination parameters' });
|
|
26
|
+
}
|
|
27
|
+
paginatedResponse(arr) {
|
|
28
|
+
return object({
|
|
29
|
+
items: array(arr).openapi({ description: 'Page or items' }),
|
|
30
|
+
info: object({
|
|
31
|
+
count: number().openapi({ description: 'Total number of items' }),
|
|
32
|
+
page: number().openapi({ description: 'Current page' }),
|
|
33
|
+
pageSize: number().openapi({ description: 'Number of itemss per page' }),
|
|
34
|
+
})
|
|
35
|
+
.openapi({ description: 'Pagination details' }),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
export const stringDateTransformer = z.string().refine((input) => {
|
|
4
|
+
try {
|
|
5
|
+
const output = new Date(Date.parse(input));
|
|
6
|
+
const outputStr = output.toISOString().replace('T', ' ');
|
|
7
|
+
const inputStr = input.replace('T', ' ');
|
|
8
|
+
return inputStr === outputStr;
|
|
9
|
+
}
|
|
10
|
+
catch (e) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}, 'Not a valid date string')
|
|
14
|
+
.transform((x) => {
|
|
15
|
+
return new Date(Date.parse(x));
|
|
16
|
+
}).openapi({ type: 'string', format: 'date-time' });
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
export const stringNumberTransformer = z.string().refine((input) => {
|
|
4
|
+
try {
|
|
5
|
+
if (input === '') {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const number = Number(input);
|
|
9
|
+
if (isNaN(number)) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (!isFinite(number)) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}, 'Not a valid number string')
|
|
21
|
+
.transform((x) => {
|
|
22
|
+
return Number(x);
|
|
23
|
+
}).openapi({ type: 'number' });
|
|
24
|
+
;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ZodObject, ZodRawShape, ZodFirstPartySchemaTypes } from 'zod';
|
|
2
|
+
import { Route } from './Route.js';
|
|
3
|
+
export type AnyRoute<TRouteType extends string> = Route<TRouteType, any, ZodFirstPartySchemaTypes, ZodObject<ZodRawShape> | undefined, ZodObject<ZodRawShape> | undefined, ZodObject<ZodRawShape> | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ErrorCode } from '../enums/ErrorCode.js';
|
|
2
|
+
import { SampleRouteType } from '../enums/SampleRouteType.js';
|
|
3
|
+
import { ConfigBuilder } from '../services/ConfigBuilder/ConfigBuilder.js';
|
|
4
|
+
import { DefaultConfig } from '../services/ConfigBuilder/types/DefaultConfig.js';
|
|
5
|
+
import { DefaultErrorMap } from '../services/ConfigBuilder/types/DefaultErrorMap.js';
|
|
6
|
+
import { DefaultRouteContextMap } from '../services/ConfigBuilder/types/DefaultRouteContextMap.js';
|
|
7
|
+
import { DefaultRouteMap } from '../services/ConfigBuilder/types/DefaultRouteMap.js';
|
|
8
|
+
import { DefaultRouteParamsMap } from '../services/ConfigBuilder/types/DefaultRouteParamsMap.js';
|
|
9
|
+
export type InitialBuilder = Pick<ConfigBuilder<SampleRouteType, ErrorCode, DefaultErrorMap, DefaultRouteParamsMap, DefaultRouteContextMap, DefaultRouteMap, DefaultConfig>, 'customizeErrors' | 'create' | 'defineGlobalConfig' | 'customizeRoutes'>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type NonEmptyArray<T> = [T, ...T[]];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z, ZodFirstPartySchemaTypes, ZodObject, ZodRawShape } from 'zod';
|
|
2
|
+
import { Method } from '../enums/Methods.js';
|
|
3
|
+
import { RoutePath } from './RoutePath.js';
|
|
4
|
+
export interface Route<TType extends string, TContext extends object, TResponseValidator extends ZodFirstPartySchemaTypes, TPathValidator extends ZodObject<ZodRawShape> | undefined, TQueryValidator extends ZodObject<ZodRawShape> | undefined, TBodyValidator extends ZodObject<ZodRawShape> | undefined, TMethod extends Method = Method> {
|
|
5
|
+
type: TType;
|
|
6
|
+
method: TMethod;
|
|
7
|
+
path: RoutePath;
|
|
8
|
+
description: string;
|
|
9
|
+
validators: {
|
|
10
|
+
query?: TQueryValidator;
|
|
11
|
+
path?: TPathValidator;
|
|
12
|
+
body?: TMethod extends 'GET' ? never : TBodyValidator;
|
|
13
|
+
response: TResponseValidator;
|
|
14
|
+
};
|
|
15
|
+
handler: (context: {
|
|
16
|
+
params: {
|
|
17
|
+
body: TBodyValidator extends ZodObject<ZodRawShape> ? z.infer<TBodyValidator> : object;
|
|
18
|
+
query: TQueryValidator extends ZodObject<ZodRawShape> ? z.infer<TQueryValidator> : object;
|
|
19
|
+
path: TPathValidator extends ZodObject<ZodRawShape> ? z.infer<TPathValidator> : object;
|
|
20
|
+
};
|
|
21
|
+
} & TContext) => Promise<z.infer<TResponseValidator>>;
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type RoutePath = `/${string}` | '/';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ExpressWrapper } from '../services/ExpressWrapper/ExpressWrapper.js';
|
|
2
|
+
import { TanstackStartWrapper } from '../services/TanstackStartWrapper/TanstackStartWrapper.js';
|
|
3
|
+
import { AnyConfig } from './config/AnyConfig.js';
|
|
4
|
+
export interface Wrappers<TRouteTypes extends string, TErrorCodes extends string, TConfig extends AnyConfig<TRouteTypes, TErrorCodes>> {
|
|
5
|
+
tanstackStart: TanstackStartWrapper<TRouteTypes, TErrorCodes, TConfig>;
|
|
6
|
+
express: ExpressWrapper<TRouteTypes, TErrorCodes, TConfig>;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ErrorConfigMap } from './ErrorConfigMap.js';
|
|
2
|
+
import { Config } from './Config.js';
|
|
3
|
+
import { RouteConfigMap } from './RouteConfigMap.js';
|
|
4
|
+
export type AnyConfig<TRouteTypes extends string, TErrorCodes extends string> = Config<TRouteTypes, TErrorCodes, ErrorConfigMap<TErrorCodes>, any, any, RouteConfigMap<TRouteTypes, TErrorCodes, any, any>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { LogLevel } from '../../services/Logger/types/LogLevel.js';
|
|
2
|
+
import { RoutePath } from '../RoutePath.js';
|
|
3
|
+
import { ErrorConfigMap } from './ErrorConfigMap.js';
|
|
4
|
+
import { ErrorResponse } from './ErrorResponse.js';
|
|
5
|
+
import { RouteConfigMap } from './RouteConfigMap.js';
|
|
6
|
+
import { RouteContextMap } from './RouteContextMap.js';
|
|
7
|
+
import { RouteExtraPropsMap } from './RouteExtraPropsMap.js';
|
|
8
|
+
import { Server } from './Server.js';
|
|
9
|
+
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>> = {
|
|
10
|
+
basePath: RoutePath;
|
|
11
|
+
routes: TRouteConfigMap;
|
|
12
|
+
errors: TErrorConfigMap;
|
|
13
|
+
defaultError: ErrorResponse<TErrorCodes, TErrorConfigMap>;
|
|
14
|
+
skipDescriptionsCheck?: boolean;
|
|
15
|
+
apiName?: string;
|
|
16
|
+
servers?: Server[];
|
|
17
|
+
logLevel?: LogLevel;
|
|
18
|
+
handleError?: (e: unknown) => ErrorResponse<TErrorCodes, TErrorConfigMap>;
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ZodObject, ZodRawShape } from 'zod';
|
|
2
|
+
import { AnyRoute } from '../AnyRoute.js';
|
|
3
|
+
import { RouteExtraProps } from './RouteExtraProps.js';
|
|
4
|
+
export type ContextParams<TRouteType extends string, TExtraProps extends ZodObject<ZodRawShape> | undefined> = {
|
|
5
|
+
route: AnyRoute<TRouteType> & RouteExtraProps<TExtraProps>;
|
|
6
|
+
request: Request;
|
|
7
|
+
params: {
|
|
8
|
+
body: unknown;
|
|
9
|
+
query: unknown;
|
|
10
|
+
path: unknown;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TypeOf } from 'zod';
|
|
2
|
+
import { ErrorConfigMap } from './ErrorConfigMap.js';
|
|
3
|
+
export type ErrorResponse<TErrorCodes extends string, TErrorConfigMap extends ErrorConfigMap<TErrorCodes>> = {
|
|
4
|
+
[K in TErrorCodes]: {
|
|
5
|
+
code: K;
|
|
6
|
+
body: TypeOf<TErrorConfigMap[K]['responseValidator']>;
|
|
7
|
+
};
|
|
8
|
+
}[TErrorCodes];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ZodObject, ZodRawShape } from 'zod';
|
|
2
|
+
import { ContextParams } from './ContextParams.js';
|
|
3
|
+
export type RouteConfig<TRouteType extends string, TErrorCodes extends string, TExtraProps extends ZodObject<ZodRawShape> | undefined = ZodObject<ZodRawShape> | undefined, TContext extends object | undefined = object | undefined> = {
|
|
4
|
+
authorization: boolean;
|
|
5
|
+
extraProps: TExtraProps;
|
|
6
|
+
contextFactory: (params: ContextParams<TRouteType, TExtraProps>) => Promise<TContext>;
|
|
7
|
+
errors?: {
|
|
8
|
+
[key in TErrorCodes]?: true;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ZodObject, ZodRawShape } from 'zod';
|
|
2
|
+
import { RouteConfig } from './RouteConfig.js';
|
|
3
|
+
import { RouteExtraPropsMap } from './RouteExtraPropsMap.js';
|
|
4
|
+
import { RouteContextMap } from './RouteContextMap.js';
|
|
5
|
+
export type RouteConfigMap<TRouteTypes extends string, TErrorCodes extends string, TParamsMap extends RouteExtraPropsMap<TRouteTypes, ZodObject<ZodRawShape> | undefined> | undefined = undefined, TContextMap extends RouteContextMap<TRouteTypes, TParamsMap> | undefined = undefined> = {
|
|
6
|
+
[key in TRouteTypes]: RouteConfig<key, TErrorCodes, TParamsMap extends undefined ? undefined : Exclude<TParamsMap, undefined>[key], TContextMap extends undefined ? undefined : Awaited<ReturnType<Exclude<TContextMap, undefined>[key]>>>;
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ZodObject, ZodRawShape } from 'zod';
|
|
2
|
+
import { RouteExtraPropsMap } from './RouteExtraPropsMap.js';
|
|
3
|
+
import { ContextParams } from './ContextParams.js';
|
|
4
|
+
export type RouteContextMap<TCode extends string, TParamsMap extends RouteExtraPropsMap<TCode, ZodObject<ZodRawShape> | undefined> | undefined> = {
|
|
5
|
+
[key in TCode]: (params: ContextParams<key, TParamsMap extends undefined ? undefined : Exclude<TParamsMap, undefined>[key]>) => Promise<object>;
|
|
6
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export declare const fieldErrorValidator: z.ZodObject<{
|
|
4
|
+
field: z.ZodString;
|
|
5
|
+
message: z.ZodString;
|
|
6
|
+
} & {
|
|
7
|
+
fieldErrors: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
8
|
+
field: z.ZodString;
|
|
9
|
+
message: z.ZodString;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
message: string;
|
|
12
|
+
field: string;
|
|
13
|
+
}, {
|
|
14
|
+
message: string;
|
|
15
|
+
field: string;
|
|
16
|
+
}>, "many">>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
message: string;
|
|
19
|
+
field: string;
|
|
20
|
+
fieldErrors?: {
|
|
21
|
+
message: string;
|
|
22
|
+
field: string;
|
|
23
|
+
}[] | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
message: string;
|
|
26
|
+
field: string;
|
|
27
|
+
fieldErrors?: {
|
|
28
|
+
message: string;
|
|
29
|
+
field: string;
|
|
30
|
+
}[] | undefined;
|
|
31
|
+
}>;
|
|
32
|
+
export type FieldErrorValidator = typeof fieldErrorValidator;
|
|
33
|
+
export type FieldError = z.TypeOf<FieldErrorValidator>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const baseFieldErrorValidator = z.object({
|
|
4
|
+
field: z.string().openapi({ description: 'Name of the field' }),
|
|
5
|
+
message: z.string().openapi({ description: 'Error message' }),
|
|
6
|
+
}).openapi({ description: 'Field error' });
|
|
7
|
+
export const fieldErrorValidator = baseFieldErrorValidator.extend({
|
|
8
|
+
fieldErrors: z.array(baseFieldErrorValidator).optional(),
|
|
9
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ZodError } from 'zod';
|
|
2
|
+
import { ValidationLocation } from '../../enums/ValidationLocations.js';
|
|
3
|
+
import { BuiltInError } from './BuiltInError.js';
|
|
4
|
+
export declare class ValidationError extends BuiltInError {
|
|
5
|
+
private error;
|
|
6
|
+
private location;
|
|
7
|
+
constructor(error: ZodError<unknown>, location: ValidationLocation);
|
|
8
|
+
getZodError(): ZodError<unknown>;
|
|
9
|
+
getLocation(): ValidationLocation;
|
|
10
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ErrorCode } from '../../enums/ErrorCode.js';
|
|
2
|
+
import { BuiltInError } from './BuiltInError.js';
|
|
3
|
+
export class ValidationError extends BuiltInError {
|
|
4
|
+
error;
|
|
5
|
+
location;
|
|
6
|
+
constructor(error, location) {
|
|
7
|
+
super(ErrorCode.ValidationFailed);
|
|
8
|
+
this.error = error;
|
|
9
|
+
this.location = location;
|
|
10
|
+
}
|
|
11
|
+
getZodError() {
|
|
12
|
+
return this.error;
|
|
13
|
+
}
|
|
14
|
+
getLocation() {
|
|
15
|
+
return this.location;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ErrorCode } from '../../../enums/ErrorCode.js';
|
|
4
|
+
export declare const notFoundErrorResponseValidator: z.ZodObject<{
|
|
5
|
+
error: z.ZodLiteral<ErrorCode.NotFound>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
error: ErrorCode.NotFound;
|
|
8
|
+
}, {
|
|
9
|
+
error: ErrorCode.NotFound;
|
|
10
|
+
}>;
|
|
11
|
+
export type NotFoundErrorResponseValidator = typeof notFoundErrorResponseValidator;
|
|
12
|
+
export type NotFoundErrorResponse = z.TypeOf<NotFoundErrorResponseValidator>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ErrorCode } from '../../../enums/ErrorCode.js';
|
|
4
|
+
export const notFoundErrorResponseValidator = z.object({
|
|
5
|
+
error: z.literal(ErrorCode.NotFound).openapi({ description: 'Code to handle on the frontend' }),
|
|
6
|
+
}).openapi({ description: 'Error response' });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ErrorCode } from '../../../enums/ErrorCode.js';
|
|
4
|
+
export declare const unknownErrorResponseValidator: z.ZodObject<{
|
|
5
|
+
error: z.ZodLiteral<ErrorCode.UnknownError>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
error: ErrorCode.UnknownError;
|
|
8
|
+
}, {
|
|
9
|
+
error: ErrorCode.UnknownError;
|
|
10
|
+
}>;
|
|
11
|
+
export type UnknownErrorResponseValidator = typeof unknownErrorResponseValidator;
|
|
12
|
+
export type UnknownErrorResponse = z.TypeOf<UnknownErrorResponseValidator>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { ErrorCode } from '../../../enums/ErrorCode.js';
|
|
4
|
+
export const unknownErrorResponseValidator = z.object({
|
|
5
|
+
error: z.literal(ErrorCode.UnknownError).openapi({ description: 'Code to handle on the frontend' }),
|
|
6
|
+
}).openapi({ description: 'Error response' });
|