@visulima/api-platform 2.0.18 → 2.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/chunk-4H6B66HI.js +13 -0
  3. package/dist/chunk-4H6B66HI.js.map +1 -0
  4. package/dist/{chunk-G343CC5Z.js → chunk-7VCBFZEZ.js} +5 -5
  5. package/dist/chunk-7VCBFZEZ.js.map +1 -0
  6. package/dist/chunk-FKGPVTGA.mjs +9 -0
  7. package/dist/chunk-FKGPVTGA.mjs.map +1 -0
  8. package/dist/{chunk-FFCKRGJ3.mjs → chunk-FZUWQEM2.mjs} +7 -7
  9. package/dist/chunk-FZUWQEM2.mjs.map +1 -0
  10. package/dist/{chunk-K5YEO46P.mjs → chunk-GSCIKFAG.mjs} +3 -3
  11. package/dist/{chunk-K5YEO46P.mjs.map → chunk-GSCIKFAG.mjs.map} +1 -1
  12. package/dist/framework/cli/commander/index.js +3 -3
  13. package/dist/framework/cli/commander/index.js.map +1 -1
  14. package/dist/framework/cli/commander/index.mjs +4 -4
  15. package/dist/framework/cli/commander/index.mjs.map +1 -1
  16. package/dist/framework/cli/index.d.mts +2 -3
  17. package/dist/framework/cli/index.d.ts +2 -3
  18. package/dist/framework/cli/index.js +2 -2
  19. package/dist/framework/cli/index.mjs +1 -1
  20. package/dist/framework/next/index-server.mjs +3 -3
  21. package/dist/framework/next/index-server.mjs.map +1 -1
  22. package/dist/index-browser.js +2 -2
  23. package/dist/index-browser.mjs +1 -1
  24. package/dist/index-server.d.mts +7 -7
  25. package/dist/index-server.d.ts +7 -7
  26. package/dist/index-server.js +4 -4
  27. package/dist/index-server.js.map +1 -1
  28. package/dist/index-server.mjs +3 -3
  29. package/dist/index-server.mjs.map +1 -1
  30. package/package.json +22 -23
  31. package/dist/chunk-FFCKRGJ3.mjs.map +0 -1
  32. package/dist/chunk-G343CC5Z.js.map +0 -1
  33. package/dist/chunk-MP2YXEO2.mjs +0 -9
  34. package/dist/chunk-MP2YXEO2.mjs.map +0 -1
  35. package/dist/chunk-XW6G4X7P.js +0 -13
  36. package/dist/chunk-XW6G4X7P.js.map +0 -1
  37. package/next/package.json +0 -19
  38. package/next/pages/redoc/package.json +0 -19
  39. package/next/pages/swagger/package.json +0 -19
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/serializers/transformer/yaml.ts","../src/swagger/api/swagger-handler.ts","../src/swagger/extend-swagger-spec.ts","../src/utils.ts"],"names":["stringify","yamlTransformer","data","yaml_default","existsSync","readFileSync","path","modelsToOpenApi","debug","merge","toXML","toHeaderCase","string_","c","jsonMediaType","prepareStatusContent","methodSpec","status","mediaType","extendComponentSchemas","spec","schemaName","schema","extendResponseSchema","schemaIsArray","extendSwaggerWithMediaTypeSchema","responseSpec","allowedMediaTypes","pathKey","example","examples","mediaName","contentSpec","allowed","extendSwaggerWithMediaTypeExample","transformers","transformed","regex","transformer","extendComponentExamples","exampleName","prepareResponseExamples","transformedExamples","extendSwaggerWithMediaTypeExamples","examplesName","extendSwaggerSpec","value","pathSpec","swaggerCrudDebug","swaggerHandler","options","crud","specs","swaggerFilePath","request","response","swaggerPath","fileContents","crudSwagger","modelsOpenApi","error","swagger_handler_default"],"mappings":"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","sourcesContent":["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 { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\n\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport debug from \"debug\";\n// eslint-disable-next-line no-restricted-imports\nimport merge from \"lodash.merge\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\nimport yamlTransformer from \"../../serializers/transformer/yaml\";\nimport extendSwaggerSpec from \"../extend-swagger-spec\";\n\nconst swaggerCrudDebug = debug(\"visulima:api-platform:swagger:crud:get-static-properties-swagger\");\n\nconst swaggerHandler = <M extends string, PrismaClient>(\n options: Partial<SwaggerHandlerOptions<M, PrismaClient>> = {},\n): ((request: IncomingMessage, response: ServerResponse) => Promise<void>) => {\n const {\n allowedMediaTypes = {\n \"application/json\": true,\n },\n crud,\n specs,\n swaggerFilePath,\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}\".`);\n }\n\n const fileContents = readFileSync(swaggerPath, \"utf8\");\n\n let spec = extendSwaggerSpec(JSON.parse(fileContents) as OpenAPIV3.Document, allowedMediaTypes) as OpenAPIV3.Document;\n let crudSwagger: Partial<OpenAPIV3.Document> = {};\n\n if (crud !== undefined) {\n try {\n const modelsOpenApi = await modelsToOpenApi(crud);\n\n crudSwagger = {\n components: { examples: modelsOpenApi.examples, schemas: modelsOpenApi.schemas },\n paths: modelsOpenApi.paths,\n tags: modelsOpenApi.tags,\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\n throw new Error(\"Please install @visulima/crud to use the crud swagger generator.\");\n }\n }\n\n if (Array.isArray(specs)) {\n specs.forEach((value) => {\n spec = merge(spec, extendSwaggerSpec(value, allowedMediaTypes));\n });\n }\n\n let data: Buffer | Uint8Array | string;\n\n if (typeof request.headers.accept === \"string\" && /yaml|yml/.test(request.headers.accept)) {\n response.setHeader(\"Content-Type\", request.headers.accept);\n\n data = yamlTransformer(spec);\n } else {\n response.setHeader(\"Content-Type\", \"application/json\");\n\n data = JSON.stringify(spec, null, 2);\n }\n\n response.statusCode = 200;\n response.end(data);\n };\n};\n\nexport interface SwaggerHandlerOptions<M extends string, PrismaClient> {\n allowedMediaTypes: Record<string, boolean>;\n crud: Exclude<ModelsToOpenApiParameters<M, PrismaClient>, \"swagger\"> & {\n swagger?: {\n models?: SwaggerModelsConfig<M>;\n };\n };\n specs?: Partial<OpenAPIV3.Document>[];\n swaggerFilePath: string;\n}\n\nexport default swaggerHandler;\n","import type { XmlElement } from \"jstoxml\";\nimport { toXML } from \"jstoxml\";\nimport type { OpenAPIV3 } from \"openapi-types\";\nimport { stringify } from \"yaml\";\n\nimport { toHeaderCase } from \"../utils\";\n\ntype Transformers = { regex: RegExp; transformer: (data: any) => string }[];\n\nconst jsonMediaType = \"application/json\";\n\nconst prepareStatusContent = (methodSpec: OpenAPIV3.OperationObject, status: string, mediaType: string) => {\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content === undefined) {\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content = {};\n }\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType] === undefined) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] = {} as OpenAPIV3.MediaTypeObject;\n }\n};\n\nconst extendComponentSchemas = (spec: Partial<OpenAPIV3.Document>, 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 (spec.components.schemas[schemaName] === undefined) {\n // eslint-disable-next-line no-param-reassign\n spec.components.schemas[schemaName] = schema;\n }\n};\n\nconst extendResponseSchema = (methodSpec: OpenAPIV3.OperationObject, status: string, mediaType: string, schemaName: string, schemaIsArray: boolean) => {\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.schema === undefined) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).schema =\n {} as OpenAPIV3.SchemaObject;\n }\n\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).schema =\n schemaIsArray\n ? {\n items: {\n $ref: `#/components/schemas/${schemaName}`,\n },\n type: \"array\",\n }\n : {\n $ref: `#/components/schemas/${schemaName}`,\n };\n};\n\nconst extendSwaggerWithMediaTypeSchema = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: Record<string, boolean> | undefined,\n pathKey: string,\n spec: Partial<OpenAPIV3.Document>,\n status: string,\n): {\n example?: any;\n examples?: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>;\n} => {\n let example: any | undefined;\n let examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject> | undefined;\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n Object.entries(responseSpec.content as object).forEach(([mediaName, contentSpec]) => {\n if (typeof contentSpec.schema === \"object\") {\n const { schema } = contentSpec;\n\n if (mediaName === jsonMediaType && contentSpec.examples !== undefined) {\n examples = contentSpec.examples;\n } else if (mediaName === jsonMediaType && contentSpec.example !== undefined) {\n example = contentSpec.example;\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 let schemaName: string;\n\n if (schema?.$ref === undefined) {\n schemaName = `${toHeaderCase(pathKey.trim().replace(\"/\", \"\"))}${mediaType === \"application/ld+json\" ? \".jsonld\" : \"\"}`;\n\n extendComponentSchemas(spec as OpenAPIV3.Document, schemaName, schema as OpenAPIV3.SchemaObject);\n } else {\n schemaName = (schema as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/schemas/\", \"\");\n }\n\n extendResponseSchema(methodSpec, status, mediaType, schemaName, schemaIsArray);\n });\n }\n });\n\n return { example, examples };\n};\n\nconst extendSwaggerWithMediaTypeExample = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n status: string,\n allowedMediaTypes: Record<string, boolean> | undefined,\n transformers: Transformers,\n example: any,\n) => {\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === jsonMediaType) {\n return;\n }\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.example === undefined\n ) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n {};\n }\n\n let transformed = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n transformer(example);\n\n transformed = true;\n }\n });\n\n if (!transformed) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n example;\n }\n });\n });\n};\n\nconst extendComponentExamples = (\n spec: Partial<OpenAPIV3.Document>,\n exampleName: string,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\n) => {\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 (spec.components.examples[exampleName] === undefined && examples[exampleName] !== undefined) {\n // eslint-disable-next-line no-param-reassign\n spec.components.examples[exampleName] = examples[exampleName] as OpenAPIV3.ExampleObject;\n }\n};\n\nconst prepareResponseExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n mediaType: string,\n transformers: Transformers,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\n // eslint-disable-next-line sonarjs/cognitive-complexity\n) => {\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.examples === undefined) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).examples =\n {};\n }\n\n const transformedExamples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject> = {};\n\n Object.entries(examples).forEach(([exampleName, example]) => {\n let transformed = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n let data: any = \"\";\n\n if (spec.components?.examples?.[exampleName]) {\n data = (spec.components.examples[exampleName] as OpenAPIV3.ExampleObject).value;\n } else if ((example as OpenAPIV3.ReferenceObject).$ref) {\n data = (\n spec.components?.examples?.[\n (example as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/examples/\", \"\")\n ] as OpenAPIV3.ExampleObject\n ).value;\n } else if (typeof (example as OpenAPIV3.ExampleObject).value === \"string\") {\n data = (example as OpenAPIV3.ExampleObject).value;\n }\n\n transformedExamples[exampleName] = {\n value: transformer(data),\n };\n\n transformed = true;\n }\n });\n\n if (!transformed) {\n transformedExamples[exampleName] =\n spec.components?.examples?.[exampleName] === undefined\n ? example\n : {\n $ref: `#/components/examples/${exampleName}`,\n };\n }\n });\n\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).examples =\n transformedExamples;\n};\n\nconst extendSwaggerWithMediaTypeExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: Record<string, boolean> | undefined,\n pathKey: string,\n transformers: Transformers,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\n) => {\n const examplesName = `${toHeaderCase(pathKey.trim().replace(\"/\", \"\"))}`;\n\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === jsonMediaType) {\n return;\n }\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n extendComponentExamples(spec, examplesName, examples);\n\n prepareResponseExamples(spec, methodSpec, status, mediaType, transformers, examples);\n });\n });\n};\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport default function extendSwaggerSpec(\n spec: Partial<OpenAPIV3.Document>,\n allowedMediaTypes?: Record<string, boolean>,\n transformers: Transformers = [\n {\n regex: /xml/u,\n transformer: (value: XmlElement | XmlElement[] | undefined) =>\n toXML(value, {\n header: true,\n indent: \" \",\n }),\n },\n {\n regex: /yaml|yml/,\n transformer: (value) => stringify(value, { indent: 2 }),\n },\n ],\n): Partial<OpenAPIV3.Document> {\n if (typeof spec === \"object\" && typeof spec.paths === \"object\") {\n Object.entries(spec.paths).forEach(([pathKey, pathSpec]) => {\n Object.values(pathSpec as OpenAPIV3.OperationObject & OpenAPIV3.PathsObject).forEach((methodSpec) => {\n if (typeof (methodSpec as OpenAPIV3.OperationObject).responses === \"object\") {\n Object.entries((methodSpec as OpenAPIV3.OperationObject).responses).forEach(([status, responseSpec]) => {\n if (typeof (responseSpec as OpenAPIV3.ResponseObject).content === \"object\") {\n const { example, examples } = extendSwaggerWithMediaTypeSchema(\n methodSpec as OpenAPIV3.OperationObject,\n responseSpec as OpenAPIV3.ResponseObject,\n allowedMediaTypes,\n pathKey,\n spec,\n status,\n );\n\n if (example !== undefined) {\n extendSwaggerWithMediaTypeExample(\n methodSpec as OpenAPIV3.OperationObject,\n responseSpec as OpenAPIV3.ResponseObject,\n status,\n allowedMediaTypes,\n transformers,\n example,\n );\n } else if (examples !== undefined) {\n extendSwaggerWithMediaTypeExamples(\n spec,\n methodSpec as OpenAPIV3.OperationObject,\n status,\n responseSpec as OpenAPIV3.ResponseObject,\n allowedMediaTypes,\n pathKey,\n transformers,\n examples,\n );\n }\n }\n });\n }\n });\n });\n }\n\n return spec;\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { URL } from \"node:url\";\n\ntype IncomingApiRequest<TApiRequest = IncomingMessage> = TApiRequest & {\n body?: any;\n query?: any;\n};\n\nexport const jsonResponse = (response: ServerResponse, status: number, data?: unknown): void => {\n response.statusCode = status;\n response.setHeader(\"Content-Type\", \"application/json\");\n response.end(data ? JSON.stringify(data) : \"\");\n};\n\nexport const parseBody = async (request: IncomingApiRequest): Promise<any> => {\n if (request.body) {\n return request.body;\n }\n\n const buffers = [];\n\n // eslint-disable-next-line no-restricted-syntax,no-loops/no-loops\n for await (const chunk of request) {\n buffers.push(chunk);\n }\n\n const data = Buffer.concat(buffers).toString();\n\n return data ? JSON.parse(data) : null;\n};\n\nexport const parseQuery = (request: IncomingApiRequest): Record<string, unknown> => {\n if (request.query) {\n return request.query;\n }\n\n if (!request.url) {\n return {};\n }\n\n // Note: Fake protocol is required to parse query string\n const url = new URL(`https://${request.headers.host?.replace(/\\/$/u, \"\")}/${request.url}`);\n\n return Object.fromEntries(url.searchParams.entries());\n};\n\nexport const toHeaderCase = (string_: string): string =>\n string_\n .toLowerCase()\n .replaceAll(/[^\\s\\w]/gu, \" \") // Remove all non-word characters\n .trimEnd() // Remove trailing spaces\n .replaceAll(/\\s+|_/gu, \"-\") // Replace multiple spaces or underline with a single hyphen\n .replaceAll(/\\b\\w/gu, (c) => c.toUpperCase());\n"]}
1
+ {"version":3,"sources":["../src/serializers/transformer/yaml.ts","../src/swagger/api/swagger-handler.ts","../src/swagger/extend-swagger-spec.ts","../src/utils.ts"],"names":["stringify","yamlTransformer","data","yaml_default","existsSync","readFileSync","path","modelsToOpenApi","debug","merge","toXML","toHeaderCase","string_","c","jsonMediaType","prepareStatusContent","methodSpec","status","mediaType","extendComponentSchemas","spec","schemaName","schema","extendResponseSchema","schemaIsArray","extendSwaggerWithMediaTypeSchema","responseSpec","allowedMediaTypes","pathKey","example","examples","mediaName","contentSpec","allowed","extendSwaggerWithMediaTypeExample","transformers","transformed","regex","transformer","extendComponentExamples","exampleName","prepareResponseExamples","transformedExamples","extendSwaggerWithMediaTypeExamples","examplesName","extendSwaggerSpec","value","pathSpec","swaggerCrudDebug","swaggerHandler","options","crud","specs","swaggerFilePath","request","response","swaggerPath","fileContents","crudSwagger","modelsOpenApi","error","swagger_handler_default"],"mappings":"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","sourcesContent":["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 { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport path from \"node:path\";\n\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport debug from \"debug\";\n// eslint-disable-next-line no-restricted-imports\nimport merge from \"lodash.merge\";\nimport type { OpenAPIV3 } from \"openapi-types\";\n\nimport yamlTransformer from \"../../serializers/transformer/yaml\";\nimport extendSwaggerSpec from \"../extend-swagger-spec\";\n\nconst swaggerCrudDebug = debug(\"visulima:api-platform:swagger:crud:get-static-properties-swagger\");\n\nconst swaggerHandler = <M extends string, PrismaClient>(\n options: Partial<SwaggerHandlerOptions<M, PrismaClient>> = {},\n): ((request: IncomingMessage, response: ServerResponse) => Promise<void>) => {\n const {\n allowedMediaTypes = {\n \"application/json\": true,\n },\n crud,\n specs,\n swaggerFilePath,\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}\".`);\n }\n\n const fileContents = readFileSync(swaggerPath, \"utf8\");\n\n let spec = extendSwaggerSpec(JSON.parse(fileContents) as OpenAPIV3.Document, allowedMediaTypes) as OpenAPIV3.Document;\n let crudSwagger: Partial<OpenAPIV3.Document> = {};\n\n if (crud !== undefined) {\n try {\n const modelsOpenApi = await modelsToOpenApi(crud);\n\n crudSwagger = {\n components: { examples: modelsOpenApi.examples, schemas: modelsOpenApi.schemas },\n paths: modelsOpenApi.paths,\n tags: modelsOpenApi.tags,\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\n throw new Error(\"Please install @visulima/crud to use the crud swagger generator.\");\n }\n }\n\n if (Array.isArray(specs)) {\n specs.forEach((value) => {\n spec = merge(spec, extendSwaggerSpec(value, allowedMediaTypes));\n });\n }\n\n let data: Buffer | Uint8Array | string;\n\n if (typeof request.headers.accept === \"string\" && /yaml|yml/.test(request.headers.accept)) {\n response.setHeader(\"Content-Type\", request.headers.accept);\n\n data = yamlTransformer(spec);\n } else {\n response.setHeader(\"Content-Type\", \"application/json\");\n\n data = JSON.stringify(spec, null, 2);\n }\n\n response.statusCode = 200;\n response.end(data);\n };\n};\n\nexport interface SwaggerHandlerOptions<M extends string, PrismaClient> {\n allowedMediaTypes: Record<string, boolean>;\n crud: Exclude<ModelsToOpenApiParameters<M, PrismaClient>, \"swagger\"> & {\n swagger?: {\n models?: SwaggerModelsConfig<M>;\n };\n };\n specs?: Partial<OpenAPIV3.Document>[];\n swaggerFilePath: string;\n}\n\nexport default swaggerHandler;\n","import type { XmlElement } from \"jstoxml\";\nimport { toXML } from \"jstoxml\";\nimport type { OpenAPIV3 } from \"openapi-types\";\nimport { stringify } from \"yaml\";\n\nimport { toHeaderCase } from \"../utils\";\n\ntype Transformers = { regex: RegExp; transformer: (data: any) => string }[];\n\nconst jsonMediaType = \"application/json\";\n\nconst prepareStatusContent = (methodSpec: OpenAPIV3.OperationObject, status: string, mediaType: string) => {\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content === undefined) {\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content = {};\n }\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType] === undefined) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] = {} as OpenAPIV3.MediaTypeObject;\n }\n};\n\nconst extendComponentSchemas = (spec: Partial<OpenAPIV3.Document>, 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 (spec.components.schemas[schemaName] === undefined) {\n // eslint-disable-next-line no-param-reassign\n spec.components.schemas[schemaName] = schema;\n }\n};\n\nconst extendResponseSchema = (methodSpec: OpenAPIV3.OperationObject, status: string, mediaType: string, schemaName: string, schemaIsArray: boolean) => {\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.schema === undefined) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).schema =\n {} as OpenAPIV3.SchemaObject;\n }\n\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).schema =\n schemaIsArray\n ? {\n items: {\n $ref: `#/components/schemas/${schemaName}`,\n },\n type: \"array\",\n }\n : {\n $ref: `#/components/schemas/${schemaName}`,\n };\n};\n\nconst extendSwaggerWithMediaTypeSchema = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: Record<string, boolean> | undefined,\n pathKey: string,\n spec: Partial<OpenAPIV3.Document>,\n status: string,\n): {\n example?: any;\n examples?: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>;\n} => {\n let example: any | undefined;\n let examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject> | undefined;\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n Object.entries(responseSpec.content as object).forEach(([mediaName, contentSpec]) => {\n if (typeof contentSpec.schema === \"object\") {\n const { schema } = contentSpec;\n\n if (mediaName === jsonMediaType && contentSpec.examples !== undefined) {\n examples = contentSpec.examples;\n } else if (mediaName === jsonMediaType && contentSpec.example !== undefined) {\n example = contentSpec.example;\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 let schemaName: string;\n\n if (schema?.$ref === undefined) {\n schemaName = `${toHeaderCase(pathKey.trim().replace(\"/\", \"\"))}${mediaType === \"application/ld+json\" ? \".jsonld\" : \"\"}`;\n\n extendComponentSchemas(spec as OpenAPIV3.Document, schemaName, schema as OpenAPIV3.SchemaObject);\n } else {\n schemaName = (schema as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/schemas/\", \"\");\n }\n\n extendResponseSchema(methodSpec, status, mediaType, schemaName, schemaIsArray);\n });\n }\n });\n\n return { example, examples };\n};\n\nconst extendSwaggerWithMediaTypeExample = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n status: string,\n allowedMediaTypes: Record<string, boolean> | undefined,\n transformers: Transformers,\n example: any,\n) => {\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === jsonMediaType) {\n return;\n }\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.example === undefined\n ) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n {};\n }\n\n let transformed = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n transformer(example);\n\n transformed = true;\n }\n });\n\n if (!transformed) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).example =\n example;\n }\n });\n });\n};\n\nconst extendComponentExamples = (\n spec: Partial<OpenAPIV3.Document>,\n exampleName: string,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\n) => {\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 (spec.components.examples[exampleName] === undefined && examples[exampleName] !== undefined) {\n // eslint-disable-next-line no-param-reassign\n spec.components.examples[exampleName] = examples[exampleName] as OpenAPIV3.ExampleObject;\n }\n};\n\nconst prepareResponseExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n mediaType: string,\n transformers: Transformers,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\n // eslint-disable-next-line sonarjs/cognitive-complexity\n) => {\n prepareStatusContent(methodSpec, status, mediaType);\n\n if (((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content?.[mediaType]?.examples === undefined) {\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).examples =\n {};\n }\n\n const transformedExamples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject> = {};\n\n Object.entries(examples).forEach(([exampleName, example]) => {\n let transformed = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n let data: any = \"\";\n\n if (spec.components?.examples?.[exampleName]) {\n data = (spec.components.examples[exampleName] as OpenAPIV3.ExampleObject).value;\n } else if ((example as OpenAPIV3.ReferenceObject).$ref) {\n data = (\n spec.components?.examples?.[\n (example as OpenAPIV3.ReferenceObject).$ref.replace(\"#/components/examples/\", \"\")\n ] as OpenAPIV3.ExampleObject\n ).value;\n } else if (typeof (example as OpenAPIV3.ExampleObject).value === \"string\") {\n data = (example as OpenAPIV3.ExampleObject).value;\n }\n\n transformedExamples[exampleName] = {\n value: transformer(data),\n };\n\n transformed = true;\n }\n });\n\n if (!transformed) {\n transformedExamples[exampleName] =\n spec.components?.examples?.[exampleName] === undefined\n ? example\n : {\n $ref: `#/components/examples/${exampleName}`,\n };\n }\n });\n\n // prettier-ignore\n // eslint-disable-next-line no-param-reassign\n ((((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as Record<\n string,\n OpenAPIV3.MediaTypeObject\n >)[\n mediaType\n ] as OpenAPIV3.MediaTypeObject).examples =\n transformedExamples;\n};\n\nconst extendSwaggerWithMediaTypeExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: Record<string, boolean> | undefined,\n pathKey: string,\n transformers: Transformers,\n examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>,\n) => {\n const examplesName = `${toHeaderCase(pathKey.trim().replace(\"/\", \"\"))}`;\n\n Object.keys(responseSpec.content as object).forEach((mediaName) => {\n if (mediaName === jsonMediaType) {\n return;\n }\n\n Object.entries(allowedMediaTypes ?? {}).forEach(([mediaType, allowed]) => {\n if (!allowed) {\n return;\n }\n\n extendComponentExamples(spec, examplesName, examples);\n\n prepareResponseExamples(spec, methodSpec, status, mediaType, transformers, examples);\n });\n });\n};\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport default function extendSwaggerSpec(\n spec: Partial<OpenAPIV3.Document>,\n allowedMediaTypes?: Record<string, boolean>,\n transformers: Transformers = [\n {\n regex: /xml/u,\n transformer: (value: XmlElement | XmlElement[] | undefined) =>\n toXML(value, {\n header: true,\n indent: \" \",\n }),\n },\n {\n regex: /yaml|yml/,\n transformer: (value) => stringify(value, { indent: 2 }),\n },\n ],\n): Partial<OpenAPIV3.Document> {\n if (typeof spec === \"object\" && typeof spec.paths === \"object\") {\n Object.entries(spec.paths).forEach(([pathKey, pathSpec]) => {\n Object.values(pathSpec as OpenAPIV3.OperationObject & OpenAPIV3.PathsObject).forEach((methodSpec) => {\n if (typeof (methodSpec as OpenAPIV3.OperationObject).responses === \"object\") {\n Object.entries((methodSpec as OpenAPIV3.OperationObject).responses).forEach(([status, responseSpec]) => {\n if (typeof (responseSpec as OpenAPIV3.ResponseObject).content === \"object\") {\n const { example, examples } = extendSwaggerWithMediaTypeSchema(\n methodSpec as OpenAPIV3.OperationObject,\n responseSpec as OpenAPIV3.ResponseObject,\n allowedMediaTypes,\n pathKey,\n spec,\n status,\n );\n\n if (example !== undefined) {\n extendSwaggerWithMediaTypeExample(\n methodSpec as OpenAPIV3.OperationObject,\n responseSpec as OpenAPIV3.ResponseObject,\n status,\n allowedMediaTypes,\n transformers,\n example,\n );\n } else if (examples !== undefined) {\n extendSwaggerWithMediaTypeExamples(\n spec,\n methodSpec as OpenAPIV3.OperationObject,\n status,\n responseSpec as OpenAPIV3.ResponseObject,\n allowedMediaTypes,\n pathKey,\n transformers,\n examples,\n );\n }\n }\n });\n }\n });\n });\n }\n\n return spec;\n}\n","import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { URL } from \"node:url\";\n\ntype IncomingApiRequest<TApiRequest = IncomingMessage> = TApiRequest & {\n body?: any;\n query?: any;\n};\n\nexport const jsonResponse = (response: ServerResponse, status: number, data?: unknown): void => {\n response.statusCode = status;\n response.setHeader(\"Content-Type\", \"application/json\");\n response.end(data ? JSON.stringify(data) : \"\");\n};\n\nexport const parseBody = async (request: IncomingApiRequest): Promise<any> => {\n if (request.body) {\n return request.body;\n }\n\n const buffers = [];\n\n // eslint-disable-next-line no-restricted-syntax,no-loops/no-loops\n for await (const chunk of request) {\n buffers.push(chunk);\n }\n\n const data = Buffer.concat(buffers).toString();\n\n return data ? JSON.parse(data) : null;\n};\n\nexport const parseQuery = (request: IncomingApiRequest): Record<string, unknown> => {\n if (request.query) {\n return request.query;\n }\n\n if (!request.url) {\n return {};\n }\n\n // Note: Fake protocol is required to parse query string\n const url = new URL(`https://${request.headers.host?.replace(/\\/$/u, \"\")}/${request.url}`);\n\n return Object.fromEntries(url.searchParams.entries());\n};\n\nexport const toHeaderCase = (string_: string): string =>\n string_\n .toLowerCase()\n .replaceAll(/[^\\s\\w]/gu, \" \") // Remove all non-word characters\n .trimEnd() // Remove trailing spaces\n .replaceAll(/\\s+|_/gu, \"-\") // Replace multiple spaces or underline with a single hyphen\n .replaceAll(/\\b\\w/gu, (c) => c.toUpperCase());\n"]}
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkG343CC5Z_js = require('../../../chunk-G343CC5Z.js');
3
+ var chunk7VCBFZEZ_js = require('../../../chunk-7VCBFZEZ.js');
4
4
  require('../../../chunk-3XT5P2HO.js');
