"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encodeFirestoreValue = void 0; const _ = require("lodash"); const error_1 = require("../error"); function isPlainObject(input) { return (typeof input === "object" && input !== null && _.isEqual(Object.getPrototypeOf(input), Object.prototype)); } function encodeHelper(val) { if (typeof val === "string") { return { stringValue: val }; } if (val === !!val) { return { booleanValue: val }; } if (Number.isInteger(val)) { return { integerValue: val }; } if (typeof val === "number") { return { doubleValue: val }; } if (val instanceof Date && !Number.isNaN(val)) { return { timestampValue: val.toISOString() }; } if (Array.isArray(val)) { const encodedElements = []; for (const v of val) { const enc = encodeHelper(v); if (enc) { encodedElements.push(enc); } } return { arrayValue: { values: encodedElements }, }; } if (val === null) { return { nullValue: "NULL_VALUE" }; } if (val instanceof Buffer || val instanceof Uint8Array) { return { bytesValue: val }; } if (isPlainObject(val)) { return { mapValue: { fields: encodeFirestoreValue(val) }, }; } throw new error_1.FirebaseError(`Cannot encode ${val} to a Firestore Value. ` + "The emulator does not yet support Firestore document reference values or geo points."); } function encodeFirestoreValue(data) { return Object.entries(data).reduce((acc, [key, val]) => { acc[key] = encodeHelper(val); return acc; }, {}); } exports.encodeFirestoreValue = encodeFirestoreValue;