UNPKG

@mathrunet/masamune

Version:

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

184 lines 6.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FirestoreModelUriConverter = exports.ModelUriConverter = void 0; const model_field_value_converter_1 = require("../model_field_value_converter"); const utils_1 = require("../../utils"); const model_field_value_1 = require("../model_field_value"); /** * ModelUri ModelFieldValueConverter. * * ModelUri用のModelFieldValueConverter。 */ class ModelUriConverter extends model_field_value_converter_1.ModelFieldValueConverter { /** * ModelUri ModelFieldValueConverter. * * ModelUri用のModelFieldValueConverter。 */ constructor() { super(); } type = "ModelUri"; convertFrom(key, value, original) { if (value !== null && typeof value === "object" && "@type" in value && value["@type"] === this.type) { const uri = value["@uri"] ?? ""; return { [key]: new model_field_value_1.ModelUri(uri, "server"), }; } return null; } convertTo(key, value, original) { if (value instanceof model_field_value_1.ModelUri) { return { [key]: { "@type": this.type, "@uri": value["@uri"], "@source": value["@source"], }, }; } return null; } } exports.ModelUriConverter = ModelUriConverter; /** * FirestoreConverter for [ModelUri]. * * [ModelUri]用のFirestoreConverter。 */ class FirestoreModelUriConverter extends model_field_value_converter_1.FirestoreModelFieldValueConverter { /** * FirestoreConverter for [ModelUri]. * * [ModelUri]用のFirestoreConverter。 */ constructor() { super(); } type = "ModelUri"; convertFrom(key, value, original, firestoreInstance) { if (typeof value === "string") { const targetKey = `#${key}`; const targetMap = original[targetKey] ?? {}; const type = targetMap["@type"] ?? ""; if (type == this.type) { return { [key]: { "@type": this.type, "@uri": value, }, [targetKey]: null, }; } } else if (Array.isArray(value)) { const targetKey = `#${key}`; const targetList = original[targetKey] ?? []; if (targetList != null && targetList.length > 0 && targetList.every((e) => e["@type"] === this.type)) { const res = []; for (const tmp of value) { res.push({ "@type": this.type, "@uri": tmp, }); } if (res.length > 0) { return { [key]: res, [targetKey]: null, }; } } } else if ((0, utils_1.isDynamicMap)(value)) { const targetKey = `#${key}`; const targetMap = original[targetKey] ?? {}; targetMap; if (targetMap != null) { const res = {}; for (const key in value) { const val = value[key]; const mapVal = targetMap[key] ?? {}; const type = mapVal["@type"] ?? ""; if (type != this.type) { continue; } res[key] = { "@type": this.type, "@uri": val, }; } if (Object.keys(res).length > 0) { return { [key]: res, [targetKey]: null, }; } } } return null; } convertTo(key, value, original, firestoreInstance) { if ((0, utils_1.isDynamicMap)(value) && value["@type"] !== undefined) { const type = value["@type"] || ""; if (type === this.type) { const val = value["@uri"] || ""; const targetKey = `#${key}`; return { [targetKey]: { "@type": this.type, "@uri": val, "@target": key, }, [key]: val, }; } } else if (Array.isArray(value)) { const list = value.filter(e => (0, utils_1.isDynamicMap)(e)); if (list.length > 0 && list.every((e) => e["@type"] === this.type)) { const target = []; const res = []; const targetKey = `#${key}`; for (const entry of list) { const uri = entry["@uri"] || ""; target.push({ "@type": this.type, "@uri": uri, "@target": key, }); res.push(uri); } return { [targetKey]: target, [key]: res, }; } } else if ((0, utils_1.isDynamicMap)(value)) { const map = Object.entries(value).filter(([_, v]) => (0, utils_1.isDynamicMap)(v)); if (map.length > 0 && map.every(([_, v]) => v["@type"] === this.type)) { const target = {}; const res = {}; const targetKey = `#${key}`; for (const [k, v] of map) { const uri = v["@uri"] || ""; target[k] = { "@type": this.type, "@uri": uri, "@target": key, }; res[k] = uri; } return { [targetKey]: target, [key]: res, }; } } return null; } } exports.FirestoreModelUriConverter = FirestoreModelUriConverter; //# sourceMappingURL=model_uri_converter.js.map