fluorine-lib
Version:
Reactive state and side effect management for React using a single stream of actions
137 lines (103 loc) • 4.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.logStore = undefined;
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; };
exports.parseOpts = parseOpts;
exports.logAgendas = logAgendas;
var _scan = require('rxjs/operator/scan');
var scan = _scan.scan;
var _do2 = require('rxjs/operator/do');
var _do = _do2._do;
var _last = require('rxjs/operator/last');
var last = _last.last;
function strTime(date) {
return date.toLocaleTimeString('en-GB') + '.' + date.getMilliseconds();
}
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);
};
};
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();
}
});
});
}
var logStore = exports.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();
}
}
};
};