5
5
  var process = require('process');
6
6
 
7
- var p=(o,t="list",r="List all available API routes; Supported frameworks are next, express, koa, hapi and fastify")=>{o.command(t).description(r).option("--framework <framework>","Framework to use, choose from next, express, koa, hapi and fastify").option("-p, --path [path]","...").option("--group [type]","Groups routes. Supported: path, tag").option("--include-path [path]","Includes only routes which contain a given path element. (comma-separated values)",[]).option("--exclude-path [path]","Excludes routes which contain a given path element. (comma-separated values)",[]).option("-v, --verbose","Verbose output.",!1).action(async e=>{try{await chunkG343CC5Z_js.a(e.framework,e.path,{excludePaths:e.excludePaths,group:e.group,includePaths:e.includePath,verbose:e.verbose});}catch(n){console.log(),console.error(n),process.exit(1);}});},d=p;
7
+ var i=(o,t="list",r="List all available API routes; Supported frameworks are next, express, koa, hapi and fastify")=>{o.command(t).description(r).option("--framework <framework>","Framework to use, choose from next, express, koa, hapi and fastify").option("-p, --path [path]","...").option("--group [type]","Groups routes. Supported: path, tag").option("--include-path [path]","Includes only routes which contain a given path element. (comma-separated values)",[]).option("--exclude-path [path]","Excludes routes which contain a given path element. (comma-separated values)",[]).option("-v, --verbose","Verbose output.",!1).action(async e=>{try{await chunk7VCBFZEZ_js.a(e.framework,e.path,{excludePaths:e.excludePaths??[],group:e.group,includePaths:e.includePath??[],verbose:e.verbose});}catch(s){console.log(),console.error(s),process.exit(1);}});},m=i;
8
8
 
