@visulima/api-platform 3.0.26 → 3.0.28

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 (52) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/LICENSE.md +6 -0
  3. package/README.md +2 -2
  4. package/dist/chunk-4C666HHU.js +1 -6
  5. package/dist/chunk-66EUOAFS.mjs +1 -8
  6. package/dist/chunk-66EUOAFS.mjs.map +1 -1
  7. package/dist/chunk-7PKKRTN7.mjs +6 -0
  8. package/dist/chunk-7PKKRTN7.mjs.map +1 -0
  9. package/dist/chunk-GI7VS3DY.mjs +1 -6
  10. package/dist/chunk-GI7VS3DY.mjs.map +1 -1
  11. package/dist/chunk-HZWWJL43.mjs +1 -4
  12. package/dist/chunk-MYU5ZKUN.js +1 -12
  13. package/dist/chunk-MYU5ZKUN.js.map +1 -1
  14. package/dist/chunk-NZTDUEZE.js +6 -0
  15. package/dist/chunk-NZTDUEZE.js.map +1 -0
  16. package/dist/chunk-T4ABIWHW.mjs +1 -12
  17. package/dist/chunk-T4ABIWHW.mjs.map +1 -1
  18. package/dist/chunk-UPRO35MO.js +1 -12
  19. package/dist/chunk-UPRO35MO.js.map +1 -1
  20. package/dist/chunk-YG667K32.js +1 -22
  21. package/dist/chunk-YG667K32.js.map +1 -1
  22. package/dist/framework/cli/commander/index.js +1 -10
  23. package/dist/framework/cli/commander/index.js.map +1 -1
  24. package/dist/framework/cli/commander/index.mjs +1 -8
  25. package/dist/framework/cli/commander/index.mjs.map +1 -1
  26. package/dist/framework/cli/index.js +1 -12
  27. package/dist/framework/cli/index.mjs +1 -3
  28. package/dist/framework/next/index-browser.js +1 -12
  29. package/dist/framework/next/index-browser.mjs +1 -3
  30. package/dist/framework/next/index-server.js +1 -22
  31. package/dist/framework/next/index-server.js.map +1 -1
  32. package/dist/framework/next/index-server.mjs +1 -11
  33. package/dist/framework/next/index-server.mjs.map +1 -1
  34. package/dist/framework/next/routes/pages/redoc/index.js +2 -16
  35. package/dist/framework/next/routes/pages/redoc/index.js.map +1 -1
  36. package/dist/framework/next/routes/pages/redoc/index.mjs +2 -10
  37. package/dist/framework/next/routes/pages/redoc/index.mjs.map +1 -1
  38. package/dist/framework/next/routes/pages/swagger/index.js +2 -17
  39. package/dist/framework/next/routes/pages/swagger/index.js.map +1 -1
  40. package/dist/framework/next/routes/pages/swagger/index.mjs +2 -10
  41. package/dist/framework/next/routes/pages/swagger/index.mjs.map +1 -1
  42. package/dist/index-browser.js +1 -12
  43. package/dist/index-browser.mjs +1 -3
  44. package/dist/index-server.js +2 -246
  45. package/dist/index-server.js.map +1 -1
  46. package/dist/index-server.mjs +2 -19
  47. package/dist/index-server.mjs.map +1 -1
  48. package/package.json +42 -42
  49. package/dist/chunk-GLAABR73.mjs +0 -18
  50. package/dist/chunk-GLAABR73.mjs.map +0 -1
  51. package/dist/chunk-INI6VCIA.js +0 -25
  52. package/dist/chunk-INI6VCIA.js.map +0 -1
