@redocly/cli 0.0.0-snapshot.1786367735 → 0.0.0-snapshot.1786371877
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/lib/chunks/{6R5OQ7QU.js → 3O5V3AJY.js} +1 -1
- package/lib/chunks/4SNNE6EN.js +16 -0
- package/lib/chunks/{T7DCOECP.js → BE7YYDB3.js} +1 -1
- package/lib/chunks/{TDTR5MBO.js → G4XWZP3C.js} +2 -2
- package/lib/chunks/{MCFKW2XO.js → I3IBRI4I.js} +1 -1
- package/lib/chunks/{I4Z3WPTG.js → JW26VIAA.js} +1 -1
- package/lib/chunks/{VPFYESO6.js → QLVIJIRU.js} +1 -1
- package/lib/chunks/{BEVQCBR3.js → UCQC67WC.js} +1 -1
- package/lib/chunks/{3WQWAUTU.js → VCPMW7TZ.js} +1 -1
- package/lib/chunks/{XBL677EC.js → YL324MJO.js} +1 -1
- package/lib/index.js +80 -80
- package/package.json +1 -1
- package/lib/chunks/ORZTXN7X.js +0 -17
|
@@ -4,4 +4,4 @@ import { dirname as __pathDirname } from 'node:path';
|
|
|
4
4
|
const require = __createRequire(import.meta.url);
|
|
5
5
|
var __filename = __fileURLToPath(import.meta.url);
|
|
6
6
|
var __dirname = __pathDirname(__filename);
|
|
7
|
-
import{h as a}from"./
|
|
7
|
+
import{h as a}from"./QLVIJIRU.js";import"./P26PQ2RU.js";import"./RS5PUOTT.js";import"./UCQC67WC.js";import"./BXI4SF2U.js";import"./32XCOMOR.js";import"./X4BGIKNX.js";import"./NEWT5A6S.js";import"./RFWIIJFG.js";export{a as RedoclyOAuthClient};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module';
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname as __pathDirname } from 'node:path';
|
|
4
|
+
const require = __createRequire(import.meta.url);
|
|
5
|
+
var __filename = __fileURLToPath(import.meta.url);
|
|
6
|
+
var __dirname = __pathDirname(__filename);
|
|
7
|
+
import{a as T,b as Y}from"./YL324MJO.js";import{b as ee,d as te}from"./ICDHPWVV.js";import{a as h}from"./WZXA5XPB.js";import{a as Z}from"./YSMUBJCG.js";import{C as H,O as $,R as J,W as V,aa as W,c as q,ca as I,ja as Q,q as S,s as F}from"./X4BGIKNX.js";import{b as M,c as R,g as D}from"./3XBPOSEL.js";import{mkdir as at,readFile as ct,writeFile as ut}from"node:fs/promises";import{dirname as $e,resolve as E,sep as ft}from"node:path";function A(e){return{requires:["sdk"],errorModes:["throw"],load:()=>import("./P5MHZLNH.js").then(t=>({run:t.tanstackQueryGenerator(e)}))}}var U={outputMode:"it always emits one self-contained file",runtime:"the runtime is always embedded in the generated file",argsStyle:"inputs follow the target language's own idiom",importExt:"the generated file has no relative imports"},G={sdk:{load:()=>import("./UWBQWGVZ.js").then(e=>({run:e.sdkGenerator,sample:e.sdkSample}))},zod:{load:()=>import("./JKEX4O5F.js").then(e=>({run:e.zodGenerator}))},transformers:{requires:["sdk"],dateTypes:["Date"],load:()=>import("./ZTS6JG4V.js").then(e=>({run:e.transformersGenerator}))},"tanstack-query":A("react"),"tanstack-query-vue":A("vue"),"tanstack-query-svelte":A("svelte"),"tanstack-query-solid":A("solid"),swr:{requires:["sdk"],errorModes:["throw"],load:()=>import("./AXKRK4C7.js").then(e=>({run:e.swrGenerator}))},mock:{requires:["sdk"],load:()=>import("./773S6JMM.js").then(e=>({run:e.mockGenerator}))},cli:{requires:["sdk","zod"],errorModes:["throw"],load:()=>import("./CYWELUZ2.js").then(e=>({run:e.cliGenerator,sample:e.cliSample}))},"cli-docs":{requires:["cli"],errorModes:["throw"],notApplicable:{outputMode:"it emits one Markdown page",importExt:"a Markdown page has no imports",runtime:"a Markdown page embeds no runtime"},load:()=>import("./OPTGJ5IS.js").then(e=>({run:e.cliDocsGenerator,options:e.cliDocsOptions}))},python:{notApplicable:U,load:()=>import("./LRB2QBAP.js").then(e=>({run:e.pythonGenerator,sample:e.pythonSample}))},go:{errorModes:["throw"],notApplicable:U,load:()=>import("./WXUKMBZA.js").then(e=>({run:e.goGenerator,sample:e.goSample}))},php:{errorModes:["throw"],notApplicable:U,load:()=>import("./37BVUZUB.js").then(e=>({run:e.phpGenerator,sample:e.phpSample}))}},ke=[{option:"binName",generators:["cli","cli-docs"],reason:"it names the generated command"},{option:"goPackage",generators:["go"],reason:"it declares the Go package clause"}];function ne(e,t,n,r){let s=new Set(e);for(let{option:c,generators:u,reason:d}of ke)t[c]!==void 0&&!u.some(f=>s.has(f))&&$.warn(`generate-client: ${c} is ignored \u2014 ${d}, and no selected generator uses it (add --generator ${u[0]}).
|
|
8
|
+
`);let o=t.errorMode??"throw",i=t.dateType??"string",a=t.runtime??"inline";for(let c of e){let u=n.get(c);if(!u)throw new h(`Unknown generator: ${c}`);for(let f of u.requires??[])if(!s.has(f)){let m=[...new Set([f,...e])].map(l=>`--generator ${l}`).join(" ");throw new h(`The "${c}" generator requires the "${f}" generator. Add it, e.g. ${m}.`)}if(u.errorModes&&!u.errorModes.includes(o))throw new h(`The "${c}" generator does not support --error-mode "${o}" (supported: ${u.errorModes.join(", ")}).`);if(u.dateTypes&&!u.dateTypes.includes(i))throw new h(`The "${c}" generator requires --date-type ${u.dateTypes.join(" or ")} (got "${i}") so the runtime values match the generated types.`);if(u.runtimes&&!u.runtimes.includes(a))throw new h(`The "${c}" generator does not support runtime "${a}" (supported: ${u.runtimes.join(", ")}).`);let d={...t,outputMode:r};for(let[f,m]of Object.entries(u.notApplicable??{}))d[f]!==void 0&&$.warn(`generate-client: the "${c}" generator ignores ${f} \u2014 ${m}.
|
|
9
|
+
`)}}function re(e,t,n){let r=new Map;for(let s of e){let o=t.get(s)?.options,i=n?.[s];if(o===void 0){i!==void 0&&$.warn(`generate-client: the "${s}" generator declares no options, so client.options.${s} is ignored.
|
|
10
|
+
`),r.set(s,{});continue}r.set(s,Se(s,o,i))}return r}function Se(e,t,n){if(n!==void 0&&!q(n))throw new h(`The "${e}" generator's options must be a map of option names to values.`);let r=n??{},s=Object.keys(t.properties);if(t.additionalProperties!==!0){for(let i of Object.keys(r))if(!s.includes(i))throw new h(`The "${e}" generator got an unknown option "${i}". Declared options: ${s.join(", ")||"(none)"}.`)}for(let i of t.required??[])if(r[i]===void 0)throw new h(`The "${e}" generator requires the "${i}" option.`);let o={...r};for(let[i,a]of Object.entries(t.properties)){if(o[i]===void 0){a.default!==void 0&&(o[i]=a.default);continue}let c=ve(a,o[i]);if(c!==void 0)throw new h(`The "${e}" generator's "${i}" ${c}.`)}return o}function ve(e,t){if("enum"in e)return e.enum.includes(t)?void 0:`must be one of: ${e.enum.join(", ")}`;if(e.type==="array"){let n=e.items.type;return Array.isArray(t)&&t.every(r=>typeof r===n)?void 0:`must be an array of ${n}`}return typeof t===e.type?void 0:`must be a ${e.type}`}import{isAbsolute as Oe,resolve as qe}from"node:path";import{pathToFileURL as xe}from"node:url";async function se(e,t={}){let n=new Map;for(let a of t.customGenerators??[])ie(n,a);let r=[];for(let a of e)r.push(await oe(a,n,t.configDir));let s=[],o=new Set,i=async a=>{if(!(s.includes(a)||o.has(a))){o.add(a);for(let c of n.get(a).requires??[])(n.has(c)||c in G)&&await i(await oe(c,n,t.configDir));o.delete(a),s.push(a)}};for(let a of r)await i(a);return{selected:s,registry:n}}async function oe(e,t,n){if(t.has(e))return e;let r=G[e];if(r!==void 0){let{load:o,...i}=r;return t.set(e,{...i,...await o()}),e}let s=await Pe(e,n??process.cwd());return ie(t,s),s.name}function ie(e,t){if(!q(t)||typeof t.name!="string"||t.name===""||typeof t.run!="function")throw new h("Invalid custom generator: expected an object with a non-empty string `name` and a `run` function (build one with `defineGenerator`).");if(e.has(t.name))throw new h(`Generator name "${t.name}" collides with an existing generator. Rename the custom generator.`);if(t.requiresGenerator!==void 0){let n=Y(T,t.requiresGenerator);if(n===void 0)throw new h(`Generator "${t.name}" declares requiresGenerator "${t.requiresGenerator}", which is not a range we read. Use ^1.2.0, ~1.2.0, >=1.2.0, or an exact version.`);if(!n)throw new h(`Generator "${t.name}" needs @redocly/client-generator ${t.requiresGenerator}; this CLI ships ${T}. Upgrade @redocly/cli if the generator is newer, or update the generator \u2014 \`redocly eject-generator <name> --update\` for an ejected file, or upgrade its package.`)}t.name in G&&$.warn(`generate-client: custom generator "${t.name}" takes over the built-in generator of the same name.
|
|
11
|
+
`),e.set(t.name,{run:t.run,sample:t.sample,options:t.options,requires:t.requires,errorModes:t.errorModes,dateTypes:t.dateTypes,runtimes:t.runtimes})}async function Pe(e,t){if(F(e))throw new h(`Remote generator modules are not supported \u2014 use a local path or a package name. Got: ${e}`);let r=e.startsWith(".")||Oe(e)?xe(qe(t,e)).href:e,s;try{s=await import(r)}catch(i){throw new h(`Could not load generator "${e}": ${i.message}`)}let o=s.default??s.generator;if(o===void 0)throw new h(`Generator module "${e}" must export a generator (a default export or a \`generator\` export built with \`defineGenerator\`).`);return o}function ue(e){let t=new Set,n=new Set,r=new Map;for(let l of e.securitySchemes){let p=C(l.key,t,n);p!==l.key&&(r.set(l.key,p),L("security scheme",l.key,p,ce(l.key,t)),l.key=p)}let s=new Set([...te(),...ee(e.securitySchemes)]),o=new Set(s),i=new Set,a=new Map;for(let l of e.schemas){let p=C(l.name,o,i);p!==l.name&&(a.set(l.name,p),L("schema",l.name,p,ce(l.name,s)),l.name=p)}let c=l=>a.get(l)??ae(l),u=l=>r.get(l)??ae(l);for(let l of e.schemas)w(l.schema,c);let d=new Set(o),f=new Set,m=new Set;for(let l of e.services)for(let p of l.operations){let g=m.has(p.name);m.add(p.name);let k=p.name,P=C(p.name,d,f);if(P!==p.name){let N=g?{kind:"duplicate-operation-id"}:s.has(k)?{kind:"reserved"}:o.has(k)?{kind:"schema-collision"}:{kind:"unusable"};L("operation",k,P,N),p.specName=p.name,p.name=P}je(p,c),p.security=p.security.map(N=>N.map(u))}}function C(e,t,n){let r=R(e),s=r,o=2;for(;t.has(s)||n.has(D(s));)s=`${r}_${o++}`;return t.add(s),n.add(D(s)),s}var Ne=["params","body","headers","cookies"];function fe(e){for(let t of e.services)for(let n of t.operations)for(let r of n.pathParams)if(Ne.includes(r.name))throw new h(`Operation "${n.specName??n.name}": path parameter "${r.name}" collides with the "${r.name}" request-argument slot; rename the parameter in the API description.`)}function pe(e){for(let t of e.schemas)if(!M(t.name))throw B("schema",t.name);for(let t of e.securitySchemes)if(!M(t.key))throw B("security scheme",t.key);for(let t of e.services)for(let n of t.operations)if(!M(n.name))throw B("operation",n.name)}function B(e,t){return new Error(`Internal error: ${e} name ${JSON.stringify(t)} is not a safe identifier after sanitization.`)}function ae(e){return R(e)}function L(e,t,n,r){let s=JSON.stringify(t),o=JSON.stringify(n),i=r.kind==="duplicate-operation-id"?`two operations share the operationId ${s}; the second is emitted as ${o} \u2014 give each operation a unique operationId to control its method name`:r.kind==="schema-collision"?`${e} ${s} collides with the schema of the same name, so it is emitted as ${o} \u2014 rename the operation or the schema in the description to control its name`:r.kind==="reserved"?`${e} ${s} is a name a generated client already declares, so it is emitted as ${o} \u2014 the reserved set spans every target language, so one schema keeps one name across the SDKs you generate`:`${e} ${s} is not a usable identifier, so it is emitted as ${o}`;$.warn(`generate-client: ${i}.
|
|
12
|
+
`)}function ce(e,t){return t.has(e)?{kind:"reserved"}:{kind:"unusable"}}function w(e,t){switch(e.kind){case"ref":e.name=t(e.name);break;case"omit":e.base=t(e.base);break;case"array":w(e.items,t);break;case"record":w(e.value,t);break;case"object":for(let n of e.properties)w(n.schema,t);break;case"union":for(let n of e.members)w(n,t);if(e.discriminator)for(let n of e.discriminator.mapping)n.schemaName=t(n.schemaName);break;case"intersection":for(let n of e.members)w(n,t);break}}function je(e,t){for(let n of e.pathParams)w(n.schema,t);for(let n of e.queryParams)w(n.schema,t);for(let n of e.headerParams)w(n.schema,t);for(let n of e.cookieParams)w(n.schema,t);e.requestBody&&w(e.requestBody.schema,t);for(let n of[...e.successResponses,...e.errorResponses])w(n.schema,t),n.itemSchema&&w(n.itemSchema,t)}var Me=["get","post","put","delete","patch","head","options"];function le(e,t){if(!t.startsWith("#/"))throw new h(`External $ref not supported: ${t}`);let n=t.slice(2).split("/").map(s=>s.replace(/~1/g,"/").replace(/~0/g,"~")),r=e;for(let s of n){if(!q(r)&&!Array.isArray(r))throw new h(`Cannot resolve $ref: ${t}`);r=r[s]}if(r===void 0)throw new h(`Cannot resolve $ref: ${t}`);return r}function v(e,t){return S(t)?le(e,t.$ref):t}function j(e){let t=e.lastIndexOf("/");return t>=0?e.slice(t+1):e}function Ae(e){let t=e,n={};return typeof t.minimum=="number"&&(n.minimum=t.minimum),typeof t.maximum=="number"&&(n.maximum=t.maximum),typeof t.exclusiveMinimum=="number"?n.exclusiveMinimum=t.exclusiveMinimum:t.exclusiveMinimum===!0&&typeof t.minimum=="number"&&(n.exclusiveMinimum=t.minimum,delete n.minimum),typeof t.exclusiveMaximum=="number"?n.exclusiveMaximum=t.exclusiveMaximum:t.exclusiveMaximum===!0&&typeof t.maximum=="number"&&(n.exclusiveMaximum=t.maximum,delete n.maximum),typeof t.minLength=="number"&&(n.minLength=t.minLength),typeof t.maxLength=="number"&&(n.maxLength=t.maxLength),typeof t.pattern=="string"&&(n.pattern=t.pattern),typeof t.minItems=="number"&&(n.minItems=t.minItems),typeof t.maxItems=="number"&&(n.maxItems=t.maxItems),t.uniqueItems===!0&&(n.uniqueItems=!0),typeof t.format=="string"&&(n.format=t.format),t.deprecated===!0&&(n.deprecated=!0),t.example!==void 0?n.example=t.example:Array.isArray(t.examples)&&t.examples.length>0&&(n.example=t.examples[0]),t.default!==void 0&&(n.default=t.default),Object.keys(n).length>0?n:void 0}function Ge(e,t){let n=e.discriminator;if(!n||typeof n.propertyName!="string")return;let r=[];if(n.mapping)for(let[s,o]of Object.entries(n.mapping))r.push({value:s,schemaName:j(o)});else for(let s of t)if(S(s)){let o=j(s.$ref);r.push({value:o,schemaName:o})}if(r.length!==0)return{propertyName:n.propertyName,mapping:r}}function b(e,t){return t?{...e,metadata:t}:e}function z(e,t){return e?t?{...e,...t}:e:t}function Ee(e){return e?e.url.replace(/\{([^{}]+)\}/g,(t,n)=>e.variables?.[n]?.default??t):""}function me(e){let t=e.info?.title??"Api",n=e.info?.version??"0.0.0",r=e.info?.description,s=Ee(e.servers?.[0]),o=(e.servers??[]).map(d=>({url:d.url,description:d.description,variables:Object.entries(d.variables??{}).map(([f,m])=>({name:f,default:m.default,description:m.description}))})),i=Be(e),a=Ue(e),c=Le(e,a),u={title:t,version:n,description:r,serverUrl:s,servers:o,services:c,schemas:i,securitySchemes:a};return ue(u),Ie(c,i),pe(u),fe(u),u}function Ie(e,t){let n=new Map(t.map(r=>[r.name,r.schema]));for(let r of e)for(let s of r.operations)s.requestBody&&(s.requestBody.schema=Re(s.requestBody.schema,n))}function Te(e){let t=e.filter(n=>n.kind!=="unknown");return t.length>0?t:[{kind:"unknown"}]}function Re(e,t){if(e.kind==="ref"){let n=De(e,t,new Set);return n.length>0?{kind:"omit",base:e.name,keys:n}:e}if(e.kind==="object"){let n=e.properties.filter(r=>!r.readOnly);return n.length===e.properties.length?e:{...e,properties:n}}return e}function De(e,t,n){let r=[],s=o=>{if(o.kind==="ref"){if(n.has(o.name))return;n.add(o.name);let i=t.get(o.name);i&&s(i)}else if(o.kind==="object")for(let i of o.properties)i.readOnly&&!r.includes(i.name)&&r.push(i.name);else if(o.kind==="intersection")for(let i of o.members)s(i)};return s(e),r}function Ue(e){let t=e.components?.securitySchemes;if(!t)return[];let n=[];for(let[r,s]of Object.entries(t)){let o=v(e,s),i=o.type;i==="oauth2"||i==="openIdConnect"?n.push({kind:"bearer",key:r}):i==="http"&&(o.scheme??"").toLowerCase()==="bearer"?n.push({kind:"bearer",key:r}):i==="http"&&(o.scheme??"").toLowerCase()==="basic"?n.push({kind:"basic",key:r}):i==="apiKey"&&o.in==="header"&&typeof o.name=="string"?n.push({kind:"apiKeyHeader",key:r,headerName:o.name}):i==="apiKey"&&o.in==="query"&&typeof o.name=="string"?n.push({kind:"apiKeyQuery",key:r,paramName:o.name}):i==="apiKey"&&o.in==="cookie"&&typeof o.name=="string"&&($.warn(`generate-client: security scheme "${r}" sends its credential in the Cookie header, which browsers ignore \u2014 cookie auth works only in server-side clients.
|
|
13
|
+
`),n.push({kind:"apiKeyCookie",key:r,cookieName:o.name}))}return n}function Ce(e,t,n){let r=e.security??t.security;if(!r)return[];let s=[];for(let o of r){let i=Object.keys(o);i.length!==0&&i.every(a=>n.has(a))&&s.push([...new Set(i)])}return s}function Be(e){let t=e.components?.schemas;return t?Object.entries(t).map(([n,r])=>{if(S(r)){let o=le(e,r.$ref);return{name:n,schema:x(o,`components.schemas.${n}`,e),description:o.description}}let s=x(r,`components.schemas.${n}`,e);return{name:n,schema:s,description:r.description}}):[]}function Le(e,t){let n=new Set(t.map(i=>i.key)),r=[],s=new Set;for(let[i,a]of Object.entries(e.paths??{})){if(!a)continue;let c=v(e,a),u=(c.parameters??[]).map(d=>he(v(e,d),`paths.${i}.parameters`,e));for(let d of Me){let f=c[d];f&&(r.push({method:d,path:i,operation:f,pathLevelParams:u}),f.operationId&&s.add(f.operationId))}}return[{name:"Default",operations:r.map(i=>{let a=i.operation.operationId??_e(ze(i.method,i.path),s);return Xe(i.method,i.path,i.operation,a,i.pathLevelParams,e,n)})}]}function ze(e,t){let n=t.split("/").filter(Boolean).map(r=>Ke(r.replace(/[{}]/g,"")));return`${e}${n.join("")}`}function Ke(e){return e.split(/[^A-Za-z0-9]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join("")}function _e(e,t){let n=e,r=2;for(;t.has(n);)n=`${e}${r++}`;return t.add(n),n}function Xe(e,t,n,r,s,o,i){let a=(n.parameters??[]).map(y=>he(v(o,y),`paths.${t}.${e}.parameters`,o)),c=new Set,u=[];for(let y of a)c.add(`${y.in}:${y.name}`),u.push(y);for(let y of s)c.has(`${y.in}:${y.name}`)||u.push(y);let d=u.filter(y=>y.in==="path"),f=u.filter(y=>y.in==="query"),m=u.filter(y=>y.in==="header"),l=u.filter(y=>y.in==="cookie"),p=n.requestBody?Fe(v(o,n.requestBody),`${e} ${t}`,o):void 0,{successResponses:g,successResponseHeaders:k}=He(n,t,o),P=Ve(n,t,o),N=Ce(n,o,i),X=n["x-redoclyPagination"];return{name:r,method:e,path:t,summary:n.summary,description:n.description,pathParams:d,queryParams:f,headerParams:m,cookieParams:l,requestBody:p,successResponses:g,...k===void 0?{}:{successResponseHeaders:k},errorResponses:P,security:N,tags:Array.isArray(n.tags)?n.tags.filter(y=>typeof y=="string"):[],...X!==void 0?{paginationExtension:X}:{}}}function he(e,t,n){if(!e.in)throw new h(`Parameter ${e.name} at ${t} is missing "in"`);if(!["path","query","header","cookie"].includes(e.in))throw new h(`Unsupported parameter location "${e.in}" for ${e.name} at ${t}`);let r=O(e.schema,`${t}.${e.name}`,n);e.deprecated===!0&&(r={...r,metadata:z(r.metadata,{deprecated:!0})});let s={name:e.name,in:e.in,schema:r,required:!!e.required,description:e.description};if(s.in==="query"){let o=e;(o.style==="form"||o.style==="spaceDelimited"||o.style==="pipeDelimited"||o.style==="deepObject")&&(s.style=o.style),typeof o.explode=="boolean"&&(s.explode=o.explode),typeof o.allowReserved=="boolean"&&(s.allowReserved=o.allowReserved)}return s}function Fe(e,t,n){let r=e.content??{},s=r["application/json"]??r["application/merge-patch+json"]??r["application/x-www-form-urlencoded"]??r["multipart/form-data"]??Object.values(r)[0];if(!s)return;let o=Object.keys(r).find(a=>r[a]===s),i=O(s.schema,`${t}.requestBody`,n);return{contentType:o,schema:i,required:!!e.required,description:e.description}}function He(e,t,n){let r=e.responses??{},s=Object.keys(r).filter(m=>/^2\d\d$/.test(m));s.length===0&&(r["2XX"]?s.push("2XX"):r.default&&s.push("default"));let o=s[0];if(!o)return{successResponses:[]};let i=r[o];if(!i)return{successResponses:[]};let a=v(n,i),c=Je(a.headers,`paths.${t}.response.${o}`,n),u=a.content;if(!u)return{successResponses:[],...c===void 0?{}:{successResponseHeaders:c}};let d=o==="default"||o==="2XX"?o:Number(o),f=[];for(let[m,l]of Object.entries(u)){let p=O(l.schema,`paths.${t}.response.${o}.${m}`,n),g=l.itemSchema,k=g!==void 0?O(g,`paths.${t}.response.${o}.${m}.itemSchema`,n):void 0;f.push({contentType:m,schema:p,status:d,...k===void 0?{}:{itemSchema:k}})}return{successResponses:f,...c===void 0?{}:{successResponseHeaders:c}}}function Je(e,t,n){if(!e)return;let r=[];for(let[s,o]of Object.entries(e)){let i=v(n,o),a={name:s.toLowerCase(),schema:O(i.schema===void 0?void 0:v(n,i.schema),`${t}.headers.${s}`,n)};i.required===!0&&(a.required=!0),r.push(a)}return r.length>0?r:void 0}function Ve(e,t,n){let r=e.responses??{},s=Object.keys(r).filter(a=>/^([45]\d\d|4XX|5XX)$/.test(a));Object.keys(r).some(a=>/^(2\d\d|2XX)$/.test(a))&&r.default&&s.push("default");let i=[];for(let a of s){let c=r[a];if(!c)continue;let d=v(n,c).content;if(!d)continue;let f=a==="default"||a==="4XX"||a==="5XX"?a:Number(a);for(let[m,l]of Object.entries(d)){let p=O(l.schema,`paths.${t}.response.${a}.${m}`,n);i.push({contentType:m,schema:p,status:f})}}return i}function O(e,t,n){return e===void 0||typeof e=="boolean"?{kind:"unknown"}:S(e)?{kind:"ref",name:j(e.$ref)}:x(e,t,n)}function x(e,t,n){let r=Ae(e),s=e.oneOf??e.anyOf;if(s){let a=s.map((d,f)=>S(d)?{kind:"ref",name:j(d.$ref)}:x(d,`${t}.[${f}]`,n)),c=Te(a);if(c.length===1&&c.length<a.length){let d=c[0];return{...d,description:d.description??e.description,metadata:z(r,d.metadata)}}let u=Ge(e,s);return b({kind:"union",members:c,discriminator:u,description:e.description},r)}if(e.allOf){let a=e.allOf.map((u,d)=>S(u)?{kind:"ref",name:j(u.$ref)}:x(u,`${t}.allOf[${d}]`,n)),c=de(e,t,n);if(c.length>0&&a.unshift({kind:"object",properties:c}),a.length===1){let u=a[0];return{...u,description:u.description??e.description,metadata:z(r,u.metadata)}}return b({kind:"intersection",members:a,description:e.description},r)}let o=e.type;if(Array.isArray(o)){let a=o.filter(d=>d!=="null"),c=o.includes("null"),u=a.map(d=>{let f={...e,type:d};if(Array.isArray(f.enum)){let m=f.enum.filter(l=>l!==null);f.enum=m.length>0?m:void 0}return x(f,t,n)});return c&&u.push({kind:"null"}),u.length===1?u[0]:b({kind:"union",members:u,description:e.description},r)}if(e.nullable)return{kind:"union",members:[x({...e,nullable:void 0},t,n),{kind:"null"}],description:e.description};if(e.const!==void 0){let a=e.const;if(typeof a!="string"&&typeof a!="number"&&typeof a!="boolean")throw new h(`Unsupported const value at ${t}: ${JSON.stringify(a)}`);return b({kind:"literal",value:a,description:e.description},r)}if(e.enum){let a=e.enum,c=a.filter(m=>m!==null),u=c.length!==a.length;if(c.length===0)return b({kind:"null",description:e.description},r);let d=We(c,t),f=d==="boolean"?{kind:"scalar",scalar:"boolean",description:e.description}:{kind:"enum",values:c,scalar:d,description:e.description};return b(u?{kind:"union",members:[f,{kind:"null"}],description:e.description}:f,r)}let i=o;if(i==="null")return b({kind:"null",description:e.description},r);if(i==="array"){let a=e.items,c=O(a,`${t}.items`,n);return b({kind:"array",items:c,description:e.description},r)}if(i==="object"||e.properties||e.additionalProperties){let a=de(e,t,n),c=e.additionalProperties;if(a.length===0&&c!==!1){let u=O(c,`${t}.additionalProperties`,n);return b({kind:"record",value:u,description:e.description},r)}return b({kind:"object",properties:a,description:e.description},r)}return b(i==="string"||i==="number"||i==="integer"||i==="boolean"?{kind:"scalar",scalar:i,description:e.description}:{kind:"unknown",description:e.description},r)}function We(e,t){let n=!1,r=!1,s=!1;for(let o of e)if(typeof o=="string")n=!0;else if(typeof o=="number")r=!0;else if(typeof o=="boolean")s=!0;else throw new h(`Unsupported enum value type at ${t}: ${JSON.stringify(o)}`);return n&&!r&&!s?"string":r&&!n&&!s?"number":s&&!n&&!r?"boolean":"string"}function Qe(e){return!(e.openapi??"").startsWith("3.0")}function de(e,t,n){let r=e.properties??{},s=new Set(e.required??[]),o=Qe(n);return Object.entries(r).map(([i,a])=>{let c=a.readOnly===!0;c&&S(a)&&!o&&$.warn(`generate-client: "${i}" declares readOnly beside a $ref, which OpenAPI ${n.openapi} ignores \u2014 the property stays in request bodies. Inline the schema, wrap the $ref in allOf, or move the description to OpenAPI 3.1.
|
|
14
|
+
`);let u=c&&(o||!S(a));return{name:i,schema:O(a,`${t}.${i}`,n),required:s.has(i),description:a.description,...u?{readOnly:!0}:{}}})}function ye(e){let t=K(e),n={...t};delete n.swagger,delete n.host,delete n.basePath,delete n.schemes,delete n.definitions,delete n.securityDefinitions,delete n.consumes,delete n.produces,delete n.parameters,delete n.responses,n.openapi="3.0.3";let r=Ye(t);return r&&(n.servers=r),n.components=Ze(t),n.paths=rt(t.paths??{},t.consumes??void 0,t.produces??void 0),n}function Ye(e){let t=e.host,n=e.basePath??"",r=(e.schemes??["https"])[0]??"https";if(t)return[{url:`${r}://${t}${n}`}]}function Ze(e){let t={};e.definitions&&(t.schemas=e.definitions),e.parameters&&(t.parameters=Object.fromEntries(Object.entries(e.parameters).map(([r,s])=>[r,_(s)]))),e.responses&&(t.responses=we(e.responses,void 0));let n=e.securityDefinitions;if(n){let r={};for(let[s,o]of Object.entries(n))r[s]=et(o);t.securitySchemes=r}return t}function et(e){switch(e.type){case"basic":return{type:"http",scheme:"basic"};case"apiKey":return{type:"apiKey",name:e.name,in:e.in};case"oauth2":{let t=e.flow==="accessCode"?"authorizationCode":e.flow==="application"?"clientCredentials":e.flow,n={scopes:e.scopes??{}};return e.authorizationUrl&&(n.authorizationUrl=e.authorizationUrl),e.tokenUrl&&(n.tokenUrl=e.tokenUrl),{type:"oauth2",flows:{[t]:n}}}default:return e}}function K(e){if(Array.isArray(e))return e.map(K);if(q(e)){let t={};for(let[n,r]of Object.entries(e))n==="$ref"&&typeof r=="string"?t.$ref=r.replace("#/definitions/","#/components/schemas/").replace("#/parameters/","#/components/parameters/").replace("#/responses/","#/components/responses/"):t[n]=K(r);return t}return e}var tt="application/json",nt="application/json",ge=new Set(["name","in","required","description","deprecated","allowEmptyValue","collectionFormat"]);function rt(e,t,n){let r={};for(let[s,o]of Object.entries(e)){let i=o,a={};for(let[c,u]of Object.entries(i)){if(c==="parameters"&&Array.isArray(u)){a.parameters=u.map(_);continue}if(!ot(c)){a[c]=u;continue}a[c]=st(u,t,n)}r[s]=a}return r}function ot(e){return["get","put","post","delete","options","head","patch"].includes(e.toLowerCase())}function st(e,t,n){let r=e.consumes??t,s=e.produces??n,o=e.parameters??[],i=o.find(f=>f.in==="body"),a=o.filter(f=>f.in==="formData"),c=o.filter(f=>f.in!=="body"&&f.in!=="formData").map(_),u={...e,parameters:c};delete u.consumes,delete u.produces;let d=r?.[0]??tt;if(i)u.requestBody={required:!!i.required,content:{[d]:{schema:i.schema}}};else if(a.length>0){let f={},m=[];for(let g of a)f[g.name]=it(g),g.required&&m.push(g.name);let l={type:"object",properties:f};m.length>0&&(l.required=m);let p=r?.find(g=>g==="multipart/form-data")??r?.[0]??"application/x-www-form-urlencoded";u.requestBody={required:m.length>0,content:{[p]:{schema:l}}}}return e.responses&&(u.responses=we(e.responses,s)),u}function _(e){if(e.$ref!==void 0||e.in==="body"||e.in==="formData")return e;let t={},n={};for(let[r,s]of Object.entries(e))ge.has(r)?t[r]=s:n[r]=s;if(t.schema=n,delete t.collectionFormat,e.in==="query"&&n.type==="array"){let r=e.collectionFormat??"csv";r!=="multi"&&(t.style=r==="ssv"?"spaceDelimited":r==="pipes"?"pipeDelimited":"form",t.explode=!1)}return t}function it(e){let t={};for(let[n,r]of Object.entries(e))ge.has(n)||(t[n]=r);return t}function we(e,t){let n=t?.[0]??nt,r={};for(let[s,o]of Object.entries(e)){let i=o;if(i.schema===void 0){r[s]=i;continue}let{schema:a,...c}=i;r[s]={...c,content:{[n]:{schema:a}}}}return r}async function be(e,t){let n=t??await I({}),r=await W({ref:e,config:n}),s=await I({rules:{struct:"error"}}),o=await Q({externalRefResolver:new V,document:r.bundle,config:s}),i=[...r.problems,...o].filter(c=>c.severity==="error");if(i.length>0){let c=i.map(u=>`- ${u.message} (at ${u.location?.[0]?.pointer??e})`).join(`
|
|
15
|
+
`);throw new Error(`The API description has ${i.length} error(s):
|
|
16
|
+
${c}`)}let a=r.bundle.parsed;return{document:a,version:J(a)}}function pt(e,t){let n=[],r=new Set,s=E($e(t.outputPath));for(let o of t.generators){let i=t.registry.get(o),a;try{a=i.run({model:e,outputPath:t.outputPath,outputMode:t.outputMode,emit:t.emit,selected:t.generators,options:t.generatorOptions?.get(o)??{}})}catch(c){let u=c instanceof Error?c.message:String(c);throw new Error(`Generator "${o}" failed: ${u}`)}if(!Array.isArray(a)||a.some(c=>typeof c?.path!="string"||c.path===""||typeof c.content!="string"))throw new Error(`Generator "${o}" failed: run() must return an array of { path, content } files.`);for(let c of a){let u=E(s,c.path);if(u!==s&&!u.startsWith(s+ft))throw new Error(`Generator "${o}" failed: file path escapes the output directory: ${c.path}`);if(r.has(u))throw new Error(`Generator conflict: ${c.path} already emitted by an earlier generator`);r.add(u),n.push({path:u,content:c.content})}}return n}function dt(e,t,n,r){let s=[];for(let o of Z(e.services)){let i=n.map(a=>r.get(a)?.sample?.(o,{model:e,emit:t})).filter(a=>a!==void 0);i.length>0&&s.push({target:`$.paths['${o.path.replaceAll("'","''")}'].${o.method}`,update:{"x-codeSamples":i}})}if(s.length!==0)return H({overlay:"1.0.0",info:{title:`Code samples for ${e.title}`,version:e.version},actions:s})}async function Zt(e){if(e.output.split(/[\\/]/).some(p=>p==="undefined"||p==="null"))throw new Error(`output path "${e.output}" contains a literal "undefined" or "null" segment \u2014 this looks like an interpolation bug in the caller`);if(e.setup&&/^[a-z][a-z0-9+.-]+:/i.test(e.setup))throw new h(`setup must be a local file path \u2014 remote setup modules are not supported (got: ${e.setup})`);let t=E(e.output),{document:n,version:r}=await be(e.api,e.config),s=r==="oas2"?ye(n):n,o=me(s),i;if(e.setup){let{bakeSetup:p}=await import("./L5QMCITI.js"),g=E(e.configDir??process.cwd(),e.setup);i=p(await ct(g,"utf-8"))}let a=e.generators?.length?e.generators:["sdk"],{selected:c,registry:u}=await se(a,{customGenerators:e.customGenerators,configDir:e.configDir}),d={serverUrl:e.serverUrl,argsStyle:e.argsStyle,errorMode:e.errorMode,dateType:e.dateType,mockData:e.mockData,mockSeed:e.mockSeed,queryKeyPrefix:e.queryKeyPrefix,setup:i,runtime:e.runtime,importExt:e.importExt,binName:e.binName,goPackage:e.goPackage,pagination:e.pagination};ne(c,d,u,e.outputMode);let f=re(c,u,e.options),m=pt(o,{outputPath:t,outputMode:e.outputMode??"single",emit:d,generators:c,generatorOptions:f,registry:u});if(e.codeSamples===!0){let p=dt(o,d,c,u);p!==void 0&&m.push({path:t.replace(/\.[^.]+$/,".code-samples.yaml"),content:p})}let l=[];for(let p of m)await at($e(p.path),{recursive:!0}),await ut(p.path,p.content,"utf-8"),l.push({path:p.path,bytes:Buffer.byteLength(p.content,"utf-8")});return{outputPath:t,bytes:l.reduce((p,g)=>p+g.bytes,0),files:l}}export{G as a,ne as b,pt as c,Zt as d};
|