@redocly/cli 2.66.0 → 2.67.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.
Files changed (128) hide show
  1. package/lib/chunks/{Q7Y4MUA7.js → 2AJDP47K.js} +1 -1
  2. package/lib/chunks/{7NPQH3V7.js → 3HSHTOK2.js} +1 -1
  3. package/lib/chunks/{F7K3O6UM.js → 3SPC2VZI.js} +1 -1
  4. package/lib/chunks/{K4IZRPJV.js → 4JI4GT6B.js} +35 -35
  5. package/lib/chunks/{CK2FG2DD.js → 6BJRKKAU.js} +1 -1
  6. package/lib/chunks/{MOQAQ5M7.js → 7WOMNRDU.js} +1 -1
  7. package/lib/chunks/{3XQNPUP7.js → 7YY5ECWE.js} +1 -1
  8. package/lib/chunks/{FTPZZ6BG.js → A3NSKGWO.js} +1 -1
  9. package/lib/chunks/{4ABWBH3W.js → AENSGZDZ.js} +1 -1
  10. package/lib/chunks/{PBSA7HOV.js → AL7PXK7F.js} +1 -1
  11. package/lib/chunks/{B4Z2Z4FS.js → BUQQJCMF.js} +1 -1
  12. package/lib/chunks/{TLDUEX6A.js → BYO4KBZG.js} +1 -1
  13. package/lib/chunks/{4WRQYZGD.js → CCZY5XJV.js} +2 -2
  14. package/lib/chunks/{R3ZIINV3.js → D4U2LEEI.js} +1 -1
  15. package/lib/chunks/{GLUPJCQU.js → D5A4WCOD.js} +1 -1
  16. package/lib/chunks/{LJTGHAPA.js → DQZXJA6Q.js} +1 -1
  17. package/lib/chunks/{AVUOPIXP.js → DTPYQUHR.js} +13 -13
  18. package/lib/chunks/{4Y4YV5TG.js → EDKRUI6D.js} +1 -1
  19. package/lib/chunks/{EOXNJQ4F.js → EOCKJNES.js} +1 -1
  20. package/lib/chunks/{LSFJCPZH.js → EPVPJTXN.js} +1 -1
  21. package/lib/chunks/{TOBKCE6P.js → F77DQGVI.js} +1 -1
  22. package/lib/chunks/{EP53BWBM.js → F7DLPPNU.js} +1 -1
  23. package/lib/chunks/{ROLEKKAB.js → G67BALR7.js} +1 -1
  24. package/lib/chunks/{RALPAYEE.js → GP5VOB7R.js} +1 -1
  25. package/lib/chunks/{YVEWM3DE.js → GU34RIUR.js} +1 -1
  26. package/lib/chunks/{L3SH4LDY.js → H3CWVIT3.js} +1 -1
  27. package/lib/chunks/{ON2YZD5C.js → HET452FN.js} +1 -1
  28. package/lib/chunks/{HXPCC4OG.js → HG5B2AKP.js} +1 -1
  29. package/lib/chunks/{NUBOB7QM.js → HPYQF7FO.js} +2 -2
  30. package/lib/chunks/{KOEA2NZG.js → HQTUYG5X.js} +2 -2
  31. package/lib/chunks/{WLLP4IZS.js → HU6QTMHN.js} +1 -1
  32. package/lib/chunks/{IAAYM25M.js → IHFKHD4E.js} +1 -1
  33. package/lib/chunks/{BY6DKJ2R.js → IRF3OXDB.js} +1 -1
  34. package/lib/chunks/{OYDBXGWA.js → IZVG6IUS.js} +1 -1
  35. package/lib/chunks/{U5IK2ZXU.js → J32G7NQF.js} +4 -4
  36. package/lib/chunks/{OSFU2PWJ.js → JH6AK2RM.js} +1 -1
  37. package/lib/chunks/{HKVSCF3J.js → JMYCFXFO.js} +1 -1
  38. package/lib/chunks/{6KF4UNVM.js → KA43H34P.js} +1 -1
  39. package/lib/chunks/{W2AAAE7A.js → KHQEQ7SW.js} +1 -1
  40. package/lib/chunks/{EDTY75R2.js → KIFTQ6KG.js} +1 -1
  41. package/lib/chunks/{JGSM4NRA.js → KMGFC2JR.js} +1 -1
  42. package/lib/chunks/{5EHUKG3I.js → LEPQDSTM.js} +1 -1
  43. package/lib/chunks/{UYF7BOSD.js → LZUYKJND.js} +1 -1
  44. package/lib/chunks/{PGX27JIK.js → M5FZMXND.js} +1 -1
  45. package/lib/chunks/{NHOPECWM.js → MLLRCWW6.js} +1 -1
  46. package/lib/chunks/{FOXOWXSK.js → OKWRNBEY.js} +1 -1
  47. package/lib/chunks/{4WZNKPF4.js → OLVAP7AA.js} +1 -1
  48. package/lib/chunks/{ILGMLL46.js → OUNJECS6.js} +1 -1
  49. package/lib/chunks/{6JHVGOS4.js → PNADRNVV.js} +1 -1
  50. package/lib/chunks/{NFCO7FU3.js → QPNNEO3Y.js} +1 -1
  51. package/lib/chunks/{FP63LRP5.js → QT45SNBU.js} +1 -1
  52. package/lib/chunks/{46YO7ZAG.js → RIJ5NQKJ.js} +1 -1
  53. package/lib/chunks/{5DD7WY23.js → RV4QSDBS.js} +1 -1
  54. package/lib/chunks/{IH6TBN5D.js → SR776DY3.js} +1 -1
  55. package/lib/chunks/TO7JCTX3.js +20 -0
  56. package/lib/chunks/{DRSH6QBU.js → UNWO4KGQ.js} +1 -1
  57. package/lib/chunks/{YY44N7JX.js → VEVZJC25.js} +1 -1
  58. package/lib/chunks/{PVBX7API.js → VJQCED3T.js} +1 -1
  59. package/lib/chunks/{FHDBQIEB.js → WFKHK77N.js} +1 -1
  60. package/lib/chunks/{36DQZK3T.js → WH5ELPJC.js} +1 -1
  61. package/lib/chunks/{QAEXHBKV.js → WHI5PM5X.js} +1 -1
  62. package/lib/chunks/{YCJL4ZHF.js → WJLUIDSE.js} +1 -1
  63. package/lib/chunks/{M3VAMERP.js → XZIAEGVZ.js} +1 -1
  64. package/lib/chunks/{JZPKVDJA.js → XZNJU67S.js} +1 -1
  65. package/lib/chunks/{E3YDJXL6.js → Y5OFK6NL.js} +1 -1
  66. package/lib/chunks/{MOGSSUQO.js → YIXIZB5W.js} +1 -1
  67. package/lib/chunks/{OMDMN4SS.js → YQYR6TIT.js} +1 -1
  68. package/lib/chunks/YUHXZXUL.js +34 -0
  69. package/lib/chunks/{VL2MPFWQ.js → ZLAHBPRQ.js} +1 -1
  70. package/lib/chunks/{USAJ5FBD.js → ZMV5LF7Y.js} +1 -1
  71. package/lib/eject-assets/generators/cli/docs.ts +1 -1
  72. package/lib/eject-assets/generators/cli/engine-source.ts +1 -1
  73. package/lib/eject-assets/generators/cli/index.ts +2 -2
  74. package/lib/eject-assets/generators/cli/render.ts +1 -1
  75. package/lib/eject-assets/generators/go/client.ts +1 -1
  76. package/lib/eject-assets/generators/go/descriptor.ts +1 -1
  77. package/lib/eject-assets/generators/go/index.ts +2 -2
  78. package/lib/eject-assets/generators/go/models.ts +1 -1
  79. package/lib/eject-assets/generators/go/naming.ts +1 -1
  80. package/lib/eject-assets/generators/go/operations.ts +1 -1
  81. package/lib/eject-assets/generators/go/pagination.ts +1 -1
  82. package/lib/eject-assets/generators/go/types.ts +1 -1
  83. package/lib/eject-assets/generators/mock/faker.ts +1 -1
  84. package/lib/eject-assets/generators/mock/index.ts +2 -2
  85. package/lib/eject-assets/generators/mock/render.ts +1 -1
  86. package/lib/eject-assets/generators/mock/sample.ts +1 -1
  87. package/lib/eject-assets/generators/mock/values.ts +1 -1
  88. package/lib/eject-assets/generators/php/client.ts +1 -1
  89. package/lib/eject-assets/generators/php/descriptor.ts +1 -1
  90. package/lib/eject-assets/generators/php/index.ts +2 -2
  91. package/lib/eject-assets/generators/php/models.ts +4 -4
  92. package/lib/eject-assets/generators/php/naming.ts +1 -1
  93. package/lib/eject-assets/generators/php/operations.ts +1 -1
  94. package/lib/eject-assets/generators/php/pagination.ts +1 -1
  95. package/lib/eject-assets/generators/php/types.ts +1 -1
  96. package/lib/eject-assets/generators/python/client.ts +1 -1
  97. package/lib/eject-assets/generators/python/descriptor.ts +1 -1
  98. package/lib/eject-assets/generators/python/index.ts +2 -2
  99. package/lib/eject-assets/generators/python/models.ts +44 -19
  100. package/lib/eject-assets/generators/python/naming.ts +1 -1
  101. package/lib/eject-assets/generators/python/operations.ts +1 -1
  102. package/lib/eject-assets/generators/python/pagination.ts +1 -1
  103. package/lib/eject-assets/generators/python/types.ts +1 -1
  104. package/lib/eject-assets/generators/swr/index.ts +2 -2
  105. package/lib/eject-assets/generators/swr/render.ts +1 -1
  106. package/lib/eject-assets/generators/tanstack-query/index.ts +2 -2
  107. package/lib/eject-assets/generators/tanstack-query/render.ts +1 -1
  108. package/lib/eject-assets/generators/transformers/index.ts +2 -2
  109. package/lib/eject-assets/generators/transformers/render.ts +1 -1
  110. package/lib/eject-assets/generators/typescript/banner.ts +1 -1
  111. package/lib/eject-assets/generators/typescript/client.ts +1 -1
  112. package/lib/eject-assets/generators/typescript/descriptor.ts +1 -1
  113. package/lib/eject-assets/generators/typescript/index.ts +2 -2
  114. package/lib/eject-assets/generators/typescript/inline-runtime.ts +1 -1
  115. package/lib/eject-assets/generators/typescript/operation-signature.ts +1 -1
  116. package/lib/eject-assets/generators/typescript/operation-types.ts +1 -1
  117. package/lib/eject-assets/generators/typescript/operations.ts +1 -1
  118. package/lib/eject-assets/generators/typescript/response-headers.ts +1 -1
  119. package/lib/eject-assets/generators/typescript/type-guards.ts +1 -1
  120. package/lib/eject-assets/generators/typescript/types.ts +1 -1
  121. package/lib/eject-assets/generators/zod/index.ts +2 -2
  122. package/lib/eject-assets/generators/zod/schemas.ts +1 -1
  123. package/lib/eject-assets/skills/php-generator/SKILL.md +3 -1
  124. package/lib/eject-assets/skills/python-generator/SKILL.md +2 -1
  125. package/lib/index.js +5 -5
  126. package/package.json +1 -1
  127. package/lib/chunks/FNQMGCDF.js +0 -20
  128. package/lib/chunks/U7CHKSVN.js +0 -34
