openapi-sync 5.0.7 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +203 -2
- package/bin/cli.js +396 -27
- package/bin/mcp.js +36 -0
- package/dist/chunk-3VKPQNDD.mjs +22 -0
- package/dist/chunk-L52BXDAC.mjs +24 -0
- package/dist/chunk-TTLQP4UN.mjs +856 -0
- package/dist/chunk-VLACEFT4.mjs +1 -0
- package/dist/index.d.mts +351 -32
- package/dist/index.d.ts +351 -32
- package/dist/index.js +418 -377
- package/dist/index.mjs +1 -858
- package/dist/interactive-init-XBZJKJCH.mjs +1 -0
- package/dist/mcp/server.d.mts +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +913 -0
- package/dist/mcp/server.mjs +4 -0
- package/dist/validate-3G3NZCPG.mjs +11 -0
- package/llms.txt +334 -0
- package/openapi.sync.schema.json +396 -0
- package/package.json +38 -17
- package/dist/chunk-PUWCZVB7.mjs +0 -1
- package/dist/interactive-init-DZKTNNQK.mjs +0 -12
|
@@ -0,0 +1,913 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';var Fe=require('js-yaml'),te=require('path'),me=require('fs'),Tr=require('lodash.isequal'),Ye=require('lodash.get'),Pr=require('axios'),jr=require('axios-retry'),Rr=require('@apidevtools/swagger-parser'),curlGenerator=require('curl-generator'),fr=require('prompts'),mcp_js=require('@modelcontextprotocol/sdk/server/mcp.js'),stdio_js=require('@modelcontextprotocol/sdk/server/stdio.js'),zod=require('zod');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Fe__namespace=/*#__PURE__*/_interopNamespace(Fe);var te__default=/*#__PURE__*/_interopDefault(te);var me__default=/*#__PURE__*/_interopDefault(me);var Tr__default=/*#__PURE__*/_interopDefault(Tr);var Ye__default=/*#__PURE__*/_interopDefault(Ye);var Pr__default=/*#__PURE__*/_interopDefault(Pr);var jr__default=/*#__PURE__*/_interopDefault(jr);var Rr__default=/*#__PURE__*/_interopDefault(Rr);var fr__default=/*#__PURE__*/_interopDefault(fr);var Wn=Object.defineProperty,Ir=Object.defineProperties;var xr=Object.getOwnPropertyDescriptors;var Dn=Object.getOwnPropertySymbols;var wr=Object.prototype.hasOwnProperty,Er=Object.prototype.propertyIsEnumerable;var _n=(n,i,o)=>i in n?Wn(n,i,{enumerable:true,configurable:true,writable:true,value:o}):n[i]=o,B=(n,i)=>{for(var o in i||(i={}))wr.call(i,o)&&_n(n,o,i[o]);if(Dn)for(var o of Dn(i))Er.call(i,o)&&_n(n,o,i[o]);return n},V=(n,i)=>Ir(n,xr(i));var Ee=(n=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(n,{get:(i,o)=>(typeof require!="undefined"?require:i)[o]}):n)(function(n){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var ce=(n,i,o)=>()=>{if(o)throw o[0];try{return n&&(i=n(n=0)),i}catch(e){throw o=[e],e}};var Sr=(n,i)=>()=>{try{return i||n((i={exports:{}}).exports,i),i.exports}catch(o){throw i=0,o}},ot=(n,i)=>{for(var o in i)Wn(n,o,{get:i[o],enumerable:true});};var M=(n,i,o)=>new Promise((e,s)=>{var t=d=>{try{r(o.next(d));}catch(l){s(l);}},u=d=>{try{r(o.throw(d));}catch(l){s(l);}},r=d=>d.done?e(d.value):Promise.resolve(d.value).then(t,u);r((o=o.apply(n,i)).next());});var Ar,it,at=ce(()=>{"use strict";Ar=/^[A-Za-z_$][A-Za-z0-9_$]*$/,it=/[A-Za-z0-9_$]/;});function Or(n,i){return i.split(".").reduce((e,s)=>e&&e[s]!==void 0?e[s]:void 0,n)}var Ue,Kn,Le,$e,pt,ke,Ge,Hn,lt,Vn,Me,Qe=ce(()=>{"use strict";at();Ue=n=>["object"].includes(typeof n)&&!(n instanceof Blob),Kn=n=>{try{return Fe__namespace.load(n),!0}catch(i){let o=i;if(o instanceof Fe__namespace.YAMLException)return !1;throw o}},Le=n=>{if(Kn(n)){let i=Fe__namespace.load(n),o=JSON.stringify(i,null,2);return JSON.parse(o)}},$e=n=>n.substring(0,1).toUpperCase()+n.substring(1),pt=(n,i)=>{let o=n.split("/"),e=`${$e(i)}`,s=[];return o.forEach(t=>{if(t[0]==="{"&&t[t.length-1]==="}"){let r=t.replace(/{/,"").replace(/}/,"");s.push(r),t=`$${r}`;}else if(t[0]==="<"&&t[t.length-1]===">"){let r=t.replace(/</,"").replace(/>/,"");s.push(r),t=`$${r}`;}else if(t[0]===":"){let r=t.replace(/:/,"");s.push(r),t=`$${r}`;}let u="";t.split("").forEach(r=>{let d=r;it.test(r)||(d="/"),u+=d;}),u.split("/").forEach(r=>{e+=$e(r);});}),{name:e,variables:s,pathParts:o}},ke=(n,i=1)=>{let o="{",e=Object.keys(n);for(let s=0;s<e.length;s++){let t=e[s],u=n[t];if(o+=`
|
|
3
|
+
`+" ".repeat(i)+t+": ",Array.isArray(u)){o+="[";for(let r=0;r<u.length;r++){let d=u[r];typeof d=="object"&&d!==null?o+=ke(d,i+1):o+=typeof d=="string"?`"${d}"`:d,r<u.length-1&&(o+=", ");}o+="]";}else typeof u=="object"&&u!==null?o+=""+ke(u,i+1):o+=u.split(`
|
|
4
|
+
`).filter(r=>r.trim()!=="").join(`
|
|
5
|
+
${" ".repeat(i)}`);s<e.length-1&&(o+=", ");}return o+=`
|
|
6
|
+
${" ".repeat(i-1)}}`,o},Ge=(n,i=1)=>{let o=n.replace(/\/\*\*?[\s\S]*?\*\//g,e=>e.replace(/^\/\*\*?\s*/,"").replace(/\s*\*\/$/,"").split(`
|
|
7
|
+
`).map(t=>t.replace(/^\s*\*\s?/,"").trim()).filter(t=>t.length>0).map(t=>`// ${t}`).join(`
|
|
8
|
+
`));return `
|
|
9
|
+
\`\`\`typescript
|
|
10
|
+
${" ".repeat(i)} ${o.split(`
|
|
11
|
+
`).filter(e=>e.trim()!=="").join(`
|
|
12
|
+
${" ".repeat(i)} `)}
|
|
13
|
+
\`\`\``};Hn=(n,i="CUSTOM CODE")=>{let e=["//","#"].map(r=>({start:`${r} \u{1F512} ${i} START`,end:`${r} \u{1F512} ${i} END`})),s={beforeGenerated:"",afterGenerated:""},t=0,u=[];for(;t<n.length;){let r=null,d=-1;for(let O of e){let E=n.indexOf(O.start,t);E!==-1&&(d===-1||E<d)&&(d=E,r=O);}if(d===-1||!r)break;let l=n.indexOf(r.end,d);if(l===-1)break;let y=l+r.end.length,I=n.substring(y,y+100),q=I.match(/^\s*\n\s*((?:\/\/|#)\s*=+)/);if(q){let O=I.indexOf(`
|
|
14
|
+
`,q.index+1);O!==-1?y+=O+1:y+=q[0].length;}let k=d,T=n.substring(Math.max(0,d-200),d),N=/(^|\n)\s*(?:\/\/|#)\s*=+/g,F,A=-1;for(;(F=N.exec(T))!==null;)A=F.index+F[1].length;A!==-1&&(k=Math.max(0,d-200)+A);let Q=n.substring(k,y);u.push({start:k,end:y,content:Q}),t=y;}return u.length>0&&(n.substring(0,u[0].start).split(`
|
|
15
|
+
`).filter(l=>{let y=l.trim();return y.length>0&&!y.startsWith("//")&&!y.startsWith("#")}).join("").length===0?(s.beforeGenerated=u[0].content,u.length>1&&(s.afterGenerated=u[1].content)):(s.afterGenerated=u[0].content,u.length>1&&!s.beforeGenerated&&(s.beforeGenerated=u[1].content))),s},lt=(n,i="CUSTOM CODE",o=!0,e="//")=>{let s=o?`${e} ${n==="top"?"Add your custom code below this line":"Add your custom code above this line"}
|
|
16
|
+
${e} This section will be preserved during regeneration
|
|
17
|
+
`:"";return `${e} ${"=".repeat(60)}
|
|
18
|
+
${e} \u{1F512} ${i} START
|
|
19
|
+
${s}${e} ${"=".repeat(60)}
|
|
20
|
+
|
|
21
|
+
${e} \u{1F512} ${i} END
|
|
22
|
+
${e} ${"=".repeat(60)}`},Vn=(n,i,o)=>{if(!n)return n;let e=new RegExp(`^\\s*//\\s*(?:={3,}|\u{1F512}\\s+${i}\\s+(?:START|END)|Add your custom code (?:below|above) this line|This section will be preserved during regeneration)\\s*$`);return n.split(`
|
|
23
|
+
`).map(s=>e.test(s)?s.replace(/^\s*\/\//,o):s).join(`
|
|
24
|
+
`)},Me=(n,i,o={})=>{let{position:e="bottom",markerText:s="CUSTOM CODE",includeInstructions:t=!0,commentPrefix:u="//"}=o,r={beforeGenerated:"",afterGenerated:""};i&&(r=Hn(i,s),r.beforeGenerated=Vn(r.beforeGenerated,s,u),r.afterGenerated=Vn(r.afterGenerated,s,u)),!r.beforeGenerated&&!r.afterGenerated&&((e==="top"||e==="both")&&(r.beforeGenerated=lt("top",s,t,u)),(e==="bottom"||e==="both")&&(r.afterGenerated=lt("bottom",s,t,u)));let d=[];return r.beforeGenerated&&(d.push(r.beforeGenerated),d.push("")),d.push(n),r.afterGenerated&&(d.push(""),d.push(r.afterGenerated)),d.join(`
|
|
25
|
+
`)};});var Ve,ut,Je,Yn,Zn,Xn,Ke,dt=ce(()=>{"use strict";Ve=te__default.default.join(__dirname,"../","../db.json");me__default.default.existsSync(Ve)||me__default.default.writeFileSync(Ve,"{}");ut={};try{ut=Ee(Ve);}catch(n){ut={};}Je=ut||{},Yn=n=>{me__default.default.writeFileSync(Ve,JSON.stringify(n));},Zn=(n,i)=>{Je[n]=i,Yn(Je);},Xn=n=>Je[n],Ke=()=>{Je={},Yn(Je);};});var er,tr,He,ft=ce(()=>{"use strict";er={},tr=(n,i)=>{er[n]=i;},He=n=>er[n]||[];});var Se,mt,nr,ve,rr,qr,Ze,sr=ce(()=>{"use strict";Qe();dt();ft();Se=process.cwd(),mt={},nr=Pr__default.default.create({timeout:6e4});jr__default.default(nr,{retries:20,retryCondition:n=>n.code==="ECONNABORTED"||n.message.includes("Network Error"),retryDelay:n=>n*1e3});ve=(n,i,o)=>M(null,null,function*(){var r,d,l,y;if(!(((r=o==null?void 0:o.customCode)==null?void 0:r.enabled)!==!1)){yield me__default.default.promises.writeFile(n,i);return}let s=null;try{s=yield me__default.default.promises.readFile(n,"utf-8");}catch(I){}let t=n.endsWith(".py")?"#":"//",u=Me(i,s,{position:((d=o==null?void 0:o.customCode)==null?void 0:d.position)||"bottom",markerText:(l=o==null?void 0:o.customCode)==null?void 0:l.markerText,includeInstructions:(y=o==null?void 0:o.customCode)==null?void 0:y.includeInstructions,commentPrefix:t});yield me__default.default.promises.writeFile(n,u);}),rr=(n,i,o,e)=>M(null,null,function*(){let s=yield qr(n,i,o,e);return e&&!isNaN(e)&&e>0&&(process.env.NODE_ENV&&["production","prod","test","staging"].includes(process.env.NODE_ENV)||(mt[i]&&clearTimeout(mt[i]),mt[i]=setTimeout(()=>{console.info(`\u{1F504} Auto syncing ${i}`),rr(n,i,o,e);},e))),s}),qr=(...n)=>M(null,null,function*(){var Ut,Lt,Gt,Mt,Qt,Jt,Bt,zt,Dt,_t;let[i,o,e]=n,s=a=>a.startsWith("http://")||a.startsWith("https://"),t;try{if(s(i))t=(yield nr.get(i)).data;else {let a=te__default.default.isAbsolute(i)?i:te__default.default.join(Se,i);`${a}`,t=yield me__default.default.promises.readFile(a,"utf-8");}}catch(a){throw process.env.NODE_ENV&&["production","prod","test","staging"].includes(process.env.NODE_ENV)||console.error(`Failed to load OpenAPI spec for ${o}:`,a),a}if(!t)return;let u=Ue(t)?t:Le(t),r;try{r=yield Rr__default.default.parse(u);}catch(a){let p=a instanceof Error?a.message:String(a);throw new Error(`Failed to parse OpenAPI spec for ${o}: ${p}`)}let d=te__default.default.join((e==null?void 0:e.folder)||"",o),l=(e==null?void 0:e.language)==="python",y=l?"py":"ts",I={},q=a=>{var p,C;if((p=e==null?void 0:e.folderSplit)!=null&&p.customFolder){let b=e.folderSplit.customFolder(a);if(b)return b}return (C=e==null?void 0:e.folderSplit)!=null&&C.byTags&&a.tags&&a.tags.length>0?a.tags[0].toLowerCase().replace(/\s+/g,"-"):"default"},k=typeof(e==null?void 0:e.server)=="string"?e==null?void 0:e.server:((Lt=(Ut=r==null?void 0:r.servers)==null?void 0:Ut[(e==null?void 0:e.server)||0])==null?void 0:Lt.url)||"",T=typeof((Mt=(Gt=e==null?void 0:e.types)==null?void 0:Gt.name)==null?void 0:Mt.prefix)=="string"?e==null?void 0:e.types.name.prefix:"I",N=typeof((Jt=(Qt=e==null?void 0:e.endpoints)==null?void 0:Qt.name)==null?void 0:Jt.prefix)=="string"?e==null?void 0:e.endpoints.name.prefix:"",F=(a,p)=>{var b,f;let C=$e(a);if((f=(b=e==null?void 0:e.types)==null?void 0:b.name)!=null&&f.format){let g=e==null?void 0:e.types.name.format("shared",{name:a},C);if(g)return `${T}${g}`}return `${T}${C}`},A=(a,p,C,b,f,g=0)=>{let m="",$="",h="";if(p)if(p.$ref)if(p.$ref[0]==="#"){let w=(p.$ref||"").split("/");w.shift();let P=w[0]==="definitions";[...w].pop();let U=Ye__default.default(a,w,null);if(U){U!=null&&U.name&&(m=U.name),$=w[w.length-1];let H=F($);H.includes(".")&&(H=H.split(".").map((Oe,Ie)=>Ie===0?Oe:`["${Oe}"]`).join("")),h+=`${f!=null&&f.noSharedImport?"":"Shared."}${H}`;}}else h+="";else if(p.anyOf)h+=`(${p.anyOf.map(w=>A(a,w,"",b,V(B({},f),{useComponentName:!1}))).filter(w=>!!w).join("|")})`;else if(p.oneOf)h+=`(${p.oneOf.map(w=>A(a,w,"",b,V(B({},f),{useComponentName:!1}))).filter(w=>!!w).join("|")})`;else if(p.allOf)h+=`(${p.allOf.map(w=>A(a,w,"",b,V(B({},f),{useComponentName:!1}))).filter(w=>!!w).join("&")})`;else if(p.items)h+=`${A(a,p.items,"",!1,V(B({},f),{useComponentName:!1}))}[]`;else if(p.properties){let w=Object.keys(p.properties),P=p.required||[],j="";w.forEach(L=>{var H,Re,Oe,Ie,xe,we;let U="";!((Re=(H=e==null?void 0:e.types)==null?void 0:H.doc)!=null&&Re.disable)&&((Ie=(Oe=p.properties)==null?void 0:Oe[L])!=null&&Ie.description)&&(U=" * "+((xe=p.properties)==null?void 0:xe[L].description.split(`
|
|
26
|
+
`).filter(st=>st.trim()!=="").join(`
|
|
27
|
+
*${" ".repeat(1)}`))),j+=(U?`/**
|
|
28
|
+
${U}
|
|
29
|
+
*/
|
|
30
|
+
`:"")+`${A(a,(we=p.properties)==null?void 0:we[L],L,P.includes(L),f,g+1)}`;}),j.length>0?h+=`{
|
|
31
|
+
${" ".repeat(g)}${j}${" ".repeat(g)}}`:h+="{[k: string]: any}";}else if(p.enum&&p.enum.length>0){let w=p.enum.includes(null),P=p.enum.filter(L=>L!==null).map(L=>JSON.stringify(L)).filter(L=>L!==void 0),j=P.length>1||P.length>0&&w;j&&(h+="("),P.forEach((L,U)=>{h+=`${U===0?"":"|"}${L}`;}),w&&(h+=`${P.length>0?"|":""}null`),j&&(h+=")");}else if(p.type){let w=P=>{let j="";if(typeof P=="string")["string","integer","number","array","boolean","null"].includes(P)?["integer","number"].includes(P)?j+="number":P==="array"?j+="any[]":j+=P:P==="object"&&(p.additionalProperties?j+=`{[k: string]: ${A(a,p.additionalProperties,"",!0,V(B({},f),{useComponentName:!1}))||"any"}}`:j+="{[k: string]: any}");else if(Array.isArray(P)){let L=P.map(U=>w(U));L.filter(U=>U!==""),L.length>1&&(j+="("+L.join("|")+")");}else j+="any";return j};h=w(p.type);}else h+="any";else h="string";let R=m||C;f!=null&&f.useComponentName&&!R&&(R=$);let D=R?` "${R}"${b?"":"?"}: `:"",c=(p==null?void 0:p.enum)&&p.enum.includes(null),_=p!=null&&p.nullable&&!c?" | null":"";return h.length>0?`${D}${h}${_}${R?`;
|
|
32
|
+
`:""}`:""},Q=(a,p,C,b,f,g=0)=>{let m="",$="",h="";if(p)if(p.$ref)if(p.$ref[0]==="#"){let w=(p.$ref||"").split("/");w.shift();let P=w[0]==="definitions";[...w].pop();let U=Ye__default.default(a,w,null);if(U){U!=null&&U.name&&(m=U.name),$=w[w.length-1];let H=F($);H.includes(".")&&(H=H.split(".").join("_")),h+=`${f!=null&&f.noSharedImport?"":"Shared."}${H}`;}}else h+="Any";else if(p.anyOf)h+=`Union[${p.anyOf.map(w=>Q(a,w,"",b,V(B({},f),{useComponentName:!1}))).filter(w=>!!w).join(", ")}]`;else if(p.oneOf)h+=`Union[${p.oneOf.map(w=>Q(a,w,"",b,V(B({},f),{useComponentName:!1}))).filter(w=>!!w).join(", ")}]`;else if(p.allOf)h+="Dict[str, Any]";else if(p.items)h+=`List[${Q(a,p.items,"",!1,V(B({},f),{useComponentName:!1}))}]`;else if(p.properties){let w=Object.keys(p.properties),P=p.required||[],j="";w.forEach(L=>{var U;j+=Q(a,(U=p.properties)==null?void 0:U[L],L,P.includes(L),f,g+1);}),j.length>0?C?h+="Dict[str, Any]":h+=`
|
|
33
|
+
${j}`:h+="Dict[str, Any]";}else if(p.enum&&p.enum.length>0){let w=p.enum.filter(P=>P!==null).map(P=>JSON.stringify(P));w.length>0?h+=`Literal[${w.join(", ")}]`:h+="Any";}else if(p.type){let w=P=>{let j="";if(typeof P=="string")["integer","number"].includes(P)?j+=P==="number"?"float":"int":P==="string"?j+="str":P==="boolean"?j+="bool":P==="array"?j+="List[Any]":P==="object"?j+="Dict[str, Any]":P==="null"?j+="None":j+="Any";else if(Array.isArray(P)){let L=P.map(U=>w(U)).filter(U=>U!=="");L.length>1?j+=`Union[${L.join(", ")}]`:j+=L[0]||"Any";}else j+="Any";return j};h=w(p.type);}else h+="Any";else h="str";let R=m||C;f!=null&&f.useComponentName&&!R&&(R=$);let D="";R&&(D=` ${R.replace(/[^a-zA-Z0-9_]/g,"_")}: `);let c=h,_=!R&&h.includes(`
|
|
34
|
+
`);return p!=null&&p.nullable&&!_&&(h.startsWith("Union[")?c=h.replace("Union[","Union[None, "):c=`Optional[${h}]`),h.length>0?`${D}${c}${R?`
|
|
35
|
+
`:""}`:""},O=a=>{let p=(a||"").replace(/^\n+/,"").trimEnd();if(!p)return ` pass
|
|
36
|
+
`;let C=p.split(`
|
|
37
|
+
`),b=/^[A-Za-z_][A-Za-z0-9_]*\s*:\s*.+$/,f=C.map($=>$.trim()).filter($=>!!$).filter($=>!$.startsWith('"""')&&!$.endsWith('"""'));return !f.some($=>b.test($))&&f.length===1?` value: ${f[0]}
|
|
38
|
+
`:`${p.split(`
|
|
39
|
+
`).map($=>$.trim()?/^\s/.test($)?$:` ${$}`:$).join(`
|
|
40
|
+
`)}
|
|
41
|
+
`},E=a=>{let p=(a||"").replace(/^\n+/,"").trimEnd();if(!p)return null;let C=p.split(`
|
|
42
|
+
`),b=/^[A-Za-z_][A-Za-z0-9_]*\s*:\s*.+$/,f=C.map(m=>m.trim()).filter(m=>!!m).filter(m=>!m.startsWith('"""')&&!m.endsWith('"""'));return !f.some(m=>b.test(m))&&f.length===1?f[0]:null},Y=(a,p,C)=>{let b=E(p);return (C==null?void 0:C.inheritSingleTypeExpression)===!0&&!!b?`@dataclass
|
|
43
|
+
class ${a}(${b}):
|
|
44
|
+
pass
|
|
45
|
+
`:`@dataclass
|
|
46
|
+
class ${a}:
|
|
47
|
+
${O(p)}`},G=a=>{let C=["Any","List","Dict","Union","Optional","Literal"].filter(b=>new RegExp(`\\b${b}\\b`).test(a));return C.length>0?`from typing import ${C.join(", ")}
|
|
48
|
+
`:""},J=(a,p=72)=>{let C=(a||"").replace(/\s+/g," ").trim().split(" ");if(!C[0])return [];let b=[],f="";return C.forEach(g=>{let m=f?`${f} ${g}`:g;m.length>p&&f?(b.push(f),f=g):f=m;}),f&&b.push(f),b},de=a=>{var f,g;if(!a||(g=(f=e==null?void 0:e.types)==null?void 0:f.doc)!=null&&g.disable)return "";let p=(a.description||"").trim(),C=Object.entries(a.properties||{}).map(([m,$])=>({name:m,desc:(($==null?void 0:$.description)||"").trim()})).filter(m=>m.desc.length>0);if(!p&&C.length===0)return "";let b=[' """'];return p&&J(p).forEach(m=>b.push(` ${m}`)),C.length>0&&(p&&b.push(""),b.push(" Attributes:"),C.forEach(m=>{let $=J(m.desc);$.length&&(b.push(` ${m.name}: ${$[0]}`),$.slice(1).forEach(h=>b.push(` ${h}`)));})),b.push(' """'),`${b.join(`
|
|
49
|
+
`)}
|
|
50
|
+
`},ae=(a,p)=>{let C="",b="",f="";if(p)if(p.$ref)if(p.$ref[0]==="#"){let g=(p.$ref||"").split("/");g.shift();let $=Ye__default.default(a,g,null);$&&($!=null&&$.name&&(C=$.name),b=g[g.length-1],f+=ae(a,$));}else f+="";else if(p.anyOf)f+=ae(a,p.anyOf[0]);else if(p.oneOf)f+=ae(a,p.oneOf[0]);else if(p.allOf)f+=`{${p.allOf.map(g=>`...(${ae(a,g)})`).join(",")}}`;else if(p.items)f+=`[${ae(a,p.items)}]`;else if(p.properties){let $=Object.keys(p.properties).map(h=>{var R;return ` "${h}": ${ae(a,(R=p.properties)==null?void 0:R[h])}`}).join(`,
|
|
51
|
+
`);$.length>0?f+=`{
|
|
52
|
+
${$}
|
|
53
|
+
}`:f+="{}";}else if(p.enum&&p.enum.length>0)p.enum.length>1&&(f+=p.enum[0]);else if(p.type)if(p.example)f+=JSON.stringify(p.example);else {let g=m=>{let $="";if(typeof m=="string")["string","integer","number","array","boolean","null"].includes(m)?["integer","number"].includes(m)?$+="123":m==="array"?$+="[]":m==="boolean"?$+="true":m==="null"?$+="null":$+=`"${m}"`:m==="object"&&($+="{}");else if(Array.isArray(m)){let h=m.map(R=>g(R));h.filter(R=>R!==""),h.length>1&&($+=h.join("|"));}else $+="any";return $};f=g(p.type);}else f+="any";else f="string";return f},le=Xn(o);if(Tr__default.default(le,r))return;Zn(o,r);let fe="",Ce="",pe={},_e=[],Nt=(a,p)=>{let C={},b={};Object.keys(a).forEach(g=>{var h;let m=(h=a[g])!=null&&h.schema?a[g].schema:a[g],$=l?`${Q(r,m,"",!0,{noSharedImport:!0,useComponentName:!1})}`:`${A(r,m,"",!0,{noSharedImport:!0,useComponentName:!1})}`;if($){let R=g.split("."),D=C,c=b;for(let _=0;_<R.length;_++){let w=R[_];_<R.length-1?(w in D||(D[w]={},c[w]={}),D=D[w],c=c[w]):(D[w]=$,c[w]=m);}}}),Object.keys(C).forEach(g=>{var _,w,P,j,L;let m=F(g),$=C[g],h=a[g],R=h!=null&&h.schema?h.schema:h,D="",c="";!((w=(_=e==null?void 0:e.types)==null?void 0:_.doc)!=null&&w.disable)&&g in a&&((P=a[g])!=null&&P.description)&&(D=" * "+a[g].description.split(`
|
|
54
|
+
`).filter(H=>H.trim()!=="").join(`
|
|
55
|
+
*${" ".repeat(1)}`)),c=de(R),l?pe[g]=((j=pe[g])!=null?j:"")+`@dataclass
|
|
56
|
+
class ${m}:
|
|
57
|
+
`+(c||"")+O(typeof $=="string"?$:"")+`
|
|
58
|
+
`:pe[g]=((L=pe[g])!=null?L:"")+(D?`/**
|
|
59
|
+
${D}
|
|
60
|
+
*/
|
|
61
|
+
`:"")+"export type "+m+" = "+(typeof $=="string"?$:ke($))+`;
|
|
62
|
+
`;});};r.definitions&&Nt(r.definitions,"definitions"),r.components&&Object.keys(r.components).forEach(a=>{if(["schemas","responses","parameters","examples","requestBodies","headers","links","callbacks"].includes(a)){let p=r.components[a];Nt(p,"components");}});let Ft=a=>{let p="";if(a.content){let C=Object.keys(a.content);C[0]&&a.content[C[0]].schema&&(p+=l?`${Q(r,a.content[C[0]].schema,"")}`:`${A(r,a.content[C[0]].schema,"")}`);}return p},he=(a,p,C=0)=>{if(!a)return p==="joi"?"Joi.any()":p==="yup"?"yup.mixed()":"z.any()";if(a.$ref){if(a.$ref[0]==="#"){let b=a.$ref.split("/");b.shift();let f=b.join("."),g=Ye__default.default(r,f);if(g)return he(g,p,C)}return p==="joi"?"Joi.any()":p==="yup"?"yup.mixed()":"z.any()"}if(a.anyOf||a.oneOf){let b=a.anyOf||a.oneOf;if(b.every(g=>g.enum!==void 0&&Array.isArray(g.enum))){let g=[],m=!1;if(b.forEach($=>{$.enum&&$.enum.forEach(h=>{h===null?m=!0:g.includes(h)||g.push(h);});}),g.length>0){let $=g.map(h=>JSON.stringify(h)).join(", ");if(p==="zod"){let h=`z.enum([${$}])`;return m&&(h+=".nullable()"),h}else if(p==="yup"){let h=`yup.mixed().oneOf([${$}])`;return m&&(h+=".nullable()"),h}else return m?`Joi.valid(${$}, null)`:`Joi.valid(${$})`}else if(m)return p==="zod"?"z.null()":p==="yup"?"yup.mixed().nullable()":"Joi.valid(null)"}return p==="zod"?`z.union([${b.map($=>he($,p,C+1)).join(", ")}])`:p==="yup"?`yup.mixed().oneOf([${b.map($=>he($,p,C+1)).join(", ")}])`:`Joi.alternatives().try(${b.map(m=>he(m,p,C+1)).join(", ")})`}if(a.allOf)if(p==="zod"){let b=a.allOf.map(g=>he(g,p,C+1)),f=b[0];for(let g=1;g<b.length;g++)f=`${f}.merge(${b[g]})`;return f}else return he(a.allOf[0],p,C+1);if(a.items){let b=he(a.items,p,C+1);if(p==="zod"){let f=`z.array(${b})`;return a.minItems!==void 0&&(f+=`.min(${a.minItems})`),a.maxItems!==void 0&&(f+=`.max(${a.maxItems})`),f}else if(p==="yup"){let f=`yup.array().of(${b})`;return a.minItems!==void 0&&(f+=`.min(${a.minItems})`),a.maxItems!==void 0&&(f+=`.max(${a.maxItems})`),f}else {let f=`Joi.array().items(${b})`;return a.minItems!==void 0&&(f+=`.min(${a.minItems})`),a.maxItems!==void 0&&(f+=`.max(${a.maxItems})`),f}}if(a.properties){let b=a.required||[],f=" ".repeat(C+1),g=Object.entries(a.properties).map(([m,$])=>{let h=b.includes(m),R=he($,p,C+1);return h||(R+=".optional()"),`${f}${m}: ${R}`}).join(`,
|
|
63
|
+
`);return p==="zod"?`z.object({
|
|
64
|
+
${g}
|
|
65
|
+
${" ".repeat(C)}})`:p==="yup"?`yup.object({
|
|
66
|
+
${g}
|
|
67
|
+
${" ".repeat(C)}})`:`Joi.object({
|
|
68
|
+
${g}
|
|
69
|
+
${" ".repeat(C)}})`}if(a.enum&&a.enum.length>0){let b=[],f=!1;a.enum.forEach(m=>{m===null?f=!0:b.includes(m)||b.push(m);});let g=b.map(m=>JSON.stringify(m)).join(", ");if(p==="zod"){let m=`z.enum([${g}])`;return f&&(m+=".nullable()"),m}else if(p==="yup"){let m=`yup.mixed().oneOf([${g}])`;return f&&(m+=".nullable()"),m}else {let m=`Joi.valid(${g})`;return f&&(m+=".allow(null)"),m}}if(a.type){let f=(g=>{switch(g){case "string":if(p==="zod"){let m="z.string()";return a.format==="email"?m+=".email()":a.format==="uuid"?m+=".uuid()":a.format==="url"||a.format==="uri"?m+=".url()":a.format==="date-time"?m+=".datetime()":a.format==="date"&&(m+=".date()"),a.minLength&&(m+=`.min(${a.minLength})`),a.maxLength&&(m+=`.max(${a.maxLength})`),a.pattern&&(m+=`.regex(/${a.pattern}/)`),m}else if(p==="yup"){let m="yup.string()";return a.format==="email"?m+=".email()":(a.format==="url"||a.format==="uri")&&(m+=".url()"),a.minLength&&(m+=`.min(${a.minLength})`),a.maxLength&&(m+=`.max(${a.maxLength})`),a.pattern&&(m+=`.matches(/${a.pattern}/)`),m}else {let m="Joi.string()";return a.format==="email"?m+=".email()":a.format==="url"||a.format==="uri"?m+=".uri()":a.format==="uuid"?m+=".guid({ version: 'uuidv4' })":a.format==="date-time"&&(m+=".isoDate()"),a.minLength&&(m+=`.min(${a.minLength})`),a.maxLength&&(m+=`.max(${a.maxLength})`),a.pattern&&(m+=`.pattern(/${a.pattern}/)`),m}case "integer":case "number":if(p==="zod"){let m="z.number()";return g==="integer"&&(m+=".int()"),a.minimum!==void 0&&(a.exclusiveMinimum?m+=`.gt(${a.minimum})`:m+=`.min(${a.minimum})`),a.maximum!==void 0&&(a.exclusiveMaximum?m+=`.lt(${a.maximum})`:m+=`.max(${a.maximum})`),m}else if(p==="yup"){let m="yup.number()";return g==="integer"&&(m+=".integer()"),a.minimum!==void 0&&(m+=`.min(${a.minimum})`),a.maximum!==void 0&&(m+=`.max(${a.maximum})`),m}else {let m="Joi.number()";return g==="integer"&&(m+=".integer()"),a.minimum!==void 0&&(a.exclusiveMinimum?m+=`.greater(${a.minimum})`:m+=`.min(${a.minimum})`),a.maximum!==void 0&&(a.exclusiveMaximum?m+=`.less(${a.maximum})`:m+=`.max(${a.maximum})`),m}case "boolean":return p==="joi"?"Joi.boolean()":p==="yup"?"yup.boolean()":"z.boolean()";case "null":return p==="joi"?"Joi.any().allow(null)":p==="yup"?"yup.mixed().nullable()":"z.null()";default:return p==="joi"?"Joi.any()":p==="yup"?"yup.mixed()":"z.any()"}})(typeof a.type=="string"?a.type:a.type[0]);return a.nullable&&p!=="joi"?f+=".nullable()":a.nullable&&p==="joi"&&(f+=".allow(null)"),f}return p==="joi"?"Joi.any()":p==="yup"?"yup.mixed()":"z.any()"},gr=a=>{var p,C,b,f,g;if((C=(p=e==null?void 0:e.endpoints)==null?void 0:p.value)!=null&&C.replaceWords&&Array.isArray(e==null?void 0:e.endpoints.value.replaceWords)){let m=a;return (g=(f=(b=e==null?void 0:e.endpoints)==null?void 0:b.value)==null?void 0:f.replaceWords)==null||g.forEach(($,h)=>{let R=new RegExp($.replace,"g");m=m.replace(R,$.with||"");}),m}else return a},hr=(a,p,C=[])=>{var g,m;let b=(g=e==null?void 0:e.endpoints)==null?void 0:g.exclude,f=(m=e==null?void 0:e.endpoints)==null?void 0:m.include;if(f){let $=f.tags&&f.tags.length>0?C.some(R=>f.tags.includes(R)):!0,h=f.endpoints&&f.endpoints.length>0?f.endpoints.some(R=>{let D=!R.method||R.method.toLowerCase()===p.toLowerCase();return R.path?a===R.path&&D:R.regex?new RegExp(R.regex).test(a)&&D:!1}):!0;if(!$||!h)return !0}return !!(b&&(b.tags&&b.tags.length>0&&C.some(h=>b.tags.includes(h))||b.endpoints&&b.endpoints.length>0&&b.endpoints.some(h=>{let R=!h.method||h.method.toLowerCase()===p.toLowerCase();return h.path?a===h.path&&R:h.regex?new RegExp(h.regex).test(a)&&R:!1})))};if(Object.keys(r.paths||{}).forEach(a=>{let p=r.paths[a];Object.keys(p).forEach(b=>{var Vt,Kt,Ht,Yt,Zt,Xt,en,tn,nn,rn,sn,on,an,ln,pn,cn,un,dn,fn,mn,yn,gn,hn,$n,bn,Cn,In,xn,wn,En,Sn,An,On,vn,Tn,Pn,jn,Rn,kn,qn,Nn,Fn,Un,Ln,Gn,Mn,Qn,Jn,Bn,zn;let f=b,g=pt(a,f),m=((Vt=p[f])==null?void 0:Vt.tags)||[];if(hr(a,f,m))return;let $=p[f],h=q({method:f,path:a,summary:$==null?void 0:$.summary,operationId:$==null?void 0:$.operationId,tags:m,parameters:$==null?void 0:$.parameters,requestBody:$==null?void 0:$.requestBody,responses:$==null?void 0:$.responses});I[h]||(I[h]={endpoints:"",types:"",validation:""});let R=((Ht=(Kt=e==null?void 0:e.endpoints)==null?void 0:Kt.value)!=null&&Ht.includeServer?k:"")+g.pathParts.map(S=>(S[0]==="{"&&S[S.length-1]==="}"?S=`\${${S.replace(/{/,"").replace(/}/,"")}}`:S[0]==="<"&&S[S.length-1]===">"?S=`\${${S.replace(/</,"").replace(/>/,"")}}`:S[0]===":"&&(S=`\${${S.replace(/:/,"")}}`),S)).join("/"),D=`"${R}"`;g.variables.length>0&&(D=`(${g.variables.map(x=>`${x}:string`).join(",")})=> \`${R}\``),D=gr(D);let c=p[f],_="",w;if(c!=null&&c.parameters&&((c==null?void 0:c.parameters).forEach((x,v)=>{(x.$ref||x.in==="query"&&x.name)&&(_+=l?`${Q(r,x.$ref?x:x.schema,x.name||"",x.required)}`:`${A(r,x.$ref?x:x.schema,x.name||"",x.required)}`);}),_)){_=l?_:`{
|
|
70
|
+
${_}}`;let v=`${g.name}Query`;if((Zt=(Yt=e==null?void 0:e.types)==null?void 0:Yt.name)!=null&&Zt.useOperationId&&(c!=null&&c.operationId)&&(v=`${c.operationId}Query`),v=$e(`${T}${v}`),(en=(Xt=e==null?void 0:e.types)==null?void 0:Xt.name)!=null&&en.format){let Z=e==null?void 0:e.types.name.format("endpoint",{code:"",type:"query",method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId},v);Z&&(v=`${T}${Z}`);}w=v;let z=l?`${Y(v,_)}
|
|
71
|
+
`:`export type ${v} = ${_};
|
|
72
|
+
`;e!=null&&e.folderSplit?I[h].types+=z:Ce+=z;}if(((tn=e==null?void 0:e.validations)==null?void 0:tn.disable)!==!0&&((rn=(nn=e==null?void 0:e.validations)==null?void 0:nn.generate)==null?void 0:rn.query)!==!1&&(c!=null&&c.parameters)){let S=((sn=e.validations)==null?void 0:sn.library)||"zod",v=c.parameters.filter(z=>!z.$ref&&z.in==="query"&&z.name);if(v.length>0){let z=((on=e==null?void 0:e.validations)==null?void 0:on.name)||((an=e==null?void 0:e.types)==null?void 0:an.name),Z=typeof(z==null?void 0:z.prefix)=="string"?z.prefix:"I",ne=typeof((pn=(ln=e==null?void 0:e.validations)==null?void 0:ln.name)==null?void 0:pn.suffix)=="string"?e.validations.name.suffix:"Schema",re=`${g.name}Query`;if(z!=null&&z.useOperationId&&(c!=null&&c.operationId)&&(re=`${c.operationId}Query`),re=$e(`${Z}${re}${ne}`),(un=(cn=e==null?void 0:e.validations)==null?void 0:cn.name)!=null&&un.format){let ee=e.validations.name.format({code:"",type:"query",method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId},re);ee&&(re=`${Z}${ee}${ne}`);}else if((fn=(dn=e==null?void 0:e.types)==null?void 0:dn.name)!=null&&fn.format){let ee=e.types.name.format("endpoint",{code:"",type:"query",method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId},re);ee&&(re=`${Z}${ee}${ne}`);}let W=v.map(ee=>{let We=ee!=null&&ee.schema?he(ee.schema,S):S==="joi"?"Joi.string()":S==="yup"?"yup.string()":"z.string()",Cr=ee.required?"":".optional()";return ` ${ee.name}: ${We}${Cr}`}).join(`,
|
|
73
|
+
`),X=`export const ${re} = ${S==="joi"?"Joi.object":S==="yup"?"yup.object":"z.object"}({
|
|
74
|
+
${W}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
`;e!=null&&e.folderSplit||I[h]||(I[h]={endpoints:"",types:"",validation:""}),I[h].validation+=X;}}let P=c==null?void 0:c.requestBody,j="",L;if(P&&(j=Ft(P),j)){let S=`${g.name}DTO`;if((yn=(mn=e==null?void 0:e.types)==null?void 0:mn.name)!=null&&yn.useOperationId&&(c!=null&&c.operationId)&&(S=`${c.operationId}DTO`),S=$e(`${T}${S}`),(hn=(gn=e==null?void 0:e.types)==null?void 0:gn.name)!=null&&hn.format){let v=e==null?void 0:e.types.name.format("endpoint",{code:"",type:"dto",method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId},S);v&&(S=`${T}${v}`);}L=S;let x=l?`${Y(S,j,{inheritSingleTypeExpression:!0})}
|
|
78
|
+
`:`export type ${S} = ${j};
|
|
79
|
+
`;e!=null&&e.folderSplit?I[h].types+=x:Ce+=x;}if((($n=e==null?void 0:e.validations)==null?void 0:$n.disable)!==!0&&((Cn=(bn=e==null?void 0:e.validations)==null?void 0:bn.generate)==null?void 0:Cn.dto)!==!1&&P){let S=((In=e.validations)==null?void 0:In.library)||"zod";if(P.content){let x=Object.keys(P.content);if(x[0]&&P.content[x[0]].schema){let v=((xn=e==null?void 0:e.validations)==null?void 0:xn.name)||((wn=e==null?void 0:e.types)==null?void 0:wn.name),z=typeof(v==null?void 0:v.prefix)=="string"?v.prefix:"I",Z=typeof((Sn=(En=e==null?void 0:e.validations)==null?void 0:En.name)==null?void 0:Sn.suffix)=="string"?e.validations.name.suffix:"Schema",ne=`${g.name}DTO`;if(v!=null&&v.useOperationId&&(c!=null&&c.operationId)&&(ne=`${c.operationId}DTO`),ne=$e(`${z}${ne}${Z}`),(On=(An=e==null?void 0:e.validations)==null?void 0:An.name)!=null&&On.format){let ie=e.validations.name.format({code:"",type:"dto",method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId},ne);ie&&(ne=`${z}${ie}${Z}`);}else if((Tn=(vn=e==null?void 0:e.types)==null?void 0:vn.name)!=null&&Tn.format){let ie=e.types.name.format("endpoint",{code:"",type:"dto",method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId},ne);ie&&(ne=`${z}${ie}${Z}`);}let re=he(P.content[x[0]].schema,S),W=`export const ${ne} = ${re};
|
|
80
|
+
|
|
81
|
+
`;e!=null&&e.folderSplit||I[h]||(I[h]={endpoints:"",types:"",validation:""}),I[h].validation+=W;}}}let U={},H="",Re="";if(c!=null&&c.responses){let S=c==null?void 0:c.responses;Object.keys(S).forEach(v=>{var z,Z,ne,re;if(H=Ft(S[v]),U[v]=H,H){let W=`${g.name}${v}Response`;if((Z=(z=e==null?void 0:e.types)==null?void 0:z.name)!=null&&Z.useOperationId&&(c!=null&&c.operationId)&&(W=`${c.operationId}${v}Response`),W=$e(`${T}${W}`),(re=(ne=e==null?void 0:e.types)==null?void 0:ne.name)!=null&&re.format){let ee=e==null?void 0:e.types.name.format("endpoint",{code:v,type:"response",method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId},W);ee&&(W=`${T}${ee}`);}let ie=l?`${Y(W,H,{inheritSingleTypeExpression:!0})}
|
|
82
|
+
`:`export type ${W} = ${H};
|
|
83
|
+
`;e!=null&&e.folderSplit?I[h].types+=ie:Ce+=ie,U[v]=W;let X=parseInt(v);X>=200&&X<300&&(Re=W);}});}let Oe=S=>!S||!S.length?"":S.map(x=>Object.entries(x).map(([z,Z])=>{let ne=z,re="";return Array.isArray(Z)&&Z.length&&(re=`
|
|
84
|
+
- Scopes: [\`${Z.join("`, `")}\`]`,ne=`**${ne}**`),`
|
|
85
|
+
- ${ne}${re}`}).join("")).join(`
|
|
86
|
+
`),Ie=c!=null&&c.security?Oe(c.security):"",xe="";if(!((jn=(Pn=e==null?void 0:e.endpoints)==null?void 0:Pn.doc)!=null&&jn.disable)){let S="";if((kn=(Rn=e==null?void 0:e.endpoints)==null?void 0:Rn.doc)!=null&&kn.showCurl||l){let x={},v="",z="";(qn=c.requestBody)!=null&&qn.content&&Object.keys(c.requestBody.content).forEach(ie=>{let X=c.requestBody.content[ie].schema;if(X){Array.isArray(x["Content-type"])?x["Content-type"].push(ie):x["Content-type"]=[ie];let ee=ae(r,X);ee&&(v=ee);}}),c!=null&&c.security&&c.security.forEach(W=>{Object.keys(W).forEach(ie=>{var ee,We;let X=(We=(ee=r.components)==null?void 0:ee.securitySchemes)==null?void 0:We[ie];X&&(X.type==="mutualTLS"?z+=`
|
|
87
|
+
--cert client-certificate.crt --key client-private-key.key --cacert ca-certificate.crt`:X.type==="apiKey"?x[(X==null?void 0:X.name)||"X-API-KEY"]="{API_KEY_VALUE}":x.Authorization=`${(X==null?void 0:X.scheme)==="basic"?"Basic":"Bearer"} {${(X==null?void 0:X.scheme)==="basic"?"VALUE":"TOKEN"}}`);});});let Z={};Object.keys(x).forEach(W=>{Array.isArray(x[W])?Z[W]=x[W].join("; "):Z[W]=x[W];});let re=`${curlGenerator.CurlGenerator({url:k+a,method:f.toUpperCase(),headers:Z,body:v})||`curl ${k+a} -X ${f.toUpperCase()}`}${z}`;S=l?`
|
|
88
|
+
\`\`\`bash
|
|
89
|
+
${re}
|
|
90
|
+
\`\`\``:`
|
|
91
|
+
\`\`\`bash
|
|
92
|
+
${re}
|
|
93
|
+
\`\`\``;}if(l){let x=[];c!=null&&c.description&&x.push(`* ${c.description}`),x.push(`* **Method**: ${f.toUpperCase()}`),x.push(`* **Summary**: ${(c==null?void 0:c.summary)||""}`),x.push(`* **Tags**: [${((Nn=c==null?void 0:c.tags)==null?void 0:Nn.join(", "))||""}]`),x.push(`* **OperationId**: ${(c==null?void 0:c.operationId)||""}`),_&&(x.push("* **Query**:"),x.push("```python"),_.split(`
|
|
94
|
+
`).filter(v=>v.trim().length>0).forEach(v=>x.push(v)),x.push("```")),j&&(x.push("* **DTO**:"),x.push("```python"),j.split(`
|
|
95
|
+
`).filter(v=>v.trim().length>0).forEach(v=>x.push(v)),x.push("```")),H&&(x.push("* **Response**:"),x.push("```python"),Object.entries(U).forEach(([v,z])=>{x.push(`${v}: ${String(z).replace(/\n/g," ")}`);}),x.push("```")),Ie&&(x.push("* **Security**:"),Ie.split(`
|
|
96
|
+
`).filter(v=>v.trim().length>0).forEach(v=>x.push(v.replace(/\*\*/g,"")))),xe=`"""
|
|
97
|
+
${x.join(`
|
|
98
|
+
`)}${S}
|
|
99
|
+
"""
|
|
100
|
+
`;}else xe=`/**${c!=null&&c.description?`
|
|
101
|
+
* ${c==null?void 0:c.description} `:""}
|
|
102
|
+
* **Method**: \`${f.toUpperCase()}\`
|
|
103
|
+
* **Summary**: ${(c==null?void 0:c.summary)||""}
|
|
104
|
+
* **Tags**: [${((Fn=c==null?void 0:c.tags)==null?void 0:Fn.join(", "))||""}]
|
|
105
|
+
* **OperationId**: ${(c==null?void 0:c.operationId)||""} ${_?`
|
|
106
|
+
* **Query**: ${Ge(_)} `:""}${j?`
|
|
107
|
+
* **DTO**: ${Ge(j)} `:""}${H?`
|
|
108
|
+
* **Response**: ${Object.entries(U).map(([x,v])=>`
|
|
109
|
+
- **${x}**: ${Ge(v,2)} `).join("")}`:""}${Ie?`
|
|
110
|
+
* **Security**: ${Ie}
|
|
111
|
+
`:""}${S}
|
|
112
|
+
*/
|
|
113
|
+
`;}let we=(Ln=(Un=e==null?void 0:e.endpoints)==null?void 0:Un.name)!=null&&Ln.useOperationId&&((Gn=c==null?void 0:c.operationId)==null?void 0:Gn.length)>0?c.operationId:`${g.name}`;if((Qn=(Mn=e==null?void 0:e.endpoints)==null?void 0:Mn.name)!=null&&Qn.format){let S=e==null?void 0:e.endpoints.name.format({method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId},we);S&&(we=S);}let st={method:`"${f}"`,operationId:`"${c==null?void 0:c.operationId}"`,url:D,tags:(c==null?void 0:c.tags)||[]},$r=`Endpoint(
|
|
114
|
+
method="${f}",
|
|
115
|
+
operationId="${(c==null?void 0:c.operationId)||""}",
|
|
116
|
+
url=${D},
|
|
117
|
+
tags=[${((c==null?void 0:c.tags)||[]).map(S=>`"${S}"`).join(", ")}]
|
|
118
|
+
)`,Wt=l?`${N}${we} = ${$r}
|
|
119
|
+
${xe?`${xe}`:""}
|
|
120
|
+
|
|
121
|
+
`:`${xe}export const ${N}${we} = ${((Bn=(Jn=e==null?void 0:e.endpoints)==null?void 0:Jn.value)==null?void 0:Bn.type)==="object"?ke(st):D};
|
|
122
|
+
`;e!=null&&e.folderSplit?I[h].endpoints+=Wt:fe+=Wt;let br={name:`${N}${we}`,method:f,path:a,summary:c==null?void 0:c.summary,operationId:c==null?void 0:c.operationId,tags:m,parameters:(zn=c==null?void 0:c.parameters)==null?void 0:zn.filter(S=>!S.$ref&&S.in&&S.name).map(S=>{var x;return {name:S.name,in:S.in,required:S.required,type:((x=S.schema)==null?void 0:x.type)||"string"}}),requestBody:P?{type:j,required:P.required}:void 0,responses:U?Object.entries(U).reduce((S,[x,v])=>(S[x]={type:v},S),{}):void 0,queryType:w,dtoType:L,responseType:Re||void 0};_e.push(br);});}),e!=null&&e.folderSplit){let a=`from dataclasses import dataclass
|
|
123
|
+
from typing import List
|
|
124
|
+
|
|
125
|
+
@dataclass
|
|
126
|
+
class Endpoint:
|
|
127
|
+
method: str
|
|
128
|
+
operationId: str
|
|
129
|
+
url: str
|
|
130
|
+
tags: List[str]
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
`;for(let[p,C]of Object.entries(I))if(C.endpoints||C.types){let b=te__default.default.join(d,p);if(C.endpoints){let f=te__default.default.join(Se,b,`endpoints.${y}`);yield me__default.default.promises.mkdir(te__default.default.dirname(f),{recursive:!0}),yield ve(f,l?`${a}${C.endpoints}`:C.endpoints,e);}if(C.types){let f=te__default.default.join(Se,b,`types.${y}`);yield me__default.default.promises.mkdir(te__default.default.dirname(f),{recursive:!0});let g=Object.values(pe).length>0?l?`from __future__ import annotations
|
|
135
|
+
from dataclasses import dataclass
|
|
136
|
+
from . import shared as Shared
|
|
137
|
+
${G(C.types)}
|
|
138
|
+
${C.types}`:`import * as Shared from "../shared";
|
|
139
|
+
|
|
140
|
+
${C.types}`:C.types;yield ve(f,g,e);}if(((Bt=e==null?void 0:e.validations)==null?void 0:Bt.disable)!==!0&&C.validation&&!l){let f=((zt=e.validations)==null?void 0:zt.library)||"zod",g=f==="joi"?'import Joi from "joi";':f==="yup"?'import * as yup from "yup";':'import { z } from "zod";',m=te__default.default.join(Se,b,"validations.ts");yield me__default.default.promises.mkdir(te__default.default.dirname(m),{recursive:!0}),yield ve(m,`${g}
|
|
141
|
+
|
|
142
|
+
${C.validation}`,e);}}}if(fe.length>0){let a=`from dataclasses import dataclass
|
|
143
|
+
from typing import List
|
|
144
|
+
|
|
145
|
+
@dataclass
|
|
146
|
+
class Endpoint:
|
|
147
|
+
method: str
|
|
148
|
+
operationId: str
|
|
149
|
+
url: str
|
|
150
|
+
tags: List[str]
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
`,p=te__default.default.join(Se,d,`endpoints.${y}`);yield me__default.default.promises.mkdir(te__default.default.dirname(p),{recursive:!0}),yield ve(p,l?`${a}${fe}`:fe,e);}if(Object.values(pe).length>0){let a=Object.values(pe).join(`
|
|
155
|
+
`),p=te__default.default.join(Se,d,e!=null&&e.folderSplit?"":"types",`shared.${y}`);yield me__default.default.promises.mkdir(te__default.default.dirname(p),{recursive:!0}),yield ve(p,(l?`from __future__ import annotations
|
|
156
|
+
from dataclasses import dataclass
|
|
157
|
+
${G(a)}
|
|
158
|
+
`:"")+a,e);}if(Ce.length>0){let a=te__default.default.join(Se,d,"types",`index.${y}`);yield me__default.default.promises.mkdir(te__default.default.dirname(a),{recursive:!0}),yield ve(a,(Object.values(pe).length>0?l?`from __future__ import annotations
|
|
159
|
+
from dataclasses import dataclass
|
|
160
|
+
from . import shared as Shared
|
|
161
|
+
${G(Ce)}
|
|
162
|
+
`:`import * as Shared from "./shared";
|
|
163
|
+
|
|
164
|
+
`:"")+Ce,e);}if(((Dt=e==null?void 0:e.validations)==null?void 0:Dt.disable)!==!0&&!(e!=null&&e.folderSplit)&&!l){let a=((_t=e.validations)==null?void 0:_t.library)||"zod",p=a==="joi"?'import Joi from "joi";':a==="yup"?'import * as yup from "yup";':'import { z } from "zod";',C=Object.values(I).map(b=>b.validation).filter(b=>b.length>0).join("");if(C){let b=te__default.default.join(Se,d,"validations.ts");yield me__default.default.promises.mkdir(te__default.default.dirname(b),{recursive:!0}),yield ve(b,`${p}
|
|
165
|
+
|
|
166
|
+
${C}`,e);}}return tr(o,_e),console.info(`\u2705 Successfully synced ${o}`),{success:!0}}),Ze=rr;});var or,yt,Te,gt,ht,$t,ir=ce(()=>{"use strict";or=(n,i)=>{let o=n;return i.tags&&i.tags.length>0&&(o=o.filter(e=>!e.tags||e.tags.length===0?!1:e.tags.some(s=>i.tags.includes(s)))),i.endpoints&&i.endpoints.length>0&&(o=o.filter(e=>i.endpoints.includes(e.name))),o},yt=(n,i,o=!1)=>{var r,d;let e=i.baseURL||"",s=i.auth,t=`// Generated Fetch API Client
|
|
167
|
+
`;t+=`// This file was auto-generated. Add custom code in the marked sections.
|
|
168
|
+
|
|
169
|
+
`,t+=`import type {
|
|
170
|
+
`;let u=new Set;if(n.forEach(l=>{l.queryType&&u.add(l.queryType),l.dtoType&&u.add(l.dtoType),l.responseType&&u.add(l.responseType);}),u.forEach(l=>{t+=` ${l},
|
|
171
|
+
`;}),t+=`} from '../types';
|
|
172
|
+
|
|
173
|
+
`,t+=`import {
|
|
174
|
+
`,n.forEach(l=>{t+=` ${l.name} as ${l.name}_endpoint,
|
|
175
|
+
`;}),t+=`} from '../endpoints';
|
|
176
|
+
|
|
177
|
+
`,t+=`export interface ApiConfig {
|
|
178
|
+
`,t+=` baseURL?: string;
|
|
179
|
+
`,t+=` headers?: Record<string, string>;
|
|
180
|
+
`,s&&(t+=` auth?: {
|
|
181
|
+
`,s.type==="bearer"?t+=` token?: string;
|
|
182
|
+
`:s.type==="basic"?(t+=` username?: string;
|
|
183
|
+
`,t+=` password?: string;
|
|
184
|
+
`):s.type==="apiKey"&&(t+=` apiKey?: string;
|
|
185
|
+
`),t+=` };
|
|
186
|
+
`),t+=`}
|
|
187
|
+
|
|
188
|
+
`,t+=`let globalConfig: ApiConfig = {
|
|
189
|
+
`,t+=` baseURL: "${e}",
|
|
190
|
+
`,t+=`};
|
|
191
|
+
|
|
192
|
+
`,t+=`export const setApiConfig = (config: Partial<ApiConfig>) => {
|
|
193
|
+
`,t+=` globalConfig = { ...globalConfig, ...config };
|
|
194
|
+
`,t+=`};
|
|
195
|
+
|
|
196
|
+
`,(r=i.errorHandling)!=null&&r.generateErrorClasses&&(t+=`export class ApiError extends Error {
|
|
197
|
+
`,t+=` constructor(
|
|
198
|
+
`,t+=` message: string,
|
|
199
|
+
`,t+=` public statusCode: number,
|
|
200
|
+
`,t+=` public response?: any
|
|
201
|
+
`,t+=` ) {
|
|
202
|
+
`,t+=` super(message);
|
|
203
|
+
`,t+=` this.name = 'ApiError';
|
|
204
|
+
`,t+=` }
|
|
205
|
+
`,t+=`}
|
|
206
|
+
|
|
207
|
+
`),t+=`async function fetchAPI<T>(
|
|
208
|
+
`,t+=` url: string,
|
|
209
|
+
`,t+=` options: RequestInit = {}
|
|
210
|
+
`,t+=`): Promise<T> {
|
|
211
|
+
`,t+=` const headers: Record<string, string> = {
|
|
212
|
+
`,t+=` 'Content-Type': 'application/json',
|
|
213
|
+
`,t+=` ...globalConfig.headers,
|
|
214
|
+
`,t+=` ...(options.headers as Record<string, string>),
|
|
215
|
+
`,t+=` };
|
|
216
|
+
|
|
217
|
+
`,s){if(s.type==="bearer")t+=` if (globalConfig.auth?.token) {
|
|
218
|
+
`,t+=" headers['Authorization'] = `Bearer ${globalConfig.auth.token}`;\n",t+=` }
|
|
219
|
+
|
|
220
|
+
`;else if(s.type==="basic")t+=` if (globalConfig.auth?.username && globalConfig.auth?.password) {
|
|
221
|
+
`,t+=" const credentials = btoa(`${globalConfig.auth.username}:${globalConfig.auth.password}`);\n",t+=" headers['Authorization'] = `Basic ${credentials}`;\n",t+=` }
|
|
222
|
+
|
|
223
|
+
`;else if(s.type==="apiKey"){let l=s.name||"X-API-Key";(s.in==="header"||!s.in)&&(t+=` if (globalConfig.auth?.apiKey) {
|
|
224
|
+
`,t+=` headers['${l}'] = globalConfig.auth.apiKey;
|
|
225
|
+
`,t+=` }
|
|
226
|
+
|
|
227
|
+
`);}}return t+=" const response = await fetch(`${globalConfig.baseURL}${url}`, {\n",t+=` ...options,
|
|
228
|
+
`,t+=` headers,
|
|
229
|
+
`,t+=` });
|
|
230
|
+
|
|
231
|
+
`,t+=` if (!response.ok) {
|
|
232
|
+
`,(d=i.errorHandling)!=null&&d.generateErrorClasses?(t+=` const errorData = await response.json().catch(() => ({}));
|
|
233
|
+
`,t+=` throw new ApiError(
|
|
234
|
+
`,t+=` errorData.message || response.statusText,
|
|
235
|
+
`,t+=` response.status,
|
|
236
|
+
`,t+=` errorData
|
|
237
|
+
`,t+=` );
|
|
238
|
+
`):t+=" throw new Error(`HTTP error! status: ${response.status}`);\n",t+=` }
|
|
239
|
+
|
|
240
|
+
`,t+=` return response.json();
|
|
241
|
+
`,t+=`}
|
|
242
|
+
|
|
243
|
+
`,n.forEach(l=>{var Q,O;let y=l.name,I=((Q=l.parameters)==null?void 0:Q.filter(E=>E.in==="path"))||[],q=((O=l.parameters)==null?void 0:O.filter(E=>E.in==="query"))||[],k=I.length>0,T=q.length>0,N=!!l.requestBody,F=l.responseType||"any";if(t+=`/**
|
|
244
|
+
`,l.summary&&(t+=` * ${l.summary}
|
|
245
|
+
`),t+=` * @method ${l.method.toUpperCase()}
|
|
246
|
+
`,t+=` * @path ${l.path}
|
|
247
|
+
`,l.tags&&l.tags.length>0&&(t+=` * @tags ${l.tags.join(", ")}
|
|
248
|
+
`),t+=` */
|
|
249
|
+
`,t+=`export async function ${y}(`,(k||T||N)&&(t+=`params: {
|
|
250
|
+
`,k&&(t+=` url: {
|
|
251
|
+
`,I.forEach(E=>{let G={string:"string",number:"number",integer:"number",boolean:"boolean",array:"any[]",object:"any"}[E.type||"string"]||"any",J=E.required?"":"?";t+=` ${E.name}${J}: ${G};
|
|
252
|
+
`;}),t+=` };
|
|
253
|
+
`),T&&(t+=` query: ${l.queryType||"Record<string, any>"};
|
|
254
|
+
`),N&&(t+=` data: ${l.dtoType||"any"};
|
|
255
|
+
`),t+=`}
|
|
256
|
+
`),t+=`): Promise<${F}> {
|
|
257
|
+
`,k||T||N){let E=[];k&&E.push("url"),T&&E.push("query"),N&&E.push("data"),t+=` const { ${E.join(", ")} } = params;
|
|
258
|
+
`;}let A;if(k){let E=I.map(Y=>`url.${Y.name}`).join(", ");A=`${l.name}_endpoint(${E})`;}else A=`${l.name}_endpoint`;T?(t+=` const queryParams = new URLSearchParams();
|
|
259
|
+
`,q.forEach(E=>{E.required?t+=` queryParams.append('${E.name}', String(query.${E.name}));
|
|
260
|
+
`:(t+=` if (query.${E.name} !== undefined) {
|
|
261
|
+
`,t+=` queryParams.append('${E.name}', String(query.${E.name}));
|
|
262
|
+
`,t+=` }
|
|
263
|
+
`);}),t+=` const _url = \`\${${A}}?\${queryParams.toString()}\`;
|
|
264
|
+
`):t+=` const _url = ${A};
|
|
265
|
+
`,t+=` return fetchAPI<${F}>(_url, {
|
|
266
|
+
`,t+=` method: '${l.method.toUpperCase()}',
|
|
267
|
+
`,N&&(t+=` body: JSON.stringify(data),
|
|
268
|
+
`),t+=` });
|
|
269
|
+
`,t+=`}
|
|
270
|
+
|
|
271
|
+
`;}),o&&(t+=`// Export all functions as a default object
|
|
272
|
+
`,t+=`const apiClient = {
|
|
273
|
+
`,t+=` setApiConfig,
|
|
274
|
+
`,n.forEach(l=>{t+=` ${l.name},
|
|
275
|
+
`;}),t+=`};
|
|
276
|
+
|
|
277
|
+
`,t+=`export default apiClient;
|
|
278
|
+
`),t},Te=(n,i,o=!1)=>{var r,d;let e=i.baseURL||"",s=i.auth,t=`// Generated Axios API Client
|
|
279
|
+
`;t+=`// This file was auto-generated. Add custom code in the marked sections.
|
|
280
|
+
|
|
281
|
+
`,t+=`import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
282
|
+
|
|
283
|
+
`,t+=`import type {
|
|
284
|
+
`;let u=new Set;return n.forEach(l=>{l.queryType&&u.add(l.queryType),l.dtoType&&u.add(l.dtoType),l.responseType&&u.add(l.responseType);}),u.forEach(l=>{t+=` ${l},
|
|
285
|
+
`;}),t+=`} from '../types';
|
|
286
|
+
|
|
287
|
+
`,t+=`import {
|
|
288
|
+
`,n.forEach(l=>{t+=` ${l.name},
|
|
289
|
+
`;}),t+=`} from '../endpoints';
|
|
290
|
+
|
|
291
|
+
`,t+=`export interface ApiConfig {
|
|
292
|
+
`,t+=` baseURL?: string;
|
|
293
|
+
`,t+=` headers?: Record<string, string>;
|
|
294
|
+
`,t+=` timeout?: number;
|
|
295
|
+
`,t+=`}
|
|
296
|
+
|
|
297
|
+
`,(r=i.errorHandling)!=null&&r.generateErrorClasses&&(t+=`export class ApiError extends Error {
|
|
298
|
+
`,t+=` constructor(
|
|
299
|
+
`,t+=` message: string,
|
|
300
|
+
`,t+=` public statusCode: number,
|
|
301
|
+
`,t+=` public response?: any
|
|
302
|
+
`,t+=` ) {
|
|
303
|
+
`,t+=` super(message);
|
|
304
|
+
`,t+=` this.name = 'ApiError';
|
|
305
|
+
`,t+=` }
|
|
306
|
+
`,t+=`}
|
|
307
|
+
|
|
308
|
+
`),t+=`class ApiClient {
|
|
309
|
+
`,t+=` private client: AxiosInstance;
|
|
310
|
+
|
|
311
|
+
`,t+=` constructor(config: ApiConfig = {}) {
|
|
312
|
+
`,t+=` this.client = axios.create({
|
|
313
|
+
`,t+=` baseURL: config.baseURL || "${e}",
|
|
314
|
+
`,t+=` timeout: config.timeout || 30000,
|
|
315
|
+
`,t+=` headers: {
|
|
316
|
+
`,t+=` 'Content-Type': 'application/json',
|
|
317
|
+
`,t+=` ...config.headers,
|
|
318
|
+
`,t+=` },
|
|
319
|
+
`,t+=` });
|
|
320
|
+
|
|
321
|
+
`,t+=` // Response interceptor for error handling
|
|
322
|
+
`,t+=` this.client.interceptors.response.use(
|
|
323
|
+
`,t+=` (response) => response,
|
|
324
|
+
`,t+=` (error) => {
|
|
325
|
+
`,(d=i.errorHandling)!=null&&d.generateErrorClasses?(t+=` const message = error.response?.data?.message || error.message;
|
|
326
|
+
`,t+=` const statusCode = error.response?.status || 500;
|
|
327
|
+
`,t+=` throw new ApiError(message, statusCode, error.response?.data);
|
|
328
|
+
`):t+=` return Promise.reject(error);
|
|
329
|
+
`,t+=` }
|
|
330
|
+
`,t+=` );
|
|
331
|
+
`,t+=` }
|
|
332
|
+
|
|
333
|
+
`,t+=` updateConfig(config: Partial<ApiConfig>) {
|
|
334
|
+
`,t+=` Object.assign(this.client.defaults, config);
|
|
335
|
+
`,t+=` }
|
|
336
|
+
|
|
337
|
+
`,n.forEach(l=>{var A,Q;let y=l.name,I=((A=l.parameters)==null?void 0:A.filter(O=>O.in==="path"))||[],q=((Q=l.parameters)==null?void 0:Q.filter(O=>O.in==="query"))||[],k=I.length>0,T=q.length>0,N=!!l.requestBody,F=l.responseType||"any";if(t+=` /**
|
|
338
|
+
`,l.summary&&(t+=` * ${l.summary}
|
|
339
|
+
`),t+=` * @method ${l.method.toUpperCase()}
|
|
340
|
+
`,t+=` * @path ${l.path}
|
|
341
|
+
`,l.tags&&l.tags.length>0&&(t+=` * @tags ${l.tags.join(", ")}
|
|
342
|
+
`),t+=` */
|
|
343
|
+
`,t+=` async ${y}(`,(k||T||N)&&(t+=`params: {
|
|
344
|
+
`,k&&(t+=` url: {
|
|
345
|
+
`,I.forEach(O=>{let Y={string:"string",number:"number",integer:"number",boolean:"boolean",array:"any[]",object:"any"}[O.type||"string"]||"any",G=O.required?"":"?";t+=` ${O.name}${G}: ${Y};
|
|
346
|
+
`;}),t+=` };
|
|
347
|
+
`),T&&(t+=` query: ${l.queryType||"Record<string, any>"};
|
|
348
|
+
`),N&&(t+=` data: ${l.dtoType||"any"};
|
|
349
|
+
`),t+=" }"),t+=`): Promise<${F}> {
|
|
350
|
+
`,k||T||N){let O=[];k&&O.push("url"),T&&O.push("query"),N&&O.push("data"),t+=` const { ${O.join(", ")} } = params;
|
|
351
|
+
`;}if(k){let O=I.map(E=>`url.${E.name}`).join(", ");t+=` const _url = ${l.name}(${O});
|
|
352
|
+
`;}else t+=` const _url = ${l.name};
|
|
353
|
+
`;t+=` const config: AxiosRequestConfig = {};
|
|
354
|
+
`,T&&(t+=` config.params = { ...query };
|
|
355
|
+
`),t+=` const response = await this.client.${l.method.toLowerCase()}<${F}>(
|
|
356
|
+
`,t+=` _url,
|
|
357
|
+
`,N?t+=` data,
|
|
358
|
+
config
|
|
359
|
+
`:t+=` config
|
|
360
|
+
`,t+=` );
|
|
361
|
+
`,t+=` return response.data;
|
|
362
|
+
`,t+=` }
|
|
363
|
+
|
|
364
|
+
`;}),t+=`}
|
|
365
|
+
|
|
366
|
+
`,o?t+=`export default ApiClient;
|
|
367
|
+
`:(t+=`export const apiClient = new ApiClient();
|
|
368
|
+
`,t+=`export default apiClient;
|
|
369
|
+
`),t},gt=(n,i)=>{var d,l;let o=((d=i.reactQuery)==null?void 0:d.version)||5,e=((l=i.reactQuery)==null?void 0:l.mutations)!==!1,s=!!(i.reactQuery&&i.reactQuery.infiniteQueries&&!i.reactQuery.infiniteQueries.disable),t=`// Generated React Query Hooks
|
|
370
|
+
`;t+=`// This file was auto-generated. Add custom code in the marked sections.
|
|
371
|
+
|
|
372
|
+
`;let u=e&&n.some(y=>["POST","PUT","PATCH","DELETE"].includes(y.method.toUpperCase()));if(o===5){let y=u?`import { useQuery, useMutation, UseQueryOptions, UseMutationOptions } from '@tanstack/react-query';
|
|
373
|
+
`:`import { useQuery, UseQueryOptions } from '@tanstack/react-query';
|
|
374
|
+
`;s&&(y=y.replace("@tanstack/react-query';\\n",`@tanstack/react-query';
|
|
375
|
+
import { useInfiniteQuery, UseInfiniteQueryOptions } from '@tanstack/react-query';
|
|
376
|
+
`)),t+=y;}else {let y=u?`import { useQuery, useMutation, UseQueryOptions, UseMutationOptions } from 'react-query';
|
|
377
|
+
`:`import { useQuery, UseQueryOptions } from 'react-query';
|
|
378
|
+
`;s&&(y=y.replace("react-query';\\n",`react-query';
|
|
379
|
+
import { useInfiniteQuery, UseInfiniteQueryOptions } from 'react-query';
|
|
380
|
+
`)),t+=y;}t+=`
|
|
381
|
+
`,t+=`import apiClient from './client';
|
|
382
|
+
`,t+=`import type {
|
|
383
|
+
`;let r=new Set;return n.forEach(y=>{y.queryType&&r.add(y.queryType),y.dtoType&&r.add(y.dtoType),y.responseType&&r.add(y.responseType);}),r.forEach(y=>{t+=` ${y},
|
|
384
|
+
`;}),t+=`} from '../types';
|
|
385
|
+
|
|
386
|
+
`,n.forEach(y=>{var E,Y;let I=y.method.toUpperCase(),q=I==="GET",k=["POST","PUT","PATCH","DELETE"].includes(I),T=((E=y.parameters)==null?void 0:E.filter(G=>G.in==="path"))||[],N=((Y=y.parameters)==null?void 0:Y.filter(G=>G.in==="query"))||[],F=T.length>0,A=N.length>0,Q=!!y.requestBody,O=y.responseType||"any";if(q){let G=N.map(le=>le.name.toLowerCase()),de=(G.includes("page")||G.includes("cursor")||G.includes("cursorid")||G.includes("after")||G.includes("before"))&&s,ae=`use${y.name.charAt(0).toUpperCase()+y.name.slice(1)}`;if(t+=`/**
|
|
387
|
+
`,y.summary&&(t+=` * ${y.summary}
|
|
388
|
+
`),t+=` * @method ${I}
|
|
389
|
+
`,t+=` * @path ${y.path}
|
|
390
|
+
`,y.tags&&y.tags.length>0&&(t+=` * @tags ${y.tags.join(", ")}
|
|
391
|
+
`),t+=` */
|
|
392
|
+
`,F||A?(t+=`export function ${ae}(
|
|
393
|
+
`,t+=` params: {
|
|
394
|
+
`,F&&(t+=` url: {
|
|
395
|
+
`,T.forEach(le=>{let Ce={string:"string",number:"number",integer:"number",boolean:"boolean",array:"any[]",object:"any"}[le.type||"string"]||"any",pe=le.required?"":"?";t+=` ${le.name}${pe}: ${Ce};
|
|
396
|
+
`;}),t+=` };
|
|
397
|
+
`),A&&(t+=` query: ${y.queryType||"Record<string, any>"};
|
|
398
|
+
`),t+=` },
|
|
399
|
+
`,t+=` options?: Omit<UseQueryOptions<${O}>, 'queryKey' | 'queryFn'>
|
|
400
|
+
`,t+=`) {
|
|
401
|
+
`,t+=` return useQuery({
|
|
402
|
+
`,t+=` queryKey: ['${y.name}', params],
|
|
403
|
+
`,t+=` queryFn: () => apiClient.${y.name}(params),
|
|
404
|
+
`,t+=` ...options,
|
|
405
|
+
`,t+=` });
|
|
406
|
+
`,t+=`}
|
|
407
|
+
|
|
408
|
+
`):(t+=`export function ${ae}(
|
|
409
|
+
`,t+=` options?: Omit<UseQueryOptions<${O}>, 'queryKey' | 'queryFn'>
|
|
410
|
+
`,t+=`) {
|
|
411
|
+
`,t+=` return useQuery({
|
|
412
|
+
`,t+=` queryKey: ['${y.name}'],
|
|
413
|
+
`,t+=` queryFn: () => apiClient.${y.name}(),
|
|
414
|
+
`,t+=` ...options,
|
|
415
|
+
`,t+=` });
|
|
416
|
+
`,t+=`}
|
|
417
|
+
|
|
418
|
+
`),de){let le=`${ae}Infinite`;F||A?(t+=`export function ${le}(
|
|
419
|
+
`,t+=` params: {
|
|
420
|
+
`,F&&(t+=` url: {
|
|
421
|
+
`,T.forEach(fe=>{let pe={string:"string",number:"number",integer:"number",boolean:"boolean",array:"any[]",object:"any"}[fe.type||"string"]||"any",_e=fe.required?"":"?";t+=` ${fe.name}${_e}: ${pe};
|
|
422
|
+
`;}),t+=` };
|
|
423
|
+
`),A&&(t+=` query: ${y.queryType||"Record<string, any>"};
|
|
424
|
+
`),t+=` },
|
|
425
|
+
`,t+=` options?: Omit<UseInfiniteQueryOptions<${O}, Error, ${O}>, 'queryKey' | 'queryFn'>
|
|
426
|
+
`,t+=`) {
|
|
427
|
+
`,t+=` return useInfiniteQuery({
|
|
428
|
+
`,t+=` queryKey: ['${y.name}', params],
|
|
429
|
+
`,t+=` queryFn: ({ pageParam = 1 }) => apiClient.${y.name}({ ...params, query: { ...(params.query || {}), page: pageParam } }),
|
|
430
|
+
`,t+=` getNextPageParam: (lastPage) => lastPage?.nextPage ?? lastPage?.nextCursor ?? null,
|
|
431
|
+
`,t+=` ...options,
|
|
432
|
+
`,t+=` });
|
|
433
|
+
`,t+=`}
|
|
434
|
+
|
|
435
|
+
`):(t+=`export function ${le}(
|
|
436
|
+
`,t+=` options?: Omit<UseInfiniteQueryOptions<${O}, Error, ${O}>, 'queryKey' | 'queryFn'>
|
|
437
|
+
`,t+=`) {
|
|
438
|
+
`,t+=` return useInfiniteQuery({
|
|
439
|
+
`,t+=` queryKey: ['${y.name}'],
|
|
440
|
+
`,t+=` queryFn: ({ pageParam = 1 }) => apiClient.${y.name}({ query: { page: pageParam } }),
|
|
441
|
+
`,t+=` getNextPageParam: (lastPage) => lastPage?.nextPage ?? lastPage?.nextCursor ?? null,
|
|
442
|
+
`,t+=` ...options,
|
|
443
|
+
`,t+=` });
|
|
444
|
+
`,t+=`}
|
|
445
|
+
|
|
446
|
+
`);}}else if(k&&e){let G=`use${y.name.charAt(0).toUpperCase()+y.name.slice(1)}`;t+=`/**
|
|
447
|
+
`,y.summary&&(t+=` * ${y.summary}
|
|
448
|
+
`),t+=` * @method ${I}
|
|
449
|
+
`,t+=` * @path ${y.path}
|
|
450
|
+
`,y.tags&&y.tags.length>0&&(t+=` * @tags ${y.tags.join(", ")}
|
|
451
|
+
`),t+=` */
|
|
452
|
+
`;let J="void";(F||A||Q)&&(J=`{
|
|
453
|
+
`,F&&(J+=` url: {
|
|
454
|
+
`,T.forEach(de=>{let le={string:"string",number:"number",integer:"number",boolean:"boolean",array:"any[]",object:"any"}[de.type||"string"]||"any",fe=de.required?"":"?";J+=` ${de.name}${fe}: ${le};
|
|
455
|
+
`;}),J+=` };
|
|
456
|
+
`),A&&(J+=` query: ${y.queryType||"Record<string, any>"};
|
|
457
|
+
`),Q&&(J+=` data: ${y.dtoType||"any"};
|
|
458
|
+
`),J+=" }"),t+=`export function ${G}(
|
|
459
|
+
`,t+=` options?: Omit<UseMutationOptions<${O}, Error, ${J}>, 'mutationFn'>
|
|
460
|
+
`,t+=`) {
|
|
461
|
+
`,t+=` return useMutation({
|
|
462
|
+
`,t+=" mutationFn: (",J!=="void"&&(t+=`variables: ${J}`),t+=`) => {
|
|
463
|
+
`,t+=` return apiClient.${y.name}(${J!=="void"?"variables":""});
|
|
464
|
+
`,t+=` },
|
|
465
|
+
`,t+=` ...options,
|
|
466
|
+
`,t+=` });
|
|
467
|
+
`,t+=`}
|
|
468
|
+
|
|
469
|
+
`;}}),t},ht=(n,i)=>{var u;let o=((u=i.swr)==null?void 0:u.mutations)!==!1,e=`// Generated SWR Hooks
|
|
470
|
+
`;e+=`// This file was auto-generated. Add custom code in the marked sections.
|
|
471
|
+
|
|
472
|
+
`,e+=`/**
|
|
473
|
+
`,e+=` * SWR Hooks - Complete Usage Guide
|
|
474
|
+
`,e+=` *
|
|
475
|
+
`,e+=` * This file contains type-safe SWR hooks generated from your OpenAPI specification.
|
|
476
|
+
`,e+=` *
|
|
477
|
+
`,e+=` * ## Quick Start
|
|
478
|
+
`,e+=` *
|
|
479
|
+
`,e+=` * 1. Configure SWR globally:
|
|
480
|
+
`,e+=` *
|
|
481
|
+
`,e+=" * ```typescript\n",e+=` * // app/providers.tsx
|
|
482
|
+
`,e+=` * import { SWRConfig } from 'swr';
|
|
483
|
+
`,e+=` *
|
|
484
|
+
`,e+=` * export function Providers({ children }) {
|
|
485
|
+
`,e+=` * return (
|
|
486
|
+
`,e+=` * <SWRConfig value={{
|
|
487
|
+
`,e+=` * revalidateOnFocus: false,
|
|
488
|
+
`,e+=` * shouldRetryOnError: true,
|
|
489
|
+
`,e+=` * errorRetryCount: 3,
|
|
490
|
+
`,e+=` * }}>
|
|
491
|
+
`,e+=` * {children}
|
|
492
|
+
`,e+=` * </SWRConfig>
|
|
493
|
+
`,e+=` * );
|
|
494
|
+
`,e+=` * }
|
|
495
|
+
`,e+=" * ```\n",e+=` *
|
|
496
|
+
`,e+=` * 2. Use the hooks in your components:
|
|
497
|
+
`,e+=` *
|
|
498
|
+
`,e+=` * ### Reading Data (GET)
|
|
499
|
+
`,e+=` *
|
|
500
|
+
`,e+=" * ```typescript\n",e+=` * import { useGetItems } from './hooks';
|
|
501
|
+
`,e+=` *
|
|
502
|
+
`,e+=` * function ItemList() {
|
|
503
|
+
`,e+=` * const { data, error, isLoading, mutate } = useGetItems();
|
|
504
|
+
`,e+=` *
|
|
505
|
+
`,e+=` * if (isLoading) return <div>Loading...</div>;
|
|
506
|
+
`,e+=` * if (error) return <div>Error: {error.message}</div>;
|
|
507
|
+
`,e+=` *
|
|
508
|
+
`,e+=` * return (
|
|
509
|
+
`,e+=` * <div>
|
|
510
|
+
`,e+=` * {data?.map(item => <div key={item.id}>{item.name}</div>)}
|
|
511
|
+
`,e+=` * <button onClick={() => mutate()}>Refresh</button>
|
|
512
|
+
`,e+=` * </div>
|
|
513
|
+
`,e+=` * );
|
|
514
|
+
`,e+=` * }
|
|
515
|
+
`,e+=" * ```\n",e+=` *
|
|
516
|
+
`,e+=` * ### With Path Parameters
|
|
517
|
+
`,e+=` *
|
|
518
|
+
`,e+=" * ```typescript\n",e+=` * function ItemDetail({ id }: { id: string }) {
|
|
519
|
+
`,e+=` * const { data } = useGetItemById({ url: { id } });
|
|
520
|
+
`,e+=` * return <div>{data?.name}</div>;
|
|
521
|
+
`,e+=` * }
|
|
522
|
+
`,e+=" * ```\n",e+=` *
|
|
523
|
+
`,e+=` * ### Creating Data (POST)
|
|
524
|
+
`,e+=` *
|
|
525
|
+
`,e+=" * ```typescript\n",e+=` * import { useCreateItem, useGetItems } from './hooks';
|
|
526
|
+
`,e+=` *
|
|
527
|
+
`,e+=` * function CreateItem() {
|
|
528
|
+
`,e+=` * const { trigger, isMutating, error } = useCreateItem();
|
|
529
|
+
`,e+=` * const { mutate: revalidateList } = useGetItems();
|
|
530
|
+
`,e+=` *
|
|
531
|
+
`,e+=` * const handleSubmit = async (name: string) => {
|
|
532
|
+
`,e+=` * try {
|
|
533
|
+
`,e+=` * const result = await trigger({
|
|
534
|
+
`,e+=` * arg: { data: { name } }
|
|
535
|
+
`,e+=` * });
|
|
536
|
+
`,e+=` * await revalidateList(); // Refresh the list
|
|
537
|
+
`,e+=` * alert('Created!');
|
|
538
|
+
`,e+=` * } catch (err) {
|
|
539
|
+
`,e+=` * console.error('Failed:', err);
|
|
540
|
+
`,e+=` * }
|
|
541
|
+
`,e+=` * };
|
|
542
|
+
`,e+=` *
|
|
543
|
+
`,e+=` * return (
|
|
544
|
+
`,e+=` * <button onClick={() => handleSubmit('New Item')} disabled={isMutating}>
|
|
545
|
+
`,e+=` * {isMutating ? 'Creating...' : 'Create'}
|
|
546
|
+
`,e+=` * </button>
|
|
547
|
+
`,e+=` * );
|
|
548
|
+
`,e+=` * }
|
|
549
|
+
`,e+=" * ```\n",e+=` *
|
|
550
|
+
`,e+=` * ### Updating Data (PUT/PATCH)
|
|
551
|
+
`,e+=` *
|
|
552
|
+
`,e+=" * ```typescript\n",e+=` * function UpdateItem({ id }: { id: string }) {
|
|
553
|
+
`,e+=` * const { data, mutate: revalidate } = useGetItemById({ url: { id } });
|
|
554
|
+
`,e+=` * const { trigger } = useUpdateItem();
|
|
555
|
+
`,e+=` *
|
|
556
|
+
`,e+=` * const handleUpdate = async (newName: string) => {
|
|
557
|
+
`,e+=` * await trigger({
|
|
558
|
+
`,e+=` * arg: {
|
|
559
|
+
`,e+=` * url: { id },
|
|
560
|
+
`,e+=` * data: { name: newName }
|
|
561
|
+
`,e+=` * }
|
|
562
|
+
`,e+=` * });
|
|
563
|
+
`,e+=` * await revalidate(); // Refresh the detail view
|
|
564
|
+
`,e+=` * };
|
|
565
|
+
`,e+=` *
|
|
566
|
+
`,e+=` * return <button onClick={() => handleUpdate('Updated')}>Update</button>;
|
|
567
|
+
`,e+=` * }
|
|
568
|
+
`,e+=" * ```\n",e+=` *
|
|
569
|
+
`,e+=` * ### Deleting Data (DELETE)
|
|
570
|
+
`,e+=` *
|
|
571
|
+
`,e+=" * ```typescript\n",e+=` * function DeleteItem({ id }: { id: string }) {
|
|
572
|
+
`,e+=` * const { trigger, isMutating } = useDeleteItem();
|
|
573
|
+
`,e+=` * const { mutate: revalidateList } = useGetItems();
|
|
574
|
+
`,e+=` *
|
|
575
|
+
`,e+=` * const handleDelete = async () => {
|
|
576
|
+
`,e+=` * if (confirm('Delete?')) {
|
|
577
|
+
`,e+=` * await trigger({ arg: { url: { id } } });
|
|
578
|
+
`,e+=` * await revalidateList();
|
|
579
|
+
`,e+=` * }
|
|
580
|
+
`,e+=` * };
|
|
581
|
+
`,e+=` *
|
|
582
|
+
`,e+=` * return (
|
|
583
|
+
`,e+=` * <button onClick={handleDelete} disabled={isMutating}>
|
|
584
|
+
`,e+=` * {isMutating ? 'Deleting...' : 'Delete'}
|
|
585
|
+
`,e+=` * </button>
|
|
586
|
+
`,e+=` * );
|
|
587
|
+
`,e+=` * }
|
|
588
|
+
`,e+=" * ```\n",e+=` *
|
|
589
|
+
`,e+=` * ## Advanced Patterns
|
|
590
|
+
`,e+=` *
|
|
591
|
+
`,e+=` * ### Optimistic Updates
|
|
592
|
+
`,e+=` *
|
|
593
|
+
`,e+=" * ```typescript\n",e+=` * function OptimisticUpdate({ id }: { id: string }) {
|
|
594
|
+
`,e+=` * const { data, mutate: revalidate } = useGetItemById({ url: { id } });
|
|
595
|
+
`,e+=` * const { trigger } = useUpdateItem();
|
|
596
|
+
`,e+=` *
|
|
597
|
+
`,e+=` * const handleUpdate = async (newName: string) => {
|
|
598
|
+
`,e+=` * // Update UI immediately
|
|
599
|
+
`,e+=` * revalidate({ ...data!, name: newName }, false);
|
|
600
|
+
`,e+=` *
|
|
601
|
+
`,e+=` * try {
|
|
602
|
+
`,e+=` * await trigger({ arg: { url: { id }, data: { name: newName } } });
|
|
603
|
+
`,e+=` * await revalidate(); // Sync with server
|
|
604
|
+
`,e+=` * } catch (err) {
|
|
605
|
+
`,e+=` * await revalidate(); // Rollback on error
|
|
606
|
+
`,e+=` * }
|
|
607
|
+
`,e+=` * };
|
|
608
|
+
`,e+=` *
|
|
609
|
+
`,e+=` * return <button onClick={() => handleUpdate('New')}>Update</button>;
|
|
610
|
+
`,e+=` * }
|
|
611
|
+
`,e+=" * ```\n",e+=` *
|
|
612
|
+
`,e+=` * ### Conditional Fetching
|
|
613
|
+
`,e+=` *
|
|
614
|
+
`,e+=" * ```typescript\n",e+=` * function ConditionalFetch({ id, enabled }: { id: string; enabled: boolean }) {
|
|
615
|
+
`,e+=` * // Only fetch when enabled is true
|
|
616
|
+
`,e+=` * const { data } = useGetItemById(enabled ? { url: { id } } : null);
|
|
617
|
+
`,e+=` * return <div>{data?.name || 'Not loaded'}</div>;
|
|
618
|
+
`,e+=` * }
|
|
619
|
+
`,e+=" * ```\n",e+=` *
|
|
620
|
+
`,e+=` * ### Pagination
|
|
621
|
+
`,e+=` *
|
|
622
|
+
`,e+=" * ```typescript\n",e+=` * function PaginatedList() {
|
|
623
|
+
`,e+=` * const [page, setPage] = useState(1);
|
|
624
|
+
`,e+=` * const { data, isLoading } = useGetItems({ query: { page, limit: 10 } });
|
|
625
|
+
`,e+=` *
|
|
626
|
+
`,e+=` * return (
|
|
627
|
+
`,e+=` * <div>
|
|
628
|
+
`,e+=` * {data?.items.map(item => <div key={item.id}>{item.name}</div>)}
|
|
629
|
+
`,e+=` * <button onClick={() => setPage(p => p - 1)} disabled={page === 1}>
|
|
630
|
+
`,e+=` * Previous
|
|
631
|
+
`,e+=` * </button>
|
|
632
|
+
`,e+=` * <button onClick={() => setPage(p => p + 1)}>Next</button>
|
|
633
|
+
`,e+=` * </div>
|
|
634
|
+
`,e+=` * );
|
|
635
|
+
`,e+=` * }
|
|
636
|
+
`,e+=" * ```\n",e+=` *
|
|
637
|
+
`,e+=` * ### Custom Configuration
|
|
638
|
+
`,e+=` *
|
|
639
|
+
`,e+=" * ```typescript\n",e+=` * function CustomConfig({ id }: { id: string }) {
|
|
640
|
+
`,e+=` * const { data } = useGetItemById(
|
|
641
|
+
`,e+=` * { url: { id } },
|
|
642
|
+
`,e+=` * {
|
|
643
|
+
`,e+=` * refreshInterval: 5000, // Refresh every 5s
|
|
644
|
+
`,e+=` * revalidateOnFocus: true, // Refresh on window focus
|
|
645
|
+
`,e+=` * dedupingInterval: 2000, // Dedupe within 2s
|
|
646
|
+
`,e+=` * onError: (err) => console.error(err),
|
|
647
|
+
`,e+=` * onSuccess: (data) => console.log('Loaded:', data),
|
|
648
|
+
`,e+=` * }
|
|
649
|
+
`,e+=` * );
|
|
650
|
+
`,e+=` * return <div>{data?.name}</div>;
|
|
651
|
+
`,e+=` * }
|
|
652
|
+
`,e+=" * ```\n",e+=` *
|
|
653
|
+
`,e+=` * ## Hook Return Values
|
|
654
|
+
`,e+=` *
|
|
655
|
+
`,e+=` * ### Query Hooks (GET)
|
|
656
|
+
`,e+=" * - `data`: The response data (undefined while loading)\n",e+=" * - `error`: Error object if request failed\n",e+=" * - `isLoading`: True during initial load\n",e+=" * - `isValidating`: True during revalidation\n",e+=" * - `mutate()`: Manually trigger revalidation\n",e+=` *
|
|
657
|
+
`,e+=` * ### Mutation Hooks (POST/PUT/DELETE)
|
|
658
|
+
`,e+=" * - `trigger()`: Execute the mutation\n",e+=" * - `data`: The response data from the mutation\n",e+=" * - `error`: Error object if mutation failed\n",e+=" * - `isMutating`: True while mutation is in progress\n",e+=" * - `reset()`: Reset the mutation state\n",e+=` *
|
|
659
|
+
`,e+=` * @see https://swr.vercel.app/docs/getting-started
|
|
660
|
+
`,e+=` * @see https://swr.vercel.app/docs/mutation
|
|
661
|
+
`,e+=` */
|
|
662
|
+
|
|
663
|
+
`,e+=`import useSWR, { SWRConfiguration } from 'swr';
|
|
664
|
+
`,o&&n.some(r=>["POST","PUT","PATCH","DELETE"].includes(r.method.toUpperCase()))&&(e+=`import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation';
|
|
665
|
+
`),e+=`
|
|
666
|
+
`,e+=`import apiClient from './client';
|
|
667
|
+
`,e+=`import type {
|
|
668
|
+
`;let t=new Set;return n.forEach(r=>{r.queryType&&t.add(r.queryType),r.dtoType&&t.add(r.dtoType),r.responseType&&t.add(r.responseType);}),t.forEach(r=>{e+=` ${r},
|
|
669
|
+
`;}),e+=`} from '../types';
|
|
670
|
+
|
|
671
|
+
`,n.forEach(r=>{var A,Q;let d=r.method.toUpperCase(),l=d==="GET",y=["POST","PUT","PATCH","DELETE"].includes(d),I=((A=r.parameters)==null?void 0:A.filter(O=>O.in==="path"))||[],q=((Q=r.parameters)==null?void 0:Q.filter(O=>O.in==="query"))||[],k=I.length>0,T=q.length>0,N=!!r.requestBody,F=r.responseType||"any";if(l){let O=`use${r.name.charAt(0).toUpperCase()+r.name.slice(1)}`;e+=`/**
|
|
672
|
+
`,r.summary&&(e+=` * ${r.summary}
|
|
673
|
+
`),e+=` * @method ${d}
|
|
674
|
+
`,e+=` * @path ${r.path}
|
|
675
|
+
`,r.tags&&r.tags.length>0&&(e+=` * @tags ${r.tags.join(", ")}
|
|
676
|
+
`),e+=` */
|
|
677
|
+
`,k||T?(e+=`export function ${O}(
|
|
678
|
+
`,e+=` params: {
|
|
679
|
+
`,k&&(e+=` url: {
|
|
680
|
+
`,I.forEach(E=>{let G={string:"string",number:"number",integer:"number",boolean:"boolean",array:"any[]",object:"any"}[E.type||"string"]||"any",J=E.required?"":"?";e+=` ${E.name}${J}: ${G};
|
|
681
|
+
`;}),e+=` };
|
|
682
|
+
`),T&&(e+=` query: ${r.queryType||"Record<string, any>"};
|
|
683
|
+
`),e+=` },
|
|
684
|
+
`,e+=` config?: SWRConfiguration<${F}>
|
|
685
|
+
`,e+=`) {
|
|
686
|
+
`,e+=` return useSWR(
|
|
687
|
+
`,e+=` ['${r.name}', params],
|
|
688
|
+
`,e+=` () => apiClient.${r.name}(params),
|
|
689
|
+
`,e+=` config
|
|
690
|
+
`,e+=` );
|
|
691
|
+
`):(e+=`export function ${O}(
|
|
692
|
+
`,e+=` config?: SWRConfiguration<${F}>
|
|
693
|
+
`,e+=`) {
|
|
694
|
+
`,e+=` return useSWR(
|
|
695
|
+
`,e+=` '${r.name}',
|
|
696
|
+
`,e+=` () => apiClient.${r.name}(),
|
|
697
|
+
`,e+=` config
|
|
698
|
+
`,e+=` );
|
|
699
|
+
`),e+=`}
|
|
700
|
+
|
|
701
|
+
`;}else if(y&&o){let O=`use${r.name.charAt(0).toUpperCase()+r.name.slice(1)}`;e+=`/**
|
|
702
|
+
`,r.summary&&(e+=` * ${r.summary}
|
|
703
|
+
`),e+=` * @method ${d}
|
|
704
|
+
`,e+=` * @path ${r.path}
|
|
705
|
+
`,r.tags&&r.tags.length>0&&(e+=` * @tags ${r.tags.join(", ")}
|
|
706
|
+
`),e+=` */
|
|
707
|
+
`;let E="void",Y="void";(k||T||N)&&(E=`{
|
|
708
|
+
`,k&&(E+=` url: {
|
|
709
|
+
`,I.forEach(G=>{let de={string:"string",number:"number",integer:"number",boolean:"boolean",array:"any[]",object:"any"}[G.type||"string"]||"any",ae=G.required?"":"?";E+=` ${G.name}${ae}: ${de};
|
|
710
|
+
`;}),E+=` };
|
|
711
|
+
`),T&&(E+=` query: ${r.queryType||"Record<string, any>"};
|
|
712
|
+
`),N&&(E+=` data: ${r.dtoType||"any"};
|
|
713
|
+
`),E+=" }",Y=`{ arg: ${E} }`),e+=`export function ${O}(
|
|
714
|
+
`,e+=` config?: SWRMutationConfiguration<${F}, Error, string, ${E}>
|
|
715
|
+
`,e+=`) {
|
|
716
|
+
`,e+=` return useSWRMutation(
|
|
717
|
+
`,e+=` '${r.name}',
|
|
718
|
+
`,e+=" async (_, ",E!=="void"&&(e+=`{ arg }: ${Y}`),e+=`) => {
|
|
719
|
+
`,e+=` return apiClient.${r.name}(${E!=="void"?"arg":""});
|
|
720
|
+
`,e+=` },
|
|
721
|
+
`,e+=` config
|
|
722
|
+
`,e+=` );
|
|
723
|
+
`,e+=`}
|
|
724
|
+
|
|
725
|
+
`;}}),e},$t=(n,i)=>{var u;let o=((u=i.rtkQuery)==null?void 0:u.apiName)||"api",e=i.baseURL||"",s=`// Generated RTK Query API Slice
|
|
726
|
+
`;s+=`// This file was auto-generated. Add custom code in the marked sections.
|
|
727
|
+
|
|
728
|
+
`,s+=`import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
|
|
729
|
+
|
|
730
|
+
`,s+=`import type {
|
|
731
|
+
`;let t=new Set;return n.forEach(r=>{r.queryType&&t.add(r.queryType),r.dtoType&&t.add(r.dtoType),r.responseType&&t.add(r.responseType);}),t.forEach(r=>{s+=` ${r},
|
|
732
|
+
`;}),s+=`} from '../types';
|
|
733
|
+
|
|
734
|
+
`,s+=`import {
|
|
735
|
+
`,n.forEach(r=>{s+=` ${r.name},
|
|
736
|
+
`;}),s+=`} from '../endpoints';
|
|
737
|
+
|
|
738
|
+
`,s+=`const ${o}Api = createApi({
|
|
739
|
+
`,s+=` reducerPath: '${o}Api',
|
|
740
|
+
`,s+=` baseQuery: fetchBaseQuery({
|
|
741
|
+
`,s+=` baseUrl: '${e}',
|
|
742
|
+
`,i.auth&&(s+=` prepareHeaders: (headers, { getState }) => {
|
|
743
|
+
`,s+=` // Get token from your auth state
|
|
744
|
+
`,s+=` // const token = (getState() as RootState).auth.token;
|
|
745
|
+
`,s+=` // if (token) {
|
|
746
|
+
`,i.auth.type==="bearer"?s+=" // headers.set('Authorization', `Bearer ${token}`);\n":i.auth.type==="apiKey"&&i.auth.in==="header"&&(s+=` // headers.set('${i.auth.name||"X-API-Key"}', token);
|
|
747
|
+
`),s+=` // }
|
|
748
|
+
`,s+=` return headers;
|
|
749
|
+
`,s+=` },
|
|
750
|
+
`),s+=` }),
|
|
751
|
+
`,s+=` tagTypes: [${[...new Set(n.flatMap(r=>r.tags||[]))].map(r=>`'${r}'`).join(", ")}],
|
|
752
|
+
`,s+=` endpoints: (builder) => ({
|
|
753
|
+
`,n.forEach((r,d)=>{var Q,O;let l=r.method.toUpperCase(),y=l==="GET",I=((Q=r.parameters)==null?void 0:Q.filter(E=>E.in==="path"))||[],q=((O=r.parameters)==null?void 0:O.filter(E=>E.in==="query"))||[],k=I.length>0,T=q.length>0,N=!!r.requestBody,F=r.responseType||"any";s+=` ${r.name}: builder.${y?"query":"mutation"}<
|
|
754
|
+
`,s+=` ${F},
|
|
755
|
+
`;let A="void";if((k||T||N)&&(A=`{
|
|
756
|
+
`,k&&(A+=` url: {
|
|
757
|
+
`,I.forEach(E=>{let G={string:"string",number:"number",integer:"number",boolean:"boolean",array:"any[]",object:"any"}[E.type||"string"]||"any",J=E.required?"":"?";A+=` ${E.name}${J}: ${G};
|
|
758
|
+
`;}),A+=` };
|
|
759
|
+
`),T&&(A+=` query: ${r.queryType||"Record<string, any>"};
|
|
760
|
+
`),N&&(A+=` data: ${r.dtoType||"any"};
|
|
761
|
+
`),A+=" }"),s+=` ${A}
|
|
762
|
+
`,s+=` >({
|
|
763
|
+
`,s+=" query: (",A!=="void"&&(s+="arg"),s+=`) => {
|
|
764
|
+
`,k){let E=I.map(Y=>`arg.url.${Y.name}`).join(", ");s+=` const url = ${r.name}(${E});
|
|
765
|
+
`;}else s+=` const url = ${r.name};
|
|
766
|
+
`;s+=` return {
|
|
767
|
+
`,s+=` url,
|
|
768
|
+
`,s+=` method: '${l}',
|
|
769
|
+
`,T&&(s+=` params: arg.query,
|
|
770
|
+
`),N&&(s+=` body: arg.data,
|
|
771
|
+
`),s+=` };
|
|
772
|
+
`,s+=` },
|
|
773
|
+
`,r.tags&&r.tags.length>0&&(y?s+=` providesTags: ['${r.tags[0]}'],
|
|
774
|
+
`:s+=` invalidatesTags: ['${r.tags[0]}'],
|
|
775
|
+
`),s+=` })${d<n.length-1?",":""}
|
|
776
|
+
`;}),s+=` }),
|
|
777
|
+
`,s+=`});
|
|
778
|
+
|
|
779
|
+
`,s+=`export default ${o}Api;
|
|
780
|
+
|
|
781
|
+
`,s};});var Nr,ar,oe,Fr,Ur,lr=ce(()=>{"use strict";ir();Qe();Nr=(n,i)=>{var o,e;if((o=i==null?void 0:i.folderSplit)!=null&&o.customFolder){let s=i.folderSplit.customFolder({method:n.method,path:n.path,tags:n.tags,operationId:n.operationId,summary:n.summary});if(s)return s}return (e=i==null?void 0:i.folderSplit)!=null&&e.byTags&&n.tags&&n.tags.length>0?n.tags[0].toLowerCase().replace(/\s+/g,"-"):"default"},ar=(n,i,o,e,s)=>M(null,null,function*(){let t=or(n,o);if(t.length===0)return;let u=o.type||"fetch",r=o.outputDir||te__default.default.join(s,e,"client"),d=!!(i!=null&&i.folderSplit&&(i.folderSplit.byTags||i.folderSplit.customFolder));if(`${u}${t.length}`,d){let y={};t.forEach(k=>{let T=Nr(k,i);y[T]||(y[T]=[]),y[T].push(k);});let I=Object.keys(y);for(let[k,T]of Object.entries(y)){let N=te__default.default.join(s,e,k);yield me__default.default.promises.mkdir(N,{recursive:!0}),`${u}${k}${T.length}`,yield Fr(T,i,o,N,u,k,!0);}let q=te__default.default.join(s,e);yield Ur(q,I,u,i),u==="rtk-query"?`${q}`:(`${q}`,(u==="react-query"||u==="swr")&&`${q}`);return}let l=te__default.default.join(s,e);switch(yield me__default.default.promises.mkdir(l,{recursive:!0}),u){case "fetch":let y=yt(t,o);y=y.replace("} from '../types';","} from './types';").replace("} from '../endpoints';","} from './endpoints';"),yield oe(te__default.default.join(l,"clients.ts"),y,i),`${l}`;break;case "axios":let I=Te(t,o,!1);I=I.replace("} from '../types';","} from './types';").replace("} from '../endpoints';","} from './endpoints';"),yield oe(te__default.default.join(l,"clients.ts"),I,i),`${l}`;break;case "react-query":let q=Te(t,o,!1);q=q.replace("} from '../types';","} from './types';").replace("} from '../endpoints';","} from './endpoints';"),yield oe(te__default.default.join(l,"clients.ts"),q,i),`${l}`;let k=gt(t,o);k=k.replace("} from '../types';","} from './types';").replace("} from '../endpoints';","} from './endpoints';").replace("import apiClient from './client';","import apiClient from './clients';"),yield oe(te__default.default.join(l,"hooks.ts"),k,i),`${l}`;break;case "swr":let T=Te(t,o,!1);T=T.replace("} from '../types';","} from './types';").replace("} from '../endpoints';","} from './endpoints';"),yield oe(te__default.default.join(l,"clients.ts"),T,i),`${l}`;let N=ht(t,o);N=N.replace("} from '../types';","} from './types';").replace("} from '../endpoints';","} from './endpoints';").replace("import apiClient from './client';","import apiClient from './clients';"),yield oe(te__default.default.join(l,"hooks.ts"),N,i),`${l}`;break;case "rtk-query":let F=$t(t,o);F=F.replace("} from '../types';","} from './types';").replace("} from '../endpoints';","} from './endpoints';"),yield oe(te__default.default.join(l,"api.ts"),F,i),`${l}`;break;default:throw new Error(`Unknown client type: ${u}`)}}),oe=(n,i,o)=>M(null,null,function*(){var u,r,d,l;if(!(((u=o==null?void 0:o.customCode)==null?void 0:u.enabled)!==!1)){yield me__default.default.promises.writeFile(n,i);return}let s=null;try{s=yield me__default.default.promises.readFile(n,"utf-8");}catch(y){}let t=Me(i,s,{position:((r=o==null?void 0:o.customCode)==null?void 0:r.position)||"bottom",markerText:(d=o==null?void 0:o.customCode)==null?void 0:d.markerText,includeInstructions:(l=o==null?void 0:o.customCode)==null?void 0:l.includeInstructions});yield me__default.default.promises.writeFile(n,t);}),Fr=(n,i,o,e,s,t,u=!1)=>M(null,null,function*(){let r="",d="",l=u?"./types":"../types",y=u?"./endpoints":"../endpoints";switch(s){case "fetch":r=yt(n,o,u),r=r.replace("} from '../types';",`} from '${l}';`).replace("} from '../endpoints';",`} from '${y}';`),yield oe(te__default.default.join(e,"client.ts"),r,i);break;case "axios":r=Te(n,o,u),r=r.replace("} from '../types';",`} from '${l}';`).replace("} from '../endpoints';",`} from '${y}';`),yield oe(te__default.default.join(e,"client.ts"),r,i);break;case "react-query":if(r=Te(n,o,u),r=r.replace("} from '../types';",`} from '${l}';`).replace("} from '../endpoints';",`} from '${y}';`),yield oe(te__default.default.join(e,"client.ts"),r,i),d=gt(n,o),d=d.replace("} from '../types';",`} from '${l}';`).replace("} from '../endpoints';",`} from '${y}';`),u){let q=t.replace(/-/g,"_");d=d.replace("import apiClient from './client';",`import { ${q}Client as apiClient } from '../clients';`);}yield oe(te__default.default.join(e,"hooks.ts"),d,i);break;case "swr":if(r=Te(n,o,u),r=r.replace("} from '../types';",`} from '${l}';`).replace("} from '../endpoints';",`} from '${y}';`),yield oe(te__default.default.join(e,"client.ts"),r,i),d=ht(n,o),d=d.replace("} from '../types';",`} from '${l}';`).replace("} from '../endpoints';",`} from '${y}';`),u){let q=t.replace(/-/g,"_");d=d.replace("import apiClient from './client';",`import { ${q}Client as apiClient } from '../clients';`);}yield oe(te__default.default.join(e,"hooks.ts"),d,i);break;case "rtk-query":let I=u?V(B({},o),{rtkQuery:V(B({},o.rtkQuery),{apiName:t.replace(/-/g,"_")})}):o;d=$t(n,I),d=d.replace("} from '../types';",`} from '${l}';`).replace("} from '../endpoints';",`} from '${y}';`),yield oe(te__default.default.join(e,"api.ts"),d,i);break;default:throw new Error(`Unknown client type: ${s}`)}}),Ur=(n,i,o,e)=>M(null,null,function*(){var t;if(o==="rtk-query"){let u=`// Generated RTK Query APIs
|
|
782
|
+
`;u+=`// This file was auto-generated.
|
|
783
|
+
`,u+=`// Aggregates all API slices for easy Redux store setup
|
|
784
|
+
|
|
785
|
+
`,i.forEach(r=>{let d=r.replace(/-/g,"_");u+=`import ${d}Api from './${r}/api';
|
|
786
|
+
`;}),u+=`
|
|
787
|
+
// Export all API slices
|
|
788
|
+
`,i.forEach(r=>{let d=r.replace(/-/g,"_");u+=`export { default as ${d}Api } from './${r}/api';
|
|
789
|
+
`;}),u+=`
|
|
790
|
+
/**
|
|
791
|
+
`,u+=` * Configure Redux store with all API slices
|
|
792
|
+
`,u+=` *
|
|
793
|
+
`,u+=` * @example
|
|
794
|
+
`,u+=` * import { configureStore } from '@reduxjs/toolkit';
|
|
795
|
+
`,u+=` * import { setupApiStore } from './apis';
|
|
796
|
+
`,u+=` *
|
|
797
|
+
`,u+=` * export const store = configureStore({
|
|
798
|
+
`,u+=` * reducer: setupApiStore.reducer,
|
|
799
|
+
`,u+=` * middleware: (getDefaultMiddleware) =>
|
|
800
|
+
`,u+=` * getDefaultMiddleware().concat(setupApiStore.middleware),
|
|
801
|
+
`,u+=` * });
|
|
802
|
+
`,u+=` */
|
|
803
|
+
`,u+=`export const setupApiStore = {
|
|
804
|
+
`,u+=` reducer: {
|
|
805
|
+
`,i.forEach(r=>{let d=r.replace(/-/g,"_");u+=` [${d}Api.reducerPath]: ${d}Api.reducer,
|
|
806
|
+
`;}),u+=` },
|
|
807
|
+
`,u+=` middleware: [
|
|
808
|
+
`,i.forEach(r=>{let d=r.replace(/-/g,"_");u+=` ${d}Api.middleware,
|
|
809
|
+
`;}),u+=` ],
|
|
810
|
+
`,u+=`};
|
|
811
|
+
`,yield oe(te__default.default.join(n,"apis.ts"),u,e);return}let s=`// Generated API Clients
|
|
812
|
+
`;if(s+=`// This file was auto-generated.
|
|
813
|
+
`,s+=`// Centralized client instances and configuration
|
|
814
|
+
|
|
815
|
+
`,o==="fetch"?i.forEach(u=>{let r=u.replace(/-/g,"_");s+=`export { default as ${r}Client } from './${u}/client';
|
|
816
|
+
`;}):(i.forEach(u=>{let r=u.replace(/-/g,"_"),d=`${r.charAt(0).toUpperCase()+r.slice(1)}ApiClient`;s+=`import ${d} from './${u}/client';
|
|
817
|
+
`;}),s+=`
|
|
818
|
+
// Create client instances
|
|
819
|
+
`,i.forEach(u=>{let r=u.replace(/-/g,"_"),d=`${r.charAt(0).toUpperCase()+r.slice(1)}ApiClient`;s+=`export const ${r}Client = new ${d}();
|
|
820
|
+
`;})),o==="fetch"&&(s+=`
|
|
821
|
+
// Import clients for aggregation
|
|
822
|
+
`,i.forEach(u=>{let r=u.replace(/-/g,"_");s+=`import ${r}_client from './${u}/client';
|
|
823
|
+
`;})),s+=`
|
|
824
|
+
// Aggregate all client instances
|
|
825
|
+
`,s+=`export const clients = {
|
|
826
|
+
`,i.forEach(u=>{let r=u.replace(/-/g,"_");o==="fetch"?s+=` ${r}: ${r}_client,
|
|
827
|
+
`:s+=` ${r}: ${r}Client,
|
|
828
|
+
`;}),s+=`};
|
|
829
|
+
|
|
830
|
+
`,o==="axios"?(s+=`
|
|
831
|
+
/**
|
|
832
|
+
`,s+=` * Configure all API clients at once
|
|
833
|
+
`,s+=` * @param config - Configuration to apply to all clients
|
|
834
|
+
`,s+=` */
|
|
835
|
+
`,s+=`export const configureAllClients = (config: {
|
|
836
|
+
`,s+=` baseURL?: string;
|
|
837
|
+
`,s+=` headers?: Record<string, string>;
|
|
838
|
+
`,s+=` timeout?: number;
|
|
839
|
+
`,s+=`}) => {
|
|
840
|
+
`,i.forEach(u=>{let r=u.replace(/-/g,"_");s+=` ${r}Client.updateConfig(config);
|
|
841
|
+
`;}),s+=`};
|
|
842
|
+
|
|
843
|
+
`):o==="fetch"&&(s+=`
|
|
844
|
+
/**
|
|
845
|
+
`,s+=` * Configure all API clients at once
|
|
846
|
+
`,s+=` * @param config - Configuration to apply to all clients
|
|
847
|
+
`,s+=` */
|
|
848
|
+
`,s+=`export const configureAllClients = (config: {
|
|
849
|
+
`,s+=` baseURL?: string;
|
|
850
|
+
`,s+=` headers?: Record<string, string>;
|
|
851
|
+
`,s+=` auth?: { token?: string };
|
|
852
|
+
`,s+=`}) => {
|
|
853
|
+
`,i.forEach(u=>{let r=u.replace(/-/g,"_");s+=` ${r}_client.setApiConfig(config);
|
|
854
|
+
`;}),s+=`};
|
|
855
|
+
|
|
856
|
+
`),s+=`// Example usage:
|
|
857
|
+
`,s+=`// import { configureAllClients, clients } from './clients';
|
|
858
|
+
`,s+=`//
|
|
859
|
+
`,s+=`// // Configure all clients at once
|
|
860
|
+
`,s+=`// configureAllClients({
|
|
861
|
+
`,s+=`// baseURL: 'https://api.example.com',
|
|
862
|
+
`,s+=`// timeout: 10000,
|
|
863
|
+
`,s+=`// });
|
|
864
|
+
`,s+=`//
|
|
865
|
+
`,s+=`// // Use specific client
|
|
866
|
+
`,s+=`// const data = await clients.${(t=i[0])==null?void 0:t.replace(/-/g,"_")}.someMethod(...);
|
|
867
|
+
`,yield oe(te__default.default.join(n,"clients.ts"),s,e),o==="react-query"||o==="swr"){let u=`// Generated Hooks Aggregator
|
|
868
|
+
`;u+=`// This file was auto-generated.
|
|
869
|
+
`,u+=`// Aggregates all folder-split hooks
|
|
870
|
+
|
|
871
|
+
`,i.forEach(r=>{u+=`export * from './${r}/hooks';
|
|
872
|
+
`;}),u+=`
|
|
873
|
+
// Example usage:
|
|
874
|
+
`,u+=`// import { useGetSomething } from './hooks';
|
|
875
|
+
`,yield oe(te__default.default.join(n,"hooks.ts"),u,e);}});});var ye,qe,ze,bt,Ct,It,xt,wt,Ne,Et=ce(()=>{"use strict";ye=class extends Error{toJSON(){return {code:this.code,message:this.message}}},qe=class extends ye{constructor(o){super(`No openapi-sync config file found. Searched: ${o.join(", ")}. Run \`npx openapi-sync init --no-interactive\` to create one.`);this.code="CONFIG_NOT_FOUND";this.name="ConfigNotFoundError";}toJSON(){return V(B({},super.toJSON()),{searchedPaths:this.message})}},ze=class extends ye{constructor(o,e){let s=e instanceof Error?e.message:String(e);super(`Failed to parse config file "${o}": ${s}`);this.code="CONFIG_PARSE_FAILED";this.name="ConfigParseError",this.configPath=o;}toJSON(){return V(B({},super.toJSON()),{configPath:this.configPath})}},bt=class extends ye{constructor(o,e){super(`Invalid configuration at "${o}": ${e}`);this.code="CONFIG_INVALID";this.name="ConfigValidationError",this.field=o;}toJSON(){return V(B({},super.toJSON()),{field:this.field})}},Ct=class extends ye{constructor(o,e,s){let t=e instanceof Error?e.message:String(e);super(`Failed to fetch OpenAPI spec from "${o}": ${t}`+(s?` (HTTP ${s})`:""));this.code="SPEC_FETCH_FAILED";this.name="SpecFetchError",this.url=o,this.statusCode=s;}toJSON(){return B(V(B({},super.toJSON()),{url:this.url}),this.statusCode!==void 0&&{statusCode:this.statusCode})}},It=class extends ye{constructor(o,e){let s=e instanceof Error?e.message:String(e);super(`Failed to read local OpenAPI spec from "${o}": ${s}`);this.code="SPEC_READ_FAILED";this.name="SpecReadError",this.filePath=o;}toJSON(){return V(B({},super.toJSON()),{filePath:this.filePath})}},xt=class extends ye{constructor(o,e){let s=e instanceof Error?e.message:String(e);super(`Failed to parse OpenAPI spec for API "${o}": ${s}`);this.code="SPEC_PARSE_FAILED";this.name="SpecParseError",this.api=o;}toJSON(){return V(B({},super.toJSON()),{api:this.api})}},wt=class extends ye{constructor(o,e,s){let t=s instanceof Error?s.message:String(s);super(`Failed to write generated file "${o}" for API "${e}": ${t}`);this.code="GENERATION_FAILED";this.name="GenerationError",this.file=o,this.api=e;}toJSON(){return V(B({},super.toJSON()),{file:this.file,api:this.api})}},Ne=class extends ye{constructor(o,e){super(`API "${o}" not found in config. Available APIs: ${e.join(", ")}`);this.code="UNKNOWN_API";this.name="UnknownApiError",this.requestedApi=o,this.availableApis=e;}toJSON(){return V(B({},super.toJSON()),{requestedApi:this.requestedApi,availableApis:this.availableApis})}};});var pr=ce(()=>{"use strict";});var ur={};ot(ur,{validateConfig:()=>Jr});var Xe,Mr,Qr,Jr,dr=ce(()=>{"use strict";Qe();Xe=process.cwd(),Mr=()=>{let n=te__default.default.join(Xe,"openapi.sync.js"),i=te__default.default.join(Xe,"openapi.sync.ts"),o=te__default.default.join(Xe,"openapi.sync.json"),e=[n,i,o];try{Ee("esbuild-register");}catch(s){}for(let s of e)if(me__default.default.existsSync(s))try{let t=Ee(s);return Object.keys(t).length===1&&t.default&&(t=t.default),typeof t=="function"&&(t=t()),{config:t,errors:[]}}catch(t){let u=t instanceof Error?t.message:String(t);return {config:null,errors:[`Failed to parse ${s}: ${u}`]}}return {config:null,errors:[`No config file found. Searched: ${e.join(", ")}. Run \`npx openapi-sync init --no-interactive\` to create one.`]}},Qr=(n,i)=>M(null,null,function*(){var u;let o;try{if(n.startsWith("http://")||n.startsWith("https://"))o=(yield Pr__default.default.get(n,{timeout:15e3})).data;else {let d=te__default.default.isAbsolute(n)?n:te__default.default.join(Xe,n);o=yield me__default.default.promises.readFile(d,"utf-8");}}catch(r){return {endpointCount:0,error:`Could not fetch/read spec: ${r instanceof Error?r.message:String(r)}`}}let e;try{let r=Ue(o)?o:Le(o);e=yield Rr__default.default.parse(r);}catch(r){return {endpointCount:0,error:`Could not parse spec: ${r instanceof Error?r.message:String(r)}`}}let s=0,t=(e==null?void 0:e.paths)||{};for(let r of Object.keys(t)){let d=["get","post","put","patch","delete","head","options"];for(let l of d)(u=t[r])!=null&&u[l]&&s++;}return {endpointCount:s}}),Jr=n=>M(null,null,function*(){var d;let o=((d=n==null?void 0:n.silent)!=null?d:!1)?{log:()=>{},warn:()=>{},error:()=>{}}:{log:console.log,warn:console.warn,error:console.error},e={valid:!1,apis:{},configErrors:[]},{config:s,errors:t}=Mr();if(t.length>0)return e.configErrors=t,o.error(`\u274C Config errors:
|
|
876
|
+
${t.map(l=>` \u2022 ${l}`).join(`
|
|
877
|
+
`)}`),e;if(!s)return e.configErrors=["Config loaded but is empty or null."],e;if((!s.api||Object.keys(s.api).length===0)&&e.configErrors.push('Config must have at least one API defined under the "api" key.'),e.configErrors.length>0)return o.error(`\u274C Config validation errors:
|
|
878
|
+
${e.configErrors.map(l=>` \u2022 ${l}`).join(`
|
|
879
|
+
`)}`),e;let u=Object.keys(s.api);o.log(`
|
|
880
|
+
\u{1F50D} Validating ${u.length} API spec(s)...
|
|
881
|
+
`);let r=!0;return yield Promise.all(u.map(l=>M(null,null,function*(){let y=s.api[l];o.log(` \u{1F50E} ${l}: ${y}`);let{endpointCount:I,error:q}=yield Qr(y,l);q?(e.apis[l]={valid:!1,endpointCount:0,error:q},o.error(` \u274C ${l}: ${q}`),r=!1):(e.apis[l]={valid:!0,endpointCount:I},o.log(` \u2705 ${l}: ${I} endpoint(s) found`));}))),e.valid=r&&e.configErrors.length===0,e.valid?o.log(`
|
|
882
|
+
\u2705 All checks passed \u2014 config and specs are valid.
|
|
883
|
+
`):o.error(`
|
|
884
|
+
\u274C Validation failed \u2014 see errors above.
|
|
885
|
+
`),e});});var mr={};ot(mr,{interactiveInit:()=>Br,nonInteractiveInit:()=>St});function Br(){return M(this,null,function*(){try{let n=yield fr__default.default([{type:"select",name:"configFormat",message:"What configuration format would you like to use?",choices:[{title:"TypeScript (openapi.sync.ts)",value:"typescript"},{title:"JSON (openapi.sync.json)",value:"json"},{title:"JavaScript (openapi.sync.js)",value:"javascript"}],initial:0},{type:"select",name:"apiSource",message:"Where is your OpenAPI specification?",choices:[{title:"URL (e.g., https://api.example.com/openapi.json)",value:"url"},{title:"Local file",value:"file"}],initial:0},{type:r=>r==="url"?"text":null,name:"apiUrl",message:"Enter the OpenAPI specification URL:",validate:r=>r.startsWith("http://")||r.startsWith("https://")?!0:"Please enter a valid URL starting with http:// or https://"},{type:(r,d)=>d.apiSource==="file"?"text":null,name:"apiFile",message:"Enter the path to your OpenAPI file:",validate:r=>r.trim()!==""?!0:"Please enter a valid file path"},{type:"text",name:"apiName",message:"What would you like to name this API?",initial:"myapi",validate:r=>/^[a-zA-Z0-9_-]+$/.test(r)?!0:"API name must contain only letters, numbers, hyphens, and underscores"},{type:"text",name:"outputFolder",message:"Where should generated files be saved?",initial:"./src/api",validate:r=>{if(!r||r.trim()==="")return "Output folder cannot be empty";let d=te__default.default.normalize(r);if(d==="/"||d==="C:\\"||d==="\\")return "Cannot use filesystem root directory. Please use a project subfolder like './src/api'";if(te__default.default.isAbsolute(r)){let l=process.cwd();if(!r.startsWith(l))return "\u26A0\uFE0F Warning: Using absolute path outside project directory. Recommended: use relative path like './src/api'"}return !0}},{type:"confirm",name:"enableFolderSplit",message:"Organize generated code into folders by OpenAPI tags?",initial:!1},{type:"confirm",name:"generateClient",message:"Generate API client code?",initial:!0},{type:r=>r?"select":null,name:"clientType",message:"Which client type would you like?",choices:[{title:"React Query (Recommended for React)",value:"react-query"},{title:"RTK Query (Redux Toolkit)",value:"rtk-query"},{title:"SWR",value:"swr"},{title:"Fetch API",value:"fetch"},{title:"Axios",value:"axios"}],initial:0},{type:"confirm",name:"enableValidation",message:"Enable runtime validation schemas?",initial:!0},{type:r=>r?"select":null,name:"validationLibrary",message:"Which validation library?",choices:[{title:"Zod (Recommended)",value:"zod"},{title:"Yup",value:"yup"},{title:"Joi",value:"joi"}],initial:0},{type:"confirm",name:"enableCustomCode",message:"Enable custom code preservation?",initial:!0},{type:"confirm",name:"typesUseOperationId",message:"Use operationId from OpenAPI spec for type names?",initial:!0},{type:"text",name:"typesPrefix",message:"Prefix for TypeScript interface names (leave empty for none):",initial:"I"},{type:"confirm",name:"excludeEndpointsByTags",message:"Exclude endpoints by tags (e.g., deprecated, internal)?",initial:!1},{type:r=>r?"text":null,name:"excludeTags",message:"Enter tags to exclude (comma-separated):",initial:"deprecated,internal"},{type:"confirm",name:"showCurlInDocs",message:"Include cURL examples in generated documentation?",initial:!0},{type:"number",name:"refetchInterval",message:"Refetch interval in milliseconds (0 to disable auto-refresh):",initial:5e3,min:0},{type:"confirm",name:"runSync",message:"Run initial sync after setup?",initial:!0}],{onCancel:()=>{throw ue||process.exit(0),new Error("Setup cancelled")}}),i={refetchInterval:n.refetchInterval||void 0,folder:n.outputFolder,api:{[n.apiName]:n.apiUrl||n.apiFile}};n.enableFolderSplit&&(i.folderSplit={byTags:!0}),i.types={name:{prefix:n.typesPrefix||"",useOperationId:n.typesUseOperationId}},i.endpoints={name:{useOperationId:n.typesUseOperationId},doc:{showCurl:n.showCurlInDocs}},n.excludeEndpointsByTags&&n.excludeTags&&(i.endpoints.exclude={tags:n.excludeTags.split(",").map(r=>r.trim())}),n.generateClient&&n.clientType&&(i.clientGeneration={enabled:!0,type:n.clientType,outputDir:te__default.default.join(n.outputFolder,n.apiName,"client")},n.clientType==="react-query"?i.clientGeneration.reactQuery={version:5,mutations:!0}:n.clientType==="swr"&&(i.clientGeneration.swr={mutations:!0})),n.enableValidation&&n.validationLibrary&&(i.validations={library:n.validationLibrary}),n.enableCustomCode&&(i.customCode={enabled:!0,position:"bottom"});let o,e;n.configFormat==="json"?(e="openapi.sync.json",o=JSON.stringify(i,null,2)):n.configFormat==="typescript"?(e="openapi.sync.ts",o=`import { IConfig } from "openapi-sync";
|
|
886
|
+
|
|
887
|
+
const config: IConfig = ${JSON.stringify(i,null,2)};
|
|
888
|
+
|
|
889
|
+
export default config;
|
|
890
|
+
`):(e="openapi.sync.js",o=`module.exports = ${JSON.stringify(i,null,2)};
|
|
891
|
+
`);let s=te__default.default.join(process.cwd(),e);if(me__default.default.existsSync(s)&&!(yield fr__default.default({type:"confirm",name:"value",message:`${e} already exists. Overwrite?`,initial:!1})).value)throw ue||process.exit(0),new Error("Configuration file not created");me__default.default.writeFileSync(s,o,"utf-8"),ue||`${e}`;let t=te__default.default.isAbsolute(n.outputFolder)?n.outputFolder:te__default.default.join(process.cwd(),n.outputFolder);if(!me__default.default.existsSync(t))try{me__default.default.mkdirSync(t,{recursive:!0}),ue||`${n.outputFolder}`;}catch(r){ue||`${r.message}`;}let u=te__default.default.join(process.cwd(),".gitignore");if(me__default.default.existsSync(u)&&(me__default.default.readFileSync(u,"utf-8").includes(n.outputFolder)||me__default.default.appendFileSync(u,`
|
|
892
|
+
# OpenAPI Sync generated files
|
|
893
|
+
${n.outputFolder}
|
|
894
|
+
`)),ue||(`${e}`,n.generateClient&&n.clientType&&(n.clientType==="axios"||n.clientType==="react-query"||n.clientType==="swr"||n.clientType),n.enableValidation&&n.validationLibrary&&(n.generateClient,`${n.validationLibrary}`)),n.runSync&&!ue)try{let{Init:r,GenerateClient:d}=yield Promise.resolve().then(()=>(et(),Ot));yield r({refetchInterval:n.refetchInterval}),n.generateClient&&n.clientType&&(yield d({type:n.clientType,apiName:n.apiName}));}catch(r){console.error(`
|
|
895
|
+
\u274C Error during sync:`,r.message),r.stack&&process.env.DEBUG&&console.error(r.stack);}else ue||(n.generateClient||n.enableValidation,n.generateClient&&n.clientType&&(n.generateClient||n.enableValidation,`${n.clientType}`));ue||(`${n.outputFolder}${n.apiName}`,n.generateClient&&`${n.outputFolder}${n.apiName}`,n.generateClient&&n.clientType&&`${n.clientType}`);}catch(n){throw ue||(console.error(`
|
|
896
|
+
\u274C Error during setup:`,n.message),process.exit(1)),n}})}function St(n){return M(this,null,function*(){let{apiName:i,apiSource:o,outputFolder:e="./src/api",configFormat:s="typescript",clientType:t,validationLibrary:u,folderSplit:r=false,typesPrefix:d="I",useOperationId:l=true,excludeTags:y=[],showCurl:I=true,refetchInterval:q,runSync:k=false,silent:T=false}=n,N=T?{log:()=>{},warn:()=>{},error:()=>{}}:{log:console.log,warn:console.warn,error:console.error},F=[],A={folder:e,api:{[i]:o}};q&&q>0&&(A.refetchInterval=q),r&&(A.folderSplit={byTags:true}),A.types={name:{prefix:d,useOperationId:l}},A.endpoints={name:{useOperationId:l},doc:{showCurl:I}},y.length>0&&(A.endpoints.exclude={tags:y}),t&&(A.clientGeneration={enabled:true,type:t,outputDir:te__default.default.join(e,i,"client")},t==="react-query"?A.clientGeneration.reactQuery={version:5,mutations:true}:t==="swr"&&(A.clientGeneration.swr={mutations:true})),u&&(A.validations={library:u}),A.customCode={enabled:true,position:"bottom"};let Q,O;s==="json"?(O="openapi.sync.json",Q=JSON.stringify(A,null,2)):s==="typescript"?(O="openapi.sync.ts",Q=`import { IConfig } from "openapi-sync";
|
|
897
|
+
|
|
898
|
+
const config: IConfig = ${JSON.stringify(A,null,2)};
|
|
899
|
+
|
|
900
|
+
export default config;
|
|
901
|
+
`):(O="openapi.sync.js",Q=`module.exports = ${JSON.stringify(A,null,2)};
|
|
902
|
+
`);let E=te__default.default.join(process.cwd(),O);try{me__default.default.writeFileSync(E,Q,"utf-8"),N.log(`
|
|
903
|
+
\u2705 Config written: ${O}`);}catch(J){return F.push(`Failed to write config: ${J.message}`),{success:false,configFile:O,message:"Config write failed.",errors:F}}let Y=te__default.default.isAbsolute(e)?e:te__default.default.join(process.cwd(),e);if(!me__default.default.existsSync(Y))try{me__default.default.mkdirSync(Y,{recursive:!0});}catch(J){}if(k){N.log(`
|
|
904
|
+
\u{1F504} Running initial sync...`);try{let{Init:J,GenerateClient:de}=yield Promise.resolve().then(()=>(et(),Ot));yield J({silent:T}),t&&(yield de({type:t,apiName:i,silent:T})),N.log("\u2705 Sync complete.");}catch(J){F.push(`Sync failed: ${J.message}`);}}let G=F.length===0?`Config created: ${O}. Run \`npx openapi-sync\` to generate types.`:`Config created with errors (${F.length}).`;return N.log(`
|
|
905
|
+
${G}
|
|
906
|
+
`),{success:F.length===0,configFile:O,message:G,errors:F}})}var ue,At=ce(()=>{"use strict";ue=process.env.NODE_ENV==="test"||process.env.JEST_WORKER_ID!==void 0;});var Ot={};ot(Ot,{ConfigNotFoundError:()=>qe,ConfigParseError:()=>ze,ConfigValidationError:()=>bt,GenerateClient:()=>jt,GenerationError:()=>wt,Init:()=>Pt,InteractiveInit:()=>Dr,JSONStringify:()=>ke,ListEndpoints:()=>kt,OpenApiSyncError:()=>ye,SpecFetchError:()=>Ct,SpecParseError:()=>xt,SpecReadError:()=>It,UnknownApiError:()=>Ne,ValidateConfig:()=>Rt,capitalize:()=>$e,createCustomCodeMarker:()=>lt,extractCustomCode:()=>Hn,getEndpointDetails:()=>pt,getNestedValue:()=>Or,isJson:()=>Ue,isYamlString:()=>Kn,mergeCustomCode:()=>Me,renderTypeRefMD:()=>Ge,variableName:()=>Ar,variableNameChar:()=>it,yamlStringToJson:()=>Le});var nt,vt,Tt,Pt,jt,Rt,kt,Dr,et=ce(()=>{"use strict";sr();dt();ft();lr();Et();pr();Qe();at();Et();nt=process.cwd(),vt=()=>{let n=te__default.default.join(nt,"openapi.sync.js"),i=te__default.default.join(nt,"openapi.sync.ts"),o=te__default.default.join(nt,"openapi.sync.json"),e=[n,i,o];try{Ee("esbuild-register");}catch(r){throw r}let s,t;for(let r of e)if(me__default.default.existsSync(r)){t=r;try{s=Ee(r),Object.keys(s).length===1&&s.default&&(s=s.default);}catch(d){throw new ze(r,d)}break}if(!t)throw new qe(e);typeof s=="function"&&(s=s());let u=s;if(!u)throw new qe(e);return u},Tt=n=>({log:(...i)=>{n||[...i];},info:(...i)=>{n||console.info(...i);},warn:(...i)=>{n||[...i];},error:(...i)=>{n||console.error(...i);}}),Pt=n=>M(null,null,function*(){var s;let i=(s=n==null?void 0:n.silent)!=null?s:!1,o=Tt(i),e={success:!1,apis:[],filesWritten:[],endpointCount:0,warnings:[],errors:[]};try{let t=vt(),u=Object.keys(t.api);e.apis=u;let r=n&&"refetchInterval"in n&&!isNaN(n==null?void 0:n.refetchInterval)?n.refetchInterval:t.refetchInterval;Ke();for(let d=0;d<u.length;d+=1){let l=u[d],y=t.api[l];o.log(`
|
|
907
|
+
\u{1F504} Syncing ${l}...`);try{yield Ze(y,l,t,r);let I=He(l);e.endpointCount+=I.length,o.log(`\u2705 ${l}: ${I.length} endpoints`);}catch(I){let q=I instanceof Error?I.message:String(I);e.errors.push(`[${l}] ${q}`),o.error(`\u274C ${l}: ${q}`);}}return e.success=e.errors.length===0,e}catch(t){let u=t instanceof Error?t.message:String(t);return e.errors.push(u),o.error(`\u274C Fatal error: ${u}`),e}}),jt=n=>M(null,null,function*(){var s;let i=(s=n.silent)!=null?s:!1,o=Tt(i),e={success:!1,apis:[],filesWritten:[],endpointCount:0,warnings:[],errors:[]};try{o.log(`
|
|
908
|
+
\u{1F504} Loading configuration...`);let t=vt(),u=n.apiName?[n.apiName]:Object.keys(t.api);e.apis=u;for(let d of u)if(!t.api[d])throw new Ne(d,Object.keys(t.api));o.log("\u{1F504} Syncing OpenAPI specifications..."),Ke();for(let d of u){let l=t.api[d];yield Ze(l,d,t);}let r=(t==null?void 0:t.folder)||"api";for(let d of u){let l=He(d);if(l.length===0){let I=`No endpoints found for API: ${d}`;e.warnings.push(I),o.warn(`\u26A0\uFE0F ${I}`);continue}e.endpointCount+=l.length,o.log(`
|
|
909
|
+
\u{1F4CB} Found ${l.length} endpoint(s) for ${d}`);let y=B(B(B(B(V(B({enabled:!0},t.clientGeneration||{}),{type:n.type}),n.outputDir&&{outputDir:n.outputDir}),n.baseURL&&{baseURL:n.baseURL}),n.tags&&{tags:n.tags}),n.endpoints&&{endpoints:n.endpoints});yield ar(l,t,y,d,te__default.default.join(nt,r));}return o.log(`
|
|
910
|
+
\u2728 All clients generated successfully!
|
|
911
|
+
`),e.success=e.errors.length===0,e}catch(t){let u=t instanceof Error?t.message:String(t);return e.errors.push(u),o.error(`\u274C Error: ${u}`),e}}),Rt=n=>M(null,null,function*(){let{validateConfig:i}=yield Promise.resolve().then(()=>(dr(),ur));return i(n)}),kt=n=>M(null,null,function*(){var e;let i=(e=n==null?void 0:n.silent)!=null?e:!1,o=Tt(i);try{let s=vt(),t=n!=null&&n.apiName?[n.apiName]:Object.keys(s.api);if(n!=null&&n.apiName&&!s.api[n.apiName])throw new Ne(n.apiName,Object.keys(s.api));Ke();for(let r of t){let d=s.api[r];o.log(`\u{1F50D} Fetching spec for ${r}...`),yield Ze(d,r,s);}let u={};for(let r of t){let d=He(r);n!=null&&n.tags&&n.tags.length>0&&(d=d.filter(l=>{var y;return (y=l.tags)==null?void 0:y.some(I=>n.tags.includes(I))})),u[r]=d.map(l=>({name:l.name,method:l.method.toUpperCase(),path:l.path,operationId:l.operationId,tags:l.tags,summary:l.summary})),o.log(`\u2705 ${r}: ${u[r].length} endpoint(s)`);}return u}catch(s){let t=s instanceof Error?s.message:String(s);throw o.error(`\u274C Error: ${t}`),s}}),Dr=()=>M(null,null,function*(){let{interactiveInit:n}=yield Promise.resolve().then(()=>(At(),mr));yield n();});});var Kr=Sr(je=>{et();At();var Ae=(...n)=>process.stderr.write(n.join(" ")+`
|
|
912
|
+
`),qt=process.cwd(),Pe=new mcp_js.McpServer({name:"openapi-sync",version:"1.0.0"});Pe.tool("openapi_sync_validate","Validate the openapi-sync config file and all configured API specs without writing any files to disk. Use this as a pre-flight check before syncing. Returns a structured result with per-API validity and endpoint counts.",{},()=>M(null,null,function*(){Ae("[openapi-sync-mcp] Running validate...");try{let n=yield Rt({silent:!0});return {content:[{type:"text",text:JSON.stringify(n,null,2)}]}}catch(n){return {content:[{type:"text",text:JSON.stringify({valid:!1,configErrors:[n.message],apis:{}})}],isError:!0}}}));Pe.tool("openapi_sync_list_endpoints","Fetch and parse all configured OpenAPI specs, then return a structured list of every endpoint (name, HTTP method, path, tags, summary). No files are written. Use this to understand the API surface before deciding on a client type or tag filters.",{apiName:zod.z.string().optional().describe("Limit results to a specific API name from the config. Omit to list endpoints for all configured APIs."),tags:zod.z.array(zod.z.string()).optional().describe("Filter endpoints to only those with one of these OpenAPI tags.")},o=>M(null,[o],function*({apiName:n,tags:i}){Ae("[openapi-sync-mcp] Listing endpoints...");try{let e=yield kt({apiName:n,tags:i,silent:!0});return {content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(e){return {content:[{type:"text",text:`Error: ${e.message}`}],isError:!0}}}));Pe.tool("openapi_sync_sync","Run a full openapi-sync \u2014 fetches all configured OpenAPI specs and writes TypeScript types, endpoint builder functions, and optional validation schemas (Zod/Yup/Joi) to disk. Returns a SyncResult with the list of files written and any errors. Run this after validating your config.",{refetchInterval:zod.z.number().optional().describe("If set, enables continuous auto-sync at this interval (ms). Omit for a single one-time sync.")},i=>M(null,[i],function*({refetchInterval:n}){Ae("[openapi-sync-mcp] Running sync...");try{let o=yield Pt({refetchInterval:n,silent:!0});return {content:[{type:"text",text:JSON.stringify(o,null,2)}],isError:!o.success}}catch(o){return {content:[{type:"text",text:JSON.stringify({success:!1,apis:[],filesWritten:[],endpointCount:0,warnings:[],errors:[o.message]})}],isError:!0}}}));Pe.tool("openapi_sync_generate_client","Generate a fully-typed API client for one or all configured APIs. Supports: fetch, axios, react-query, swr, rtk-query. Syncs the latest spec first, then writes client files to disk. Returns a SyncResult with the list of files written.",{type:zod.z.enum(["fetch","axios","react-query","swr","rtk-query"]).describe("The type of API client to generate."),apiName:zod.z.string().optional().describe("API name from the config to generate a client for. Omit to generate for all configured APIs."),baseURL:zod.z.string().optional().describe("Base URL to bake into the generated client (e.g. https://api.example.com). Can be overridden at runtime in the generated code."),tags:zod.z.array(zod.z.string()).optional().describe("Only generate client methods for endpoints with these tags."),endpoints:zod.z.array(zod.z.string()).optional().describe("Only generate client methods for these specific endpoint names / operationIds."),outputDir:zod.z.string().optional().describe("Custom output directory for the generated client files. Defaults to the path set in your openapi.sync config.")},u=>M(null,[u],function*({type:n,apiName:i,baseURL:o,tags:e,endpoints:s,outputDir:t}){Ae(`[openapi-sync-mcp] Generating ${n} client...`);try{let r=yield jt({type:n,apiName:i,baseURL:o,tags:e,endpoints:s,outputDir:t,silent:!0});return {content:[{type:"text",text:JSON.stringify(r,null,2)}],isError:!r.success}}catch(r){return {content:[{type:"text",text:JSON.stringify({success:!1,apis:[],filesWritten:[],endpointCount:0,warnings:[],errors:[r.message]})}],isError:!0}}}));Pe.tool("openapi_sync_init","Create an openapi.sync config file in the current working directory without any interactive prompts. Use this to set up a project from scratch. After calling this tool, run openapi_sync_validate and then openapi_sync_sync.",{apiName:zod.z.string().describe("A short identifier for this API used as a folder name and config key (e.g. 'petstore', 'my-api'). Letters, numbers, hyphens and underscores only."),apiSource:zod.z.string().describe("URL to the OpenAPI spec (https://...) or relative path to a local file (e.g. ./api/openapi.yaml)."),outputFolder:zod.z.string().optional().default("./src/api").describe("Output folder for generated files (default: ./src/api)."),configFormat:zod.z.enum(["typescript","json","javascript"]).optional().default("typescript").describe("Config file format (default: typescript)."),clientType:zod.z.enum(["react-query","swr","fetch","axios","rtk-query"]).optional().describe("Client type to pre-configure in the config. Omit to skip client generation."),validationLibrary:zod.z.enum(["zod","yup","joi"]).optional().describe("Validation library to pre-configure. Omit to skip validation schema generation."),folderSplit:zod.z.boolean().optional().default(!1).describe("Organize generated files into folders by OpenAPI tags."),typesPrefix:zod.z.string().optional().default("I").describe("Prefix for generated TypeScript interface names (default: 'I', e.g. IPet)."),excludeTags:zod.z.array(zod.z.string()).optional().describe("Tags to exclude from generation (e.g. ['deprecated', 'internal'])."),runSync:zod.z.boolean().optional().default(!1).describe("If true, immediately run a full sync after creating the config file.")},y=>M(null,[y],function*({apiName:n,apiSource:i,outputFolder:o,configFormat:e,clientType:s,validationLibrary:t,folderSplit:u,typesPrefix:r,excludeTags:d,runSync:l}){Ae("[openapi-sync-mcp] Creating config...");try{let I=yield St({apiName:n,apiSource:i,outputFolder:o,configFormat:e,clientType:s,validationLibrary:t,folderSplit:u,typesPrefix:r,excludeTags:d,runSync:l,silent:!0});return {content:[{type:"text",text:JSON.stringify(I,null,2)}],isError:!I.success}}catch(I){return {content:[{type:"text",text:JSON.stringify({success:!1,configFile:"",message:I.message,errors:[I.message]})}],isError:!0}}}));Pe.tool("openapi_sync_read_config","Read the current openapi.sync config file from the working directory and return its contents as a string. Useful to inspect what APIs are configured before running sync or generate-client.",{},()=>M(null,null,function*(){Ae("[openapi-sync-mcp] Reading config...");let n=[te__default.default.join(qt,"openapi.sync.ts"),te__default.default.join(qt,"openapi.sync.js"),te__default.default.join(qt,"openapi.sync.json")];for(let i of n)if(me__default.default.existsSync(i))try{let o=me__default.default.readFileSync(i,"utf-8");return {content:[{type:"text",text:JSON.stringify({found:!0,file:te__default.default.basename(i),path:i,content:o},null,2)}]}}catch(o){return {content:[{type:"text",text:JSON.stringify({found:!1,error:`Could not read ${i}: ${o.message}`})}],isError:!0}}return {content:[{type:"text",text:JSON.stringify({found:!1,searched:n,message:"No openapi.sync config file found. Use the openapi_sync_init tool to create one."})}]}}));function Vr(){return M(this,null,function*(){let n=new stdio_js.StdioServerTransport;yield Pe.connect(n),Ae("[openapi-sync-mcp] Server running on stdio. Ready for tool calls.");})}Vr().catch(n=>{Ae("[openapi-sync-mcp] Fatal error:",n),process.exit(1);});});var server = Kr();
|
|
913
|
+
module.exports=server;
|