import { lastUpdated } from '../../utilities/index.js'; import checkOverrides from './checkOverrides.js'; import kuvaProcessing from './kuva.js'; import arrayLike from './arrayLike.js'; import objectLike from './objectLike.js'; import nightwave from './nightwave.js'; import cycleLike from './cycleLike.js'; import * as eKeyOverrides from './eKeyOverrides.js'; /** * @typedef {Object} Deps * @property {string} key event key being parsed * @property {string} platform platform the event is on * @property {string} language language the event is in * @property {Date} cycleStart start of the current cycle * @property {Object|Array} data data to parse */ /** * Set up current cycle start if it's not been initiated * @param {Deps} deps dependencies for processing */ const initCycleStart = (deps) => { if (!lastUpdated[deps.platform][deps.language]) { lastUpdated[deps.platform][deps.language] = deps.cycleStart; } }; /** * Parse new events from the provided worldstate * @param {Deps} deps dependencies to parse out events * @returns {Packet|Packet[]} packet(s) to emit */ export default (deps) => { initCycleStart(deps); // anything in the eKeyOverrides goes first, then anything uniform const packets = []; switch (deps.key) { case 'kuva': return kuvaProcessing(deps, packets); case 'events': deps = { ...deps, id: eKeyOverrides[deps.key], }; case 'alerts': case 'conclaveChallenges': case 'dailyDeals': case 'flashSales': case 'fissures': case 'globalUpgrades': case 'invasions': case 'syndicateMissions': case 'weeklyChallenges': packets.push(...arrayLike(deps, packets)); break; case 'cetusCycle': case 'earthCycle': case 'vallisCycle': packets.push(cycleLike(deps.data, deps)); break; case 'persistentEnemies': deps = { ...deps, ...checkOverrides(deps.key, deps.data), }; case 'sortie': case 'voidTrader': case 'arbitration': case 'sentientOutposts': deps.id = checkOverrides(deps.key, deps.data); packets.push(objectLike(deps.data, deps)); case 'nightwave': packets.push(nightwave(deps.data, deps)); default: break; } return packets; };