@blimu/codegen 0.1.0 → 0.1.1

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.mjs CHANGED
@@ -1,7 +1,7 @@
1
- var Oe=Object.defineProperty;var l=(n,e)=>Oe(n,"name",{value:e,configurable:!0});import{z as m}from"zod";var xe=m.object({moduleName:m.string().optional(),namespace:m.string().optional(),typeNames:m.array(m.string()).optional(),outputFileName:m.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"],je=m.object({type:m.string().min(1,"Type is required"),outDir:m.string().min(1,"OutDir is required"),name:m.string().min(1,"Name is required"),includeTags:m.array(m.string()).optional(),excludeTags:m.array(m.string()).optional(),operationIdParser:m.custom().optional(),preCommand:m.array(m.string()).optional(),postCommand:m.array(m.string()).optional(),defaultBaseURL:m.string().optional(),exclude:m.array(m.string()).optional(),typeAugmentation:xe.optional()}),Ce=je.extend({type:m.literal("typescript"),packageName:m.string().min(1,"PackageName is required"),moduleName:m.string().optional(),includeQueryKeys:m.boolean().optional(),templates:m.record(m.string(),m.string()).refine(n=>Object.keys(n).every(e=>oe.includes(e)),{message:`Template names must be one of: ${oe.join(", ")}`}).optional()}),Re=m.discriminatedUnion("type",[Ce]),se=m.object({spec:m.string().min(1,"Spec is required"),name:m.string().optional(),clients:m.array(Re).min(1,"At least one client is required")});import{Injectable as ke,Logger as $e}from"@nestjs/common";import*as ie from"fs";import*as b from"path";import{pathToFileURL as Pe}from"url";import*as U from"path";async function B(n){try{let e=U.isAbsolute(n)?n:U.resolve(n),r=await import(Pe(e).href),s=r.default||r;if(!s)throw new Error(`Config file must export a default export or named export: ${n}`);return se.parse(s)}catch(e){throw e instanceof Error?new Error(`Failed to load MJS config from ${n}: ${e.message}`):e}}l(B,"loadMjsConfig");function He(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(He,"_ts_decorate");var x=class n{static{l(this,"ConfigService")}logger=new $e(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 ie.promises.access(r),r}catch{}e=b.dirname(e)}return null}async load(e){try{let t=await B(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=He([ke()],x);import{Module as Ae}from"@nestjs/common";function Ie(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(Ie,"_ts_decorate");var E=class{static{l(this,"ConfigModule")}};E=Ie([Ae({providers:[x],exports:[x]})],E);function dt(n){return n}l(dt,"defineConfig");var f=(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})({});import{Injectable as Me,Logger as Ue}from"@nestjs/common";import{Injectable as De}from"@nestjs/common";import{Injectable as Ee}from"@nestjs/common";function ae(n){let e=n.openapi;return typeof e!="string"?"unknown":e.startsWith("3.1")?"3.1":e.startsWith("3.0")?"3.0":"unknown"}l(ae,"detectOpenAPIVersion");function ce(n){return n==="3.0"||n==="3.1"}l(ce,"isSupportedVersion");function J(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?J(n,s):s}}return}return e}}l(J,"getSchemaFromRef");function le(n){return n?"nullable"in n&&n.nullable===!0?!0:"type"in n&&Array.isArray(n.type)?n.type.includes("null"):!1:!1}l(le,"isSchemaNullable");function K(n){if(!(!n||!("type"in n)))return n.type}l(K,"getSchemaType");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");var j=class{static{l(this,"SchemaConverterService")}schemaRefToIR(e,t){if(!t)return{kind:f.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:f.Ref,ref:u,nullable:!1}}let p=c.split("/");if(p.length>0){let u=p[p.length-1];if(u)return{kind:f.Ref,ref:u,nullable:!1}}return{kind:f.Unknown,nullable:!1}}let r=J(e,t);if(!r)return{kind:f.Unknown,nullable:!1};let s=le(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(p=>this.schemaRefToIR(e,p));return{kind:f.OneOf,oneOf:c,nullable:s,discriminator:o}}if(r.anyOf&&r.anyOf.length>0){let c=r.anyOf.map(p=>this.schemaRefToIR(e,p));return{kind:f.AnyOf,anyOf:c,nullable:s,discriminator:o}}if(r.allOf&&r.allOf.length>0){let c=r.allOf.map(p=>this.schemaRefToIR(e,p));return{kind:f.AllOf,allOf:c,nullable:s,discriminator:o}}if(r.not){let c=this.schemaRefToIR(e,r.not);return{kind:f.Not,not:c,nullable:s,discriminator:o}}if(r.enum&&r.enum.length>0){let c=r.enum.map(u=>String(u)),p=this.inferEnumBaseKind(r);return{kind:f.Enum,enumValues:c,enumRaw:r.enum,enumBase:p,nullable:s,discriminator:o}}let i=K(r),a=Array.isArray(i)?i.filter(c=>c!=="null")[0]:i;if(a)switch(a){case"string":return{kind:f.String,nullable:s,format:r.format,discriminator:o};case"integer":return{kind:f.Integer,nullable:s,discriminator:o};case"number":return{kind:f.Number,nullable:s,discriminator:o};case"boolean":return{kind:f.Boolean,nullable:s,discriminator:o};case"array":let c=r,p=this.schemaRefToIR(e,c.items);return{kind:f.Array,items:p,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],A=this.schemaRefToIR(e,O),F=r.required?.includes(S)||!1;u.push({name:S,type:A,required:F,annotations:this.extractAnnotations(O)})}}let g;return r.additionalProperties&&typeof r.additionalProperties=="object"&&(g=this.schemaRefToIR(e,r.additionalProperties)),{kind:f.Object,properties:u,additionalProperties:g,nullable:s,discriminator:o}}return{kind:f.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=K(e);if(t){let r=Array.isArray(t)?t.filter(s=>s!=="null")[0]:t;if(r)switch(r){case"string":return f.String;case"integer":return f.Integer;case"number":return f.Number;case"boolean":return f.Boolean}}if(e.enum&&e.enum.length>0){let r=e.enum[0];if(typeof r=="string")return f.String;if(typeof r=="number")return Number.isInteger(r)?f.Integer:f.Number;if(typeof r=="boolean")return f.Boolean}return f.Unknown}};j=qe([Ee()],j);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=Y(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join("")}l(v,"toPascalCase");function I(n){let e=v(n);return e===""?"":e.charAt(0).toLowerCase()+e.slice(1)}l(I,"toCamelCase");function _(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=Y(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.toLowerCase()).join("_")}l(_,"toSnakeCase");function pe(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=Y(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.toLowerCase()).join("-")}l(pe,"toKebabCase");function Y(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&&Q(o)&&(Q(r[s-1])?s<r.length-1&&!Q(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(Y,"splitCamelCase");function Q(n){return n>="A"&&n<="Z"}l(Q,"isUppercase");function Ne(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(Ne,"_ts_decorate");function fe(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}l(fe,"_ts_metadata");var C=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 p of a.operations)this.shouldIncludeOperation(p.originalTags,r,s)&&c.push(p);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,p,u,g)=>{r[c]||(r[c]={tag:c,operations:[]});let y=p.operationId||"",{pathParams:S,queryParams:O}=this.collectParams(e,p),{requestBody:A,extractedTypes:F}=this.extractRequestBodyWithTypes(e,p,c,y,u,o);s.push(...F);let{response:W,extractedTypes:z}=this.extractResponseWithTypes(e,p,c,y,u,o);s.push(...z);let q=p.tags&&p.tags.length>0?[...p.tags]:["misc"];r[c].operations.push({operationID:y,method:u,path:g,tag:c,originalTags:q,summary:p.summary||"",description:p.description||"",deprecated:p.deprecated||!1,pathParams:S,queryParams:O,requestBody:A,response:W})},"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: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((p,u)=>p.path===u.path?p.method.localeCompare(u.method):p.path.localeCompare(u.path));return a.sort((c,p)=>c.tag.localeCompare(p.tag)),{services:a,models:[],securitySchemes:[],modelDefs:s}}deriveMethodName(e,t,r){if(e)return I(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,p=this.deriveMethodName(s,o,t.path),u=`${v(r)}${v(p)}RequestBody`;if(c.content?.["application/json"]){let y=c.content["application/json"],S=this.schemaConverter.schemaRefToIR(e,y.schema);return S.kind===f.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:f.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:f.Unknown,nullable:!1},description:"",isStreaming:!1,contentType:""},extractedTypes:[]};let c=this.deriveMethodName(s,o,t.path),p=`${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[q,re]of Object.entries(O.content)){let ne=this.detectStreamingContentType(q),M=this.schemaConverter.schemaRefToIR(e,re.schema);if(ne.isStreaming)return{response:{typeTS:"",schema:M,description:O.description||"",isStreaming:!0,contentType:q,streamingFormat:ne.format},extractedTypes:[]};if(q==="application/json")return M.kind===f.Object&&!i.has(p)?(i.add(p),a.push({name:p,schema:M,annotations:this.schemaConverter.extractAnnotations(re.schema)}),{response:{typeTS:"",schema:{kind:f.Ref,ref:p,nullable:!1},description:O.description||"",isStreaming:!1,contentType:q},extractedTypes:a}):{response:{typeTS:"",schema:M,description:O.description||"",isStreaming:!1,contentType:q},extractedTypes:[]}}let A=Object.keys(O.content)[0],F=O.content[A],W=this.schemaConverter.schemaRefToIR(e,F.schema),z=this.detectStreamingContentType(A);return{response:{typeTS:"",schema:W,description:O.description||"",isStreaming:z.isStreaming,contentType:A,streamingFormat:z.format},extractedTypes:[]}}return{response:{typeTS:"void",schema:{kind:f.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:f.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],p=this.detectStreamingContentType(a);return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,c.schema),description:i.description||"",isStreaming:p.isStreaming,contentType:a,streamingFormat:p.format}}return{typeTS:"void",schema:{kind:f.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:f.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],p=this.detectStreamingContentType(a);return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,c.schema),description:i.description||"",isStreaming:p.isStreaming,contentType:a,streamingFormat:p.format}}}return{typeTS:"unknown",schema:{kind:f.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 p=r.get(c);p&&i(p.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 p of c.pathParams)i(p.schema);for(let p of c.queryParams)i(p.schema);c.requestBody&&i(c.requestBody.schema),i(c.response.schema)}return t.filter(a=>s.has(a.name))}};C=Ne([De(),fe("design:type",Function),fe("design:paramtypes",[typeof j>"u"?Object:j])],C);import{Injectable as Be,Logger as _e}from"@nestjs/common";import L from"@apidevtools/swagger-parser";import*as X from"fs";import*as ee from"path";function Fe(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(Fe,"_ts_decorate");var R=class n{static{l(this,"OpenApiService")}logger=new _e(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 L.dereference(e);else{let o=ee.resolve(e);if(!X.existsSync(o))throw new Error(`OpenAPI spec file not found: ${o}`);this.logger.debug(`Loading OpenAPI spec from file: ${o}`),r=await L.dereference(o)}let s=ae(r);if(!ce(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 L.validate(e);else{let r=ee.resolve(e);if(!X.existsSync(r))throw new Error(`OpenAPI spec file not found: ${r}`);await L.validate(r)}}catch(t){throw t instanceof Error?new Error(`Invalid OpenAPI document: ${t.message}`):t}}};R=Fe([Be()],R);function ze(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(ze,"_ts_decorate");function ue(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}l(ue,"_ts_metadata");var H=class n{static{l(this,"GeneratorService")}irBuilder;openApiService;logger=new Ue(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)}};H=ze([Me(),ue("design:type",Function),ue("design:paramtypes",[typeof C>"u"?Object:C,typeof R>"u"?Object:R])],H);import{Module as Ye}from"@nestjs/common";import{Module as Ge}from"@nestjs/common";function Le(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(Le,"_ts_decorate");var N=class{static{l(this,"OpenApiModule")}};N=Le([Ge({providers:[R],exports:[R]})],N);import{Injectable as Je,Logger as Ke}from"@nestjs/common";import*as w from"fs";import*as T from"path";import*as h from"handlebars";import*as d from"handlebars";function me(){d.registerHelper("pascal",n=>v(n)),d.registerHelper("camel",n=>I(n)),d.registerHelper("kebab",n=>pe(n)),d.registerHelper("snake",n=>_(n)),d.registerHelper("serviceName",n=>v(n)+"Service"),d.registerHelper("serviceProp",n=>I(n)),d.registerHelper("fileBase",n=>_(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(me,"registerCommonHandlebarsHelpers");function k(n,e=""){let t=e+" ",r;switch(n.kind){case f.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 f.Number:r="z.number()";break;case f.Integer:r="z.number().int()";break;case f.Boolean:r="z.boolean()";break;case f.Null:r="z.null()";break;case f.Ref:n.ref?r=`Schema.${n.ref}Schema`:r="z.unknown()";break;case f.Array:n.items?r=`z.array(${k(n.items,t)})`:r="z.array(z.unknown())";break;case f.Object:if(!n.properties||n.properties.length===0)n.additionalProperties?r=`z.record(z.string(), ${k(n.additionalProperties,t)})`:r="z.record(z.string(), z.unknown())";else{let s=[];for(let o of n.properties){let i=k(o.type,t),a=G(o.name);o.required?s.push(`${t}${a}: ${i}`):s.push(`${t}${a}: ${i}.optional()`)}if(n.additionalProperties){let o=k(n.additionalProperties,t);s.push(`${t}...z.record(z.string(), ${o}).shape`)}r=`z.object({
2
- ${s.join(`,
1
+ var je=Object.defineProperty;var l=(o,e)=>je(o,"name",{value:e,configurable:!0});import{z as h}from"zod";var Re=h.object({type:h.string().min(1,"Type name is required"),package:h.string().min(1,"Package name is required"),importPath:h.string().optional()}),ie=["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"],He=h.object({type:h.string().min(1,"Type is required"),outDir:h.string().min(1,"OutDir is required"),name:h.string().min(1,"Name is required"),includeTags:h.array(h.string()).optional(),excludeTags:h.array(h.string()).optional(),operationIdParser:h.custom().optional(),preCommand:h.array(h.string()).optional(),postCommand:h.array(h.string()).optional(),defaultBaseURL:h.string().optional(),exclude:h.array(h.string()).optional()}),Ce=He.extend({type:h.literal("typescript"),packageName:h.string().min(1,"PackageName is required"),moduleName:h.string().optional(),includeQueryKeys:h.boolean().optional(),predefinedTypes:h.array(Re).optional(),dependencies:h.record(h.string(),h.string()).optional(),devDependencies:h.record(h.string(),h.string()).optional(),templates:h.record(h.string(),h.string()).refine(o=>Object.keys(o).every(e=>ie.includes(e)),{message:`Template names must be one of: ${ie.join(", ")}`}).optional()}),Ie=h.discriminatedUnion("type",[Ce]),Z=h.object({spec:h.string().min(1,"Spec is required"),name:h.string().optional(),clients:h.array(Ie).min(1,"At least one client is required")});import{Injectable as qe,Logger as Ee}from"@nestjs/common";import*as ae from"fs";import*as S from"path";import{pathToFileURL as $e}from"url";import*as V from"path";async function U(o){try{let e=V.isAbsolute(o)?o:V.resolve(o),r=await import($e(e).href),s=r.default||r;if(!s)throw new Error(`Config file must export a default export or named export: ${o}`);return Z.parse(s)}catch(e){throw e instanceof Error?new Error(`Failed to load MJS config from ${o}: ${e.message}`):e}}l(U,"loadMjsConfig");function Ae(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(Ae,"_ts_decorate");var v=class o{static{l(this,"ConfigService")}logger=new Ee(o.name);DEFAULT_CONFIG_FILE="chunkflow-codegen.config.mjs";async findDefaultConfig(){let e=process.cwd(),t=S.parse(e).root;for(;e!==t;){let r=S.join(e,this.DEFAULT_CONFIG_FILE);try{return await ae.promises.access(r),r}catch{}e=S.dirname(e)}return null}async load(e){try{let t=await U(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=S.dirname(S.resolve(t)),s=e.spec;this.isUrl(s)||S.isAbsolute(s)||(s=S.resolve(r,s));let n=e.clients.map(i=>{let a=i.outDir;return S.isAbsolute(a)||(a=S.resolve(r,a)),{...i,outDir:a}});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=S.relative(e.outDir,t)}catch{return!1}r=S.posix.normalize(r),r==="."&&(r="");for(let s of e.exclude){let n=S.posix.normalize(s);if(r===n||n!==""&&r.startsWith(n+"/"))return!0}return!1}};v=Ae([qe()],v);import{Module as Ne}from"@nestjs/common";function De(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(De,"_ts_decorate");var F=class{static{l(this,"ConfigModule")}};F=De([Ne({providers:[v],exports:[v]})],F);function St(o){return Z.parse(o)}l(St,"defineConfig");var f=(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})({});import{Injectable as We,Logger as Ze}from"@nestjs/common";import{Injectable as ze}from"@nestjs/common";import{Injectable as Be}from"@nestjs/common";function ce(o){let e=o.openapi;return typeof e!="string"?"unknown":e.startsWith("3.1")?"3.1":e.startsWith("3.0")?"3.0":"unknown"}l(ce,"detectOpenAPIVersion");function le(o){return o==="3.0"||o==="3.1"}l(le,"isSupportedVersion");function Y(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?Y(o,s):s}}return}return e}}l(Y,"getSchemaFromRef");function fe(o){return o?"nullable"in o&&o.nullable===!0?!0:"type"in o&&Array.isArray(o.type)?o.type.includes("null"):!1:!1}l(fe,"isSchemaNullable");function X(o){if(!(!o||!("type"in o)))return o.type}l(X,"getSchemaType");function Fe(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(Fe,"_ts_decorate");var k=class{static{l(this,"SchemaConverterService")}schemaRefToIR(e,t){if(!t)return{kind:f.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:f.Ref,ref:u,nullable:!1}}let p=c.split("/");if(p.length>0){let u=p[p.length-1];if(u)return{kind:f.Ref,ref:u,nullable:!1}}return{kind:f.Unknown,nullable:!1}}let r=Y(e,t);if(!r)return{kind:f.Unknown,nullable:!1};let s=fe(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:f.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:f.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:f.AllOf,allOf:c,nullable:s,discriminator:n}}if(r.not){let c=this.schemaRefToIR(e,r.not);return{kind:f.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:f.Enum,enumValues:c,enumRaw:r.enum,enumBase:p,nullable:s,discriminator:n}}let i=X(r),a=Array.isArray(i)?i.filter(c=>c!=="null")[0]:i;if(a)switch(a){case"string":return{kind:f.String,nullable:s,format:r.format,discriminator:n};case"integer":return{kind:f.Integer,nullable:s,discriminator:n};case"number":return{kind:f.Number,nullable:s,discriminator:n};case"boolean":return{kind:f.Boolean,nullable:s,discriminator:n};case"array":let c=r,p=this.schemaRefToIR(e,c.items);return{kind:f.Array,items:p,nullable:s,discriminator:n};case"object":let u=[];if(r.properties){let d=Object.keys(r.properties).sort();for(let b of d){let $=r.properties[b],D=this.schemaRefToIR(e,$),N=r.required?.includes(b)||!1;u.push({name:b,type:D,required:N,annotations:this.extractAnnotations($)})}}let y;return r.additionalProperties&&typeof r.additionalProperties=="object"&&(y=this.schemaRefToIR(e,r.additionalProperties)),{kind:f.Object,properties:u,additionalProperties:y,nullable:s,discriminator:n}}return{kind:f.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=X(e);if(t){let r=Array.isArray(t)?t.filter(s=>s!=="null")[0]:t;if(r)switch(r){case"string":return f.String;case"integer":return f.Integer;case"number":return f.Number;case"boolean":return f.Boolean}}if(e.enum&&e.enum.length>0){let r=e.enum[0];if(typeof r=="string")return f.String;if(typeof r=="number")return Number.isInteger(r)?f.Integer:f.Number;if(typeof r=="boolean")return f.Boolean}return f.Unknown}};k=Fe([Be()],k);function O(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=te(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join("")}l(O,"toPascalCase");function I(o){let e=O(o);return e===""?"":e.charAt(0).toLowerCase()+e.slice(1)}l(I,"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=te(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.toLowerCase()).join("_")}l(L,"toSnakeCase");function pe(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=te(r);t.push(...s)}return t.filter(r=>r!=="").map(r=>r.toLowerCase()).join("-")}l(pe,"toKebabCase");function te(o){if(o==="")return[];let e=[],t="",r=Array.from(o);for(let s=0;s<r.length;s++){let n=r[s],i=!1;s>0&&ee(n)&&(ee(r[s-1])?s<r.length-1&&!ee(r[s+1])&&(i=!0):i=!0),i&&t.length>0&&(e.push(t),t=""),t+=n}return t.length>0&&e.push(t),e}l(te,"splitCamelCase");function ee(o){return o>="A"&&o<="Z"}l(ee,"isUppercase");function _e(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(_e,"_ts_decorate");function ue(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}l(ue,"_ts_metadata");var x=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),n={};for(let a of t)n[a]=!0;let i=this.buildIRFromDoc(e,n);return i.securitySchemes=r,i.modelDefs=[...s,...i.modelDefs],i.openApiDocument=e,i}filterIR(e,t){let r=this.compileTagFilters(t.includeTags||[]),s=this.compileTagFilters(t.excludeTags||[]),n=[];for(let a of e.services){let c=[];for(let p of a.operations)this.shouldIncludeOperation(p.originalTags,r,s)&&c.push(p);c.length>0&&n.push({...a,operations:c})}let i={services:n,models:e.models,securitySchemes:e.securitySchemes,modelDefs:e.modelDefs,openApiDocument:e.openApiDocument};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 n=[s.get,s.post,s.put,s.patch,s.delete,s.options,s.head,s.trace];for(let i of n)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 n of e){for(let i of t)if(i.test(n)){s=!0;break}if(s)break}if(!s)return!1;if(r.length>0){for(let n of e)for(let i of r)if(i.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 i=l((c,p,u,y)=>{r[c]||(r[c]={tag:c,operations:[]});let d=p.operationId||"",{pathParams:b,queryParams:$}=this.collectParams(e,p),{requestBody:D,extractedTypes:N}=this.extractRequestBodyWithTypes(e,p,c,d,u,n);s.push(...N);let{response:A,extractedTypes:z}=this.extractResponseWithTypes(e,p,c,d,u,n);s.push(...z);let G=p.tags&&p.tags.length>0?[...p.tags]:["misc"];r[c].operations.push({operationID:d,method:u,path:y,tag:c,originalTags:G,summary:p.summary||"",description:p.description||"",deprecated:p.deprecated||!1,pathParams:b,queryParams:$,requestBody:D,response:A})},"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:d}of u){if(!y)continue;let b=this.firstAllowedTag(y.tags||[],t);b&&i(b,y,d,c)}}let a=Object.values(r);for(let c of a)c.operations.sort((p,u)=>p.path===u.path?p.method.localeCompare(u.method):p.path.localeCompare(u.path));return a.sort((c,p)=>c.tag.localeCompare(p.tag)),{services:a,models:[],securitySchemes:[],modelDefs:s}}deriveMethodName(e,t,r){if(e){let n=e.indexOf("Controller_"),i=n>=0?e.substring(n+11):e;return I(i)}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 i={key:s,type:n.type};switch(n.type){case"http":i.scheme=n.scheme,i.bearerFormat=n.bearerFormat;break;case"apiKey":i.in=n.in,i.name=n.name;break;case"oauth2":case"openIdConnect":break}r.push(i)}return r}collectParams(e,t){let r=[],s=[];if(t.parameters)for(let n of t.parameters){if(!n||"$ref"in n)continue;let i=n,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((n,i)=>n.name.localeCompare(i.name)),s.sort((n,i)=>n.name.localeCompare(i.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 i=this.schemaConverter.schemaRefToIR(e,n);if(this.compareSchemas(r,i))return s}return null}compareSchemas(e,t){if(e.kind!==t.kind)return!1;if(e.kind===f.Ref&&t.kind===f.Ref)return e.ref===t.ref;if(e.kind===f.Object&&t.kind===f.Object){let r=e.properties||[],s=t.properties||[];if(r.length!==s.length)return!1;let n=new Map(r.map(a=>[a.name,{type:a.type,required:a.required}])),i=new Map(s.map(a=>[a.name,{type:a.type,required:a.required}]));if(n.size!==i.size)return!1;for(let[a,c]of n){let p=i.get(a);if(!p||c.required!==p.required||!this.compareSchemas(c.type,p.type))return!1}return!0}return e.kind===f.Array&&t.kind===f.Array?!e.items||!t.items?e.items===t.items:this.compareSchemas(e.items,t.items):!0}extractModelNameFromSchema(e){return e.kind===f.Ref&&e.ref?e.ref:e.kind===f.Array&&e.items&&e.items.kind===f.Ref&&e.items.ref?e.items.ref:null}generateTypeName(e,t,r,s,n,i){let a=this.extractModelNameFromSchema(e);if(a)return a;let c=this.deriveMethodName(r,s,n);return`${O(t)}${O(c)}${i}`}extractRequestBodyWithTypes(e,t,r,s,n,i){let a=[];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),d=this.findMatchingComponentSchema(e,u.schema);if(d)return{requestBody:{contentType:"application/json",typeTS:"",schema:{kind:f.Ref,ref:d,nullable:!1},required:c.required||!1},extractedTypes:[]};let b=this.generateTypeName(y,r,s,n,t.path,"RequestBody");return y.kind===f.Object&&!i.has(b)?(i.add(b),a.push({name:b,schema:y,annotations:this.schemaConverter.extractAnnotations(u.schema)}),{requestBody:{contentType:"application/json",typeTS:"",schema:{kind:f.Ref,ref:b,nullable:!1},required:c.required||!1},extractedTypes:a}):{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,i){let a=[];if(!t.responses)return{response:{typeTS:"unknown",schema:{kind:f.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 d=y;if(d.content){for(let[A,z]of Object.entries(d.content)){let G=this.detectStreamingContentType(A),M=this.schemaConverter.schemaRefToIR(e,z.schema);if(G.isStreaming)return{response:{typeTS:"",schema:M,description:d.description||"",isStreaming:!0,contentType:A,streamingFormat:G.format},extractedTypes:[]};if(A==="application/json"){let se=this.findMatchingComponentSchema(e,z.schema);if(se)return{response:{typeTS:"",schema:{kind:f.Ref,ref:se,nullable:!1},description:d.description||"",isStreaming:!1,contentType:A},extractedTypes:[]};let W=this.generateTypeName(M,r,s,n,t.path,"Response");return M.kind===f.Object&&!i.has(W)?(i.add(W),a.push({name:W,schema:M,annotations:this.schemaConverter.extractAnnotations(z.schema)}),{response:{typeTS:"",schema:{kind:f.Ref,ref:W,nullable:!1},description:d.description||"",isStreaming:!1,contentType:A},extractedTypes:a}):{response:{typeTS:"",schema:M,description:d.description||"",isStreaming:!1,contentType:A},extractedTypes:[]}}}let b=Object.keys(d.content)[0],$=d.content[b],D=this.schemaConverter.schemaRefToIR(e,$.schema),N=this.detectStreamingContentType(b);return{response:{typeTS:"",schema:D,description:d.description||"",isStreaming:N.isStreaming,contentType:b,streamingFormat:N.format},extractedTypes:[]}}return{response:{typeTS:"void",schema:{kind:f.Unknown,nullable:!1},description:d.description||"",isStreaming:!1,contentType:""},extractedTypes:[]}}}return{response:this.extractResponse(e,t),extractedTypes:[]}}extractResponse(e,t){if(!t.responses)return{typeTS:"unknown",schema:{kind:f.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 i=n;if(i.content){for(let[u,y]of Object.entries(i.content)){let d=this.detectStreamingContentType(u);if(d.isStreaming)return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,y.schema),description:i.description||"",isStreaming:!0,contentType:u,streamingFormat:d.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],p=this.detectStreamingContentType(a);return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,c.schema),description:i.description||"",isStreaming:p.isStreaming,contentType:a,streamingFormat:p.format}}return{typeTS:"void",schema:{kind:f.Unknown,nullable:!1},description:i.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 i=n;if(s==="204")return{typeTS:"void",schema:{kind:f.Unknown,nullable:!1},description:i.description||"",isStreaming:!1,contentType:""};if(i.content){for(let[u,y]of Object.entries(i.content)){let d=this.detectStreamingContentType(u);if(d.isStreaming)return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,y.schema),description:i.description||"",isStreaming:!0,contentType:u,streamingFormat:d.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],p=this.detectStreamingContentType(a);return{typeTS:"",schema:this.schemaConverter.schemaRefToIR(e,c.schema),description:i.description||"",isStreaming:p.isStreaming,contentType:a,streamingFormat:p.format}}}return{typeTS:"unknown",schema:{kind:f.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 i=e.components.schemas[n],a=this.schemaConverter.schemaRefToIR(e,i);t.push({name:n,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,n=new Set,i=l(a=>{if(a.kind==="ref"&&a.ref){let c=a.ref;if(s.add(c),!n.has(c)){n.add(c);let p=r.get(c);p&&i(p.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 p of c.pathParams)i(p.schema);for(let p of c.queryParams)i(p.schema);c.requestBody&&i(c.requestBody.schema),i(c.response.schema)}return t.filter(a=>s.has(a.name))}};x=_e([ze(),ue("design:type",Function),ue("design:paramtypes",[typeof k>"u"?Object:k])],x);import{Injectable as Ue,Logger as Le}from"@nestjs/common";import q from"@apidevtools/swagger-parser";import*as re from"fs";import*as ne from"path";function Me(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(Me,"_ts_decorate");var P=class o{static{l(this,"OpenApiService")}logger=new Le(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 i=await n.text(),a;try{a=JSON.parse(i)}catch{throw new Error("OpenAPI spec is not valid JSON")}try{let c=await q.parse(a);r=await q.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 q.parse(a);r=await q.dereference(p)}catch(p){throw p}}}else{let n=ne.resolve(e);if(!re.existsSync(n))throw new Error(`OpenAPI spec file not found: ${n}`);this.logger.debug(`Loading OpenAPI spec from file: ${n}`);try{r=await q.bundle(n)}catch(i){this.logger.debug(`Bundle failed: ${i instanceof Error?i.message:String(i)}`),this.logger.debug("Attempting dereference directly"),r=await q.dereference(n)}}let s=ce(r);if(!le(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 q.validate(e);else{let r=ne.resolve(e);if(!re.existsSync(r))throw new Error(`OpenAPI spec file not found: ${r}`);await q.validate(r)}}catch(t){throw t instanceof Error?new Error(`Invalid OpenAPI document: ${t.message}`):t}}};P=Me([Ue()],P);function Ge(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(Ge,"_ts_decorate");function me(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}l(me,"_ts_metadata");var j=class o{static{l(this,"GeneratorService")}irBuilder;openApiService;logger=new Ze(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),i=this.irBuilder.filterIR(n,t);await r.generate(t,i)}};j=Ge([We(),me("design:type",Function),me("design:paramtypes",[typeof x>"u"?Object:x,typeof P>"u"?Object:P])],j);import{Module as rt}from"@nestjs/common";import{Module as Je}from"@nestjs/common";function Ve(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(Ve,"_ts_decorate");var B=class{static{l(this,"OpenApiModule")}};B=Ve([Je({providers:[P],exports:[P]})],B);import{Injectable as Xe,Logger as et}from"@nestjs/common";import*as w from"fs";import*as T from"path";import*as m from"handlebars";import*as g from"handlebars";function de(){g.registerHelper("pascal",o=>O(o)),g.registerHelper("camel",o=>I(o)),g.registerHelper("kebab",o=>pe(o)),g.registerHelper("snake",o=>L(o)),g.registerHelper("serviceName",o=>O(o)+"Service"),g.registerHelper("serviceProp",o=>I(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}})}l(de,"registerCommonHandlebarsHelpers");function H(o,e="",t,r=!1){let s=e+" ",n;switch(o.kind){case f.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 f.Number:n="z.number()";break;case f.Integer:n="z.number().int()";break;case f.Boolean:n="z.boolean()";break;case f.Null:n="z.null()";break;case f.Ref:o.ref?n=r?`${o.ref}Schema`:`Schema.${o.ref}Schema`:n="z.unknown()";break;case f.Array:o.items?n=`z.array(${H(o.items,s,t,r)})`:n="z.array(z.unknown())";break;case f.Object:if(!o.properties||o.properties.length===0)o.additionalProperties?n=`z.record(z.string(), ${H(o.additionalProperties,s,t,r)})`:n="z.record(z.string(), z.unknown())";else{let i=[];for(let c of o.properties){let p=H(c.type,s,t,r),u=J(c.name);c.required?i.push(`${s}${u}: ${p}`):i.push(`${s}${u}: ${p}.optional()`)}let a=`z.object({
2
+ ${i.join(`,
3
3
  `)}
4
- ${e}})`}break;case f.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 f.OneOf:n.oneOf&&n.oneOf.length>0?r=`z.union([${n.oneOf.map(o=>k(o,t)).join(", ")}])`:r="z.unknown()";break;case f.AnyOf:n.anyOf&&n.anyOf.length>0?r=`z.union([${n.anyOf.map(o=>k(o,t)).join(", ")}])`:r="z.unknown()";break;case f.AllOf:if(n.allOf&&n.allOf.length>0){let s=n.allOf.map(o=>k(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(k,"schemaToZodSchema");function Ze(n){return n.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#x60;/g,"`").replace(/&#96;/g,"`").replace(/&amp;/g,"&")}l(Ze,"decodeHtmlEntities");function P(n){let e;switch(n.kind){case f.String:n.format==="binary"?e="Blob":e="string";break;case f.Number:case f.Integer:e="number";break;case f.Boolean:e="boolean";break;case f.Null:e="null";break;case f.Ref:n.ref?e="Schema."+n.ref:e="unknown";break;case f.Array:if(n.items){let t=P(n.items);t.includes(" | ")||t.includes(" & ")?e=`Array<(${t})>`:e=`Array<${t}>`}else e="Array<unknown>";break;case f.OneOf:n.oneOf?e=n.oneOf.map(r=>P(r)).join(" | "):e="unknown";break;case f.AnyOf:n.anyOf?e=n.anyOf.map(r=>P(r)).join(" | "):e="unknown";break;case f.AllOf:n.allOf?e=n.allOf.map(r=>P(r)).join(" & "):e="unknown";break;case f.Enum:if(n.enumValues&&n.enumValues.length>0){let t=[];switch(n.enumBase){case f.Number:case f.Integer:for(let r of n.enumValues)t.push(r);break;case f.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 f.Object:if(!n.properties||n.properties.length===0)e="Record<string, unknown>";else{let t=[];for(let r of n.properties){let s=P(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"),Ze(e)}l(P,"schemaToTSType");function D(n){let e=n.path,t=e.includes("{")&&e.includes("}");if(n.operationID)return I(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(D,"deriveMethodName");async function de(n,e){if(n.operationIdParser)try{let r=await n.operationIdParser(e.operationID,e.method,e.path);if(r)return I(r)}catch{}let t=Ve(e.operationID);return t?I(t):D(e)}l(de,"resolveMethodName");function Ve(n){if(!n)return"";let e=n.indexOf("Controller_");return e>=0?n.substring(e+11):n}l(Ve,"defaultParseOperationID");function he(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(he,"buildPathTemplate");function ge(n){let t=n.path.split("/"),r=[];for(let o of t)o!==""&&(o.startsWith("{")&&o.endsWith("}")||r.push(o));return`'${r.join("/")}'`}l(ge,"buildQueryKeyBase");function Z(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(Z,"orderPathParams");function te(n,e){let t=[];for(let r of Z(n))t.push(`${r.name}: ${P(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}: ${P(n.requestBody.schema)}`)}return t.push('init?: Omit<RequestInit, "method" | "body">'),t}l(te,"buildMethodSignature");function ye(n){let e=[];for(let t of Z(n))e.push(t.name);return n.queryParams.length>0&&e.push("query"),n.requestBody&&e.push("body"),e}l(ye,"queryKeyArgs");function G(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(G,"quoteTSPropertyName");function be(n){return n.response.isStreaming===!0}l(be,"isStreamingOperation");function we(n){let e=n.response.schema;return e.kind===f.Array&&e.items?P(e.items):n.response.streamingFormat==="sse"?"string":P(e)}l(we,"getStreamingItemType");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");function Se(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}l(Se,"_ts_metadata");var $=class n{static{l(this,"TypeScriptGeneratorService")}configService;logger=new Ke(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 de(e,o);return{...o,_resolvedMethodName:i}}))})));return{...t,services:r}}registerHandlebarsHelpers(e){me(),h.registerHelper("methodName",t=>t._resolvedMethodName||D(t)),h.registerHelper("queryTypeName",t=>{let r=t._resolvedMethodName||D(t);return v(t.tag)+v(r)+"Query"}),h.registerHelper("pathTemplate",t=>{let r=he(t);return new h.SafeString(r)}),h.registerHelper("queryKeyBase",t=>ge(t)),h.registerHelper("pathParamsInOrder",t=>Z(t)),h.registerHelper("methodSignature",t=>{let r=t._resolvedMethodName||D(t);return te(t,r).map(o=>new h.SafeString(o))}),h.registerHelper("methodSignatureNoInit",t=>{let r=t._resolvedMethodName||D(t);return te(t,r).slice(0,-1)}),h.registerHelper("queryKeyArgs",t=>ye(t)),h.registerHelper("tsType",t=>t&&typeof t=="object"&&"kind"in t?P(t):"unknown"),h.registerHelper("stripSchemaNs",t=>t.replace(/^Schema\./,"")),h.registerHelper("tsTypeStripNs",t=>{if(t&&typeof t=="object"&&"kind"in t){let s=P(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=>G(t)),h.registerHelper("zodSchema",t=>t&&typeof t=="object"&&"kind"in t?new h.SafeString(k(t)):"z.unknown()"),h.registerHelper("isStreaming",t=>be(t)),h.registerHelper("streamingItemType",t=>new h.SafeString(we(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,`${_(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=H(o.additionalProperties,s,t,r);n=`${a}.catchall(${c})`}else n=a}break;case f.Enum:o.enumValues&&o.enumValues.length>0?n=`z.enum([${o.enumValues.map(a=>a==="true"||a==="false"||/^-?[0-9]+(\.[0-9]+)?$/.test(a)?a:JSON.stringify(a)).join(", ")}])`:n="z.string()";break;case f.OneOf:o.oneOf&&o.oneOf.length>0?n=`z.union([${o.oneOf.map(a=>H(a,s,t,r)).join(", ")}])`:n="z.unknown()";break;case f.AnyOf:o.anyOf&&o.anyOf.length>0?n=`z.union([${o.anyOf.map(a=>H(a,s,t,r)).join(", ")}])`:n="z.unknown()";break;case f.AllOf:if(o.allOf&&o.allOf.length>0){let i=o.allOf.map(a=>H(a,s,t,r));n=i.join(".and(")+")".repeat(i.length-1)}else n="z.unknown()";break;default:n="z.unknown()"}return o.nullable&&n!=="z.null()"&&(n=`${n}.nullable()`),n}l(H,"schemaToZodSchema");function Ke(o){return o.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#x60;/g,"`").replace(/&#96;/g,"`").replace(/&amp;/g,"&")}l(Ke,"decodeHtmlEntities");function R(o,e,t,r=!1){let s;switch(o.kind){case f.String:o.format==="binary"?s="Blob":s="string";break;case f.Number:case f.Integer:s="number";break;case f.Boolean:s="boolean";break;case f.Null:s="null";break;case f.Ref:o.ref?e?.some(n=>n.type===o.ref)||r&&t&&t.find(i=>i.name===o.ref)?s=o.ref:s="Schema."+o.ref:s="unknown";break;case f.Array:if(o.items){let n=R(o.items,e,t);n.includes(" | ")||n.includes(" & ")?s=`Array<(${n})>`:s=`Array<${n}>`}else s="Array<unknown>";break;case f.OneOf:o.oneOf?s=o.oneOf.map(i=>R(i,e,t)).join(" | "):s="unknown";break;case f.AnyOf:o.anyOf?s=o.anyOf.map(i=>R(i,e,t)).join(" | "):s="unknown";break;case f.AllOf:o.allOf?s=o.allOf.map(i=>R(i,e,t)).join(" & "):s="unknown";break;case f.Enum:if(o.enumValues&&o.enumValues.length>0){let n=[];switch(o.enumBase){case f.Number:case f.Integer:for(let i of o.enumValues)n.push(i);break;case f.Boolean:for(let i of o.enumValues)i==="true"||i==="false"?n.push(i):n.push(`"${i}"`);break;default:for(let i of o.enumValues)n.push(`"${i}"`)}s=n.join(" | ")}else s="unknown";break;case f.Object:if(!o.properties||o.properties.length===0)s="Record<string, unknown>";else{let n=[];for(let i of o.properties){let a=R(i.type,e,t,r);i.required?n.push(`${i.name}: ${a}`):n.push(`${i.name}?: ${a}`)}s="{ "+n.join("; ")+" }"}break;default:s="unknown"}return o.nullable&&s!=="null"&&(s+=" | null"),Ke(s)}l(R,"schemaToTSType");function _(o){let e=o.path,t=e.includes("{")&&e.includes("}");if(o.operationID)return I(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()}}l(_,"deriveMethodName");async function ge(o,e){if(o.operationIdParser)try{let r=await o.operationIdParser(e.operationID,e.method,e.path);if(r)return I(r)}catch{}let t=Qe(e.operationID);return t?I(t):_(e)}l(ge,"resolveMethodName");function Qe(o){if(!o)return"";let e=o.indexOf("Controller_");return e>=0?o.substring(e+11):o}l(Qe,"defaultParseOperationID");function ye(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}l(ye,"buildPathTemplate");function be(o){let t=o.path.split("/"),r=[];for(let n of t)n!==""&&(n.startsWith("{")&&n.endsWith("}")||r.push(n));return`'${r.join("/")}'`}l(be,"buildQueryKeyBase");function K(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 i=r.substring(s+1,n),a=t.get(i);a!==void 0&&e.push(o.pathParams[a]),s=n;continue}}return e}l(K,"orderPathParams");function he(o,e,t,r=!1){return R(o,t,e,r)}l(he,"schemaToTSTypeWithSimpleTypes");function oe(o,e,t,r,s=!1){let n=[];for(let i of K(o))n.push(`${i.name}: ${he(i.schema,t,r,s)}`);if(o.queryParams.length>0){let i=O(o.tag)+O(e)+"Query";n.push(`query?: Schema.${i}`)}if(o.requestBody){let i=o.requestBody.required===!0?"":"?";n.push(`body${i}: ${he(o.requestBody.schema,t,r,s)}`)}return n.push('init?: Omit<RequestInit, "method" | "body">'),n}l(oe,"buildMethodSignature");function Se(o,e){if(!e||e.length===0)return[];let t=new Set,r=l(n=>{let i=o.find(a=>a.name===n);return i?i.schema:null},"resolveRef"),s=l(n=>{if(n.kind==="ref"&&n.ref)if(e.some(a=>a.type===n.ref))t.add(n.ref);else{let a=r(n.ref);a&&s(a)}else if(n.kind==="array"&&n.items)s(n.items);else if(n.kind==="object"&&n.properties)for(let i of n.properties)s(i.type);else if(n.kind==="oneOf"&&n.oneOf)for(let i of n.oneOf)s(i);else if(n.kind==="anyOf"&&n.anyOf)for(let i of n.anyOf)s(i);else if(n.kind==="allOf"&&n.allOf)for(let i of n.allOf)s(i)},"checkSchema");for(let n of o)s(n.schema);return e.filter(n=>t.has(n.type))}l(Se,"collectPredefinedTypesUsedInSchema");function we(o,e,t){if(!e||e.length===0)return[];let r=new Set,s=l(i=>{if(!t)return null;let a=t.find(c=>c.name===i);return a?a.schema:null},"resolveRef"),n=l(i=>{if(i.kind==="ref"&&i.ref)if(e.some(c=>c.type===i.ref))r.add(i.ref);else{let c=s(i.ref);c&&n(c)}else if(i.kind==="array"&&i.items)n(i.items);else if(i.kind==="object"&&i.properties)for(let a of i.properties)n(a.type);else if(i.kind==="oneOf"&&i.oneOf)for(let a of i.oneOf)n(a);else if(i.kind==="anyOf"&&i.anyOf)for(let a of i.anyOf)n(a);else if(i.kind==="allOf"&&i.allOf)for(let a of i.allOf)n(a)},"checkSchema");for(let i of o.operations)for(let a of i.pathParams)n(a.schema);return e.filter(i=>r.has(i.type))}l(we,"collectPredefinedTypesUsedInService");function Te(o){let e=[];for(let t of K(o))e.push(t.name);return o.queryParams.length>0&&e.push("query"),o.requestBody&&e.push("body"),e}l(Te,"queryKeyArgs");function J(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}l(J,"quoteTSPropertyName");function Oe(o){return o.response.isStreaming===!0}l(Oe,"isStreamingOperation");function ve(o){let e=o.response.schema;return e.kind===f.Array&&e.items?R(e.items):o.response.streamingFormat==="sse"?"string":R(e)}l(ve,"getStreamingItemType");function Ye(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(Ye,"_ts_decorate");function ke(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}l(ke,"_ts_metadata");var C=class o{static{l(this,"TypeScriptGeneratorService")}configService;logger=new et(o.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 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)}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 i=await ge(e,n);return{...n,_resolvedMethodName:i}}))})));return{...t,services:r}}registerHandlebarsHelpers(e){de(),m.registerHelper("methodName",t=>t._resolvedMethodName||_(t)),m.registerHelper("queryTypeName",t=>{let r=t._resolvedMethodName||_(t);return O(t.tag)+O(r)+"Query"}),m.registerHelper("pathTemplate",t=>{let r=ye(t);return new m.SafeString(r)}),m.registerHelper("queryKeyBase",t=>{let r=be(t);return new m.SafeString(r)}),m.registerHelper("pathParamsInOrder",t=>K(t)),m.registerHelper("methodSignature",(t,r)=>{let s=t._resolvedMethodName||_(t),n=r?.data?.root?.IR?.modelDefs||[],i=r?.data?.root?.PredefinedTypes||[],a=r?.data?.root?.isSameFile||!1;return oe(t,s,n,i,a).map(p=>new m.SafeString(p))}),m.registerHelper("methodSignatureNoInit",(t,r)=>{let s=t._resolvedMethodName||_(t),n=r?.data?.root?.IR?.modelDefs||[],i=r?.data?.root?.PredefinedTypes||[],a=r?.data?.root?.isSameFile||!1;return oe(t,s,n,i,a).slice(0,-1)}),m.registerHelper("queryKeyArgs",t=>Te(t).map(s=>new m.SafeString(s))),m.registerHelper("tsType",(t,r)=>{if(t&&typeof t=="object"&&"kind"in t){let s=r?.data?.root?.PredefinedTypes||[],n=r?.data?.root?.IR?.modelDefs||[],i=r?.data?.root?.isSameFile||!1;return R(t,s,n,i)}return"unknown"}),m.registerHelper("stripSchemaNs",t=>t.replace(/^Schema\./,"")),m.registerHelper("tsTypeStripNs",(t,r)=>{let s=r?.data?.root?.PredefinedTypes||[],n=r?.data?.root?.IR?.modelDefs||[],i=r?.data?.root?.isSameFile||!1;if(t&&typeof t=="object"&&"kind"in t){let c=R(t,s,n,i).replace(/Schema\./g,"");return new m.SafeString(c)}if(typeof t=="string"){if(t.startsWith("Schema.")){let a=t.replace(/^Schema\./,"");return s.find(p=>p.type===a)?new m.SafeString(a):new m.SafeString(a)}return new m.SafeString(t)}return"unknown"}),m.registerHelper("isPredefinedType",(t,r)=>(r?.data?.root?.PredefinedTypes||[]).some(n=>n.type===t)),m.registerHelper("getPredefinedType",(t,r)=>(r?.data?.root?.PredefinedTypes||[]).find(n=>n.type===t)),m.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)}),m.registerHelper("getServicePredefinedTypes",(t,r)=>{let s=r?.data?.root?.PredefinedTypes||[],n=r?.data?.root?.IR?.modelDefs||[];return we(t,s,n)}),m.registerHelper("getSchemaPredefinedTypes",t=>{let r=t?.data?.root?.PredefinedTypes||[],s=t?.data?.root?.IR?.modelDefs||[];return Se(s,r)}),m.registerHelper("joinTypes",t=>t.join(", ")),m.registerHelper("uniquePackages",t=>{let r=new Set;for(let s of t||[])s.package&&r.add(s.package);return Array.from(r)}),m.registerHelper("isPredefinedPackage",(t,r)=>r?r.some(s=>s.package===t):!1),m.registerHelper("getAllDependencies",t=>{let r={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}),m.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 m.SafeString(r)}),m.registerHelper("quotePropName",t=>J(t)),m.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 m.SafeString(H(t,"",s,n))}return"z.unknown()"}),m.registerHelper("isStreaming",t=>Oe(t)),m.registerHelper("streamingItemType",t=>new m.SafeString(ve(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 w.promises.access(n,w.constants.R_OK);let d=await w.promises.readFile(n,"utf-8"),b=m.compile(d),$={...t,_templateName:e},D=b($);await w.promises.writeFile(r,D,"utf-8");return}catch(d){let b=d instanceof Error?d.message:String(d);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 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 d of i)try{await w.promises.access(d),a=d,this.logger.debug(`Found template at: ${a}`);break}catch{this.logger.debug(`Template not found at: ${d}`)}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"),p=m.compile(c),u={...t,_templateName:e},y=p(u);await w.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 i=n instanceof Error?n.message:String(n);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 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 a=`// Generated service ${s.tag} - template rendering to be implemented`;await w.promises.writeFile(n,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,PredefinedTypes:e.predefinedTypes||[],isSameFile:!0},s,e)}catch(n){let i=n instanceof Error?n.message:String(n);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(n){let i=n instanceof Error?n.message:String(n);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 n=`# ${e.name}
5
5
 
6
- Generated SDK from OpenAPI specification.`;await w.promises.writeFile(r,o,"utf-8")}}};$=We([Je(),Se("design:type",Function),Se("design:paramtypes",[typeof x>"u"?Object:x])],$);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 Te(n,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,e)}l(Te,"_ts_metadata");var V=class{static{l(this,"GeneratorModule")}generatorService;typeScriptGenerator;constructor(e,t){this.generatorService=e,this.typeScriptGenerator=t,this.generatorService.register(this.typeScriptGenerator)}};V=Qe([Ye({imports:[N,E],providers:[H,C,j,$],exports:[H,C,j]}),Te("design:type",Function),Te("design:paramtypes",[typeof H>"u"?Object:H,typeof $>"u"?Object:$])],V);import*as ve from"fs";async function qr(n,e){let t;typeof n=="string"?t=await B(n):t=n;let r=new x,s=new R,o=new j,i=new C(o),a=new H(i,s),c=new $(r);a.register(c);for(let p of t.clients)e?.client&&p.name!==e.client||(await ve.promises.mkdir(p.outDir,{recursive:!0}),await a.generate(t.spec,p))}l(qr,"generate");async function Er(n){return B(n)}l(Er,"loadConfig");export{Re as ClientSchema,E as ConfigModule,se as ConfigSchema,x as ConfigService,V as GeneratorModule,H as GeneratorService,f as IRSchemaKind,N as OpenApiModule,R as OpenApiService,oe as TYPESCRIPT_TEMPLATE_NAMES,xe as TypeAugmentationOptionsSchema,Ce as TypeScriptClientSchema,dt as defineConfig,qr as generate,Er as loadConfig,B as loadMjsConfig};
6
+ Generated SDK from OpenAPI specification.`;await w.promises.writeFile(r,n,"utf-8")}}};C=Ye([Xe(),ke("design:type",Function),ke("design:paramtypes",[typeof v>"u"?Object:v])],C);function tt(o,e,t,r){var s=arguments.length,n=s<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(o,e,t,r);else for(var a=o.length-1;a>=0;a--)(i=o[a])&&(n=(s<3?i(n):s>3?i(e,t,n):i(e,t))||n);return s>3&&n&&Object.defineProperty(e,t,n),n}l(tt,"_ts_decorate");function xe(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}l(xe,"_ts_metadata");var Q=class{static{l(this,"GeneratorModule")}generatorService;typeScriptGenerator;constructor(e,t){this.generatorService=e,this.typeScriptGenerator=t,this.generatorService.register(this.typeScriptGenerator)}};Q=tt([rt({imports:[B,F],providers:[j,x,k,C],exports:[j,x,k]}),xe("design:type",Function),xe("design:paramtypes",[typeof j>"u"?Object:j,typeof C>"u"?Object:C])],Q);import*as E from"path";import*as Pe from"fs";async function Br(o,e){let t,r;if(typeof o=="string"){let u=E.isAbsolute(o)?o:E.resolve(o);t=await U(u),r=e?.baseDir??E.dirname(u)}else t=o,r=e?.baseDir;let s=new v,n=new P,i=new k,a=new x(i),c=new j(a,n),p=new C(s);c.register(p);for(let u of t.clients){if(e?.client&&u.name!==e.client)continue;let y=r?E.resolve(r,u.outDir):E.resolve(u.outDir);await Pe.promises.mkdir(y,{recursive:!0});let d={...u,outDir:y};await c.generate(t.spec,d)}}l(Br,"generate");async function _r(o){return U(o)}l(_r,"loadConfig");export{Ie as ClientSchema,F as ConfigModule,Z as ConfigSchema,v as ConfigService,Q as GeneratorModule,j as GeneratorService,f as IRSchemaKind,B as OpenApiModule,P as OpenApiService,Re as PredefinedTypeSchema,ie as TYPESCRIPT_TEMPLATE_NAMES,Ce as TypeScriptClientSchema,St as defineConfig,Br as generate,_r as loadConfig,U as loadMjsConfig};
7
7
  //# sourceMappingURL=index.mjs.map