UNPKG

simple-pure-utils

Version:

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

71 lines 5.53 kB
/**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 */ export 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; } /** * 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 */ export 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; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdHJpbmdzL3N0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsa0VBQWtFO0FBQ2xFLFNBQVMsT0FBTyxDQUFDLEtBQWEsRUFBRSxPQUF3QjtJQUNwRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUU7UUFDOUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssR0FBRyxDQUFDO1lBQ1QsT0FBTyxTQUFTLENBQUM7UUFFckIsT0FBTztZQUNILEtBQUssRUFBRSxLQUFLO1lBQ1osR0FBRyxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQ3RCLENBQUM7S0FDTDtJQUVEO1FBQ0ksTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sSUFBSSxJQUFJO1lBQ2QsT0FBTyxTQUFTLENBQUM7UUFFckIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDSCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNO1NBQ2xCLENBQUM7S0FDTDtBQUNMLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsU0FBUyxTQUFTLENBQUMsS0FBYSxFQUFFLFVBQWtCLEVBQUUsT0FBd0I7SUFDMUUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXRDLElBQUksSUFBSSxJQUFJLElBQUk7UUFDWixPQUFPLFNBQVMsQ0FBQztJQUVyQix1Q0FDTyxJQUFJLEtBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxJQUNoQztBQUNOLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhLEVBQUUsT0FBd0I7SUFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxHQUFHLEdBQVcsRUFBRSxDQUFDO0lBQ3JCLE9BQU8sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDekIsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3hDLElBQUksU0FBUyxJQUFJLEtBQUssRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxPQUFPLG1CQUFtQixLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQzFHO1FBQ0QsS0FBSyxHQUFHLFNBQVMsQ0FBQztLQUNyQjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQVdEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFrQixPQUF1QjtJQUN6RSw4REFBOEQ7SUFDOUQsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRWpCLElBQUksR0FBRyxHQUFhLEVBQUUsQ0FBQztJQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNoQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckIsd0RBQXdEO1FBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUVwRCxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlDQUMvQyxDQUFDLEtBQ0osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDVjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyJ9