UNPKG

mongodb-rag-core

Version:

Common elements used by MongoDB Chatbot Framework components.

76 lines 3.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeMongoDbTransformedContentStore = void 0; const MongoDbDatabaseConnection_1 = require("../MongoDbDatabaseConnection"); const assert_1 = require("assert"); const pageIdentity_1 = require("./pageIdentity"); function makeMongoDbTransformedContentStore({ connectionUri, databaseName, collectionName = "transformed_content", }) { const { mongoClient, db, drop, close } = (0, MongoDbDatabaseConnection_1.makeMongoDbDatabaseConnection)({ connectionUri, databaseName, }); const transformedContentCollection = db.collection(collectionName); return { drop, close, metadata: { databaseName, collectionName, }, async loadContent(args) { const page = args?.page; return await transformedContentCollection .find(page ? (0, pageIdentity_1.pageIdentity)(page) : {}) .project({ _id: 0 }) .toArray(); }, async deleteContent({ page, dataSources, inverseDataSources = false }) { const deleteResult = await transformedContentCollection.deleteMany({ ...(page ? (0, pageIdentity_1.pageIdentity)(page) : undefined), ...(dataSources ? { sourceName: { [inverseDataSources ? "$nin" : "$in"]: dataSources, }, } : undefined), }); if (!deleteResult.acknowledged) { throw new Error("Deletion not acknowledged!"); } }, async updateContent({ page, transformedContent }) { (0, assert_1.strict)(transformedContent.length !== 0); transformedContent.forEach((transformedContent) => { (0, assert_1.strict)(transformedContent.sourceName === page.sourceName && transformedContent.url === page.url, `TransformedContent source/url (${transformedContent.sourceName} / ${transformedContent.url}) must match given page source/url (${page.sourceName} / ${page.url})!`); }); await mongoClient.withSession(async (session) => { await session.withTransaction(async () => { // First delete all transformed content for the given page const deleteResult = await transformedContentCollection.deleteMany((0, pageIdentity_1.pageIdentity)(page), { session }); if (!deleteResult.acknowledged) { throw new Error("Deletion not acknowledged!"); } // Insert the transformed content for the page const insertResult = await transformedContentCollection.insertMany([...transformedContent], { session, }); if (!insertResult.acknowledged) { throw new Error("EmbeddedContent insertion not acknowledged!"); } const { insertedCount } = insertResult; if (insertedCount !== transformedContent.length) { throw new Error(`Expected ${transformedContent.length} inserted, got ${insertedCount}`); } }); }); }, async init() { await transformedContentCollection.createIndex({ sourceName: 1 }); await transformedContentCollection.createIndex({ url: 1 }); }, }; } exports.makeMongoDbTransformedContentStore = makeMongoDbTransformedContentStore; //# sourceMappingURL=MongoDbTransformedContentStore.js.map