@@ -1,13 +1,2 @@
1
- import { stringify } from 'yaml';
2
- import { existsSync, readFileSync } from 'node:fs';
3
- import { modelsToOpenApi } from '@visulima/crud';
4
- import { join } from '@visulima/path';
5
- import J from 'debug';
6
- import u from 'lodash.merge';
7
- import { toXML } from 'jstoxml';
8
-
9
- var y=e=>stringify(e,{indent:2}),I=y;var j=e=>e.toLowerCase().replaceAll(/[^\s\w]/gu," ").trimEnd().replaceAll(/\s+|_/gu,"-").replaceAll(/\b\w/gu,n=>n.toUpperCase());var P="application/json",A=(e,n,s)=>{e.responses[n].content===void 0&&(e.responses[n].content={}),e.responses[n].content?.[s]===void 0&&(e.responses[n].content[s]={});},h=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.schemas!="object"&&(e.components.schemas={}),e.components.schemas[n]===void 0&&(e.components.schemas[n]=s);},E=(e,n,s,o,f)=>{A(e,n,s),e.responses[n].content?.[s]?.schema===void 0&&(e.responses[n].content[s].schema={}),e.responses[n].content[s].schema=f?{items:{$ref:`#/components/schemas/${o}`},type:"array"}:{$ref:`#/components/schemas/${o}`};},M=(e,n,s,o,f,p)=>{let a,t;return Object.entries(n.content).forEach(([c,r])=>{if(typeof r.schema=="object"){let{schema:i}=r;c===P&&r.examples!==void 0?t=r.examples:c===P&&r.example!==void 0&&(a=r.example);let l=i.type==="array";Object.entries(s??{}).forEach(([O,V])=>{if(!V)return;let g;i?.$ref===void 0?(g=`${j(o.trim().replace("/",""))}${O==="application/ld+json"?".jsonld":""}`,h(f,g,i)):g=i.$ref.replace("#/components/schemas/",""),E(e,p,O,g,l);});}}),{example:a,examples:t}},T=(e,n,s,o,f,p)=>{Object.keys(n.content).forEach(a=>{a!==P&&Object.entries(o??{}).forEach(([t,c])=>{if(!c)return;A(e,s,t),e.responses[s].content?.[t]?.example===void 0&&(e.responses[s].content[t].example={});let r=!1;f.forEach(({regex:i,transformer:l})=>{!r&&i.test(t)&&(e.responses[s].content[t].example=l(p),r=!0);}),r||(e.responses[s].content[t].example=p);});});},C=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.examples!="object"&&(e.components.examples={}),e.components.examples[n]===void 0&&s[n]!==void 0&&(e.components.examples[n]=s[n]);},k=(e,n,s,o,f,p)=>{A(n,s,o),n.responses[s].content?.[o]?.examples===void 0&&(n.responses[s].content[o].examples={});let a={};Object.entries(p).forEach(([t,c])=>{let r=!1;f.forEach(({regex:i,transformer:l})=>{if(!r&&i.test(o)){let O="";e.components?.examples?.[t]?O=e.components.examples[t].value:c.$ref?O=(e.components?.examples?.[c.$ref.replace("#/components/examples/","")]).value:typeof c.value=="string"&&(O=c.value),a[t]={value:l(O)},r=!0;}}),r||(a[t]=e.components?.examples?.[t]===void 0?c:{$ref:`#/components/examples/${t}`});}),n.responses[s].content[o].examples=a;},v=(e,n,s,o,f,p,a,t)=>{let c=j(p.trim().replace("/",""));Object.keys(o.content).forEach(r=>{r!==P&&Object.entries(f??{}).forEach(([i,l])=>{l&&(C(e,c,t),k(e,n,s,i,a,t));});});};function m(e,n,s=[{regex:/xml/u,transformer:o=>toXML(o,{header:!0,indent:" "})},{regex:/yaml|yml/,transformer:o=>stringify(o,{indent:2})}]){return typeof e=="object"&&typeof e.paths=="object"&&Object.entries(e.paths).forEach(([o,f])=>{Object.values(f).forEach(p=>{typeof p.responses=="object"&&Object.entries(p.responses).forEach(([a,t])=>{if(typeof t.content=="object"){let{example:c,examples:r}=M(p,t,n,o,e,a);c!==void 0?T(p,t,a,n,s,c):r!==void 0&&v(e,p,a,t,n,o,s,r);}});});}),e}var X=J("visulima:api-platform:swagger:crud:get-static-properties-swagger"),q=(e={})=>{let{allowedMediaTypes:n={"application/json":!0},crud:s,specs:o,swaggerFilePath:f}=e;return async(p,a)=>{let t=join(process.cwd(),f??"swagger/swagger.json");if(!existsSync(t))throw new Error(`Swagger file not found at "${t}".`);let c=readFileSync(t,"utf8"),r=m(JSON.parse(c),n),i={};if(s!==void 0)try{let O=await modelsToOpenApi(s);i={components:{examples:O.examples,schemas:O.schemas},paths:O.paths,tags:O.tags},i=m(i,n),X(JSON.stringify(i,null,2)),r=u(r,i);}catch(O){throw console.log(O),new Error("Please install @visulima/crud to use the crud swagger generator.")}Array.isArray(o)&&o.forEach(O=>{r=u(r,m(O,n));});let l;typeof p.headers.accept=="string"&&/yaml|yml/.test(p.headers.accept)?(a.setHeader("Content-Type",p.headers.accept),l=I(r)):(a.setHeader("Content-Type","application/json"),l=JSON.stringify(r,null,2)),a.statusCode=200,a.end(l);}},re=q;
10
-
11
- export { j as a, I as b, re as c };
12
- //# sourceMappingURL=chunk-T4ABIWHW.mjs.map
1
+ import {stringify}from'yaml';import {existsSync,readFileSync}from'node:fs';import {modelsToOpenApi}from'@visulima/crud';import {join}from'@visulima/path';import J from'debug';import u from'lodash.merge';import {toXML}from'jstoxml';var y=e=>stringify(e,{indent:2}),I=y;var j=e=>e.toLowerCase().replaceAll(/[^\s\w]/gu," ").trimEnd().replaceAll(/\s+|_/gu,"-").replaceAll(/\b\w/gu,n=>n.toUpperCase());var P="application/json",A=(e,n,s)=>{e.responses[n].content===void 0&&(e.responses[n].content={}),e.responses[n].content?.[s]===void 0&&(e.responses[n].content[s]={});},h=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.schemas!="object"&&(e.components.schemas={}),e.components.schemas[n]===void 0&&(e.components.schemas[n]=s);},E=(e,n,s,o,f)=>{A(e,n,s),e.responses[n].content?.[s]?.schema===void 0&&(e.responses[n].content[s].schema={}),e.responses[n].content[s].schema=f?{items:{$ref:`#/components/schemas/${o}`},type:"array"}:{$ref:`#/components/schemas/${o}`};},M=(e,n,s,o,f,p)=>{let a,t;return Object.entries(n.content).forEach(([c,r])=>{if(typeof r.schema=="object"){let{schema:i}=r;c===P&&r.examples!==void 0?t=r.examples:c===P&&r.example!==void 0&&(a=r.example);let l=i.type==="array";Object.entries(s??{}).forEach(([O,V])=>{if(!V)return;let g;i?.$ref===void 0?(g=`${j(o.trim().replace("/",""))}${O==="application/ld+json"?".jsonld":""}`,h(f,g,i)):g=i.$ref.replace("#/components/schemas/",""),E(e,p,O,g,l);});}}),{example:a,examples:t}},T=(e,n,s,o,f,p)=>{Object.keys(n.content).forEach(a=>{a!==P&&Object.entries(o??{}).forEach(([t,c])=>{if(!c)return;A(e,s,t),e.responses[s].content?.[t]?.example===void 0&&(e.responses[s].content[t].example={});let r=!1;f.forEach(({regex:i,transformer:l})=>{!r&&i.test(t)&&(e.responses[s].content[t].example=l(p),r=!0);}),r||(e.responses[s].content[t].example=p);});});},C=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.examples!="object"&&(e.components.examples={}),e.components.examples[n]===void 0&&s[n]!==void 0&&(e.components.examples[n]=s[n]);},k=(e,n,s,o,f,p)=>{A(n,s,o),n.responses[s].content?.[o]?.examples===void 0&&(n.responses[s].content[o].examples={});let a={};Object.entries(p).forEach(([t,c])=>{let r=!1;f.forEach(({regex:i,transformer:l})=>{if(!r&&i.test(o)){let O="";e.components?.examples?.[t]?O=e.components.examples[t].value:c.$ref?O=(e.components?.examples?.[c.$ref.replace("#/components/examples/","")]).value:typeof c.value=="string"&&(O=c.value),a[t]={value:l(O)},r=!0;}}),r||(a[t]=e.components?.examples?.[t]===void 0?c:{$ref:`#/components/examples/${t}`});}),n.responses[s].content[o].examples=a;},v=(e,n,s,o,f,p,a,t)=>{let c=j(p.trim().replace("/",""));Object.keys(o.content).forEach(r=>{r!==P&&Object.entries(f??{}).forEach(([i,l])=>{l&&(C(e,c,t),k(e,n,s,i,a,t));});});};function m(e,n,s=[{regex:/xml/u,transformer:o=>toXML(o,{header:!0,indent:" "})},{regex:/yaml|yml/,transformer:o=>stringify(o,{indent:2})}]){return typeof e=="object"&&typeof e.paths=="object"&&Object.entries(e.paths).forEach(([o,f])=>{Object.values(f).forEach(p=>{typeof p.responses=="object"&&Object.entries(p.responses).forEach(([a,t])=>{if(typeof t.content=="object"){let{example:c,examples:r}=M(p,t,n,o,e,a);c!==void 0?T(p,t,a,n,s,c):r!==void 0&&v(e,p,a,t,n,o,s,r);}});});}),e}var X=J("visulima:api-platform:swagger:crud:get-static-properties-swagger"),q=(e={})=>{let{allowedMediaTypes:n={"application/json":!0},crud:s,specs:o,swaggerFilePath:f}=e;return async(p,a)=>{let t=join(process.cwd(),f??"swagger/swagger.json");if(!existsSync(t))throw new Error(`Swagger file not found at "${t}".`);let c=readFileSync(t,"utf8"),r=m(JSON.parse(c),n),i={};if(s!==void 0)try{let O=await modelsToOpenApi(s);i={components:{examples:O.examples,schemas:O.schemas},paths:O.paths,tags:O.tags},i=m(i,n),X(JSON.stringify(i,null,2)),r=u(r,i);}catch(O){throw console.log(O),new Error("Please install @visulima/crud to use the crud swagger generator.")}Array.isArray(o)&&o.forEach(O=>{r=u(r,m(O,n));});let l;typeof p.headers.accept=="string"&&/yaml|yml/.test(p.headers.accept)?(a.setHeader("Content-Type",p.headers.accept),l=I(r)):(a.setHeader("Content-Type","application/json"),l=JSON.stringify(r,null,2)),a.statusCode=200,a.end(l);}},re=q;export{j as a,I as b,re as c};//# sourceMappingURL=chunk-T4ABIWHW.mjs.map
13
2
  //# sourceMappingURL=chunk-T4ABIWHW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/serializers/transformer/yaml.ts","../src/utils.ts","../src/swagger/extend-swagger-spec.ts","../src/swagger/api/swagger-handler.ts"],"names":["yamlTransformer","data","stringify","yaml_default","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","toXML","pathSpec","swaggerCrudDebug","debug","swaggerHandler","options","crud","specs","swaggerFilePath","request","response","swaggerPath","join","existsSync","fileContents","readFileSync","crudSwagger","modelsOpenApi","modelsToOpenApi","merge","error","swagger_handler_default"],"mappings":"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","file":"chunk-T4ABIWHW.mjs","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 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","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 { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport { join } from \"@visulima/path\";\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 = 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"]}
