@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
JavaScript
;
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