simple-pure-utils
Version:
Funciones puras para manipulación de objetos, arreglos, promesas y observables
76 lines • 5.76 kB
JavaScript
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
;