UNPKG

@ixily/activ

Version:

Alpha Capture Trade Idea Verification. Blockchain ownership proven trade ideas and strategies.

143 lines (140 loc) 4.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deterministicEvenlyMixedArray = exports.hashJsonStringPreSign = exports.deterministicStringify = void 0; /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! THIS CODE MUST MATCH LIT ACTIONS CODE CAUTION WHEN EDITING, YOU MUST REPLACE THE LIT ACTIONS CODE IF DO SO. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ // Deterministic JSON const jsonStringify = JSON.stringify; const isArray = Array.isArray || function (x) { return {}.toString.call(x) === '[object Array]'; }; const objectKeys = Object.keys || function (obj) { var has = Object.prototype.hasOwnProperty || function () { return true; }; var keys = []; for (var key in obj) { if (has.call(obj, key)) { keys.push(key); } } return keys; }; const deterministicStringify = function (obj, opts) { if (!opts) { opts = {}; } if (typeof opts === 'function') { opts = { cmp: opts }; } var space = opts.space || ''; if (typeof space === 'number') { space = Array(space + 1).join(' '); } var cycles = typeof opts.cycles === 'boolean' ? opts.cycles : false; var replacer = opts.replacer || function (key, value) { return value; }; var cmpOpt = opts.cmp; var cmp = cmpOpt && function (node) { return function (a, b) { return cmpOpt({ key: a, value: node[a] }, { key: b, value: node[b] }); }; }; var seen = []; return (function stringify(parent, key, node, level) { var indent = space ? '\n' + new Array(level + 1).join(space) : ''; var colonSeparator = space ? ': ' : ':'; if (node && node.toJSON && typeof node.toJSON === 'function') { node = node.toJSON(); } node = replacer.call(parent, key, node); if (node === undefined) { return; } if (typeof node !== 'object' || node === null) { return jsonStringify(node); } if (isArray(node)) { var out = []; for (var i = 0; i < node.length; i++) { var item = stringify(node, i, node[i], level + 1) || jsonStringify(null); out.push(indent + space + item); } return '[' + out.join(',') + indent + ']'; } if (seen.indexOf(node) !== -1) { if (cycles) { return jsonStringify('__cycle__'); } throw new TypeError('Converting circular structure to JSON'); } else { seen.push(node); } var keys = objectKeys(node).sort(cmp && cmp(node)); var out = []; for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = stringify(node, key, node[key], level + 1); if (!value) { continue; } var keyValue = jsonStringify(key) + colonSeparator + value; out.push(indent + space + keyValue); } seen.splice(seen.indexOf(node), 1); return '{' + out.join(',') + indent + '}'; })({ '': obj }, '', obj, 0); }; exports.deterministicStringify = deterministicStringify; /** * Returns a hash code from a string * Pre signing hash applicable to json strings objects */ const hashJsonStringPreSign = (str) => { let hash = 0; for (let i = 0, len = str.length; i < len; i++) { let chr = str.charCodeAt(i); hash = (hash << 5) - hash + chr; hash |= 0; // Convert to 32bit integer } const strPreHash = '' + hash; return strPreHash; }; exports.hashJsonStringPreSign = hashJsonStringPreSign; /** * * Receives an amount of arrays with some length each * and returns an evenly mixed array with all the elements of the input arrays * with no repetition or missing element in a deterministic way */ const deterministicEvenlyMixedArray = (arrs) => { const resultEvenlyArray = []; const arrsLength = arrs.length; const arrsLengths = arrs.map((arr) => arr.length); const maxArrLength = Math.max(...arrsLengths); for (let i = 0; i < maxArrLength; i++) { for (let j = 0; j < arrsLength; j++) { const arr = arrs[j]; const element = arr[i]; if (element !== undefined) { resultEvenlyArray.push(element); } } } return resultEvenlyArray; }; exports.deterministicEvenlyMixedArray = deterministicEvenlyMixedArray; //# sourceMappingURL=deterministic.tools.js.map