firestore-auto-sync
Version:
<a href="https://www.npmjs.com/package/firestore-auto-sync"><img src="https://img.shields.io/npm/v/firestore-auto-sync.svg" alt="Total Downloads"></a> <a href="https://www.npmjs.com/package/firestore-auto-sync"><img src="https://img.shields.io/npm/dw/fire
61 lines • 2.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.firebaseAutoSync = exports.executeIncrement = exports.executeReaction = void 0;
const firestore_1 = require("firebase-admin/firestore");
const cloudFunctionHelpers_1 = require("./helpers/cloudFunctionHelpers");
const path_to_prop_1 = require("path-to-prop");
const is_what_1 = require("is-what");
const updateInfoToRefs_1 = require("./helpers/updateInfoToRefs");
const executeReaction = async ({ change, reaction, }) => {
const oldData = change.before.data();
const newData = change.after.data();
const oldValue = (0, path_to_prop_1.getProp)(oldData, reaction.prop);
const newValue = (0, path_to_prop_1.getProp)(newData, reaction.prop);
let letsGo = false;
// reaction の中にvalueが存在するかどうか判別
if ("value" in reaction) {
if (oldValue !== newValue && newValue === reaction.value) {
letsGo = true;
}
}
else {
if (oldValue !== newValue) {
letsGo = true;
}
}
if (!letsGo)
return;
const promises = reaction.updates.map(async (update) => {
const docsToUpdate = await (0, updateInfoToRefs_1.updateInfoToRefs)(newData || oldData, update);
const updatePath = (0, updateInfoToRefs_1.getUpdatePath)(newData || oldData, update);
const updatePromises = docsToUpdate.map((ref) => ref.update({ [updatePath]: newValue }));
return await Promise.allSettled(updatePromises);
});
return await Promise.allSettled(promises);
};
exports.executeReaction = executeReaction;
const executeIncrement = async ({ change, increment, }) => {
const oldData = change.before.data();
const newData = change.after.data();
const incrementBy = increment.incrementBy(newData, oldData);
if (incrementBy === 0 || !(0, is_what_1.isNumber)(incrementBy))
return;
const promises = increment.increments.map(async (incr) => {
const docsToUpdate = await (0, updateInfoToRefs_1.updateInfoToRefs)(newData || oldData, incr);
const updatePath = (0, updateInfoToRefs_1.getUpdatePath)(newData || oldData, incr);
const updatePromises = docsToUpdate.map((ref) => ref.update({ [updatePath]: firestore_1.FieldValue.increment(incrementBy) }));
return await Promise.allSettled(updatePromises);
});
return await Promise.allSettled(promises);
};
exports.executeIncrement = executeIncrement;
const firebaseAutoSync = async ({ change, reaction, increment, }) => {
if (increment) {
await (0, exports.executeIncrement)({ change, increment });
}
if (reaction && (0, cloudFunctionHelpers_1.isUpdateEvent)(change)) {
await (0, exports.executeReaction)({ change, reaction });
}
};
exports.firebaseAutoSync = firebaseAutoSync;
//# sourceMappingURL=firebaseAutoSync.js.map