UNPKG

@drip_sync/drip

Version:

Scalable incremental sync for MongoDB aggregation pipelines

67 lines (66 loc) 2.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.changeEventToPCSEvent = changeEventToPCSEvent; const mongodb_1 = require("mongodb"); const zod_1 = __importDefault(require("zod")); const update_description_to_u_1 = require("./update_description_to_u"); const zodInsertSchema = zod_1.default.object({ clusterTime: zod_1.default.instanceof(mongodb_1.Timestamp), documentKey: zod_1.default.record(zod_1.default.string(), zod_1.default.unknown()), fullDocument: zod_1.default.record(zod_1.default.string(), zod_1.default.unknown()), }); const zodUpdateSchema = zod_1.default.object({ clusterTime: zod_1.default.instanceof(mongodb_1.Timestamp), documentKey: zod_1.default.record(zod_1.default.string(), zod_1.default.unknown()), fullDocument: zod_1.default.record(zod_1.default.string(), zod_1.default.unknown()), fullDocumentBeforeChange: zod_1.default.record(zod_1.default.string(), zod_1.default.unknown()), }); const zodDeleteSchema = zod_1.default.object({ clusterTime: zod_1.default.instanceof(mongodb_1.Timestamp), documentKey: zod_1.default.record(zod_1.default.string(), zod_1.default.unknown()), fullDocumentBeforeChange: zod_1.default.record(zod_1.default.string(), zod_1.default.unknown()), }); function changeEventToPCSEvent(ce) { if (ce.operationType === "insert") { const ceParsed = zodInsertSchema.parse(ce); const res = { _id: new mongodb_1.ObjectId(), o: "i", ct: ceParsed.clusterTime, k: ceParsed.documentKey, a: ceParsed.fullDocument, }; return res; } else if (ce.operationType === "update" || ce.operationType === "replace") { const ceParsed = zodUpdateSchema.parse(ce); const res = { _id: new mongodb_1.ObjectId(), o: "u", ct: ceParsed.clusterTime, k: ceParsed.documentKey, b: ceParsed.fullDocumentBeforeChange, a: ceParsed.fullDocument, ...(ce.operationType === "update" ? { u: (0, update_description_to_u_1.updateDescriptionToU)(ce.updateDescription) } : {}), }; return res; } else if (ce.operationType === "delete") { const ceParsed = zodDeleteSchema.parse(ce); const res = { _id: new mongodb_1.ObjectId(), o: "d", ct: ceParsed.clusterTime, k: ceParsed.documentKey, b: ceParsed.fullDocumentBeforeChange, }; return res; } // Unknown operation return undefined; }