/** * @callback Map * @param {string} value * @param {number} line * @param {boolean} blank * @returns {string} */ const eol = /\r?\n|\r/g /** * @param {string} value * @param {Map} map * @returns {string} */ export function indentLines(value, map) { /** @type {Array} */ const result = [] let start = 0 let line = 0 /** @type {RegExpExecArray|null} */ let match while ((match = eol.exec(value))) { one(value.slice(start, match.index)) result.push(match[0]) start = match.index + match[0].length line++ } one(value.slice(start)) return result.join('') /** * @param {string} value */ function one(value) { result.push(map(value, line, !value)) } }