| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- const tab = 9 /* `\t` */
- const space = 32 /* ` ` */
- /**
- * Remove initial and final spaces and tabs at the line breaks in `value`.
- * Does not trim initial and final spaces and tabs of the value itself.
- *
- * @param {string} value
- * Value to trim.
- * @returns {string}
- * Trimmed value.
- */
- export function trimLines(value) {
- const source = String(value)
- const search = /\r?\n|\r/g
- let match = search.exec(source)
- let last = 0
- /** @type {Array<string>} */
- const lines = []
- while (match) {
- lines.push(
- trimLine(source.slice(last, match.index), last > 0, true),
- match[0]
- )
- last = match.index + match[0].length
- match = search.exec(source)
- }
- lines.push(trimLine(source.slice(last), last > 0, false))
- return lines.join('')
- }
- /**
- * @param {string} value
- * Line to trim.
- * @param {boolean} start
- * Whether to trim the start of the line.
- * @param {boolean} end
- * Whether to trim the end of the line.
- * @returns {string}
- * Trimmed line.
- */
- function trimLine(value, start, end) {
- let startIndex = 0
- let endIndex = value.length
- if (start) {
- let code = value.codePointAt(startIndex)
- while (code === tab || code === space) {
- startIndex++
- code = value.codePointAt(startIndex)
- }
- }
- if (end) {
- let code = value.codePointAt(endIndex - 1)
- while (code === tab || code === space) {
- endIndex--
- code = value.codePointAt(endIndex - 1)
- }
- }
- return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''
- }
|