Skip to content

Commit

Permalink
[build] 2.0.0-rc.6
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Sep 24, 2016
1 parent facc711 commit a4c899c
Show file tree
Hide file tree
Showing 3 changed files with 571 additions and 445 deletions.
113 changes: 113 additions & 0 deletions dist/logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.createVuexLogger = factory());
}(this, (function () { 'use strict';

/**
* Get the first item that pass the test
* by second argument function
*
* @param {Array} list
* @param {Function} f
* @return {*}
*/
function find (list, f) {
return list.filter(f)[0]
}

/**
* Deep copy the given object considering circular structure.
* This function caches all nested objects and its copies.
* If it detects circular structure, use cached copy to avoid infinite loop.
*
* @param {*} obj
* @param {Array<Object>} cache
* @return {*}
*/
function deepCopy (obj, cache) {
if ( cache === void 0 ) cache = [];

// just return if obj is immutable value
if (obj === null || typeof obj !== 'object') {
return obj
}

// if obj is hit, it is in circular structure
var hit = find(cache, function (c) { return c.original === obj; })
if (hit) {
return hit.copy
}

var copy = Array.isArray(obj) ? [] : {}
// put the copy into cache at first
// because we want to refer it in recursive deepCopy
cache.push({
original: obj,
copy: copy
})

Object.keys(obj).forEach(function (key) {
copy[key] = deepCopy(obj[key], cache)
})

return copy
}

// Credits: borrowed code from fcomb/redux-logger

function createLogger (ref) {
if ( ref === void 0 ) ref = {};
var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true;
var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; };
var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; };

return function (store) {
var prevState = deepCopy(store.state)

store.subscribe(function (mutation, state) {
if (typeof console === 'undefined') {
return
}
var nextState = deepCopy(state)
var time = new Date()
var formattedTime = " @ " + (pad(time.getHours(), 2)) + ":" + (pad(time.getMinutes(), 2)) + ":" + (pad(time.getSeconds(), 2)) + "." + (pad(time.getMilliseconds(), 3))
var formattedMutation = mutationTransformer(mutation)
var message = "mutation " + (mutation.type) + formattedTime
var startMessage = collapsed
? console.groupCollapsed
: console.group

// render
try {
startMessage.call(console, message)
} catch (e) {
console.log(message)
}

console.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState))
console.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation)
console.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState))

try {
console.groupEnd()
} catch (e) {
console.log('—— log end ——')
}

prevState = nextState
})
}
}

function repeat (str, times) {
return (new Array(times + 1)).join(str)
}

function pad (num, maxLength) {
return repeat('0', maxLength - num.toString().length) + num
}

return createLogger;

})));
Loading

0 comments on commit a4c899c

Please sign in to comment.