9
- exports.listCommand = d;
9
+ exports.listCommand = m;
10
10
  //# sourceMappingURL=out.js.map
11
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/framework/cli/commander/command/list-command.ts"],"names":["exit","listCommand","program","commandName","description","options","list_command_default","error"],"mappings":"6EAAA,OAAS,QAAAA,MAAY,UAMrB,IAAMC,EAAc,CAChBC,EACAC,EAAc,OACdC,EAAc,iGACP,CACPF,EACK,QAAQC,CAAW,EACnB,YAAYC,CAAW,EACvB,OAAO,0BAA2B,oEAAoE,EACtG,OAAO,oBAAqB,KAAK,EACjC,OAAO,iBAAkB,qCAAqC,EAC9D,OAAO,wBAAyB,oFAAqF,CAAC,CAAC,EACvH,OAAO,wBAAyB,+EAAgF,CAAC,CAAC,EAClH,OAAO,gBAAiB,kBAAmB,EAAK,EAChD,OAAO,MAAOC,GAAY,CACvB,GAAI,CACA,MAAMC,EAAQD,EAAQ,UAA8DA,EAAQ,KAAgB,CACxG,aAAcA,EAAQ,aACtB,MAAOA,EAAQ,MACf,aAAcA,EAAQ,YACtB,QAASA,EAAQ,OACrB,CAAC,CACL,OAASE,EAAY,CAEjB,QAAQ,IAAI,EAEZ,QAAQ,MAAMA,CAAK,EACnBP,EAAK,CAAC,CACV,CACJ,CAAC,CACT,EAEOM,EAAQL","sourcesContent":["import { exit } from \"node:process\";\n\nimport type { Command } from \"commander\";\n\nimport command from \"../../command/list/list-command\";\n\nconst listCommand = (\n program: Command,\n commandName = \"list\",\n description = \"List all available API routes; Supported frameworks are next, express, koa, hapi and fastify\",\n): void => {\n program\n .command(commandName)\n .description(description)\n .option(\"--framework <framework>\", \"Framework to use, choose from next, express, koa, hapi and fastify\")\n .option(\"-p, --path [path]\", \"...\")\n .option(\"--group [type]\", \"Groups routes. Supported: path, tag\")\n .option(\"--include-path [path]\", \"Includes only routes which contain a given path element. (comma-separated values)\", [])\n .option(\"--exclude-path [path]\", \"Excludes routes which contain a given path element. (comma-separated values)\", [])\n .option(\"-v, --verbose\", \"Verbose output.\", false)\n .action(async (options) => {\n try {\n await command(options.framework as \"express\" | \"fastify\" | \"hapi\" | \"koa\" | \"next\", options.path as string, {\n excludePaths: options.excludePaths as string[] | undefined,\n group: options.group as string | undefined,\n includePaths: options.includePath as string[] | undefined,\n verbose: options.verbose as boolean | undefined,\n });\n } catch (error: any) {\n // eslint-disable-next-line no-console\n console.log();\n // eslint-disable-next-line no-console\n console.error(error);\n exit(1);\n }\n });\n};\n\nexport default listCommand;\n"]}
1
+ {"version":3,"sources":["../../../../src/framework/cli/commander/command/list-command.ts"],"names":["exit","listCommand","program","commandName","description","options","list_command_default","error"],"mappings":"6EAAA,OAAS,QAAAA,MAAY,UAMrB,IAAMC,EAAc,CAChBC,EACAC,EAAc,OACdC,EAAc,iGACP,CACPF,EACK,QAAQC,CAAW,EACnB,YAAYC,CAAW,EACvB,OAAO,0BAA2B,oEAAoE,EACtG,OAAO,oBAAqB,KAAK,EACjC,OAAO,iBAAkB,qCAAqC,EAC9D,OAAO,wBAAyB,oFAAqF,CAAC,CAAC,EACvH,OAAO,wBAAyB,+EAAgF,CAAC,CAAC,EAClH,OAAO,gBAAiB,kBAAmB,EAAK,EAChD,OACG,MAAOC,GAOD,CACF,GAAI,CACA,MAAMC,EAAQD,EAAQ,UAAWA,EAAQ,KAAM,CAC3C,aAAcA,EAAQ,cAAgB,CAAC,EACvC,MAAOA,EAAQ,MACf,aAAcA,EAAQ,aAAe,CAAC,EACtC,QAASA,EAAQ,OACrB,CAAC,CACL,OAASE,EAAY,CAEjB,QAAQ,IAAI,EAEZ,QAAQ,MAAMA,CAAK,EACnBP,EAAK,CAAC,CACV,CACJ,CACJ,CACR,EAEOM,EAAQL","sourcesContent":["import { exit } from \"node:process\";\n\nimport type { Command } from \"commander\";\n\nimport command from \"../../command/list/list-command\";\n\nconst listCommand = (\n program: Command,\n commandName = \"list\",\n description = \"List all available API routes; Supported frameworks are next, express, koa, hapi and fastify\",\n): void => {\n program\n .command(commandName)\n .description(description)\n .option(\"--framework <framework>\", \"Framework to use, choose from next, express, koa, hapi and fastify\")\n .option(\"-p, --path [path]\", \"...\")\n .option(\"--group [type]\", \"Groups routes. Supported: path, tag\")\n .option(\"--include-path [path]\", \"Includes only routes which contain a given path element. (comma-separated values)\", [])\n .option(\"--exclude-path [path]\", \"Excludes routes which contain a given path element. (comma-separated values)\", [])\n .option(\"-v, --verbose\", \"Verbose output.\", false)\n .action(\n async (options: {\n excludePaths?: string[];\n framework: \"express\" | \"fastify\" | \"hapi\" | \"koa\" | \"next\";\n group?: string;\n includePath?: string[];\n path: string;\n verbose?: boolean;\n }) => {\n try {\n await command(options.framework, options.path, {\n excludePaths: options.excludePaths ?? [],\n group: options.group,\n includePaths: options.includePath ?? [],\n verbose: options.verbose as boolean | undefined,\n });\n } catch (error: any) {\n // eslint-disable-next-line no-console\n console.log();\n // eslint-disable-next-line no-console\n console.error(error);\n exit(1);\n }\n },\n );\n};\n\nexport default listCommand;\n"]}
@@ -1,9 +1,9 @@
1
- import { a } from '../../../chunk-FFCKRGJ3.mjs';
1
+ import { a } from '../../../chunk-FZUWQEM2.mjs';
2
2
  import '../../../chunk-HTAA47WA.mjs';
