@ckb-lumos/codec
Version:
Make your own molecule binding in JavaScript(TypeScript)
58 lines (55 loc) • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CodecExecuteError = exports.CodecBaseParseError = exports.CODEC_OPTIONAL_PATH = void 0;
exports.isCodecExecuteError = isCodecExecuteError;
// lc for lumos codec
const CODEC_OPTIONAL_PATH = exports.CODEC_OPTIONAL_PATH = "__lc_option__";
class CodecBaseParseError extends Error {
constructor(message, expectedType) {
super(message);
this.expectedType = expectedType;
}
}
exports.CodecBaseParseError = CodecBaseParseError;
const CODEC_EXECUTE_ERROR_NAME = "CodecExecuteError";
function isCodecExecuteError(error) {
if (!(error instanceof Error)) return false;
return error.name === CODEC_EXECUTE_ERROR_NAME;
}
/**
* This Error class can collect CodecBaseParseError, and put an human-readable error
*/
class CodecExecuteError extends Error {
name = CODEC_EXECUTE_ERROR_NAME;
constructor(origin) {
super();
this.origin = origin;
}
keys = [];
updateKey(key) {
this.keys.push(key);
this.message = this.getPackErrorMessage();
}
getPackErrorMessage() {
var _this$origin$stack;
const reducer = (acc, cur, index) => {
if (cur === CODEC_OPTIONAL_PATH) {
cur = index === 0 ? "?" : "?.";
} else if (typeof cur === "number") {
cur = `[${cur}]`;
} else {
cur = `.${cur}`;
}
return acc + cur;
};
const path = this.keys.reduceRight(reducer, "input");
const text = this.origin instanceof CodecBaseParseError ? `Expect type ${this.origin.expectedType} at ${path} but got error:` : `Error at ${path}:`; // this.origin can be an Error at runtime
return `${text} ${this.origin.message}
${(_this$origin$stack = this.origin.stack) === null || _this$origin$stack === void 0 ? void 0 : _this$origin$stack.replace(/Error:.+?\n/, "")}
`;
}
}
exports.CodecExecuteError = CodecExecuteError;
//# sourceMappingURL=error.js.map