1
+ {"version":3,"sources":["../src/serializers/transformer/yaml.ts","../src/utils.ts","../src/swagger/extend-swagger-spec.ts","../src/swagger/api/swagger-handler.ts"],"names":["yamlTransformer","data","stringify","yaml_default","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","toXML","pathSpec","swaggerCrudDebug","debug","swaggerHandler","options","crud","specs","swaggerFilePath","request","response","swaggerPath","join","existsSync","fileContents","readFileSync","crudSwagger","modelsOpenApi","modelsToOpenApi","merge","error","swagger_handler_default"],"mappings":"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","file":"chunk-T4ABIWHW.mjs","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 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","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 { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport { join } from \"@visulima/path\";\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 = 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"]}
@@ -1,13 +1,2 @@
1
- 'use strict';
2
-
3
- var chunk4C666HHU_js = require('./chunk-4C666HHU.js');
4
- var zodToTs = require('zod-to-ts');
5
- var zod = require('zod');
6
-
7
- var I={};chunk4C666HHU_js.a(I,{dateIn:()=>v,dateOut:()=>K});var l="ZodDateIn",g=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?)?Z?$/,d=class a extends zod.ZodType{static create=()=>new a({typeName:l});_parse(t){let{ctx:e,status:r}=this._processInputParams(t);if(e.parsedType!==zod.ZodParsedType.string)return zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_type,expected:zod.ZodParsedType.string,received:e.parsedType}),zod.INVALID;g.test(e.data)||(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_string,validation:"regex"}),r.dirty());let i=new Date(e.data);return Number.isNaN(i.getTime())?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_date}),zod.INVALID):{status:r.value,value:i}}};var P="ZodDateOut",o=class a extends zod.ZodType{static create=()=>new a({typeName:P});_parse(t){let{ctx:e,status:r}=this._processInputParams(t);return e.parsedType!==zod.ZodParsedType.date?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_type,expected:zod.ZodParsedType.date,received:e.parsedType}),zod.INVALID):Number.isNaN(e.data.getTime())?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_date}),zod.INVALID):{status:r.value,value:e.data.toISOString()}}};var v=(...a)=>zodToTs.withGetType(d.create(...a),t=>t.factory.createKeywordTypeNode(t.SyntaxKind.StringKeyword)),K=(...a)=>zodToTs.withGetType(o.create(...a),t=>t.factory.createKeywordTypeNode(t.SyntaxKind.StringKeyword));
8
-
9
- exports.a = v;
10
- exports.b = K;
11
- exports.c = I;
12
- //# sourceMappingURL=chunk-UPRO35MO.js.map
1
+ 'use strict';var chunk4C666HHU_js=require('./chunk-4C666HHU.js'),zodToTs=require('zod-to-ts'),zod=require('zod');var I={};chunk4C666HHU_js.a(I,{dateIn:()=>v,dateOut:()=>K});var l="ZodDateIn",g=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?)?Z?$/,d=class a extends zod.ZodType{static create=()=>new a({typeName:l});_parse(t){let{ctx:e,status:r}=this._processInputParams(t);if(e.parsedType!==zod.ZodParsedType.string)return zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_type,expected:zod.ZodParsedType.string,received:e.parsedType}),zod.INVALID;g.test(e.data)||(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_string,validation:"regex"}),r.dirty());let i=new Date(e.data);return Number.isNaN(i.getTime())?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_date}),zod.INVALID):{status:r.value,value:i}}};var P="ZodDateOut",o=class a extends zod.ZodType{static create=()=>new a({typeName:P});_parse(t){let{ctx:e,status:r}=this._processInputParams(t);return e.parsedType!==zod.ZodParsedType.date?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_type,expected:zod.ZodParsedType.date,received:e.parsedType}),zod.INVALID):Number.isNaN(e.data.getTime())?(zod.addIssueToContext(e,{code:zod.ZodIssueCode.invalid_date}),zod.INVALID):{status:r.value,value:e.data.toISOString()}}};var v=(...a)=>zodToTs.withGetType(d.create(...a),t=>t.factory.createKeywordTypeNode(t.SyntaxKind.StringKeyword)),K=(...a)=>zodToTs.withGetType(o.create(...a),t=>t.factory.createKeywordTypeNode(t.SyntaxKind.StringKeyword));exports.a=v;exports.b=K;exports.c=I;//# sourceMappingURL=chunk-UPRO35MO.js.map
13
2
  //# sourceMappingURL=chunk-UPRO35MO.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/zod/index.ts","../src/zod/date-in-schema.ts","../src/zod/date-out-schema.ts"],"names":["zod_exports","__export","dateIn","dateOut","zodDateInKind","isoDateRegex","ZodDateIn","_ZodDateIn","ZodType","input","ctx","status","ZodParsedType","addIssueToContext","ZodIssueCode","INVALID","date","zodDateOutKind","ZodDateOut","_ZodDateOut","parameters","withGetType","ts"],"mappings":"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","file":"chunk-UPRO35MO.js","sourcesContent":["import { withGetType } from \"zod-to-ts\";\n\nimport { ZodDateIn } from \"./date-in-schema\";\nimport { ZodDateOut } from \"./date-out-schema\";\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const dateIn = (...parameters: Parameters<typeof ZodDateIn.create>) =>\n withGetType(ZodDateIn.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const dateOut = (...parameters: Parameters<typeof ZodDateOut.create>) =>\n withGetType(ZodDateOut.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));\n","import type { ParseInput, ParseReturnType, ZodTypeDef } from \"zod\";\nimport { addIssueToContext, INVALID, ZodIssueCode, ZodParsedType, ZodType } from \"zod\";\n\nconst zodDateInKind = \"ZodDateIn\";\n\n// simple regex for ISO date, supports the following formats:\n// 2021-01-01T00:00:00.000Z\n// 2021-01-01T00:00:00Z\n// 2021-01-01T00:00:00\n// 2021-01-01\n// eslint-disable-next-line security/detect-unsafe-regex\nexport const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?)?Z?$/;\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport interface ZodDateInDef extends ZodTypeDef {\n typeName: typeof zodDateInKind;\n}\n\nexport class ZodDateIn extends ZodType<Date, ZodDateInDef, string> {\n public static create = (): ZodDateIn =>\n new ZodDateIn({\n typeName: zodDateInKind,\n });\n\n // eslint-disable-next-line no-underscore-dangle\n public _parse(input: ParseInput): ParseReturnType<Date> {\n // eslint-disable-next-line no-underscore-dangle\n const { ctx, status } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.string) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n\n if (!isoDateRegex.test(ctx.data as string)) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"regex\",\n });\n status.dirty();\n }\n\n const date = new Date(ctx.data as string);\n\n if (Number.isNaN(date.getTime())) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n\n return { status: status.value, value: date };\n }\n}\n","import type { ParseInput, ParseReturnType, ZodTypeDef } from \"zod\";\nimport { addIssueToContext, INVALID, ZodIssueCode, ZodParsedType, ZodType } from \"zod\";\n\nconst zodDateOutKind = \"ZodDateOut\";\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport interface ZodDateOutDef extends ZodTypeDef {\n typeName: typeof zodDateOutKind;\n}\n\nexport class ZodDateOut extends ZodType<string, ZodDateOutDef, Date> {\n public static create = (): ZodDateOut =>\n new ZodDateOut({\n typeName: zodDateOutKind,\n });\n\n // eslint-disable-next-line no-underscore-dangle\n public _parse(input: ParseInput): ParseReturnType<string> {\n // eslint-disable-next-line no-underscore-dangle\n const { ctx, status } = this._processInputParams(input);\n\n if (ctx.parsedType !== ZodParsedType.date) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n\n if (Number.isNaN(ctx.data.getTime())) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n\n return { status: status.value, value: (ctx.data as Date).toISOString() };\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/zod/index.ts","../src/zod/date-in-schema.ts","../src/zod/date-out-schema.ts"],"names":["zod_exports","__export","dateIn","dateOut","zodDateInKind","isoDateRegex","ZodDateIn","_ZodDateIn","ZodType","input","ctx","status","ZodParsedType","addIssueToContext","ZodIssueCode","INVALID","date","zodDateOutKind","ZodDateOut","_ZodDateOut","parameters","withGetType","ts"],"mappings":"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","file":"chunk-UPRO35MO.js","sourcesContent":["import { withGetType } from \"zod-to-ts\";\n\nimport { ZodDateIn } from \"./date-in-schema\";\nimport { ZodDateOut } from \"./date-out-schema\";\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const dateIn = (...parameters: Parameters<typeof ZodDateIn.create>) =>\n withGetType(ZodDateIn.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const dateOut = (...parameters: Parameters<typeof ZodDateOut.create>) =>\n withGetType(ZodDateOut.create(...parameters), (ts) => ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword));\n","import type { ParseInput, ParseReturnType, ZodTypeDef } from \"zod\";\nimport { addIssueToContext, INVALID, ZodIssueCode, ZodParsedType, ZodType } from \"zod\";\n\nconst zodDateInKind = \"ZodDateIn\";\n\n// simple regex for ISO date, supports the following formats:\n// 2021-01-01T00:00:00.000Z\n// 2021-01-01T00:00:00Z\n// 2021-01-01T00:00:00\n// 2021-01-01\n// eslint-disable-next-line security/detect-unsafe-regex\nexport const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?)?Z?$/;\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport interface ZodDateInDef extends ZodTypeDef {\n typeName: typeof zodDateInKind;\n}\n\nexport class ZodDateIn extends ZodType<Date, ZodDateInDef, string> {\n public static create = (): ZodDateIn =>\n new ZodDateIn({\n typeName: zodDateInKind,\n });\n\n // eslint-disable-next-line no-underscore-dangle\n public _parse(input: ParseInput): ParseReturnType<Date> {\n // eslint-disable-next-line no-underscore-dangle\n const { ctx, status } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.string) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n\n if (!isoDateRegex.test(ctx.data as string)) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"regex\",\n });\n status.dirty();\n }\n\n const date = new Date(ctx.data as string);\n\n if (Number.isNaN(date.getTime())) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n\n return { status: status.value, value: date };\n }\n}\n","import type { ParseInput, ParseReturnType, ZodTypeDef } from \"zod\";\nimport { addIssueToContext, INVALID, ZodIssueCode, ZodParsedType, ZodType } from \"zod\";\n\nconst zodDateOutKind = \"ZodDateOut\";\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport interface ZodDateOutDef extends ZodTypeDef {\n typeName: typeof zodDateOutKind;\n}\n\nexport class ZodDateOut extends ZodType<string, ZodDateOutDef, Date> {\n public static create = (): ZodDateOut =>\n new ZodDateOut({\n typeName: zodDateOutKind,\n });\n\n // eslint-disable-next-line no-underscore-dangle\n public _parse(input: ParseInput): ParseReturnType<string> {\n // eslint-disable-next-line no-underscore-dangle\n const { ctx, status } = this._processInputParams(input);\n\n if (ctx.parsedType !== ZodParsedType.date) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n\n if (Number.isNaN(ctx.data.getTime())) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n\n return { status: status.value, value: (ctx.data as Date).toISOString() };\n }\n}\n"]}
