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