UNPKG

simple-pure-utils

Version:

Funciones puras para manipulación de objetos, arreglos, promesas y observables

81 lines 7.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.reoderPushId = exports.generatePushId = void 0; const bignum_1 = require("./pushid/bignum"); /**ASCII ordered base64 */ const system = (0, bignum_1.createBase)('-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'); const ranLen = 8; const pushIdLen = 8 + 8 + ranLen; const minPushId = (0, bignum_1.minValue)(pushIdLen, system); function timestampToChars() { return (0, bignum_1.toBaseN)(new Date().getTime(), 8, system); } let lastTimestamp = timestampToChars(); let lastConsec = 0; /**Genera un id único y ordenado cronológicamente en el lado del cliente de tal manera que sea posible * reordenarlos en el lado del cliente, note que debido al reordenamiento los ids son de longitud variable */ function generatePushId() { const timestamp = timestampToChars(); if (timestamp != lastTimestamp) { lastTimestamp = timestamp; lastConsec = 0; } else { lastConsec += 1; } return timestamp + (0, bignum_1.toBaseN)(lastConsec, 8, system) + (0, bignum_1.random)(ranLen, system); } exports.generatePushId = generatePushId; const max = (a, b) => a > b ? a : b; const min = (a, b) => a < b ? a : b; function delta(a, b) { if (a.length != 1 || b.length != 1) throw new Error(); return a.charCodeAt(0) - b.charCodeAt(0); } function avg(a, b) { if (a.length != 1 || b.length != 1) throw new Error(); return String.fromCharCode((a.charCodeAt(0) + b.charCodeAt(0)) / 2); } /**Obtiene un pushId entre @param minValue y @param maxValue con la mayor cantidad de digitos aleatorios posible, esto permite * reordenar ids en el lado del cliente */ function reoderPushId(minValue, maxValue) { minValue = minValue !== null && minValue !== void 0 ? minValue : minPushId; maxValue = maxValue !== null && maxValue !== void 0 ? maxValue : generatePushId(); minValue = (0, bignum_1.zeroPad)(minValue, Math.max(minValue.length, maxValue.length), system); maxValue = (0, bignum_1.zeroPad)(maxValue, Math.max(minValue.length, maxValue.length), system); const mid = (0, bignum_1.midpoint)(minValue, maxValue, system); //La parte que no sea necesaria para el orden la volvemos a poner aleatoria, para que no haya colisiones si //2 clientes reordenan a la misma posición: let i = 0; let gtMin = false; let ltMax = false; for (; i < mid.length; i++) { const curr = mid[i]; const min = minValue[i]; const max = maxValue[i]; if (curr > min) { gtMin = true; } if (curr < max) { ltMax = true; } if (gtMin && ltMax) { break; } } if (!gtMin || !ltMax) { //No hay espacio para reordenar, se tiene que aumentar la longitud: return minValue + (0, bignum_1.random)(ranLen, system); } const orderCount = i + 1; //Mantiene un minimo de caracteres aleatorios para evitar colisiones entre clientes reordenando a la misma posición const randCount = Math.max(mid.length - orderCount, ranLen); const ret = mid.substr(0, orderCount) + (0, bignum_1.random)(randCount, system); return ret; } exports.reoderPushId = reoderPushId; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVzaGlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1c2hpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBb0g7QUFHcEgsMEJBQTBCO0FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUEsbUJBQVUsRUFBQyxrRUFBa0UsQ0FBQyxDQUFDO0FBRTlGLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNqQixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFBLGlCQUFRLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRTlDLFNBQVMsZ0JBQWdCO0lBQ3JCLE9BQU8sSUFBQSxnQkFBTyxFQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxJQUFJLGFBQWEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3ZDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVuQjs7R0FFRztBQUNILFNBQWdCLGNBQWM7SUFDMUIsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyQyxJQUFJLFNBQVMsSUFBSSxhQUFhLEVBQUU7UUFDNUIsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMxQixVQUFVLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO1NBQ0k7UUFDRCxVQUFVLElBQUksQ0FBQyxDQUFDO0tBQ25CO0lBRUQsT0FBTyxTQUFTLEdBQUcsSUFBQSxnQkFBTyxFQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBQSxlQUFNLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFYRCx3Q0FXQztBQUVELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxH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