UNPKG

@mathrunet/masamune

Version:

Manages packages for the server portion (NodeJS) of the Masamune framework.

159 lines 5.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FirestoreModelRefBaseConverter = exports.ModelRefBaseConverter = void 0; const model_field_value_converter_1 = require("../model_field_value_converter"); const utils_1 = require("../../utils"); const firestore_1 = require("firebase-admin/firestore"); const model_field_value_1 = require("../model_field_value"); /** * ModelFieldValueConverter for [ModelRefBase]. * * [ModelRefBase]用のModelFieldValueConverter。 */ class ModelRefBaseConverter extends model_field_value_converter_1.ModelFieldValueConverter { /** * ModelRefBase ModelFieldValueConverter. * * ModelRefBase用のModelFieldValueConverter。 */ constructor() { super(); } type = "ModelRefBase"; convertFrom(key, value, original) { if (value !== null && typeof value === "object" && "@type" in value && value["@type"] === this.type) { const ref = value["@ref"] ?? ""; const doc = value["@doc"] ?? undefined; return { [key]: new model_field_value_1.ModelRefBase(ref, doc, "server"), }; } return null; } convertTo(key, value, original) { if (value instanceof model_field_value_1.ModelRefBase) { return { [key]: { "@type": this.type, "@ref": value["@ref"], "@doc": value["@doc"], "@source": value["@source"], }, }; } return null; } } exports.ModelRefBaseConverter = ModelRefBaseConverter; /** * FirestoreConverter for [ModelRef]. * * [ModelRef]用のFirestoreConverter。 */ class FirestoreModelRefBaseConverter extends model_field_value_converter_1.FirestoreModelFieldValueConverter { /** * FirestoreConverter for [ModelRef]. * * [ModelRef]用のFirestoreConverter。 */ constructor() { super(); } type = "ModelRefBase"; convertFrom(key, value, original, firestoreInstance) { if (value instanceof firestore_1.DocumentReference) { const path = value.path.replace(/\/+$/, ''); return { [key]: { "@type": "ModelRefBase", "@ref": path, // Remove trailing slashes "@doc": firestoreInstance.doc(path), }, }; } else if (Array.isArray(value)) { const res = []; for (const tmp of value) { if (tmp instanceof firestore_1.DocumentReference) { const path = tmp.path.replace(/\/+$/, ''); res.push({ "@type": "ModelRefBase", "@ref": path, // Remove trailing slashes "@doc": firestoreInstance.doc(path), }); } } if (res.length > 0) { return { [key]: res, }; } } else if ((0, utils_1.isDynamicMap)(value)) { const res = {}; for (const k in value) { const val = value[k]; if (val instanceof firestore_1.DocumentReference) { const path = val.path.replace(/\/+$/, ''); res[k] = { "@type": "ModelRefBase", "@ref": path, // Remove trailing slashes "@doc": firestoreInstance.doc(path), }; } } if (Object.keys(res).length > 0) { return { [key]: res, }; } } return null; } convertTo(key, value, _original, firestoreInstance) { if (value != null && typeof value === "object" && "@type" in value) { const type = value["@type"] ?? ""; if (type.startsWith(this.type)) { const refPath = value["@ref"] ?? ""; return { [key]: firestoreInstance.doc(refPath), }; } } else if (Array.isArray(value)) { const list = value.filter((e) => e != null && typeof e === "object" && "@type" in e); if (list.length > 0 && list.every((e) => e["@type"]?.startsWith(this.type))) { const res = []; for (const entry of list) { const refPath = entry["@ref"] ?? ""; res.push(firestoreInstance.doc(refPath)); } return { [key]: res, }; } } else if ((0, utils_1.isDynamicMap)(value)) { const map = {}; for (const k in value) { const v = value[k]; if (v != null && typeof v === "object" && "@type" in v) { map[k] = v; } } if (Object.keys(map).length > 0 && Object.values(map).every((e) => e["@type"]?.startsWith(this.type))) { const res = {}; for (const [k, entry] of Object.entries(map)) { const refPath = entry["@ref"] ?? ""; res[k] = firestoreInstance.doc(refPath); } return { [key]: res, }; } } return null; } } exports.FirestoreModelRefBaseConverter = FirestoreModelRefBaseConverter; //# sourceMappingURL=model_ref_base_converter.js.map