UNPKG

fluorine-lib

Version:

Reactive state and side effect management for React using a single stream of actions

118 lines (93 loc) 3.89 kB
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; }; import { scan } from 'rxjs/operator/scan'; import { _do } from 'rxjs/operator/do'; import { last } from 'rxjs/operator/last'; function strTime(date) { return date.toLocaleTimeString('en-GB') + '.' + date.getMilliseconds(); } export function parseOpts(logging) { var opts = { agendas: false, stores: false }; if ((typeof logging === 'undefined' ? 'undefined' : _typeof(logging)) === 'object') { opts.agendas = logging.agendas; opts.stores = logging.stores; } else if (logging) { opts.agendas = true; opts.stores = true; } return opts; } var agendaGroupHead = function agendaGroupHead(agenda, timestamp) { return function () { var prepend = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var timestampEnd = new Date(); var title = 'Agenda ' + agenda.constructor.name + ' @ ' + strTime(timestamp) + ' (in ' + (timestampEnd - timestamp) + 'ms)'; if (console.groupCollapsed) { console.groupCollapsed('%c ' + (prepend + title), 'color: #111111;'); } console.log('%c agenda', 'color: #9e9e9e; font-weight: bold;', agenda); }; }; export function logAgendas(dispatcher) { dispatcher.subscribe(function (agenda) { var _context; var logStart = agendaGroupHead(agenda, new Date()); var errBucket = void 0; (_context = (_context = scan.call(agenda, function (bucket, action) { return bucket.concat([action]); }, []), _do).call(_context, function (bucket) { errBucket = bucket; }), last).call(_context).subscribe(function (actions) { logStart(); actions.forEach(function (action) { console.log('%c action', 'color: #03a9f4; font-weight: bold;', action); }); if (console.groupEnd && console.groupCollapsed) { console.groupEnd(); } }, function (error) { logStart('Error '); console.log('%c error', 'color: #f20404; font-weight: bold;', error); console.log('%c dispatched actions', 'color: #03a9f4; font-weight: bold;', errBucket); if (console.groupEnd && console.groupCollapsed) { console.groupEnd(); } }); }); } export var logStore = function logStore(name, agenda) { return { change: function change(action, state) { var timestamp = new Date(); var title = 'Store ' + name + ' @ ' + strTime(timestamp); if (console.groupCollapsed) { console.groupCollapsed('%c ' + title, 'color: #111111;'); } console.log('%c agenda', 'color: #9e9e9e; font-weight: bold;', agenda); console.log('%c action', 'color: #03a9f4; font-weight: bold;', action); console.log('%c change', 'color: #4caf50; font-weight: bold;', state); if (console.groupCollapsed && console.groupEnd) { console.groupEnd(); } }, revert: function revert(states, error, bucket) { var timestamp = new Date(); var title = 'Revert ' + name + ' @ ' + strTime(timestamp); var prevState = states[0], state = states[1]; if (console.groupCollapsed) { console.groupCollapsed('%c ' + title, 'color: #f20404;'); } console.log('%c agenda', 'color: #9e9e9e; font-weight: bold;', agenda); console.log('%c previous', 'color: #4caf50; font-weight: bold;', prevState); console.log('%c state', 'color: #4caf50; font-weight: bold;', state); console.log('%c error', 'color: #f20404; font-weight: bold;', error); console.log('%c bucket', 'color: #03a9f4; font-weight: bold;', bucket); if (console.groupCollapsed && console.groupEnd) { console.groupEnd(); } } }; };