This commit is contained in:
TheGiddyLimit
2024-01-01 19:34:49 +00:00
parent 332769043f
commit 8117ebddc5
1748 changed files with 2544409 additions and 1 deletions

View File

@@ -0,0 +1,44 @@
export class InitiativeTrackerDataSerializerBase {
static _FIELD_MAPPINGS = {};
static _getFieldMappings () {
return Object.entries(this._FIELD_MAPPINGS)
.map(([kFull, kSerial]) => {
const kFullParts = kFull.split(".");
return {
kFullParts,
kSerial,
};
});
}
static registerMapping ({kFull, kSerial, isAllowDuplicates = false}) {
if (!isAllowDuplicates) {
if (this._FIELD_MAPPINGS[kFull]) throw new Error(`Serializer key "${kFull}" was already registered!`);
}
if (!isAllowDuplicates || this._FIELD_MAPPINGS[kFull] == null) {
if (Object.values(this._FIELD_MAPPINGS).some(k => k === kSerial)) throw new Error(`Serializer value "${kFull}" was already registered!`);
}
this._FIELD_MAPPINGS[kFull] = kSerial;
}
/* -------------------------------------------- */
static fromSerial (dataSerial) {
const out = {};
this._getFieldMappings()
.filter(({kSerial}) => dataSerial[kSerial] != null)
.forEach(({kFullParts, kSerial}) => MiscUtil.set(out, ...kFullParts, dataSerial[kSerial]));
return out;
}
static toSerial (data) {
return this._getFieldMappings()
.filter(({kFullParts}) => MiscUtil.get(data, ...kFullParts) != null)
.mergeMap(({kFullParts, kSerial}) => ({[kSerial]: MiscUtil.get(data, ...kFullParts)}));
}
}