@@ -1,23 +1,2 @@
1
- 'use strict';
2
-
3
- var yaml = require('yaml');
4
- var fs = require('fs');
5
- var crud = require('@visulima/crud');
6
- var path = require('@visulima/path');
7
- var H = require('debug');
8
- var I = require('lodash.merge');
9
- var jstoxml = require('jstoxml');
10
- require('url');
11
-
12
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
-
14
- var H__default = /*#__PURE__*/_interopDefault(H);
15
- var I__default = /*#__PURE__*/_interopDefault(I);
16
-
17
- var R=e=>yaml.stringify(e,{indent:2}),A=R;var d=e=>e.toLowerCase().replaceAll(/[^\s\w]/gu," ").trimEnd().replaceAll(/\s+|_/gu,"-").replaceAll(/\b\w/gu,n=>n.toUpperCase());var P="application/json",j=(e,n,s)=>{e.responses[n].content===void 0&&(e.responses[n].content={}),e.responses[n].content?.[s]===void 0&&(e.responses[n].content[s]={});},w=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.schemas!="object"&&(e.components.schemas={}),e.components.schemas[n]===void 0&&(e.components.schemas[n]=s);},h=(e,n,s,o,f)=>{j(e,n,s),e.responses[n].content?.[s]?.schema===void 0&&(e.responses[n].content[s].schema={}),e.responses[n].content[s].schema=f?{items:{$ref:`#/components/schemas/${o}`},type:"array"}:{$ref:`#/components/schemas/${o}`};},E=(e,n,s,o,f,p)=>{let a,t;return Object.entries(n.content).forEach(([c,r])=>{if(typeof r.schema=="object"){let{schema:i}=r;c===P&&r.examples!==void 0?t=r.examples:c===P&&r.example!==void 0&&(a=r.example);let l=i.type==="array";Object.entries(s??{}).forEach(([O,u])=>{if(!u)return;let g;i?.$ref===void 0?(g=`${d(o.trim().replace("/",""))}${O==="application/ld+json"?".jsonld":""}`,w(f,g,i)):g=i.$ref.replace("#/components/schemas/",""),h(e,p,O,g,l);});}}),{example:a,examples:t}},M=(e,n,s,o,f,p)=>{Object.keys(n.content).forEach(a=>{a!==P&&Object.entries(o??{}).forEach(([t,c])=>{if(!c)return;j(e,s,t),e.responses[s].content?.[t]?.example===void 0&&(e.responses[s].content[t].example={});let r=!1;f.forEach(({regex:i,transformer:l})=>{!r&&i.test(t)&&(e.responses[s].content[t].example=l(p),r=!0);}),r||(e.responses[s].content[t].example=p);});});},T=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.examples!="object"&&(e.components.examples={}),e.components.examples[n]===void 0&&s[n]!==void 0&&(e.components.examples[n]=s[n]);},C=(e,n,s,o,f,p)=>{j(n,s,o),n.responses[s].content?.[o]?.examples===void 0&&(n.responses[s].content[o].examples={});let a={};Object.entries(p).forEach(([t,c])=>{let r=!1;f.forEach(({regex:i,transformer:l})=>{if(!r&&i.test(o)){let O="";e.components?.examples?.[t]?O=e.components.examples[t].value:c.$ref?O=(e.components?.examples?.[c.$ref.replace("#/components/examples/","")]).value:typeof c.value=="string"&&(O=c.value),a[t]={value:l(O)},r=!0;}}),r||(a[t]=e.components?.examples?.[t]===void 0?c:{$ref:`#/components/examples/${t}`});}),n.responses[s].content[o].examples=a;},k=(e,n,s,o,f,p,a,t)=>{let c=d(p.trim().replace("/",""));Object.keys(o.content).forEach(r=>{r!==P&&Object.entries(f??{}).forEach(([i,l])=>{l&&(T(e,c,t),C(e,n,s,i,a,t));});});};function m(e,n,s=[{regex:/xml/u,transformer:o=>jstoxml.toXML(o,{header:!0,indent:" "})},{regex:/yaml|yml/,transformer:o=>yaml.stringify(o,{indent:2})}]){return typeof e=="object"&&typeof e.paths=="object"&&Object.entries(e.paths).forEach(([o,f])=>{Object.values(f).forEach(p=>{typeof p.responses=="object"&&Object.entries(p.responses).forEach(([a,t])=>{if(typeof t.content=="object"){let{example:c,examples:r}=E(p,t,n,o,e,a);c!==void 0?M(p,t,a,n,s,c):r!==void 0&&k(e,p,a,t,n,o,s,r);}});});}),e}var J=H__default.default("visulima:api-platform:swagger:crud:get-static-properties-swagger"),X=(e={})=>{let{allowedMediaTypes:n={"application/json":!0},crud:s,specs:o,swaggerFilePath:f}=e;return async(p,a)=>{let t=path.join(process.cwd(),f??"swagger/swagger.json");if(!fs.existsSync(t))throw new Error(`Swagger file not found at "${t}".`);let c=fs.readFileSync(t,"utf8"),r=m(JSON.parse(c),n),i={};if(s!==void 0)try{let O=await crud.modelsToOpenApi(s);i={components:{examples:O.examples,schemas:O.schemas},paths:O.paths,tags:O.tags},i=m(i,n),J(JSON.stringify(i,null,2)),r=I__default.default(r,i);}catch(O){throw console.log(O),new Error("Please install @visulima/crud to use the crud swagger generator.")}Array.isArray(o)&&o.forEach(O=>{r=I__default.default(r,m(O,n));});let l;typeof p.headers.accept=="string"&&/yaml|yml/.test(p.headers.accept)?(a.setHeader("Content-Type",p.headers.accept),l=A(r)):(a.setHeader("Content-Type","application/json"),l=JSON.stringify(r,null,2)),a.statusCode=200,a.end(l);}},oe=X;
18
-
19
- exports.a = d;
20
- exports.b = A;
21
- exports.c = oe;
22
- //# sourceMappingURL=chunk-YG667K32.js.map
1
+ 'use strict';var yaml=require('yaml'),fs=require('fs'),crud=require('@visulima/crud'),path=require('@visulima/path'),H=require('debug'),I=require('lodash.merge'),jstoxml=require('jstoxml');require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var H__default=/*#__PURE__*/_interopDefault(H);var I__default=/*#__PURE__*/_interopDefault(I);var R=e=>yaml.stringify(e,{indent:2}),A=R;var d=e=>e.toLowerCase().replaceAll(/[^\s\w]/gu," ").trimEnd().replaceAll(/\s+|_/gu,"-").replaceAll(/\b\w/gu,n=>n.toUpperCase());var P="application/json",j=(e,n,s)=>{e.responses[n].content===void 0&&(e.responses[n].content={}),e.responses[n].content?.[s]===void 0&&(e.responses[n].content[s]={});},w=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.schemas!="object"&&(e.components.schemas={}),e.components.schemas[n]===void 0&&(e.components.schemas[n]=s);},h=(e,n,s,o,f)=>{j(e,n,s),e.responses[n].content?.[s]?.schema===void 0&&(e.responses[n].content[s].schema={}),e.responses[n].content[s].schema=f?{items:{$ref:`#/components/schemas/${o}`},type:"array"}:{$ref:`#/components/schemas/${o}`};},E=(e,n,s,o,f,p)=>{let a,t;return Object.entries(n.content).forEach(([c,r])=>{if(typeof r.schema=="object"){let{schema:i}=r;c===P&&r.examples!==void 0?t=r.examples:c===P&&r.example!==void 0&&(a=r.example);let l=i.type==="array";Object.entries(s??{}).forEach(([O,u])=>{if(!u)return;let g;i?.$ref===void 0?(g=`${d(o.trim().replace("/",""))}${O==="application/ld+json"?".jsonld":""}`,w(f,g,i)):g=i.$ref.replace("#/components/schemas/",""),h(e,p,O,g,l);});}}),{example:a,examples:t}},M=(e,n,s,o,f,p)=>{Object.keys(n.content).forEach(a=>{a!==P&&Object.entries(o??{}).forEach(([t,c])=>{if(!c)return;j(e,s,t),e.responses[s].content?.[t]?.example===void 0&&(e.responses[s].content[t].example={});let r=!1;f.forEach(({regex:i,transformer:l})=>{!r&&i.test(t)&&(e.responses[s].content[t].example=l(p),r=!0);}),r||(e.responses[s].content[t].example=p);});});},T=(e,n,s)=>{typeof e.components!="object"&&(e.components={}),typeof e.components.examples!="object"&&(e.components.examples={}),e.components.examples[n]===void 0&&s[n]!==void 0&&(e.components.examples[n]=s[n]);},C=(e,n,s,o,f,p)=>{j(n,s,o),n.responses[s].content?.[o]?.examples===void 0&&(n.responses[s].content[o].examples={});let a={};Object.entries(p).forEach(([t,c])=>{let r=!1;f.forEach(({regex:i,transformer:l})=>{if(!r&&i.test(o)){let O="";e.components?.examples?.[t]?O=e.components.examples[t].value:c.$ref?O=(e.components?.examples?.[c.$ref.replace("#/components/examples/","")]).value:typeof c.value=="string"&&(O=c.value),a[t]={value:l(O)},r=!0;}}),r||(a[t]=e.components?.examples?.[t]===void 0?c:{$ref:`#/components/examples/${t}`});}),n.responses[s].content[o].examples=a;},k=(e,n,s,o,f,p,a,t)=>{let c=d(p.trim().replace("/",""));Object.keys(o.content).forEach(r=>{r!==P&&Object.entries(f??{}).forEach(([i,l])=>{l&&(T(e,c,t),C(e,n,s,i,a,t));});});};function m(e,n,s=[{regex:/xml/u,transformer:o=>jstoxml.toXML(o,{header:!0,indent:" "})},{regex:/yaml|yml/,transformer:o=>yaml.stringify(o,{indent:2})}]){return typeof e=="object"&&typeof e.paths=="object"&&Object.entries(e.paths).forEach(([o,f])=>{Object.values(f).forEach(p=>{typeof p.responses=="object"&&Object.entries(p.responses).forEach(([a,t])=>{if(typeof t.content=="object"){let{example:c,examples:r}=E(p,t,n,o,e,a);c!==void 0?M(p,t,a,n,s,c):r!==void 0&&k(e,p,a,t,n,o,s,r);}});});}),e}var J=H__default.default("visulima:api-platform:swagger:crud:get-static-properties-swagger"),X=(e={})=>{let{allowedMediaTypes:n={"application/json":!0},crud:s,specs:o,swaggerFilePath:f}=e;return async(p,a)=>{let t=path.join(process.cwd(),f??"swagger/swagger.json");if(!fs.existsSync(t))throw new Error(`Swagger file not found at "${t}".`);let c=fs.readFileSync(t,"utf8"),r=m(JSON.parse(c),n),i={};if(s!==void 0)try{let O=await crud.modelsToOpenApi(s);i={components:{examples:O.examples,schemas:O.schemas},paths:O.paths,tags:O.tags},i=m(i,n),J(JSON.stringify(i,null,2)),r=I__default.default(r,i);}catch(O){throw console.log(O),new Error("Please install @visulima/crud to use the crud swagger generator.")}Array.isArray(o)&&o.forEach(O=>{r=I__default.default(r,m(O,n));});let l;typeof p.headers.accept=="string"&&/yaml|yml/.test(p.headers.accept)?(a.setHeader("Content-Type",p.headers.accept),l=A(r)):(a.setHeader("Content-Type","application/json"),l=JSON.stringify(r,null,2)),a.statusCode=200,a.end(l);}},oe=X;exports.a=d;exports.b=A;exports.c=oe;//# sourceMappingURL=chunk-YG667K32.js.map
23
2
  //# sourceMappingURL=chunk-YG667K32.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/serializers/transformer/yaml.ts","../src/utils.ts","../src/swagger/extend-swagger-spec.ts","../src/swagger/api/swagger-handler.ts"],"names":["yamlTransformer","data","stringify","yaml_default","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","toXML","pathSpec","swaggerCrudDebug","debug","swaggerHandler","options","crud","specs","swaggerFilePath","request","response","swaggerPath","join","existsSync","fileContents","readFileSync","crudSwagger","modelsOpenApi","modelsToOpenApi","merge","error","swagger_handler_default"],"mappings":"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","file":"chunk-YG667K32.js","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 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","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 { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport { join } from \"@visulima/path\";\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 = 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"]}