3
- import { exit } from 'process';
3
+ import { exit } from 'node:process';
4
4
 
5
- var d=(o,t="list",r="List all available API routes; Supported frameworks are next, express, koa, hapi and fastify")=>{o.command(t).description(r).option("--framework <framework>","Framework to use, choose from next, express, koa, hapi and fastify").option("-p, --path [path]","...").option("--group [type]","Groups routes. Supported: path, tag").option("--include-path [path]","Includes only routes which contain a given path element. (comma-separated values)",[]).option("--exclude-path [path]","Excludes routes which contain a given path element. (comma-separated values)",[]).option("-v, --verbose","Verbose output.",!1).action(async e=>{try{await a(e.framework,e.path,{excludePaths:e.excludePaths,group:e.group,includePaths:e.includePath,verbose:e.verbose});}catch(n){console.log(),console.error(n),exit(1);}});},m=d;
5
+ var m=(o,t="list",r="List all available API routes; Supported frameworks are next, express, koa, hapi and fastify")=>{o.command(t).description(r).option("--framework <framework>","Framework to use, choose from next, express, koa, hapi and fastify").option("-p, --path [path]","...").option("--group [type]","Groups routes. Supported: path, tag").option("--include-path [path]","Includes only routes which contain a given path element. (comma-separated values)",[]).option("--exclude-path [path]","Excludes routes which contain a given path element. (comma-separated values)",[]).option("-v, --verbose","Verbose output.",!1).action(async e=>{try{await a(e.framework,e.path,{excludePaths:e.excludePaths??[],group:e.group,includePaths:e.includePath??[],verbose:e.verbose});}catch(s){console.log(),console.error(s),exit(1);}});},l=m;
6
6
 
