{"version":3,"file":"epub.cjs","names":["BaseDocumentLoader","filePath: string","epub: EPub","html: string","Document"],"sources":["../../../src/document_loaders/fs/epub.ts"],"sourcesContent":["import type { EPub } from \"epub2\";\nimport { Document } from \"@langchain/core/documents\";\nimport { BaseDocumentLoader } from \"@langchain/core/document_loaders/base\";\n\n/**\n * A class that extends the `BaseDocumentLoader` class. It represents a\n * document loader that loads documents from EPUB files.\n */\nexport class EPubLoader extends BaseDocumentLoader {\n  private splitChapters: boolean;\n\n  constructor(\n    public filePath: string,\n    { splitChapters = true } = {}\n  ) {\n    super();\n    this.splitChapters = splitChapters;\n  }\n\n  /**\n   * A protected method that takes an EPUB object as a parameter and returns\n   * a promise that resolves to an array of objects representing the content\n   * and metadata of each chapter.\n   * @param epub The EPUB object to parse.\n   * @returns A promise that resolves to an array of objects representing the content and metadata of each chapter.\n   */\n  protected async parse(\n    epub: EPub\n  ): Promise<{ pageContent: string; metadata?: object }[]> {\n    const { htmlToText } = await HtmlToTextImport();\n    const chapters = await Promise.all(\n      epub.flow.map(async (chapter) => {\n        if (!chapter.id) return null as never;\n        const html: string = await epub.getChapterRawAsync(chapter.id);\n        if (!html) return null as never;\n        return {\n          html,\n          title: chapter.title,\n        };\n      })\n    );\n    return chapters.filter(Boolean).map((chapter) => ({\n      pageContent: htmlToText(chapter.html),\n      metadata: {\n        ...(chapter.title && { chapter: chapter.title }),\n      },\n    }));\n  }\n\n  /**\n   * A method that loads the EPUB file and returns a promise that resolves\n   * to an array of `Document` instances.\n   * @returns A promise that resolves to an array of `Document` instances.\n   */\n  public async load(): Promise<Document[]> {\n    const { EPub } = await EpubImport();\n    const epub = await EPub.createAsync(this.filePath);\n\n    const parsed = await this.parse(epub);\n    const metadata = { source: this.filePath };\n\n    if (parsed.length === 0) return [];\n\n    return this.splitChapters\n      ? parsed.map(\n          (chapter) =>\n            new Document({\n              pageContent: chapter.pageContent,\n              metadata: {\n                ...metadata,\n                ...chapter.metadata,\n              },\n            })\n        )\n      : [\n          new Document({\n            pageContent: parsed\n              .map((chapter) => chapter.pageContent)\n              .join(\"\\n\\n\"),\n            metadata,\n          }),\n        ];\n  }\n}\n\nasync function EpubImport() {\n  const { EPub } = await import(\"epub2\").catch(() => {\n    throw new Error(\n      \"Failed to load epub2. Please install it with eg. `npm install epub2`.\"\n    );\n  });\n  return { EPub };\n}\n\nasync function HtmlToTextImport() {\n  const { htmlToText } = await import(\"html-to-text\").catch(() => {\n    throw new Error(\n      \"Failed to load html-to-text. Please install it with eg. `npm install html-to-text`.\"\n    );\n  });\n  return { htmlToText };\n}\n"],"mappings":";;;;;;;;;;;AAQA,IAAa,aAAb,cAAgCA,0DAAmB;CACjD,AAAQ;CAER,YACSC,UACP,EAAE,gBAAgB,MAAM,GAAG,CAAE,GAC7B;EACA,OAAO;EAHA;EAIP,KAAK,gBAAgB;CACtB;;;;;;;;CASD,MAAgB,MACdC,MACuD;EACvD,MAAM,EAAE,YAAY,GAAG,MAAM,kBAAkB;EAC/C,MAAM,WAAW,MAAM,QAAQ,IAC7B,KAAK,KAAK,IAAI,OAAO,YAAY;AAC/B,OAAI,CAAC,QAAQ,GAAI,QAAO;GACxB,MAAMC,OAAe,MAAM,KAAK,mBAAmB,QAAQ,GAAG;AAC9D,OAAI,CAAC,KAAM,QAAO;AAClB,UAAO;IACL;IACA,OAAO,QAAQ;GAChB;EACF,EAAC,CACH;AACD,SAAO,SAAS,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa;GAChD,aAAa,WAAW,QAAQ,KAAK;GACrC,UAAU,EACR,GAAI,QAAQ,SAAS,EAAE,SAAS,QAAQ,MAAO,EAChD;EACF,GAAE;CACJ;;;;;;CAOD,MAAa,OAA4B;EACvC,MAAM,EAAE,MAAM,GAAG,MAAM,YAAY;EACnC,MAAM,OAAO,MAAM,KAAK,YAAY,KAAK,SAAS;EAElD,MAAM,SAAS,MAAM,KAAK,MAAM,KAAK;EACrC,MAAM,WAAW,EAAE,QAAQ,KAAK,SAAU;AAE1C,MAAI,OAAO,WAAW,EAAG,QAAO,CAAE;AAElC,SAAO,KAAK,gBACR,OAAO,IACL,CAAC,YACC,IAAIC,oCAAS;GACX,aAAa,QAAQ;GACrB,UAAU;IACR,GAAG;IACH,GAAG,QAAQ;GACZ;EACF,GACJ,GACD,CACE,IAAIA,oCAAS;GACX,aAAa,OACV,IAAI,CAAC,YAAY,QAAQ,YAAY,CACrC,KAAK,OAAO;GACf;EACD,EACF;CACN;AACF;AAED,eAAe,aAAa;CAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,OAAO,SAAS,MAAM,MAAM;AACjD,QAAM,IAAI,MACR;CAEH,EAAC;AACF,QAAO,EAAE,KAAM;AAChB;AAED,eAAe,mBAAmB;CAChC,MAAM,EAAE,YAAY,GAAG,MAAM,OAAO,gBAAgB,MAAM,MAAM;AAC9D,QAAM,IAAI,MACR;CAEH,EAAC;AACF,QAAO,EAAE,WAAY;AACtB"}