UNPKG

respond-framework

Version:
170 lines (166 loc) 4.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _sessionStorage = require("../utils/sessionStorage.js"); var _createPermalink = require("../modules/replayTools/helpers/createPermalink.js"); var _cloneDeep = require("../proxy/helpers/cloneDeep.js"); const getSystemState = (opts = {}) => { const { status, settings, branch = '' } = opts; const { prevState, respond, replayTools } = window.state ?? {}; const hydration = opts.hydration && typeof opts.hydration === 'string' ? JSON.parse(opts.hydration) : opts.hydration || {}; const rt = replayTools && respond.snapshot(replayTools); const sessionStorage = opts.sessionStorage ?? respond?.sessionStorage ?? _sessionStorage.default; switch (status) { case 'reload': { sessionStorage.setItem('seed', null); return { replayState: { settings, branch, status }, baseState: { ...(0, _cloneDeep.default)(hydration), replayTools: { ...rt, evsIndex: -1, evs: [], divergentIndex: undefined, selectedTestId: undefined } } }; } case 'replay': { sessionStorage.setItem('seed', null); return { replayState: { settings, branch, status }, baseState: { ...(0, _cloneDeep.default)(hydration), replayTools: { ...rt, evsIndex: -1, evs: [] } } }; } case 'hmr-replay': { sessionStorage.setItem('seed', null); const lastEvents = rt.evs.slice(0, rt.evsIndex + 1); return { replayState: { ...respond.replayState, lastEvents, status: 'replay', hmr: true }, baseState: { ...(0, _cloneDeep.default)(hydration), replayTools: { ...rt, evsIndex: -1 } } }; } case 'hmr': { const lastEvent = rt.evs[rt.evsIndex]; const { evsIndex, evs, divergentIndex } = prevState.replayTools; // set state to previous state, as most recent event will be replayed on top of it const { trigger } = lastEvent; lastEvent.trigger = function (...args) { trigger.apply(this, args); this.event.respond.render(); // dx: so you can just call e.trigger() in userland hmr routine without having to call render }; const seed = sessionStorage.getItem('prevSeed'); return { seed: seed ? JSON.parse(seed) : undefined, replayState: { ...respond.replayState, lastEvent, status, hmr: true }, baseState: { ...prevState, replayTools: { ...rt, evsIndex, evs, divergentIndex, playing: false } } }; } } let permalink, session; switch (true) { // case 'permalink': case !!(permalink = (0, _createPermalink.hashToSettings)()): { const branch = permalink.focusedBranch ?? ''; delete permalink.focusedBranch; return { replayState: { settings: permalink, branch, status: 'reload' }, baseState: (0, _cloneDeep.default)(hydration) ?? {} }; } // case 'session': case !!(session = sessionStorage.getItem('sessionSystemState')): { const system = JSON.parse(session); const seed = sessionStorage.getItem('seed'); return { ...system, seed: seed ? JSON.parse(seed) : undefined, replayState: { ...system.replayState, status: 'session' }, baseState: {} }; } // case 'visit': default: { return { replayState: { settings, branch: '', status: 'reload' }, baseState: (0, _cloneDeep.default)(hydration) ?? {} }; } } }; var _default = exports.default = getSystemState;