mirror of
https://github.com/Kornstalx/5etools-mirror-2.github.io.git
synced 2025-10-28 20:45:35 -05:00
45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
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)}));
|
|
}
|
|
}
|