7
- export { m as listCommand };
7
+ export { l as listCommand };
8
8
  //# sourceMappingURL=out.js.map
9
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/framework/cli/commander/command/list-command.ts"],"names":["exit","listCommand","program","commandName","description","options","list_command_default","error"],"mappings":"+EAAA,OAAS,QAAAA,MAAY,UAMrB,IAAMC,EAAc,CAChBC,EACAC,EAAc,OACdC,EAAc,iGACP,CACPF,EACK,QAAQC,CAAW,EACnB,YAAYC,CAAW,EACvB,OAAO,0BAA2B,oEAAoE,EACtG,OAAO,oBAAqB,KAAK,EACjC,OAAO,iBAAkB,qCAAqC,EAC9D,OAAO,wBAAyB,oFAAqF,CAAC,CAAC,EACvH,OAAO,wBAAyB,+EAAgF,CAAC,CAAC,EAClH,OAAO,gBAAiB,kBAAmB,EAAK,EAChD,OAAO,MAAOC,GAAY,CACvB,GAAI,CACA,MAAMC,EAAQD,EAAQ,UAA8DA,EAAQ,KAAgB,CACxG,aAAcA,EAAQ,aACtB,MAAOA,EAAQ,MACf,aAAcA,EAAQ,YACtB,QAASA,EAAQ,OACrB,CAAC,CACL,OAASE,EAAY,CAEjB,QAAQ,IAAI,EAEZ,QAAQ,MAAMA,CAAK,EACnBP,EAAK,CAAC,CACV,CACJ,CAAC,CACT,EAEOM,EAAQL","sourcesContent":["import { exit } from \"node:process\";\n\nimport type { Command } from \"commander\";\n\nimport command from \"../../command/list/list-command\";\n\nconst listCommand = (\n program: Command,\n commandName = \"list\",\n description = \"List all available API routes; Supported frameworks are next, express, koa, hapi and fastify\",\n): void => {\n program\n .command(commandName)\n .description(description)\n .option(\"--framework <framework>\", \"Framework to use, choose from next, express, koa, hapi and fastify\")\n .option(\"-p, --path [path]\", \"...\")\n .option(\"--group [type]\", \"Groups routes. Supported: path, tag\")\n .option(\"--include-path [path]\", \"Includes only routes which contain a given path element. (comma-separated values)\", [])\n .option(\"--exclude-path [path]\", \"Excludes routes which contain a given path element. (comma-separated values)\", [])\n .option(\"-v, --verbose\", \"Verbose output.\", false)\n .action(async (options) => {\n try {\n await command(options.framework as \"express\" | \"fastify\" | \"hapi\" | \"koa\" | \"next\", options.path as string, {\n excludePaths: options.excludePaths as string[] | undefined,\n group: options.group as string | undefined,\n includePaths: options.includePath as string[] | undefined,\n verbose: options.verbose as boolean | undefined,\n });\n } catch (error: any) {\n // eslint-disable-next-line no-console\n console.log();\n // eslint-disable-next-line no-console\n console.error(error);\n exit(1);\n }\n });\n};\n\nexport default listCommand;\n"]}
1
+ {"version":3,"sources":["../../../../src/framework/cli/commander/command/list-command.ts"],"names":["exit","listCommand","program","commandName","description","options","list_command_default","error"],"mappings":"+EAAA,OAAS,QAAAA,MAAY,eAMrB,IAAMC,EAAc,CAChBC,EACAC,EAAc,OACdC,EAAc,iGACP,CACPF,EACK,QAAQC,CAAW,EACnB,YAAYC,CAAW,EACvB,OAAO,0BAA2B,oEAAoE,EACtG,OAAO,oBAAqB,KAAK,EACjC,OAAO,iBAAkB,qCAAqC,EAC9D,OAAO,wBAAyB,oFAAqF,CAAC,CAAC,EACvH,OAAO,wBAAyB,+EAAgF,CAAC,CAAC,EAClH,OAAO,gBAAiB,kBAAmB,EAAK,EAChD,OACG,MAAOC,GAOD,CACF,GAAI,CACA,MAAMC,EAAQD,EAAQ,UAAWA,EAAQ,KAAM,CAC3C,aAAcA,EAAQ,cAAgB,CAAC,EACvC,MAAOA,EAAQ,MACf,aAAcA,EAAQ,aAAe,CAAC,EACtC,QAASA,EAAQ,OACrB,CAAC,CACL,OAASE,EAAY,CAEjB,QAAQ,IAAI,EAEZ,QAAQ,MAAMA,CAAK,EACnBP,EAAK,CAAC,CACV,CACJ,CACJ,CACR,EAEOM,EAAQL","sourcesContent":["import { exit } from \"node:process\";\n\nimport type { Command } from \"commander\";\n\nimport command from \"../../command/list/list-command\";\n\nconst listCommand = (\n program: Command,\n commandName = \"list\",\n description = \"List all available API routes; Supported frameworks are next, express, koa, hapi and fastify\",\n): void => {\n program\n .command(commandName)\n .description(description)\n .option(\"--framework <framework>\", \"Framework to use, choose from next, express, koa, hapi and fastify\")\n .option(\"-p, --path [path]\", \"...\")\n .option(\"--group [type]\", \"Groups routes. Supported: path, tag\")\n .option(\"--include-path [path]\", \"Includes only routes which contain a given path element. (comma-separated values)\", [])\n .option(\"--exclude-path [path]\", \"Excludes routes which contain a given path element. (comma-separated values)\", [])\n .option(\"-v, --verbose\", \"Verbose output.\", false)\n .action(\n async (options: {\n excludePaths?: string[];\n framework: \"express\" | \"fastify\" | \"hapi\" | \"koa\" | \"next\";\n group?: string;\n includePath?: string[];\n path: string;\n verbose?: boolean;\n }) => {\n try {\n await command(options.framework, options.path, {\n excludePaths: options.excludePaths ?? [],\n group: options.group,\n includePaths: options.includePath ?? [],\n verbose: options.verbose as boolean | undefined,\n });\n } catch (error: any) {\n // eslint-disable-next-line no-console\n console.log();\n // eslint-disable-next-line no-console\n console.error(error);\n exit(1);\n }\n },\n );\n};\n\nexport default listCommand;\n"]}
@@ -3,9 +3,8 @@ interface RenderOptions {
3
3
  group: string;
4
4
  includePaths: string[];
5
5
  methods: string[];
6
- }
7
- declare const listCommand: (framework: "express" | "fastify" | "hapi" | "koa" | "next" | undefined, path: string, options?: Partial<RenderOptions & {
8
6
  verbose: boolean;
9
- }>) => Promise<void>;
7
+ }
8
+ declare const listCommand: (framework: "express" | "fastify" | "hapi" | "koa" | "next" | undefined, path: string, options?: Partial<RenderOptions>) => Promise<void>;
10
9
 
