-- Dormant framework: no missions, events, callbacks or commands are registered -- until a future migration explicitly calls register on an instance. local ids = require 'shared.mission_ids' local Registry = {} Registry.__index = Registry function Registry.new() return setmetatable({ missions = {} }, Registry) end function Registry:register(mission) assert(type(mission) == 'table' and type(mission.id) == 'string', 'mission.id is required') assert(ids.definitions[mission.id], 'unknown mission ID: ' .. mission.id) assert(not self.missions[mission.id], 'duplicate mission ID: ' .. mission.id) self.missions[mission.id] = mission return mission end function Registry:get(missionId) return self.missions[missionId] end function Registry:resolveProgPhase(contact, notation) local phase = ids.parseProgPhase(contact, notation) if not phase then return nil end local mission = self.missions[phase.missionId] if not mission or not mission.phases or not mission.phases[phase.phaseName] then return nil end return mission, mission.phases[phase.phaseName], phase end function Registry:list() local result = {} for id, mission in pairs(self.missions) do result[#result + 1] = { id = id, mission = mission } end table.sort(result, function(a, b) return a.id < b.id end) return result end return Registry