UNPKG

@hey-api/openapi-ts

Version:

🌀 OpenAPI to TypeScript codegen. Production-ready SDKs, Zod schemas, TanStack Query hooks, and 20+ plugins. Used by Vercel, OpenCode, and PayPal.

12 lines (11 loc) 11.9 kB
import{A as e,D as t,E as n,M as r,N as i,O as a,T as o,i as s,j as c,k as l,n as u,r as d,s as f,t as p,u as m,w as h,y as g}from"./openApi-BfsCCQJN.mjs";import"@hey-api/codegen-core";import _ from"ansi-colors";import v from"color-support";import y from"node:fs";import b from"node:path";import{$RefParser as x}from"@hey-api/json-schema-ref-parser";const S=()=>{if(typeof Bun<`u`){let[e]=Bun.version.split(`.`).map(Number);if(e<1)throw new n(`Unsupported Bun version ${Bun.version}. Please use Bun 1.0.0 or newer.`)}else if(typeof process<`u`&&process.versions?.node){let[e]=process.versions.node.split(`.`).map(Number);if(e<20)throw new n(`Unsupported Node version ${process.versions.node}. Please use Node 20 or newer.`)}};var C=class{spec;constructor(e){this.spec=e}getOperation(e,t){let n=this.spec.paths;if(n)return n[e]?.[t]}setExample(e,t){let n=this.getOperation(e.path,e.method);n&&(n[`x-codeSamples`]||=[],n[`x-codeSamples`].push(t))}};const w=async({context:e})=>{let t=b.resolve(e.config.output.path);e.config.output.clean&&y.existsSync(t)&&y.rmSync(t,{force:!0,recursive:!0});let n=g(e.config);`bundle`in n.config&&n.config.bundle&&!e.config.dryRun&&(e.config._FRAGILE_CLIENT_BUNDLE_RENAMED=f({meta:{importFileExtension:e.config.output.importFileExtension},outputPath:t,plugin:n,project:e.gen}));for(let t of e.registerPlugins())await t.run();e.gen.plan();let r=new C(e.spec);for(let t of e.intents)await t.run(r);for(let n of e.gen.render()){let r=b.resolve(t,n.path),i=b.dirname(r);e.config.dryRun||(y.mkdirSync(i,{recursive:!0}),y.writeFileSync(r,n.content,{encoding:`utf8`}))}let{source:i}=e.config.output;if(i.enabled){let n=i.path===null?void 0:b.resolve(t,i.path);!e.config.dryRun&&n&&n!==t&&y.mkdirSync(n,{recursive:!0});let r=await i.serialize(e.spec);!e.config.dryRun&&n&&y.writeFileSync(b.resolve(n,`${i.fileName}.${i.extension}`),r,{encoding:`utf8`}),i.callback&&await i.callback(r)}},T=({patchOptions:e,spec:t})=>{if(!e)return;let n=t;if(`swagger`in n){if(e.version&&n.swagger&&(n.swagger=typeof e.version==`string`?e.version:e.version(n.swagger)),e.meta&&n.info&&e.meta(n.info),e.schemas&&n.definitions)for(let t in e.schemas){let r=n.definitions[t];if(!r||typeof r!=`object`)continue;let i=e.schemas[t];i(r)}if(e.operations&&n.paths)for(let t in e.operations){let[r,i]=t.split(` `);if(!r||!i)continue;let a=n.paths[i];if(!a)continue;let o=a[r.toLocaleLowerCase()]||a[r.toLocaleUpperCase()];if(!o||typeof o!=`object`)continue;let s=e.operations[t];s(o)}return}if(e.version&&n.openapi&&(n.openapi=typeof e.version==`string`?e.version:e.version(n.openapi)),e.meta&&n.info&&e.meta(n.info),n.components){if(e.schemas&&n.components.schemas)for(let t in e.schemas){let r=n.components.schemas[t];if(!r||typeof r!=`object`)continue;let i=e.schemas[t];i(r)}if(e.parameters&&n.components.parameters)for(let t in e.parameters){let r=n.components.parameters[t];if(!r||typeof r!=`object`)continue;let i=e.parameters[t];i(r)}if(e.requestBodies&&n.components.requestBodies)for(let t in e.requestBodies){let r=n.components.requestBodies[t];if(!r||typeof r!=`object`)continue;let i=e.requestBodies[t];i(r)}if(e.responses&&n.components.responses)for(let t in e.responses){let r=n.components.responses[t];if(!r||typeof r!=`object`)continue;let i=e.responses[t];i(r)}}if(e.operations&&n.paths)for(let t in e.operations){let[r,i]=t.split(` `);if(!r||!i)continue;let a=n.paths[i];if(!a)continue;let o=a[r.toLocaleLowerCase()]||a[r.toLocaleUpperCase()];if(!o||typeof o!=`object`)continue;let s=e.operations[t];s(o)}},E=e=>{let t={...e,path:``};if(e.path&&(typeof e.path!=`string`||e.registry!==`hey-api`))return t.path=e.path,t;let[n,r]=e.path.split(`?`),i=(r||``).split(`&`).map(e=>e.split(`=`)),a=n||``;a.endsWith(`/`)&&(a=a.slice(0,a.length-1));let[,o]=a.split(`://`),[s,c,l]=(o||``).split(`/`);t.organization=c||e.organization,t.project=l||e.project;let u=[],d=`api_key`;t.api_key=i.find(([e])=>e===d)?.[1]||e.api_key||process.env.HEY_API_TOKEN,t.api_key&&u.push(`${d}=${t.api_key}`);let f=`branch`;t.branch=i.find(([e])=>e===f)?.[1]||e.branch,t.branch&&u.push(`${f}=${t.branch}`);let p=`commit_sha`;t.commit_sha=i.find(([e])=>e===p)?.[1]||e.commit_sha,t.commit_sha&&u.push(`${p}=${t.commit_sha}`);let m=`tags`;t.tags=i.find(([e])=>e===m)?.[1]?.split(`,`)||e.tags,t.tags?.length&&u.push(`${m}=${t.tags.join(`,`)}`);let h=`version`;if(t.version=i.find(([e])=>e===h)?.[1]||e.version,t.version&&u.push(`${h}=${t.version}`),!t.organization)throw Error(`missing organization - from which Hey API Platform organization do you want to generate your output?`);if(!t.project)throw Error(`missing project - from which Hey API Platform project do you want to generate your output?`);let g=u.join(`&`),_=s||`get.heyapi.dev`,v=_.startsWith(`localhost`),y=[v?`http`:`https`,_].join(`://`),b=v?[y,`v1`,`get`,t.organization,t.project].join(`/`):[y,t.organization,t.project].join(`/`);return t.path=g?`${b}?${g}`:b,t},D=(e,t)=>{let n=[],r=_.gray(`[Job ${t+1}] `),i=e.length,a=_.cyan(`Generating from ${i} ${i===1?`input`:`inputs`}:`);n.push(`${r}${a}`),e.forEach((e,t)=>{let i=` [${t+1}] `,a=_.cyan(i),o=` `.repeat(i.length);if(typeof e.path!=`string`){n.push(`${r}${a}raw OpenAPI specification`);return}switch(e.registry){case`hey-api`:{let t=[e.organization,e.project].filter(Boolean).join(`/`);n.push(`${r}${a}${t}`),e.branch&&n.push(`${r}${o}${_.gray(`branch:`)} ${_.green(e.branch)}`),e.commit_sha&&n.push(`${r}${o}${_.gray(`commit:`)} ${_.green(e.commit_sha)}`),e.tags?.length&&n.push(`${r}${o}${_.gray(`tags:`)} ${_.green(e.tags.join(`, `))}`),e.version&&n.push(`${r}${o}${_.gray(`version:`)} ${_.green(e.version)}`),n.push(`${r}${o}${_.gray(`registry:`)} ${_.green(`Hey API`)}`);break}case`readme`:{let t=[e.organization,e.project].filter(Boolean).join(`/`);t?n.push(`${r}${a}${t}`):n.push(`${r}${a}${e.path}`),e.uuid&&n.push(`${r}${o}${_.gray(`uuid:`)} ${_.green(e.uuid)}`),n.push(`${r}${o}${_.gray(`registry:`)} ${_.green(`ReadMe`)}`);break}case`scalar`:{let t=[e.organization,e.project].filter(Boolean).join(`/`);n.push(`${r}${a}${t}`),n.push(`${r}${o}${_.gray(`registry:`)} ${_.green(`Scalar`)}`);break}default:n.push(`${r}${a}${e.path}`);break}});for(let e of n)console.log(e)},O=async({config:e,dependencies:t,jobIndex:n,logger:r,watches:i})=>{let a=i||Array.from({length:e.input.length},()=>({headers:new Headers})),o=e.input.map(e=>E(e));e.logs.level!==`silent`&&!i&&D(o,n);let s=async(e,t)=>{let n=r.timeEvent(`spec`),{arrayBuffer:s,error:c,resolvedInput:l,response:u}=await d({fetchOptions:e.fetch,inputPath:o[t].path,timeout:e.watch.timeout,watch:a[t]});if(n.timeEnd(),c&&!i)throw Error(`Request failed with status ${u.status}: ${u.statusText}`);return{arrayBuffer:s,resolvedInput:l}},c=(await Promise.all(e.input.map((e,t)=>s(e,t)))).filter(e=>e.arrayBuffer||e.resolvedInput),l;if(c.length){let a=new x,s=c.length>1?await a.bundleMany({arrayBuffer:c.map(e=>e.arrayBuffer),pathOrUrlOrSchemas:[],resolvedInputs:c.map(e=>e.resolvedInput)}):await a.bundle({arrayBuffer:c[0].arrayBuffer,pathOrUrlOrSchema:void 0,resolvedInput:c[0].resolvedInput});e.logs.level!==`silent`&&i&&(console.clear(),D(o,n));let d=r.timeEvent(`input.patch`);T({patchOptions:e.parser.patch,spec:s}),d.timeEnd();let f=r.timeEvent(`parser`);l=p({config:e,dependencies:t,logger:r,spec:s}),l.graph=u(l.ir,r).graph,f.timeEnd();let m=r.timeEvent(`generator`);await w({context:l}),m.timeEnd();let g=r.timeEvent(`postprocess`);if(!e.dryRun&&(h(e.output),e.logs.level!==`silent`)){let t=process.env.INIT_CWD?`./${b.relative(process.env.INIT_CWD,e.output.path)}`:e.output.path,r=_.gray(`[Job ${n+1}] `);console.log(`${r}${_.green(`✅ Done!`)} Your output is in ${_.cyanBright(t)}`)}g.timeEnd()}let f=e.input.find((e,t)=>e.watch.enabled&&typeof o[t].path==`string`);return f&&setTimeout(()=>{O({config:e,dependencies:t,jobIndex:n,logger:r,watches:a})},f.watch.interval),l},k=(e,t)=>{let n=[],r=Array.from({length:t?.padding??0}).fill(``);n.push(...r);let i=0,a=``;for(let t of e)t===` `?a&&=(n.push(a),i=Math.max(i,a.length),``):a+=t;return n.push(...r),{lines:n,maxLineLength:i}};function A(){let e=i(),t=k(` 888 | e 888~-_ 888 888___| e88~~8e Y88b / d8b 888 \\ 888 888 | d888 88b Y888/ /Y88b 888 | 888 888 | 8888__888 Y8/ / Y88b 888 / 888 888 | Y888 , Y /____Y88b 888_-~ 888 888 | "88___/ / / Y88b 888 888 _/ `,{padding:1});for(let e of t.lines)console.log(_.cyan(e));console.log(_.gray(`${e.name} v${e.version}`)),console.log(``)}let j=0;const M=e=>`${e}-${j++}`,N=e=>`${e}-end`,P=e=>`${e}-length`,F=e=>`${e}-start`,I=(e,t)=>{if(e>200)return{color:_.red,type:`duration`};if(t>30)return{color:_.red,type:`percentage`};if(e>50)return{color:_.yellow,type:`duration`};if(t>10)return{color:_.yellow,type:`percentage`}};var L=class{events=[];end(e){let t,n=this.events;for(let r of e.position)t=n[r],t?.events&&(n=t.events);t&&!t.end&&(t.end=performance.mark(N(t.id)))}endAllEvents(e){for(let t of e)t.end||=performance.mark(N(t.id)),t.events.length>0&&this.endAllEvents(t.events)}report(e=!0){let t=this.events[0];if(!t)return;this.endAllEvents(this.events);let n=this.events[this.events.length-1],r=`root`,i=M(r);try{let a=performance.measure(P(i),F(t.id),N(n.id));return e&&this.reportEvent({end:n.end,events:this.events,id:i,indent:0,measure:a,name:r,start:t.start}),a}catch{return}}reportEvent({indent:e,...t}){let n=e?_.gray:_.cyan,r=t.events.length-1;t.events.forEach((i,a)=>{try{let o=performance.measure(P(i.id),F(i.id),N(i.id)),s=Math.ceil(o.duration*100)/100,c=Math.ceil(o.duration/t.measure.duration*100*100)/100,l=e?I(s,c):void 0,u=`${s.toFixed(2).padStart(8)}ms`;l?.type===`duration`&&(u=l.color(u));let d=a===r?`└─ `:`├─ `,f=e?`│ `.repeat(e-1)+d:``,p=38-f.length,m=e?`↳ `:``,h=`${e?` `.repeat(e-1)+m:``}${c.toFixed(2)}%`;l?.type===`percentage`&&(h=l.color(h));let g=_.gray(`[root] `);console.log(`${g}${_.gray(f)}${n(`${i.name.padEnd(p)} ${u} (${h})`)}`),this.reportEvent({...i,indent:e+1,measure:o})}catch{}})}start(e){return performance.mark(F(e))}storeEvent({result:e,...t}){let n=t.events.length-1,r=t.events[n];if(r&&!r.end){e.position=[...e.position,n],this.storeEvent({...t,events:r.events,result:e});return}let i=t.events.push({...t,events:[]});e.position=[...e.position,i-1]}timeEvent(e){let t=M(e),n=this.start(t),r={events:this.events,id:t,name:e,start:n},i={position:[]};return this.storeEvent({...r,result:i}),{mark:n,timeEnd:()=>this.end(i)}}};const R=async(n,i=new L)=>{let u=typeof n==`function`?await n():n,d=u?u instanceof Array?u:[u]:[],f=d.find(e=>o(e).level!==`silent`)?.logs;typeof f==`string`&&(f=o({logs:f}));let p;try{S();let e=i.timeEvent(`createClient`),n=i.timeEvent(`config`);p=await s({logger:i,userConfigs:d}),p.results.some(e=>e.config.logs.level!==`silent`)&&A(),n.timeEnd();let r=p.results.flatMap(e=>e.errors.map(t=>({error:t,jobIndex:e.jobIndex})));if(r.length)throw new t(r);let o=(await Promise.all(p.results.map(async e=>{try{return await O({config:e.config,dependencies:p.dependencies,jobIndex:e.jobIndex,logger:i})}catch(t){throw new a(``,{error:t,jobIndex:e.jobIndex})}}))).filter(e=>!!e);e.timeEnd();let c=p.results.some(e=>e.config.logs.level===`debug`);return i.report(c),o}catch(t){let n=p?.results??[],i=n.find(e=>e.config.logs.level!==`silent`)?.config.logs??n[0]?.config.logs??f,a=n.some(e=>e.config.dryRun)??d.some(e=>e.dryRun)??!1,o=i?.file&&!a?l(t,i.path??``):void 0;throw(!i||i.level!==`silent`)&&(c({error:t,logPath:o}),await r({error:t,isInteractive:n.some(e=>e.config.interactive)??d.some(e=>e.interactive)??!1})&&await e(t)),t}},z={stringCase({case:e,stripLeadingSeparators:t,value:n}){return m(n,e,{stripLeadingSeparators:t})},toCase:m};_.enabled=v().hasBasic;const B=async e=>typeof e==`function`?await e():e;export{L as i,z as n,R as r,B as t}; //# sourceMappingURL=src-DxXY6pL5.mjs.map