11
10
  export { listCommand };
@@ -3,9 +3,8 @@ interface RenderOptions {
3
3
  group: string;
4
4
  includePaths: string[];
5
5
  methods: string[];
6
- }
7
- declare const listCommand: (framework: "express" | "fastify" | "hapi" | "koa" | "next" | undefined, path: string, options?: Partial<RenderOptions & {
8
6
  verbose: boolean;
9
- }>) => Promise<void>;
7
+ }
8
+ declare const listCommand: (framework: "express" | "fastify" | "hapi" | "koa" | "next" | undefined, path: string, options?: Partial<RenderOptions>) => Promise<void>;
10
9
 
11
10
  export { listCommand };
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkG343CC5Z_js = require('../../chunk-G343CC5Z.js');
3
+ var chunk7VCBFZEZ_js = require('../../chunk-7VCBFZEZ.js');
4
4
  require('../../chunk-3XT5P2HO.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, 'listCommand', {
9
9
  enumerable: true,
10
- get: function () { return chunkG343CC5Z_js.a; }
10
+ get: function () { return chunk7VCBFZEZ_js.a; }
11
11
  });
12
12
  //# sourceMappingURL=out.js.map
13
13
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { a as listCommand } from '../../chunk-FFCKRGJ3.mjs';
1
+ export { a as listCommand } from '../../chunk-FZUWQEM2.mjs';
2
2
  import '../../chunk-HTAA47WA.mjs';
3
3
  //# sourceMappingURL=out.js.map
4
4
  //# sourceMappingURL=index.mjs.map
@@ -1,8 +1,8 @@
1
- import { c } from '../../chunk-K5YEO46P.mjs';
1
+ import { c } from '../../chunk-GSCIKFAG.mjs';
2
2
  export { a as getSwaggerStaticProps } from '../../chunk-GI7VS3DY.mjs';
3
3
  import '../../chunk-HTAA47WA.mjs';
4
- import w from 'fs';
5
- import c$1 from 'path';
4
+ import w from 'node:fs';
5
+ import c$1 from 'node:path';
6
6
  import { SwaggerCompilerPlugin } from '@visulima/jsdoc-open-api';
7
7
 
8
8
  var l=(i={})=>c(i),d=l;var x=({definition:i,output:r="swagger/swagger.json",sources:g,verbose:f})=>o=>({...o,webpack:(e,t)=>{if(!t.isServer)return e;if(r.startsWith("/")&&(r=r.slice(1)),!r.endsWith(".json"))throw new Error("The output path must end with .json");return e={...e,plugins:[...e.plugins,new SwaggerCompilerPlugin(`${t.dir}/${r}`,g.map(m=>{let a=c$1.join(t.dir,m.replace("./",""));return w.lstatSync(a).isDirectory(),a}),{openapi:"3.0.0",...i},{verbose:f})]},typeof o.webpack=="function"?o.webpack(e,t):e}}),C=x;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/framework/next/routes/api/swagger.ts","../../../src/framework/next/webpack/with-open-api.ts"],"names":["swaggerApiRoute","options","swagger_handler_default","swagger_default","fs","path","SwaggerCompilerPlugin","withOpenApi","definition","output","sources","verbose","nextConfig","config","source","combinedPath","with_open_api_default"],"mappings":"2HAOA,IAAMA,EAAsH,CAACC,EAAU,CAAC,IACpIC,EAAeD,CAAO,EAGnBE,EAAQH,ECXf,OAAOI,MAAQ,KACf,OAAOC,MAAU,OAGjB,OAAS,yBAAAC,MAA6B,2BAKtC,IAAMC,EACF,CAAC,CACG,WAAAC,EACA,OAAAC,EAAS,uBACT,QAAAC,EACA,QAAAC,CACJ,IAMCC,IACI,CACG,GAAGA,EACH,QAAS,CAACC,EAAuBZ,IAAkC,CAC/D,GAAI,CAACA,EAAQ,SACT,OAAOY,EAQX,GALIJ,EAAO,WAAW,GAAG,IAErBA,EAASA,EAAO,MAAM,CAAC,GAGvB,CAACA,EAAO,SAAS,OAAO,EACxB,MAAM,IAAI,MAAM,qCAAqC,EA6BzD,OAzBAI,EAAS,CACL,GAAGA,EACH,QAAS,CAEL,GAAGA,EAAO,QACV,IAAIP,EACA,GAAGL,EAAQ,GAAG,IAAIQ,CAAM,GACxBC,EAAQ,IAAKI,GAAW,CACpB,IAAMC,EAAeV,EAAK,KAAKJ,EAAQ,IAAea,EAAO,QAAQ,KAAM,EAAE,CAAC,EAG9E,OAAAV,EAAG,UAAUW,CAAY,EAAE,YAAY,EAEhCA,CACX,CAAC,EACD,CAEI,QAAS,QACT,GAAGP,CACP,EACA,CAAE,QAAAG,CAAQ,CACd,CACJ,CACJ,EAEI,OAAOC,EAAW,SAAY,WACvBA,EAAW,QAAQC,EAAQZ,CAAO,EAGtCY,CACX,CACJ,GAEDG,EAAQT","sourcesContent":["import type { SwaggerHandlerOptions } from \"../../../../swagger/api/swagger-handler\";\nimport swaggerHandler from \"../../../../swagger/api/swagger-handler\";\n\n/**\n * @deprecated Use `import { swaggerHandler } from \"@visulima/api-platform\"` instead.\n */\n\nconst swaggerApiRoute: <M extends string, PrismaClient>(options: Partial<SwaggerHandlerOptions<M, PrismaClient>>) => void = (options = {}) =>\n swaggerHandler(options);\n\n// eslint-disable-next-line deprecation/deprecation\nexport default swaggerApiRoute;\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport type { BaseDefinition } from \"@visulima/jsdoc-open-api\";\nimport { SwaggerCompilerPlugin } from \"@visulima/jsdoc-open-api\";\nimport type { NextJsWebpackConfig, WebpackConfigContext } from \"next/dist/server/config-shared\";\nimport type { NextConfig } from \"next/types\";\nimport type { Configuration } from \"webpack\";\n\nconst withOpenApi =\n ({\n definition,\n output = \"swagger/swagger.json\",\n sources,\n verbose,\n }: {\n definition: Exclude<BaseDefinition, \"openapi\"> & { openapi?: string };\n output: string;\n sources: string[];\n verbose?: boolean;\n }) =>\n (nextConfig: NextConfig): NextConfig =>\n ({\n ...nextConfig,\n webpack: (config: Configuration, options: WebpackConfigContext) => {\n if (!options.isServer) {\n return config;\n }\n\n if (output.startsWith(\"/\")) {\n // eslint-disable-next-line no-param-reassign\n output = output.slice(1);\n }\n\n if (!output.endsWith(\".json\")) {\n throw new Error(\"The output path must end with .json\");\n }\n\n // eslint-disable-next-line no-param-reassign\n config = {\n ...config,\n plugins: [\n // @ts-expect-error: ignore\n ...config.plugins,\n new SwaggerCompilerPlugin(\n `${options.dir}/${output}`,\n sources.map((source) => {\n const combinedPath = path.join(options.dir as string, source.replace(\"./\", \"\"));\n\n // Check if the path is a directory\n fs.lstatSync(combinedPath).isDirectory();\n\n return combinedPath;\n }),\n {\n // @ts-expect-error: This property should be overwritten\n openapi: \"3.0.0\",\n ...definition,\n },\n { verbose },\n ),\n ],\n };\n\n if (typeof nextConfig.webpack === \"function\") {\n return nextConfig.webpack(config, options) as NextJsWebpackConfig;\n }\n\n return config as NextJsWebpackConfig;\n },\n }) as NextConfig;\n\nexport default withOpenApi;\n"]}
