newline-iterator
Version:
Line-by-line string iterator
1 lines • 2.05 kB
Source Map (JSON)
{"version":3,"file":"newline-iterator.min.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","string","lines","split","reverse","next","length","value","done","pop","this"],"mappings":"+OAAA,IAAMA,EAAiB,YAEjBC,EAAyB,oBAAXC,OAAyBC,OAASD,OAEhDE,OAAmD,IAAhBH,EAAKG,OAA0B,CAAEC,cAAUC,GAA+CL,EAAKG,cAgBzH,SAAyBG,GACtC,UAAMC,EAAQD,EAAOE,MAAMT,GAAgBU,UAY3C,SAJE,CANAC,KAAAA,WACE,GAAqB,IAAjBH,EAAMI,OAAc,MAAO,CAAEC,MAAO,KAAMC,MAAM,GACpD,IAAMD,EAAQL,EAAMO,MACpB,OAAqB,IAAjBP,EAAMI,QAAiC,IAAjBC,EAAMD,OAAqB,CAAEC,MAAO,KAAMC,MAAM,GACnE,CAAED,MAAAA,EAAOC,MAAM,EACxB,KACCV,EAAOC,WAAR,WACE,OAAOW,IACT,gGAGJ"}