newline-iterator
Version:
Line-by-line string iterator
1 lines • 2.54 kB
Source Map (JSON)
{"version":3,"file":"newline-iterator.cjs","sources":["../../src/index.ts"],"sourcesContent":["const REGEX_NEW_LINE = /\\r?\\n|\\r/g;\n\nconst root = typeof window === 'undefined' ? global : window;\n// biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy\nconst Symbol: SymbolConstructor = typeof root.Symbol === 'undefined' ? ({ iterator: undefined } as unknown as SymbolConstructor) : root.Symbol;\n\n/**\n * Create a newline iterator recognizing CR, LF, and CRLF using the Symbol.iterator interface\n *\n * @param string The string to iterate through\n *\n * ```typescript\n * import newlineIterator from \"newline-iterator\";\n *\n * const iterator = newlineIterator(\"some\\r\\nstring\\ncombination\\r\");\n * const results = [];\n * for (const line of iterator) results.push(line);\n * console.log(results); // [\"some\", \"string\", \"combination\"];\n * ```\n */\nexport default function newlineIterator(string: string): IterableIterator<string> {\n const lines = string.split(REGEX_NEW_LINE).reverse();\n const iterator = {\n next(): IteratorResult<string, boolean> {\n if (lines.length === 0) return { value: null, done: true };\n const value = lines.pop();\n if (lines.length === 0 && value.length === 0) return { value: null, done: true };\n return { value, done: false };\n },\n [Symbol.iterator](): Iterator<string> {\n return this;\n },\n };\n return iterator as IterableIterator<string>;\n}\n"],"names":["REGEX_NEW_LINE","root","window","global","Symbol","iterator","undefined","newlineIterator","string","lines","split","reverse","next","length","value","done","pop"],"mappings":";;;;;;;;;;;;;;;;;;;EAAA,IAAMA,cAAAA,GAAiB,WAAA;EAEvB,IAAMC,IAAAA,GAAO,OAAOC,MAAAA,KAAW,WAAA,GAAcC,MAAAA,GAASD,MAAAA;EACtD;EACA,IAAME,MAAAA,GAA4B,OAAOH,IAAAA,CAAKG,MAAM,KAAK,WAAA,GAAe;MAAEC,QAAAA,EAAUC;EAAU,CAAA,GAAqCL,KAAKG,MAAM;EAE9I;;;;;;;;;;;;;MAce,SAASG,eAAAA,CAAgBC,MAAc,EAAA;EACpD,IAAA,IAAMC,KAAAA,GAAQD,MAAAA,CAAOE,KAAK,CAACV,gBAAgBW,OAAO,EAAA;EAClD,IAAA,IAAMN,QAAAA,GAOJ,gBAAA,CAAA;EANAO,QAAAA,IAAAA,EAAAA,SAAAA,IAAAA,GAAAA;EACE,YAAA,IAAIH,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAG,OAAO;kBAAEC,KAAAA,EAAO,IAAA;kBAAMC,IAAAA,EAAM;EAAK,aAAA;cACzD,IAAMD,KAAAA,GAAQL,MAAMO,GAAG,EAAA;cACvB,IAAIP,KAAAA,CAAMI,MAAM,KAAK,CAAA,IAAKC,MAAMD,MAAM,KAAK,GAAG,OAAO;kBAAEC,KAAAA,EAAO,IAAA;kBAAMC,IAAAA,EAAM;EAAK,aAAA;cAC/E,OAAO;kBAAED,KAAAA,EAAAA,KAAAA;kBAAOC,IAAAA,EAAM;EAAM,aAAA;EAC9B,QAAA;EACCX,KAAAA,EAAAA,MAAAA,CAAOC,QAAQ,EAAhB,WAAA;EACE,QAAA,OAAO,IAAI;EACb,IAAA,CAAA,CAAA;MAEF,OAAOA,QAAAA;EACT;;;;;;;;"}