1
+ {"version":3,"sources":["../../../src/framework/next/routes/api/swagger.ts","../../../src/framework/next/webpack/with-open-api.ts"],"names":["swaggerApiRoute","options","swagger_handler_default","swagger_default","fs","path","SwaggerCompilerPlugin","withOpenApi","definition","output","sources","verbose","nextConfig","config","source","combinedPath","with_open_api_default"],"mappings":"2HAOA,IAAMA,EAAsH,CAACC,EAAU,CAAC,IACpIC,EAAeD,CAAO,EAGnBE,EAAQH,ECXf,OAAOI,MAAQ,UACf,OAAOC,MAAU,YAGjB,OAAS,yBAAAC,MAA6B,2BAKtC,IAAMC,EACF,CAAC,CACG,WAAAC,EACA,OAAAC,EAAS,uBACT,QAAAC,EACA,QAAAC,CACJ,IAMCC,IACI,CACG,GAAGA,EACH,QAAS,CAACC,EAAuBZ,IAAkC,CAC/D,GAAI,CAACA,EAAQ,SACT,OAAOY,EAQX,GALIJ,EAAO,WAAW,GAAG,IAErBA,EAASA,EAAO,MAAM,CAAC,GAGvB,CAACA,EAAO,SAAS,OAAO,EACxB,MAAM,IAAI,MAAM,qCAAqC,EA6BzD,OAzBAI,EAAS,CACL,GAAGA,EACH,QAAS,CAEL,GAAGA,EAAO,QACV,IAAIP,EACA,GAAGL,EAAQ,GAAG,IAAIQ,CAAM,GACxBC,EAAQ,IAAKI,GAAW,CACpB,IAAMC,EAAeV,EAAK,KAAKJ,EAAQ,IAAea,EAAO,QAAQ,KAAM,EAAE,CAAC,EAG9E,OAAAV,EAAG,UAAUW,CAAY,EAAE,YAAY,EAEhCA,CACX,CAAC,EACD,CAEI,QAAS,QACT,GAAGP,CACP,EACA,CAAE,QAAAG,CAAQ,CACd,CACJ,CACJ,EAEI,OAAOC,EAAW,SAAY,WACvBA,EAAW,QAAQC,EAAQZ,CAAO,EAGtCY,CACX,CACJ,GAEDG,EAAQT","sourcesContent":["import type { SwaggerHandlerOptions } from \"../../../../swagger/api/swagger-handler\";\nimport swaggerHandler from \"../../../../swagger/api/swagger-handler\";\n\n/**\n * @deprecated Use `import { swaggerHandler } from \"@visulima/api-platform\"` instead.\n */\n\nconst swaggerApiRoute: <M extends string, PrismaClient>(options: Partial<SwaggerHandlerOptions<M, PrismaClient>>) => void = (options = {}) =>\n swaggerHandler(options);\n\n// eslint-disable-next-line deprecation/deprecation\nexport default swaggerApiRoute;\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport type { BaseDefinition } from \"@visulima/jsdoc-open-api\";\nimport { SwaggerCompilerPlugin } from \"@visulima/jsdoc-open-api\";\nimport type { NextJsWebpackConfig, WebpackConfigContext } from \"next/dist/server/config-shared\";\nimport type { NextConfig } from \"next/types\";\nimport type { Configuration } from \"webpack\";\n\nconst withOpenApi =\n ({\n definition,\n output = \"swagger/swagger.json\",\n sources,\n verbose,\n }: {\n definition: Exclude<BaseDefinition, \"openapi\"> & { openapi?: string };\n output: string;\n sources: string[];\n verbose?: boolean;\n }) =>\n (nextConfig: NextConfig): NextConfig =>\n ({\n ...nextConfig,\n webpack: (config: Configuration, options: WebpackConfigContext) => {\n if (!options.isServer) {\n return config;\n }\n\n if (output.startsWith(\"/\")) {\n // eslint-disable-next-line no-param-reassign\n output = output.slice(1);\n }\n\n if (!output.endsWith(\".json\")) {\n throw new Error(\"The output path must end with .json\");\n }\n\n // eslint-disable-next-line no-param-reassign\n config = {\n ...config,\n plugins: [\n // @ts-expect-error: ignore\n ...config.plugins,\n new SwaggerCompilerPlugin(\n `${options.dir}/${output}`,\n sources.map((source) => {\n const combinedPath = path.join(options.dir as string, source.replace(\"./\", \"\"));\n\n // Check if the path is a directory\n fs.lstatSync(combinedPath).isDirectory();\n\n return combinedPath;\n }),\n {\n // @ts-expect-error: This property should be overwritten\n openapi: \"3.0.0\",\n ...definition,\n },\n { verbose },\n ),\n ],\n };\n\n if (typeof nextConfig.webpack === \"function\") {\n return nextConfig.webpack(config, options) as NextJsWebpackConfig;\n }\n\n return config as NextJsWebpackConfig;\n },\n }) as NextConfig;\n\nexport default withOpenApi;\n"]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkXW6G4X7P_js = require('./chunk-XW6G4X7P.js');
3
+ var chunk4H6B66HI_js = require('./chunk-4H6B66HI.js');
4
4
  require('./chunk-3XT5P2HO.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, 'zod', {
9
9
  enumerable: true,
10
- get: function () { return chunkXW6G4X7P_js.c; }
10
+ get: function () { return chunk4H6B66HI_js.c; }
11
11
  });
12
12
  //# sourceMappingURL=out.js.map
13
13
  //# sourceMappingURL=index-browser.js.map
@@ -1,4 +1,4 @@
1
- export { c as zod } from './chunk-MP2YXEO2.mjs';
1
+ export { c as zod } from './chunk-FKGPVTGA.mjs';
2
2
  import './chunk-HTAA47WA.mjs';
3
3
  //# sourceMappingURL=out.js.map
4
4
  //# sourceMappingURL=index-browser.mjs.map
@@ -31,7 +31,7 @@ type Serializers = {
31
31
  serializer: Serializer;
32
32
  }[];
33
33
 
