UNPKG

@mathrunet/masamune

Version:

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

225 lines 8.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FirestoreModelTimeRangeConverter = exports.ModelTimeRangeConverter = 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"); /** * ModelTimeRange ModelFieldValueConverter. * * ModelTimeRange用のModelFieldValueConverter。 */ class ModelTimeRangeConverter extends model_field_value_converter_1.ModelFieldValueConverter { /** * ModelTimeRange ModelFieldValueConverter. * * ModelTimeRange用のModelFieldValueConverter。 */ constructor() { super(); } type = "ModelTimeRange"; convertFrom(key, value, original) { if (value !== null && typeof value === "object" && "@type" in value && value["@type"] === this.type) { const start = value["@start"] ?? 0; const end = value["@end"] ?? 0; return { [key]: new model_field_value_1.ModelTimeRange(new Date(start / 1000.0), new Date(end / 1000.0), "server"), }; } return null; } convertTo(key, value, original) { if (value instanceof model_field_value_1.ModelTimeRange) { return { [key]: { "@type": this.type, "@start": value["@start"] * 1000, "@end": value["@end"] * 1000, "@source": value["@source"], }, }; } return null; } } exports.ModelTimeRangeConverter = ModelTimeRangeConverter; /** * FirestoreConverter for [ModelTimeRange]. * * [ModelTimeRange]用のFirestoreConverter。 */ class FirestoreModelTimeRangeConverter extends model_field_value_converter_1.FirestoreModelFieldValueConverter { /** * FirestoreConverter for [ModelTimeRange]. * * [ModelTimeRange]用のFirestoreConverter。 */ constructor() { super(); } type = "ModelTimeRange"; convertFrom(key, value, original, firestoreInstance) { if (typeof value === "string") { const targetKey = `#${key}`; const targetMap = original[targetKey] ?? {}; const type = targetMap["@type"] ?? ""; if (type == this.type) { const splitted = value.split("|"); if (splitted.length === 2) { const start = new Date(splitted[0]); const end = new Date(splitted[1]); if (!isNaN(start.getTime()) && !isNaN(end.getTime())) { return { [key]: { "@type": this.type, "@start": start.getTime() * 1000, "@end": end.getTime() * 1000, }, [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) { if (typeof tmp === "string") { const splitted = tmp.split("|"); if (splitted.length === 2) { const start = new Date(splitted[0]); const end = new Date(splitted[1]); if (!isNaN(start.getTime()) && !isNaN(end.getTime())) { res.push({ "@type": this.type, "@start": start.getTime() * 1000, "@end": end.getTime() * 1000, }); } } } } if (res.length > 0) { return { [key]: res, [targetKey]: null, }; } } } else if ((0, utils_1.isDynamicMap)(value)) { const targetKey = `#${key}`; const targetMap = original[targetKey] ?? {}; if (targetMap != null) { const res = {}; for (const k in value) { const val = value[k]; const mapVal = targetMap[k] ?? {}; const type = mapVal["@type"] ?? ""; if (type != this.type) { continue; } if (typeof val === "string") { const splitted = val.split("|"); if (splitted.length === 2) { const start = new Date(splitted[0]); const end = new Date(splitted[1]); if (!isNaN(start.getTime()) && !isNaN(end.getTime())) { res[k] = { "@type": this.type, "@start": start.getTime() * 1000, "@end": end.getTime() * 1000, }; } } } } if (Object.keys(res).length > 0) { return { [key]: res, [targetKey]: null, }; } } } return null; } convertTo(key, value, _original, firestoreInstance) { if (value != null && typeof value === "object" && "@type" in value) { const type = value["@type"] ?? ""; if (type === this.type) { const start = value["@start"] ?? 0; const end = value["@end"] ?? 0; const targetKey = `#${key}`; return { [targetKey]: { "@type": this.type, "@start": start, "@end": end, "@target": key, }, [key]: `${new Date(start / 1000.0).toISOString()}|${new Date(end / 1000.0).toISOString()}`, }; } } 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"] === this.type)) { const target = []; const res = []; const targetKey = `#${key}`; for (const entry of list) { const start = entry["@start"] ?? 0; const end = entry["@end"] ?? 0; target.push({ "@type": this.type, "@start": start, "@end": end, "@target": key, }); res.push(`${new Date(start / 1000.0).toISOString()}|${new Date(end / 1000.0).toISOString()}`); } return { [targetKey]: target, [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"] === this.type)) { const target = {}; const res = {}; const targetKey = `#${key}`; for (const [k, entry] of Object.entries(map)) { const start = entry["@start"] ?? 0; const end = entry["@end"] ?? 0; target[k] = { "@type": this.type, "@start": start, "@end": end, "@target": key, }; res[k] = `${new Date(start / 1000.0).toISOString()}|${new Date(end / 1000.0).toISOString()}`; } return { [targetKey]: target, [key]: res, }; } } return null; } } exports.FirestoreModelTimeRangeConverter = FirestoreModelTimeRangeConverter; //# sourceMappingURL=model_time_range_converter.js.map