@blimu/codegen 0.1.0 → 0.2.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/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var Be=Object.create;var z=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Me=Object.getPrototypeOf,Ue=Object.prototype.hasOwnProperty;var l=(n,e)=>z(n,"name",{value:e,configurable:!0});var Le=(n,e)=>{for(var t in e)z(n,t,{get:e[t],enumerable:!0})},ue=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ze(e))!Ue.call(n,s)&&s!==t&&z(n,s,{get:()=>e[s],enumerable:!(r=_e(e,s))||r.enumerable});return n};var k=(n,e,t)=>(t=n!=null?Be(Me(n)):{},ue(e||!n||!n.__esModule?z(t,"default",{value:n,enumerable:!0}):t,n)),Ge=n=>ue(z({},"__esModule",{value:!0}),n);var at={};Le(at,{ClientSchema:()=>he,ConfigModule:()=>N,ConfigSchema:()=>re,ConfigService:()=>x,GeneratorModule:()=>L,GeneratorService:()=>P,IRSchemaKind:()=>p,OpenApiModule:()=>D,OpenApiService:()=>j,TYPESCRIPT_TEMPLATE_NAMES:()=>te,TypeAugmentationOptionsSchema:()=>me,TypeScriptClientSchema:()=>de,defineConfig:()=>Je,generate:()=>st,loadConfig:()=>it,loadMjsConfig:()=>F});module.exports=Ge(at);var m=require("zod"),me=m.z.object({moduleName:m.z.string().optional(),namespace:m.z.string().optional(),typeNames:m.z.array(m.z.string()).optional(),outputFileName:m.z.string().optional()}),te=["client.ts.hbs","index.ts.hbs","package.json.hbs","README.md.hbs","schema.ts.hbs","schema.zod.ts.hbs","service.ts.hbs","tsconfig.json.hbs","utils.ts.hbs"],Ze=m.z.object({type:m.z.string().min(1,"Type is required"),outDir:m.z.string().min(1,"OutDir is required"),name:m.z.string().min(1,"Name is required"),includeTags:m.z.array(m.z.string()).optional(),excludeTags:m.z.array(m.z.string()).optional(),operationIdParser:m.z.custom().optional(),preCommand:m.z.array(m.z.string()).optional(),postCommand:m.z.array(m.z.string()).optional(),defaultBaseURL:m.z.string().optional(),exclude:m.z.array(m.z.string()).optional(),typeAugmentation:me.optional()}),de=Ze.extend({type:m.z.literal("typescript"),packageName:m.z.string().min(1,"PackageName is required"),moduleName:m.z.string().optional(),includeQueryKeys:m.z.boolean().optional(),templates:m.z.record(m.z.string(),m.z.string()).refine(n=>Object.keys(n).every(e=>te.includes(e)),{message:`Template names must be one of: ${te.join(", ")}`}).optional()}),he=m.z.discriminatedUnion("type",[de]),re=m.z.object({spec:m.z.string().min(1,"Spec is required"),name:m.z.string().optional(),clients:m.z.array(he).min(1,"At least one client is required")});var W=require("@nestjs/common"),ye=k(require("fs")),b=k(require("path"));var ge=require("url"),V=k(require("path"));async function F(n){try{let e=V.isAbsolute(n)?n:V.resolve(n),r=await import((0,ge.pathToFileURL)(e).href),s=r.default||r;if(!s)throw new Error(`Config file must export a default export or named export: ${n}`);return re.parse(s)}catch(e){throw e instanceof Error?new Error(`Failed to load MJS config from ${n}: ${e.message}`):e}}l(F,"loadMjsConfig");function Ve(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(Ve,"_ts_decorate");var x=class n{static{l(this,"ConfigService")}logger=new W.Logger(n.name);DEFAULT_CONFIG_FILE="chunkflow-codegen.config.mjs";async findDefaultConfig(){let e=process.cwd(),t=b.parse(e).root;for(;e!==t;){let r=b.join(e,this.DEFAULT_CONFIG_FILE);try{return await ye.promises.access(r),r}catch{}e=b.dirname(e)}return null}async load(e){try{let t=await F(e);return this.normalizePaths(t,e)}catch(t){throw t instanceof Error?new Error(`Failed to load config from ${e}: ${t.message}`):t}}normalizePaths(e,t){let r=b.dirname(b.resolve(t)),s=e.spec;this.isUrl(s)||b.isAbsolute(s)||(s=b.resolve(r,s));let o=e.clients.map(i=>{let a=i.outDir;return b.isAbsolute(a)||(a=b.resolve(r,a)),{...i,outDir:a}});return{...e,spec:s,clients:o}}isUrl(e){try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}getPreCommand(e){return e.preCommand||[]}getPostCommand(e){return e.postCommand||[]}shouldExcludeFile(e,t){if(!e.exclude||e.exclude.length===0)return!1;let r;try{r=b.relative(e.outDir,t)}catch{return!1}r=b.posix.normalize(r),r==="."&&(r="");for(let s of e.exclude){let o=b.posix.normalize(s);if(r===o||o!==""&&r.startsWith(o+"/"))return!0}return!1}};x=Ve([(0,W.Injectable)()],x);var be=require("@nestjs/common");function We(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(We,"_ts_decorate");var N=class{static{l(this,"ConfigModule")}};N=We([(0,be.Module)({providers:[x],exports:[x]})],N);function Je(n){return n}l(Je,"defineConfig");var p=(function(n){return n.Unknown="unknown",n.String="string",n.Number="number",n.Integer="integer",n.Boolean="boolean",n.Null="null",n.Array="array",n.Object="object",n.Enum="enum",n.Ref="ref",n.OneOf="oneOf",n.AnyOf="anyOf",n.AllOf="allOf",n.Not="not",n})({});var K=require("@nestjs/common");var je=require("@nestjs/common");var ve=require("@nestjs/common");function we(n){let e=n.openapi;return typeof e!="string"?"unknown":e.startsWith("3.1")?"3.1":e.startsWith("3.0")?"3.0":"unknown"}l(we,"detectOpenAPIVersion");function Se(n){return n==="3.0"||n==="3.1"}l(Se,"isSupportedVersion");function ne(n,e){if(!(!e||typeof e!="object")){if("$ref"in e&&e.$ref){let t=e.$ref;if(t.startsWith("#/components/schemas/")){let r=t.replace("#/components/schemas/","");if(n.components?.schemas?.[r]){let s=n.components.schemas[r];return"$ref"in s?ne(n,s):s}}return}return e}}l(ne,"getSchemaFromRef");function Te(n){return n?"nullable"in n&&n.nullable===!0?!0:"type"in n&&Array.isArray(n.type)?n.type.includes("null"):!1:!1}l(Te,"isSchemaNullable");function oe(n){if(!(!n||!("type"in n)))return n.type}l(oe,"getSchemaType");function Ke(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(Ke,"_ts_decorate");var C=class{static{l(this,"SchemaConverterService")}schemaRefToIR(e,t){if(!t)return{kind:p.Unknown,nullable:!1};if("$ref"in t&&t.$ref){let c=t.$ref;if(c.startsWith("#/components/schemas/")){let u=c.replace("#/components/schemas/","");return{kind:p.Ref,ref:u,nullable:!1}}let f=c.split("/");if(f.length>0){let u=f[f.length-1];if(u)return{kind:p.Ref,ref:u,nullable:!1}}return{kind:p.Unknown,nullable:!1}}let r=ne(e,t);if(!r)return{kind:p.Unknown,nullable:!1};let s=Te(r),o;if(r.discriminator&&(o={propertyName:r.discriminator.propertyName,mapping:r.discriminator.mapping}),r.oneOf&&r.oneOf.length>0){let c=r.oneOf.map(f=>this.schemaRefToIR(e,f));return{kind:p.OneOf,oneOf:c,nullable:s,discriminator:o}}if(r.anyOf&&r.anyOf.length>0){let c=r.anyOf.map(f=>this.schemaRefToIR(e,f));return{kind:p.AnyOf,anyOf:c,nullable:s,discriminator:o}}if(r.allOf&&r.allOf.length>0){let c=r.allOf.map(f=>this.schemaRefToIR(e,f));return{kind:p.AllOf,allOf:c,nullable:s,discriminator:o}}if(r.not){let c=this.schemaRefToIR(e,r.not);return{kind:p.Not,not:c,nullable:s,discriminator:o}}if(r.enum&&r.enum.length>0){let c=r.enum.map(u=>String(u)),f=this.inferEnumBaseKind(r);return{kind:p.Enum,enumValues:c,enumRaw:r.enum,enumBase:f,nullable:s,discriminator:o}}let i=oe(r),a=Array.isArray(i)?i.filter(c=>c!=="null")[0]:i;if(a)switch(a){case"string":return{kind:p.String,nullable:s,format:r.format,discriminator:o};case"integer":return{kind:p.Integer,nullable:s,discriminator:o};case"number":return{kind:p.Number,nullable:s,discriminator:o};case"boolean":return{kind:p.Boolean,nullable:s,discriminator:o};case"array":let c=r,f=this.schemaRefToIR(e,c.items);return{kind:p.Array,items:f,nullable:s,discriminator:o};case"object":let u=[];if(r.properties){let y=Object.keys(r.properties).sort();for(let S of y){let O=r.properties[S],q=this.schemaRefToIR(e,O),_=r.required?.includes(S)||!1;u.push({name:S,type:q,required:_,annotations:this.extractAnnotations(O)})}}let g;return r.additionalProperties&&typeof r.additionalProperties=="object"&&(g=this.schemaRefToIR(e,r.additionalProperties)),{kind:p.Object,properties:u,additionalProperties:g,nullable:s,discriminator:o}}return{kind:p.Unknown,nullable:s,discriminator:o}}extractAnnotations(e){if(!e||"$ref"in e)return{};let t=e;return{title:t.title,description:t.description,deprecated:t.deprecated,readOnly:t.readOnly,writeOnly:t.writeOnly,default:t.default,examples:t.example?Array.isArray(t.example)?t.example:[t.example]:void 0}}inferEnumBaseKind(e){let t=oe(e);if(t){let r=Array.isArray(t)?t.filter(s=>s!=="null")[0]:t;if(r)switch(r){case"string":return p.String;case"integer":return p.Integer;case"number":return p.Number;case"boolean":return p.Boolean}}if(e.enum&&e.enum.length>0){let r=e.enum[0];if(typeof r=="string")return p.String;if(typeof r=="number")return Number.isInteger(r)?p.Integer:p.Number;if(typeof r=="boolean")return p.Boolean}return p.Unknown}};C=Ke([(0,ve.Injectable)()],C);function v(n){if(n=n.trim(),n==="")return"";let e=n.split(/[^A-Za-z0-9]+/).filter(r=>r!==""),t=[];for(let r of e){let s=ie(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join("")}l(v,"toPascalCase");function A(n){let e=v(n);return e===""?"":e.charAt(0).toLowerCase()+e.slice(1)}l(A,"toCamelCase");function M(n){if(n=n.trim(),n==="")return"";let e=n.split(/[^A-Za-z0-9]+/).filter(r=>r!==""),t=[];for(let r of e){let s=ie(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.toLowerCase()).join("_")}l(M,"toSnakeCase");function Oe(n){if(n=n.trim(),n==="")return"";let e=n.split(/[^A-Za-z0-9]+/).filter(r=>r!==""),t=[];for(let r of e){let s=ie(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.toLowerCase()).join("-")}l(Oe,"toKebabCase");function ie(n){if(n==="")return[];let e=[],t="",r=Array.from(n);for(let s=0;s<r.length;s++){let o=r[s],i=!1;s>0&&se(o)&&(se(r[s-1])?s<r.length-1&&!se(r[s+1])&&(i=!0):i=!0),i&&t.length>0&&(e.push(t),t=""),t+=o}return t.length>0&&e.push(t),e}l(ie,"splitCamelCase");function se(n){return n>="A"&&n<="Z"}l(se,"isUppercase");function Qe(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(Qe,"_ts_decorate");function xe(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}l(xe,"_ts_metadata");var R=class{static{l(this,"IrBuilderService")}schemaConverter;constructor(e){this.schemaConverter=e}buildIR(e){let t=this.collectTags(e),r=this.collectSecuritySchemes(e),s=this.buildStructuredModels(e),o={};for(let a of t)o[a]=!0;let i=this.buildIRFromDoc(e,o);return i.securitySchemes=r,i.modelDefs=[...s,...i.modelDefs],i}filterIR(e,t){let r=this.compileTagFilters(t.includeTags||[]),s=this.compileTagFilters(t.excludeTags||[]),o=[];for(let a of e.services){let c=[];for(let f of a.operations)this.shouldIncludeOperation(f.originalTags,r,s)&&c.push(f);c.length>0&&o.push({...a,operations:c})}let i={services:o,models:e.models,securitySchemes:e.securitySchemes,modelDefs:e.modelDefs};return i.modelDefs=this.filterUnusedModelDefs(i,e.modelDefs),i}detectStreamingContentType(e){let t=e.toLowerCase().split(";")[0].trim();return t==="text/event-stream"?{isStreaming:!0,format:"sse"}:t==="application/x-ndjson"||t==="application/x-jsonlines"||t==="application/jsonl"?{isStreaming:!0,format:"ndjson"}:t.includes("stream")||t.includes("chunked")?{isStreaming:!0,format:"chunked"}:{isStreaming:!1}}collectTags(e){let t=new Set;if(t.add("misc"),e.paths)for(let[r,s]of Object.entries(e.paths)){if(!s)continue;let o=[s.get,s.post,s.put,s.patch,s.delete,s.options,s.head,s.trace];for(let i of o)if(!(!i||!i.tags))for(let a of i.tags)t.add(a)}return Array.from(t).sort()}compileTagFilters(e){return e.map(t=>{try{return new RegExp(t)}catch(r){throw new Error(`Invalid tag filter pattern "${t}": ${r instanceof Error?r.message:String(r)}`)}})}shouldIncludeOperation(e,t,r){let s=t.length===0;if(t.length>0)for(let o of e){for(let i of t)if(i.test(o)){s=!0;break}if(s)break}if(!s)return!1;if(r.length>0){for(let o of e)for(let i of r)if(i.test(o))return!1}return!0}buildIRFromDoc(e,t){let r={};r.misc={tag:"misc",operations:[]};let s=[],o=new Set,i=l((c,f,u,g)=>{r[c]||(r[c]={tag:c,operations:[]});let y=f.operationId||"",{pathParams:S,queryParams:O}=this.collectParams(e,f),{requestBody:q,extractedTypes:_}=this.extractRequestBodyWithTypes(e,f,c,y,u,o);s.push(..._);let{response:ee,extractedTypes:G}=this.extractResponseWithTypes(e,f,c,y,u,o);s.push(...G);let E=f.tags&&f.tags.length>0?[...f.tags]:["misc"];r[c].operations.push({operationID:y,method:u,path:g,tag:c,originalTags:E,summary:f.summary||"",description:f.description||"",deprecated:f.deprecated||!1,pathParams:S,queryParams:O,requestBody:q,response:ee})},"addOp");if(e.paths)for(let[c,f]of Object.entries(e.paths)){if(!f)continue;let u=[{op:f.get,method:"GET"},{op:f.post,method:"POST"},{op:f.put,method:"PUT"},{op:f.patch,method:"PATCH"},{op:f.delete,method:"DELETE"},{op:f.options,method:"OPTIONS"},{op:f.head,method:"HEAD"},{op:f.trace,method:"TRACE"}];for(let{op:g,method:y}of u){if(!g)continue;let S=this.firstAllowedTag(g.tags||[],t);S&&i(S,g,y,c)}}let a=Object.values(r);for(let c of a)c.operations.sort((f,u)=>f.path===u.path?f.method.localeCompare(u.method):f.path.localeCompare(u.path));return a.sort((c,f)=>c.tag.localeCompare(f.tag)),{services:a,models:[],securitySchemes:[],modelDefs:s}}deriveMethodName(e,t,r){if(e)return A(e);let s=r.includes("{")&&r.includes("}");switch(t){case"GET":return s?"get":"list";case"POST":return"create";case"PUT":case"PATCH":return"update";case"DELETE":return"delete";default:return t.toLowerCase()}}firstAllowedTag(e,t){for(let r of e)if(t[r])return r;return e.length===0&&t.misc?"misc":""}collectSecuritySchemes(e){if(!e.components?.securitySchemes)return[];let t=Object.keys(e.components.securitySchemes).sort(),r=[];for(let s of t){let o=e.components.securitySchemes[s];if(!o||"$ref"in o)continue;let i={key:s,type:o.type};switch(o.type){case"http":i.scheme=o.scheme,i.bearerFormat=o.bearerFormat;break;case"apiKey":i.in=o.in,i.name=o.name;break;case"oauth2":case"openIdConnect":break}r.push(i)}return r}collectParams(e,t){let r=[],s=[];if(t.parameters)for(let o of t.parameters){if(!o||"$ref"in o)continue;let i=o,a=this.schemaConverter.schemaRefToIR(e,i.schema),c={name:i.name,required:i.required||!1,schema:a,description:i.description||""};i.in==="path"?r.push(c):i.in==="query"&&s.push(c)}return r.sort((o,i)=>o.name.localeCompare(i.name)),s.sort((o,i)=>o.name.localeCompare(i.name)),{pathParams:r,queryParams:s}}extractRequestBodyWithTypes(e,t,r,s,o,i){let a=[];if(!t.requestBody||"$ref"in t.requestBody)return{requestBody:null,extractedTypes:[]};let c=t.requestBody,f=this.deriveMethodName(s,o,t.path),u=`${v(r)}${v(f)}RequestBody`;if(c.content?.["application/json"]){let y=c.content["application/json"],S=this.schemaConverter.schemaRefToIR(e,y.schema);return S.kind===p.Object&&!i.has(u)?(i.add(u),a.push({name:u,schema:S,annotations:this.schemaConverter.extractAnnotations(y.schema)}),{requestBody:{contentType:"application/json",typeTS:"",schema:{kind:p.Ref,ref:u,nullable:!1},required:c.required||!1},extractedTypes:a}):{requestBody:{contentType:"application/json",typeTS:"",schema:S,required:c.required||!1},extractedTypes:[]}}return{requestBody:this.extractRequestBody(e,t),extractedTypes:[]}}extractRequestBody(e,t){if(!t.requestBody||"$ref"in t.requestBody)return null;let r=t.requestBody;if(r.content?.["application/json"]){let s=r.content["application/json"];return{contentType:"application/json",typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,s.schema),required:r.required||!1}}if(r.content?.["application/x-www-form-urlencoded"]){let s=r.content["application/x-www-form-urlencoded"];return{contentType:"application/x-www-form-urlencoded",typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,s.schema),required:r.required||!1}}if(r.content?.["multipart/form-data"])return{contentType:"multipart/form-data",typeTS:"",schema:{kind:"unknown",nullable:!1},required:r.required||!1};if(r.content){let s=Object.keys(r.content)[0],o=r.content[s];return{contentType:s,typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,o.schema),required:r.required||!1}}return null}extractResponseWithTypes(e,t,r,s,o,i){let a=[];if(!t.responses)return{response:{typeTS:"unknown",schema:{kind:p.Unknown,nullable:!1},description:"",isStreaming:!1,contentType:""},extractedTypes:[]};let c=this.deriveMethodName(s,o,t.path),f=`${v(r)}${v(c)}Response`,u=["200","201"];for(let y of u){let S=t.responses[y];if(S&&!("$ref"in S)){let O=S;if(O.content){for(let[E,pe]of Object.entries(O.content)){let fe=this.detectStreamingContentType(E),Z=this.schemaConverter.schemaRefToIR(e,pe.schema);if(fe.isStreaming)return{response:{typeTS:"",schema:Z,description:O.description||"",isStreaming:!0,contentType:E,streamingFormat:fe.format},extractedTypes:[]};if(E==="application/json")return Z.kind===p.Object&&!i.has(f)?(i.add(f),a.push({name:f,schema:Z,annotations:this.schemaConverter.extractAnnotations(pe.schema)}),{response:{typeTS:"",schema:{kind:p.Ref,ref:f,nullable:!1},description:O.description||"",isStreaming:!1,contentType:E},extractedTypes:a}):{response:{typeTS:"",schema:Z,description:O.description||"",isStreaming:!1,contentType:E},extractedTypes:[]}}let q=Object.keys(O.content)[0],_=O.content[q],ee=this.schemaConverter.schemaRefToIR(e,_.schema),G=this.detectStreamingContentType(q);return{response:{typeTS:"",schema:ee,description:O.description||"",isStreaming:G.isStreaming,contentType:q,streamingFormat:G.format},extractedTypes:[]}}return{response:{typeTS:"void",schema:{kind:p.Unknown,nullable:!1},description:O.description||"",isStreaming:!1,contentType:""},extractedTypes:[]}}}return{response:this.extractResponse(e,t),extractedTypes:[]}}extractResponse(e,t){if(!t.responses)return{typeTS:"unknown",schema:{kind:p.Unknown,nullable:!1},description:"",isStreaming:!1,contentType:""};let r=["200","201"];for(let s of r){let o=t.responses[s];if(o&&!("$ref"in o)){let i=o;if(i.content){for(let[u,g]of Object.entries(i.content)){let y=this.detectStreamingContentType(u);if(y.isStreaming)return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,g.schema),description:i.description||"",isStreaming:!0,contentType:u,streamingFormat:y.format}}if(i.content["application/json"]){let u=i.content["application/json"];return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,u.schema),description:i.description||"",isStreaming:!1,contentType:"application/json"}}let a=Object.keys(i.content)[0],c=i.content[a],f=this.detectStreamingContentType(a);return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,c.schema),description:i.description||"",isStreaming:f.isStreaming,contentType:a,streamingFormat:f.format}}return{typeTS:"void",schema:{kind:p.Unknown,nullable:!1},description:i.description||"",isStreaming:!1,contentType:""}}}for(let[s,o]of Object.entries(t.responses))if(s.length===3&&s[0]==="2"&&o&&!("$ref"in o)){let i=o;if(s==="204")return{typeTS:"void",schema:{kind:p.Unknown,nullable:!1},description:i.description||"",isStreaming:!1,contentType:""};if(i.content){for(let[u,g]of Object.entries(i.content)){let y=this.detectStreamingContentType(u);if(y.isStreaming)return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,g.schema),description:i.description||"",isStreaming:!0,contentType:u,streamingFormat:y.format}}if(i.content["application/json"]){let u=i.content["application/json"];return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,u.schema),description:i.description||"",isStreaming:!1,contentType:"application/json"}}let a=Object.keys(i.content)[0],c=i.content[a],f=this.detectStreamingContentType(a);return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,c.schema),description:i.description||"",isStreaming:f.isStreaming,contentType:a,streamingFormat:f.format}}}return{typeTS:"unknown",schema:{kind:p.Unknown,nullable:!1},description:"",isStreaming:!1,contentType:""}}buildStructuredModels(e){let t=[];if(!e.components?.schemas)return t;let r=Object.keys(e.components.schemas).sort(),s=new Set;for(let o of r)s.add(o);for(let o of r){let i=e.components.schemas[o],a=this.schemaConverter.schemaRefToIR(e,i);t.push({name:o,schema:a,annotations:this.schemaConverter.extractAnnotations(i)})}return t}filterUnusedModelDefs(e,t){let r=new Map;for(let a of t)r.set(a.name,a);let s=new Set,o=new Set,i=l(a=>{if(a.kind==="ref"&&a.ref){let c=a.ref;if(s.add(c),!o.has(c)){o.add(c);let f=r.get(c);f&&i(f.schema)}}if(a.items&&i(a.items),a.additionalProperties&&i(a.additionalProperties),a.oneOf)for(let c of a.oneOf)i(c);if(a.anyOf)for(let c of a.anyOf)i(c);if(a.allOf)for(let c of a.allOf)i(c);if(a.not&&i(a.not),a.properties)for(let c of a.properties)i(c.type)},"collectRefs");for(let a of e.services)for(let c of a.operations){for(let f of c.pathParams)i(f.schema);for(let f of c.queryParams)i(f.schema);c.requestBody&&i(c.requestBody.schema),i(c.response.schema)}return t.filter(a=>s.has(a.name))}};R=Qe([(0,je.Injectable)(),xe("design:type",Function),xe("design:paramtypes",[typeof C>"u"?Object:C])],R);var J=require("@nestjs/common"),U=k(require("@apidevtools/swagger-parser")),ae=k(require("fs")),ce=k(require("path"));function Ye(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(Ye,"_ts_decorate");var j=class n{static{l(this,"OpenApiService")}logger=new J.Logger(n.name);async loadDocument(e){try{let t=null;try{t=new URL(e)}catch{}let r;if(t&&(t.protocol==="http:"||t.protocol==="https:"))this.logger.debug(`Loading OpenAPI spec from URL: ${e}`),r=await U.default.dereference(e);else{let o=ce.resolve(e);if(!ae.existsSync(o))throw new Error(`OpenAPI spec file not found: ${o}`);this.logger.debug(`Loading OpenAPI spec from file: ${o}`),r=await U.default.dereference(o)}let s=we(r);if(!Se(s))throw new Error(`Unsupported OpenAPI version: ${r.openapi}. Only versions 3.0.x and 3.1.0 are supported.`);return this.logger.log(`Detected OpenAPI version: ${s} (${r.openapi})`),r}catch(t){throw t instanceof Error?new Error(`Failed to load OpenAPI document from ${e}: ${t.message}`):t}}async validateDocument(e){try{let t=null;try{t=new URL(e)}catch{}if(t&&(t.protocol==="http:"||t.protocol==="https:"))await U.default.validate(e);else{let r=ce.resolve(e);if(!ae.existsSync(r))throw new Error(`OpenAPI spec file not found: ${r}`);await U.default.validate(r)}}catch(t){throw t instanceof Error?new Error(`Invalid OpenAPI document: ${t.message}`):t}}};j=Ye([(0,J.Injectable)()],j);function Xe(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(Xe,"_ts_decorate");function Ce(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}l(Ce,"_ts_metadata");var P=class n{static{l(this,"GeneratorService")}irBuilder;openApiService;logger=new K.Logger(n.name);generators=new Map;constructor(e,t){this.irBuilder=e,this.openApiService=t}register(e){this.generators.set(e.getType(),e),this.logger.debug(`Registered generator: ${e.getType()}`)}getGenerator(e){return this.generators.get(e)}getAvailableTypes(){return Array.from(this.generators.keys())}async generate(e,t){let r=this.getGenerator(t.type);if(!r)throw new Error(`Unsupported client type: ${t.type}`);let s=await this.openApiService.loadDocument(e),o=this.irBuilder.buildIR(s),i=this.irBuilder.filterIR(o,t);await r.generate(t,i)}};P=Xe([(0,K.Injectable)(),Ce("design:type",Function),Ce("design:paramtypes",[typeof R>"u"?Object:R,typeof j>"u"?Object:j])],P);var De=require("@nestjs/common");var Re=require("@nestjs/common");function et(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(et,"_ts_decorate");var D=class{static{l(this,"OpenApiModule")}};D=et([(0,Re.Module)({providers:[j],exports:[j]})],D);var X=require("@nestjs/common"),w=k(require("fs")),T=k(require("path")),h=k(require("handlebars"));var d=k(require("handlebars"));function Pe(){d.registerHelper("pascal",n=>v(n)),d.registerHelper("camel",n=>A(n)),d.registerHelper("kebab",n=>Oe(n)),d.registerHelper("snake",n=>M(n)),d.registerHelper("serviceName",n=>v(n)+"Service"),d.registerHelper("serviceProp",n=>A(n)),d.registerHelper("fileBase",n=>M(n).toLowerCase()),d.registerHelper("eq",(n,e)=>n===e),d.registerHelper("ne",(n,e)=>n!==e),d.registerHelper("gt",(n,e)=>n>e),d.registerHelper("lt",(n,e)=>n<e),d.registerHelper("sub",(n,e)=>n-e),d.registerHelper("len",n=>Array.isArray(n)?n.length:0),d.registerHelper("or",function(...n){let e=n[n.length-1];return e&&e.fn?n.slice(0,-1).some(t=>t)?e.fn(this):e.inverse(this):n.slice(0,-1).some(t=>t)}),d.registerHelper("and",function(...n){let e=n[n.length-1];return e&&e.fn?n.slice(0,-1).every(t=>t)?e.fn(this):e.inverse(this):n.slice(0,-1).every(t=>t)}),d.registerHelper("replace",(n,e,t)=>typeof n!="string"?n:n.replace(new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),t)),d.registerHelper("index",(n,e)=>n?.[e]),d.registerHelper("getServiceName",n=>{let e=n.split(".");return e.length>1?e[1]:n}),d.registerHelper("groupByNamespace",n=>{let e={};for(let t of n){let r=t.tag.split(".");if(r.length===1)e[""]||(e[""]=[]),e[""].push(t);else{let s=r[0];e[s]||(e[s]=[]),e[s].push(t)}}return e}),d.registerHelper("getRootServices",n=>n.filter(e=>!e.tag.includes("."))),d.registerHelper("dict",()=>({})),d.registerHelper("setVar",(n,e,t)=>(t&&t.data&&t.data.root&&(t.data.root[`_${n}`]=e),"")),d.registerHelper("set",(n,e,t)=>(n&&typeof n=="object"&&(n[e]=t),"")),d.registerHelper("hasKey",(n,e)=>n&&typeof n=="object"&&e in n),d.registerHelper("lookup",(n,e)=>n&&typeof n=="object"?n[e]:void 0),d.registerHelper("reMatch",(n,e)=>{try{return new RegExp(n).test(e)}catch{return!1}})}l(Pe,"registerCommonHandlebarsHelpers");function $(n,e=""){let t=e+" ",r;switch(n.kind){case p.String:r="z.string()",n.format==="date"||n.format==="date-time"?r+=".datetime()":n.format==="email"?r+=".email()":n.format==="uri"||n.format==="url"?r+=".url()":n.format==="uuid"&&(r+=".uuid()");break;case p.Number:r="z.number()";break;case p.Integer:r="z.number().int()";break;case p.Boolean:r="z.boolean()";break;case p.Null:r="z.null()";break;case p.Ref:n.ref?r=`Schema.${n.ref}Schema`:r="z.unknown()";break;case p.Array:n.items?r=`z.array(${$(n.items,t)})`:r="z.array(z.unknown())";break;case p.Object:if(!n.properties||n.properties.length===0)n.additionalProperties?r=`z.record(z.string(), ${$(n.additionalProperties,t)})`:r="z.record(z.string(), z.unknown())";else{let s=[];for(let o of n.properties){let i=$(o.type,t),a=Q(o.name);o.required?s.push(`${t}${a}: ${i}`):s.push(`${t}${a}: ${i}.optional()`)}if(n.additionalProperties){let o=$(n.additionalProperties,t);s.push(`${t}...z.record(z.string(), ${o}).shape`)}r=`z.object({
2
- ${s.join(`,
1
+ "use strict";var Je=Object.create;var W=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var Ye=Object.getPrototypeOf,Xe=Object.prototype.hasOwnProperty;var f=(o,e)=>W(o,"name",{value:e,configurable:!0});var et=(o,e)=>{for(var t in e)W(o,t,{get:e[t],enumerable:!0})},me=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Qe(e))!Xe.call(o,s)&&s!==t&&W(o,s,{get:()=>e[s],enumerable:!(r=Ke(e,s))||r.enumerable});return o};var O=(o,e,t)=>(t=o!=null?Je(Ye(o)):{},me(e||!o||!o.__esModule?W(t,"default",{value:o,enumerable:!0}):t,o)),tt=o=>me(W({},"__esModule",{value:!0}),o);var yt={};et(yt,{ClientSchema:()=>ge,ConfigModule:()=>D,ConfigSchema:()=>G,ConfigService:()=>v,GeneratorModule:()=>J,GeneratorService:()=>R,IRSchemaKind:()=>l,OpenApiModule:()=>B,OpenApiService:()=>x,PredefinedTypeSchema:()=>de,TYPESCRIPT_TEMPLATE_NAMES:()=>oe,TypeScriptClientSchema:()=>he,defineConfig:()=>st,generate:()=>ht,loadConfig:()=>gt,loadMjsConfig:()=>z});module.exports=tt(yt);var m=require("zod"),de=m.z.object({type:m.z.string().min(1,"Type name is required"),package:m.z.string().min(1,"Package name is required"),importPath:m.z.string().optional()}),oe=["client.ts.hbs","index.ts.hbs","package.json.hbs","README.md.hbs","schema.ts.hbs","schema.zod.ts.hbs","service.ts.hbs","tsconfig.json.hbs","utils.ts.hbs"],rt=m.z.object({type:m.z.string().min(1,"Type is required"),outDir:m.z.string().min(1,"OutDir is required"),name:m.z.string().min(1,"Name is required"),includeTags:m.z.array(m.z.string()).optional(),excludeTags:m.z.array(m.z.string()).optional(),operationIdParser:m.z.custom().optional(),preCommand:m.z.array(m.z.string()).optional(),postCommand:m.z.array(m.z.string()).optional(),defaultBaseURL:m.z.string().optional(),exclude:m.z.array(m.z.string()).optional()}),he=rt.extend({type:m.z.literal("typescript"),packageName:m.z.string().min(1,"PackageName is required"),moduleName:m.z.string().optional(),includeQueryKeys:m.z.boolean().optional(),predefinedTypes:m.z.array(de).optional(),dependencies:m.z.record(m.z.string(),m.z.string()).optional(),devDependencies:m.z.record(m.z.string(),m.z.string()).optional(),formatCode:m.z.boolean().optional(),templates:m.z.record(m.z.string(),m.z.string()).refine(o=>Object.keys(o).every(e=>oe.includes(e)),{message:`Template names must be one of: ${oe.join(", ")}`}).optional()}),ge=m.z.discriminatedUnion("type",[he]),G=m.z.object({spec:m.z.string().min(1,"Spec is required"),name:m.z.string().optional(),clients:m.z.array(ge).min(1,"At least one client is required")});var X=require("@nestjs/common"),be=O(require("fs")),w=O(require("path"));var ye=require("url"),Y=O(require("path"));async function z(o){try{let e=Y.isAbsolute(o)?o:Y.resolve(o),r=await import((0,ye.pathToFileURL)(e).href),s=r.default||r;if(!s)throw new Error(`Config file must export a default export or named export: ${o}`);return G.parse(s)}catch(e){throw e instanceof Error?new Error(`Failed to load MJS config from ${o}: ${e.message}`):e}}f(z,"loadMjsConfig");function nt(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(nt,"_ts_decorate");var v=class o{static{f(this,"ConfigService")}logger=new X.Logger(o.name);DEFAULT_CONFIG_FILE="chunkflow-codegen.config.mjs";async findDefaultConfig(){let e=process.cwd(),t=w.parse(e).root;for(;e!==t;){let r=w.join(e,this.DEFAULT_CONFIG_FILE);try{return await be.promises.access(r),r}catch{}e=w.dirname(e)}return null}async load(e){try{let t=await z(e);return this.normalizePaths(t,e)}catch(t){throw t instanceof Error?new Error(`Failed to load config from ${e}: ${t.message}`):t}}normalizePaths(e,t){let r=w.dirname(w.resolve(t)),s=e.spec;this.isUrl(s)||w.isAbsolute(s)||(s=w.resolve(r,s));let n=e.clients.map(a=>{let i=a.outDir;return w.isAbsolute(i)||(i=w.resolve(r,i)),{...a,outDir:i}});return{...e,spec:s,clients:n}}isUrl(e){try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}getPreCommand(e){return e.preCommand||[]}getPostCommand(e){return e.postCommand||[]}shouldExcludeFile(e,t){if(!e.exclude||e.exclude.length===0)return!1;let r;try{r=w.relative(e.outDir,t)}catch{return!1}r=w.posix.normalize(r),r==="."&&(r="");for(let s of e.exclude){let n=w.posix.normalize(s);if(r===n||n!==""&&r.startsWith(n+"/"))return!0}return!1}};v=nt([(0,X.Injectable)()],v);var Se=require("@nestjs/common");function ot(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(ot,"_ts_decorate");var D=class{static{f(this,"ConfigModule")}};D=ot([(0,Se.Module)({providers:[v],exports:[v]})],D);function st(o){return G.parse(o)}f(st,"defineConfig");var l=(function(o){return o.Unknown="unknown",o.String="string",o.Number="number",o.Integer="integer",o.Boolean="boolean",o.Null="null",o.Array="array",o.Object="object",o.Enum="enum",o.Ref="ref",o.OneOf="oneOf",o.AnyOf="anyOf",o.AllOf="allOf",o.Not="not",o})({});var te=require("@nestjs/common");var Pe=require("@nestjs/common");var ve=require("@nestjs/common");function we(o){let e=o.openapi;return typeof e!="string"?"unknown":e.startsWith("3.1")?"3.1":e.startsWith("3.0")?"3.0":"unknown"}f(we,"detectOpenAPIVersion");function Te(o){return o==="3.0"||o==="3.1"}f(Te,"isSupportedVersion");function se(o,e){if(!(!e||typeof e!="object")){if("$ref"in e&&e.$ref){let t=e.$ref;if(t.startsWith("#/components/schemas/")){let r=t.replace("#/components/schemas/","");if(o.components?.schemas?.[r]){let s=o.components.schemas[r];return"$ref"in s?se(o,s):s}}return}return e}}f(se,"getSchemaFromRef");function Oe(o){return o?"nullable"in o&&o.nullable===!0?!0:"type"in o&&Array.isArray(o.type)?o.type.includes("null"):!1:!1}f(Oe,"isSchemaNullable");function ae(o){if(!(!o||!("type"in o)))return o.type}f(ae,"getSchemaType");function at(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(at,"_ts_decorate");var P=class{static{f(this,"SchemaConverterService")}schemaRefToIR(e,t){if(!t)return{kind:l.Unknown,nullable:!1};if("$ref"in t&&t.$ref){let c=t.$ref;if(c.startsWith("#/components/schemas/")){let u=c.replace("#/components/schemas/","");return{kind:l.Ref,ref:u,nullable:!1}}let p=c.split("/");if(p.length>0){let u=p[p.length-1];if(u)return{kind:l.Ref,ref:u,nullable:!1}}return{kind:l.Unknown,nullable:!1}}let r=se(e,t);if(!r)return{kind:l.Unknown,nullable:!1};let s=Oe(r),n;if(r.discriminator&&(n={propertyName:r.discriminator.propertyName,mapping:r.discriminator.mapping}),r.oneOf&&r.oneOf.length>0){let c=r.oneOf.map(p=>this.schemaRefToIR(e,p));return{kind:l.OneOf,oneOf:c,nullable:s,discriminator:n}}if(r.anyOf&&r.anyOf.length>0){let c=r.anyOf.map(p=>this.schemaRefToIR(e,p));return{kind:l.AnyOf,anyOf:c,nullable:s,discriminator:n}}if(r.allOf&&r.allOf.length>0){let c=r.allOf.map(p=>this.schemaRefToIR(e,p));return{kind:l.AllOf,allOf:c,nullable:s,discriminator:n}}if(r.not){let c=this.schemaRefToIR(e,r.not);return{kind:l.Not,not:c,nullable:s,discriminator:n}}if(r.enum&&r.enum.length>0){let c=r.enum.map(u=>String(u)),p=this.inferEnumBaseKind(r);return{kind:l.Enum,enumValues:c,enumRaw:r.enum,enumBase:p,nullable:s,discriminator:n}}let a=ae(r),i=Array.isArray(a)?a.filter(c=>c!=="null")[0]:a;if(i)switch(i){case"string":return{kind:l.String,nullable:s,format:r.format,discriminator:n};case"integer":return{kind:l.Integer,nullable:s,discriminator:n};case"number":return{kind:l.Number,nullable:s,discriminator:n};case"boolean":return{kind:l.Boolean,nullable:s,discriminator:n};case"array":let c=r,p=this.schemaRefToIR(e,c.items);return{kind:l.Array,items:p,nullable:s,discriminator:n};case"object":let u=[];if(r.properties){let h=Object.keys(r.properties).sort();for(let b of h){let q=r.properties[b],F=this.schemaRefToIR(e,q),_=r.required?.includes(b)||!1;u.push({name:b,type:F,required:_,annotations:this.extractAnnotations(q)})}}let y;return r.additionalProperties&&typeof r.additionalProperties=="object"&&(y=this.schemaRefToIR(e,r.additionalProperties)),{kind:l.Object,properties:u,additionalProperties:y,nullable:s,discriminator:n}}return{kind:l.Unknown,nullable:s,discriminator:n}}extractAnnotations(e){if(!e||"$ref"in e)return{};let t=e;return{title:t.title,description:t.description,deprecated:t.deprecated,readOnly:t.readOnly,writeOnly:t.writeOnly,default:t.default,examples:t.example?Array.isArray(t.example)?t.example:[t.example]:void 0}}inferEnumBaseKind(e){let t=ae(e);if(t){let r=Array.isArray(t)?t.filter(s=>s!=="null")[0]:t;if(r)switch(r){case"string":return l.String;case"integer":return l.Integer;case"number":return l.Number;case"boolean":return l.Boolean}}if(e.enum&&e.enum.length>0){let r=e.enum[0];if(typeof r=="string")return l.String;if(typeof r=="number")return Number.isInteger(r)?l.Integer:l.Number;if(typeof r=="boolean")return l.Boolean}return l.Unknown}};P=at([(0,ve.Injectable)()],P);function k(o){if(o=o.trim(),o==="")return"";let e=o.split(/[^A-Za-z0-9]+/).filter(r=>r!==""),t=[];for(let r of e){let s=ce(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join("")}f(k,"toPascalCase");function $(o){let e=k(o);return e===""?"":e.charAt(0).toLowerCase()+e.slice(1)}f($,"toCamelCase");function L(o){if(o=o.trim(),o==="")return"";let e=o.split(/[^A-Za-z0-9]+/).filter(r=>r!==""),t=[];for(let r of e){let s=ce(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.toLowerCase()).join("_")}f(L,"toSnakeCase");function ke(o){if(o=o.trim(),o==="")return"";let e=o.split(/[^A-Za-z0-9]+/).filter(r=>r!==""),t=[];for(let r of e){let s=ce(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.toLowerCase()).join("-")}f(ke,"toKebabCase");function ce(o){if(o==="")return[];let e=[],t="",r=Array.from(o);for(let s=0;s<r.length;s++){let n=r[s],a=!1;s>0&&ie(n)&&(ie(r[s-1])?s<r.length-1&&!ie(r[s+1])&&(a=!0):a=!0),a&&t.length>0&&(e.push(t),t=""),t+=n}return t.length>0&&e.push(t),e}f(ce,"splitCamelCase");function ie(o){return o>="A"&&o<="Z"}f(ie,"isUppercase");function it(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(it,"_ts_decorate");function xe(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}f(xe,"_ts_metadata");var j=class{static{f(this,"IrBuilderService")}schemaConverter;constructor(e){this.schemaConverter=e}buildIR(e){let t=this.collectTags(e),r=this.collectSecuritySchemes(e),s=this.buildStructuredModels(e),n={};for(let i of t)n[i]=!0;let a=this.buildIRFromDoc(e,n);return a.securitySchemes=r,a.modelDefs=[...s,...a.modelDefs],a.openApiDocument=e,a}filterIR(e,t){let r=this.compileTagFilters(t.includeTags||[]),s=this.compileTagFilters(t.excludeTags||[]),n=[];for(let i of e.services){let c=[];for(let p of i.operations)this.shouldIncludeOperation(p.originalTags,r,s)&&c.push(p);c.length>0&&n.push({...i,operations:c})}let a={services:n,models:e.models,securitySchemes:e.securitySchemes,modelDefs:e.modelDefs,openApiDocument:e.openApiDocument};return a.modelDefs=this.filterUnusedModelDefs(a,e.modelDefs),a}detectStreamingContentType(e){let t=e.toLowerCase().split(";")[0].trim();return t==="text/event-stream"?{isStreaming:!0,format:"sse"}:t==="application/x-ndjson"||t==="application/x-jsonlines"||t==="application/jsonl"?{isStreaming:!0,format:"ndjson"}:t.includes("stream")||t.includes("chunked")?{isStreaming:!0,format:"chunked"}:{isStreaming:!1}}collectTags(e){let t=new Set;if(t.add("misc"),e.paths)for(let[r,s]of Object.entries(e.paths)){if(!s)continue;let n=[s.get,s.post,s.put,s.patch,s.delete,s.options,s.head,s.trace];for(let a of n)if(!(!a||!a.tags))for(let i of a.tags)t.add(i)}return Array.from(t).sort()}compileTagFilters(e){return e.map(t=>{try{return new RegExp(t)}catch(r){throw new Error(`Invalid tag filter pattern "${t}": ${r instanceof Error?r.message:String(r)}`)}})}shouldIncludeOperation(e,t,r){let s=t.length===0;if(t.length>0)for(let n of e){for(let a of t)if(a.test(n)){s=!0;break}if(s)break}if(!s)return!1;if(r.length>0){for(let n of e)for(let a of r)if(a.test(n))return!1}return!0}buildIRFromDoc(e,t){let r={};r.misc={tag:"misc",operations:[]};let s=[],n=new Set;if(e.components?.schemas)for(let c of Object.keys(e.components.schemas))n.add(c);let a=f((c,p,u,y)=>{r[c]||(r[c]={tag:c,operations:[]});let h=p.operationId||"",{pathParams:b,queryParams:q}=this.collectParams(e,p),{requestBody:F,extractedTypes:_}=this.extractRequestBodyWithTypes(e,p,c,h,u,n);s.push(..._);let{response:E,extractedTypes:U}=this.extractResponseWithTypes(e,p,c,h,u,n);s.push(...U);let K=p.tags&&p.tags.length>0?[...p.tags]:["misc"];r[c].operations.push({operationID:h,method:u,path:y,tag:c,originalTags:K,summary:p.summary||"",description:p.description||"",deprecated:p.deprecated||!1,pathParams:b,queryParams:q,requestBody:F,response:E})},"addOp");if(e.paths)for(let[c,p]of Object.entries(e.paths)){if(!p)continue;let u=[{op:p.get,method:"GET"},{op:p.post,method:"POST"},{op:p.put,method:"PUT"},{op:p.patch,method:"PATCH"},{op:p.delete,method:"DELETE"},{op:p.options,method:"OPTIONS"},{op:p.head,method:"HEAD"},{op:p.trace,method:"TRACE"}];for(let{op:y,method:h}of u){if(!y)continue;let b=this.firstAllowedTag(y.tags||[],t);b&&a(b,y,h,c)}}let i=Object.values(r);for(let c of i)c.operations.sort((p,u)=>p.path===u.path?p.method.localeCompare(u.method):p.path.localeCompare(u.path));return i.sort((c,p)=>c.tag.localeCompare(p.tag)),{services:i,models:[],securitySchemes:[],modelDefs:s}}deriveMethodName(e,t,r){if(e){let n=e.indexOf("Controller_"),a=n>=0?e.substring(n+11):e;return $(a)}let s=r.includes("{")&&r.includes("}");switch(t){case"GET":return s?"get":"list";case"POST":return"create";case"PUT":case"PATCH":return"update";case"DELETE":return"delete";default:return t.toLowerCase()}}firstAllowedTag(e,t){for(let r of e)if(t[r])return r;return e.length===0&&t.misc?"misc":""}collectSecuritySchemes(e){if(!e.components?.securitySchemes)return[];let t=Object.keys(e.components.securitySchemes).sort(),r=[];for(let s of t){let n=e.components.securitySchemes[s];if(!n||"$ref"in n)continue;let a={key:s,type:n.type};switch(n.type){case"http":a.scheme=n.scheme,a.bearerFormat=n.bearerFormat;break;case"apiKey":a.in=n.in,a.name=n.name;break;case"oauth2":case"openIdConnect":break}r.push(a)}return r}collectParams(e,t){let r=[],s=[];if(t.parameters)for(let n of t.parameters){if(!n||"$ref"in n)continue;let a=n,i=this.schemaConverter.schemaRefToIR(e,a.schema),c={name:a.name,required:a.required||!1,schema:i,description:a.description||""};a.in==="path"?r.push(c):a.in==="query"&&s.push(c)}return r.sort((n,a)=>n.name.localeCompare(a.name)),s.sort((n,a)=>n.name.localeCompare(a.name)),{pathParams:r,queryParams:s}}findMatchingComponentSchema(e,t){if(!t||!e.components?.schemas)return null;if("$ref"in t&&t.$ref){let s=t.$ref;if(s.startsWith("#/components/schemas/")){let n=s.replace("#/components/schemas/","");if(e.components.schemas[n])return n}}let r=this.schemaConverter.schemaRefToIR(e,t);for(let[s,n]of Object.entries(e.components.schemas)){let a=this.schemaConverter.schemaRefToIR(e,n);if(this.compareSchemas(r,a))return s}return null}compareSchemas(e,t){if(e.kind!==t.kind)return!1;if(e.kind===l.Ref&&t.kind===l.Ref)return e.ref===t.ref;if(e.kind===l.Object&&t.kind===l.Object){let r=e.properties||[],s=t.properties||[];if(r.length!==s.length)return!1;let n=new Map(r.map(i=>[i.name,{type:i.type,required:i.required}])),a=new Map(s.map(i=>[i.name,{type:i.type,required:i.required}]));if(n.size!==a.size)return!1;for(let[i,c]of n){let p=a.get(i);if(!p||c.required!==p.required||!this.compareSchemas(c.type,p.type))return!1}return!0}return e.kind===l.Array&&t.kind===l.Array?!e.items||!t.items?e.items===t.items:this.compareSchemas(e.items,t.items):!0}extractModelNameFromSchema(e){return e.kind===l.Ref&&e.ref?e.ref:e.kind===l.Array&&e.items&&e.items.kind===l.Ref&&e.items.ref?e.items.ref:null}generateTypeName(e,t,r,s,n,a){let i=this.extractModelNameFromSchema(e);if(i)return i;let c=this.deriveMethodName(r,s,n);return`${k(t)}${k(c)}${a}`}extractRequestBodyWithTypes(e,t,r,s,n,a){let i=[];if(!t.requestBody||"$ref"in t.requestBody)return{requestBody:null,extractedTypes:[]};let c=t.requestBody;if(c.content?.["application/json"]){let u=c.content["application/json"],y=this.schemaConverter.schemaRefToIR(e,u.schema),h=this.findMatchingComponentSchema(e,u.schema);if(h)return{requestBody:{contentType:"application/json",typeTS:"",schema:{kind:l.Ref,ref:h,nullable:!1},required:c.required||!1},extractedTypes:[]};let b=this.generateTypeName(y,r,s,n,t.path,"RequestBody");return y.kind===l.Object&&!a.has(b)?(a.add(b),i.push({name:b,schema:y,annotations:this.schemaConverter.extractAnnotations(u.schema)}),{requestBody:{contentType:"application/json",typeTS:"",schema:{kind:l.Ref,ref:b,nullable:!1},required:c.required||!1},extractedTypes:i}):{requestBody:{contentType:"application/json",typeTS:"",schema:y,required:c.required||!1},extractedTypes:[]}}return{requestBody:this.extractRequestBody(e,t),extractedTypes:[]}}extractRequestBody(e,t){if(!t.requestBody||"$ref"in t.requestBody)return null;let r=t.requestBody;if(r.content?.["application/json"]){let s=r.content["application/json"];return{contentType:"application/json",typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,s.schema),required:r.required||!1}}if(r.content?.["application/x-www-form-urlencoded"]){let s=r.content["application/x-www-form-urlencoded"];return{contentType:"application/x-www-form-urlencoded",typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,s.schema),required:r.required||!1}}if(r.content?.["multipart/form-data"])return{contentType:"multipart/form-data",typeTS:"",schema:{kind:"unknown",nullable:!1},required:r.required||!1};if(r.content){let s=Object.keys(r.content)[0],n=r.content[s];return{contentType:s,typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,n.schema),required:r.required||!1}}return null}extractResponseWithTypes(e,t,r,s,n,a){let i=[];if(!t.responses)return{response:{typeTS:"unknown",schema:{kind:l.Unknown,nullable:!1},description:"",isStreaming:!1,contentType:""},extractedTypes:[]};let c=["200","201"];for(let u of c){let y=t.responses[u];if(y&&!("$ref"in y)){let h=y;if(h.content){for(let[E,U]of Object.entries(h.content)){let K=this.detectStreamingContentType(E),V=this.schemaConverter.schemaRefToIR(e,U.schema);if(K.isStreaming)return{response:{typeTS:"",schema:V,description:h.description||"",isStreaming:!0,contentType:E,streamingFormat:K.format},extractedTypes:[]};if(E==="application/json"){let ue=this.findMatchingComponentSchema(e,U.schema);if(ue)return{response:{typeTS:"",schema:{kind:l.Ref,ref:ue,nullable:!1},description:h.description||"",isStreaming:!1,contentType:E},extractedTypes:[]};let Q=this.generateTypeName(V,r,s,n,t.path,"Response");return V.kind===l.Object&&!a.has(Q)?(a.add(Q),i.push({name:Q,schema:V,annotations:this.schemaConverter.extractAnnotations(U.schema)}),{response:{typeTS:"",schema:{kind:l.Ref,ref:Q,nullable:!1},description:h.description||"",isStreaming:!1,contentType:E},extractedTypes:i}):{response:{typeTS:"",schema:V,description:h.description||"",isStreaming:!1,contentType:E},extractedTypes:[]}}}let b=Object.keys(h.content)[0],q=h.content[b],F=this.schemaConverter.schemaRefToIR(e,q.schema),_=this.detectStreamingContentType(b);return{response:{typeTS:"",schema:F,description:h.description||"",isStreaming:_.isStreaming,contentType:b,streamingFormat:_.format},extractedTypes:[]}}return{response:{typeTS:"void",schema:{kind:l.Unknown,nullable:!1},description:h.description||"",isStreaming:!1,contentType:""},extractedTypes:[]}}}return{response:this.extractResponse(e,t),extractedTypes:[]}}extractResponse(e,t){if(!t.responses)return{typeTS:"unknown",schema:{kind:l.Unknown,nullable:!1},description:"",isStreaming:!1,contentType:""};let r=["200","201"];for(let s of r){let n=t.responses[s];if(n&&!("$ref"in n)){let a=n;if(a.content){for(let[u,y]of Object.entries(a.content)){let h=this.detectStreamingContentType(u);if(h.isStreaming)return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,y.schema),description:a.description||"",isStreaming:!0,contentType:u,streamingFormat:h.format}}if(a.content["application/json"]){let u=a.content["application/json"];return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,u.schema),description:a.description||"",isStreaming:!1,contentType:"application/json"}}let i=Object.keys(a.content)[0],c=a.content[i],p=this.detectStreamingContentType(i);return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,c.schema),description:a.description||"",isStreaming:p.isStreaming,contentType:i,streamingFormat:p.format}}return{typeTS:"void",schema:{kind:l.Unknown,nullable:!1},description:a.description||"",isStreaming:!1,contentType:""}}}for(let[s,n]of Object.entries(t.responses))if(s.length===3&&s[0]==="2"&&n&&!("$ref"in n)){let a=n;if(s==="204")return{typeTS:"void",schema:{kind:l.Unknown,nullable:!1},description:a.description||"",isStreaming:!1,contentType:""};if(a.content){for(let[u,y]of Object.entries(a.content)){let h=this.detectStreamingContentType(u);if(h.isStreaming)return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,y.schema),description:a.description||"",isStreaming:!0,contentType:u,streamingFormat:h.format}}if(a.content["application/json"]){let u=a.content["application/json"];return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,u.schema),description:a.description||"",isStreaming:!1,contentType:"application/json"}}let i=Object.keys(a.content)[0],c=a.content[i],p=this.detectStreamingContentType(i);return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,c.schema),description:a.description||"",isStreaming:p.isStreaming,contentType:i,streamingFormat:p.format}}}return{typeTS:"unknown",schema:{kind:l.Unknown,nullable:!1},description:"",isStreaming:!1,contentType:""}}buildStructuredModels(e){let t=[];if(!e.components?.schemas)return t;let r=Object.keys(e.components.schemas).sort(),s=new Set;for(let n of r)s.add(n);for(let n of r){let a=e.components.schemas[n],i=this.schemaConverter.schemaRefToIR(e,a);t.push({name:n,schema:i,annotations:this.schemaConverter.extractAnnotations(a)})}return t}filterUnusedModelDefs(e,t){let r=new Map;for(let i of t)r.set(i.name,i);let s=new Set,n=new Set,a=f(i=>{if(i.kind==="ref"&&i.ref){let c=i.ref;if(s.add(c),!n.has(c)){n.add(c);let p=r.get(c);p&&a(p.schema)}}if(i.items&&a(i.items),i.additionalProperties&&a(i.additionalProperties),i.oneOf)for(let c of i.oneOf)a(c);if(i.anyOf)for(let c of i.anyOf)a(c);if(i.allOf)for(let c of i.allOf)a(c);if(i.not&&a(i.not),i.properties)for(let c of i.properties)a(c.type)},"collectRefs");for(let i of e.services)for(let c of i.operations){for(let p of c.pathParams)a(p.schema);for(let p of c.queryParams)a(p.schema);c.requestBody&&a(c.requestBody.schema),a(c.response.schema)}return t.filter(i=>s.has(i.name))}};j=it([(0,Pe.Injectable)(),xe("design:type",Function),xe("design:paramtypes",[typeof P>"u"?Object:P])],j);var ee=require("@nestjs/common"),I=O(require("@apidevtools/swagger-parser")),fe=O(require("fs")),le=O(require("path"));function ct(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(ct,"_ts_decorate");var x=class o{static{f(this,"OpenApiService")}logger=new ee.Logger(o.name);async loadDocument(e){try{let t=null;try{t=new URL(e)}catch{}let r;if(t&&(t.protocol==="http:"||t.protocol==="https:")){this.logger.debug(`Loading OpenAPI spec from URL: ${e}`);let n=await fetch(e,{signal:AbortSignal.timeout(1e4)});if(!n.ok)throw new Error(`Failed to fetch OpenAPI spec: HTTP ${n.status} ${n.statusText}`);let a=await n.text(),i;try{i=JSON.parse(a)}catch{throw new Error("OpenAPI spec is not valid JSON")}try{let c=await I.default.parse(i);r=await I.default.bundle(c)}catch(c){this.logger.debug(`Bundle failed: ${c instanceof Error?c.message:String(c)}`),this.logger.debug("Attempting dereference directly");try{let p=await I.default.parse(i);r=await I.default.dereference(p)}catch(p){throw p}}}else{let n=le.resolve(e);if(!fe.existsSync(n))throw new Error(`OpenAPI spec file not found: ${n}`);this.logger.debug(`Loading OpenAPI spec from file: ${n}`);try{r=await I.default.bundle(n)}catch(a){this.logger.debug(`Bundle failed: ${a instanceof Error?a.message:String(a)}`),this.logger.debug("Attempting dereference directly"),r=await I.default.dereference(n)}}let s=we(r);if(!Te(s))throw new Error(`Unsupported OpenAPI version: ${r.openapi}. Only versions 3.0.x and 3.1.0 are supported.`);return this.logger.log(`Detected OpenAPI version: ${s} (${r.openapi})`),r}catch(t){throw t instanceof Error?new Error(`Failed to load OpenAPI document from ${e}: ${t.message}`):t}}async validateDocument(e){try{let t=null;try{t=new URL(e)}catch{}if(t&&(t.protocol==="http:"||t.protocol==="https:"))await I.default.validate(e);else{let r=le.resolve(e);if(!fe.existsSync(r))throw new Error(`OpenAPI spec file not found: ${r}`);await I.default.validate(r)}}catch(t){throw t instanceof Error?new Error(`Invalid OpenAPI document: ${t.message}`):t}}};x=ct([(0,ee.Injectable)()],x);function ft(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(ft,"_ts_decorate");function je(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}f(je,"_ts_metadata");var R=class o{static{f(this,"GeneratorService")}irBuilder;openApiService;logger=new te.Logger(o.name);generators=new Map;constructor(e,t){this.irBuilder=e,this.openApiService=t}register(e){this.generators.set(e.getType(),e),this.logger.debug(`Registered generator: ${e.getType()}`)}getGenerator(e){return this.generators.get(e)}getAvailableTypes(){return Array.from(this.generators.keys())}async generate(e,t){let r=this.getGenerator(t.type);if(!r)throw new Error(`Unsupported client type: ${t.type}`);let s=await this.openApiService.loadDocument(e),n=this.irBuilder.buildIR(s),a=this.irBuilder.filterIR(n,t);await r.generate(t,a)}};R=ft([(0,te.Injectable)(),je("design:type",Function),je("design:paramtypes",[typeof j>"u"?Object:j,typeof x>"u"?Object:x])],R);var Le=require("@nestjs/common");var Re=require("@nestjs/common");function lt(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(lt,"_ts_decorate");var B=class{static{f(this,"OpenApiModule")}};B=lt([(0,Re.Module)({providers:[x],exports:[x]})],B);var ne=require("@nestjs/common"),S=O(require("fs")),T=O(require("path")),d=O(require("handlebars"));var g=O(require("handlebars"));function Ce(){g.registerHelper("pascal",o=>k(o)),g.registerHelper("camel",o=>$(o)),g.registerHelper("kebab",o=>ke(o)),g.registerHelper("snake",o=>L(o)),g.registerHelper("serviceName",o=>k(o)+"Service"),g.registerHelper("serviceProp",o=>$(o)),g.registerHelper("fileBase",o=>L(o).toLowerCase()),g.registerHelper("eq",(o,e)=>o===e),g.registerHelper("ne",(o,e)=>o!==e),g.registerHelper("gt",(o,e)=>o>e),g.registerHelper("lt",(o,e)=>o<e),g.registerHelper("sub",(o,e)=>o-e),g.registerHelper("len",o=>Array.isArray(o)?o.length:0),g.registerHelper("or",function(...o){let e=o[o.length-1];return e&&e.fn?o.slice(0,-1).some(t=>t)?e.fn(this):e.inverse(this):o.slice(0,-1).some(t=>t)}),g.registerHelper("and",function(...o){let e=o[o.length-1];return e&&e.fn?o.slice(0,-1).every(t=>t)?e.fn(this):e.inverse(this):o.slice(0,-1).every(t=>t)}),g.registerHelper("replace",(o,e,t)=>typeof o!="string"?o:o.replace(new RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),t)),g.registerHelper("index",(o,e)=>o?.[e]),g.registerHelper("getServiceName",o=>{let e=o.split(".");return e.length>1?e[1]:o}),g.registerHelper("groupByNamespace",o=>{let e={};for(let t of o){let r=t.tag.split(".");if(r.length===1)e[""]||(e[""]=[]),e[""].push(t);else{let s=r[0];e[s]||(e[s]=[]),e[s].push(t)}}return e}),g.registerHelper("getRootServices",o=>o.filter(e=>!e.tag.includes("."))),g.registerHelper("dict",()=>({})),g.registerHelper("setVar",(o,e,t)=>(t&&t.data&&t.data.root&&(t.data.root[`_${o}`]=e),"")),g.registerHelper("getVar",(o,e)=>e&&e.data&&e.data.root&&e.data.root[`_${o}`]||!1),g.registerHelper("set",(o,e,t)=>(o&&typeof o=="object"&&(o[e]=t),"")),g.registerHelper("hasKey",(o,e)=>o&&typeof o=="object"&&e in o),g.registerHelper("lookup",(o,e)=>o&&typeof o=="object"?o[e]:void 0),g.registerHelper("reMatch",(o,e)=>{try{return new RegExp(o).test(e)}catch{return!1}})}f(Ce,"registerCommonHandlebarsHelpers");function pt(o){return o.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#x60;/g,"`").replace(/&#96;/g,"`").replace(/&amp;/g,"&")}f(pt,"decodeHtmlEntities");function C(o,e,t,r=!1){let s;switch(o.kind){case l.String:o.format==="binary"?s="Blob":s="string";break;case l.Number:case l.Integer:s="number";break;case l.Boolean:s="boolean";break;case l.Null:s="null";break;case l.Ref:o.ref?e?.some(n=>n.type===o.ref)||r&&t&&t.find(a=>a.name===o.ref)?s=o.ref:s="Schema."+o.ref:s="unknown";break;case l.Array:if(o.items){let n=C(o.items,e,t);n.includes(" | ")||n.includes(" & ")?s=`Array<(${n})>`:s=`Array<${n}>`}else s="Array<unknown>";break;case l.OneOf:o.oneOf?s=o.oneOf.map(a=>C(a,e,t)).join(" | "):s="unknown";break;case l.AnyOf:o.anyOf?s=o.anyOf.map(a=>C(a,e,t)).join(" | "):s="unknown";break;case l.AllOf:o.allOf?s=o.allOf.map(a=>C(a,e,t)).join(" & "):s="unknown";break;case l.Enum:if(o.enumValues&&o.enumValues.length>0){let n=[];switch(o.enumBase){case l.Number:case l.Integer:for(let a of o.enumValues)n.push(a);break;case l.Boolean:for(let a of o.enumValues)a==="true"||a==="false"?n.push(a):n.push(`"${a}"`);break;default:for(let a of o.enumValues)n.push(`"${a}"`)}s=n.join(" | ")}else s="unknown";break;case l.Object:if(!o.properties||o.properties.length===0)s="Record<string, unknown>";else{let n=[];for(let a of o.properties){let i=C(a.type,e,t,r);a.required?n.push(`${a.name}: ${i}`):n.push(`${a.name}?: ${i}`)}s="{ "+n.join("; ")+" }"}break;default:s="unknown"}return o.nullable&&s!=="null"&&(s+=" | null"),pt(s)}f(C,"schemaToTSType");function M(o){let e=o.path,t=e.includes("{")&&e.includes("}");if(o.operationID)return $(o.operationID);switch(o.method){case"GET":return t?"get":"list";case"POST":return"create";case"PUT":case"PATCH":return"update";case"DELETE":return"delete";default:return o.method.toLowerCase()}}f(M,"deriveMethodName");async function $e(o,e){if(o.operationIdParser)try{let r=await o.operationIdParser(e.operationID,e.method,e.path);if(r)return $(r)}catch{}let t=ut(e.operationID);return t?$(t):M(e)}f($e,"resolveMethodName");function ut(o){if(!o)return"";let e=o.indexOf("Controller_");return e>=0?o.substring(e+11):o}f(ut,"defaultParseOperationID");function Ie(o){let e=o.path,t="`";for(let r=0;r<e.length;r++){if(e[r]==="{"){let s=r+1;for(;s<e.length&&e[s]!=="}";)s++;if(s<e.length){let n=e.substring(r+1,s);t+=`\${encodeURIComponent(${n})}`,r=s;continue}}t+=e[r]}return t+="`",t}f(Ie,"buildPathTemplate");function Ae(o){let t=o.path.split("/"),r=[];for(let n of t)n!==""&&(n.startsWith("{")&&n.endsWith("}")||r.push(n));return`'${r.join("/")}'`}f(Ae,"buildQueryKeyBase");function re(o){let e=[],t=new Map;for(let s=0;s<o.pathParams.length;s++)t.set(o.pathParams[s].name,s);let r=o.path;for(let s=0;s<r.length;s++)if(r[s]==="{"){let n=s+1;for(;n<r.length&&r[n]!=="}";)n++;if(n<r.length){let a=r.substring(s+1,n),i=t.get(a);i!==void 0&&e.push(o.pathParams[i]),s=n;continue}}return e}f(re,"orderPathParams");function He(o,e,t,r=!1){return C(o,t,e,r)}f(He,"schemaToTSTypeWithSimpleTypes");function pe(o,e,t,r,s=!1){let n=[];for(let a of re(o))n.push(`${a.name}: ${He(a.schema,t,r,s)}`);if(o.queryParams.length>0){let a=k(o.tag)+k(e)+"Query";n.push(`query?: Schema.${a}`)}if(o.requestBody){let a=o.requestBody.required===!0?"":"?";n.push(`body${a}: ${He(o.requestBody.schema,t,r,s)}`)}return n.push('init?: Omit<RequestInit, "method" | "body">'),n}f(pe,"buildMethodSignature");function qe(o,e){if(!e||e.length===0)return[];let t=new Set,r=f(n=>{let a=o.find(i=>i.name===n);return a?a.schema:null},"resolveRef"),s=f(n=>{if(n.kind==="ref"&&n.ref)if(e.some(i=>i.type===n.ref))t.add(n.ref);else{let i=r(n.ref);i&&s(i)}else if(n.kind==="array"&&n.items)s(n.items);else if(n.kind==="object"&&n.properties)for(let a of n.properties)s(a.type);else if(n.kind==="oneOf"&&n.oneOf)for(let a of n.oneOf)s(a);else if(n.kind==="anyOf"&&n.anyOf)for(let a of n.anyOf)s(a);else if(n.kind==="allOf"&&n.allOf)for(let a of n.allOf)s(a)},"checkSchema");for(let n of o)s(n.schema);return e.filter(n=>t.has(n.type))}f(qe,"collectPredefinedTypesUsedInSchema");function Ee(o,e,t){if(!e||e.length===0)return[];let r=new Set,s=f(a=>{if(!t)return null;let i=t.find(c=>c.name===a);return i?i.schema:null},"resolveRef"),n=f(a=>{if(a.kind==="ref"&&a.ref)if(e.some(c=>c.type===a.ref))r.add(a.ref);else{let c=s(a.ref);c&&n(c)}else if(a.kind==="array"&&a.items)n(a.items);else if(a.kind==="object"&&a.properties)for(let i of a.properties)n(i.type);else if(a.kind==="oneOf"&&a.oneOf)for(let i of a.oneOf)n(i);else if(a.kind==="anyOf"&&a.anyOf)for(let i of a.anyOf)n(i);else if(a.kind==="allOf"&&a.allOf)for(let i of a.allOf)n(i)},"checkSchema");for(let a of o.operations)for(let i of a.pathParams)n(i.schema);return e.filter(a=>r.has(a.type))}f(Ee,"collectPredefinedTypesUsedInService");function Ne(o){let e=[];for(let t of re(o))e.push(t.name);return o.queryParams.length>0&&e.push("query"),o.requestBody&&e.push("body"),e}f(Ne,"queryKeyArgs");function Z(o){let e=!1;for(let t of o)if(!(t>="a"&&t<="z"||t>="A"&&t<="Z"||t>="0"&&t<="9"||t==="_"||t==="$")){e=!0;break}return o.length>0&&o[0]>="0"&&o[0]<="9"&&(e=!0),e?`"${o}"`:o}f(Z,"quoteTSPropertyName");function Fe(o){return o.response.isStreaming===!0}f(Fe,"isStreamingOperation");function De(o){let e=o.response.schema;return e.kind===l.Array&&e.items?C(e.items):o.response.streamingFormat==="sse"?"string":C(e)}f(De,"getStreamingItemType");function A(o,e="",t,r=!1){let s=e+" ",n;switch(o.kind){case l.String:n="z.string()",o.format==="date"||o.format==="date-time"?n+=".datetime()":o.format==="email"?n+=".email()":o.format==="uri"||o.format==="url"?n+=".url()":o.format==="uuid"&&(n+=".uuid()");break;case l.Number:n="z.number()";break;case l.Integer:n="z.number().int()";break;case l.Boolean:n="z.boolean()";break;case l.Null:n="z.null()";break;case l.Ref:o.ref?n=r?`${o.ref}Schema`:`Schema.${o.ref}Schema`:n="z.unknown()";break;case l.Array:o.items?n=`z.array(${A(o.items,s,t,r)})`:n="z.array(z.unknown())";break;case l.Object:if(!o.properties||o.properties.length===0)o.additionalProperties?n=`z.record(z.string(), ${A(o.additionalProperties,s,t,r)})`:n="z.record(z.string(), z.unknown())";else{let a=[];for(let c of o.properties){let p=A(c.type,s,t,r),u=Z(c.name);c.required?a.push(`${s}${u}: ${p}`):a.push(`${s}${u}: ${p}.optional()`)}let i=`z.object({
2
+ ${a.join(`,
3
3
  `)}
4
- ${e}})`}break;case p.Enum:n.enumValues&&n.enumValues.length>0?r=`z.enum([${n.enumValues.map(o=>o==="true"||o==="false"||/^-?[0-9]+(\.[0-9]+)?$/.test(o)?o:JSON.stringify(o)).join(", ")}])`:r="z.string()";break;case p.OneOf:n.oneOf&&n.oneOf.length>0?r=`z.union([${n.oneOf.map(o=>$(o,t)).join(", ")}])`:r="z.unknown()";break;case p.AnyOf:n.anyOf&&n.anyOf.length>0?r=`z.union([${n.anyOf.map(o=>$(o,t)).join(", ")}])`:r="z.unknown()";break;case p.AllOf:if(n.allOf&&n.allOf.length>0){let s=n.allOf.map(o=>$(o,t));r=s.join(".and(")+")".repeat(s.length-1)}else r="z.unknown()";break;default:r="z.unknown()"}return n.nullable&&r!=="z.null()"&&(r=`${r}.nullable()`),r}l($,"schemaToZodSchema");function tt(n){return n.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#x60;/g,"`").replace(/&#96;/g,"`").replace(/&amp;/g,"&")}l(tt,"decodeHtmlEntities");function H(n){let e;switch(n.kind){case p.String:n.format==="binary"?e="Blob":e="string";break;case p.Number:case p.Integer:e="number";break;case p.Boolean:e="boolean";break;case p.Null:e="null";break;case p.Ref:n.ref?e="Schema."+n.ref:e="unknown";break;case p.Array:if(n.items){let t=H(n.items);t.includes(" | ")||t.includes(" & ")?e=`Array<(${t})>`:e=`Array<${t}>`}else e="Array<unknown>";break;case p.OneOf:n.oneOf?e=n.oneOf.map(r=>H(r)).join(" | "):e="unknown";break;case p.AnyOf:n.anyOf?e=n.anyOf.map(r=>H(r)).join(" | "):e="unknown";break;case p.AllOf:n.allOf?e=n.allOf.map(r=>H(r)).join(" & "):e="unknown";break;case p.Enum:if(n.enumValues&&n.enumValues.length>0){let t=[];switch(n.enumBase){case p.Number:case p.Integer:for(let r of n.enumValues)t.push(r);break;case p.Boolean:for(let r of n.enumValues)r==="true"||r==="false"?t.push(r):t.push(`"${r}"`);break;default:for(let r of n.enumValues)t.push(`"${r}"`)}e=t.join(" | ")}else e="unknown";break;case p.Object:if(!n.properties||n.properties.length===0)e="Record<string, unknown>";else{let t=[];for(let r of n.properties){let s=H(r.type);r.required?t.push(`${r.name}: ${s}`):t.push(`${r.name}?: ${s}`)}e="{ "+t.join("; ")+" }"}break;default:e="unknown"}return n.nullable&&e!=="null"&&(e+=" | null"),tt(e)}l(H,"schemaToTSType");function B(n){let e=n.path,t=e.includes("{")&&e.includes("}");if(n.operationID)return A(n.operationID);switch(n.method){case"GET":return t?"get":"list";case"POST":return"create";case"PUT":case"PATCH":return"update";case"DELETE":return"delete";default:return n.method.toLowerCase()}}l(B,"deriveMethodName");async function He(n,e){if(n.operationIdParser)try{let r=await n.operationIdParser(e.operationID,e.method,e.path);if(r)return A(r)}catch{}let t=rt(e.operationID);return t?A(t):B(e)}l(He,"resolveMethodName");function rt(n){if(!n)return"";let e=n.indexOf("Controller_");return e>=0?n.substring(e+11):n}l(rt,"defaultParseOperationID");function ke(n){let e=n.path,t="`";for(let r=0;r<e.length;r++){if(e[r]==="{"){let s=r+1;for(;s<e.length&&e[s]!=="}";)s++;if(s<e.length){let o=e.substring(r+1,s);t+=`\${encodeURIComponent(${o})}`,r=s;continue}}t+=e[r]}return t+="`",t}l(ke,"buildPathTemplate");function $e(n){let t=n.path.split("/"),r=[];for(let o of t)o!==""&&(o.startsWith("{")&&o.endsWith("}")||r.push(o));return`'${r.join("/")}'`}l($e,"buildQueryKeyBase");function Y(n){let e=[],t=new Map;for(let s=0;s<n.pathParams.length;s++)t.set(n.pathParams[s].name,s);let r=n.path;for(let s=0;s<r.length;s++)if(r[s]==="{"){let o=s+1;for(;o<r.length&&r[o]!=="}";)o++;if(o<r.length){let i=r.substring(s+1,o),a=t.get(i);a!==void 0&&e.push(n.pathParams[a]),s=o;continue}}return e}l(Y,"orderPathParams");function le(n,e){let t=[];for(let r of Y(n))t.push(`${r.name}: ${H(r.schema)}`);if(n.queryParams.length>0){let r=v(n.tag)+v(e)+"Query";t.push(`query?: Schema.${r}`)}if(n.requestBody){let r=n.requestBody.required?"":"?";t.push(`body${r}: ${H(n.requestBody.schema)}`)}return t.push('init?: Omit<RequestInit, "method" | "body">'),t}l(le,"buildMethodSignature");function Ie(n){let e=[];for(let t of Y(n))e.push(t.name);return n.queryParams.length>0&&e.push("query"),n.requestBody&&e.push("body"),e}l(Ie,"queryKeyArgs");function Q(n){let e=!1;for(let t of n)if(!(t>="a"&&t<="z"||t>="A"&&t<="Z"||t>="0"&&t<="9"||t==="_"||t==="$")){e=!0;break}return n.length>0&&n[0]>="0"&&n[0]<="9"&&(e=!0),e?`"${n}"`:n}l(Q,"quoteTSPropertyName");function Ae(n){return n.response.isStreaming===!0}l(Ae,"isStreamingOperation");function qe(n){let e=n.response.schema;return e.kind===p.Array&&e.items?H(e.items):n.response.streamingFormat==="sse"?"string":H(e)}l(qe,"getStreamingItemType");function nt(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(nt,"_ts_decorate");function Ee(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}l(Ee,"_ts_metadata");var I=class n{static{l(this,"TypeScriptGeneratorService")}configService;logger=new X.Logger(n.name);constructor(e){this.configService=e}getType(){return"typescript"}async generate(e,t){let r=T.join(e.outDir,"src"),s=T.join(r,"services");await w.promises.mkdir(s,{recursive:!0});let o=await this.preprocessIR(e,t);this.registerHandlebarsHelpers(e),await this.generateClient(e,o,r),await this.generateIndex(e,o,r),await this.generateUtils(e,o,r),await this.generateServices(e,o,s),await this.generateSchema(e,o,r),await this.generateZodSchema(e,o,r),await this.generatePackageJson(e),await this.generateTsConfig(e),await this.generateReadme(e,o)}async preprocessIR(e,t){let r=await Promise.all(t.services.map(async s=>({...s,operations:await Promise.all(s.operations.map(async o=>{let i=await He(e,o);return{...o,_resolvedMethodName:i}}))})));return{...t,services:r}}registerHandlebarsHelpers(e){Pe(),h.registerHelper("methodName",t=>t._resolvedMethodName||B(t)),h.registerHelper("queryTypeName",t=>{let r=t._resolvedMethodName||B(t);return v(t.tag)+v(r)+"Query"}),h.registerHelper("pathTemplate",t=>{let r=ke(t);return new h.SafeString(r)}),h.registerHelper("queryKeyBase",t=>$e(t)),h.registerHelper("pathParamsInOrder",t=>Y(t)),h.registerHelper("methodSignature",t=>{let r=t._resolvedMethodName||B(t);return le(t,r).map(o=>new h.SafeString(o))}),h.registerHelper("methodSignatureNoInit",t=>{let r=t._resolvedMethodName||B(t);return le(t,r).slice(0,-1)}),h.registerHelper("queryKeyArgs",t=>Ie(t)),h.registerHelper("tsType",t=>t&&typeof t=="object"&&"kind"in t?H(t):"unknown"),h.registerHelper("stripSchemaNs",t=>t.replace(/^Schema\./,"")),h.registerHelper("tsTypeStripNs",t=>{if(t&&typeof t=="object"&&"kind"in t){let s=H(t).replace(/^Schema\./,"");return new h.SafeString(s)}return"unknown"}),h.registerHelper("decodeHtml",t=>typeof t!="string"?t:t.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#x60;/g,"`").replace(/&amp;/g,"&")),h.registerHelper("quotePropName",t=>Q(t)),h.registerHelper("zodSchema",t=>t&&typeof t=="object"&&"kind"in t?new h.SafeString($(t)):"z.unknown()"),h.registerHelper("isStreaming",t=>Ae(t)),h.registerHelper("streamingItemType",t=>new h.SafeString(qe(t)))}async renderTemplate(e,t,r,s){let o=s.templates?.[e];if(o){this.logger.debug(`Using template override for ${e}: ${o}`);try{await w.promises.access(o,w.constants.R_OK);let g=await w.promises.readFile(o,"utf-8"),S=h.compile(g)(t);await w.promises.writeFile(r,S,"utf-8");return}catch(g){let y=g instanceof Error?g.message:String(g);throw this.logger.error(`Template override file not found or not readable: ${o}. Error: ${y}`),new Error(`Template override file not found or not readable: ${o}`)}}let i=[T.join(__dirname,"generator/typescript/templates",e),T.join(__dirname,"templates",e),T.join(__dirname,"../typescript/templates",e),T.join(process.cwd(),"src/generator/typescript/templates",e)],a=null;for(let g of i)try{await w.promises.access(g),a=g,this.logger.debug(`Found template at: ${a}`);break}catch{this.logger.debug(`Template not found at: ${g}`)}if(!a)throw this.logger.error(`Template not found: ${e}`),this.logger.error(`Checked paths: ${i.join(", ")}`),this.logger.error(`__dirname: ${__dirname}`),new Error(`Template not found: ${e}`);let c=await w.promises.readFile(a,"utf-8"),u=h.compile(c)(t);await w.promises.writeFile(r,u,"utf-8")}async generateClient(e,t,r){let s=T.join(r,"client.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("client.ts.hbs",{Client:e,IR:t},s,e)}catch(o){let i=o instanceof Error?o.message:String(o);this.logger.warn(`Template client.ts.hbs not found: ${i}, using placeholder`),await w.promises.writeFile(s,"// Generated client - template rendering to be implemented","utf-8")}}async generateIndex(e,t,r){let s=T.join(r,"index.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("index.ts.hbs",{Client:e,IR:t},s,e)}catch{this.logger.warn("Template index.ts.hbs not found, using placeholder"),await w.promises.writeFile(s,"// Generated index - template rendering to be implemented","utf-8")}}async generateUtils(e,t,r){let s=T.join(r,"utils.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("utils.ts.hbs",{Client:e,IR:t},s,e)}catch{this.logger.warn("Template utils.ts.hbs not found, using placeholder"),await w.promises.writeFile(s,"// Generated utils - template rendering to be implemented","utf-8")}}async generateServices(e,t,r){for(let s of t.services){let o=T.join(r,`${M(s.tag).toLowerCase()}.ts`);if(!this.configService.shouldExcludeFile(e,o))try{await this.renderTemplate("service.ts.hbs",{Client:e,Service:s,IR:t},o,e)}catch{this.logger.warn("Template service.ts.hbs not found, using placeholder");let a=`// Generated service ${s.tag} - template rendering to be implemented`;await w.promises.writeFile(o,a,"utf-8")}}}async generateSchema(e,t,r){let s=T.join(r,"schema.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("schema.ts.hbs",{Client:e,IR:t},s,e)}catch(o){let i=o instanceof Error?o.message:String(o);this.logger.warn(`Template schema.ts.hbs error: ${i}, using placeholder`),await w.promises.writeFile(s,"// Generated schema - template rendering to be implemented","utf-8")}}async generateZodSchema(e,t,r){let s=T.join(r,"schema.zod.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("schema.zod.ts.hbs",{Client:e,IR:t},s,e)}catch(o){let i=o instanceof Error?o.message:String(o);this.logger.warn(`Template schema.zod.ts.hbs error: ${i}, using placeholder`),await w.promises.writeFile(s,"// Generated Zod schemas - template rendering to be implemented","utf-8")}}async generatePackageJson(e){let t=T.join(e.outDir,"package.json");if(!this.configService.shouldExcludeFile(e,t))try{await this.renderTemplate("package.json.hbs",{Client:e},t,e)}catch{this.logger.warn("Template package.json.hbs not found, using fallback");let s=JSON.stringify({name:e.packageName,version:"0.0.1",main:"dist/index.js",types:"dist/index.d.ts"},null,2);await w.promises.writeFile(t,s,"utf-8")}}async generateTsConfig(e){let t=T.join(e.outDir,"tsconfig.json");if(!this.configService.shouldExcludeFile(e,t))try{await this.renderTemplate("tsconfig.json.hbs",{Client:e},t,e)}catch{this.logger.warn("Template tsconfig.json.hbs not found, using fallback");let s=JSON.stringify({compilerOptions:{target:"ES2020",module:"commonjs",lib:["ES2020"],declaration:!0,outDir:"./dist",rootDir:"./src",strict:!0,esModuleInterop:!0,skipLibCheck:!0,forceConsistentCasingInFileNames:!0},include:["src/**/*"]},null,2);await w.promises.writeFile(t,s,"utf-8")}}async generateReadme(e,t){let r=T.join(e.outDir,"README.md");if(!this.configService.shouldExcludeFile(e,r))try{await this.renderTemplate("README.md.hbs",{Client:e,IR:t},r,e)}catch{this.logger.warn("Template README.md.hbs not found, using fallback");let o=`# ${e.name}
4
+ ${e}})`;if(o.additionalProperties){let c=A(o.additionalProperties,s,t,r);n=`${i}.catchall(${c})`}else n=i}break;case l.Enum:o.enumValues&&o.enumValues.length>0?n=`z.enum([${o.enumValues.map(i=>i==="true"||i==="false"||/^-?[0-9]+(\.[0-9]+)?$/.test(i)?i:JSON.stringify(i)).join(", ")}])`:n="z.string()";break;case l.OneOf:o.oneOf&&o.oneOf.length>0?n=`z.union([${o.oneOf.map(i=>A(i,s,t,r)).join(", ")}])`:n="z.unknown()";break;case l.AnyOf:o.anyOf&&o.anyOf.length>0?n=`z.union([${o.anyOf.map(i=>A(i,s,t,r)).join(", ")}])`:n="z.unknown()";break;case l.AllOf:if(o.allOf&&o.allOf.length>0){let a=o.allOf.map(i=>A(i,s,t,r));n=a.join(".and(")+")".repeat(a.length-1)}else n="z.unknown()";break;default:n="z.unknown()"}return o.nullable&&n!=="z.null()"&&(n=`${n}.nullable()`),n}f(A,"schemaToZodSchema");var _e=require("child_process"),ze=require("util"),Me=O(require("path")),Ue=O(require("fs"));var Be=(0,ze.promisify)(_e.exec);async function Ve(o,e){let t=e||console;try{try{await Be("npx --yes prettier --version",{cwd:o,maxBuffer:10*1024*1024})}catch{t.warn?.("Prettier is not available. Skipping code formatting. Install prettier to enable formatting.");return}let r=Me.join(o,"src");if(!Ue.existsSync(r)){t.warn?.(`Source directory not found at ${r}. Skipping formatting.`);return}t.debug?.(`Formatting TypeScript files in ${r}...`);let{stdout:s,stderr:n}=await Be('npx --yes prettier --write "src/**/*.{ts,tsx}"',{cwd:o,maxBuffer:10*1024*1024});s&&t.debug?.(s),n&&!n.includes("warning")&&t.warn?.(n),t.debug?.("Code formatting completed successfully.")}catch(r){let s=r instanceof Error?r.message:String(r);t.warn?.(`Failed to format code with Prettier: ${s}. Generated code will not be formatted.`)}}f(Ve,"formatWithPrettier");function mt(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(mt,"_ts_decorate");function We(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}f(We,"_ts_metadata");var H=class o{static{f(this,"TypeScriptGeneratorService")}configService;logger=new ne.Logger(o.name);constructor(e){this.configService=e}getType(){return"typescript"}async generate(e,t){if(!e.defaultBaseURL&&t.openApiDocument?.servers){let i=t.openApiDocument.servers;Array.isArray(i)&&i.length>0&&(e.defaultBaseURL=i[0].url||"")}let r=T.join(e.outDir,"src"),s=T.join(r,"services");await S.promises.mkdir(s,{recursive:!0});let n=await this.preprocessIR(e,t);this.registerHandlebarsHelpers(e),await this.generateClient(e,n,r),await this.generateIndex(e,n,r),await this.generateUtils(e,n,r),await this.generateServices(e,n,s),await this.generateSchema(e,n,r),await this.generateZodSchema(e,n,r),await this.generatePackageJson(e),await this.generateTsConfig(e),await this.generateReadme(e,n),e.formatCode!==!1?(await this.generatePrettierConfig(e),this.logger.debug("Formatting generated TypeScript files with Prettier..."),await Ve(e.outDir,this.logger)):this.logger.debug("Code formatting is disabled for this client.")}async preprocessIR(e,t){let r=await Promise.all(t.services.map(async s=>({...s,operations:await Promise.all(s.operations.map(async n=>{let a=await $e(e,n);return{...n,_resolvedMethodName:a}}))})));return{...t,services:r}}registerHandlebarsHelpers(e){Ce(),d.registerHelper("methodName",t=>t._resolvedMethodName||M(t)),d.registerHelper("queryTypeName",t=>{let r=t._resolvedMethodName||M(t);return k(t.tag)+k(r)+"Query"}),d.registerHelper("pathTemplate",t=>{let r=Ie(t);return new d.SafeString(r)}),d.registerHelper("queryKeyBase",t=>{let r=Ae(t);return new d.SafeString(r)}),d.registerHelper("pathParamsInOrder",t=>re(t)),d.registerHelper("methodSignature",(t,r)=>{let s=t._resolvedMethodName||M(t),n=r?.data?.root?.IR?.modelDefs||[],a=r?.data?.root?.PredefinedTypes||[],i=r?.data?.root?.isSameFile||!1;return pe(t,s,n,a,i).map(p=>new d.SafeString(p))}),d.registerHelper("methodSignatureNoInit",(t,r)=>{let s=t._resolvedMethodName||M(t),n=r?.data?.root?.IR?.modelDefs||[],a=r?.data?.root?.PredefinedTypes||[],i=r?.data?.root?.isSameFile||!1;return pe(t,s,n,a,i).slice(0,-1)}),d.registerHelper("queryKeyArgs",t=>Ne(t).map(s=>new d.SafeString(s))),d.registerHelper("tsType",(t,r)=>{if(t&&typeof t=="object"&&"kind"in t){let s=r?.data?.root?.PredefinedTypes||[],n=r?.data?.root?.IR?.modelDefs||[],a=r?.data?.root?.isSameFile||!1;return C(t,s,n,a)}return"unknown"}),d.registerHelper("stripSchemaNs",t=>t.replace(/^Schema\./,"")),d.registerHelper("tsTypeStripNs",(t,r)=>{let s=r?.data?.root?.PredefinedTypes||[],n=r?.data?.root?.IR?.modelDefs||[],a=r?.data?.root?.isSameFile||!1;if(t&&typeof t=="object"&&"kind"in t){let c=C(t,s,n,a).replace(/Schema\./g,"");return new d.SafeString(c)}if(typeof t=="string"){if(t.startsWith("Schema.")){let i=t.replace(/^Schema\./,"");return s.find(p=>p.type===i)?new d.SafeString(i):new d.SafeString(i)}return new d.SafeString(t)}return"unknown"}),d.registerHelper("isPredefinedType",(t,r)=>(r?.data?.root?.PredefinedTypes||[]).some(n=>n.type===t)),d.registerHelper("getPredefinedType",(t,r)=>(r?.data?.root?.PredefinedTypes||[]).find(n=>n.type===t)),d.registerHelper("groupByPackage",t=>{let r={};for(let s of t||[])r[s.package]||(r[s.package]={package:s.package,types:[]}),r[s.package].types.push(s.type);return Object.values(r)}),d.registerHelper("getServicePredefinedTypes",(t,r)=>{let s=r?.data?.root?.PredefinedTypes||[],n=r?.data?.root?.IR?.modelDefs||[];return Ee(t,s,n)}),d.registerHelper("getSchemaPredefinedTypes",t=>{let r=t?.data?.root?.PredefinedTypes||[],s=t?.data?.root?.IR?.modelDefs||[];return qe(s,r)}),d.registerHelper("joinTypes",t=>t.join(", ")),d.registerHelper("uniquePackages",t=>{let r=new Set;for(let s of t||[])s.package&&r.add(s.package);return Array.from(r)}),d.registerHelper("isPredefinedPackage",(t,r)=>r?r.some(s=>s.package===t):!1),d.registerHelper("getAllDependencies",t=>{let r={"@blimu/fetch":"^0.2.0",zod:"^4.3.5"};if(t.predefinedTypes)for(let s of t.predefinedTypes)s.package&&!r[s.package]&&(r[s.package]=t.dependencies?.[s.package]||"*");if(t.dependencies)for(let[s,n]of Object.entries(t.dependencies))s!=="zod"&&!r[s]&&(r[s]=n);return r}),d.registerHelper("decodeHtml",t=>{if(typeof t!="string")return t;let r=t.replace(/&amp;#x60;/g,"&#x60;").replace(/&amp;#96;/g,"&#96;").replace(/&amp;quot;/g,"&quot;").replace(/&amp;lt;/g,"&lt;").replace(/&amp;gt;/g,"&gt;");return r=r.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#x60;/g,"`").replace(/&#96;/g,"`").replace(/&amp;/g,"&"),new d.SafeString(r)}),d.registerHelper("quotePropName",t=>Z(t)),d.registerHelper("zodSchema",(t,r)=>{if(t&&typeof t=="object"&&"kind"in t){let s=r?.data?.root?.IR?.modelDefs||[],n=r?.data?.root?._templateName==="schema.zod.ts.hbs";return new d.SafeString(A(t,"",s,n))}return"z.unknown()"}),d.registerHelper("isStreaming",t=>Fe(t)),d.registerHelper("streamingItemType",t=>new d.SafeString(De(t)))}async renderTemplate(e,t,r,s){let n=s.templates?.[e];if(n){this.logger.debug(`Using template override for ${e}: ${n}`);try{await S.promises.access(n,S.constants.R_OK);let h=await S.promises.readFile(n,"utf-8"),b=d.compile(h),q={...t,_templateName:e},F=b(q);await S.promises.writeFile(r,F,"utf-8");return}catch(h){let b=h instanceof Error?h.message:String(h);throw this.logger.error(`Template override file not found or not readable: ${n}. Error: ${b}`),new Error(`Template override file not found or not readable: ${n}`)}}let a=[T.join(__dirname,"generator/typescript/templates",e),T.join(__dirname,"templates",e),T.join(__dirname,"../typescript/templates",e),T.join(process.cwd(),"src/generator/typescript/templates",e)],i=null;for(let h of a)try{await S.promises.access(h),i=h,this.logger.debug(`Found template at: ${i}`);break}catch{this.logger.debug(`Template not found at: ${h}`)}if(!i)throw this.logger.error(`Template not found: ${e}`),this.logger.error(`Checked paths: ${a.join(", ")}`),this.logger.error(`__dirname: ${__dirname}`),new Error(`Template not found: ${e}`);let c=await S.promises.readFile(i,"utf-8"),p=d.compile(c),u={...t,_templateName:e},y=p(u);await S.promises.writeFile(r,y,"utf-8")}async generateClient(e,t,r){let s=T.join(r,"client.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("client.ts.hbs",{Client:e,IR:t},s,e)}catch(n){let a=n instanceof Error?n.message:String(n);this.logger.warn(`Template client.ts.hbs not found: ${a}, using placeholder`),await S.promises.writeFile(s,"// Generated client - template rendering to be implemented","utf-8")}}async generateIndex(e,t,r){let s=T.join(r,"index.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("index.ts.hbs",{Client:e,IR:t},s,e)}catch{this.logger.warn("Template index.ts.hbs not found, using placeholder"),await S.promises.writeFile(s,"// Generated index - template rendering to be implemented","utf-8")}}async generateUtils(e,t,r){let s=T.join(r,"utils.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("utils.ts.hbs",{Client:e,IR:t},s,e)}catch{this.logger.warn("Template utils.ts.hbs not found, using placeholder"),await S.promises.writeFile(s,"// Generated utils - template rendering to be implemented","utf-8")}}async generateServices(e,t,r){for(let s of t.services){let n=T.join(r,`${L(s.tag).toLowerCase()}.ts`);if(!this.configService.shouldExcludeFile(e,n))try{await this.renderTemplate("service.ts.hbs",{Client:e,Service:s,IR:t,PredefinedTypes:e.predefinedTypes||[],isSameFile:!1},n,e)}catch{this.logger.warn("Template service.ts.hbs not found, using placeholder");let i=`// Generated service ${s.tag} - template rendering to be implemented`;await S.promises.writeFile(n,i,"utf-8")}}}async generateSchema(e,t,r){let s=T.join(r,"schema.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("schema.ts.hbs",{Client:e,IR:t,PredefinedTypes:e.predefinedTypes||[],isSameFile:!0},s,e)}catch(n){let a=n instanceof Error?n.message:String(n);this.logger.warn(`Template schema.ts.hbs error: ${a}, using placeholder`),await S.promises.writeFile(s,"// Generated schema - template rendering to be implemented","utf-8")}}async generateZodSchema(e,t,r){let s=T.join(r,"schema.zod.ts");if(!this.configService.shouldExcludeFile(e,s))try{await this.renderTemplate("schema.zod.ts.hbs",{Client:e,IR:t},s,e)}catch(n){let a=n instanceof Error?n.message:String(n);this.logger.warn(`Template schema.zod.ts.hbs error: ${a}, using placeholder`),await S.promises.writeFile(s,"// Generated Zod schemas - template rendering to be implemented","utf-8")}}async generatePackageJson(e){let t=T.join(e.outDir,"package.json");if(!this.configService.shouldExcludeFile(e,t))try{await this.renderTemplate("package.json.hbs",{Client:e},t,e)}catch{this.logger.warn("Template package.json.hbs not found, using fallback");let s=JSON.stringify({name:e.packageName,version:"0.0.1",main:"dist/index.js",types:"dist/index.d.ts"},null,2);await S.promises.writeFile(t,s,"utf-8")}}async generateTsConfig(e){let t=T.join(e.outDir,"tsconfig.json");if(!this.configService.shouldExcludeFile(e,t))try{await this.renderTemplate("tsconfig.json.hbs",{Client:e},t,e)}catch{this.logger.warn("Template tsconfig.json.hbs not found, using fallback");let s=JSON.stringify({compilerOptions:{target:"ES2020",module:"commonjs",lib:["ES2020"],declaration:!0,outDir:"./dist",rootDir:"./src",strict:!0,esModuleInterop:!0,skipLibCheck:!0,forceConsistentCasingInFileNames:!0},include:["src/**/*"]},null,2);await S.promises.writeFile(t,s,"utf-8")}}async generateReadme(e,t){let r=T.join(e.outDir,"README.md");if(!this.configService.shouldExcludeFile(e,r))try{await this.renderTemplate("README.md.hbs",{Client:e,IR:t},r,e)}catch{this.logger.warn("Template README.md.hbs not found, using fallback");let n=`# ${e.name}
5
5
 
