solgen
Version:
A TypeScript SDK generator for Solana IDL - Automatically generates type definitions, account interfaces, and instruction builders
12 lines • 21.9 kB
JavaScript
;var C=Object.create;var F=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var R=(n,e)=>{for(var a in e)F(n,a,{get:e[a],enumerable:!0})},B=(n,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of z(e))!K.call(n,p)&&p!==a&&F(n,p,{get:()=>e[p],enumerable:!(o=W(e,p))||o.enumerable});return n};var D=(n,e,a)=>(a=n!=null?C(M(n)):{},B(e||!n||!n.__esModule?F(a,"default",{value:n,enumerable:!0}):a,n)),V=n=>B(F({},"__esModule",{value:!0}),n);var v={};R(v,{genTypes:()=>G});module.exports=V(v);var $=D(require("camelcase"));var s=D(require("camelcase")),Q=require("js-sha256"),q=require("snake-case");function j(n){return`${n}Fields`}function O(n){return`${n}Value`}function T(n){return`${n}Kind`}function b(n){return`${n}JSON`}function m(n){return typeof n=="object"&&n!==null}function h(n,e,a="types.",o=!0){var p,t;switch(e){case"bool":return"boolean";case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"f32":return"number";case"u64":case"i64":return"BN";case"f64":return"number";case"u128":case"i128":return"BN";case"u256":case"i256":return"BN";case"bytes":return"Uint8Array";case"string":return"string";case"pubkey":return"PublicKey";default:if(m(e)&&"vec"in e)return`Array<${h(n,e.vec,a,o)}>`;if(m(e)&&"option"in e)return`${h(n,e.option,a,o)} | null`;if(m(e)&&"coption"in e)return`${h(n,e.coption,a,o)} | null`;if(m(e)&&"defined"in e){let r=(t=(p=n.types)==null?void 0:p.filter(i=>i.name===e.defined.name))!=null?t:[];if(r.length!==1)throw new Error(`Defined type not found: ${JSON.stringify(e)}`);switch(r[0].type.kind){case"struct":{let i=o?j(e.defined.name):e.defined.name;return`${a}${i}`}case"enum":{let i=T(e.defined.name);return`${a}${i}`}case"type":throw new Error("type layout support not implemented")}}if(m(e)&&"array"in e)return`Array<${h(n,e.array[0],a,o)}>`;if(typeof e=="object"&&"generic"in e)throw new Error("generic type not supported")}throw new Error("Unreachable.")}function L(n,e,a="types."){let o=p=>p===void 0?"":`"${p}"`;switch(n){case"bool":return`solay.bool(${o(e)})`;case"u8":return`solay.u8(${o(e)})`;case"i8":return`solay.i8(${o(e)})`;case"u16":return`solay.u16(${o(e)})`;case"i16":return`solay.i16(${o(e)})`;case"u32":return`solay.u32(${o(e)})`;case"f32":return`solay.f32(${o(e)})`;case"i32":return`solay.i32(${o(e)})`;case"u64":return`solay.u64(${o(e)})`;case"i64":return`solay.i64(${o(e)})`;case"f64":return`solay.f64(${o(e)})`;case"u128":return`solay.u128(${o(e)})`;case"i128":return`solay.i128(${o(e)})`;case"u256":return`solay.u256(${o(e)})`;case"i256":return`solay.i256(${o(e)})`;case"bytes":return`solay.vecU8(${o(e)})`;case"string":return`solay.str(${o(e)})`;case"pubkey":return`solay.publicKey(${o(e)})`;default:if(m(n)&&"vec"in n)return`solay.vec(${L(n.vec)}, ${o(e)})`;if(m(n)&&"option"in n)return`solay.option(${L(n.option)}, ${o(e)})`;if(m(n)&&"coption"in n)throw new Error("coption layout support not implemented");if(m(n)&&"defined"in n)return`${a}${n.defined.name}.layout(${o(e)})`;if(m(n)&&"array"in n){let p=e&&`, ${o(e)}`||"",t=n.array[1],r=n.array[0];return typeof r=="object"&&"defined"in r?`solay.array(${a}${r.defined.name}.layout(), ${t}${p})`:`solay.array(${L(r)}, ${t}${p})`}if(typeof n=="object"&&"generic"in n)throw new Error("generic type not supported")}throw new Error("Unreachable.")}function k(n,e,a="",o="types."){var p,t;switch(e.type){case"bool":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"f32":case"u64":case"i64":case"f64":case"u128":case"i128":case"u256":case"i256":case"string":case"pubkey":return`${a}${(0,s.default)(e.name)}`;case"bytes":{let r=`${a}${(0,s.default)(e.name)}`;return`Buffer.from(${r}.buffer, ${r}.byteOffset, ${r}.length)`}default:if(m(e.type)&&"vec"in e.type){let r=k(n,{name:"item",type:e.type.vec},"",o);return r==="item"?`${a}${(0,s.default)(e.name)}`:`${a}${(0,s.default)(e.name)}.map((item) => ${r})`}if(m(e.type)&&"option"in e.type){let r=k(n,{name:(0,s.default)(e.name),type:e.type.option},a,o);return r===`${a}${(0,s.default)(e.name)}`?r:`(${a}${(0,s.default)(e.name)} && ${r}) || null`}if(m(e.type)&&"coption"in e.type)throw new Error("coption layout support not implemented");if(m(e.type)&&"defined"in e.type){let r=e.type.defined,i=(t=(p=n.types)==null?void 0:p.filter(c=>c.name===r.name))!=null?t:[];if(i.length!==1)throw new Error(`Defined type not found: ${JSON.stringify(e)}`);switch(i[0].type.kind){case"struct":return`${o}${e.type.defined.name}.toEncodable(${a}${(0,s.default)(e.name)})`;case"enum":return`${a}${(0,s.default)(e.name)}.toEncodable()`;case"type":throw new Error("type layout support not implemented")}}if(m(e.type)&&"array"in e.type){let r=e.type.array[0];if(typeof r=="object"&&"defined"in r)return`${a}${(0,s.default)(e.name)}.map((item) => ${o}${r.defined.name}.toEncodable(item))`;let i=k(n,{name:"item",type:r},"",o);return i==="item"?`${a}${(0,s.default)(e.name)}`:`${a}${(0,s.default)(e.name)}.map((item) => ${i})`}throw typeof e.type=="object"&&"generic"in e.type?new Error("generic type not supported"):(e.type,new Error("Unreachable."))}}function S(n,e,a="",o="types."){var p,t;switch(e.type){case"bool":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"f32":case"u64":case"i64":case"f64":case"u128":case"i128":case"u256":case"i256":case"string":case"pubkey":return`${a}${(0,s.default)(e.name)}`;case"bytes":{let r=`${a}${(0,s.default)(e.name)}`;return`new Uint8Array(${r}.buffer, ${r}.byteOffset, ${r}.length)`}default:if(m(e.type)&&"vec"in e.type){let r=S(n,{name:"item",type:e.type.vec},"",o);return r==="item"?`${a}${(0,s.default)(e.name)}`:`${a}${(0,s.default)(e.name)}.map((item: any /* eslint-disable-line @typescript-eslint/no-explicit-any */) => ${r})`}if(m(e.type)&&"option"in e.type){let r=S(n,{name:(0,s.default)(e.name),type:e.type.option},a);return r===`${a}${(0,s.default)(e.name)}`?r:`(${a}${(0,s.default)(e.name)} && ${r}) || null`}if(m(e.type)&&"coption"in e.type)throw new Error("coption layout support not implemented");if(m(e.type)&&"defined"in e.type){let r=e.type.defined,i=(t=(p=n.types)==null?void 0:p.filter(c=>c.name===r.name))!=null?t:[];if(i.length!==1)throw new Error(`Defined type not found: ${JSON.stringify(e)}`);switch(i[0].type.kind){case"struct":case"enum":return`${o}${e.type.defined.name}.fromDecoded(${a}${(0,s.default)(e.name)})`;case"type":throw new Error("type layout support not implemented");default:throw i[0].type,new Error("Unreachable.")}}if(m(e.type)&&"array"in e.type){let r=e.type.array[0];if(typeof r=="object"&&"defined"in r)return`${a}${(0,s.default)(e.name)}.map((item: any /* eslint-disable-line @typescript-eslint/no-explicit-any */) => ${o}${r.defined.name}.fromDecoded(item))`;let i=S(n,{name:"item",type:r},"",o);return i==="item"?`${a}${(0,s.default)(e.name)}`:`${a}${(0,s.default)(e.name)}.map((item: any /* eslint-disable-line @typescript-eslint/no-explicit-any */) => ${i})`}throw typeof e.type=="object"&&"generic"in e.type?new Error("generic type not supported"):(e.type,new Error("Unreachable."))}}function w(n,e,a="fields."){var o,p;switch(e.type){case"bool":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"f32":case"u64":case"i64":case"f64":case"u128":case"i128":case"u256":case"i256":case"bytes":case"string":case"pubkey":return`${a}${(0,s.default)(e.name)}`;default:if(m(e.type)&&"defined"in e.type){let t=e.type.defined,r=(p=(o=n.types)==null?void 0:o.filter(i=>i.name===t.name))!=null?p:[];if(r.length!==1)throw new Error(`Defined type not found: ${t}`);switch(r[0].type.kind){case"struct":return`new types.${r[0].name}({ ...${a}${(0,s.default)(e.name)} })`;case"enum":return r[0].type.kind,`${a}${(0,s.default)(e.name)}`;case"type":throw new Error("alias layout support not implemented");default:r[0].type;return}}if(m(e.type)&&"option"in e.type){let t=w(n,{name:(0,s.default)(e.name),type:e.type.option},a);return t===`${a}${(0,s.default)(e.name)}`?t:`(${a}${(0,s.default)(e.name)} && ${t}) || null`}if(m(e.type)&&"coption"in e.type){let t=w(n,{name:(0,s.default)(e.name),type:e.type.coption},a);return t===`${a}${(0,s.default)(e.name)}`?t:`(${a}${(0,s.default)(e.name)} && ${t}) || null`}if(m(e.type)&&"array"in e.type){let t=e.type.array[0];if(typeof t=="object"&&"defined"in t)return`${a}${(0,s.default)(e.name)}.map((item) => new types.${t.defined.name}({ ...item }))`;let r=w(n,{name:"item",type:t},"");return r==="item"?`${a}${(0,s.default)(e.name)}`:`${a}${(0,s.default)(e.name)}.map((item) => ${r})`}if(m(e.type)&&"vec"in e.type){let t=`${w(n,{name:"item",type:e.type.vec},"")}`;return t==="item"?`${a}${(0,s.default)(e.name)}`:`${a}${(0,s.default)(e.name)}.map((item) => ${t})`}if(typeof e.type=="object"&&"generic"in e.type)throw new Error("generic layout support not implemented");e.type}}function E(n,e,a=""){var o,p;switch(e.type){case"bool":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"f32":case"f64":case"string":return`${a}${(0,s.default)(e.name)}`;case"u64":case"i64":case"u128":case"i128":case"u256":case"i256":case"pubkey":return`${a}${(0,s.default)(e.name)}.toString()`;case"bytes":return`Array.from(${a}${(0,s.default)(e.name)}.values())`;default:if(m(e.type)&&"vec"in e.type){let t=E(n,{name:"item",type:e.type.vec});return t==="item"?`${a}${(0,s.default)(e.name)}`:`${a}${(0,s.default)(e.name)}.map((item) => ${t})`}if(m(e.type)&&"array"in e.type){let t=e.type.array[0];if(typeof t=="object"&&"defined"in t)return`${a}${(0,s.default)(e.name)}.map((item) => item.toJSON())`;let r=E(n,{name:"item",type:t});return r==="item"?`${a}${(0,s.default)(e.name)}`:`${a}${(0,s.default)(e.name)}.map((item) => ${r})`}if(m(e.type)&&"option"in e.type){let t=E(n,{name:(0,s.default)(e.name),type:e.type.option},a);return t===`${a}${(0,s.default)(e.name)}`?t:`(${a}${(0,s.default)(e.name)} && ${t}) || null`}if(m(e.type)&&"coption"in e.type){let t=E(n,{name:(0,s.default)(e.name),type:e.type.coption},a);return t===`${a}${(0,s.default)(e.name)}`?t:`(${a}${(0,s.default)(e.name)} && ${t}) || null`}if(m(e.type)&&"defined"in e.type){let t=e.type.defined,r=(p=(o=n.types)==null?void 0:o.filter(i=>i.name===t.name))!=null?p:[];if(r.length!==1)throw new Error(`Defined type not found: ${JSON.stringify(e)}`);switch(r[0].type.kind){case"struct":case"enum":return`${a}${(0,s.default)(e.name)}.toJSON()`;case"type":throw new Error("type layout support not implemented");default:throw r[0].type,new Error("Unreachable.")}}throw typeof e.type=="object"&&"generic"in e.type?new Error("generic layout support not implemented"):(e.type,new Error("Unreachable."))}}function g(n,e="types."){switch(n){case"bool":return"boolean";case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"f32":case"f64":return"number";case"string":case"u64":case"i64":case"u128":case"i128":case"u256":case"i256":case"pubkey":return"string";case"bytes":return"Array<number>";default:if(m(n)&&"vec"in n)return`Array<${g(n.vec,e)}>`;if(m(n)&&"array"in n)return`Array<${g(n.array[0],e)}>`;if(m(n)&&"option"in n)return`${g(n.option,e)} | null`;if(m(n)&&"coption"in n)return`${g(n.coption,e)} | null`;if(m(n)&&"defined"in n)return`${e}${b(n.defined.name)}`;throw typeof n=="object"&&"generic"in n?new Error("generic type not supported"):new Error("Unreachable.")}}function I(n,e="obj",a="types."){let o=e?e+".":"";switch(n.type){case"bool":case"u8":case"i8":case"u16":case"i16":case"u32":case"i32":case"f32":case"f64":case"string":return`${o}${(0,s.default)(n.name)}`;case"bytes":return`Uint8Array.from(${o}${(0,s.default)(n.name)})`;case"u64":case"i64":case"u128":case"i128":return`new BN(${o}${(0,s.default)(n.name)})`;case"u256":case"i256":case"pubkey":return`new PublicKey(${o}${(0,s.default)(n.name)})`;default:if(m(n.type)&&"vec"in n.type){let p=I({name:"item",type:n.type.vec},"",a);return p==="item"?`${o}${(0,s.default)(n.name)}`:`${o}${(0,s.default)(n.name)}.map((item) => ${p})`}if(m(n.type)&&"array"in n.type){let p=I({name:"item",type:n.type.array[0]},"",a);return p==="item"?`${o}${(0,s.default)(n.name)}`:`${o}${(0,s.default)(n.name)}.map((item) => ${p})`}if(m(n.type)&&"option"in n.type){let p=I({name:(0,s.default)(n.name),type:n.type.option},e,a);return p===`${o}${(0,s.default)(n.name)}`?p:`(${o}${(0,s.default)(n.name)} && ${p}) || null`}if(m(n.type)&&"coption"in n.type){let p=I({name:(0,s.default)(n.name),type:n.type.coption},e,a);return p===`${o}${(0,s.default)(n.name)}`?p:`(${o}${(0,s.default)(n.name)} && ${p}) || null`}if(m(n.type)&&"defined"in n.type)return`${a}${n.type.defined.name}.fromJSON(${o}${(0,s.default)(n.name)})`;throw typeof n.type=="object"&&"generic"in n.type?new Error("generic type not supported"):(n.type,new Error("Unreachable."))}}function G(n,e,a){e.types===void 0||e.types.length===0||(H(n,e,a),X(n,e,a))}function H(n,e,a){var p;let o=n.createSourceFile(a("types/index.ts"),"",{overwrite:!0});(p=e.types)==null||p.forEach(t=>{switch(t.type.kind){case"struct":o.addExportDeclaration({namedExports:[t.name],moduleSpecifier:`./${t.name}`}),o.addExportDeclaration({namedExports:[j(t.name),b(t.name)],isTypeOnly:!0,moduleSpecifier:`./${t.name}`});return;case"enum":o.addImportDeclaration({namespaceImport:t.name,moduleSpecifier:`./${t.name}`}),o.addExportDeclaration({namedExports:[t.name]}),o.addTypeAlias({isExported:!0,name:T(t.name),type:t.type.variants.map(r=>`${t.name}.${r.name}`).join(" | "),docs:t.docs&&[t.docs.join(`
`)]}),o.addTypeAlias({isExported:!0,name:b(t.name),type:t.type.variants.map(r=>`${t.name}.${b(r.name)}`).join(" | ")});return;case"type":throw new Error("type layout support not implemented");default:t.type}})}function X(n,e,a){var o;(o=e.types)==null||o.forEach(p=>{let t=n.createSourceFile(a(`types/${p.name}.ts`),"",{overwrite:!0});switch(p.type.kind){case"struct":{if(!p.type.fields)throw new Error(`Fields for ${p.name} not found`);Y(e,t,p.name,p.type.fields,p.docs);return}case"enum":{Z(e,t,p.name,p.type.variants);return}case"type":throw new Error("type layout support not implemented");default:p.type}})}function Y(n,e,a,o,p){e.addStatements(['import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars','import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars','import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars','import * as solay from "solay"']),e.addInterface({isExported:!0,name:j(a),properties:o.map(i=>({name:(0,$.default)(i.name),type:h(n,i.type),docs:i.docs&&[i.docs.join(`
`)]}))}),e.addInterface({isExported:!0,name:b(a),properties:o.map(i=>({name:(0,$.default)(i.name),type:g(i.type),docs:i.docs&&[i.docs.join(`
`)]}))});let t=e.addClass({isExported:!0,name:a,properties:o.map(i=>({isReadonly:!0,name:(0,$.default)(i.name),type:h(n,i.type,"types.",!1),docs:i.docs&&[i.docs.join(`
`)]})),docs:p&&[p.join(`
`)]});t.addConstructor({parameters:[{name:"fields",type:j(a)}],statements:i=>{o.forEach(c=>{let y=w(n,c);i.writeLine(`this.${(0,$.default)(c.name)} = ${y}`)})}}),t.addMethod({isStatic:!0,name:"layout",typeParameters:[{name:"P",constraint:"string"}],parameters:[{name:"property",type:"P",hasQuestionToken:!0}],statements:[i=>{i.write("return solay.struct(["),o.forEach(c=>{i.writeLine(L(c.type,(0,$.default)(c.name))+",")}),i.write("], property)")}]});let r=t.addMethod({isStatic:!0,name:"fromDecoded",parameters:[{name:"obj",type:"any"}],statements:[i=>{i.write(`return new ${a}({`),o.forEach(c=>{let y=S(n,c,"obj.");i.writeLine(`${(0,$.default)(c.name)}: ${y},`)}),i.write("})")}]});t.insertText(r.getStart(),`// eslint-disable-next-line @typescript-eslint/no-explicit-any
`),t.addMethod({isStatic:!0,name:"toEncodable",parameters:[{name:"fields",type:j(a)}],statements:[i=>{i.write("return {"),o.forEach(c=>{i.writeLine(`${(0,$.default)(c.name)}: ${k(n,c,"fields.")},`)}),i.write("}")}]}),t.addMethod({name:"toJSON",returnType:b(a),statements:[i=>{i.write("return {"),o.forEach(c=>{i.writeLine(`${(0,$.default)(c.name)}: ${E(n,c,"this.")},`)}),i.write("}")}]}),t.addMethod({isStatic:!0,name:"fromJSON",returnType:a,parameters:[{name:"obj",type:b(a)}],statements:[i=>{i.write(`return new ${a}({`),o.forEach(c=>{i.writeLine(`${(0,$.default)(c.name)}: ${I(c)},`)}),i.write("})")}]}),t.addMethod({name:"toEncodable",statements:[`return ${a}.toEncodable(this)`]})}function Z(n,e,a,o){e.addStatements(['import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars','import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars','import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars','import * as solay from "solay"']),o.forEach((t,r)=>{let i=r,c=t.fields;if(c&&c.length>0){let f,d;typeof c[0]=="object"&&"name"in c[0]?(f=u=>{u.write("{"),c.forEach(l=>{l.docs&&u.writeLine(`/** ${l.docs.join(`
`)} */`),u.writeLine(`${(0,$.default)((0,$.default)(l.name))}: ${h(n,l.type)}`)}),u.writeLine("}")},d=u=>{u.write("{"),c.forEach(l=>{l.docs&&u.writeLine(`/** ${l.docs.join(`
`)} */`),u.writeLine(`${(0,$.default)((0,$.default)(l.name))}: ${h(n,l.type,"types.",!1)}`)}),u.writeLine("}")}):(f=u=>{u.write("["),c.forEach(l=>{u.writeLine(`${h(n,l)},`)}),u.writeLine("]")},d=u=>{u.write("["),c.forEach(l=>{u.writeLine(`${h(n,l,"types.",!1)},`)}),u.writeLine("]")}),e.addTypeAlias({isExported:!0,name:j(t.name),type:f}),e.addTypeAlias({isExported:!0,name:O(t.name),type:d})}let y=e.addInterface({isExported:!0,name:b(t.name),properties:[{name:"kind",type:`"${t.name}"`}]});if(c!==void 0&&c.length>0){let f=d=>{typeof c[0]=="object"&&"name"in c[0]?d.inlineBlock(()=>{c.forEach(u=>{u.docs&&d.writeLine(`/** ${u.docs.join(`
`)} */`);let l=(0,$.default)((0,$.default)(u.name));d.writeLine(`${l}: ${g(u.type)},`)})}):(d.write("["),d.blankLine(),c.forEach(u=>{d.writeLine(`${g(u)},`)}),d.write("]"))};y.addProperty({name:"value",type:f})}let N=e.addClass({isExported:!0,name:t.name,properties:[{isReadonly:!0,name:"discriminator",initializer:i.toString(),isStatic:!0},{isReadonly:!0,name:"kind",initializer:`"${t.name}"`,isStatic:!0},{isReadonly:!0,name:"discriminator",initializer:i.toString()},{isReadonly:!0,name:"kind",initializer:`"${t.name}"`}]});c&&c.length>0&&N.addProperty({isReadonly:!0,name:"value",type:O(t.name)}),c&&c.length>0&&N.addConstructor({parameters:[{name:"value",type:j(t.name)}]}).setBodyText(d=>{typeof c[0]=="object"&&"name"in c[0]?(d.write("this.value = {"),c.forEach(u=>{let l=(0,$.default)((0,$.default)(u.name));d.writeLine(`${l}: ${w(n,{...u,name:l},"value.")},`)}),d.writeLine("}")):(d.write("this.value = ["),c.forEach((u,l)=>{let U=`value[${l}]`;d.writeLine(`${w(n,{name:U,type:u},"")},`)}),d.writeLine("]"))});let A=f=>{f.write("return"),f.inlineBlock(()=>{f.writeLine(`kind: "${t.name}",`),!(c===void 0||c.length===0)&&(f.write("value: "),typeof c[0]=="object"&&"name"in c[0]?f.inlineBlock(()=>{c.forEach(d=>{let u=(0,$.default)((0,$.default)(d.name));f.writeLine(`${u}: ${E(n,{...d,name:u},"this.value.")},`)})}):(f.write("["),c.forEach((d,u)=>{let l=`value[${u}]`;f.writeLine(`${E(n,{name:l,type:d},"this.")},`)}),f.write("]")))})};N.addMethod({name:"toJSON",returnType:b(t.name),statements:[A]});let J=f=>{f.write("return").inlineBlock(()=>{f.writeLine(`${t.name}: {`),c==null||c.forEach((d,u)=>{if(typeof d=="object"&&"name"in d){let l=k(n,{...d,name:(0,$.default)((0,$.default)(d.name))},"this.value.");f.writeLine(`${(0,$.default)(d.name)}: ${l},`)}else{let l=k(n,{type:d,name:`[${u}]`},"this.value");f.writeLine(`_${u}: ${l},`)}}),f.writeLine("}")})};N.addMethod({name:"toEncodable",statements:[J]})});let p=e.addFunction({isExported:!0,name:"fromDecoded",parameters:[{name:"obj",type:"any"}],returnType:`types.${T(a)}`,statements:[t=>{t.write('if (typeof obj !== "object")').block(()=>{t.writeLine('throw new Error("Invalid enum object")')}),t.blankLine(),o.forEach(r=>{t.write(`if ("${r.name}" in obj)`).block(()=>{r.fields&&r.fields.length>0?(t.writeLine(`const val = obj["${r.name}"]`),typeof r.fields[0]=="object"&&"name"in r.fields[0]?(t.write(`return new ${r.name}({`),r.fields.forEach(i=>{let c=S(n,{...i,name:`val["${(0,$.default)(i.name)}"]`},"");t.writeLine(`${(0,$.default)((0,$.default)(i.name))}: ${c},`)}),t.writeLine("})")):(t.write(`return new ${r.name}([`),r.fields.forEach((i,c)=>{let y=S(n,{type:i,name:`val["_${c}"]`},"");t.writeLine(`${y},`)}),t.writeLine("])"))):t.writeLine(`return new ${r.name}()`)})}),t.blankLine(),t.writeLine('throw new Error("Invalid enum object")')}]});e.insertText(p.getStart(),`// eslint-disable-next-line @typescript-eslint/no-explicit-any
`),e.addFunction({isExported:!0,name:"fromJSON",parameters:[{name:"obj",type:`types.${b(a)}`}],returnType:`types.${T(a)}`,statements:[t=>{t.write("switch (obj.kind)").block(()=>{o.forEach(r=>{t.write(`case "${r.name}":`).block(()=>{r.fields&&r.fields.length>0?typeof r.fields[0]=="object"&&"name"in r.fields[0]?(t.write(`return new ${r.name}({`),r.fields.forEach(i=>{let c=I({...i,name:(0,$.default)((0,$.default)(i.name))},"obj.value");t.writeLine(`${(0,$.default)((0,$.default)(i.name))}: ${c},`)}),t.writeLine("})")):(t.write(`return new ${r.name}([`),r.fields.forEach((i,c)=>{let y=I({type:i,name:`value[${c}]`});t.writeLine(`${y},`)}),t.writeLine("])")):t.writeLine(`return new ${r.name}()`)})})})}]}),e.addFunction({isExported:!0,name:"layout",parameters:[{name:"property",hasQuestionToken:!0,type:"string"}],statements:[t=>{t.write("const ret = solay.rustEnum(["),t.indent(()=>{o.forEach(r=>{t.writeLine("solay.struct(["),t.indent(()=>{var i;(i=r.fields)==null||i.forEach((c,y)=>{typeof c=="object"&&"type"in c?t.writeLine(L(c.type,(0,$.default)(c.name))+","):t.writeLine(L(c,`_${y}`)+",")})}),t.writeLine(`], "${r.name}"),`)})}),t.writeLine("])"),t.writeLine("if (property !== undefined)").block(()=>{t.writeLine("return ret.replicate(property)")}),t.writeLine("return ret")}]})}0&&(module.exports={genTypes});
//# sourceMappingURL=types.js.map