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