UNPKG

@honeycomb-protocol/solita

Version:

Generates SDK API from solana contract IDL.

71 lines (66 loc) 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.renderErrors = void 0; function asHex(code) { return `0x${code.toString(16)}`; } function renderError(error) { const { code: codeNum, name, msg = '' } = error; const code = asHex(codeNum); const className = name .charAt(0) .toUpperCase() .concat(`${name.slice(1)}Error`); return ` /** * ${name}: '${msg}' * * @category Errors * @category generated */ export class ${className} extends Error { readonly code: number = ${code}; readonly name: string = '${name}'; constructor() { super('${msg.replace(/[']/g, `\\'`)}'); if (typeof Error.captureStackTrace === 'function') { Error.captureStackTrace(this, ${className}); } } } createErrorFromCodeLookup.set(${code}, () => new ${className}()) createErrorFromNameLookup.set('${name}', () => new ${className}()) `; } function renderErrors(errors) { if (errors.length === 0) return null; const errorsCode = errors.map(renderError).join('\n'); return ` type ErrorWithCode = Error & { code: number } type MaybeErrorWithCode = ErrorWithCode | null | undefined const createErrorFromCodeLookup: Map<number, () => ErrorWithCode> = new Map(); const createErrorFromNameLookup: Map<string, () => ErrorWithCode> = new Map(); ${errorsCode} /** * Attempts to resolve a custom program error from the provided error code. * @category Errors * @category generated */ export function errorFromCode(code: number): MaybeErrorWithCode { const createError = createErrorFromCodeLookup.get(code) return createError != null ? createError() : null; } /** * Attempts to resolve a custom program error from the provided error name, i.e. 'Unauthorized'. * @category Errors * @category generated */ export function errorFromName(name: string): MaybeErrorWithCode { const createError = createErrorFromNameLookup.get(name) return createError != null ? createError() : null; } `.trim(); } exports.renderErrors = renderErrors; //# sourceMappingURL=render-errors.js.map