34
- declare const serialize: <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(serializers: Serializers, request: Request_1, response: Response_1, data: unknown, options: {
34
+ declare const serialize: <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(serializers: Serializers, request: Request, response: Response, data: unknown, options: {
35
35
  defaultContentType: string;
36
36
  }) => Buffer | Uint8Array | string;
37
37
 
@@ -39,7 +39,7 @@ declare const xmlTransformer: Serializer;
39
39
 
40
40
  declare const yamlTransformer: Serializer;
41
41
 
42
- declare const createNodeRouter: <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>, Schema extends AnyZodObject = ZodObject<{
42
+ declare const createNodeRouter: <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>, Schema extends AnyZodObject = ZodObject<{
43
43
  body?: AnyZodObject | undefined;
44
44
  headers?: AnyZodObject | undefined;
45
45
  query?: AnyZodObject | undefined;
@@ -64,12 +64,12 @@ declare const createNodeRouter: <Request_1 extends IncomingMessage, Response_1 e
64
64
  } | undefined;
65
65
  } | undefined;
66
66
  showTrace?: boolean | undefined;
67
- }) => NodeRouter<Request_1, Response_1, Schema>;
67
+ }) => NodeRouter<Request, Response, Schema>;
68
68
 
69
- 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>;
69
+ declare const onError: <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(errorHandlers: ErrorHandlers, showTrace: boolean) => (error: unknown, request: Request, response: Response) => Promise<void>;
70
70
  declare const onNoMatch: <Request extends IncomingMessage, Response extends ServerResponse>(request: Request, response: Response, routes: Route<Nextable<FunctionLike>>[]) => ValueOrPromise<void>;
71
71
 
72
- 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>>;
72
+ declare const corsMiddleware: <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(options?: CorsOptions | CorsOptionsDelegate) => _visulima_connect.Nextable<_visulima_connect.NodeRequestHandler<Request, Response>>;
73
73
 
74
74
  declare const httpHeaderNormalizerMiddleware: (options_?: {
75
75
  canonical?: boolean | undefined;
@@ -77,8 +77,8 @@ declare const httpHeaderNormalizerMiddleware: (options_?: {
77
77
  } | undefined) => (request: IncomingMessage, response: ServerResponse, next: NextHandler) => ValueOrPromise<void>;
78
78
 
79
79
  type HeaderValue = ReadonlyArray<string> | number | string;
80
- declare const rateLimiterMiddleware: (rateLimiter: RateLimiterAbstract, headers?: ((limiterResponse: RateLimiterRes) => Record<string, HeaderValue>) | undefined) => <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(request: Request_1, response: NextApiResponse | Response_1, next: NextHandler) => Promise<void>;
80
+ declare const rateLimiterMiddleware: (rateLimiter: RateLimiterAbstract, headers?: ((limiterResponse: RateLimiterRes) => Record<string, HeaderValue>) | undefined) => <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(request: Request, response: NextApiResponse | Response, next: NextHandler) => Promise<void>;
81
81
 
82
- declare const serializersMiddleware: (serializers?: Serializers, defaultContentType?: string) => <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(request: Request_1, response: Response_1 | NextApiResponse, next: NextHandler) => Promise<ValueOrPromise<void>>;
82
+ declare const serializersMiddleware: (serializers?: Serializers, defaultContentType?: string) => <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(request: Request, response: NextApiResponse | Response, next: NextHandler) => Promise<ValueOrPromise<void>>;
83
83
 
84
84
  export { type Serializer, type Serializers, corsMiddleware, createNodeRouter, httpHeaderNormalizerMiddleware, onError, onNoMatch, rateLimiterMiddleware, serialize, serializersMiddleware, xmlTransformer, yamlTransformer };
@@ -31,7 +31,7 @@ type Serializers = {
31
31
  serializer: Serializer;
32
32
  }[];
33
33
 
34
- declare const serialize: <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(serializers: Serializers, request: Request_1, response: Response_1, data: unknown, options: {
34
+ declare const serialize: <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(serializers: Serializers, request: Request, response: Response, data: unknown, options: {
35
35
  defaultContentType: string;
36
36
  }) => Buffer | Uint8Array | string;
37
37
 
@@ -39,7 +39,7 @@ declare const xmlTransformer: Serializer;
39
39
 
40
40
  declare const yamlTransformer: Serializer;
41
41
 
42
- declare const createNodeRouter: <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>, Schema extends AnyZodObject = ZodObject<{
42
+ declare const createNodeRouter: <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>, Schema extends AnyZodObject = ZodObject<{
43
43
  body?: AnyZodObject | undefined;
44
44
  headers?: AnyZodObject | undefined;
45
45
  query?: AnyZodObject | undefined;
@@ -64,12 +64,12 @@ declare const createNodeRouter: <Request_1 extends IncomingMessage, Response_1 e
64
64
  } | undefined;
65
65
  } | undefined;
66
66
  showTrace?: boolean | undefined;
67
- }) => NodeRouter<Request_1, Response_1, Schema>;
67
+ }) => NodeRouter<Request, Response, Schema>;
68
68
 
69
- 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>;
69
+ declare const onError: <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(errorHandlers: ErrorHandlers, showTrace: boolean) => (error: unknown, request: Request, response: Response) => Promise<void>;
70
70
  declare const onNoMatch: <Request extends IncomingMessage, Response extends ServerResponse>(request: Request, response: Response, routes: Route<Nextable<FunctionLike>>[]) => ValueOrPromise<void>;
71
71
 
72
- 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>>;
72
+ declare const corsMiddleware: <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(options?: CorsOptions | CorsOptionsDelegate) => _visulima_connect.Nextable<_visulima_connect.NodeRequestHandler<Request, Response>>;
73
73
 
74
74
  declare const httpHeaderNormalizerMiddleware: (options_?: {
75
75
  canonical?: boolean | undefined;
@@ -77,8 +77,8 @@ declare const httpHeaderNormalizerMiddleware: (options_?: {
77
77
  } | undefined) => (request: IncomingMessage, response: ServerResponse, next: NextHandler) => ValueOrPromise<void>;
78
78
 
79
79
  type HeaderValue = ReadonlyArray<string> | number | string;
80
- declare const rateLimiterMiddleware: (rateLimiter: RateLimiterAbstract, headers?: ((limiterResponse: RateLimiterRes) => Record<string, HeaderValue>) | undefined) => <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(request: Request_1, response: NextApiResponse | Response_1, next: NextHandler) => Promise<void>;
80
+ declare const rateLimiterMiddleware: (rateLimiter: RateLimiterAbstract, headers?: ((limiterResponse: RateLimiterRes) => Record<string, HeaderValue>) | undefined) => <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(request: Request, response: NextApiResponse | Response, next: NextHandler) => Promise<void>;
81
81
 
82
- declare const serializersMiddleware: (serializers?: Serializers, defaultContentType?: string) => <Request_1 extends IncomingMessage, Response_1 extends ServerResponse<IncomingMessage>>(request: Request_1, response: Response_1 | NextApiResponse, next: NextHandler) => Promise<ValueOrPromise<void>>;
82
+ declare const serializersMiddleware: (serializers?: Serializers, defaultContentType?: string) => <Request extends IncomingMessage, Response extends ServerResponse<IncomingMessage>>(request: Request, response: NextApiResponse | Response, next: NextHandler) => Promise<ValueOrPromise<void>>;
83
83
 
84
84
  export { type Serializer, type Serializers, corsMiddleware, createNodeRouter, httpHeaderNormalizerMiddleware, onError, onNoMatch, rateLimiterMiddleware, serialize, serializersMiddleware, xmlTransformer, yamlTransformer };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkXW6G4X7P_js = require('./chunk-XW6G4X7P.js');
3
+ var chunk4H6B66HI_js = require('./chunk-4H6B66HI.js');
4
4
  var chunkNPG5BMQQ_js = require('./chunk-NPG5BMQQ.js');
5
5
  require('./chunk-3XT5P2HO.js');
6
6
  var connect = require('@visulima/connect');
@@ -24,15 +24,15 @@ var u=(e,o)=>{let t=o.headers??{};Object.keys(t).forEach(r=>{e.setHeader(r,t[r])
24
24
 
25
25
  Object.defineProperty(exports, 'dateIn', {
26
26
  enumerable: true,
27
- get: function () { return chunkXW6G4X7P_js.a; }
27
+ get: function () { return chunk4H6B66HI_js.a; }
28
28
  });
29
29
  Object.defineProperty(exports, 'dateOut', {
30
30
  enumerable: true,
31
- get: function () { return chunkXW6G4X7P_js.b; }
31
+ get: function () { return chunk4H6B66HI_js.b; }
32
32
  });
33
33
  Object.defineProperty(exports, 'zod', {
34
34
  enumerable: true,
35
- get: function () { return chunkXW6G4X7P_js.c; }
35
+ get: function () { return chunk4H6B66HI_js.c; }
36
36
  });
37
37
  Object.defineProperty(exports, 'swaggerHandler', {
38
38
  enumerable: true,