{"version":3,"sources":["../src/index.ts","../src/line_reader/line_reader.ts","../src/line_reader/index.ts","../src/mockable/mockable.ts"],"sourcesContent":["export * from './line_reader'\nexport * from './mockable'","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","import { line_reader } from './line_reader'\n\nexport default line_reader\nexport { line_reader }\nexport const lineReader = line_reader","const OVERRIDES = Symbol('overrides')\n\nexport type Mockable<T extends Record<string, any>> = T & {\n  [OVERRIDES]: Partial<T>\n}\n\nexport function mock<T extends Record<string, any>>(value: Mockable<T>, custom: Partial<T>) {\n  Object.assign(value[OVERRIDES], custom)\n  return value\n}\n\nexport function reset<T extends Record<string, any>>(value: Mockable<T>) {\n  value[OVERRIDES] = {}\n}\n\nexport function mockable<T extends Record<string, any>>(value: T): Mockable<T> {\n  const overrides: Partial<T> = {}\n  \n  const proxy = {} as Mockable<T>\n  Object.defineProperty(proxy, OVERRIDES, {\n    value: overrides,\n    writable: true,\n    enumerable: false,\n    configurable: false,\n  })\n  \n  for (const name of Object.keys(value)) {\n    Object.defineProperty(proxy, name, {\n      get: () => (name in proxy[OVERRIDES] ? proxy[OVERRIDES][name] : value[name]),\n      enumerable: true,\n      configurable: false,\n    })\n  }\n  \n  return proxy\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;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;;;ACnCO,IAAM,aAAa;;;ACJ1B,IAAM,YAAY,OAAO,WAAW;AAM7B,SAAS,KAAoC,OAAoB,QAAoB;AAC1F,SAAO,OAAO,MAAM,SAAS,GAAG,MAAM;AACtC,SAAO;AACT;AAEO,SAAS,MAAqC,OAAoB;AACvE,QAAM,SAAS,IAAI,CAAC;AACtB;AAEO,SAAS,SAAwC,OAAuB;AAC7E,QAAM,YAAwB,CAAC;AAE/B,QAAM,QAAQ,CAAC;AACf,SAAO,eAAe,OAAO,WAAW;AAAA,IACtC,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AAED,aAAW,QAAQ,OAAO,KAAK,KAAK,GAAG;AACrC,WAAO,eAAe,OAAO,MAAM;AAAA,MACjC,KAAK,MAAO,QAAQ,MAAM,SAAS,IAAI,MAAM,SAAS,EAAE,IAAI,IAAI,MAAM,IAAI;AAAA,MAC1E,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}