indent-lines.js 629 B

1234567891011121314151617181920212223242526272829303132333435
  1. /**
  2. * @typedef {import('../types.js').IndentLines} IndentLines
  3. */
  4. const eol = /\r?\n|\r/g
  5. /**
  6. * @type {IndentLines}
  7. */
  8. export function indentLines(value, map) {
  9. /** @type {Array<string>} */
  10. const result = []
  11. let start = 0
  12. let line = 0
  13. /** @type {RegExpExecArray | null} */
  14. let match
  15. while ((match = eol.exec(value))) {
  16. one(value.slice(start, match.index))
  17. result.push(match[0])
  18. start = match.index + match[0].length
  19. line++
  20. }
  21. one(value.slice(start))
  22. return result.join('')
  23. /**
  24. * @param {string} value
  25. */
  26. function one(value) {
  27. result.push(map(value, line, !value))
  28. }
  29. }