fluorine-lib
Version:
Reactive state and side effect management for React using a single stream of actions
118 lines (93 loc) • 3.89 kB
JavaScript
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();
}
}
};
};