@visulima/api-platform 1.1.8 → 1.2.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.
Files changed (61) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +31 -3
  3. package/bin/index.js +7 -23
  4. package/dist/{chunk-UI23SSBN.js → chunk-34PWA43J.js} +1 -1
  5. package/dist/chunk-34PWA43J.js.map +1 -0
  6. package/dist/chunk-5P4SXSAZ.js +6 -0
  7. package/dist/chunk-5P4SXSAZ.js.map +1 -0
  8. package/dist/chunk-KJQOIMY2.mjs +2 -0
  9. package/dist/chunk-KJQOIMY2.mjs.map +1 -0
  10. package/dist/chunk-LS3DG7TO.js +2 -0
  11. package/dist/chunk-LS3DG7TO.js.map +1 -0
  12. package/dist/chunk-O4X5VJKA.mjs +6 -0
  13. package/dist/chunk-O4X5VJKA.mjs.map +1 -0
  14. package/dist/{chunk-M7LGAQP3.mjs → chunk-ZEVXRYAP.mjs} +1 -1
  15. package/dist/chunk-ZEVXRYAP.mjs.map +1 -0
  16. package/dist/framework/cli/commander/index.d.ts +5 -0
  17. package/dist/framework/cli/commander/index.js +2 -0
  18. package/dist/framework/cli/commander/index.js.map +1 -0
  19. package/dist/framework/cli/commander/index.mjs +2 -0
  20. package/dist/framework/cli/commander/index.mjs.map +1 -0
  21. package/dist/{next → framework}/cli/index.d.ts +1 -1
  22. package/dist/framework/cli/index.js +2 -0
  23. package/dist/{next/index-browser.js.map → framework/cli/index.js.map} +0 -0
  24. package/dist/framework/cli/index.mjs +2 -0
  25. package/dist/{next/index-browser.mjs.map → framework/cli/index.mjs.map} +0 -0
  26. package/dist/{next → framework/next}/index-browser.d.ts +1 -1
  27. package/dist/framework/next/index-browser.js +2 -0
  28. package/dist/framework/next/index-browser.js.map +1 -0
  29. package/dist/framework/next/index-browser.mjs +2 -0
  30. package/dist/framework/next/index-browser.mjs.map +1 -0
  31. package/dist/{next → framework/next}/index-server.d.ts +13 -4
  32. package/dist/framework/next/index-server.js +2 -0
  33. package/dist/framework/next/index-server.js.map +1 -0
  34. package/dist/framework/next/index-server.mjs +2 -0
  35. package/dist/framework/next/index-server.mjs.map +1 -0
  36. package/dist/index-server.d.ts +14 -5
  37. package/dist/index-server.js +1 -1
  38. package/dist/index-server.js.map +1 -1
  39. package/dist/index-server.mjs +1 -1
  40. package/dist/index-server.mjs.map +1 -1
  41. package/dist/{swagger-6ad3b021.d.ts → swagger-e843ad44.d.ts} +0 -0
  42. package/dist/{swagger-handler-ffed72c2.d.ts → swagger-handler-2eeb6a85.d.ts} +0 -0
  43. package/next/package.json +9 -9
  44. package/package.json +41 -15
  45. package/dist/chunk-LMCCZDNI.js +0 -2
  46. package/dist/chunk-LMCCZDNI.js.map +0 -1
  47. package/dist/chunk-M7LGAQP3.mjs.map +0 -1
  48. package/dist/chunk-UI23SSBN.js.map +0 -1
  49. package/dist/chunk-XVXFEQ7P.mjs +0 -2
  50. package/dist/chunk-XVXFEQ7P.mjs.map +0 -1
  51. package/dist/next/cli/index.js +0 -4
  52. package/dist/next/cli/index.js.map +0 -1
  53. package/dist/next/cli/index.mjs +0 -4
  54. package/dist/next/cli/index.mjs.map +0 -1
  55. package/dist/next/index-browser.js +0 -2
  56. package/dist/next/index-browser.mjs +0 -2
  57. package/dist/next/index-server.js +0 -2
  58. package/dist/next/index-server.js.map +0 -1
  59. package/dist/next/index-server.mjs +0 -2
  60. package/dist/next/index-server.mjs.map +0 -1
  61. package/next/cli/package.json +0 -18
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/swagger/swagger-handler.ts","../src/connect/serializers/yaml.ts","../src/swagger/extend-swagger-spec.ts","../src/utils.ts"],"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 { OpenAPIV3 } from \"openapi-types\";\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 = (options: Partial<SwaggerHandlerOptions> = {}) => {\n const {\n allowedMediaTypes = {\n \"application/json\": true,\n },\n swaggerFilePath,\n crud,\n specs,\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 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: { schemas: modelsOpenApi.schemas, examples: modelsOpenApi.examples },\n tags: modelsOpenApi.tags as OpenAPIV3.TagObject[],\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\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 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 type SwaggerHandlerOptions = {\n allowedMediaTypes: { [key: string]: boolean };\n swaggerFilePath: string;\n crud: Exclude<ModelsToOpenApiParameters, \"swagger\"> & {\n swagger?: {\n models?: SwaggerModelsConfig<string>;\n };\n };\n specs?: Partial<OpenAPIV3.Document>[];\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 xml 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 (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] = {} 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 (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).schema = {} as OpenAPIV3.SchemaObject;\n }\n\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).schema = schemaIsArray\n ? {\n type: \"array\",\n items: {\n $ref: `#/components/schemas/${schemaName}`,\n },\n }\n : {\n $ref: `#/components/schemas/${schemaName}`,\n };\n};\n\nconst extendSwaggerWithMediaTypeSchema = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n pathKey: string,\n spec: Partial<OpenAPIV3.Document>,\n status: string,\n): {\n example?: any;\n examples?: {\n [media: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject;\n };\n} => {\n let example: any | undefined;\n let examples:\n | {\n [media: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject;\n }\n | undefined;\n\n // eslint-disable-next-line radar/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 as OpenAPIV3.ReferenceObject).$ref === undefined) {\n // eslint-disable-next-line max-len\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 // eslint-disable-next-line max-len\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 { examples, example };\n};\n\nconst extendSwaggerWithMediaTypeExample = (\n methodSpec: OpenAPIV3.OperationObject,\n responseSpec: OpenAPIV3.ResponseObject,\n status: string,\n allowedMediaTypes: { [p: 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\n === undefined\n ) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = {};\n }\n\n let transformed = false;\n\n transformers.forEach(({ regex, transformer }) => {\n if (!transformed && regex.test(mediaType)) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = transformer(example);\n\n transformed = true;\n }\n });\n\n if (!transformed) {\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).example = example;\n }\n });\n });\n};\n\nconst extendComponentExamples = (\n spec: Partial<OpenAPIV3.Document>,\n exampleName: string,\n examples: {\n [media: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject;\n },\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: {\n [media: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject;\n },\n // eslint-disable-next-line radar/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 (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).examples = {};\n }\n\n const transformedExamples: {\n [media: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject;\n } = {};\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] as OpenAPIV3.ExampleObject) !== undefined) {\n data = (spec.components?.examples?.[exampleName] as OpenAPIV3.ExampleObject).value;\n } else if (example as OpenAPIV3.ReferenceObject) {\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] = spec.components?.examples?.[exampleName] === undefined\n ? example\n : {\n $ref: `#/components/examples/${exampleName}`,\n };\n }\n });\n\n (\n (\n // eslint-disable-next-line no-param-reassign\n ((methodSpec.responses as unknown as OpenAPIV3.ResponsesObject)[status] as OpenAPIV3.ResponseObject).content as {\n [key: string]: OpenAPIV3.MediaTypeObject;\n }\n )[mediaType] as OpenAPIV3.MediaTypeObject\n ).examples = transformedExamples;\n};\n\nconst extendSwaggerWithMediaTypeExamples = (\n spec: Partial<OpenAPIV3.Document>,\n methodSpec: OpenAPIV3.OperationObject,\n status: string,\n responseSpec: OpenAPIV3.ResponseObject,\n allowedMediaTypes: { [p: string]: boolean } | undefined,\n pathKey: string,\n transformers: Transformers,\n examples: {\n [media: string]: OpenAPIV3.ReferenceObject | OpenAPIV3.ExampleObject;\n },\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 radar/cognitive-complexity\nexport default function extendSwaggerSpec(\n spec: Partial<OpenAPIV3.Document>,\n allowedMediaTypes?: { [key: string]: boolean },\n transformers: Transformers = [\n {\n regex: /xml/,\n transformer: (value) => xml.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.PathsObject & OpenAPIV3.OperationObject).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 { examples, example } = 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 { IncomingMessage } from \"node:http\";\nimport { parse as urlParse } from \"node:url\";\n\ntype IncomingApiRequest<TApiRequest = IncomingMessage> = TApiRequest & {\n body?: any;\n query?: any;\n};\n\nexport const jsonResponse = (response: any, 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<unknown> => {\n if (request.body) {\n return request.body;\n }\n\n const buffers = [];\n\n // eslint-disable-next-line no-restricted-syntax\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): unknown => {\n if (request.query) {\n return request.query;\n }\n return urlParse(request.url ?? \"\", true).query;\n};\n\nexport const toHeaderCase = (string_: string): string => string_\n .toLowerCase()\n .replace(/[^\\s\\w]/g, \" \") // Remove all non-word characters\n .trimEnd() // Remove trailing spaces\n .replace(/\\s+|_/g, \"-\") // Replace multiple spaces or underline with a single hyphen\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n"],"mappings":"AAGA,OAAS,mBAAAA,MAAuB,iBAChC,OAAOC,MAAW,QAClB,OAAOC,MAAW,eAClB,OAAS,cAAAC,EAAY,gBAAAC,MAAoB,KAEzC,OAAOC,MAAU,OCRjB,OAAS,aAAAC,MAAiB,OAI1B,IAAMC,EAA+BC,GAASF,EAAUE,EAAM,CAAE,OAAQ,CAAE,CAAC,EAEpEC,EAAQF,ECNf,OAAOG,MAAS,UAEhB,OAAS,aAAAC,MAAiB,OCoCnB,IAAMC,EAAgBC,GAA4BA,EACpD,YAAY,EACZ,QAAQ,WAAY,GAAG,EACvB,QAAQ,EACR,QAAQ,SAAU,GAAG,EACrB,QAAQ,QAAUC,GAAMA,EAAE,YAAY,CAAC,EDnC5C,IAAMC,EAAgB,mBAEhBC,EAAuB,CAACC,EAA2CC,EAAgBC,IAAsB,CAV/G,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,IAWUH,GAAAD,EAAAH,GAAA,YAAAA,EAAY,YAAZ,YAAAG,EAAiEF,KAAjE,YAAAG,EAAuG,WAAY,SAEnHJ,EAAW,UAAmDC,GAAqC,QAAU,CAAC,KAG9GM,GAAAD,GAAAD,EAAAL,GAAA,YAAAA,EAAY,YAAZ,YAAAK,EAAiEJ,KAAjE,YAAAK,EAAuG,UAAvG,YAAAC,EAAiHL,MAAe,SAG5HF,EAAW,UAAmDC,GAAqC,QAGvGC,GAAa,CAAC,EAExB,EAEMM,EAAyB,CAACC,EAAmCC,EAAoBC,IAAmC,CAClH,OAAOF,EAAK,YAAe,WAE3BA,EAAK,WAAa,CAAC,GAGnB,OAAOA,EAAK,WAAW,SAAY,WAEnCA,EAAK,WAAW,QAAU,CAAC,GAG3BA,EAAK,WAAW,QAAQC,KAAgB,SAExCD,EAAK,WAAW,QAAQC,GAAcC,EAE9C,EAEMC,EAAuB,CAACZ,EAAuCC,EAAgBC,EAAmBQ,EAAoBG,IAA2B,CA3CvJ,IAAAV,EAAAC,EAAAC,EAAAC,EA4CIP,EAAqBC,EAAYC,EAAQC,CAAS,IAE5CI,GAAAD,GAAAD,GAAAD,EAAAH,GAAA,YAAAA,EAAY,YAAZ,YAAAG,EAAiEF,KAAjE,YAAAG,EAAuG,UAAvG,YAAAC,EAAiHH,KAAjH,YAAAI,EAA6H,UAAW,SAIhIN,EAAW,UAAmDC,GAAqC,QAGvGC,GACJ,OAAS,CAAC,GAMNF,EAAW,UAAmDC,GAAqC,QAGvGC,GACJ,OAASW,EACL,CACE,KAAM,QACN,MAAO,CACH,KAAM,wBAAwBH,GAClC,CACJ,EACE,CACE,KAAM,wBAAwBA,GAClC,CACR,EAEMI,EAAmC,CACrCd,EACAe,EACAC,EACAC,EACAR,EACAR,IAMC,CACD,IAAIiB,EACAC,EAOJ,cAAO,QAAQJ,EAAa,OAAiB,EAAE,QAAQ,CAAC,CAACK,EAAWC,CAAW,IAAM,CACjF,GAAI,OAAOA,EAAY,QAAW,SAAU,CACxC,GAAM,CAAE,OAAAV,CAAO,EAAIU,EAEfD,IAActB,GAAiBuB,EAAY,WAAa,OACxDF,EAAWE,EAAY,SAChBD,IAActB,GAAiBuB,EAAY,UAAY,SAC9DH,EAAUG,EAAY,SAG1B,IAAMR,EAAiBF,EAAkC,OAAS,QAElE,OAAO,QAAQK,GAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACd,EAAWoB,CAAO,IAAM,CACtE,GAAI,CAACA,EACD,OAGJ,IAAIZ,EAECC,EAAqC,OAAS,QAE/CD,EAAa,GAAGa,EAAaN,EAAQ,KAAK,EAAE,QAAQ,IAAK,EAAE,CAAC,IAAIf,IAAc,sBAAwB,UAAY,KAElHM,EAAuBC,EAA4BC,EAAYC,CAAgC,GAG/FD,EAAcC,EAAqC,KAAK,QAAQ,wBAAyB,EAAE,EAG/FC,EAAqBZ,EAAYC,EAAQC,EAAWQ,EAAYG,CAAa,CACjF,CAAC,CACL,CACJ,CAAC,EAEM,CAAE,SAAAM,EAAU,QAAAD,CAAQ,CAC/B,EAEMM,EAAoC,CACtCxB,EACAe,EACAd,EACAe,EACAS,EACAP,IACC,CACD,OAAO,KAAKH,EAAa,OAAiB,EAAE,QAASK,GAAc,CAC3DA,IAActB,GAIlB,OAAO,QAAQkB,GAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACd,EAAWoB,CAAO,IAAM,CAnJlF,IAAAnB,EAAAC,EAAAC,EAAAC,EAoJY,GAAI,CAACgB,EACD,OAGJvB,EAAqBC,EAAYC,EAAQC,CAAS,IAG5CI,GAAAD,GAAAD,GAAAD,EAAAH,GAAA,YAAAA,EAAY,YAAZ,YAAAG,EAAiEF,KAAjE,YAAAG,EAAuG,UAAvG,YAAAC,EAAiHH,KAAjH,YAAAI,EAA6H,WAC3H,SAKMN,EAAW,UAAmDC,GAAqC,QAGvGC,GACJ,QAAU,CAAC,GAGjB,IAAIwB,EAAc,GAElBD,EAAa,QAAQ,CAAC,CAAE,MAAAE,EAAO,YAAAC,CAAY,IAAM,CACzC,CAACF,GAAeC,EAAM,KAAKzB,CAAS,IAI1BF,EAAW,UAAmDC,GAAqC,QAGvGC,GACJ,QAAU0B,EAAYV,CAAO,EAE/BQ,EAAc,GAEtB,CAAC,EAEIA,IAIS1B,EAAW,UAAmDC,GAAqC,QAGvGC,GACJ,QAAUgB,EAEpB,CAAC,CACL,CAAC,CACL,EAEMW,EAA0B,CAC5BpB,EACAqB,EACAX,IAGC,CACG,OAAOV,EAAK,YAAe,WAE3BA,EAAK,WAAa,CAAC,GAGnB,OAAOA,EAAK,WAAW,UAAa,WAEpCA,EAAK,WAAW,SAAW,CAAC,GAG5BA,EAAK,WAAW,SAASqB,KAAiB,QAAaX,EAASW,KAAiB,SAEjFrB,EAAK,WAAW,SAASqB,GAAeX,EAASW,GAEzD,EAEMC,EAA0B,CAC5BtB,EACAT,EACAC,EACAC,EACAuB,EACAN,IAIC,CAxOL,IAAAhB,EAAAC,EAAAC,EAAAC,EAyOIP,EAAqBC,EAAYC,EAAQC,CAAS,IAE5CI,GAAAD,GAAAD,GAAAD,EAAAH,GAAA,YAAAA,EAAY,YAAZ,YAAAG,EAAiEF,KAAjE,YAAAG,EAAuG,UAAvG,YAAAC,EAAiHH,KAAjH,YAAAI,EAA6H,YAAa,SAIlIN,EAAW,UAAmDC,GAAqC,QAGvGC,GACJ,SAAW,CAAC,GAGlB,IAAM8B,EAEF,CAAC,EAEL,OAAO,QAAQb,CAAQ,EAAE,QAAQ,CAAC,CAACW,EAAaZ,CAAO,IAAM,CA1PjE,IAAAf,EAAAC,EA2PQ,IAAIsB,EAAc,GAElBD,EAAa,QAAQ,CAAC,CAAE,MAAAE,EAAO,YAAAC,CAAY,IAAM,CA7PzD,IAAAzB,EAAAC,EAAAC,EAAAC,EAAAC,EAAA0B,EA8PY,GAAI,CAACP,GAAeC,EAAM,KAAKzB,CAAS,EAAG,CACvC,IAAIgC,EAAY,KAEX9B,GAAAD,EAAAM,EAAK,aAAL,YAAAN,EAAiB,WAAjB,YAAAC,EAA4B0B,MAA6C,OAC1EI,IAAQ5B,GAAAD,EAAAI,EAAK,aAAL,YAAAJ,EAAiB,WAAjB,YAAAC,EAA4BwB,IAAyC,MACtEZ,EACPgB,IACID,GAAA1B,EAAAE,EAAK,aAAL,YAAAF,EAAiB,WAAjB,YAAA0B,EACKf,EAAsC,KAAK,QAAQ,yBAA0B,EAAE,IAEtF,MACK,OAAQA,GAAA,YAAAA,EAAqC,QAAU,WAC9DgB,EAAQhB,EAAoC,OAGhDc,EAAoBF,GAAe,CAC/B,MAAOF,EAAYM,CAAI,CAC3B,EAEAR,EAAc,EAClB,CACJ,CAAC,EAEIA,IACDM,EAAoBF,KAAe1B,GAAAD,EAAAM,EAAK,aAAL,YAAAN,EAAiB,WAAjB,YAAAC,EAA4B0B,MAAiB,OAC1EZ,EACA,CACE,KAAM,yBAAyBY,GACnC,EAEZ,CAAC,EAKS9B,EAAW,UAAmDC,GAAqC,QAGvGC,GACJ,SAAW8B,CACjB,EAEMG,EAAqC,CACvC1B,EACAT,EACAC,EACAc,EACAC,EACAC,EACAQ,EACAN,IAGC,CACD,IAAMiB,EAAe,GAAGb,EAAaN,EAAQ,KAAK,EAAE,QAAQ,IAAK,EAAE,CAAC,IAEpE,OAAO,KAAKF,EAAa,OAAiB,EAAE,QAASK,GAAc,CAC3DA,IAActB,GAIlB,OAAO,QAAQkB,GAAqB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAACd,EAAWoB,CAAO,IAAM,CAClE,CAACA,IAILO,EAAwBpB,EAAM2B,EAAcjB,CAAQ,EAEpDY,EAAwBtB,EAAMT,EAAYC,EAAQC,EAAWuB,EAAcN,CAAQ,EACvF,CAAC,CACL,CAAC,CACL,EAGe,SAARkB,EACH5B,EACAO,EACAS,EAA6B,CACzB,CACI,MAAO,MACP,YAAca,GAAUC,EAAI,MAAMD,EAAO,CACrC,OAAQ,GACR,OAAQ,IACZ,CAAC,CACL,EACA,CACI,MAAO,WACP,YAAcA,GAAUE,EAAUF,EAAO,CAAE,OAAQ,CAAE,CAAC,CAC1D,CACJ,EAC2B,CAC3B,OAAI,OAAO7B,GAAS,UAAY,OAAOA,EAAK,OAAU,UAClD,OAAO,QAAQA,EAAK,KAAK,EAAE,QAAQ,CAAC,CAACQ,EAASwB,CAAQ,IAAM,CACxD,OAAO,OAAOA,CAA6D,EAAE,QAASzC,GAAe,CAC7F,OAAQA,EAAyC,WAAc,UAC/D,OAAO,QAASA,EAAyC,SAAS,EAAE,QAAQ,CAAC,CAACC,EAAQc,CAAY,IAAM,CACpG,GAAI,OAAQA,EAA0C,SAAY,SAAU,CACxE,GAAM,CAAE,SAAAI,EAAU,QAAAD,CAAQ,EAAIJ,EAC1Bd,EACAe,EACAC,EACAC,EACAR,EACAR,CACJ,EAEIiB,IAAY,OACZM,EACIxB,EACAe,EACAd,EACAe,EACAS,EACAP,CACJ,EACOC,IAAa,QACpBgB,EACI1B,EACAT,EACAC,EACAc,EACAC,EACAC,EACAQ,EACAN,CACJ,CAER,CACJ,CAAC,CAET,CAAC,CACL,CAAC,EAGEV,CACX,CFtXA,IAAMiC,EAAmBC,EAAM,kEAAkE,EAE3FC,EAAiB,CAACC,EAA0C,CAAC,IAAM,CACrE,GAAM,CACF,kBAAAC,EAAoB,CAChB,mBAAoB,EACxB,EACA,gBAAAC,EACA,KAAAC,EACA,MAAAC,CACJ,EAAIJ,EAEJ,MAAO,OAAyEK,EAAkBC,IAAuB,CACrH,IAAMC,EAAcC,EAAK,KAAK,QAAQ,IAAI,EAAGN,GAAmB,sBAAsB,EAEtF,GAAI,CAACO,EAAWF,CAAW,EACvB,MAAM,IAAI,MAAM,6BAA6BA,oFAA8F,EAG/I,IAAMG,EAAeC,EAAaJ,EAAa,MAAM,EAEjDK,EAAOC,EAAkB,KAAK,MAAMH,CAAY,EAAyBT,CAAiB,EAC1Fa,EAA2C,CAAC,EAEhD,GAAIX,IAAS,OACT,GAAI,CACA,IAAMY,EAAgB,MAAMC,EAAgBb,CAAI,EAEhDW,EAAc,CACV,WAAY,CAAE,QAASC,EAAc,QAAS,SAAUA,EAAc,QAAS,EAC/E,KAAMA,EAAc,KACpB,MAAOA,EAAc,KACzB,EAEAD,EAAcD,EAAkBC,EAAab,CAAiB,EAE9DJ,EAAiB,KAAK,UAAUiB,EAAa,KAAM,CAAC,CAAC,EAErDF,EAAOK,EAAML,EAAME,CAAW,CAClC,OAASI,EAAP,CAEE,cAAQ,IAAIA,CAAK,EAEX,IAAI,MAAM,kEAAkE,CACtF,CAGA,MAAM,QAAQd,CAAK,GACnBA,EAAM,QAASe,GAAU,CACrBP,EAAOK,EAAML,EAAMC,EAAkBM,EAAOlB,CAAiB,CAAC,CAClE,CAAC,EAGD,OAAOI,EAAQ,QAAQ,QAAW,UAAY,WAAW,KAAKA,EAAQ,QAAQ,MAAM,GACpFC,EAAS,WAAa,IACtBA,EAAS,UAAU,eAAgBD,EAAQ,QAAQ,MAAM,EACzDC,EAAS,IAAIc,EAAgBR,CAAI,CAAC,IAElCN,EAAS,WAAa,IACtBA,EAAS,UAAU,eAAgB,kBAAkB,EACrDA,EAAS,IAAI,KAAK,UAAUM,EAAM,KAAM,CAAC,CAAC,EAElD,CACJ,EAaOS,GAAQtB","names":["modelsToOpenApi","debug","merge","existsSync","readFileSync","path","stringify","yamlTransformer","data","yaml_default","xml","stringify","toHeaderCase","string_","c","jsonMediaType","prepareStatusContent","methodSpec","status","mediaType","_a","_b","_c","_d","_e","extendComponentSchemas","spec","schemaName","schema","extendResponseSchema","schemaIsArray","extendSwaggerWithMediaTypeSchema","responseSpec","allowedMediaTypes","pathKey","example","examples","mediaName","contentSpec","allowed","toHeaderCase","extendSwaggerWithMediaTypeExample","transformers","transformed","regex","transformer","extendComponentExamples","exampleName","prepareResponseExamples","transformedExamples","_f","data","extendSwaggerWithMediaTypeExamples","examplesName","extendSwaggerSpec","value","xml","stringify","pathSpec","swaggerCrudDebug","debug","swaggerHandler","options","allowedMediaTypes","swaggerFilePath","crud","specs","request","response","swaggerPath","path","existsSync","fileContents","readFileSync","spec","extendSwaggerSpec","crudSwagger","modelsOpenApi","modelsToOpenApi","merge","error","value","yaml_default","swagger_handler_default"]}
@@ -1,4 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }require('../../chunk-OUWZ2PU5.js');var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);var _path = require('path');var _process = require('process'); var _process2 = _interopRequireDefault(_process);var _jsdocopenapi = require('@visulima/jsdoc-open-api');var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);var E=/\.(js|ts|mjs|cjs)$/,$=(e,t,o=!1)=>{let s=[],i=_jsdocopenapi.parseFile.call(void 0, e,_jsdocopenapi.jsDocumentCommentsToOpenApi,o);s=[...s,...i.map(l=>l.spec)];let r=_jsdocopenapi.parseFile.call(void 0, e,_jsdocopenapi.swaggerJsDocumentCommentsToOpenApi,o);s=[...s,...r.map(l=>l.spec)];let n=[];return s.length===0?(_fs2.default.readFileSync(e,"utf8").split(/\r?\n/).forEach(m=>{let c=m.match(/[=aces|]+\s["'|](GET|POST|PUT|PATCH|HEAD|DELETE|OPTIONS)["'|]/);if(c){let[,p]=c;p==="GET"&&(p="GET|HEAD"),n.push({method:p,path:e.replace(t,"").replace(E,""),tags:[],file:e.replace(`${_process2.default.cwd()}/`,"")})}}),n.length===0&&n.push({method:"GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS",path:e.replace(t,"").replace(E,""),tags:[],file:e.replace(`${_process2.default.cwd()}/`,"")}),n):(s.forEach(l=>{Object.entries(l.paths).forEach(([c,p])=>{Object.entries(p).forEach(([D,j])=>{n.push({path:c,method:D.toUpperCase(),tags:j.tags,file:e.replace(`${_process2.default.cwd()}/`,"")})})})}),n)},T=$;var _readdir = require('@visulima/readdir');var P=e=>{try{return _fs2.default.statSync(e).isDirectory()}catch (e2){return!1}},H=async(e="",t=!1)=>{let o=_path.join.call(void 0, e,"pages/api");return!P(o)&&(o=_path.join.call(void 0, e,"src/pages/api"),!P(o))?[]:_readdir.collect.call(void 0, o,{extensions:[".js",".cjs",".mjs",".ts"],includeDirs:!1,minimatchOptions:{match:{debug:t,matchBase:!0},skip:{debug:t,matchBase:!0}}})},A=H;var w=(e,t)=>{let o={GET:_chalk2.default.blue,POST:_chalk2.default.yellow,PATCH:_chalk2.default.yellow,PUT:_chalk2.default.yellow,DELETE:_chalk2.default.redBright,OPTIONS:_chalk2.default.hex("#6C7280"),ANY:_chalk2.default.redBright,HEAD:_chalk2.default.hex("#6C7280")},s;if(e==="GET|HEAD")s=`${_chalk2.default.blue("GET")}${_chalk2.default.grey("|HEAD")}`;else{let c=o[e](e);s=e==="GET"?`${c}${_chalk2.default.grey("|HEAD")}`:c}let i=e==="GET"?6:14-e.length,r=Array.from({length:i}).fill(" ").join(""),n=process.stdout.columns-16-t.length-4,l=n>0?Array.from({length:n}).fill(".").join(""):"",m=t.split("/").map(c=>["[",":"].includes(c[0]||"")?_chalk2.default.yellowBright(c):c).join("/");return` ${s}${r}${m}${_chalk2.default.grey(l)}`},G=(e,t={})=>e.map(o=>{if(!(t.methods&&t.methods.includes(o.method)))return o.method==="GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS"&&(o.method="ANY"),w(o.method,o.path.replace("/pages",""))}).filter(Boolean),u=G;var B=(e,t)=>{let o=new Map;return e.forEach(s=>{let i=t(s),r=o.get(i);r?r.push(s):o.set(i,[s])}),o},N=async(e="",t={})=>{let o=_path.join.call(void 0, _process2.default.cwd(),e),s=await A(o,t.verbose||!1);s.length===0&&(console.error(`No API routes found, in "${o}".`),_process2.default.exit(1));let i=s.flatMap(r=>T(r,o,t.verbose||!1));if(t.includePaths&&(i=t.includePaths.flatMap(r=>i.filter(n=>n.path.startsWith(r)))),t.excludePaths&&(i=t.excludePaths.flatMap(r=>i.filter(n=>!n.path.startsWith(r)))),t.group===void 0)u([],t).forEach(r=>{console.log(r)});else{let r=B(i,l=>t.group==="path"?l.path.replace("/pages","").split("/")[1]:l.tags[0]||"unsorted"),n=0;r.forEach((l,m)=>{n>0&&console.log();let c=(_process2.default.stdout.columns-16-m.length)/2,p=c>0?Array.from({length:c}).fill(" ").join(""):"";console.log(p+_chalk2.default.bold.underline(m)),u(l,t).forEach(h=>{console.log(h)}),n+=1})}console.log(`
2
- Listed ${_chalk2.default.greenBright(String(s.length))} HTTP ${s.length===1?"route":"routes"}.
3
- `)},F= exports.listCommand =N;exports.listCommand = F;
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/next/cli/list/list-command.ts","../../../src/next/cli/list/api-route-file-parser.ts","../../../src/next/cli/list/collect-api-route-files.ts","../../../src/next/cli/list/routes-render.ts"],"names":["colors","join","process","jsDocumentCommentsToOpenApi","parseFile","swaggerJsDocumentCommentsToOpenApi","fs","extensionRegex","apiRouteFileParser","apiRouteFile","cwdPath","verbose","specs","parsedJsDocumentFile","item","parsedSwaggerJsDocumentFile","routes","line","match","method","spec","path","pathSpec","methodSpec","api_route_file_parser_default","collect","isDirectory","collectApiRouteFiles","apiFolderPath","collect_api_route_files_default","renderRoute","routePath","colorMap","methodText","coloredMethod","spacesCount","spaces","dotsCount","dots","routeText","segment","routesRender","routesMap","options","route","routes_render_default","groupBy","list","keyGetter","map","key","collection","listCommand","apiRouteFiles","parsedApiRoutes","ipath","epath","renderedRoute","groupedMap","counter","list_command_default"],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-extraneous-dependencies\nimport colors from \"chalk\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\n\nimport apiRouteFileParser from \"./api-route-file-parser\";\nimport collectApiRouteFiles from \"./collect-api-route-files\";\nimport routesRender from \"./routes-render\";\nimport type { Route } from \"./types\";\n\ntype RenderOptions = {\n includePaths: string[];\n excludePaths: string[];\n methods: string[];\n group: string;\n};\n\nconst groupBy = (list: Route[], keyGetter: (item: Route) => keyof Route): Map<string, Route[]> => {\n const map = new Map();\n\n list.forEach((item) => {\n const key = keyGetter(item);\n const collection = map.get(key);\n\n if (collection) {\n collection.push(item);\n } else {\n map.set(key, [item]);\n }\n });\n\n return map;\n};\n\nconst listCommand = async (\n path: string = \"\",\n options: Partial<\n {\n verbose: boolean;\n } & RenderOptions\n > = {},\n// eslint-disable-next-line radar/cognitive-complexity\n) => {\n const routePath = join(process.cwd(), path);\n\n const apiRouteFiles = await collectApiRouteFiles(routePath, options.verbose || false);\n\n if (apiRouteFiles.length === 0) {\n // eslint-disable-next-line no-console\n console.error(`No API routes found, in \"${routePath}\".`);\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1);\n }\n\n let parsedApiRoutes = apiRouteFiles.flatMap((apiRouteFile) => apiRouteFileParser(apiRouteFile, routePath, options.verbose || false));\n\n if (options.includePaths) {\n parsedApiRoutes = options.includePaths.flatMap((ipath) => parsedApiRoutes.filter((route) => route.path.startsWith(ipath)));\n }\n\n if (options.excludePaths) {\n parsedApiRoutes = options.excludePaths.flatMap((epath) => parsedApiRoutes.filter((route) => !route.path.startsWith(epath)));\n }\n\n if (options.group === undefined) {\n routesRender([], options).forEach((renderedRoute) => {\n // eslint-disable-next-line no-console\n console.log(renderedRoute);\n });\n } else {\n const groupedMap = groupBy(parsedApiRoutes, (route) => {\n if (options.group === \"path\") {\n return route.path.replace(\"/pages\", \"\").split(\"/\")[1];\n }\n\n return route.tags[0] || \"unsorted\";\n });\n\n let counter = 0;\n\n groupedMap.forEach((routes, key) => {\n if (counter > 0) {\n // eslint-disable-next-line no-console\n console.log();\n }\n\n const dotsCount = (process.stdout.columns - 16 - key.length) / 2;\n const dots = dotsCount > 0 ? Array.from({ length: dotsCount }).fill(\" \").join(\"\") : \"\";\n // eslint-disable-next-line no-console\n console.log(dots + colors.bold.underline(key));\n\n routesRender(routes, options).forEach((renderedRoute) => {\n // eslint-disable-next-line no-console\n console.log(renderedRoute);\n });\n\n counter += 1;\n });\n }\n // });\n\n // eslint-disable-next-line no-console\n console.log(`\\n Listed ${colors.greenBright(String(apiRouteFiles.length))} HTTP ${apiRouteFiles.length === 1 ? \"route\" : \"routes\"}.\\n`);\n};\n\nexport default listCommand;\n","import type { OpenApiObject } from \"@visulima/jsdoc-open-api\";\nimport { jsDocumentCommentsToOpenApi, parseFile, swaggerJsDocumentCommentsToOpenApi } from \"@visulima/jsdoc-open-api\";\nimport fs from \"node:fs\";\nimport process from \"node:process\";\n\nimport type { Route } from \"./types\";\n\nconst extensionRegex = /\\.(js|ts|mjs|cjs)$/;\n\nconst apiRouteFileParser = (apiRouteFile: string, cwdPath: string, verbose: boolean = false): Route[] => {\n let specs: OpenApiObject[] = [];\n\n const parsedJsDocumentFile = parseFile(apiRouteFile, jsDocumentCommentsToOpenApi, verbose);\n\n specs = [...specs, ...parsedJsDocumentFile.map((item) => item.spec)];\n\n const parsedSwaggerJsDocumentFile = parseFile(apiRouteFile, swaggerJsDocumentCommentsToOpenApi, verbose);\n\n specs = [...specs, ...parsedSwaggerJsDocumentFile.map((item) => item.spec)];\n\n const routes: Route[] = [];\n\n if (specs.length === 0) {\n const apiRouteFileContent = fs.readFileSync(apiRouteFile, \"utf8\");\n\n apiRouteFileContent.split(/\\r?\\n/).forEach((line) => {\n const match = line.match(/[=aces|]+\\s[\"'|](GET|POST|PUT|PATCH|HEAD|DELETE|OPTIONS)[\"'|]/);\n\n if (match) {\n let [, method] = match;\n\n if (method === \"GET\") {\n method = \"GET|HEAD\";\n }\n\n routes.push({\n method: method as string,\n path: apiRouteFile.replace(cwdPath, \"\").replace(extensionRegex, \"\"),\n tags: [],\n file: apiRouteFile.replace(`${process.cwd()}/`, \"\"),\n });\n }\n });\n\n if (routes.length === 0) {\n routes.push({\n method: \"GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS\",\n path: apiRouteFile.replace(cwdPath, \"\").replace(extensionRegex, \"\"),\n tags: [],\n file: apiRouteFile.replace(`${process.cwd()}/`, \"\"),\n });\n }\n\n return routes;\n }\n\n specs.forEach((spec) => {\n const paths = Object.entries(spec.paths);\n\n paths.forEach(([path, pathSpec]) => {\n const methods = Object.entries(pathSpec);\n\n methods.forEach(([method, methodSpec]) => {\n routes.push({\n path, method: method.toUpperCase(), tags: methodSpec.tags, file: apiRouteFile.replace(`${process.cwd()}/`, \"\"),\n });\n });\n });\n });\n\n return routes;\n};\n\nexport default apiRouteFileParser;\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport { collect } from \"@visulima/readdir\";\nimport fs from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst isDirectory = (path: string): boolean => {\n try {\n return fs.statSync(path).isDirectory();\n } catch {\n return false;\n }\n};\n\nconst collectApiRouteFiles = async (path: string = \"\", verbose: boolean = false): Promise<string[]> => {\n let apiFolderPath = join(path, \"pages/api\");\n\n // src/pages will be ignored if pages is present in the root directory\n if (!isDirectory(apiFolderPath)) {\n apiFolderPath = join(path, \"src/pages/api\");\n\n if (!isDirectory(apiFolderPath)) {\n return [];\n }\n }\n\n return collect(apiFolderPath, {\n extensions: [\".js\", \".cjs\", \".mjs\", \".ts\"],\n includeDirs: false,\n minimatchOptions: {\n match: {\n debug: verbose,\n matchBase: true,\n },\n skip: {\n debug: verbose,\n matchBase: true,\n },\n },\n });\n};\n\nexport default collectApiRouteFiles;\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport colors from \"chalk\";\n\nimport type { Route } from \"./types\";\n\nconst renderRoute = (method: string, routePath: string): string => {\n const colorMap = {\n GET: colors.blue,\n POST: colors.yellow,\n PATCH: colors.yellow,\n PUT: colors.yellow,\n DELETE: colors.redBright,\n OPTIONS: colors.hex(\"#6C7280\"),\n ANY: colors.redBright,\n HEAD: colors.hex(\"#6C7280\"),\n };\n\n let methodText: string;\n\n if (method === \"GET|HEAD\") {\n methodText = `${colors.blue(\"GET\")}${colors.grey(\"|HEAD\")}`;\n } else {\n const coloredMethod = colorMap[method as keyof typeof colorMap](method);\n\n methodText = method === \"GET\" ? `${coloredMethod}${colors.grey(\"|HEAD\")}` : coloredMethod;\n }\n\n const spacesCount = method === \"GET\" ? 6 : 14 - method.length;\n const spaces = Array.from({ length: spacesCount }).fill(\" \").join(\"\");\n\n const dotsCount = process.stdout.columns - 16 - routePath.length - 4;\n const dots = dotsCount > 0 ? Array.from({ length: dotsCount }).fill(\".\").join(\"\") : \"\";\n\n const routeText = routePath\n .split(\"/\")\n .map((segment) => {\n const isDynamicSegment = [\"[\", \":\"].includes(segment[0] || \"\");\n\n return isDynamicSegment ? colors.yellowBright(segment) : segment;\n })\n .join(\"/\");\n\n return ` ${methodText}${spaces}${routeText}${colors.grey(dots)}`;\n};\n\nconst routesRender = (routesMap: Route[], options: { methods?: string[]; } = {}) => routesMap\n .map((route) => {\n if (options.methods && options.methods.includes(route.method)) {\n return;\n }\n\n if (route.method === \"GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS\") {\n // eslint-disable-next-line no-param-reassign\n route.method = \"ANY\";\n }\n\n // eslint-disable-next-line consistent-return\n return renderRoute(route.method, route.path.replace(\"/pages\", \"\"));\n })\n .filter(Boolean);\n\nexport default routesRender;\n"]}
@@ -1,4 +0,0 @@
1
- import"../../chunk-YOXCJZNX.mjs";import O from"chalk";import{join as M}from"path";import g from"process";import{jsDocumentCommentsToOpenApi as R,parseFile as d,swaggerJsDocumentCommentsToOpenApi as x}from"@visulima/jsdoc-open-api";import C from"fs";import f from"process";var E=/\.(js|ts|mjs|cjs)$/,$=(e,t,o=!1)=>{let s=[],i=d(e,R,o);s=[...s,...i.map(l=>l.spec)];let r=d(e,x,o);s=[...s,...r.map(l=>l.spec)];let n=[];return s.length===0?(C.readFileSync(e,"utf8").split(/\r?\n/).forEach(m=>{let c=m.match(/[=aces|]+\s["'|](GET|POST|PUT|PATCH|HEAD|DELETE|OPTIONS)["'|]/);if(c){let[,p]=c;p==="GET"&&(p="GET|HEAD"),n.push({method:p,path:e.replace(t,"").replace(E,""),tags:[],file:e.replace(`${f.cwd()}/`,"")})}}),n.length===0&&n.push({method:"GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS",path:e.replace(t,"").replace(E,""),tags:[],file:e.replace(`${f.cwd()}/`,"")}),n):(s.forEach(l=>{Object.entries(l.paths).forEach(([c,p])=>{Object.entries(p).forEach(([D,j])=>{n.push({path:c,method:D.toUpperCase(),tags:j.tags,file:e.replace(`${f.cwd()}/`,"")})})})}),n)},T=$;import{collect as b}from"@visulima/readdir";import S from"fs";import{join as y}from"path";var P=e=>{try{return S.statSync(e).isDirectory()}catch{return!1}},H=async(e="",t=!1)=>{let o=y(e,"pages/api");return!P(o)&&(o=y(e,"src/pages/api"),!P(o))?[]:b(o,{extensions:[".js",".cjs",".mjs",".ts"],includeDirs:!1,minimatchOptions:{match:{debug:t,matchBase:!0},skip:{debug:t,matchBase:!0}}})},A=H;import a from"chalk";var w=(e,t)=>{let o={GET:a.blue,POST:a.yellow,PATCH:a.yellow,PUT:a.yellow,DELETE:a.redBright,OPTIONS:a.hex("#6C7280"),ANY:a.redBright,HEAD:a.hex("#6C7280")},s;if(e==="GET|HEAD")s=`${a.blue("GET")}${a.grey("|HEAD")}`;else{let c=o[e](e);s=e==="GET"?`${c}${a.grey("|HEAD")}`:c}let i=e==="GET"?6:14-e.length,r=Array.from({length:i}).fill(" ").join(""),n=process.stdout.columns-16-t.length-4,l=n>0?Array.from({length:n}).fill(".").join(""):"",m=t.split("/").map(c=>["[",":"].includes(c[0]||"")?a.yellowBright(c):c).join("/");return` ${s}${r}${m}${a.grey(l)}`},G=(e,t={})=>e.map(o=>{if(!(t.methods&&t.methods.includes(o.method)))return o.method==="GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS"&&(o.method="ANY"),w(o.method,o.path.replace("/pages",""))}).filter(Boolean),u=G;var B=(e,t)=>{let o=new Map;return e.forEach(s=>{let i=t(s),r=o.get(i);r?r.push(s):o.set(i,[s])}),o},N=async(e="",t={})=>{let o=M(g.cwd(),e),s=await A(o,t.verbose||!1);s.length===0&&(console.error(`No API routes found, in "${o}".`),g.exit(1));let i=s.flatMap(r=>T(r,o,t.verbose||!1));if(t.includePaths&&(i=t.includePaths.flatMap(r=>i.filter(n=>n.path.startsWith(r)))),t.excludePaths&&(i=t.excludePaths.flatMap(r=>i.filter(n=>!n.path.startsWith(r)))),t.group===void 0)u([],t).forEach(r=>{console.log(r)});else{let r=B(i,l=>t.group==="path"?l.path.replace("/pages","").split("/")[1]:l.tags[0]||"unsorted"),n=0;r.forEach((l,m)=>{n>0&&console.log();let c=(g.stdout.columns-16-m.length)/2,p=c>0?Array.from({length:c}).fill(" ").join(""):"";console.log(p+O.bold.underline(m)),u(l,t).forEach(h=>{console.log(h)}),n+=1})}console.log(`
2
- Listed ${O.greenBright(String(s.length))} HTTP ${s.length===1?"route":"routes"}.
3
- `)},F=N;export{F as listCommand};
4
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/next/cli/list/list-command.ts","../../../src/next/cli/list/api-route-file-parser.ts","../../../src/next/cli/list/collect-api-route-files.ts","../../../src/next/cli/list/routes-render.ts"],"sourcesContent":["// eslint-disable-next-line import/no-extraneous-dependencies\nimport colors from \"chalk\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\n\nimport apiRouteFileParser from \"./api-route-file-parser\";\nimport collectApiRouteFiles from \"./collect-api-route-files\";\nimport routesRender from \"./routes-render\";\nimport type { Route } from \"./types\";\n\ntype RenderOptions = {\n includePaths: string[];\n excludePaths: string[];\n methods: string[];\n group: string;\n};\n\nconst groupBy = (list: Route[], keyGetter: (item: Route) => keyof Route): Map<string, Route[]> => {\n const map = new Map();\n\n list.forEach((item) => {\n const key = keyGetter(item);\n const collection = map.get(key);\n\n if (collection) {\n collection.push(item);\n } else {\n map.set(key, [item]);\n }\n });\n\n return map;\n};\n\nconst listCommand = async (\n path: string = \"\",\n options: Partial<\n {\n verbose: boolean;\n } & RenderOptions\n > = {},\n// eslint-disable-next-line radar/cognitive-complexity\n) => {\n const routePath = join(process.cwd(), path);\n\n const apiRouteFiles = await collectApiRouteFiles(routePath, options.verbose || false);\n\n if (apiRouteFiles.length === 0) {\n // eslint-disable-next-line no-console\n console.error(`No API routes found, in \"${routePath}\".`);\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1);\n }\n\n let parsedApiRoutes = apiRouteFiles.flatMap((apiRouteFile) => apiRouteFileParser(apiRouteFile, routePath, options.verbose || false));\n\n if (options.includePaths) {\n parsedApiRoutes = options.includePaths.flatMap((ipath) => parsedApiRoutes.filter((route) => route.path.startsWith(ipath)));\n }\n\n if (options.excludePaths) {\n parsedApiRoutes = options.excludePaths.flatMap((epath) => parsedApiRoutes.filter((route) => !route.path.startsWith(epath)));\n }\n\n if (options.group === undefined) {\n routesRender([], options).forEach((renderedRoute) => {\n // eslint-disable-next-line no-console\n console.log(renderedRoute);\n });\n } else {\n const groupedMap = groupBy(parsedApiRoutes, (route) => {\n if (options.group === \"path\") {\n return route.path.replace(\"/pages\", \"\").split(\"/\")[1];\n }\n\n return route.tags[0] || \"unsorted\";\n });\n\n let counter = 0;\n\n groupedMap.forEach((routes, key) => {\n if (counter > 0) {\n // eslint-disable-next-line no-console\n console.log();\n }\n\n const dotsCount = (process.stdout.columns - 16 - key.length) / 2;\n const dots = dotsCount > 0 ? Array.from({ length: dotsCount }).fill(\" \").join(\"\") : \"\";\n // eslint-disable-next-line no-console\n console.log(dots + colors.bold.underline(key));\n\n routesRender(routes, options).forEach((renderedRoute) => {\n // eslint-disable-next-line no-console\n console.log(renderedRoute);\n });\n\n counter += 1;\n });\n }\n // });\n\n // eslint-disable-next-line no-console\n console.log(`\\n Listed ${colors.greenBright(String(apiRouteFiles.length))} HTTP ${apiRouteFiles.length === 1 ? \"route\" : \"routes\"}.\\n`);\n};\n\nexport default listCommand;\n","import type { OpenApiObject } from \"@visulima/jsdoc-open-api\";\nimport { jsDocumentCommentsToOpenApi, parseFile, swaggerJsDocumentCommentsToOpenApi } from \"@visulima/jsdoc-open-api\";\nimport fs from \"node:fs\";\nimport process from \"node:process\";\n\nimport type { Route } from \"./types\";\n\nconst extensionRegex = /\\.(js|ts|mjs|cjs)$/;\n\nconst apiRouteFileParser = (apiRouteFile: string, cwdPath: string, verbose: boolean = false): Route[] => {\n let specs: OpenApiObject[] = [];\n\n const parsedJsDocumentFile = parseFile(apiRouteFile, jsDocumentCommentsToOpenApi, verbose);\n\n specs = [...specs, ...parsedJsDocumentFile.map((item) => item.spec)];\n\n const parsedSwaggerJsDocumentFile = parseFile(apiRouteFile, swaggerJsDocumentCommentsToOpenApi, verbose);\n\n specs = [...specs, ...parsedSwaggerJsDocumentFile.map((item) => item.spec)];\n\n const routes: Route[] = [];\n\n if (specs.length === 0) {\n const apiRouteFileContent = fs.readFileSync(apiRouteFile, \"utf8\");\n\n apiRouteFileContent.split(/\\r?\\n/).forEach((line) => {\n const match = line.match(/[=aces|]+\\s[\"'|](GET|POST|PUT|PATCH|HEAD|DELETE|OPTIONS)[\"'|]/);\n\n if (match) {\n let [, method] = match;\n\n if (method === \"GET\") {\n method = \"GET|HEAD\";\n }\n\n routes.push({\n method: method as string,\n path: apiRouteFile.replace(cwdPath, \"\").replace(extensionRegex, \"\"),\n tags: [],\n file: apiRouteFile.replace(`${process.cwd()}/`, \"\"),\n });\n }\n });\n\n if (routes.length === 0) {\n routes.push({\n method: \"GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS\",\n path: apiRouteFile.replace(cwdPath, \"\").replace(extensionRegex, \"\"),\n tags: [],\n file: apiRouteFile.replace(`${process.cwd()}/`, \"\"),\n });\n }\n\n return routes;\n }\n\n specs.forEach((spec) => {\n const paths = Object.entries(spec.paths);\n\n paths.forEach(([path, pathSpec]) => {\n const methods = Object.entries(pathSpec);\n\n methods.forEach(([method, methodSpec]) => {\n routes.push({\n path, method: method.toUpperCase(), tags: methodSpec.tags, file: apiRouteFile.replace(`${process.cwd()}/`, \"\"),\n });\n });\n });\n });\n\n return routes;\n};\n\nexport default apiRouteFileParser;\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport { collect } from \"@visulima/readdir\";\nimport fs from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst isDirectory = (path: string): boolean => {\n try {\n return fs.statSync(path).isDirectory();\n } catch {\n return false;\n }\n};\n\nconst collectApiRouteFiles = async (path: string = \"\", verbose: boolean = false): Promise<string[]> => {\n let apiFolderPath = join(path, \"pages/api\");\n\n // src/pages will be ignored if pages is present in the root directory\n if (!isDirectory(apiFolderPath)) {\n apiFolderPath = join(path, \"src/pages/api\");\n\n if (!isDirectory(apiFolderPath)) {\n return [];\n }\n }\n\n return collect(apiFolderPath, {\n extensions: [\".js\", \".cjs\", \".mjs\", \".ts\"],\n includeDirs: false,\n minimatchOptions: {\n match: {\n debug: verbose,\n matchBase: true,\n },\n skip: {\n debug: verbose,\n matchBase: true,\n },\n },\n });\n};\n\nexport default collectApiRouteFiles;\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport colors from \"chalk\";\n\nimport type { Route } from \"./types\";\n\nconst renderRoute = (method: string, routePath: string): string => {\n const colorMap = {\n GET: colors.blue,\n POST: colors.yellow,\n PATCH: colors.yellow,\n PUT: colors.yellow,\n DELETE: colors.redBright,\n OPTIONS: colors.hex(\"#6C7280\"),\n ANY: colors.redBright,\n HEAD: colors.hex(\"#6C7280\"),\n };\n\n let methodText: string;\n\n if (method === \"GET|HEAD\") {\n methodText = `${colors.blue(\"GET\")}${colors.grey(\"|HEAD\")}`;\n } else {\n const coloredMethod = colorMap[method as keyof typeof colorMap](method);\n\n methodText = method === \"GET\" ? `${coloredMethod}${colors.grey(\"|HEAD\")}` : coloredMethod;\n }\n\n const spacesCount = method === \"GET\" ? 6 : 14 - method.length;\n const spaces = Array.from({ length: spacesCount }).fill(\" \").join(\"\");\n\n const dotsCount = process.stdout.columns - 16 - routePath.length - 4;\n const dots = dotsCount > 0 ? Array.from({ length: dotsCount }).fill(\".\").join(\"\") : \"\";\n\n const routeText = routePath\n .split(\"/\")\n .map((segment) => {\n const isDynamicSegment = [\"[\", \":\"].includes(segment[0] || \"\");\n\n return isDynamicSegment ? colors.yellowBright(segment) : segment;\n })\n .join(\"/\");\n\n return ` ${methodText}${spaces}${routeText}${colors.grey(dots)}`;\n};\n\nconst routesRender = (routesMap: Route[], options: { methods?: string[]; } = {}) => routesMap\n .map((route) => {\n if (options.methods && options.methods.includes(route.method)) {\n return;\n }\n\n if (route.method === \"GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS\") {\n // eslint-disable-next-line no-param-reassign\n route.method = \"ANY\";\n }\n\n // eslint-disable-next-line consistent-return\n return renderRoute(route.method, route.path.replace(\"/pages\", \"\"));\n })\n .filter(Boolean);\n\nexport default routesRender;\n"],"mappings":"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","names":["colors","join","process","jsDocumentCommentsToOpenApi","parseFile","swaggerJsDocumentCommentsToOpenApi","fs","process","extensionRegex","apiRouteFileParser","apiRouteFile","cwdPath","verbose","specs","parsedJsDocumentFile","item","parsedSwaggerJsDocumentFile","routes","line","match","method","spec","path","pathSpec","methodSpec","api_route_file_parser_default","collect","fs","join","isDirectory","path","collectApiRouteFiles","verbose","apiFolderPath","collect_api_route_files_default","colors","renderRoute","method","routePath","colorMap","methodText","coloredMethod","spacesCount","spaces","dotsCount","dots","routeText","segment","routesRender","routesMap","options","route","routes_render_default","groupBy","list","keyGetter","map","item","key","collection","listCommand","path","options","routePath","join","process","apiRouteFiles","collect_api_route_files_default","parsedApiRoutes","apiRouteFile","api_route_file_parser_default","ipath","route","epath","routes_render_default","renderedRoute","groupedMap","counter","routes","dotsCount","dots","colors","list_command_default"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkUI23SSBNjs = require('../chunk-UI23SSBN.js');require('../chunk-OUWZ2PU5.js');exports.RedocPage = _chunkUI23SSBNjs.a; exports.SwaggerPage = _chunkUI23SSBNjs.b; exports.getSwaggerStaticProps = _chunkUI23SSBNjs.c;
2
- //# sourceMappingURL=index-browser.js.map
@@ -1,2 +0,0 @@
1
- import{a,b,c}from"../chunk-M7LGAQP3.mjs";import"../chunk-YOXCJZNX.mjs";export{a as RedocPage,b as SwaggerPage,c as getSwaggerStaticProps};
2
- //# sourceMappingURL=index-browser.mjs.map
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkLMCCZDNIjs = require('../chunk-LMCCZDNI.js');var _chunkUI23SSBNjs = require('../chunk-UI23SSBN.js');require('../chunk-OUWZ2PU5.js');var _jsdocopenapi = require('@visulima/jsdoc-open-api');var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);var _path = require('path'); var _path2 = _interopRequireDefault(_path);var l=({definition:i,sources:o,verbose:p,output:r="swagger/swagger.json"})=>n=>({...n,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 (0, _jsdocopenapi.SwaggerCompilerPlugin)(`${t.dir}/${r}`,o.map(m=>{let a=_path2.default.join(t.dir,m.replace("./",""));return _fs2.default.lstatSync(a).isDirectory(),a}),{openapi:"3.0.0",...i},{verbose:p})]},typeof n.webpack=="function"?n.webpack(e,t):e}}),d= exports.withOpenApi =l;var _connect = require('@visulima/connect');var c=(i={})=>{let o=_chunkLMCCZDNIjs.c.call(void 0, i);return _connect.createNodeRouter.call(void 0, ).get(o).handler()},h= exports.swaggerApiRoute =c;exports.RedocPage = _chunkUI23SSBNjs.a; exports.SwaggerPage = _chunkUI23SSBNjs.b; exports.getSwaggerStaticProps = _chunkUI23SSBNjs.c; exports.swaggerApiRoute = h; exports.withOpenApi = d;
2
- //# sourceMappingURL=index-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/next/webpack/with-open-api.ts","../../src/next/routes/api/swagger.ts"],"names":["SwaggerCompilerPlugin","fs","path","withOpenApi","definition","sources","verbose","output","nextConfig","config","options","source","combinedPath","with_open_api_default","createNodeRouter","swaggerApiRoute","handler","swagger_handler_default","swagger_default"],"mappings":"6HACA,OAAS,yBAAAA,MAA6B,2BAEtC,OAAOC,MAAQ,KACf,OAAOC,MAAU,OAGjB,IAAMC,EAAc,CAAC,CACjB,WAAAC,EAAY,QAAAC,EAAS,QAAAC,EAAS,OAAAC,EAAS,sBAE3C,IAAwIC,IAC7H,CACH,GAAGA,EACH,QAAS,CAACC,EAAuBC,IAAiB,CAC9C,GAAI,CAACA,EAAQ,SACT,OAAOD,EAQX,GALIF,EAAO,WAAW,GAAG,IAErBA,EAASA,EAAO,MAAM,CAAC,GAGvB,CAACA,EAAO,SAAS,OAAO,EACxB,MAAM,IAAI,MAAM,qCAAqC,EA6BzD,OAzBAE,EAAS,CACL,GAAGA,EACH,QAAS,CAEL,GAAGA,EAAO,QACV,IAAIT,EACA,GAAGU,EAAQ,OAAOH,IAClBF,EAAQ,IAAKM,GAAW,CACpB,IAAMC,EAAeV,EAAK,KAAKQ,EAAQ,IAAKC,EAAO,QAAQ,KAAM,EAAE,CAAC,EAGpE,OAAAV,EAAG,UAAUW,CAAY,EAAE,YAAY,EAEhCA,CACX,CAAC,EACD,CAEI,QAAS,QACT,GAAGR,CACP,EACA,CAAE,QAAAE,CAAQ,CACd,CACJ,CACJ,EAEI,OAAOE,EAAW,SAAY,WACvBA,EAAW,QAAQC,EAAQC,CAAO,EAGtCD,CACX,CACJ,GAGGI,EAAQV,EC9Df,OAAS,oBAAAW,MAAwB,oBAOjC,IAAMC,EAAkB,CACpBL,EAA0C,CAAC,IAC1C,CACD,IAAMM,EAAUC,EAAeP,CAAO,EAItC,OAFeI,EAAkD,EAAE,IAAIE,CAAO,EAEhE,QAAQ,CAC1B,EAEOE,EAAQH","sourcesContent":["import type { BaseDefinition } from \"@visulima/jsdoc-open-api\";\nimport { SwaggerCompilerPlugin } from \"@visulima/jsdoc-open-api\";\nimport type { NextConfig } from \"next\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { Configuration } from \"webpack\";\n\nconst withOpenApi = ({\n definition, sources, verbose, output = \"swagger/swagger.json\",\n// eslint-disable-next-line max-len\n}: { definition: Exclude<BaseDefinition, \"openapi\"> & { openapi?: string }; sources: string[]; verbose?: boolean; output: string }) => (nextConfig: NextConfig) => {\n return {\n ...nextConfig,\n webpack: (config: Configuration, options: any) => {\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-ignore\n ...config.plugins,\n new SwaggerCompilerPlugin(\n `${options.dir}/${output}`,\n sources.map((source) => {\n const combinedPath = path.join(options.dir, source.replace(\"./\", \"\"));\n\n // Check if the path is a directory\n fs.lstatSync(combinedPath).isDirectory();\n\n return combinedPath;\n }),\n {\n // @ts-ignore\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);\n }\n\n return config;\n },\n };\n};\n\nexport default withOpenApi;\n","import { createNodeRouter } from \"@visulima/connect\";\n// eslint-disable-next-line unicorn/prevent-abbreviations,import/no-extraneous-dependencies\nimport type { NextApiRequest, NextApiResponse } from \"next\";\n\nimport swaggerHandler, { SwaggerHandlerOptions } from \"../../../swagger/swagger-handler\";\n\n// eslint-disable-next-line max-len\nconst swaggerApiRoute = (\n options: Partial<SwaggerHandlerOptions> = {},\n) => {\n const handler = swaggerHandler(options);\n\n const router = createNodeRouter<NextApiRequest, NextApiResponse>().get(handler);\n\n return router.handler();\n};\n\nexport default swaggerApiRoute;\n"]}
@@ -1,2 +0,0 @@
1
- import{c as s}from"../chunk-XVXFEQ7P.mjs";import{a as x,b as y,c as A}from"../chunk-M7LGAQP3.mjs";import"../chunk-YOXCJZNX.mjs";import{SwaggerCompilerPlugin as f}from"@visulima/jsdoc-open-api";import u from"fs";import g from"path";var l=({definition:i,sources:o,verbose:p,output:r="swagger/swagger.json"})=>n=>({...n,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 f(`${t.dir}/${r}`,o.map(m=>{let a=g.join(t.dir,m.replace("./",""));return u.lstatSync(a).isDirectory(),a}),{openapi:"3.0.0",...i},{verbose:p})]},typeof n.webpack=="function"?n.webpack(e,t):e}}),d=l;import{createNodeRouter as w}from"@visulima/connect";var c=(i={})=>{let o=s(i);return w().get(o).handler()},h=c;export{x as RedocPage,y as SwaggerPage,A as getSwaggerStaticProps,h as swaggerApiRoute,d as withOpenApi};
2
- //# sourceMappingURL=index-server.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/next/webpack/with-open-api.ts","../../src/next/routes/api/swagger.ts"],"sourcesContent":["import type { BaseDefinition } from \"@visulima/jsdoc-open-api\";\nimport { SwaggerCompilerPlugin } from \"@visulima/jsdoc-open-api\";\nimport type { NextConfig } from \"next\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { Configuration } from \"webpack\";\n\nconst withOpenApi = ({\n definition, sources, verbose, output = \"swagger/swagger.json\",\n// eslint-disable-next-line max-len\n}: { definition: Exclude<BaseDefinition, \"openapi\"> & { openapi?: string }; sources: string[]; verbose?: boolean; output: string }) => (nextConfig: NextConfig) => {\n return {\n ...nextConfig,\n webpack: (config: Configuration, options: any) => {\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-ignore\n ...config.plugins,\n new SwaggerCompilerPlugin(\n `${options.dir}/${output}`,\n sources.map((source) => {\n const combinedPath = path.join(options.dir, source.replace(\"./\", \"\"));\n\n // Check if the path is a directory\n fs.lstatSync(combinedPath).isDirectory();\n\n return combinedPath;\n }),\n {\n // @ts-ignore\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);\n }\n\n return config;\n },\n };\n};\n\nexport default withOpenApi;\n","import { createNodeRouter } from \"@visulima/connect\";\n// eslint-disable-next-line unicorn/prevent-abbreviations,import/no-extraneous-dependencies\nimport type { NextApiRequest, NextApiResponse } from \"next\";\n\nimport swaggerHandler, { SwaggerHandlerOptions } from \"../../../swagger/swagger-handler\";\n\n// eslint-disable-next-line max-len\nconst swaggerApiRoute = (\n options: Partial<SwaggerHandlerOptions> = {},\n) => {\n const handler = swaggerHandler(options);\n\n const router = createNodeRouter<NextApiRequest, NextApiResponse>().get(handler);\n\n return router.handler();\n};\n\nexport default swaggerApiRoute;\n"],"mappings":"gIACA,OAAS,yBAAAA,MAA6B,2BAEtC,OAAOC,MAAQ,KACf,OAAOC,MAAU,OAGjB,IAAMC,EAAc,CAAC,CACjB,WAAAC,EAAY,QAAAC,EAAS,QAAAC,EAAS,OAAAC,EAAS,sBAE3C,IAAwIC,IAC7H,CACH,GAAGA,EACH,QAAS,CAACC,EAAuBC,IAAiB,CAC9C,GAAI,CAACA,EAAQ,SACT,OAAOD,EAQX,GALIF,EAAO,WAAW,GAAG,IAErBA,EAASA,EAAO,MAAM,CAAC,GAGvB,CAACA,EAAO,SAAS,OAAO,EACxB,MAAM,IAAI,MAAM,qCAAqC,EA6BzD,OAzBAE,EAAS,CACL,GAAGA,EACH,QAAS,CAEL,GAAGA,EAAO,QACV,IAAIT,EACA,GAAGU,EAAQ,OAAOH,IAClBF,EAAQ,IAAKM,GAAW,CACpB,IAAMC,EAAeV,EAAK,KAAKQ,EAAQ,IAAKC,EAAO,QAAQ,KAAM,EAAE,CAAC,EAGpE,OAAAV,EAAG,UAAUW,CAAY,EAAE,YAAY,EAEhCA,CACX,CAAC,EACD,CAEI,QAAS,QACT,GAAGR,CACP,EACA,CAAE,QAAAE,CAAQ,CACd,CACJ,CACJ,EAEI,OAAOE,EAAW,SAAY,WACvBA,EAAW,QAAQC,EAAQC,CAAO,EAGtCD,CACX,CACJ,GAGGI,EAAQV,EC9Df,OAAS,oBAAAW,MAAwB,oBAOjC,IAAMC,EAAkB,CACpBC,EAA0C,CAAC,IAC1C,CACD,IAAMC,EAAUC,EAAeF,CAAO,EAItC,OAFeG,EAAkD,EAAE,IAAIF,CAAO,EAEhE,QAAQ,CAC1B,EAEOG,EAAQL","names":["SwaggerCompilerPlugin","fs","path","withOpenApi","definition","sources","verbose","output","nextConfig","config","options","source","combinedPath","with_open_api_default","createNodeRouter","swaggerApiRoute","options","handler","swagger_handler_default","createNodeRouter","swagger_default"]}
@@ -1,18 +0,0 @@
1
- {
2
- "name": "@visulima/api-platform-next-cli",
3
- "version": "0.0.0",
4
- "description": "visulima api platform",
5
- "license": "MIT",
6
- "exports": {
7
- ".": {
8
- "types": "./../../dist/next/cli/index-server.d.ts",
9
- "browser": "./../../dist/next/cli/index-browser.js",
10
- "require": "./../../dist/next/cli/index-server.js",
11
- "import": "./../../dist/next/cli/index-server.mjs"
12
- },
13
- "./package.json": "./package.json"
14
- },
15
- "main": "../../dist/next/cli/index.js",
16
- "module": "../../dist/next/cli/index.mjs",
17
- "types": "../../dist/next/cli/index.d.ts"
18
- }