@mavrykdynamics/taquito-michel-codec
Version:
Michelson parser/validator/formatter
62 lines (61 loc) • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatError = exports.traceDumpFunc = exports.formatStack = void 0;
const micheline_1 = require("./micheline");
const michelson_typecheck_1 = require("./michelson-typecheck");
const micheline_emitter_1 = require("./micheline-emitter");
const utils_1 = require("./utils");
function formatStack(s) {
if ('failed' in s) {
return `[FAILED: ${(0, micheline_emitter_1.emitMicheline)(s.failed)}]`;
}
return s
.map((v, i) => {
const ann = (0, utils_1.unpackAnnotations)(v);
return `[${i}${ann.v ? '/' + ann.v[0] : ''}]: ${(0, micheline_emitter_1.emitMicheline)(v)}`;
})
.join('\n');
}
exports.formatStack = formatStack;
function traceDumpFunc(blocks, cb) {
return (v) => {
var _a;
if (Array.isArray(v) && !blocks) {
return;
}
const macro = (_a = v.op[micheline_1.sourceReference]) === null || _a === void 0 ? void 0 : _a.macro;
const msg = `${macro ? 'Macro' : 'Op'}: ${macro ? (0, micheline_emitter_1.emitMicheline)(macro, undefined, true) + ' / ' : ''}${(0, micheline_emitter_1.emitMicheline)(v.op)}
Input:
${formatStack(v.in)}
Output:
${formatStack(v.out)}
`;
cb(msg);
};
}
exports.traceDumpFunc = traceDumpFunc;
function formatError(err) {
var _a;
if (err instanceof michelson_typecheck_1.MichelsonInstructionError) {
const macro = (_a = err.val[micheline_1.sourceReference]) === null || _a === void 0 ? void 0 : _a.macro;
return `${macro ? 'Macro' : 'Op'}: ${macro ? (0, micheline_emitter_1.emitMicheline)(macro, undefined, true) + ' / ' : ''}${(0, micheline_emitter_1.emitMicheline)(err.val)}
Stack:
${formatStack(err.stackState)}
`;
}
else if (err instanceof utils_1.MichelsonTypeError) {
const type = Array.isArray(err.val)
? '[' + err.val.map((v, i) => `[${i}]: ${(0, micheline_emitter_1.emitMicheline)(v)}`).join('; ') + ']'
: (0, micheline_emitter_1.emitMicheline)(err.val);
return `Type: ${type}
${err.data
? `Data: ${(0, micheline_emitter_1.emitMicheline)(err.data)}
`
: ''}
`;
}
else {
return `Value: ${(0, micheline_emitter_1.emitMicheline)(err.val)}`;
}
}
exports.formatError = formatError;