code: function copifyReducer(reducer) {
      return function (state, action) {
        var key = action.key;
  
        // MAYBE it's redux INIT action when in combineReducers, state is undefined
        // and reducer(state, action) will generate defaultState
        if (key === undefined) {
          /*
           * everytime when combineReducer is called, we receive a INIT action
           * we need the next line, or state will change to shape like
           * {
           *   DEFAULT_STATE_STORE_KEY: {
           *     DEFAULT_STATE_STORE_KEY: {
           *       DEFAULT_STATE_STORE_KEY: {
           *         ...state
           *     }
           *    }
           *   }
           */
          if (!(DEFAULT_STATE_STORE_KEY in (state || {} /* INIT action, state is undefined */))) {
            return _defineProperty({}, DEFAULT_STATE_STORE_KEY, reducer(state, action));
          }
          return state;
        }
  
        // when encount a key doesn't exist, init scope state for it
        if (!(key in state)) {
          state = _extends({}, state, _defineProperty({}, key, (0, _lodash.cloneDeep)(state[DEFAULT_STATE_STORE_KEY])));
        }
        return _extends({}, state, _defineProperty({}, key, reducer(state[key], action)));
      };
    }
docs: /*
  separate different state scope using action's key