6
- Generated SDK from OpenAPI specification.`;await w.promises.writeFile(r,o,"utf-8")}}};I=nt([(0,X.Injectable)(),Ee("design:type",Function),Ee("design:paramtypes",[typeof x>"u"?Object:x])],I);function ot(n,e,t,r){var s=arguments.length,o=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(n,e,t,r);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(o=(s<3?i(o):s>3?i(e,t,o):i(e,t))||o);return s>3&&o&&Object.defineProperty(e,t,o),o}l(ot,"_ts_decorate");function Ne(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}l(Ne,"_ts_metadata");var L=class{static{l(this,"GeneratorModule")}generatorService;typeScriptGenerator;constructor(e,t){this.generatorService=e,this.typeScriptGenerator=t,this.generatorService.register(this.typeScriptGenerator)}};L=ot([(0,De.Module)({imports:[D,N],providers:[P,R,C,I],exports:[P,R,C]}),Ne("design:type",Function),Ne("design:paramtypes",[typeof P>"u"?Object:P,typeof I>"u"?Object:I])],L);var Fe=k(require("fs"));async function st(n,e){let t;typeof n=="string"?t=await F(n):t=n;let r=new x,s=new j,o=new C,i=new R(o),a=new P(i,s),c=new I(r);a.register(c);for(let f of t.clients)e?.client&&f.name!==e.client||(await Fe.promises.mkdir(f.outDir,{recursive:!0}),await a.generate(t.spec,f))}l(st,"generate");async function it(n){return F(n)}l(it,"loadConfig");0&&(module.exports={ClientSchema,ConfigModule,ConfigSchema,ConfigService,GeneratorModule,GeneratorService,IRSchemaKind,OpenApiModule,OpenApiService,TYPESCRIPT_TEMPLATE_NAMES,TypeAugmentationOptionsSchema,TypeScriptClientSchema,defineConfig,generate,loadConfig,loadMjsConfig});
6
+ Generated SDK from OpenAPI specification.`;await S.promises.writeFile(r,n,"utf-8")}}async generatePrettierConfig(e){let t=T.join(e.outDir,".prettierrc");if(!this.configService.shouldExcludeFile(e,t))try{await this.renderTemplate(".prettierrc.hbs",{Client:e},t,e)}catch{this.logger.warn("Template .prettierrc.hbs not found, using fallback");let s=JSON.stringify({semi:!0,trailingComma:"es5",singleQuote:!0,printWidth:80,tabWidth:2,useTabs:!1},null,2);await S.promises.writeFile(t,s,"utf-8")}}};H=mt([(0,ne.Injectable)(),We("design:type",Function),We("design:paramtypes",[typeof v>"u"?Object:v])],H);function dt(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var i=o.length-1;i>=0;i--)(a=o[i])&&(n=(s<3?a(n):s>3?a(e,t,n):a(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}f(dt,"_ts_decorate");function Ge(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}f(Ge,"_ts_metadata");var J=class{static{f(this,"GeneratorModule")}generatorService;typeScriptGenerator;constructor(e,t){this.generatorService=e,this.typeScriptGenerator=t,this.generatorService.register(this.typeScriptGenerator)}};J=dt([(0,Le.Module)({imports:[B,D],providers:[R,j,P,H],exports:[R,j,P]}),Ge("design:type",Function),Ge("design:paramtypes",[typeof R>"u"?Object:R,typeof H>"u"?Object:H])],J);var N=O(require("path")),Ze=O(require("fs"));async function ht(o,e){let t,r;if(typeof o=="string"){let u=N.isAbsolute(o)?o:N.resolve(o);t=await z(u),r=e?.baseDir??N.dirname(u)}else t=o,r=e?.baseDir;let s=new v,n=new x,a=new P,i=new j(a),c=new R(i,n),p=new H(s);c.register(p);for(let u of t.clients){if(e?.client&&u.name!==e.client)continue;let y=r?N.resolve(r,u.outDir):N.resolve(u.outDir);await Ze.promises.mkdir(y,{recursive:!0});let h={...u,outDir:y};await c.generate(t.spec,h)}}f(ht,"generate");async function gt(o){return z(o)}f(gt,"loadConfig");0&&(module.exports={ClientSchema,ConfigModule,ConfigSchema,ConfigService,GeneratorModule,GeneratorService,IRSchemaKind,OpenApiModule,OpenApiService,PredefinedTypeSchema,TYPESCRIPT_TEMPLATE_NAMES,TypeScriptClientSchema,defineConfig,generate,loadConfig,loadMjsConfig});
7
7
  //# sourceMappingURL=index.js.map