{"version":3,"sources":["../../src/line_reader/index.ts","../../src/line_reader/line_reader.ts"],"sourcesContent":["import { line_reader } from './line_reader'\n\nexport default line_reader\nexport { line_reader }\nexport const lineReader = line_reader","import { Readable } from \"node:stream\"\nimport * as readline from \"node:readline/promises\"\n\nexport function line_reader(input: Readable) {\n  const rl = readline.createInterface({ input })\n  let closed = false\n  let error: Error | null = null\n\n  const close = () => {\n    if (closed) return\n    closed = true\n    rl.close()\n    input.destroy()\n  }\n\n  const fail = (err: Error) => {\n    if (closed) return\n    if (!error) error = err\n    close()\n  }\n\n  input.on('error', fail)\n  rl.on('error', fail)\n\n  const iterator: AsyncIterator<string> = rl[Symbol.asyncIterator]()\n\n  const read = async (): Promise<string | null> => {\n    if (error) throw error\n    if (closed) return null\n    const { value, done } = await iterator.next()\n    if (error) throw error\n    if (done) {\n      close()\n      return null\n    }\n    return value as string\n  }\n\n  return { read, close, error: () => error, closed: () => closed }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,eAA0B;AAEnB,SAAS,YAAY,OAAiB;AAC3C,QAAM,KAAc,yBAAgB,EAAE,MAAM,CAAC;AAC7C,MAAI,SAAS;AACb,MAAI,QAAsB;AAE1B,QAAM,QAAQ,MAAM;AAClB,QAAI,OAAQ;AACZ,aAAS;AACT,OAAG,MAAM;AACT,UAAM,QAAQ;AAAA,EAChB;AAEA,QAAM,OAAO,CAAC,QAAe;AAC3B,QAAI,OAAQ;AACZ,QAAI,CAAC,MAAO,SAAQ;AACpB,UAAM;AAAA,EACR;AAEA,QAAM,GAAG,SAAS,IAAI;AACtB,KAAG,GAAG,SAAS,IAAI;AAEnB,QAAM,WAAkC,GAAG,OAAO,aAAa,EAAE;AAEjE,QAAM,OAAO,YAAoC;AAC/C,QAAI,MAAO,OAAM;AACjB,QAAI,OAAQ,QAAO;AACnB,UAAM,EAAE,OAAO,KAAK,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAI,MAAO,OAAM;AACjB,QAAI,MAAM;AACR,YAAM;AACN,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,MAAM,OAAO,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAO;AACjE;;;ADrCA,IAAO,sBAAQ;AAER,IAAM,aAAa;","names":[]}