class SyncTargetRegistry { static classById(syncTargetId) { const info = SyncTargetRegistry.reg_[syncTargetId]; if (!info) throw new Error(`Invalid id: ${syncTargetId}`); return info.classRef; } static addClass(SyncTargetClass) { this.reg_[SyncTargetClass.id()] = { id: SyncTargetClass.id(), name: SyncTargetClass.targetName(), label: SyncTargetClass.label(), classRef: SyncTargetClass, supportsConfigCheck: SyncTargetClass.supportsConfigCheck(), }; } static nameToId(name) { for (let n in this.reg_) { if (!this.reg_.hasOwnProperty(n)) continue; if (this.reg_[n].name === name) return this.reg_[n].id; } throw new Error(`Name not found: ${name}`); } static idToMetadata(id) { for (let n in this.reg_) { if (!this.reg_.hasOwnProperty(n)) continue; if (this.reg_[n].id === id) return this.reg_[n]; } throw new Error(`ID not found: ${id}`); } static idToName(id) { return this.idToMetadata(id).name; } static idAndLabelPlainObject() { let output = {}; for (let n in this.reg_) { if (!this.reg_.hasOwnProperty(n)) continue; output[n] = this.reg_[n].label; } return output; } } SyncTargetRegistry.reg_ = {}; module.exports = SyncTargetRegistry;