UNPKG

cycle-restart

Version:

Restart a Cycle.js application and preserve state.

175 lines (128 loc) 4.54 kB
'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _restartable = require('./restartable'); var _restartable2 = _interopRequireDefault(_restartable); var _time = require('@cycle/time'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function restart(setup, main, drivers, cb, _ref) { var sources = _ref.sources, sinks = _ref.sinks, dispose = _ref.dispose; var isolate = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; var timeToTravelTo = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; dispose(); if (typeof isolate === 'function' && 'reset' in isolate) { isolate.reset(); } var realTime = (0, _time.timeDriver)(); realTime._pause(); drivers.Time = function () { return realTime; }; var _loop = function _loop(driverName) { var driver = drivers[driverName]; var newDriver = function newDriver(sink$) { return driver(sink$, realTime); }; newDriver.replayLog = driver.replayLog; newDriver.onPostReplay = driver.onPostReplay; newDriver.log$ = driver.log$; drivers[driverName] = newDriver; if (driver.onPreReplay) { driver.onPreReplay(); } }; for (var driverName in drivers) { _loop(driverName); } var newSourcesSinksAndRun = setup(main, drivers); var newDispose = newSourcesSinksAndRun.run(); var sourcesAndSinksAndDispose = { sources: newSourcesSinksAndRun.sources, sinks: newSourcesSinksAndRun.sinks, dispose: newDispose }; if ((typeof cb === 'undefined' ? 'undefined' : _typeof(cb)) === 'object') { cb.start(sourcesAndSinksAndDispose); } for (var driverName in drivers) { var _driver = drivers[driverName]; if (_driver.replayLog) { var log$ = sources[driverName].log$; _driver.replayLog(realTime._scheduler, log$, timeToTravelTo); } } var timeToRunTo = sources.Time && sources.Time._time() || null; realTime._runVirtually(function (err) { if (err) { throw err; } for (var _driverName in drivers) { var _driver2 = drivers[_driverName]; if (_driver2.onPostReplay) { _driver2.onPostReplay(); } } if ((typeof cb === 'undefined' ? 'undefined' : _typeof(cb)) === 'object') { cb.stop(err); } else { cb(err); } realTime._resume(timeToRunTo); }, timeToRunTo); return sourcesAndSinksAndDispose; } function rerunner(Cycle, driversFn, isolate) { var sourcesAndSinksAndDispose = {}; var first = true; var drivers = void 0; function noop() {} return function (main) { var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var timeToTravelTo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; if (first) { (function () { drivers = driversFn(); var realTime = (0, _time.timeDriver)(); drivers.Time = function () { return realTime; }; var _loop2 = function _loop2(driverName) { var driver = drivers[driverName]; var newDriver = function newDriver(sink$) { return driver(sink$, realTime); }; drivers[driverName] = newDriver; }; for (var driverName in drivers) { _loop2(driverName); } var _Cycle = Cycle(main, drivers), sources = _Cycle.sources, sinks = _Cycle.sinks, run = _Cycle.run; realTime = sources.Time; var dispose = run(); sourcesAndSinksAndDispose = { sources: sources, sinks: sinks, dispose: dispose }; first = false; if ((typeof cb === 'undefined' ? 'undefined' : _typeof(cb)) === 'object') { cb.start(sourcesAndSinksAndDispose); } if ((typeof cb === 'undefined' ? 'undefined' : _typeof(cb)) === 'object') { cb.stop(); } else { cb(); } })(); } else { drivers = driversFn(); sourcesAndSinksAndDispose = restart(Cycle, main, drivers, cb, sourcesAndSinksAndDispose, isolate, timeToTravelTo); } return sourcesAndSinksAndDispose; }; } module.exports = { restart: restart, restartable: _restartable2.default, rerunner: rerunner };