UNPKG

@firestore-emulator/server

Version:

This package is the implementation of the Firestore emulator. It is a Node.js

103 lines (100 loc) 3.26 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/FirestoreState/mask.ts var mask_exports = {}; __export(mask_exports, { updateFields: () => updateFields }); module.exports = __toCommonJS(mask_exports); var import_immer = require("immer"); // src/FirestoreState/field.ts var import_struct = require("@firestore-emulator/proto/dist/google/protobuf/struct"); var FirestoreStateDocumentMapField = class _FirestoreStateDocumentMapField { constructor(value) { this.value = value; } type = "map_value"; toJSON() { return { type: this.type, value: Object.fromEntries( Object.entries(this.value).map(([k, v]) => [k, v.toJSON()]) ) }; } toV1ValueObject() { return { map_value: { fields: Object.fromEntries( Object.entries(this.value).map(([k, v]) => [k, v.toV1ValueObject()]) ) } }; } eq(other) { return other instanceof _FirestoreStateDocumentMapField && Object.keys(this.value).length === Object.keys(other.value).length && Object.entries(this.value).every(([k, v]) => { const item = other.value[k]; if (!item) return false; return item.eq(v); }); } lt(_other) { return false; } lte(_other) { return false; } gt(_other) { return false; } gte(_other) { return false; } }; // src/FirestoreState/mask.ts function escapeKey(key) { return key.includes(".") ? `\`${key}\`` : key; } function getNestedUpdateMask(updateMask, key) { const escapedKey = escapeKey(key); return updateMask.filter((m) => m.startsWith(`${escapedKey}.`)).map((m) => m.substring(escapedKey.length + 1)); } function isUpdatable(updateMask, key) { return updateMask.length === 0 || updateMask.includes(escapeKey(key)); } function updateFields(current, fields, updateMask) { return (0, import_immer.produce)(current, (draft) => { for (const [key, field] of Object.entries(fields)) { const updatable = isUpdatable(updateMask, key); const nestedUpdateMask = getNestedUpdateMask(updateMask, key); if (updatable) { draft[key] = field; } else if (field.type === "map_value" && (draft[key] == null || draft[key].type === "map_value")) { draft[key] = new FirestoreStateDocumentMapField( updateFields(draft[key]?.value ?? {}, field.value, nestedUpdateMask) ); } } }); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { updateFields }); //# sourceMappingURL=mask.js.map