UNPKG

simple-pure-utils

Version:

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

76 lines 5.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getReplaceAllIndices = exports.findAll = void 0; /**Devuelve la siguiente aparicion en la cadena dado startIndex */ function indexOf(input, pattern) { if (typeof (pattern) == "string") { const index = input.indexOf(pattern); if (index < 0) return undefined; return { index: index, len: pattern.length }; } { const result = pattern.exec(input); if (result == null) return undefined; const str = result.toString(); return { index: result.index, len: str.length }; } } /**Devuelve la siguiente aparición en la cadena despues de @param startIndex */ function indexOfAt(input, startIndex, pattern) { const input2 = input.substr(startIndex); const ret2 = indexOf(input2, pattern); if (ret2 == null) return undefined; return Object.assign(Object.assign({}, ret2), { index: ret2.index + startIndex }); } /**Encuentra todas las apariciones de cierto patron en una cadena */ function findAll(input, pattern) { let index = 0; let ret = []; while (index < input.length) { const next = indexOfAt(input, index, pattern); if (!next) { return ret; } ret.push(next); const nextIndex = next.index + next.len; if (nextIndex == index) { throw new Error(`Se encontraron infintas apariciones del patron '${pattern}' en la cadena '${input}'`); } index = nextIndex; } return ret; } exports.findAll = findAll; /** * Dados los indices de las instrucciones de reemplazo, devuelve los indices en los que se deben de hacer cada una de ellas para que al hacerlas * en ordencomo si se hubieran hecho todas en paralelo. El arrego devuelto tiene la misma longitud que @param indices * * Ej. Al reemplazar la cadena "#bc#b" las el texto "#" por "##" los indices iniciales de reemplazo son [0, 3] y las longitudes finales [2, 2], * el primer reemplazo se debe de hacer en el indice 0, pero debido a que el primer reemplazo modificó la longitud de la cadena, el segundo reemplazo se debe de hacer * en el índice 4, no en el 3. Así que el retorno de la función en este caso es [0, 4] * @param indices */ function getReplaceAllIndices(indices) { //Copiar el arreglo porque se va a estar modificando en linea: let ix = indices; let ret = []; for (let i = 0; i < ix.length; i++) { const curr = ix[i]; ret.push(curr.index); //Cantidad de espacios recorridos despues del reemplazo: const lenDif = curr.outputLength - curr.inputLength; ix = ix.map(x => x.index >= curr.index ? Object.assign(Object.assign({}, x), { index: x.index + lenDif }) : x); } return ret; } exports.getReplaceAllIndices = getReplaceAllIndices; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdHJpbmdzL3N0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsa0VBQWtFO0FBQ2xFLFNBQVMsT0FBTyxDQUFDLEtBQWEsRUFBRSxPQUF3QjtJQUNwRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUU7UUFDOUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssR0FBRyxDQUFDO1lBQ1QsT0FBTyxTQUFTLENBQUM7UUFFckIsT0FBTztZQUNILEtBQUssRUFBRSxLQUFLO1lBQ1osR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQ3RCLENBQUM7S0FDTDtJQUVEO1FBQ0ksTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sSUFBSSxJQUFJO1lBQ2QsT0FBTyxTQUFTLENBQUM7UUFFckIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDSCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNO1NBQ2xCLENBQUM7S0FDTDtBQUNMLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsU0FBUyxTQUFTLENBQUMsS0FBYSxFQUFFLFVBQWtCLEVBQUUsT0FBd0I7SUFDMUUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXRDLElBQUksSUFBSSxJQUFJLElBQUk7UUFDWixPQUFPLFNBQVMsQ0FBQztJQUVyQix1Q0FDTyxJQUFJLEtBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxJQUNoQztBQUNOLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsU0FBZ0IsT0FBTyxDQUFDLEtBQWEsRUFBRSxPQUF3QjtJQUMzRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxJQUFJLEdBQUcsR0FBVyxFQUFFLENBQUM7SUFDckIsT0FBTyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUN6QixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDeEMsSUFBSSxTQUFTLElBQUksS0FBSyxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELE9BQU8sbUJBQW1CLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDMUc7UUFDRCxLQUFLLEdBQUcsU0FBUyxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBbEJELDBCQWtCQztBQVdEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQWtCLE9BQXVCO0lBQ3pFLDhEQUE4RDtJQUM5RCxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFakIsSUFBSSxHQUFHLEdBQWEsRUFBRSxDQUFDO0lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQix3REFBd0Q7UUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRXBELEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsaUNBQy9DLENBQUMsS0FDSixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLElBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNWO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBbkJELG9EQW1CQyJ9