UNPKG

solgen

Version:

A TypeScript SDK generator for Solana IDL - Automatically generates type definitions, account interfaces, and instruction builders

35 lines (30 loc) 4.92 kB
"use strict";var d=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var x=(o,r)=>{for(var s in r)d(o,s,{get:r[s],enumerable:!0})},C=(o,r,s,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of h(r))!E.call(o,n)&&n!==s&&d(o,n,{get:()=>r[n],enumerable:!(t=f(r,n))||t.enumerable});return o};var w=o=>C(d({},"__esModule",{value:!0}),o);var T={};x(T,{genAnchorErrors:()=>p,genCustomErrors:()=>m,genErrors:()=>b,genIndex:()=>l});module.exports=w(T);var c=require("@coral-xyz/anchor"),u=require("ts-morph");function b(o,r,s){l(o,r,s),m(o,r,s),p(o,r,s)}function l(o,r,s){let t=o.createSourceFile(s("errors/index.ts"),"",{overwrite:!0}),n=r.errors&&r.errors.length>0;t.addStatements(['import { PublicKey } from "@solana/web3.js"']),t.addImportDeclaration({namespaceImport:"anchor",moduleSpecifier:"./anchor"}),n&&t.addImportDeclaration({namespaceImport:"custom",moduleSpecifier:"./custom"});let a=t.addFunction({isExported:!0,name:"fromCode",parameters:[{name:"code",type:"number"},{name:"logs",type:"string[]",hasQuestionToken:!0}],returnType:n?"custom.CustomError | anchor.AnchorError | null":"anchor.AnchorError | null"});n?a.setBodyText("return code >= 6000 ? custom.fromCode(code, logs) : anchor.fromCode(code, logs)"):a.setBodyText("return anchor.fromCode(code, logs)"),t.addFunction({name:"hasOwnProperty",typeParameters:[{name:"X extends object"},{name:"Y extends PropertyKey"}],parameters:[{name:"obj",type:"X"},{name:"prop",type:"Y"}],returnType:"obj is X & Record<Y, unknown>"}).setBodyText("return Object.hasOwnProperty.call(obj, prop);"),t.addVariableStatement({declarationKind:u.VariableDeclarationKind.Const,declarations:[{name:"errorRe",initializer:"/Program (\\w+) failed: custom program error: (\\w+)/"}]}),t.addFunction({isExported:!0,name:"fromTxError",parameters:[{name:"err",type:"unknown"},{name:"programId",type:"PublicKey"}],returnType:n?"custom.CustomError | anchor.AnchorError | null":"anchor.AnchorError | null"}).setBodyText(`if ( typeof err !== "object" || err === null || !hasOwnProperty(err, "logs") || !Array.isArray(err.logs) ) { return null } let firstMatch: RegExpExecArray | null = null for (const logLine of err.logs) { firstMatch = errorRe.exec(logLine) if (firstMatch !== null) { break } } if (firstMatch === null) { return null } const [programIdRaw, codeRaw] = firstMatch.slice(1) if (programIdRaw !== programId.toString()) { return null } let errorCode: number try { errorCode = parseInt(codeRaw, 16) } catch (parseErr) { return null } return fromCode(errorCode, err.logs)`)}function m(o,r,s){if(!r.errors||r.errors.length===0)return;let t=r.errors,n=o.createSourceFile(s("errors/custom.ts"),"",{overwrite:!0});n.addTypeAlias({name:"CustomError",type:t.map(e=>e.name).join(" | "),isExported:!0}),t.forEach(e=>{let i=[{name:"code",initializer:e.code.toString(),isReadonly:!0,isStatic:!0},{name:"code",initializer:e.code.toString(),isReadonly:!0},{name:"name",initializer:`"${e.name}"`,isReadonly:!0}];e.msg&&i.push({name:"msg",initializer:`"${e.msg}"`,isReadonly:!0}),n.addClass({isExported:!0,name:e.name,extends:"Error",properties:i}).addConstructor({parameters:[{name:"logs",isReadonly:!0,hasQuestionToken:!0,type:"string[]"}]}).setBodyText(`super("${e.code}: ${e.msg||""}")`)}),n.addFunction({isExported:!0,name:"fromCode",parameters:[{name:"code",type:"number"},{name:"logs",type:"string[]",hasQuestionToken:!0}],returnType:"CustomError | null"}).setBodyText(e=>{e.writeLine("switch (code)").block(()=>{t.forEach(i=>{e.writeLine(`case ${i.code}:`).indent(()=>{e.writeLine(`return new ${i.name}(logs);`)})})}).blankLine().writeLine("return null")})}function p(o,r,s){let t=o.createSourceFile(s("errors/anchor.ts"),"",{overwrite:!0});t.addTypeAlias({name:"AnchorError",type:Object.keys(c.LangErrorCode).join(" | "),isExported:!0}),Object.keys(c.LangErrorCode).forEach(a=>{let e=c.LangErrorCode[a],i=c.LangErrorMessage.get(e)||"";t.addClass({isExported:!0,name:a,extends:"Error",properties:[{name:"code",initializer:e.toString(),isReadonly:!0,isStatic:!0},{name:"code",initializer:e.toString(),isReadonly:!0},{name:"name",initializer:`"${a}"`,isReadonly:!0},{name:"msg",initializer:`"${i}"`,isReadonly:!0}]}).addConstructor({parameters:[{name:"logs",isReadonly:!0,hasQuestionToken:!0,type:"string[]"}]}).setBodyText(`super("${e}: ${i}")`)}),t.addFunction({isExported:!0,name:"fromCode",parameters:[{name:"code",type:"number"},{name:"logs",type:"string[]",hasQuestionToken:!0}],returnType:"AnchorError | null"}).setBodyText(a=>{a.writeLine("switch (code)").block(()=>{Object.keys(c.LangErrorCode).forEach(e=>{a.writeLine(`case ${c.LangErrorCode[e]}:`).indent(()=>{a.writeLine(`return new ${e}(logs);`)})})}).blankLine().writeLine("return null")})}0&&(module.exports={genAnchorErrors,genCustomErrors,genErrors,genIndex}); //# sourceMappingURL=errors.js.map