text: import invariant from 'invariant';
  import isFunction from './utils/isFunction';
  import identity from './utils/identity';
  import isNull from './utils/isNull';
  
  export default function createAction(type) {
    var payloadCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity;
    var metaCreator = arguments[2];
  
    invariant(isFunction(payloadCreator) || isNull(payloadCreator), 'Expected payloadCreator to be a function, undefined or null');
  
    var finalPayloadCreator = isNull(payloadCreator) || payloadCreator === identity ? identity : function (head) {
      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
        args[_key - 1] = arguments[_key];
      }
  
      return head instanceof Error ? head : payloadCreator.apply(undefined, [head].concat(args));
    };
  
    var hasMeta = isFunction(metaCreator);
    var typeString = type.toString();
  
    var actionCreator = function actionCreator() {
      var payload = finalPayloadCreator.apply(undefined, arguments);
      var action = { type: type };
  
      if (payload instanceof Error) {
        action.error = true;
      }
  
      if (payload !== undefined) {
        action.payload = payload;
      }
  
      if (hasMeta) {
        action.meta = metaCreator.apply(undefined, arguments);
      }
  
      return action;
    };
  
    actionCreator.toString = function () {
      return typeString;
    };
  
    return actionCreator;
  }