UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

34 lines (33 loc) 1.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.lines = lines; function lines(str) { // discuss at: https://locutus.io/rust/lines/ // parity verified: Rust 1.85 // original by: Kevin van Zonneveld (https://kvz.io) // note 1: Splits on \n or \r\n, but does not treat a lone \r as a line ending. // example 1: lines('foo\nbar\n') // returns 1: ['foo', 'bar'] // example 2: lines('foo\r\nbar\n\nbaz\r') // returns 2: ['foo', 'bar', '', 'baz\r'] // example 3: lines('') // returns 3: [] const source = String(str); if (source === '') { return []; } const out = []; let start = 0; for (let i = 0; i < source.length; i += 1) { if (source[i] !== '\n') { continue; } const end = i > start && source[i - 1] === '\r' ? i - 1 : i; out.push(source.slice(start, end)); start = i + 1; } if (start < source.length) { out.push(source.slice(start)); } return out; }