airgap-coin-lib
Version:
The airgap-coin-lib is a protocol agnostic library to prepare, sign and broadcast cryptocurrency transactions.
36 lines • 1.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
function isMichelineNode(node) {
return isMichelineNodeRecursive(node, 0);
}
exports.isMichelineNode = isMichelineNode;
function isMichelineNodeRecursive(node, recursionLevel) {
return (isMichelinePrimitive('int', node) ||
isMichelinePrimitive('string', node) ||
isMichelinePrimitive('bytes', node) ||
isMichelinePrimitiveApplication(node) ||
isMichelineSequenceRecursive(node, recursionLevel));
}
function isMichelinePrimitive(type, node) {
return node instanceof Object && type in node;
}
exports.isMichelinePrimitive = isMichelinePrimitive;
function isMichelinePrimitiveApplication(node) {
return node instanceof Object && 'prim' in node;
}
exports.isMichelinePrimitiveApplication = isMichelinePrimitiveApplication;
var MICHELINE_MAX_CHECK_RECURSION_DEPTH = 1;
function isMichelineSequence(node, recursive) {
if (recursive === void 0) { recursive = true; }
return isMichelineSequenceRecursive(node, recursive ? 0 : MICHELINE_MAX_CHECK_RECURSION_DEPTH + 1);
}
exports.isMichelineSequence = isMichelineSequence;
function isMichelineSequenceRecursive(node, recursionLevel) {
return (Array.isArray(node) &&
(node.length === 0 ||
// for simplicity and to avoid too many recursive calls for complex structures
// after the `MAX_CHECK_RECURSION_DEPTH`th level has been reached, we assume every array is a valid Micheline sequence
recursionLevel > MICHELINE_MAX_CHECK_RECURSION_DEPTH ||
node.every(function (element) { return isMichelineNodeRecursive(element, recursionLevel + 1); })));
}
//# sourceMappingURL=utils.js.map