docs: function VueMeta (Vue, options) {
    if ( options === void 0 ) options = {};
  
    // set some default options
    var defaultOptions = {
      keyName: VUE_META_KEY_NAME,
      attribute: VUE_META_ATTRIBUTE,
      ssrAttribute: VUE_META_SERVER_RENDERED_ATTRIBUTE,
      tagIDKeyName: VUE_META_TAG_LIST_ID_KEY_NAME
    };
    // combine options
    options = index(defaultOptions, options);
  
    // bind the $meta method to this component instance
    Vue.prototype.$meta = _$meta(options);
  
    // store an id to keep track of DOM updates
    var batchID = null;
  
    // watch for client side component updates
    Vue.mixin({
      beforeCreate: function beforeCreate () {
        // Add a marker to know if it uses metaInfo
        if (typeof this.$options[options.keyName] !== 'undefined') {
          this._hasMetaInfo = true;
        }
        // coerce function-style metaInfo to a computed prop so we can observe
        // it on creation
        if (typeof this.$options[options.keyName] === 'function') {
          if (typeof this.$options.computed === 'undefined') {
            this.$options.computed = {};
          }
          this.$options.computed.$metaInfo = this.$options[options.keyName];
        }
      },
      created: function created () {
        var this$1 = this;
  
        // if computed $metaInfo exists, watch it for updates & trigger a refresh
        // when it changes (i.e. automatically handle async actions that affect metaInfo)
        // credit for this suggestion goes to [Sébastien Chopin](https://github.com/Atinux)
        if (this.$metaInfo) {
          this.$watch('$metaInfo', function () {
            // batch potential DOM updates to prevent extraneous re-rendering
            batchID = batchUpdate(batchID, function () { return this$1.$meta().refresh(); });
          });
        }
      },
      activated: function activated () {
        var this$1 = this;
  
        if (this._hasMetaInfo) {
          // batch potential DOM updates to prevent extraneous re-rendering
          batchID = batchUpdate(batchID, function () { return this$1.$meta().refresh(); });
        }
      },
      deactivated: function deactivated () {
        var this$1 = this;
  
        if (this._hasMetaInfo) {
          // batch potential DOM updates to prevent extraneous re-rendering
          batchID = batchUpdate(batchID, function () { return this$1.$meta().refresh(); });
        }
      },
      beforeMount: function beforeMount () {
        var this$1 = this;
  
        // batch potential DOM updates to prevent extraneous re-rendering
        if (this._hasMetaInfo) {
          batchID = batchUpdate(batchID, function () { return this$1.$meta().refresh(); });
        }
      },
      destroyed: function destroyed () {
        var this$1 = this;
  
        // do not trigger refresh on the server side
        if (this.$isServer) { return }
        // re-render meta data when returning from a child component to parent
        if (this._hasMetaInfo) {
          // Wait that element is hidden before refreshing meta tags (to support animations)
          var interval = setInterval(function () {
            if (this$1.$el.offsetParent !== null) { return }
            clearInterval(interval);
            batchID = batchUpdate(batchID, function () { return this$1.$meta().refresh(); });
          }, 50);
        }
      }
    });
  }