@visulima/api-platform 1.0.0
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/CHANGELOG.md +15 -0
- package/LICENSE.md +21 -0
- package/README.md +137 -0
- package/dist/chunk-2LATTLUM.mjs +166 -0
- package/dist/chunk-2LATTLUM.mjs.map +1 -0
- package/dist/chunk-4DRV4PCJ.js +51 -0
- package/dist/chunk-4DRV4PCJ.js.map +1 -0
- package/dist/chunk-5VRACIDE.mjs +10 -0
- package/dist/chunk-5VRACIDE.mjs.map +1 -0
- package/dist/chunk-GSWANBU5.mjs +51 -0
- package/dist/chunk-GSWANBU5.mjs.map +1 -0
- package/dist/chunk-J4EBGCNK.mjs +99 -0
- package/dist/chunk-J4EBGCNK.mjs.map +1 -0
- package/dist/chunk-JC4IRQUL.js +10 -0
- package/dist/chunk-JC4IRQUL.js.map +1 -0
- package/dist/chunk-S7GUPAL4.js +166 -0
- package/dist/chunk-S7GUPAL4.js.map +1 -0
- package/dist/chunk-T25VSNTF.js +99 -0
- package/dist/chunk-T25VSNTF.js.map +1 -0
- package/dist/index-3318b0da.d.ts +33 -0
- package/dist/index-browser.d.ts +2 -0
- package/dist/index-browser.js +8 -0
- package/dist/index-browser.js.map +1 -0
- package/dist/index-browser.mjs +8 -0
- package/dist/index-browser.mjs.map +1 -0
- package/dist/index-server.d.ts +87 -0
- package/dist/index-server.js +454 -0
- package/dist/index-server.js.map +1 -0
- package/dist/index-server.mjs +454 -0
- package/dist/index-server.mjs.map +1 -0
- package/dist/next/cli/index.d.ts +11 -0
- package/dist/next/cli/index.js +203 -0
- package/dist/next/cli/index.js.map +1 -0
- package/dist/next/cli/index.mjs +203 -0
- package/dist/next/cli/index.mjs.map +1 -0
- package/dist/next/index-browser.d.ts +4 -0
- package/dist/next/index-browser.js +12 -0
- package/dist/next/index-browser.js.map +1 -0
- package/dist/next/index-browser.mjs +12 -0
- package/dist/next/index-browser.mjs.map +1 -0
- package/dist/next/index-server.d.ts +129 -0
- package/dist/next/index-server.js +76 -0
- package/dist/next/index-server.js.map +1 -0
- package/dist/next/index-server.mjs +76 -0
- package/dist/next/index-server.mjs.map +1 -0
- package/dist/swagger-6ad3b021.d.ts +11 -0
- package/next/cli/package.json +9 -0
- package/next/package.json +10 -0
- package/package.json +207 -0
- package/src/connect/create-node-router.ts +44 -0
- package/src/connect/handler.ts +46 -0
- package/src/connect/middleware/cors-middleware.ts +10 -0
- package/src/connect/middleware/http-header-normalizer.ts +93 -0
- package/src/connect/middleware/rate-limiter-middleware.ts +43 -0
- package/src/connect/middleware/serializers-middleware.ts +121 -0
- package/src/connect/serializers/types.d.ts +1 -0
- package/src/connect/serializers/xml.ts +13 -0
- package/src/connect/serializers/yaml.ts +7 -0
- package/src/error-handler/jsonapi-error-handler.ts +46 -0
- package/src/error-handler/problem-error-handler.ts +44 -0
- package/src/error-handler/types.d.ts +14 -0
- package/src/error-handler/utils.ts +39 -0
- package/src/index-browser.tsx +1 -0
- package/src/index-server.ts +75 -0
- package/src/next/cli/index.ts +2 -0
- package/src/next/cli/list/api-route-file-parser.ts +74 -0
- package/src/next/cli/list/collect-api-route-files.ts +42 -0
- package/src/next/cli/list/list-command.ts +105 -0
- package/src/next/cli/list/routes-render.ts +62 -0
- package/src/next/cli/list/types.d.ts +1 -0
- package/src/next/index-browser.tsx +3 -0
- package/src/next/index-server.ts +6 -0
- package/src/next/routes/api/swagger.ts +23 -0
- package/src/next/routes/pages/swagger/get-static-properties-swagger.ts +32 -0
- package/src/next/routes/pages/swagger/redoc.tsx +35 -0
- package/src/next/routes/pages/swagger/swagger.tsx +39 -0
- package/src/next/webpack/with-open-api.ts +63 -0
- package/src/swagger/extend-swagger-spec.ts +167 -0
- package/src/swagger/swagger-handler.ts +83 -0
- package/src/utils.ts +37 -0
- package/src/zod/date-in-schema.ts +57 -0
- package/src/zod/date-out-schema.ts +41 -0
- package/src/zod/index.ts +9 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/swagger/swagger-handler.ts
|
|
2
|
+
var _crud = require('@visulima/crud');
|
|
3
|
+
var _debug = require('debug'); var _debug2 = _interopRequireDefault(_debug);
|
|
4
|
+
var _lodashmerge = require('lodash.merge'); var _lodashmerge2 = _interopRequireDefault(_lodashmerge);
|
|
5
|
+
var _fs = require('fs');
|
|
6
|
+
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
7
|
+
|
|
8
|
+
// src/connect/serializers/yaml.ts
|
|
9
|
+
var _yaml = require('yaml');
|
|
10
|
+
var yamlTransformer = (data) => _yaml.stringify.call(void 0, data, { indent: 2 });
|
|
11
|
+
var yaml_default = yamlTransformer;
|
|
12
|
+
|
|
13
|
+
// src/swagger/extend-swagger-spec.ts
|
|
14
|
+
var _case = require('case');
|
|
15
|
+
var extendComponentSchemas = (spec, schemaName, schema) => {
|
|
16
|
+
if (typeof spec.components !== "object") {
|
|
17
|
+
spec.components = {};
|
|
18
|
+
}
|
|
19
|
+
if (typeof spec.components.schemas !== "object") {
|
|
20
|
+
spec.components.schemas = {};
|
|
21
|
+
}
|
|
22
|
+
if (typeof spec.components.schemas[schemaName] === "undefined") {
|
|
23
|
+
spec.components.schemas[schemaName] = schema;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var extendComponentExamples = (spec, exampleName, example) => {
|
|
27
|
+
if (typeof spec.components !== "object") {
|
|
28
|
+
spec.components = {};
|
|
29
|
+
}
|
|
30
|
+
if (typeof spec.components.examples !== "object") {
|
|
31
|
+
spec.components.examples = {};
|
|
32
|
+
}
|
|
33
|
+
if (typeof spec.components.examples[exampleName] === "undefined") {
|
|
34
|
+
spec.components.examples[exampleName] = example;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
function extendSwaggerWithMediaTypeSchema(responseSpec, allowedMediaTypes, pathKey, spec, methodSpec, status) {
|
|
38
|
+
let examples;
|
|
39
|
+
Object.entries(responseSpec.content).forEach(([mediaName, contentSpec]) => {
|
|
40
|
+
if (typeof contentSpec.schema === "object") {
|
|
41
|
+
const { schema } = contentSpec;
|
|
42
|
+
if (mediaName === "application/json" && typeof contentSpec.examples !== "undefined") {
|
|
43
|
+
examples = contentSpec.examples;
|
|
44
|
+
}
|
|
45
|
+
if (typeof schema.$ref !== "undefined") {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const schemaIsArray = schema.type === "array";
|
|
49
|
+
Object.entries(allowedMediaTypes || {}).forEach(([mediaType, allowed]) => {
|
|
50
|
+
var _a, _b, _c;
|
|
51
|
+
if (!allowed) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const schemaName = `${_case.header.call(void 0, pathKey.trim().replace("/", ""))}${mediaType === "application/ld+json" ? ".jsonld" : ""}`;
|
|
55
|
+
extendComponentSchemas(spec, schemaName, schema);
|
|
56
|
+
if (typeof ((_c = (_b = (_a = methodSpec == null ? void 0 : methodSpec.responses) == null ? void 0 : _a[status]) == null ? void 0 : _b.content[mediaType]) == null ? void 0 : _c.schema) === "undefined") {
|
|
57
|
+
methodSpec.responses[status].content[mediaType] = { schema: {} };
|
|
58
|
+
}
|
|
59
|
+
methodSpec.responses[status].content[mediaType].schema = schemaIsArray ? {
|
|
60
|
+
type: "array",
|
|
61
|
+
items: {
|
|
62
|
+
$ref: `#/components/schemas/${schemaName}`
|
|
63
|
+
}
|
|
64
|
+
} : {
|
|
65
|
+
$ref: `#/components/schemas/${schemaName}`
|
|
66
|
+
};
|
|
67
|
+
if (typeof methodSpec.produces === "undefined") {
|
|
68
|
+
methodSpec.produces = [];
|
|
69
|
+
}
|
|
70
|
+
methodSpec.produces.push(mediaType);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return examples;
|
|
75
|
+
}
|
|
76
|
+
function extendSwaggerWithMediaTypeExamples(responseSpec, allowedMediaTypes, pathKey, spec, examples, methodSpec, status) {
|
|
77
|
+
Object.keys(responseSpec.content).forEach((mediaName) => {
|
|
78
|
+
if (mediaName === "application/json") {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
Object.entries(allowedMediaTypes || {}).forEach(([mediaType, allowed]) => {
|
|
82
|
+
var _a, _b, _c;
|
|
83
|
+
if (!allowed) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const examplesName = `${_case.header.call(void 0, pathKey.trim().replace("/", ""))}${mediaType === "application/ld+json" ? ".jsonld" : ""}`;
|
|
87
|
+
extendComponentExamples(spec, examplesName, examples);
|
|
88
|
+
if (typeof ((_c = (_b = (_a = methodSpec == null ? void 0 : methodSpec.responses) == null ? void 0 : _a[status]) == null ? void 0 : _b.content[mediaType]) == null ? void 0 : _c.examples) === "undefined") {
|
|
89
|
+
methodSpec.responses[status].content[mediaType] = { examples: {} };
|
|
90
|
+
}
|
|
91
|
+
methodSpec.responses[status].content[mediaType].examples = examples;
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function extendSwaggerSpec(spec, allowedMediaTypes) {
|
|
96
|
+
if (typeof spec === "object" && typeof spec.paths === "object") {
|
|
97
|
+
Object.entries(spec.paths).forEach(([pathKey, pathSpec]) => {
|
|
98
|
+
Object.values(pathSpec).forEach((methodSpec) => {
|
|
99
|
+
if (typeof methodSpec.responses === "object") {
|
|
100
|
+
Object.entries(methodSpec.responses).forEach(([status, responseSpec]) => {
|
|
101
|
+
if (typeof responseSpec.content === "object") {
|
|
102
|
+
let examples = extendSwaggerWithMediaTypeSchema(responseSpec, allowedMediaTypes, pathKey, spec, methodSpec, status);
|
|
103
|
+
if (typeof examples !== "undefined") {
|
|
104
|
+
extendSwaggerWithMediaTypeExamples(responseSpec, allowedMediaTypes, pathKey, spec, examples, methodSpec, status);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return spec;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// src/swagger/swagger-handler.ts
|
|
116
|
+
var swaggerCrudDebug = _debug2.default.call(void 0, "visulima:api-platform:swagger:crud:get-static-properties-swagger");
|
|
117
|
+
var swaggerHandler = (options = {}) => {
|
|
118
|
+
const {
|
|
119
|
+
allowedMediaTypes = {
|
|
120
|
+
"application/json": true
|
|
121
|
+
},
|
|
122
|
+
swaggerFilePath,
|
|
123
|
+
crud
|
|
124
|
+
} = options;
|
|
125
|
+
return async (request, response) => {
|
|
126
|
+
const swaggerPath = _path2.default.join(process.cwd(), swaggerFilePath || "swagger/swagger.json");
|
|
127
|
+
if (!_fs.existsSync.call(void 0, swaggerPath)) {
|
|
128
|
+
throw new Error(`Swagger file not found at ${swaggerPath}. Did you change the output path in "withOpenApi" inside the next.config.js file?`);
|
|
129
|
+
}
|
|
130
|
+
const fileContents = _fs.readFileSync.call(void 0, swaggerPath, "utf8");
|
|
131
|
+
let spec = extendSwaggerSpec(JSON.parse(fileContents), allowedMediaTypes);
|
|
132
|
+
let crudSwagger = {};
|
|
133
|
+
if (typeof crud !== "undefined") {
|
|
134
|
+
try {
|
|
135
|
+
const modelsOpenApi = await _crud.modelsToOpenApi.call(void 0, crud);
|
|
136
|
+
crudSwagger = {
|
|
137
|
+
components: { schemas: modelsOpenApi.schemas, examples: modelsOpenApi.examples },
|
|
138
|
+
tags: modelsOpenApi.tags,
|
|
139
|
+
paths: modelsOpenApi.paths
|
|
140
|
+
};
|
|
141
|
+
crudSwagger = extendSwaggerSpec(crudSwagger, allowedMediaTypes);
|
|
142
|
+
swaggerCrudDebug(JSON.stringify(crudSwagger, null, 2));
|
|
143
|
+
spec = _lodashmerge2.default.call(void 0, spec, crudSwagger);
|
|
144
|
+
} catch (error) {
|
|
145
|
+
console.log(error);
|
|
146
|
+
throw new Error("Please install @visulima/crud to use the crud swagger generator.");
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (typeof request.headers.accept === "string" && /yaml|yml/.test(request.headers.accept)) {
|
|
150
|
+
response.statusCode = 200;
|
|
151
|
+
response.setHeader("Content-Type", request.headers.accept);
|
|
152
|
+
response.end(yaml_default(spec));
|
|
153
|
+
} else {
|
|
154
|
+
response.statusCode = 200;
|
|
155
|
+
response.setHeader("Content-Type", "application/json");
|
|
156
|
+
response.end(JSON.stringify(spec, null, 2));
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
var swagger_handler_default = swaggerHandler;
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
exports.yaml_default = yaml_default; exports.swagger_handler_default = swagger_handler_default;
|
|
166
|
+
//# sourceMappingURL=chunk-S7GUPAL4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/swagger/swagger-handler.ts","../src/connect/serializers/yaml.ts","../src/swagger/extend-swagger-spec.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line unicorn/prevent-abbreviations,import/no-extraneous-dependencies\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\n// eslint-disable-next-line unicorn/prevent-abbreviations,import/no-extraneous-dependencies\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport debug from \"debug\";\nimport merge from \"lodash.merge\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\nimport type { OAS3Definition, Tag } from \"swagger-jsdoc\";\n\nimport yamlTransformer from \"../connect/serializers/yaml\";\nimport extendSwaggerSpec from \"./extend-swagger-spec\";\n\n// eslint-disable-next-line testing-library/no-debugging-utils\nconst swaggerCrudDebug = debug(\"visulima:api-platform:swagger:crud:get-static-properties-swagger\");\n\nconst swaggerHandler = (\n options: Partial<{\n allowedMediaTypes: { [key: string]: boolean };\n swaggerFilePath: string;\n crud: Exclude<ModelsToOpenApiParameters, \"swagger\"> & {\n swagger?: {\n models?: SwaggerModelsConfig<string>;\n };\n };\n }> = {},\n) => {\n const {\n allowedMediaTypes = {\n \"application/json\": true,\n },\n swaggerFilePath,\n crud,\n } = options;\n\n return async <Request extends IncomingMessage, Response extends ServerResponse>(request: Request, response: Response) => {\n const swaggerPath = path.join(process.cwd(), swaggerFilePath || \"swagger/swagger.json\");\n\n if (!existsSync(swaggerPath)) {\n throw new Error(`Swagger file not found at ${swaggerPath}. Did you change the output path in \"withOpenApi\" inside the next.config.js file?`);\n }\n\n const fileContents = readFileSync(swaggerPath, \"utf8\");\n\n let spec = extendSwaggerSpec(JSON.parse(fileContents) as OAS3Definition, allowedMediaTypes) as OAS3Definition;\n let crudSwagger: Partial<OAS3Definition> = {};\n\n if (typeof crud !== \"undefined\") {\n try {\n const modelsOpenApi = await modelsToOpenApi(crud);\n\n crudSwagger = {\n components: { schemas: modelsOpenApi.schemas, examples: modelsOpenApi.examples },\n tags: modelsOpenApi.tags as Tag[],\n paths: modelsOpenApi.paths,\n };\n\n crudSwagger = extendSwaggerSpec(crudSwagger, allowedMediaTypes);\n\n swaggerCrudDebug(JSON.stringify(crudSwagger, null, 2));\n\n spec = merge(spec, crudSwagger);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error);\n throw new Error(\"Please install @visulima/crud to use the crud swagger generator.\");\n }\n }\n\n if (typeof request.headers.accept === \"string\" && /yaml|yml/.test(request.headers.accept)) {\n response.statusCode = 200;\n response.setHeader(\"Content-Type\", request.headers.accept);\n response.end(yamlTransformer(spec));\n } else {\n response.statusCode = 200;\n response.setHeader(\"Content-Type\", \"application/json\");\n response.end(JSON.stringify(spec, null, 2));\n }\n };\n};\n\nexport default swaggerHandler;\n","import { stringify } from \"yaml\";\n\nimport type { Serializer } from \"./types\";\n\nconst yamlTransformer: Serializer = (data) => stringify(data, { indent: 2 });\n\nexport default yamlTransformer;\n","import { header as headerCase } from \"case\";\nimport type { OpenAPIV3 } from \"openapi-types\";\nimport type { OAS3Definition, Operation, Responses } from \"swagger-jsdoc\";\n\nconst extendComponentSchemas = (spec: Partial<OAS3Definition>, schemaName: string, schema: OpenAPIV3.SchemaObject) => {\n if (typeof spec.components !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components = {};\n }\n\n if (typeof spec.components.schemas !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components.schemas = {};\n }\n\n if (typeof spec.components.schemas[schemaName] === \"undefined\") {\n // eslint-disable-next-line no-param-reassign\n spec.components.schemas[schemaName] = schema;\n }\n};\n\nconst extendComponentExamples = (spec: Partial<OAS3Definition>, exampleName: string, example: OpenAPIV3.SchemaObject) => {\n if (typeof spec.components !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components = {};\n }\n\n if (typeof spec.components.examples !== \"object\") {\n // eslint-disable-next-line no-param-reassign\n spec.components.examples = {};\n }\n\n if (typeof spec.components.examples[exampleName] === \"undefined\") {\n // eslint-disable-next-line no-param-reassign\n spec.components.examples[exampleName] = example;\n }\n};\n\nfunction extendSwaggerWithMediaTypeSchema(\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n pathKey: string,\n spec: Partial<OAS3Definition>,\n methodSpec: Operation,\n status: string,\n) {\n let examples:\n | {\n [media: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject;\n }\n | undefined;\n\n Object.entries(responseSpec.content as object).forEach(([mediaName, contentSpec]) => {\n if (typeof contentSpec.schema === \"object\") {\n const { schema } = contentSpec;\n\n if (mediaName === \"application/json\" && typeof contentSpec.examples !== \"undefined\") {\n examples = contentSpec.examples;\n }\n\n if (typeof (schema as OpenAPIV3.ReferenceObject).$ref !== \"undefined\") {\n return;\n }\n\n const schemaIsArray = (schema as OpenAPIV3.SchemaObject).type === \"array\";\n\n Object.entries(allowedMediaTypes || {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n // eslint-disable-next-line max-len\n const schemaName = `${headerCase(pathKey.trim().replace(\"/\", \"\"))}${mediaType === \"application/ld+json\" ? \".jsonld\" : \"\"}`;\n\n extendComponentSchemas(spec as OAS3Definition, schemaName, schema as OpenAPIV3.SchemaObject);\n\n if (typeof methodSpec?.responses?.[status]?.content[mediaType]?.schema === \"undefined\") {\n // eslint-disable-next-line no-param-reassign\n (methodSpec.responses as Responses)[status].content[mediaType] = { schema: {} };\n }\n\n // eslint-disable-next-line no-param-reassign\n (methodSpec.responses as Responses)[status].content[mediaType].schema = schemaIsArray\n ? {\n type: \"array\",\n items: {\n $ref: `#/components/schemas/${schemaName}`,\n },\n }\n : {\n $ref: `#/components/schemas/${schemaName}`,\n };\n\n if (typeof methodSpec.produces === \"undefined\") {\n // eslint-disable-next-line no-param-reassign\n methodSpec.produces = [];\n }\n\n methodSpec.produces.push(mediaType);\n });\n }\n });\n\n return examples;\n}\n\nfunction extendSwaggerWithMediaTypeExamples(\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n pathKey: string,\n spec: Partial<OAS3Definition>,\n examples: { [p: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject } | undefined,\n methodSpec: Operation,\n status: string,\n) {\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === \"application/json\") {\n return;\n }\n\n Object.entries(allowedMediaTypes || {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n // eslint-disable-next-line max-len\n const examplesName = `${headerCase(pathKey.trim().replace(\"/\", \"\"))}${mediaType === \"application/ld+json\" ? \".jsonld\" : \"\"}`;\n\n extendComponentExamples(spec as OAS3Definition, examplesName, examples as OpenAPIV3.SchemaObject);\n\n if (typeof methodSpec?.responses?.[status]?.content[mediaType]?.examples === \"undefined\") {\n // eslint-disable-next-line no-param-reassign\n (methodSpec.responses as Responses)[status].content[mediaType] = { examples: {} };\n }\n\n // eslint-disable-next-line no-param-reassign\n (methodSpec.responses as Responses)[status].content[mediaType].examples = examples;\n });\n });\n}\n\n// eslint-disable-next-line radar/cognitive-complexity\nexport default function extendSwaggerSpec(spec: Partial<OAS3Definition>, allowedMediaTypes?: { [key: string]: boolean }): Partial<OAS3Definition> {\n if (typeof spec === \"object\" && typeof spec.paths === \"object\") {\n Object.entries(spec.paths).forEach(([pathKey, pathSpec]) => {\n Object.values(pathSpec).forEach((methodSpec) => {\n if (typeof methodSpec.responses === \"object\") {\n Object.entries<OpenAPIV3.ResponseObject>(methodSpec.responses).forEach(([status, responseSpec]) => {\n if (typeof responseSpec.content === \"object\") {\n let examples:\n | {\n [media: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject;\n }\n | undefined = extendSwaggerWithMediaTypeSchema(responseSpec, allowedMediaTypes, pathKey, spec, methodSpec, status);\n\n if (typeof examples !== \"undefined\") {\n extendSwaggerWithMediaTypeExamples(responseSpec, allowedMediaTypes, pathKey, spec, examples, methodSpec, status);\n }\n }\n });\n }\n });\n });\n }\n\n return spec;\n}\n"]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkJC4IRQULjs = require('./chunk-JC4IRQUL.js');
|
|
4
|
+
|
|
5
|
+
// src/zod/index.ts
|
|
6
|
+
var zod_exports = {};
|
|
7
|
+
_chunkJC4IRQULjs.__export.call(void 0, zod_exports, {
|
|
8
|
+
dateIn: () => dateIn,
|
|
9
|
+
dateOut: () => dateOut
|
|
10
|
+
});
|
|
11
|
+
var _zodtots = require('zod-to-ts');
|
|
12
|
+
|
|
13
|
+
// src/zod/date-in-schema.ts
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
var _zod = require('zod');
|
|
21
|
+
var zodDateInKind = "ZodDateIn";
|
|
22
|
+
var isoDateRegex = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?)?Z?$/;
|
|
23
|
+
var _ZodDateIn = class extends _zod.ZodType {
|
|
24
|
+
_parse(input) {
|
|
25
|
+
const { status, ctx } = this._processInputParams(input);
|
|
26
|
+
if (ctx.parsedType !== _zod.ZodParsedType.string) {
|
|
27
|
+
_zod.addIssueToContext.call(void 0, ctx, {
|
|
28
|
+
code: _zod.ZodIssueCode.invalid_type,
|
|
29
|
+
expected: _zod.ZodParsedType.string,
|
|
30
|
+
received: ctx.parsedType
|
|
31
|
+
});
|
|
32
|
+
return _zod.INVALID;
|
|
33
|
+
}
|
|
34
|
+
if (!isoDateRegex.test(ctx.data)) {
|
|
35
|
+
_zod.addIssueToContext.call(void 0, ctx, {
|
|
36
|
+
code: _zod.ZodIssueCode.invalid_string,
|
|
37
|
+
validation: "regex"
|
|
38
|
+
});
|
|
39
|
+
status.dirty();
|
|
40
|
+
}
|
|
41
|
+
const date = new Date(ctx.data);
|
|
42
|
+
if (Number.isNaN(date.getTime())) {
|
|
43
|
+
_zod.addIssueToContext.call(void 0, ctx, {
|
|
44
|
+
code: _zod.ZodIssueCode.invalid_date
|
|
45
|
+
});
|
|
46
|
+
return _zod.INVALID;
|
|
47
|
+
}
|
|
48
|
+
return { status: status.value, value: date };
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var ZodDateIn = _ZodDateIn;
|
|
52
|
+
ZodDateIn.create = () => new _ZodDateIn({
|
|
53
|
+
typeName: zodDateInKind
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// src/zod/date-out-schema.ts
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
var zodDateOutKind = "ZodDateOut";
|
|
65
|
+
var _ZodDateOut = class extends _zod.ZodType {
|
|
66
|
+
_parse(input) {
|
|
67
|
+
const { status, ctx } = this._processInputParams(input);
|
|
68
|
+
if (ctx.parsedType !== _zod.ZodParsedType.date) {
|
|
69
|
+
_zod.addIssueToContext.call(void 0, ctx, {
|
|
70
|
+
code: _zod.ZodIssueCode.invalid_type,
|
|
71
|
+
expected: _zod.ZodParsedType.date,
|
|
72
|
+
received: ctx.parsedType
|
|
73
|
+
});
|
|
74
|
+
return _zod.INVALID;
|
|
75
|
+
}
|
|
76
|
+
if (Number.isNaN(ctx.data.getTime())) {
|
|
77
|
+
_zod.addIssueToContext.call(void 0, ctx, {
|
|
78
|
+
code: _zod.ZodIssueCode.invalid_date
|
|
79
|
+
});
|
|
80
|
+
return _zod.INVALID;
|
|
81
|
+
}
|
|
82
|
+
return { status: status.value, value: ctx.data.toISOString() };
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
var ZodDateOut = _ZodDateOut;
|
|
86
|
+
ZodDateOut.create = () => new _ZodDateOut({
|
|
87
|
+
typeName: zodDateOutKind
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// src/zod/index.ts
|
|
91
|
+
var dateIn = (...parameters) => _zodtots.withGetType.call(void 0, ZodDateIn.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));
|
|
92
|
+
var dateOut = (...parameters) => _zodtots.withGetType.call(void 0, ZodDateOut.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
exports.dateIn = dateIn; exports.dateOut = dateOut; exports.zod_exports = zod_exports;
|
|
99
|
+
//# sourceMappingURL=chunk-T25VSNTF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/zod/index.ts","../src/zod/date-in-schema.ts","../src/zod/date-out-schema.ts"],"names":["addIssueToContext","INVALID","ZodIssueCode","ZodParsedType","ZodType"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,mBAAmB;;;ACC5B;AAAA,EACI;AAAA,EAAmB;AAAA,EAAS;AAAA,EAAc;AAAA,EAAe;AAAA,OACtD;AAEP,IAAM,gBAAgB;AAOf,IAAM,eAAe;AAOrB,IAAM,aAAN,cAAwB,QAAoC;AAAA,EAE/D,OAAO,OAA0C;AAE7C,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AACtD,QAAI,IAAI,eAAe,cAAc,QAAQ;AACzC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,UAAU,cAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,IACX;AAEA,QAAI,CAAC,aAAa,KAAK,IAAI,IAAc,GAAG;AACxC,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,YAAY;AAAA,MAChB,CAAC;AACD,aAAO,MAAM;AAAA,IACjB;AAEA,UAAM,OAAO,IAAI,KAAK,IAAI,IAAI;AAE9B,QAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,GAAG;AAC9B,wBAAkB,KAAK;AAAA,QACnB,MAAM,aAAa;AAAA,MACvB,CAAC;AACD,aAAO;AAAA,IACX;AAEA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,KAAK;AAAA,EAC/C;AAKJ;AArCO,IAAM,YAAN;AAAM,UAkCF,SAAS,MAAM,IAAI,WAAU;AAAA,EAChC,UAAU;AACd,CAAC;;;ACtDL;AAAA,EACI,qBAAAA;AAAA,EAAmB,WAAAC;AAAA,EAAS,gBAAAC;AAAA,EAAc,iBAAAC;AAAA,EAAe,WAAAC;AAAA,OACtD;AAEP,IAAM,iBAAiB;AAOhB,IAAM,cAAN,cAAyBA,SAAqC;AAAA,EAEjE,OAAO,OAA4C;AAE/C,UAAM,EAAE,QAAQ,IAAI,IAAI,KAAK,oBAAoB,KAAK;AAEtD,QAAI,IAAI,eAAeD,eAAc,MAAM;AACvC,MAAAH,mBAAkB,KAAK;AAAA,QACnB,MAAME,cAAa;AAAA,QACnB,UAAUC,eAAc;AAAA,QACxB,UAAU,IAAI;AAAA,MAClB,CAAC;AACD,aAAOF;AAAA,IACX;AAEA,QAAI,OAAO,MAAM,IAAI,KAAK,QAAQ,CAAC,GAAG;AAClC,MAAAD,mBAAkB,KAAK;AAAA,QACnB,MAAME,cAAa;AAAA,MACvB,CAAC;AACD,aAAOD;AAAA,IACX;AAEA,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAQ,IAAI,KAAc,YAAY,EAAE;AAAA,EAC3E;AAKJ;AA5BO,IAAM,aAAN;AAAM,WAyBF,SAAS,MAAM,IAAI,YAAW;AAAA,EACjC,UAAU;AACd,CAAC;;;AFjCE,IAAM,SAAS,IAAI,eAAoD,YAAY,UAAU,OAAO,GAAG,UAAU,GAAG,CAAC,OAAO,GAAG,QAAQ,sBAAsB,GAAG,WAAW,aAAa,CAAC;AAEzL,IAAM,UAAU,IAAI,eAAqD,YAAY,WAAW,OAAO,GAAG,UAAU,GAAG,CAAC,OAAO,GAAG,QAAQ,sBAAsB,GAAG,WAAW,aAAa,CAAC","sourcesContent":["import { withGetType } from \"zod-to-ts\";\n\nimport { ZodDateIn } from \"./date-in-schema\";\nimport { ZodDateOut } from \"./date-out-schema\";\n\n// eslint-disable-next-line max-len\nexport const dateIn = (...parameters: Parameters<typeof ZodDateIn.create>) => withGetType(ZodDateIn.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));\n// eslint-disable-next-line max-len\nexport const dateOut = (...parameters: Parameters<typeof ZodDateOut.create>) => withGetType(ZodDateOut.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));\n","import type { ParseInput, ParseReturnType, ZodTypeDef } from \"zod\";\nimport {\n addIssueToContext, INVALID, ZodIssueCode, ZodParsedType, ZodType,\n} from \"zod\";\n\nconst zodDateInKind = \"ZodDateIn\";\n\n// simple regex for ISO date, supports the following formats:\n// 2021-01-01T00:00:00.000Z\n// 2021-01-01T00:00:00Z\n// 2021-01-01T00:00:00\n// 2021-01-01\nexport const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?)?Z?$/;\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport interface ZodDateInDef extends ZodTypeDef {\n typeName: typeof zodDateInKind;\n}\n\nexport class ZodDateIn extends ZodType<Date, ZodDateInDef, string> {\n // eslint-disable-next-line no-underscore-dangle\n _parse(input: ParseInput): ParseReturnType<Date> {\n // eslint-disable-next-line no-underscore-dangle\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.string) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n\n if (!isoDateRegex.test(ctx.data as string)) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"regex\",\n });\n status.dirty();\n }\n\n const date = new Date(ctx.data);\n\n if (Number.isNaN(date.getTime())) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n\n return { status: status.value, value: date };\n }\n\n static create = () => new ZodDateIn({\n typeName: zodDateInKind,\n });\n}\n","import type { ParseInput, ParseReturnType, ZodTypeDef } from \"zod\";\nimport {\n addIssueToContext, INVALID, ZodIssueCode, ZodParsedType, ZodType,\n} from \"zod\";\n\nconst zodDateOutKind = \"ZodDateOut\";\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport interface ZodDateOutDef extends ZodTypeDef {\n typeName: typeof zodDateOutKind;\n}\n\nexport class ZodDateOut extends ZodType<string, ZodDateOutDef, Date> {\n // eslint-disable-next-line no-underscore-dangle\n _parse(input: ParseInput): ParseReturnType<string> {\n // eslint-disable-next-line no-underscore-dangle\n const { status, ctx } = this._processInputParams(input);\n\n if (ctx.parsedType !== ZodParsedType.date) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n\n if (Number.isNaN(ctx.data.getTime())) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n\n return { status: status.value, value: (ctx.data as Date).toISOString() };\n }\n\n static create = () => new ZodDateOut({\n typeName: zodDateOutKind,\n });\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ZodType, ParseInput, ParseReturnType, ZodTypeDef } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const zodDateInKind = "ZodDateIn";
|
|
4
|
+
interface ZodDateInDef extends ZodTypeDef {
|
|
5
|
+
typeName: typeof zodDateInKind;
|
|
6
|
+
}
|
|
7
|
+
declare class ZodDateIn extends ZodType<Date, ZodDateInDef, string> {
|
|
8
|
+
_parse(input: ParseInput): ParseReturnType<Date>;
|
|
9
|
+
static create: () => ZodDateIn;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare const zodDateOutKind = "ZodDateOut";
|
|
13
|
+
interface ZodDateOutDef extends ZodTypeDef {
|
|
14
|
+
typeName: typeof zodDateOutKind;
|
|
15
|
+
}
|
|
16
|
+
declare class ZodDateOut extends ZodType<string, ZodDateOutDef, Date> {
|
|
17
|
+
_parse(input: ParseInput): ParseReturnType<string>;
|
|
18
|
+
static create: () => ZodDateOut;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare const dateIn: () => ZodDateIn;
|
|
22
|
+
declare const dateOut: () => ZodDateOut;
|
|
23
|
+
|
|
24
|
+
declare const index_dateIn: typeof dateIn;
|
|
25
|
+
declare const index_dateOut: typeof dateOut;
|
|
26
|
+
declare namespace index {
|
|
27
|
+
export {
|
|
28
|
+
index_dateIn as dateIn,
|
|
29
|
+
index_dateOut as dateOut,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { dateOut as a, dateIn as d, index as i };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export { d as dateIn, a as dateOut, i as zod } from './index-3318b0da.js';
|
|
2
|
+
export { BadGateway, BadRequest, BandwidthLimitExceeded, Conflict, ExpectationFailed, FailedDependency, Forbidden, GatewayTimeout, Gone, HTTPVersionNotSupported, ImATeapot, InsufficientStorage, InternalServerError, LengthRequired, Locked, LoopDetected, MethodNotAllowed, MisdirectedRequest, NetworkAuthenticationRequire, NotAcceptable, NotExtended, NotFound, NotImplemented, PayloadTooLarge, PaymentRequired, PreconditionFailed, PreconditionRequired, ProxyAuthenticationRequired, RangeNotSatisfiable, RequestHeaderFieldsTooLarge, RequestTimeout, ServiceUnavailable, TooManyRequests, URITooLong, Unauthorized, UnavailableForLegalReasons, UnorderedCollection, UnprocessableEntity, UnsupportedMediaType, UpgradeRequired, VariantAlsoNegotiates, default as createHttpError } from 'http-errors';
|
|
3
|
+
import * as zod from 'zod';
|
|
4
|
+
import { AnyZodObject, ZodObject } from 'zod';
|
|
5
|
+
import * as _visulima_connect from '@visulima/connect';
|
|
6
|
+
import { NextHandler, NodeRouter, Route, Nextable, FunctionLike, ValueOrPromise } from '@visulima/connect';
|
|
7
|
+
export { EdgeRequestHandler, EdgeRouter, ExpressRequestHandler, FindResult, FunctionLike, HandlerOptions, HttpMethod, NextHandler, Nextable, NodeRequestHandler, NodeRouter, Route, RouteShortcutMethod, Router, ValueOrPromise, createEdgeRouter, expressWrapper, sendJson, withZod } from '@visulima/connect';
|
|
8
|
+
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
9
|
+
import { NextApiResponse } from 'next';
|
|
10
|
+
import { RateLimiterAbstract, RateLimiterRes } from 'rate-limiter-flexible';
|
|
11
|
+
import { CorsOptions, CorsOptionsDelegate } from 'cors';
|
|
12
|
+
import { ModelsToOpenApiParameters, SwaggerModelsConfig } from '@visulima/crud';
|
|
13
|
+
|
|
14
|
+
type ErrorHandler = <Request extends IncomingMessage, Response extends ServerResponse>(
|
|
15
|
+
error: any,
|
|
16
|
+
request: Request,
|
|
17
|
+
response: Response,
|
|
18
|
+
) => any | Promise<any>;
|
|
19
|
+
|
|
20
|
+
type ErrorHandlers = {
|
|
21
|
+
regex: RegExp;
|
|
22
|
+
handler: ErrorHandler;
|
|
23
|
+
}[];
|
|
24
|
+
|
|
25
|
+
type Serializer = (data: any) => string | Buffer | Uint8Array;
|
|
26
|
+
|
|
27
|
+
declare const serializersMiddleware: (serializers?: Serializers, defaultContentType?: string) => <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(request: Request_1, response: NextApiResponse<any> | Response_1, next: NextHandler) => Promise<any>;
|
|
28
|
+
declare type Serializers = {
|
|
29
|
+
regex: RegExp;
|
|
30
|
+
serializer: Serializer;
|
|
31
|
+
}[];
|
|
32
|
+
|
|
33
|
+
declare const createNodeRouter: <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>, Schema extends AnyZodObject = ZodObject<{
|
|
34
|
+
body?: AnyZodObject | undefined;
|
|
35
|
+
headers?: AnyZodObject | undefined;
|
|
36
|
+
query?: AnyZodObject | undefined;
|
|
37
|
+
}, "strip", zod.ZodTypeAny, {
|
|
38
|
+
body?: unknown;
|
|
39
|
+
headers?: unknown;
|
|
40
|
+
query?: unknown;
|
|
41
|
+
}, {
|
|
42
|
+
body?: unknown;
|
|
43
|
+
headers?: unknown;
|
|
44
|
+
query?: unknown;
|
|
45
|
+
}>>(options?: {
|
|
46
|
+
middlewares?: {
|
|
47
|
+
"http-header-normalizer"?: {
|
|
48
|
+
canonical?: boolean | undefined;
|
|
49
|
+
normalizeHeaderKey?: ((key: string, canonical: boolean) => string) | undefined;
|
|
50
|
+
} | undefined;
|
|
51
|
+
serializers?: {
|
|
52
|
+
serializers?: Serializers | undefined;
|
|
53
|
+
defaultContentType?: string | undefined;
|
|
54
|
+
} | undefined;
|
|
55
|
+
} | undefined;
|
|
56
|
+
errorHandlers?: ErrorHandlers | undefined;
|
|
57
|
+
showTrace?: boolean | undefined;
|
|
58
|
+
}) => NodeRouter<Request_1, Response_1, Schema>;
|
|
59
|
+
|
|
60
|
+
declare const onError: <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(errorHandlers: ErrorHandlers, showTrace: boolean) => (error: unknown, request: Request_1, response: Response_1) => Promise<void>;
|
|
61
|
+
declare const onNoMatch: <Request extends IncomingMessage, Response extends ServerResponse>(request: Request, response: Response, routes: Route<Nextable<FunctionLike>>[]) => ValueOrPromise<void>;
|
|
62
|
+
|
|
63
|
+
declare type HeaderValue = string | number | ReadonlyArray<string>;
|
|
64
|
+
declare const rateLimiterMiddleware: (rateLimiter: RateLimiterAbstract, headers?: ((limiterResponse: RateLimiterRes) => {
|
|
65
|
+
[key: string]: HeaderValue;
|
|
66
|
+
}) | undefined) => <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(request: Request_1, response: NextApiResponse<any> | Response_1, next: NextHandler) => Promise<void>;
|
|
67
|
+
|
|
68
|
+
declare const corsMiddleware: <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(options?: CorsOptions | CorsOptionsDelegate) => _visulima_connect.Nextable<_visulima_connect.NodeRequestHandler<Request_1, Response_1>>;
|
|
69
|
+
|
|
70
|
+
declare const httpHeaderNormalizerMiddleware: (options_?: {
|
|
71
|
+
canonical?: boolean | undefined;
|
|
72
|
+
normalizeHeaderKey?: ((key: string, canonical: boolean) => string) | undefined;
|
|
73
|
+
} | undefined) => <Request_1 extends IncomingMessage>(request: Request_1, _: any, next: NextHandler) => Promise<any>;
|
|
74
|
+
|
|
75
|
+
declare const swaggerHandler: (options?: Partial<{
|
|
76
|
+
allowedMediaTypes: {
|
|
77
|
+
[key: string]: boolean;
|
|
78
|
+
};
|
|
79
|
+
swaggerFilePath: string;
|
|
80
|
+
crud: Exclude<ModelsToOpenApiParameters, "swagger"> & {
|
|
81
|
+
swagger?: {
|
|
82
|
+
models?: SwaggerModelsConfig<string>;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
}>) => <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(request: Request_1, response: Response_1) => Promise<void>;
|
|
86
|
+
|
|
87
|
+
export { corsMiddleware, createNodeRouter, httpHeaderNormalizerMiddleware, onError, onNoMatch, rateLimiterMiddleware, serializersMiddleware, swaggerHandler };
|