@@ -1,20 +0,0 @@
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{c as U}from"./HAOBCQWB.js";import{b as R,c as F,d as G,e as L,f as V,g as ae,h as z,i as ie,j as ce}from"./Q7Y4MUA7.js";import{a as ne,c as T,d as N,e as D,g as Y,h as B,i as te,j as se,k as oe,l as K,n as re}from"./UW4UC7ZI.js";var M=T.python,j=class extends ne{constructor(){super(" ")}typeName(n){return N(n,{style:"pascal",reserved:M})}memberName(n){let t=N(n,{style:"snake",reserved:M});return{identifier:t,renamed:t!==n}}identifier(n){return N(n,{style:"snake",reserved:M})}identifiers(n,t){return D(n,{style:"snake",reserved:M,taken:t})}constName(n){return N(n,{style:"screaming",reserved:M})}string(n){let t='"';for(let s of n){let r=s.codePointAt(0);s==="\\"?t+="\\\\":s==='"'?t+='\\"':s===`
8
- `?t+="\\n":s==="\r"?t+="\\r":s===" "?t+="\\t":r<32||r===127?t+=`\\x${r.toString(16).padStart(2,"0")}`:r>=55296&&r<=57343?t+=`\\u${r.toString(16).padStart(4,"0")}`:t+=s}return t+'"'}literal(n){return n==null?"None":n===!0?"True":n===!1?"False":typeof n=="number"?String(n):typeof n=="string"?this.string(n):Array.isArray(n)?`[${n.map(s=>this.literal(s)).join(", ")}]`:`{${Object.entries(n).map(([s,r])=>`${this.string(s)}: ${this.literal(r)}`).join(", ")}}`}comment(n){for(let t of K(n))this.line(t===""?"#":`# ${t}`);return this}doc(n){let t=K(n);if(t.length===0)return this;if(t.length===1)return this.line(`"""${t[0]}"""`);this.line(`"""${t[0]}`);for(let s of t.slice(1))this.line(s);return this.line('"""')}};var x=T.python,f=new j;function O(e){return f.typeName(e)}function q(e){let{identifier:n,renamed:t}=f.memberName(e);return{python:n,renamed:t}}function I(e){let n=e.services.flatMap(s=>s.operations),t=D(n.map(s=>s.name),{style:"snake",reserved:x});return n.map((s,r)=>({op:s,ident:t[r]}))}var W=["self","body","headers","timeout","retry","idempotency_key"];function le(e){return f.literal(e)}function de(e){if(e!==void 0)return{style:e.style,...e.param!==void 0?{param:e.param}:{},...e.nextCursor!==void 0?{next_cursor:e.nextCursor}:{},...e.hasMore!==void 0?{has_more:e.hasMore}:{},...e.nextLink!==void 0?{next_link:e.nextLink}:{},...e.limitParam!==void 0?{limit_param:e.limitParam}:{},...e.items!==void 0?{items:e.items}:{}}}function pe(e,n){let t=new Set;return`[${(e.successResponseHeaders??[]).map(r=>{let a=N(r.name,{style:"snake",reserved:x}),c=a,i=2;for(;t.has(c);)c=`${a}_${i++}`;t.add(c);let m=re(r.schema,n);return`(${f.string(r.name)}, ${f.string(c)}, ${f.string(m)})`}).join(", ")}]`}function h(e,n="string"){if(te(e))return`Optional[${h(se(e),n)}]`;switch(e.kind){case"scalar":if(n==="Date"&&e.scalar==="string"){if(e.metadata?.format==="date-time")return"datetime";if(e.metadata?.format==="date")return"date"}return{string:"str",integer:"int",number:"float",boolean:"bool"}[e.scalar];case"array":return`List[${h(e.items,n)}]`;case"record":return`Dict[str, ${h(e.value,n)}]`;case"ref":return O(e.name);case"literal":return`Literal[${f.literal(e.value)}]`;case"enum":return{string:"str",integer:"int",number:"float",boolean:"bool"}[e.scalar];case"union":return`Union[${e.members.map(t=>h(t,n)).join(", ")}]`;case"null":return"None";case"omit":return O(e.base);case"object":case"intersection":case"unknown":return"Any"}}function J(e,n,t,s,r,a,c,i=!1){let m=D([...n.pathParams,...n.queryParams].map(S=>S.name),{style:"snake",reserved:x,taken:W}),l=n.pathParams.map((S,v)=>({param:S,python:m[v]})),o=n.queryParams.map((S,v)=>({param:S,python:m[n.pathParams.length+v]})),d=l.map(({param:S,python:v})=>`${v}: ${h(S.schema,a)}`),u=L(n)||n.requestBody!==void 0&&V(n.requestBody.contentType),y=n.requestBody?[`body: ${u?"Any":h(n.requestBody.schema,a)}`]:[],b=[...o.map(({param:S,python:v})=>{let A=h(S.schema,a),E=A.startsWith("Optional[")?A:`Optional[${A}]`;return`${v}: ${E} = None`}),"headers: Optional[Dict[str, str]] = None","timeout: Optional[float] = None","retry: Optional[Dict[str, Any]] = None","idempotency_key: Any = None"],$=R(n),k=F(n),P=i?`Envelope[${$===void 0?"None":h($,a)}]`:k!==void 0?`${r?"AsyncIterator":"Iterator"}[ServerSentEvent]`:s==="result"?"Result":$===void 0?"None":h($,a),p=r&&k===void 0?"async def":"def",_=r?"await ":"",g=r?"send_async":"send",w=["self",...d,...y,"*",...b].join(", "),H=i?`${t}_with_headers`:t;e.block(`${p} ${H}(${w}) -> ${P}:`,()=>{e.doc(i?`Like ${t}(), returning an Envelope with the declared response headers.`:n.summary),e.line(`op = _OPERATIONS["${t}"]`),e.line('auth_headers, auth_query = resolve_auth(op.get("security") or [], self._auth)'),e.line("params: Dict[str, Any] = dict(auth_query)");for(let{param:E,python:C}of o)e.block(`if ${C} is not None:`,()=>{e.line(`params[${f.string(E.name)}] = encode(${C})`)});let S=l.map(({param:E,python:C})=>`${f.string(E.name)}: ${C}`).join(", ");if(e.line(`url = build_url(self._server_url, op["path"], {${S}})`),k!==void 0){let E=k.schema!==void 0&&k.schema.kind!=="unknown"?"json":"text";e.block("def _open(extra_headers: Dict[str, str]):",()=>{e.line('return self._http.stream(op["method"], url, headers={**auth_headers, **(headers or {}), **extra_headers}, params=params, timeout=timeout)')}),e.line(`return ${r?"aiter_sse":"iter_sse"}(_open, data_kind="${E}")`);return}G(n)&&!L(n)&&e.line("form_data, form_files = to_multipart(body)");let v=n.requestBody?L(n)?", **multipart_arguments(body)":G(n)?", data=form_data, files=form_files":V(n.requestBody.contentType)?`, content=body, content_type=${f.string(n.requestBody.contentType)}`:", json_body=encode(body)":"";e.line(`response = ${_}${g}(self._http, self._config, op, url, method=op["method"], headers={**auth_headers, **(headers or {})}, params=params${v}, timeout=timeout, retry=retry, idempotency_key=idempotency_key)`);let A=$===void 0?"None":`decode(${h($,a)}, _safe_json(response))`;i?(e.block("if not response.is_success:",()=>{e.line("raise ApiError(url, response.status_code, response.reason_phrase, _safe_json(response))")}),e.line(`return Envelope(data=${A}, headers=read_envelope_headers(response, ${pe(n,c)}), response=response)`)):s==="result"?(e.block("if not response.is_success:",()=>{e.line("return Result(data=None, error=_safe_json(response), response=response)")}),e.line(`return Result(data=${A}, error=None, response=response)`)):(e.block("if not response.is_success:",()=>{e.line("raise ApiError(url, response.status_code, response.reason_phrase, _safe_json(response))")}),e.line($===void 0?"return None":`return ${A}`))}),e.blank()}function me(e,n,t,s,r,a){let c=R(n),i=c===void 0?"Any":h(c,a),m=D([...n.pathParams,...n.queryParams].map(p=>p.name),{style:"snake",reserved:x,taken:W}),l=n.pathParams.map((p,_)=>({param:p,python:m[_]})),o=n.queryParams.map((p,_)=>({param:p,python:m[n.pathParams.length+_]})),d=l.map(({param:p,python:_})=>`${_}: ${h(p.schema,a)}`),u=[...o.map(({param:p,python:_})=>{let g=h(p.schema,a),w=g.startsWith("Optional[")?g:`Optional[${g}]`;return`${_}: ${w} = None`}),"headers: Optional[Dict[str, str]] = None","timeout: Optional[float] = None","retry: Optional[Dict[str, Any]] = None"],y=["self",...d,"*",...u].join(", "),b=s?"AsyncIterator":"Iterator",$=s?"aiter_pages":"iter_pages",k=s?"aiter_items":"iter_items",P=()=>{e.line("base: Dict[str, Any] = {}");for(let{param:g,python:w}of o)e.block(`if ${w} is not None:`,()=>{e.line(`base[${f.string(g.name)}] = encode(${w})`)});let p=s?"async def":"def",_=s?"await ":"";e.block(`${p} _page(page_params: Dict[str, Any]) -> Tuple[Any, Any]:`,()=>{e.line('auth_headers, auth_query = resolve_auth(op.get("security") or [], self._auth)');let g=l.map(({param:w,python:H})=>`${f.string(w.name)}: ${H}`).join(", ");e.line(`url = build_url(self._server_url, op["path"], {${g}})`),e.line(`response = ${_}${s?"send_async":"send"}(self._http, self._config, op, url, method=op["method"], headers={**auth_headers, **(headers or {})}, params={**page_params, **auth_query}, timeout=timeout, retry=retry)`),e.block("if not response.is_success:",()=>{e.line("raise ApiError(url, response.status_code, response.reason_phrase, _safe_json(response))")}),e.line("return _safe_json(response), response")})};s?(e.block(`async def ${t}_pages(${y}) -> ${b}[${i}]:`,()=>{e.line(`op = _OPERATIONS["${t}"]`),P(),e.block(`async for page in ${$}(_page, op["pagination"], base):`,()=>{e.line(i==="Any"?"yield page":`yield decode(${i}, page)`)})}),e.blank(),e.block(`async def ${t}_items(${y}) -> ${b}[${r}]:`,()=>{e.line(`op = _OPERATIONS["${t}"]`),P(),e.block(`async for item in ${k}(_page, op["pagination"], base):`,()=>{e.line(r==="Any"?"yield item":`yield decode(${r}, item)`)})})):(e.block(`def ${t}_pages(${y}) -> ${b}[${i}]:`,()=>{e.line(`op = _OPERATIONS["${t}"]`),P(),e.line(i==="Any"?`return ${$}(_page, op["pagination"], base)`:`return (decode(${i}, page) for page in ${$}(_page, op["pagination"], base))`)}),e.blank(),e.block(`def ${t}_items(${y}) -> ${b}[${r}]:`,()=>{e.line(`op = _OPERATIONS["${t}"]`),P(),e.line(r==="Any"?`return ${k}(_page, op["pagination"], base)`:`return (decode(${r}, item) for item in ${k}(_page, op["pagination"], base))`)})),e.blank()}function he(e){return ae(e).map(t=>t.kind==="literal"?f.string(t.value):q(t.name).python).join(" + ")}function fe(e,n){let t=n.servers??[];if(t.length===0)return;let s=new Set;e.block("class Servers:",()=>{e.line('"""The declared servers; variables default to the values from the description."""'),e.blank(),t.forEach((r,a)=>{let c=N(r.description??`server${a+1}`,{style:"snake",reserved:x});s.has(c)&&(c=`${c}_${a+1}`),s.add(c);let i=r.variables.map(m=>`${q(m.name).python}: str = ${f.string(m.default)}`);a>0&&e.blank(),e.line("@staticmethod"),e.block(`def ${c}(${i.join(", ")}) -> str:`,()=>{e.line(`return ${he(r)}`)})})}),e.blank()}function Q(e,n,t,s,r,a,c){let i=s?"AsyncClient":"Client",m=s?"httpx.AsyncClient":"httpx.Client";e.block(`class ${i}:`,()=>{e.doc(`${s?"Async ":""}client for ${n.title} (${n.version}).`),e.block(`def __init__(self, server_url: str = ${f.string(a)}, *, auth: Optional[Dict[str, Any]] = None, headers: Optional[Dict[str, str]] = None, timeout: Optional[float] = None, retry: Optional[Dict[str, Any]] = None, middleware: Optional[List[Any]] = None, idempotency_key: Any = None, http_client: Optional[${m}] = None) -> None:`,()=>{e.line("self._server_url = server_url"),e.line("self._auth = auth or {}"),e.line("self._config: Dict[str, Any] = {"),e.indent(()=>{e.line('"headers": headers or {},'),e.line('"timeout": timeout,'),e.line('"retry": retry or {},'),e.line('"middleware": middleware or [],'),e.line('"idempotency_key": idempotency_key,')}),e.line("}"),e.line(`self._http = http_client or ${m}()`)}),e.blank();for(let{op:l,ident:o}of I(n)){J(e,l,o,t,s,c),F(l)===void 0&&(l.successResponseHeaders?.length??0)>0&&J(e,l,o,t,s,c,n,!0);let d=r.get(o);if(d!==void 0){let u=R(l),y=ie(u,typeof d.items=="string"?d.items:void 0,n);me(e,l,o,s,y===void 0?"Any":h(y,c),c)}}}),e.blank()}function X(e){let n=new Map,t=new Set,s=[];for(let{name:a,schema:c}of e.schemas){let i=B(c,e);if(!(i===void 0||!i.cases.every(l=>Y(l.schema,e)?.properties.some(o=>o.name===i.property)===!0))){for(let l of i.cases){let o=n.get(l.schemaName);if(o!==void 0&&o.value!==l.value){t.add(l.schemaName);continue}n.set(l.schemaName,{property:i.property,value:l.value})}s.push({name:a,property:i.property,members:i.cases.map(l=>l.schemaName)})}}let r=new Map;for(let a of s)a.members.some(c=>t.has(c))||r.set(a.name,q(a.property).python);for(let a of t)n.delete(a);return{pins:n,unions:r}}function ye(e,n,t,s,r,a,c){let i=r==="pydantic";i||e.line("@dataclass");let m=i?`class ${O(n)}(BaseModel):`:`class ${O(n)}:`;e.block(m,()=>{e.doc(a),i&&(e.line("model_config = ConfigDict(populate_by_name=True)"),e.blank());let l=[...t.filter(d=>d.required),...t.filter(d=>!d.required)],o=[];l.length===0&&e.line("pass");for(let d of l){let{python:u,renamed:y}=q(d.name);y&&!i&&o.push([u,d.name]);let b=y&&i?`alias=${f.string(d.name)}`:void 0,$=c?.property===d.name?`Literal[${f.literal(c.value)}]`:h(d.schema,s);if(d.required){let k=b===void 0?"":` = Field(${b})`;e.line(`${u}: ${$}${k}`)}else{let k=$.startsWith("Optional[")?$:`Optional[${$}]`,P=b===void 0?"None":`Field(default=None, ${b})`;e.line(`${u}: ${k} = ${P}`)}}if(o.length>0){e.blank(),e.line("# Python field name -> wire (JSON) name, for (de)serialization.");let d=o.map(([u,y])=>`"${u}": ${f.string(y)}`).join(", ");e.line(`_field_map: ClassVar[Dict[str, str]] = {${d}}`)}}),e.blank(),e.blank()}function Z(e,n="string",t="dataclass"){let s=new j,{pins:r,unions:a}=t==="pydantic"?X(e):{pins:new Map,unions:new Map};s.line("from __future__ import annotations"),s.blank(),t==="dataclass"&&s.line("from dataclasses import dataclass"),s.line("from enum import Enum");let c=["Any","AsyncIterator","Dict","Iterator","List","Literal","Optional","Tuple","Union"];t==="dataclass"&&c.splice(2,0,"ClassVar"),a.size>0&&c.unshift("Annotated"),s.line(`from typing import ${c.join(", ")}`),t==="pydantic"&&s.line("from pydantic import BaseModel, ConfigDict, Field"),n==="Date"&&s.line("from datetime import date, datetime"),s.blank(),s.blank();let i=[];for(let{name:m,schema:l}of e.schemas){let o=oe(l);if(o!==void 0){let d=o.scalar==="string"?"str, Enum":"int, Enum";s.block(`class ${O(m)}(${d}):`,()=>{s.doc(l.description),o.values.forEach((u,y)=>{s.line(`${o.memberNames[y]} = ${f.literal(u)}`)})}),s.blank(),s.blank();continue}if(l.kind==="object"||l.kind==="intersection"){let d=Y(l,e);if(d!==void 0){ye(s,m,d.properties,n,t,d.description??l.description,r.get(m));continue}}i.push(()=>{let d=B(l,e);if(d!==void 0){let b=d.cases.map($=>`${$.value} -> ${O($.schemaName)}`).join(", ");s.line(`# Discriminated by "${d.property}": ${b}`)}let u=a.get(m),y=u===void 0?h(l,n):`Annotated[${h(l,n)}, Field(discriminator=${f.string(u)})]`;s.line(`${O(m)} = ${y}`),s.blank()})}for(let m of i)m();return s.toString()}function ue(e,n){let t=[];for(let{name:s,schema:r}of e.schemas){if(n.has(s))continue;let a=B(r,e);if(a===void 0)continue;let c=a.cases.map(i=>`${f.string(i.value)}: ${O(i.schemaName)}`).join(", ");t.push(`DISCRIMINATORS[${O(s)}] = (${f.string(a.property)}, {${c}})`)}return t}var on={type:"object",properties:{models:{enum:["dataclass","pydantic"],default:"dataclass",description:"Model style: standard-library dataclasses (default, httpx is the only dependency), or pydantic BaseModel classes (adds pydantic)."}},additionalProperties:!1};function ee(e){let n=e.lastIndexOf("/")>=0?"/":"\\",t=e.lastIndexOf(n),s=t>=0?e.slice(0,t+1):"",r=(t>=0?e.slice(t+1):e).replace(/\.[^.]+$/,"");return`${s}${N(r,{style:"snake",reserved:x})}.py`}var rn=({model:e,output:n,banner:t,emit:s,options:r,pagination:a})=>{let c=s.errorMode??"throw",i=s.dateType??"string",m=r?.models??"dataclass",l=m==="pydantic"?X(e):void 0,o=new j;if(o.line(`# Generated by @redocly/client-generator (python) from "${e.title}" ${e.version}.`),o.line("# Do not edit by hand \u2014 regenerate with `redocly generate-client`."),o.line(m==="pydantic"?"# Requires Python >= 3.9, httpx, and pydantic: pip install httpx pydantic":"# Requires Python >= 3.9 and httpx: pip install httpx"),o.blank(),o.line(Z(e,i,m).trimEnd()),o.blank(),o.blank(),fe(o,e),s.runtime==="module"){o.line("# \u2500\u2500\u2500 Runtime (real modules beside this file, written by the same run) \u2500\u2500\u2500");for(let p of Object.keys(U))o.line(`from ${p.replace(/\.py$/,"")} import *`);o.blank(),o.blank()}else{o.line("# \u2500\u2500\u2500 Embedded runtime (@redocly/client-generator python runtime) \u2500\u2500\u2500");for(let p of Object.values(U)){let _=p.split(`
9
- `).filter(g=>!g.startsWith("from __future__")&&!g.startsWith("from ._")).join(`
10
- `).trim();o.line(_),o.blank()}o.blank()}let d=ue(e,new Set(l?.unions.keys()));if(d.length>0){o.line("# Discriminated unions dispatch by their property inside decode().");for(let p of d)o.line(p);o.blank()}o.block("def _safe_json(response: httpx.Response) -> Any:",()=>{o.block("try:",()=>{o.line("return response.json()")}),o.block("except Exception:",()=>{o.line("return None")})}),o.blank();let u=new Map;for(let{op:p,ident:_}of I(e))u.set(_,de(a?.get(p.name)?.spec));o.line("_OPERATIONS = {"),o.indent(()=>{for(let{op:p,ident:_}of I(e)){let g={id:p.specName??p.name,method:p.method.toUpperCase(),path:p.path,...z(p,e).length>0?{security:z(p,e)}:{},...u.get(_)!==void 0?{pagination:u.get(_)}:{}};o.line(`"${_}": ${le(g)},`)}}),o.line("}"),o.blank(),o.blank();let y=s.serverUrl??e.serverUrl??"";Q(o,e,c,!1,u,y,i),Q(o,e,c,!0,u,y,i);let b={path:ee(n.path),content:o.toString()};if(s.runtime!=="module")return[b];let $=t.map(p=>`# ${p}`).join(`
11
- `),k=ee(n.path).replace(/[^\\/]+$/,""),P=Object.entries(U).map(([p,_])=>({path:`${k}${p}`,content:`${$}
12
-
13
- ${_.split(`
14
- `).map(g=>g.startsWith("from ._")?g.replace("from ._","from _"):g).join(`
15
- `).trim()}
16
- `}));return[b,...P]};function $e(e,n){let t=ee(n.outputPath).replace(/^.*[\\/]/,"").replace(/\.py$/,""),s=I(n.model).find(a=>a.op.name===e.name)?.ident??N(e.name,{style:"snake",reserved:x}),r=[...e.pathParams.map(a=>{let c=N(a.name,{style:"snake",reserved:x});return`${c}="<${c}>"`}),...e.queryParams.filter(a=>a.required).map(a=>`${N(a.name,{style:"snake",reserved:x})}=...`),...e.requestBody?["body=..."]:[]];return{lang:"python",label:"Python SDK",source:`from ${t} import Client
17
-
18
- client = Client()
19
- result = client.${s}(${r.join(", ")})
20
- `}}var an=({model:e,output:n,emit:t,pagination:s})=>[{path:n.path.replace(/\.[^.\\/]+$/,".python.md"),content:ce(e,{title:`${e.title} Python SDK reference`,frontmatter:t.docsFrontmatter===!0,language:{name:"python",label:"Python",fence:"python",requires:"The SDK needs `httpx`."},sample:r=>$e(r,{model:e,emit:t,outputPath:n.path}),paginated:new Set(s?.keys()??[])})}];export{h as a,Z as b,on as c,rn as d,$e as e,an as f};
@@ -1,34 +0,0 @@
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 l,b as v,c as U,d as F,e as R}from"./U5DIFWGH.js";import{b as O}from"./46YO7ZAG.js";import{ba as k,c as G,ca as $,ga as S,ia as b,l as P,oa as g}from"./K4IZRPJV.js";import"./NEWT5A6S.js";import"./RFWIIJFG.js";import{readFileSync as z}from"node:fs";import{mkdir as H,writeFile as B}from"node:fs/promises";import{basename as T,dirname as A,extname as I,isAbsolute as N,relative as j,resolve as f}from"node:path";var V=/^[a-z][a-z0-9+.-]+:/i;function L(e,n){let{setup:o}=e;if(typeof o!="string")return e;if(V.test(o))throw new g(`
8
- \u274C \`client.setup\` must be a local file path \u2014 remote setup modules are not supported.
9
- Got: ${o}
10
- `);return N(o)?e:{...e,setup:f(n,o)}}function q(e){return`${e.replace(/[\\/]/g,"_")}.client.ts`}function D(e){if(e.startsWith("//"))return!1;if(e.startsWith("/"))return!0;try{let n=new URL(e);return n.protocol==="http:"||n.protocol==="https:"}catch{return!1}}async function ie({argv:e,config:n}){let{AUTHORING_HELPER_NAMES:o,generateClient:c,mergeConfig:m}=await import("./R3ZIINV3.js"),t=n.configPath?A(n.configPath):process.cwd(),s={serverUrl:e["server-url"],outputMode:e["output-mode"],runtime:e.runtime,importExt:e["import-ext"],goPackage:e["go-package"],argsStyle:e["args-style"],errorMode:e["error-mode"],dateType:e["date-type"],mockData:e["mock-data"],mockSeed:e["mock-seed"],docs:e.docs,generators:e.generator?.map(a=>a.startsWith(".")?f(a):a),setup:e.setup===void 0?void 0:L({setup:e.setup},process.cwd()).setup},r=n.resolvedConfig.apis??{},i=Object.keys(r).filter(a=>G(r[a].client)||r[a].clientOutput!==void 0);if(e.api===void 0){if(e.output)throw new g("\n\u274C --output can't target multiple APIs. Set `clientOutput` under each api in redocly.yaml, or pass a single <api>.\n");if(i.length===0)throw new g("\n\u274C No API to generate. Add a `client` block or `clientOutput` under an `apis:` entry, or pass <api> (a file/URL or an `apis:` alias).\n")}let u=await O(e.api===void 0?i:[e.api],n),p={config:n,configDir:t,cliFlags:s,outputFlag:e.output,toolkit:{generateClient:c,mergeConfig:m,helperNames:o},seenOutputs:new Set,composable:[]};for(let a of u)await J(a,p);let y=G(n.resolvedConfig.client)?n.resolvedConfig.client:{};y.cliOutput!==void 0&&e.api===void 0&&p.composable.length>0&&await K(y.cliOutput,p)}async function J(e,{config:n,configDir:o,cliFlags:c,outputFlag:m,toolkit:t,seenOutputs:s,composable:r}){let{path:i,alias:u}=e,p=u??T(i,I(i)),y=n.forAlias(u),{client:a,clientOutput:E}=y.resolvedConfig,W=L(G(a)?a:{},o),h=t.mergeConfig(W,c);Q(h.generators??[],t.helperNames,o);let C=m!==void 0?f(m):E!==void 0?f(o,E):f(o,q(p));if(!C.endsWith(".ts"))throw new g(`
11
- \u274C output must point at a TypeScript file (ending in .ts).
12
- Got: ${C}
13
- `);if(s.has(C))throw new g(`
14
- \u274C Two APIs write to the same path: ${C}.
15
- Give each api a distinct \`clientOutput\`.
16
- `);if(s.add(C),h.serverUrl!==void 0&&!D(h.serverUrl))throw new g(`
17
- \u274C serverUrl must be an absolute URL (https://api.example.com) or a root-relative path (/v1) \u2014 set via --server-url or the \`client\` block in redocly.yaml.
18
- Got: ${h.serverUrl}
19
- `);try{b.info(S(`
20
- Generating client for ${p}...
21
- `));let d=await t.generateClient({...h,api:i,output:C,config:y,configDir:o}),w=d.files.find(_=>_.path.endsWith(".cli.ts"));if(w!==void 0){let _=h.importExt??"js";r.push({alias:p,cliPath:w.path.replace(/\.ts$/,_==="ts"?".ts":".js")})}for(let _ of d.files)s.add(_.path);let M=`Client successfully generated: ${`${d.files.length} ${P("file",d.files.length)}`} (${d.bytes} bytes) at ${k(d.outputPath)}.`;b.info(`
22
- `+$(M)+`
23
- `)}catch(d){let w=d instanceof Error?d.message:String(d);throw l.generate_client_error_category=R(w),new g(`
24
- \u274C Failed to generate client for ${p}.
25
- ${w}
26
- `)}}async function K(e,{configDir:n,seenOutputs:o,composable:c}){let{renderComposedCliEntry:m}=await import("./4WZNKPF4.js"),t=f(n,e);if(!t.endsWith(".ts"))throw new g(`
27
- \u274C client.cliOutput must point at a TypeScript file (ending in .ts).
28
- Got: ${t}
29
- `);if(o.has(t))throw new g(`
30
- \u274C client.cliOutput resolves to a file this run generated: ${t}.
31
- Give the composed entry its own path.
32
- `);let s=T(t,I(t)),r=m(c.map(({alias:i,cliPath:u})=>({alias:i,modulePath:`./${j(A(t),u).split("\\").join("/")}`})),s);await H(A(t),{recursive:!0}),await B(t,r,"utf-8"),l.generate_client_composed_apis_count=c.length,b.info(`
33
- `+$(`Composed CLI written to ${k(j(process.cwd(),t))} \u2014 ${c.map(({alias:i})=>i).join(", ")} behind one \`${s}\` binary.`)+`
34
- `)}var x=new Set;function Q(e,n,o){let c=new Set(l.generate_client_builtin_generators??[]),m=new Set(l.generate_client_toolkit_imports??[]),t=new Set(l.generate_client_ejected_generators??[]),s=l.generate_client_custom_generators_count??0;for(let r of e){if(v.has(r)){c.add(r);continue}if(!x.has(r)&&(x.add(r),s++,r.startsWith(".")||N(r)))try{let i=z(f(o,r),"utf-8");for(let p of U(i,n))m.add(p);let u=F(i);u&&t.add(`${u.name}@${u.version}`)}catch{}}l.generate_client_builtin_generators=[...c],l.generate_client_custom_generators_count=s,l.generate_client_toolkit_imports=[...m],l.generate_client_ejected_generators=[...t]}export{Q as collectGeneratorUsage,ie as handleGenerateClient};