1
+ {"version":3,"sources":["../src/serializers/transformer/yaml.ts","../src/utils.ts","../src/swagger/extend-swagger-spec.ts","../src/swagger/api/swagger-handler.ts"],"names":["yamlTransformer","data","stringify","yaml_default","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","toXML","pathSpec","swaggerCrudDebug","debug","swaggerHandler","options","crud","specs","swaggerFilePath","request","response","swaggerPath","join","existsSync","fileContents","readFileSync","crudSwagger","modelsOpenApi","modelsToOpenApi","merge","error","swagger_handler_default"],"mappings":"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","file":"chunk-YG667K32.js","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 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","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 { existsSync, readFileSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport type { ModelsToOpenApiParameters, SwaggerModelsConfig } from \"@visulima/crud\";\nimport { modelsToOpenApi } from \"@visulima/crud\";\nimport { join } from \"@visulima/path\";\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 = 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"]}
@@ -1,11 +1,2 @@
1
- 'use strict';
2
-
3
- var chunkINI6VCIA_js = require('../../../chunk-INI6VCIA.js');
4
- require('../../../chunk-4C666HHU.js');
5
- var process = require('process');
6
-
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 chunkINI6VCIA_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
-
9
- exports.listCommand = m;
10
- //# sourceMappingURL=index.js.map
1
+ 'use strict';var chunkNZTDUEZE_js=require('../../../chunk-NZTDUEZE.js');require('../../../chunk-4C666HHU.js');var process=require('process');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 chunkNZTDUEZE_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;exports.listCommand=m;//# sourceMappingURL=index.js.map
11
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/framework/cli/commander/command/list-command.ts"],"names":["listCommand","program","commandName","description","options","list_command_default","error","exit"],"mappings":";;;;;;AAMA,IAAMA,EAAc,CAChBC,CAAAA,CACAC,EAAc,MACdC,CAAAA,CAAAA,CAAc,iGACP,CACPF,CAAAA,CACK,QAAQC,CAAW,CAAA,CACnB,YAAYC,CAAW,CAAA,CACvB,MAAO,CAAA,yBAAA,CAA2B,oEAAoE,CAAA,CACtG,OAAO,mBAAqB,CAAA,KAAK,EACjC,MAAO,CAAA,gBAAA,CAAkB,qCAAqC,CAC9D,CAAA,MAAA,CAAO,wBAAyB,mFAAqF,CAAA,EAAE,CACvH,CAAA,MAAA,CAAO,wBAAyB,8EAAgF,CAAA,EAAE,CAClH,CAAA,MAAA,CAAO,eAAiB,CAAA,iBAAA,CAAmB,CAAK,CAAA,CAAA,CAChD,OACG,MAAOC,CAAAA,EAOD,CACF,GAAI,CACA,MAAMC,kBAAQD,CAAAA,CAAAA,CAAQ,UAAWA,CAAQ,CAAA,IAAA,CAAM,CAC3C,YAAcA,CAAAA,CAAAA,CAAQ,cAAgB,EAAC,CACvC,MAAOA,CAAQ,CAAA,KAAA,CACf,YAAcA,CAAAA,CAAAA,CAAQ,WAAe,EAAA,GACrC,OAASA,CAAAA,CAAAA,CAAQ,OACrB,CAAC,EACL,OAASE,CAAY,CAAA,CAEjB,QAAQ,GAAI,EAAA,CAEZ,QAAQ,KAAMA,CAAAA,CAAK,EACnBC,YAAK,CAAA,CAAC,EACV,CACJ,CACJ,EACR,CAAA,CAEOF,CAAQL,CAAAA","file":"index.js","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
+ {"version":3,"sources":["../../../../src/framework/cli/commander/command/list-command.ts"],"names":["listCommand","program","commandName","description","options","list_command_default","error","exit"],"mappings":"6IAMA,IAAMA,EAAc,CAChBC,CAAAA,CACAC,EAAc,MACdC,CAAAA,CAAAA,CAAc,iGACP,CACPF,CAAAA,CACK,QAAQC,CAAW,CAAA,CACnB,YAAYC,CAAW,CAAA,CACvB,MAAO,CAAA,yBAAA,CAA2B,oEAAoE,CAAA,CACtG,OAAO,mBAAqB,CAAA,KAAK,EACjC,MAAO,CAAA,gBAAA,CAAkB,qCAAqC,CAC9D,CAAA,MAAA,CAAO,wBAAyB,mFAAqF,CAAA,EAAE,CACvH,CAAA,MAAA,CAAO,wBAAyB,8EAAgF,CAAA,EAAE,CAClH,CAAA,MAAA,CAAO,eAAiB,CAAA,iBAAA,CAAmB,CAAK,CAAA,CAAA,CAChD,OACG,MAAOC,CAAAA,EAOD,CACF,GAAI,CACA,MAAMC,kBAAQD,CAAAA,CAAAA,CAAQ,UAAWA,CAAQ,CAAA,IAAA,CAAM,CAC3C,YAAcA,CAAAA,CAAAA,CAAQ,cAAgB,EAAC,CACvC,MAAOA,CAAQ,CAAA,KAAA,CACf,YAAcA,CAAAA,CAAAA,CAAQ,WAAe,EAAA,GACrC,OAASA,CAAAA,CAAAA,CAAQ,OACrB,CAAC,EACL,OAASE,CAAY,CAAA,CAEjB,QAAQ,GAAI,EAAA,CAEZ,QAAQ,KAAMA,CAAAA,CAAK,EACnBC,YAAK,CAAA,CAAC,EACV,CACJ,CACJ,EACR,CAAA,CAEOF,CAAQL,CAAAA","file":"index.js","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,2 @@
1
- import { a } from '../../../chunk-GLAABR73.mjs';
2
- import '../../../chunk-HZWWJL43.mjs';
3
- import { exit } from 'node:process';
4
-
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
-
7
- export { l as listCommand };
8
- //# sourceMappingURL=index.mjs.map
1
+ import {a}from'../../../chunk-7PKKRTN7.mjs';import'../../../chunk-HZWWJL43.mjs';import {exit}from'node:process';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;export{l as listCommand};//# sourceMappingURL=index.mjs.map
9
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/framework/cli/commander/command/list-command.ts"],"names":["listCommand","program","commandName","description","options","list_command_default","error","exit"],"mappings":";;;;AAMA,IAAMA,EAAc,CAChBC,CAAAA,CACAC,EAAc,MACdC,CAAAA,CAAAA,CAAc,iGACP,CACPF,CAAAA,CACK,QAAQC,CAAW,CAAA,CACnB,YAAYC,CAAW,CAAA,CACvB,MAAO,CAAA,yBAAA,CAA2B,oEAAoE,CAAA,CACtG,OAAO,mBAAqB,CAAA,KAAK,EACjC,MAAO,CAAA,gBAAA,CAAkB,qCAAqC,CAC9D,CAAA,MAAA,CAAO,wBAAyB,mFAAqF,CAAA,EAAE,CACvH,CAAA,MAAA,CAAO,wBAAyB,8EAAgF,CAAA,EAAE,CAClH,CAAA,MAAA,CAAO,eAAiB,CAAA,iBAAA,CAAmB,CAAK,CAAA,CAAA,CAChD,OACG,MAAOC,CAAAA,EAOD,CACF,GAAI,CACA,MAAMC,CAAQD,CAAAA,CAAAA,CAAQ,UAAWA,CAAQ,CAAA,IAAA,CAAM,CAC3C,YAAcA,CAAAA,CAAAA,CAAQ,cAAgB,EAAC,CACvC,MAAOA,CAAQ,CAAA,KAAA,CACf,YAAcA,CAAAA,CAAAA,CAAQ,WAAe,EAAA,GACrC,OAASA,CAAAA,CAAAA,CAAQ,OACrB,CAAC,EACL,OAASE,CAAY,CAAA,CAEjB,QAAQ,GAAI,EAAA,CAEZ,QAAQ,KAAMA,CAAAA,CAAK,EACnBC,IAAK,CAAA,CAAC,EACV,CACJ,CACJ,EACR,CAAA,CAEOF,CAAQL,CAAAA","file":"index.mjs","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
+ {"version":3,"sources":["../../../../src/framework/cli/commander/command/list-command.ts"],"names":["listCommand","program","commandName","description","options","list_command_default","error","exit"],"mappings":"gHAMA,IAAMA,EAAc,CAChBC,CAAAA,CACAC,EAAc,MACdC,CAAAA,CAAAA,CAAc,iGACP,CACPF,CAAAA,CACK,QAAQC,CAAW,CAAA,CACnB,YAAYC,CAAW,CAAA,CACvB,MAAO,CAAA,yBAAA,CAA2B,oEAAoE,CAAA,CACtG,OAAO,mBAAqB,CAAA,KAAK,EACjC,MAAO,CAAA,gBAAA,CAAkB,qCAAqC,CAC9D,CAAA,MAAA,CAAO,wBAAyB,mFAAqF,CAAA,EAAE,CACvH,CAAA,MAAA,CAAO,wBAAyB,8EAAgF,CAAA,EAAE,CAClH,CAAA,MAAA,CAAO,eAAiB,CAAA,iBAAA,CAAmB,CAAK,CAAA,CAAA,CAChD,OACG,MAAOC,CAAAA,EAOD,CACF,GAAI,CACA,MAAMC,CAAQD,CAAAA,CAAAA,CAAQ,UAAWA,CAAQ,CAAA,IAAA,CAAM,CAC3C,YAAcA,CAAAA,CAAAA,CAAQ,cAAgB,EAAC,CACvC,MAAOA,CAAQ,CAAA,KAAA,CACf,YAAcA,CAAAA,CAAAA,CAAQ,WAAe,EAAA,GACrC,OAASA,CAAAA,CAAAA,CAAQ,OACrB,CAAC,EACL,OAASE,CAAY,CAAA,CAEjB,QAAQ,GAAI,EAAA,CAEZ,QAAQ,KAAMA,CAAAA,CAAK,EACnBC,IAAK,CAAA,CAAC,EACV,CACJ,CACJ,EACR,CAAA,CAEOF,CAAQL,CAAAA","file":"index.mjs","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,13 +1,2 @@
1
- 'use strict';
2
-
3
- var chunkINI6VCIA_js = require('../../chunk-INI6VCIA.js');
4
- require('../../chunk-4C666HHU.js');
5
-
6
-
7
-
8
- Object.defineProperty(exports, "listCommand", {
9
- enumerable: true,
10
- get: function () { return chunkINI6VCIA_js.a; }
11
- });
12
- //# sourceMappingURL=index.js.map
1
+ 'use strict';var chunkNZTDUEZE_js=require('../../chunk-NZTDUEZE.js');require('../../chunk-4C666HHU.js');Object.defineProperty(exports,"listCommand",{enumerable:true,get:function(){return chunkNZTDUEZE_js.a}});//# sourceMappingURL=index.js.map
13
2
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,2 @@
1
- export { a as listCommand } from '../../chunk-GLAABR73.mjs';
2
- import '../../chunk-HZWWJL43.mjs';
3
- //# sourceMappingURL=index.mjs.map
1
+ export{a as listCommand}from'../../chunk-7PKKRTN7.mjs';import'../../chunk-HZWWJL43.mjs';//# sourceMappingURL=index.mjs.map
4
2
  //# sourceMappingURL=index.mjs.map
@@ -1,13 +1,2 @@
1
- 'use strict';
2
-
3
- var chunkMYU5ZKUN_js = require('../../chunk-MYU5ZKUN.js');
4
- require('../../chunk-4C666HHU.js');
5
-
6
-
7
-
8
- Object.defineProperty(exports, "getSwaggerStaticProps", {
9
- enumerable: true,
10
- get: function () { return chunkMYU5ZKUN_js.a; }
11
- });
12
- //# sourceMappingURL=index-browser.js.map
1
+ 'use strict';var chunkMYU5ZKUN_js=require('../../chunk-MYU5ZKUN.js');require('../../chunk-4C666HHU.js');Object.defineProperty(exports,"getSwaggerStaticProps",{enumerable:true,get:function(){return chunkMYU5ZKUN_js.a}});//# sourceMappingURL=index-browser.js.map
13
2
  //# sourceMappingURL=index-browser.js.map
@@ -1,4 +1,2 @@
1
- export { a as getSwaggerStaticProps } from '../../chunk-GI7VS3DY.mjs';
2
- import '../../chunk-HZWWJL43.mjs';
3
- //# sourceMappingURL=index-browser.mjs.map
1
+ export{a as getSwaggerStaticProps}from'../../chunk-GI7VS3DY.mjs';import'../../chunk-HZWWJL43.mjs';//# sourceMappingURL=index-browser.mjs.map
4
2
  //# sourceMappingURL=index-browser.mjs.map