UNPKG

@codama/errors

Version:
145 lines (134 loc) 8.89 kB
'use strict'; var commander = require('commander'); var pico = require('picocolors'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var pico__default = /*#__PURE__*/_interopDefault(pico); // src/cli/index.ts // package.json var version = "1.5.0"; // src/context.ts function decodeEncodedContext(encodedContext) { const decodedUrlString = Buffer.from(encodedContext, "base64").toString("utf8") ; return Object.fromEntries(new URLSearchParams(decodedUrlString).entries()); } // src/codes.ts var CODAMA_ERROR__UNRECOGNIZED_NODE_KIND = 1; var CODAMA_ERROR__UNEXPECTED_NODE_KIND = 2; var CODAMA_ERROR__UNEXPECTED_NESTED_NODE_KIND = 3; var CODAMA_ERROR__LINKED_NODE_NOT_FOUND = 4; var CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE = 5; var CODAMA_ERROR__VERSION_MISMATCH = 6; var CODAMA_ERROR__UNRECOGNIZED_NUMBER_FORMAT = 7; var CODAMA_ERROR__UNRECOGNIZED_BYTES_ENCODING = 8; var CODAMA_ERROR__ENUM_VARIANT_NOT_FOUND = 9; var CODAMA_ERROR__DISCRIMINATOR_FIELD_NOT_FOUND = 10; var CODAMA_ERROR__DISCRIMINATOR_FIELD_HAS_NO_DEFAULT_VALUE = 11; var CODAMA_ERROR__VISITORS__CANNOT_ADD_DUPLICATED_PDA_NAMES = 12e5; var CODAMA_ERROR__VISITORS__INVALID_PDA_SEED_VALUES = 1200001; var CODAMA_ERROR__VISITORS__CYCLIC_DEPENDENCY_DETECTED_WHEN_RESOLVING_INSTRUCTION_DEFAULT_VALUES = 1200002; var CODAMA_ERROR__VISITORS__CANNOT_USE_OPTIONAL_ACCOUNT_AS_PDA_SEED_VALUE = 1200003; var CODAMA_ERROR__VISITORS__INVALID_INSTRUCTION_DEFAULT_VALUE_DEPENDENCY = 1200004; var CODAMA_ERROR__VISITORS__ACCOUNT_FIELD_NOT_FOUND = 1200005; var CODAMA_ERROR__VISITORS__INVALID_NUMBER_WRAPPER = 1200006; var CODAMA_ERROR__VISITORS__CANNOT_EXTEND_MISSING_VISIT_FUNCTION = 1200007; var CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE = 1200008; var CODAMA_ERROR__VISITORS__INSTRUCTION_ENUM_ARGUMENT_NOT_FOUND = 1200009; var CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES = 1200010; var CODAMA_ERROR__VISITORS__RENDER_MAP_KEY_NOT_FOUND = 1200011; var CODAMA_ERROR__VISITORS__CANNOT_REMOVE_LAST_PATH_IN_NODE_STACK = 1200012; var CODAMA_ERROR__ANCHOR__UNRECOGNIZED_IDL_TYPE = 21e5; var CODAMA_ERROR__ANCHOR__ACCOUNT_TYPE_MISSING = 2100001; var CODAMA_ERROR__ANCHOR__ARGUMENT_TYPE_MISSING = 2100002; var CODAMA_ERROR__ANCHOR__TYPE_PATH_MISSING = 2100003; var CODAMA_ERROR__ANCHOR__SEED_KIND_UNIMPLEMENTED = 2100004; var CODAMA_ERROR__ANCHOR__PROGRAM_ID_KIND_UNIMPLEMENTED = 2100005; var CODAMA_ERROR__ANCHOR__GENERIC_TYPE_MISSING = 2100006; var CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE = 28e5; var CODAMA_ERROR__RENDERERS__MISSING_DEPENDENCY_VERSIONS = 2800001; // src/messages.ts var CodamaErrorMessages = { [CODAMA_ERROR__ANCHOR__ACCOUNT_TYPE_MISSING]: "Account type [$name] is missing from the IDL types.", [CODAMA_ERROR__ANCHOR__ARGUMENT_TYPE_MISSING]: "Argument name [$name] is missing from the instruction definition.", [CODAMA_ERROR__ANCHOR__GENERIC_TYPE_MISSING]: "Generic type [$name] is missing from the IDL types.", [CODAMA_ERROR__ANCHOR__PROGRAM_ID_KIND_UNIMPLEMENTED]: "Program ID kind [$kind] is not implemented.", [CODAMA_ERROR__ANCHOR__SEED_KIND_UNIMPLEMENTED]: "Seed kind [$kind] is not implemented.", [CODAMA_ERROR__ANCHOR__TYPE_PATH_MISSING]: "Field type is missing for path [$path] in [$idlType].", [CODAMA_ERROR__ANCHOR__UNRECOGNIZED_IDL_TYPE]: "Unrecognized Anchor IDL type [$idlType].", [CODAMA_ERROR__DISCRIMINATOR_FIELD_HAS_NO_DEFAULT_VALUE]: "Discriminator field [$field] has no default value.", [CODAMA_ERROR__DISCRIMINATOR_FIELD_NOT_FOUND]: "Could not find discriminator field [$field]", [CODAMA_ERROR__ENUM_VARIANT_NOT_FOUND]: "Enum variant [$variant] not found in enum type [$enumName].", [CODAMA_ERROR__LINKED_NODE_NOT_FOUND]: "Could not find linked node [$name] from [$kind].", [CODAMA_ERROR__NODE_FILESYSTEM_FUNCTION_UNAVAILABLE]: "Node.js filesystem function [$fsFunction] is not available in your environment.", [CODAMA_ERROR__RENDERERS__MISSING_DEPENDENCY_VERSIONS]: "No version specified for the following dependencies: [$dependencies]. $message", [CODAMA_ERROR__RENDERERS__UNSUPPORTED_NODE]: "Cannot render the encountered node of kind [$kind].", [CODAMA_ERROR__UNEXPECTED_NESTED_NODE_KIND]: "Expected nested node of kind [$expectedKinds], got [$kind]", [CODAMA_ERROR__UNEXPECTED_NODE_KIND]: "Expected node of kind [$expectedKinds], got [$kind].", [CODAMA_ERROR__UNRECOGNIZED_BYTES_ENCODING]: "Unrecognized bytes encoding [$encoding].", [CODAMA_ERROR__UNRECOGNIZED_NODE_KIND]: "Unrecognized node kind [$kind].", [CODAMA_ERROR__UNRECOGNIZED_NUMBER_FORMAT]: "Unrecognized number format [$format].", [CODAMA_ERROR__VERSION_MISMATCH]: "The provided RootNode version [$rootVersion] is not compatible with the installed Codama version [$codamaVersion].", [CODAMA_ERROR__VISITORS__ACCOUNT_FIELD_NOT_FOUND]: "Account [$name] does not have a field named [$missingField].", [CODAMA_ERROR__VISITORS__CANNOT_ADD_DUPLICATED_PDA_NAMES]: "Cannot add PDAs to program [$programName] because the following PDA names already exist [$duplicatedPdaNames].", [CODAMA_ERROR__VISITORS__CANNOT_EXTEND_MISSING_VISIT_FUNCTION]: "Cannot extend visitor with function [$visitFunction] as the base visitor does not support it.", [CODAMA_ERROR__VISITORS__CANNOT_FLATTEN_STRUCT_WITH_CONFLICTING_ATTRIBUTES]: "Cannot flatten struct since this would cause the following attributes to conflict [$conflictingAttributes].", [CODAMA_ERROR__VISITORS__CANNOT_REMOVE_LAST_PATH_IN_NODE_STACK]: "Cannot remove the last path in the node stack.", [CODAMA_ERROR__VISITORS__CANNOT_USE_OPTIONAL_ACCOUNT_AS_PDA_SEED_VALUE]: "Cannot use optional account [$seedValueName] as the [$seedName] PDA seed for the [$instructionAccountName] account of the [$instructionName] instruction.", [CODAMA_ERROR__VISITORS__CYCLIC_DEPENDENCY_DETECTED_WHEN_RESOLVING_INSTRUCTION_DEFAULT_VALUES]: "Circular dependency detected when resolving the accounts and arguments' default values of the [$instructionName] instruction. Got the following dependency cycle [$formattedCycle].", [CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE]: "Failed to validate the given node [$formattedHistogram].", [CODAMA_ERROR__VISITORS__INSTRUCTION_ENUM_ARGUMENT_NOT_FOUND]: "Could not find an enum argument named [$argumentName] for instruction [$instructionName].", [CODAMA_ERROR__VISITORS__INVALID_INSTRUCTION_DEFAULT_VALUE_DEPENDENCY]: "Dependency [$dependencyName] of kind [$dependencyKind] is not a valid dependency of [$parentName] of kind [$parentKind] in the [$instructionName] instruction.", [CODAMA_ERROR__VISITORS__INVALID_NUMBER_WRAPPER]: "Invalid number wrapper kind [$wrapper].", [CODAMA_ERROR__VISITORS__INVALID_PDA_SEED_VALUES]: "Invalid seed values for PDA [$pdaName] in instruction [$instructionName].", [CODAMA_ERROR__VISITORS__RENDER_MAP_KEY_NOT_FOUND]: "Cannot find key [$key] in RenderMap." }; // src/message-formatter.ts function getHumanReadableErrorMessage(code, context = {}) { const messageFormatString = CodamaErrorMessages[code]; const message = messageFormatString.replace( /(?<!\\)\$(\w+)/g, (substring, variableName) => variableName in context ? `${context[variableName]}` : substring ); return message; } // src/cli/index.ts var program = new commander.Command(); program.name("@codama/errors").description("Decode Codama JavaScript errors thrown in production").version(version); program.command("decode").description("Decode a `CodamaErrorCode` to a human-readable message").argument("<code>", "numeric error code to decode", (rawCode) => { const code = parseInt(rawCode, 10); if (isNaN(code) || `${code}` !== rawCode) { throw new commander.InvalidArgumentError("It must be an integer"); } if (!(code in CodamaErrorMessages)) { throw new commander.InvalidArgumentError("There exists no error with that code"); } return code; }).argument("[encodedContext]", "encoded context to interpolate into the error message", (encodedContext) => { try { return decodeEncodedContext(encodedContext); } catch { throw new commander.InvalidArgumentError("Encoded context malformed"); } }).action((code, context) => { const header = codamaColor(pico__default.default.bold("[Decoded]") + ` Codama error code #${code}`); const message = getHumanReadableErrorMessage(code, context); console.log(` ${header} ${message}`); if (context) { const contextHeader = pico__default.default.blue(pico__default.default.bold("[Context]")); const contextString = JSON.stringify(context, null, 4).split("\n").join("\n "); console.log(` ${contextHeader} ${contextString}`); } }); function run(argv) { program.parse(argv); } function codamaColor(text) { if (!pico__default.default.isColorSupported) return text; return `\x1B[38;2;231;171;97m${text}\x1B[0m`; } exports.run = run; //# sourceMappingURL=cli.cjs.map //# sourceMappingURL=cli.cjs.map