@mathrunet/masamune
Version:
Manages packages for the server portion (NodeJS) of the Masamune framework.
225 lines • 8.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FirestoreModelDateRangeConverter = exports.ModelDateRangeConverter = 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");
/**
* ModelDateRange ModelFieldValueConverter.
*
* ModelDateRange用のModelFieldValueConverter。
*/
class ModelDateRangeConverter extends model_field_value_converter_1.ModelFieldValueConverter {
/**
* ModelDateRange ModelFieldValueConverter.
*
* ModelDateRange用のModelFieldValueConverter。
*/
constructor() {
super();
}
type = "ModelDateRange";
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.ModelDateRange(new Date(start / 1000.0), new Date(end / 1000.0), "server"),
};
}
return null;
}
convertTo(key, value, original) {
if (value instanceof model_field_value_1.ModelDateRange) {
return {
[key]: {
"@type": this.type,
"@start": value["@start"] * 1000,
"@end": value["@end"] * 1000,
"@source": value["@source"],
},
};
}
return null;
}
}
exports.ModelDateRangeConverter = ModelDateRangeConverter;
/**
* FirestoreConverter for [ModelDateRange].
*
* [ModelDateRange]用のFirestoreConverter。
*/
class FirestoreModelDateRangeConverter extends model_field_value_converter_1.FirestoreModelFieldValueConverter {
/**
* FirestoreConverter for [ModelDateRange].
*
* [ModelDateRange]用のFirestoreConverter。
*/
constructor() {
super();
}
type = "ModelDateRange";
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.FirestoreModelDateRangeConverter = FirestoreModelDateRangeConverter;
//# sourceMappingURL=model_date_range_converter.js.map