@drip_sync/drip
Version:
Scalable incremental sync for MongoDB aggregation pipelines
67 lines (66 loc) • 2.76 kB
JavaScript
"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;
}