UNPKG

@visulima/api-platform

Version:

Visulima API platform is a set of tools to build and consume web APIs

2 lines 4.58 kB
'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=false;f.forEach(({regex:i,transformer:l})=>{!r&&i.test(t)&&(e.responses[s].content[t].example=l(p),r=true);}),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=false;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=true;}}),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:true,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":true},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 //# sourceMappingURL=chunk-YG667K32.js.map