UNPKG

@langchain/community

Version:
1 lines 3.56 kB
{"version":3,"file":"couchbase.cjs","names":["BaseDocumentLoader","Document"],"sources":["../../../src/document_loaders/web/couchbase.ts"],"sourcesContent":["import { Cluster, QueryResult } from \"couchbase\";\nimport { Document } from \"@langchain/core/documents\";\nimport {\n BaseDocumentLoader,\n DocumentLoader,\n} from \"@langchain/core/document_loaders/base\";\n\n/**\n * loader for couchbase document\n */\nexport class CouchbaseDocumentLoader\n extends BaseDocumentLoader\n implements DocumentLoader\n{\n private cluster: Cluster;\n\n private query: string;\n\n private pageContentFields?: string[];\n\n private metadataFields?: string[];\n\n /**\n * construct Couchbase document loader with a requirement for couchbase cluster client\n * @param client { Cluster } [ couchbase connected client to connect to database ]\n * @param query { string } [ query to get results from while loading the data ]\n * @param pageContentFields { Array<string> } [ filters fields of the document and shows these only ]\n * @param metadataFields { Array<string> } [ metadata fields required ]\n */\n constructor(\n client: Cluster,\n query: string,\n pageContentFields?: string[],\n metadataFields?: string[]\n ) {\n super();\n if (!client) {\n throw new Error(\"Couchbase client cluster must be provided.\");\n }\n this.cluster = client;\n this.query = query;\n this.pageContentFields = pageContentFields;\n this.metadataFields = metadataFields;\n }\n\n /**\n * Function to load document based on query from couchbase\n * @returns {Promise<Document[]>} [ Returns a promise of all the documents as array ]\n */\n async load(): Promise<Document[]> {\n const documents: Document[] = [];\n for await (const doc of this.lazyLoad()) {\n documents.push(doc);\n }\n return documents;\n }\n\n /**\n * Function to load documents based on iterator rather than full load\n * @returns {AsyncIterable<Document>} [ Returns an iterator to fetch documents ]\n */\n async *lazyLoad(): AsyncIterable<Document> {\n // Run SQL++ Query\n const result: QueryResult = await this.cluster.query(this.query);\n for await (const row of result.rows) {\n let { metadataFields, pageContentFields } = this;\n\n if (!pageContentFields) {\n pageContentFields = Object.keys(row);\n }\n\n if (!metadataFields) {\n metadataFields = [];\n }\n\n const metadata = metadataFields.reduce(\n (obj, field) => ({ ...obj, [field]: row[field] }),\n {}\n );\n\n const document = pageContentFields\n .map((k) => `${k}: ${JSON.stringify(row[k])}`)\n .join(\"\\n\");\n\n yield new Document({\n pageContent: document,\n metadata,\n });\n }\n }\n}\n"],"mappings":";;;;;;;;;AAUA,IAAa,0BAAb,cACUA,sCAAAA,mBAEV;CACE;CAEA;CAEA;CAEA;;;;;;;;CASA,YACE,QACA,OACA,mBACA,gBACA;AACA,SAAO;AACP,MAAI,CAAC,OACH,OAAM,IAAI,MAAM,6CAA6C;AAE/D,OAAK,UAAU;AACf,OAAK,QAAQ;AACb,OAAK,oBAAoB;AACzB,OAAK,iBAAiB;;;;;;CAOxB,MAAM,OAA4B;EAChC,MAAM,YAAwB,EAAE;AAChC,aAAW,MAAM,OAAO,KAAK,UAAU,CACrC,WAAU,KAAK,IAAI;AAErB,SAAO;;;;;;CAOT,OAAO,WAAoC;EAEzC,MAAM,SAAsB,MAAM,KAAK,QAAQ,MAAM,KAAK,MAAM;AAChE,aAAW,MAAM,OAAO,OAAO,MAAM;GACnC,IAAI,EAAE,gBAAgB,sBAAsB;AAE5C,OAAI,CAAC,kBACH,qBAAoB,OAAO,KAAK,IAAI;AAGtC,OAAI,CAAC,eACH,kBAAiB,EAAE;GAGrB,MAAM,WAAW,eAAe,QAC7B,KAAK,WAAW;IAAE,GAAG;KAAM,QAAQ,IAAI;IAAQ,GAChD,EAAE,CACH;AAMD,SAAM,IAAIC,0BAAAA,SAAS;IACjB,aALe,kBACd,KAAK,MAAM,GAAG,EAAE,IAAI,KAAK,UAAU,IAAI,GAAG,GAAG,CAC7C,KAAK,KAAK;IAIX;IACD,CAAC"}