UNPKG

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
"use strict"; 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