import crypto from 'crypto' const StringUtils = { /** * Normalise une chaine de caractères en retirant la casse et les caractères spéciaux, à des fins de recherche * par exemple * @param s */ normalize(s: string): string { return s .toLowerCase() .replace(/[éèẽëêēĕėęě]/g, 'e') .replace(/[çćĉċč]/g, 'c') .replace(/[îïĩìíīĭ]/g, 'i') .replace(/[àãâåáäāăą]/g, 'a') .replace(/[ĝğġģ]/g, 'g') .replace(/[ħĥ]/g, 'h') .replace(/[öôõó]/g, 'o') .replace(/[ûüũùú]/g, 'u') .replace(/[š]/g, 's') .replace(/[ÿý]/g, 'y') .replace(/[ž]/g, 'z') .replace(/-/g, ' ') .trim() }, /** * Convertit le paramètre d'entrée en entier * A la différence de parseInt, cette méthode accepte aussi les nombres. * @param s */ parseInt(s: string | number) { return typeof s === 'number' ? s : parseInt(s) }, /** * Hash une chaine de caractères avec l'algorithme demandé * * @param input * @param algorithm */ async hash(input: string, algorithm: string = 'SHA-256') { const textAsBuffer = new TextEncoder().encode(input) const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null const cryptoLib = isNode ? crypto : window.crypto const hashBuffer = await cryptoLib.subtle.digest(algorithm, textAsBuffer) const hashArray = Array.from(new Uint8Array(hashBuffer)) return hashArray.map((item) => item.toString(16).padStart(2, '0')).join('') }, } export default StringUtils