@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.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 $e=Object.defineProperty;var f=(o,e)=>$e(o,"name",{value:e,configurable:!0});import{z as d}from"zod";var Ie=d.object({type:d.string().min(1,"Type name is required"),package:d.string().min(1,"Package name is required"),importPath:d.string().optional()}),ae=["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"],Ae=d.object({type:d.string().min(1,"Type is required"),outDir:d.string().min(1,"OutDir is required"),name:d.string().min(1,"Name is required"),includeTags:d.array(d.string()).optional(),excludeTags:d.array(d.string()).optional(),operationIdParser:d.custom().optional(),preCommand:d.array(d.string()).optional(),postCommand:d.array(d.string()).optional(),defaultBaseURL:d.string().optional(),exclude:d.array(d.string()).optional()}),qe=Ae.extend({type:d.literal("typescript"),packageName:d.string().min(1,"PackageName is required"),moduleName:d.string().optional(),includeQueryKeys:d.boolean().optional(),predefinedTypes:d.array(Ie).optional(),dependencies:d.record(d.string(),d.string()).optional(),devDependencies:d.record(d.string(),d.string()).optional(),formatCode:d.boolean().optional(),templates:d.record(d.string(),d.string()).refine(o=>Object.keys(o).every(e=>ae.includes(e)),{message:`Template names must be one of: ${ae.join(", ")}`}).optional()}),Ee=d.discriminatedUnion("type",[qe]),Z=d.object({spec:d.string().min(1,"Spec is required"),name:d.string().optional(),clients:d.array(Ee).min(1,"At least one client is required")});import{Injectable as De,Logger as Be}from"@nestjs/common";import*as ie from"fs";import*as w from"path";import{pathToFileURL as Ne}from"url";import*as J from"path";async function U(o){try{let e=J.isAbsolute(o)?o:J.resolve(o),r=await import(Ne(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}}f(U,"loadMjsConfig");function Fe(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(Fe,"_ts_decorate");var v=class o{static{f(this,"ConfigService")}logger=new Be(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 ie.promises.access(r),r}catch{}e=w.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=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=Fe([De()],v);import{Module as ze}from"@nestjs/common";function _e(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(_e,"_ts_decorate");var D=class{static{f(this,"ConfigModule")}};D=_e([ze({providers:[v],exports:[v]})],D);function xt(o){return Z.parse(o)}f(xt,"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})({});import{Injectable as Ke,Logger as Qe}from"@nestjs/common";import{Injectable as We}from"@nestjs/common";import{Injectable as Ue}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"}f(ce,"detectOpenAPIVersion");function fe(o){return o==="3.0"||o==="3.1"}f(fe,"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}}f(Y,"getSchemaFromRef");function le(o){return o?"nullable"in o&&o.nullable===!0?!0:"type"in o&&Array.isArray(o.type)?o.type.includes("null"):!1:!1}f(le,"isSchemaNullable");function X(o){if(!(!o||!("type"in o)))return o.type}f(X,"getSchemaType");function Me(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(Me,"_ts_decorate");var k=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=Y(e,t);if(!r)return{kind:l.Unknown,nullable:!1};let s=le(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=X(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 I=r.properties[b],N=this.schemaRefToIR(e,I),F=r.required?.includes(b)||!1;u.push({name:b,type:N,required:F,annotations:this.extractAnnotations(I)})}}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=X(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}};k=Me([Ue()],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("")}f(O,"toPascalCase");function H(o){let e=O(o);return e===""?"":e.charAt(0).toLowerCase()+e.slice(1)}f(H,"toCamelCase");function V(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("_")}f(V,"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("-")}f(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],a=!1;s>0&&ee(n)&&(ee(r[s-1])?s<r.length-1&&!ee(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(te,"splitCamelCase");function ee(o){return o>="A"&&o<="Z"}f(ee,"isUppercase");function Ve(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(Ve,"_ts_decorate");function ue(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}f(ue,"_ts_metadata");var x=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:I}=this.collectParams(e,p),{requestBody:N,extractedTypes:F}=this.extractRequestBodyWithTypes(e,p,c,h,u,n);s.push(...F);let{response:A,extractedTypes:z}=this.extractResponseWithTypes(e,p,c,h,u,n);s.push(...z);let G=p.tags&&p.tags.length>0?[...p.tags]:["misc"];r[c].operations.push({operationID:h,method:u,path:y,tag:c,originalTags:G,summary:p.summary||"",description:p.description||"",deprecated:p.deprecated||!1,pathParams:b,queryParams:I,requestBody:N,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: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 H(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`${O(t)}${O(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[A,z]of Object.entries(h.content)){let G=this.detectStreamingContentType(A),M=this.schemaConverter.schemaRefToIR(e,z.schema);if(G.isStreaming)return{response:{typeTS:"",schema:M,description:h.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:l.Ref,ref:se,nullable:!1},description:h.description||"",isStreaming:!1,contentType:A},extractedTypes:[]};let L=this.generateTypeName(M,r,s,n,t.path,"Response");return M.kind===l.Object&&!a.has(L)?(a.add(L),i.push({name:L,schema:M,annotations:this.schemaConverter.extractAnnotations(z.schema)}),{response:{typeTS:"",schema:{kind:l.Ref,ref:L,nullable:!1},description:h.description||"",isStreaming:!1,contentType:A},extractedTypes:i}):{response:{typeTS:"",schema:M,description:h.description||"",isStreaming:!1,contentType:A},extractedTypes:[]}}}let b=Object.keys(h.content)[0],I=h.content[b],N=this.schemaConverter.schemaRefToIR(e,I.schema),F=this.detectStreamingContentType(b);return{response:{typeTS:"",schema:N,description:h.description||"",isStreaming:F.isStreaming,contentType:b,streamingFormat:F.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))}};x=Ve([We(),ue("design:type",Function),ue("design:paramtypes",[typeof k>"u"?Object:k])],x);import{Injectable as Le,Logger as Ze}from"@nestjs/common";import q from"@apidevtools/swagger-parser";import*as re from"fs";import*as ne from"path";function Ge(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(Ge,"_ts_decorate");var P=class o{static{f(this,"OpenApiService")}logger=new Ze(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 q.parse(i);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(i);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(a){this.logger.debug(`Bundle failed: ${a instanceof Error?a.message:String(a)}`),this.logger.debug("Attempting dereference directly"),r=await q.dereference(n)}}let s=ce(r);if(!fe(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=Ge([Le()],P);function Je(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(Je,"_ts_decorate");function me(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}f(me,"_ts_metadata");var j=class o{static{f(this,"GeneratorService")}irBuilder;openApiService;logger=new Qe(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)}};j=Je([Ke(),me("design:type",Function),me("design:paramtypes",[typeof x>"u"?Object:x,typeof P>"u"?Object:P])],j);import{Module as ct}from"@nestjs/common";import{Module as Xe}from"@nestjs/common";function Ye(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(Ye,"_ts_decorate");var B=class{static{f(this,"OpenApiModule")}};B=Ye([Xe({providers:[P],exports:[P]})],B);import{Injectable as st,Logger as at}from"@nestjs/common";import*as S 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=>H(o)),g.registerHelper("kebab",o=>pe(o)),g.registerHelper("snake",o=>V(o)),g.registerHelper("serviceName",o=>O(o)+"Service"),g.registerHelper("serviceProp",o=>H(o)),g.registerHelper("fileBase",o=>V(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(de,"registerCommonHandlebarsHelpers");function et(o){return o.replace(/&quot;/g,'"').replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&#x60;/g,"`").replace(/&#96;/g,"`").replace(/&amp;/g,"&")}f(et,"decodeHtmlEntities");function R(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=R(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=>R(a,e,t)).join(" | "):s="unknown";break;case l.AnyOf:o.anyOf?s=o.anyOf.map(a=>R(a,e,t)).join(" | "):s="unknown";break;case l.AllOf:o.allOf?s=o.allOf.map(a=>R(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=R(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"),et(s)}f(R,"schemaToTSType");function _(o){let e=o.path,t=e.includes("{")&&e.includes("}");if(o.operationID)return H(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(_,"deriveMethodName");async function ge(o,e){if(o.operationIdParser)try{let r=await o.operationIdParser(e.operationID,e.method,e.path);if(r)return H(r)}catch{}let t=tt(e.operationID);return t?H(t):_(e)}f(ge,"resolveMethodName");function tt(o){if(!o)return"";let e=o.indexOf("Controller_");return e>=0?o.substring(e+11):o}f(tt,"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}f(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("/")}'`}f(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 a=r.substring(s+1,n),i=t.get(a);i!==void 0&&e.push(o.pathParams[i]),s=n;continue}}return e}f(K,"orderPathParams");function he(o,e,t,r=!1){return R(o,t,e,r)}f(he,"schemaToTSTypeWithSimpleTypes");function oe(o,e,t,r,s=!1){let n=[];for(let a of K(o))n.push(`${a.name}: ${he(a.schema,t,r,s)}`);if(o.queryParams.length>0){let a=O(o.tag)+O(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(oe,"buildMethodSignature");function Se(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(Se,"collectPredefinedTypesUsedInSchema");function we(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(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}f(Te,"queryKeyArgs");function W(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(W,"quoteTSPropertyName");function Oe(o){return o.response.isStreaming===!0}f(Oe,"isStreamingOperation");function ve(o){let e=o.response.schema;return e.kind===l.Array&&e.items?R(e.items):o.response.streamingFormat==="sse"?"string":R(e)}f(ve,"getStreamingItemType");function $(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(${$(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(), ${$(o.additionalProperties,s,t,r)})`:n="z.record(z.string(), z.unknown())";else{let a=[];for(let c of o.properties){let p=$(c.type,s,t,r),u=W(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 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=$(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=>$(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=>$(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=>$(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($,"schemaToZodSchema");import{exec as rt}from"child_process";import{promisify as nt}from"util";import*as xe from"path";import*as Pe from"fs";var ke=nt(rt);async function je(o,e){let t=e||console;try{try{await ke("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=xe.join(o,"src");if(!Pe.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 ke('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(je,"formatWithPrettier");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");function Re(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}f(Re,"_ts_metadata");var C=class o{static{f(this,"TypeScriptGeneratorService")}configService;logger=new at(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 je(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 ge(e,n);return{...n,_resolvedMethodName:a}}))})));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||[],a=r?.data?.root?.PredefinedTypes||[],i=r?.data?.root?.isSameFile||!1;return oe(t,s,n,a,i).map(p=>new m.SafeString(p))}),m.registerHelper("methodSignatureNoInit",(t,r)=>{let s=t._resolvedMethodName||_(t),n=r?.data?.root?.IR?.modelDefs||[],a=r?.data?.root?.PredefinedTypes||[],i=r?.data?.root?.isSameFile||!1;return oe(t,s,n,a,i).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||[],a=r?.data?.root?.isSameFile||!1;return R(t,s,n,a)}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||[],a=r?.data?.root?.isSameFile||!1;if(t&&typeof t=="object"&&"kind"in t){let c=R(t,s,n,a).replace(/Schema\./g,"");return new m.SafeString(c)}if(typeof t=="string"){if(t.startsWith("Schema.")){let i=t.replace(/^Schema\./,"");return s.find(p=>p.type===i)?new m.SafeString(i):new m.SafeString(i)}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={"@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}),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=>W(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($(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 S.promises.access(n,S.constants.R_OK);let h=await S.promises.readFile(n,"utf-8"),b=m.compile(h),I={...t,_templateName:e},N=b(I);await S.promises.writeFile(r,N,"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=m.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,`${V(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")}}};$=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 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")}}};C=ot([st(),Re("design:type",Function),Re("design:paramtypes",[typeof v>"u"?Object:v])],C);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 Ce(o,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,e)}f(Ce,"_ts_metadata");var Q=class{static{f(this,"GeneratorModule")}generatorService;typeScriptGenerator;constructor(e,t){this.generatorService=e,this.typeScriptGenerator=t,this.generatorService.register(this.typeScriptGenerator)}};Q=it([ct({imports:[B,D],providers:[j,x,k,C],exports:[j,x,k]}),Ce("design:type",Function),Ce("design:paramtypes",[typeof j>"u"?Object:j,typeof C>"u"?Object:C])],Q);import*as E from"path";import*as He from"fs";async function rn(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,a=new k,i=new x(a),c=new j(i,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 He.promises.mkdir(y,{recursive:!0});let h={...u,outDir:y};await c.generate(t.spec,h)}}f(rn,"generate");async function nn(o){return U(o)}f(nn,"loadConfig");export{Ee as ClientSchema,D as ConfigModule,Z as ConfigSchema,v as ConfigService,Q as GeneratorModule,j as GeneratorService,l as IRSchemaKind,B as OpenApiModule,P as OpenApiService,Ie as PredefinedTypeSchema,ae as TYPESCRIPT_TEMPLATE_NAMES,qe as TypeScriptClientSchema,xt as defineConfig,rn as generate,nn as loadConfig,U as loadMjsConfig};
7
7
  //# sourceMappingURL=index.mjs.map