travel/admin/node_modules/@vue/test-utils/dist/vue-test-utils.js

8734 lines
236 KiB
JavaScript

'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var Vue = _interopDefault(require('vue'));
var vueTemplateCompiler = require('vue-template-compiler');
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var semver = createCommonjsModule(function (module, exports) {
exports = module.exports = SemVer;
// The debug function is excluded entirely from the minified version.
/* nomin */ var debug;
/* nomin */ if (typeof process === 'object' &&
/* nomin */ process.env &&
/* nomin */ process.env.NODE_DEBUG &&
/* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG))
/* nomin */ { debug = function() {
/* nomin */ var args = Array.prototype.slice.call(arguments, 0);
/* nomin */ args.unshift('SEMVER');
/* nomin */ console.log.apply(console, args);
/* nomin */ }; }
/* nomin */ else
/* nomin */ { debug = function() {}; }
// Note: this is the semver.org version of the spec that it implements
// Not necessarily the package version of this code.
exports.SEMVER_SPEC_VERSION = '2.0.0';
var MAX_LENGTH = 256;
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
// Max safe segment length for coercion.
var MAX_SAFE_COMPONENT_LENGTH = 16;
// The actual regexps go on exports.re
var re = exports.re = [];
var src = exports.src = [];
var R = 0;
// The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings.
// ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits.
var NUMERICIDENTIFIER = R++;
src[NUMERICIDENTIFIER] = '0|[1-9]\\d*';
var NUMERICIDENTIFIERLOOSE = R++;
src[NUMERICIDENTIFIERLOOSE] = '[0-9]+';
// ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens.
var NONNUMERICIDENTIFIER = R++;
src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*';
// ## Main Version
// Three dot-separated numeric identifiers.
var MAINVERSION = R++;
src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[NUMERICIDENTIFIER] + ')';
var MAINVERSIONLOOSE = R++;
src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[NUMERICIDENTIFIERLOOSE] + ')';
// ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier.
var PRERELEASEIDENTIFIER = R++;
src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
'|' + src[NONNUMERICIDENTIFIER] + ')';
var PRERELEASEIDENTIFIERLOOSE = R++;
src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
'|' + src[NONNUMERICIDENTIFIER] + ')';
// ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version
// identifiers.
var PRERELEASE = R++;
src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
'(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))';
var PRERELEASELOOSE = R++;
src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
'(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))';
// ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens.
var BUILDIDENTIFIER = R++;
src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+';
// ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata
// identifiers.
var BUILD = R++;
src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
'(?:\\.' + src[BUILDIDENTIFIER] + ')*))';
// ## Full Version String
// A main version, followed optionally by a pre-release version and
// build metadata.
// Note that the only major, minor, patch, and pre-release sections of
// the version string are capturing groups. The build metadata is not a
// capturing group, because it should not ever be used in version
// comparison.
var FULL = R++;
var FULLPLAIN = 'v?' + src[MAINVERSION] +
src[PRERELEASE] + '?' +
src[BUILD] + '?';
src[FULL] = '^' + FULLPLAIN + '$';
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry.
var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
src[PRERELEASELOOSE] + '?' +
src[BUILD] + '?';
var LOOSE = R++;
src[LOOSE] = '^' + LOOSEPLAIN + '$';
var GTLT = R++;
src[GTLT] = '((?:<|>)?=?)';
// Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required.
var XRANGEIDENTIFIERLOOSE = R++;
src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*';
var XRANGEIDENTIFIER = R++;
src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*';
var XRANGEPLAIN = R++;
src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:' + src[PRERELEASE] + ')?' +
src[BUILD] + '?' +
')?)?';
var XRANGEPLAINLOOSE = R++;
src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:' + src[PRERELEASELOOSE] + ')?' +
src[BUILD] + '?' +
')?)?';
var XRANGE = R++;
src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
var XRANGELOOSE = R++;
src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';
// Coercion.
// Extract anything that could conceivably be a part of a valid semver
var COERCE = R++;
src[COERCE] = '(?:^|[^\\d])' +
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:$|[^\\d])';
// Tilde ranges.
// Meaning is "reasonably at or greater than"
var LONETILDE = R++;
src[LONETILDE] = '(?:~>?)';
var TILDETRIM = R++;
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
var tildeTrimReplace = '$1~';
var TILDE = R++;
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
var TILDELOOSE = R++;
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
// Caret ranges.
// Meaning is "at least and backwards compatible with"
var LONECARET = R++;
src[LONECARET] = '(?:\\^)';
var CARETTRIM = R++;
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
var caretTrimReplace = '$1^';
var CARET = R++;
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
var CARETLOOSE = R++;
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
// A simple gt/lt/eq thing, or just "" to indicate "any version"
var COMPARATORLOOSE = R++;
src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$';
var COMPARATOR = R++;
src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';
// An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
var COMPARATORTRIM = R++;
src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
'\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';
// this one has to use the /g flag
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
var comparatorTrimReplace = '$1$2$3';
// Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form
// later.
var HYPHENRANGE = R++;
src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
'\\s+-\\s+' +
'(' + src[XRANGEPLAIN] + ')' +
'\\s*$';
var HYPHENRANGELOOSE = R++;
src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s+-\\s+' +
'(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s*$';
// Star ranges basically just allow anything at all.
var STAR = R++;
src[STAR] = '(<|>)?=?\\s*\\*';
// Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag.
for (var i = 0; i < R; i++) {
debug(i, src[i]);
if (!re[i])
{ re[i] = new RegExp(src[i]); }
}
exports.parse = parse;
function parse(version, options) {
if (!options || typeof options !== 'object')
{ options = { loose: !!options, includePrerelease: false }; }
if (version instanceof SemVer)
{ return version; }
if (typeof version !== 'string')
{ return null; }
if (version.length > MAX_LENGTH)
{ return null; }
var r = options.loose ? re[LOOSE] : re[FULL];
if (!r.test(version))
{ return null; }
try {
return new SemVer(version, options);
} catch (er) {
return null;
}
}
exports.valid = valid;
function valid(version, options) {
var v = parse(version, options);
return v ? v.version : null;
}
exports.clean = clean;
function clean(version, options) {
var s = parse(version.trim().replace(/^[=v]+/, ''), options);
return s ? s.version : null;
}
exports.SemVer = SemVer;
function SemVer(version, options) {
if (!options || typeof options !== 'object')
{ options = { loose: !!options, includePrerelease: false }; }
if (version instanceof SemVer) {
if (version.loose === options.loose)
{ return version; }
else
{ version = version.version; }
} else if (typeof version !== 'string') {
throw new TypeError('Invalid Version: ' + version);
}
if (version.length > MAX_LENGTH)
{ throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') }
if (!(this instanceof SemVer))
{ return new SemVer(version, options); }
debug('SemVer', version, options);
this.options = options;
this.loose = !!options.loose;
var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]);
if (!m)
{ throw new TypeError('Invalid Version: ' + version); }
this.raw = version;
// these are actually numbers
this.major = +m[1];
this.minor = +m[2];
this.patch = +m[3];
if (this.major > MAX_SAFE_INTEGER || this.major < 0)
{ throw new TypeError('Invalid major version') }
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)
{ throw new TypeError('Invalid minor version') }
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)
{ throw new TypeError('Invalid patch version') }
// numberify any prerelease numeric ids
if (!m[4])
{ this.prerelease = []; }
else
{ this.prerelease = m[4].split('.').map(function(id) {
if (/^[0-9]+$/.test(id)) {
var num = +id;
if (num >= 0 && num < MAX_SAFE_INTEGER)
{ return num; }
}
return id;
}); }
this.build = m[5] ? m[5].split('.') : [];
this.format();
}
SemVer.prototype.format = function() {
this.version = this.major + '.' + this.minor + '.' + this.patch;
if (this.prerelease.length)
{ this.version += '-' + this.prerelease.join('.'); }
return this.version;
};
SemVer.prototype.toString = function() {
return this.version;
};
SemVer.prototype.compare = function(other) {
debug('SemVer.compare', this.version, this.options, other);
if (!(other instanceof SemVer))
{ other = new SemVer(other, this.options); }
return this.compareMain(other) || this.comparePre(other);
};
SemVer.prototype.compareMain = function(other) {
if (!(other instanceof SemVer))
{ other = new SemVer(other, this.options); }
return compareIdentifiers(this.major, other.major) ||
compareIdentifiers(this.minor, other.minor) ||
compareIdentifiers(this.patch, other.patch);
};
SemVer.prototype.comparePre = function(other) {
var this$1 = this;
if (!(other instanceof SemVer))
{ other = new SemVer(other, this.options); }
// NOT having a prerelease is > having one
if (this.prerelease.length && !other.prerelease.length)
{ return -1; }
else if (!this.prerelease.length && other.prerelease.length)
{ return 1; }
else if (!this.prerelease.length && !other.prerelease.length)
{ return 0; }
var i = 0;
do {
var a = this$1.prerelease[i];
var b = other.prerelease[i];
debug('prerelease compare', i, a, b);
if (a === undefined && b === undefined)
{ return 0; }
else if (b === undefined)
{ return 1; }
else if (a === undefined)
{ return -1; }
else if (a === b)
{ continue; }
else
{ return compareIdentifiers(a, b); }
} while (++i);
};
// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
SemVer.prototype.inc = function(release, identifier) {
var this$1 = this;
switch (release) {
case 'premajor':
this.prerelease.length = 0;
this.patch = 0;
this.minor = 0;
this.major++;
this.inc('pre', identifier);
break;
case 'preminor':
this.prerelease.length = 0;
this.patch = 0;
this.minor++;
this.inc('pre', identifier);
break;
case 'prepatch':
// If this is already a prerelease, it will bump to the next version
// drop any prereleases that might already exist, since they are not
// relevant at this point.
this.prerelease.length = 0;
this.inc('patch', identifier);
this.inc('pre', identifier);
break;
// If the input is a non-prerelease version, this acts the same as
// prepatch.
case 'prerelease':
if (this.prerelease.length === 0)
{ this.inc('patch', identifier); }
this.inc('pre', identifier);
break;
case 'major':
// If this is a pre-major version, bump up to the same major version.
// Otherwise increment major.
// 1.0.0-5 bumps to 1.0.0
// 1.1.0 bumps to 2.0.0
if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)
{ this.major++; }
this.minor = 0;
this.patch = 0;
this.prerelease = [];
break;
case 'minor':
// If this is a pre-minor version, bump up to the same minor version.
// Otherwise increment minor.
// 1.2.0-5 bumps to 1.2.0
// 1.2.1 bumps to 1.3.0
if (this.patch !== 0 || this.prerelease.length === 0)
{ this.minor++; }
this.patch = 0;
this.prerelease = [];
break;
case 'patch':
// If this is not a pre-release version, it will increment the patch.
// If it is a pre-release it will bump up to the same patch version.
// 1.2.0-5 patches to 1.2.0
// 1.2.0 patches to 1.2.1
if (this.prerelease.length === 0)
{ this.patch++; }
this.prerelease = [];
break;
// This probably shouldn't be used publicly.
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
case 'pre':
if (this.prerelease.length === 0)
{ this.prerelease = [0]; }
else {
var i = this.prerelease.length;
while (--i >= 0) {
if (typeof this$1.prerelease[i] === 'number') {
this$1.prerelease[i]++;
i = -2;
}
}
if (i === -1) // didn't increment anything
{ this.prerelease.push(0); }
}
if (identifier) {
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
if (this.prerelease[0] === identifier) {
if (isNaN(this.prerelease[1]))
{ this.prerelease = [identifier, 0]; }
} else
{ this.prerelease = [identifier, 0]; }
}
break;
default:
throw new Error('invalid increment argument: ' + release);
}
this.format();
this.raw = this.version;
return this;
};
exports.inc = inc;
function inc(version, release, loose, identifier) {
if (typeof(loose) === 'string') {
identifier = loose;
loose = undefined;
}
try {
return new SemVer(version, loose).inc(release, identifier).version;
} catch (er) {
return null;
}
}
exports.diff = diff;
function diff(version1, version2) {
if (eq(version1, version2)) {
return null;
} else {
var v1 = parse(version1);
var v2 = parse(version2);
if (v1.prerelease.length || v2.prerelease.length) {
for (var key in v1) {
if (key === 'major' || key === 'minor' || key === 'patch') {
if (v1[key] !== v2[key]) {
return 'pre'+key;
}
}
}
return 'prerelease';
}
for (var key in v1) {
if (key === 'major' || key === 'minor' || key === 'patch') {
if (v1[key] !== v2[key]) {
return key;
}
}
}
}
}
exports.compareIdentifiers = compareIdentifiers;
var numeric = /^[0-9]+$/;
function compareIdentifiers(a, b) {
var anum = numeric.test(a);
var bnum = numeric.test(b);
if (anum && bnum) {
a = +a;
b = +b;
}
return (anum && !bnum) ? -1 :
(bnum && !anum) ? 1 :
a < b ? -1 :
a > b ? 1 :
0;
}
exports.rcompareIdentifiers = rcompareIdentifiers;
function rcompareIdentifiers(a, b) {
return compareIdentifiers(b, a);
}
exports.major = major;
function major(a, loose) {
return new SemVer(a, loose).major;
}
exports.minor = minor;
function minor(a, loose) {
return new SemVer(a, loose).minor;
}
exports.patch = patch;
function patch(a, loose) {
return new SemVer(a, loose).patch;
}
exports.compare = compare;
function compare(a, b, loose) {
return new SemVer(a, loose).compare(new SemVer(b, loose));
}
exports.compareLoose = compareLoose;
function compareLoose(a, b) {
return compare(a, b, true);
}
exports.rcompare = rcompare;
function rcompare(a, b, loose) {
return compare(b, a, loose);
}
exports.sort = sort;
function sort(list, loose) {
return list.sort(function(a, b) {
return exports.compare(a, b, loose);
});
}
exports.rsort = rsort;
function rsort(list, loose) {
return list.sort(function(a, b) {
return exports.rcompare(a, b, loose);
});
}
exports.gt = gt;
function gt(a, b, loose) {
return compare(a, b, loose) > 0;
}
exports.lt = lt;
function lt(a, b, loose) {
return compare(a, b, loose) < 0;
}
exports.eq = eq;
function eq(a, b, loose) {
return compare(a, b, loose) === 0;
}
exports.neq = neq;
function neq(a, b, loose) {
return compare(a, b, loose) !== 0;
}
exports.gte = gte;
function gte(a, b, loose) {
return compare(a, b, loose) >= 0;
}
exports.lte = lte;
function lte(a, b, loose) {
return compare(a, b, loose) <= 0;
}
exports.cmp = cmp;
function cmp(a, op, b, loose) {
var ret;
switch (op) {
case '===':
if (typeof a === 'object') { a = a.version; }
if (typeof b === 'object') { b = b.version; }
ret = a === b;
break;
case '!==':
if (typeof a === 'object') { a = a.version; }
if (typeof b === 'object') { b = b.version; }
ret = a !== b;
break;
case '': case '=': case '==': ret = eq(a, b, loose); break;
case '!=': ret = neq(a, b, loose); break;
case '>': ret = gt(a, b, loose); break;
case '>=': ret = gte(a, b, loose); break;
case '<': ret = lt(a, b, loose); break;
case '<=': ret = lte(a, b, loose); break;
default: throw new TypeError('Invalid operator: ' + op);
}
return ret;
}
exports.Comparator = Comparator;
function Comparator(comp, options) {
if (!options || typeof options !== 'object')
{ options = { loose: !!options, includePrerelease: false }; }
if (comp instanceof Comparator) {
if (comp.loose === !!options.loose)
{ return comp; }
else
{ comp = comp.value; }
}
if (!(this instanceof Comparator))
{ return new Comparator(comp, options); }
debug('comparator', comp, options);
this.options = options;
this.loose = !!options.loose;
this.parse(comp);
if (this.semver === ANY)
{ this.value = ''; }
else
{ this.value = this.operator + this.semver.version; }
debug('comp', this);
}
var ANY = {};
Comparator.prototype.parse = function(comp) {
var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
var m = comp.match(r);
if (!m)
{ throw new TypeError('Invalid comparator: ' + comp); }
this.operator = m[1];
if (this.operator === '=')
{ this.operator = ''; }
// if it literally is just '>' or '' then allow anything.
if (!m[2])
{ this.semver = ANY; }
else
{ this.semver = new SemVer(m[2], this.options.loose); }
};
Comparator.prototype.toString = function() {
return this.value;
};
Comparator.prototype.test = function(version) {
debug('Comparator.test', version, this.options.loose);
if (this.semver === ANY)
{ return true; }
if (typeof version === 'string')
{ version = new SemVer(version, this.options); }
return cmp(version, this.operator, this.semver, this.options);
};
Comparator.prototype.intersects = function(comp, options) {
if (!(comp instanceof Comparator)) {
throw new TypeError('a Comparator is required');
}
if (!options || typeof options !== 'object')
{ options = { loose: !!options, includePrerelease: false }; }
var rangeTmp;
if (this.operator === '') {
rangeTmp = new Range(comp.value, options);
return satisfies(this.value, rangeTmp, options);
} else if (comp.operator === '') {
rangeTmp = new Range(this.value, options);
return satisfies(comp.semver, rangeTmp, options);
}
var sameDirectionIncreasing =
(this.operator === '>=' || this.operator === '>') &&
(comp.operator === '>=' || comp.operator === '>');
var sameDirectionDecreasing =
(this.operator === '<=' || this.operator === '<') &&
(comp.operator === '<=' || comp.operator === '<');
var sameSemVer = this.semver.version === comp.semver.version;
var differentDirectionsInclusive =
(this.operator === '>=' || this.operator === '<=') &&
(comp.operator === '>=' || comp.operator === '<=');
var oppositeDirectionsLessThan =
cmp(this.semver, '<', comp.semver, options) &&
((this.operator === '>=' || this.operator === '>') &&
(comp.operator === '<=' || comp.operator === '<'));
var oppositeDirectionsGreaterThan =
cmp(this.semver, '>', comp.semver, options) &&
((this.operator === '<=' || this.operator === '<') &&
(comp.operator === '>=' || comp.operator === '>'));
return sameDirectionIncreasing || sameDirectionDecreasing ||
(sameSemVer && differentDirectionsInclusive) ||
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
};
exports.Range = Range;
function Range(range, options) {
if (!options || typeof options !== 'object')
{ options = { loose: !!options, includePrerelease: false }; }
if (range instanceof Range) {
if (range.loose === !!options.loose &&
range.includePrerelease === !!options.includePrerelease) {
return range;
} else {
return new Range(range.raw, options);
}
}
if (range instanceof Comparator) {
return new Range(range.value, options);
}
if (!(this instanceof Range))
{ return new Range(range, options); }
this.options = options;
this.loose = !!options.loose;
this.includePrerelease = !!options.includePrerelease;
// First, split based on boolean or ||
this.raw = range;
this.set = range.split(/\s*\|\|\s*/).map(function(range) {
return this.parseRange(range.trim());
}, this).filter(function(c) {
// throw out any that are not relevant for whatever reason
return c.length;
});
if (!this.set.length) {
throw new TypeError('Invalid SemVer Range: ' + range);
}
this.format();
}
Range.prototype.format = function() {
this.range = this.set.map(function(comps) {
return comps.join(' ').trim();
}).join('||').trim();
return this.range;
};
Range.prototype.toString = function() {
return this.range;
};
Range.prototype.parseRange = function(range) {
var loose = this.options.loose;
range = range.trim();
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE];
range = range.replace(hr, hyphenReplace);
debug('hyphen replace', range);
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);
debug('comparator trim', range, re[COMPARATORTRIM]);
// `~ 1.2.3` => `~1.2.3`
range = range.replace(re[TILDETRIM], tildeTrimReplace);
// `^ 1.2.3` => `^1.2.3`
range = range.replace(re[CARETTRIM], caretTrimReplace);
// normalize spaces
range = range.split(/\s+/).join(' ');
// At this point, the range is completely trimmed and
// ready to be split into comparators.
var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
var set = range.split(' ').map(function(comp) {
return parseComparator(comp, this.options);
}, this).join(' ').split(/\s+/);
if (this.options.loose) {
// in loose mode, throw out any that are not valid comparators
set = set.filter(function(comp) {
return !!comp.match(compRe);
});
}
set = set.map(function(comp) {
return new Comparator(comp, this.options);
}, this);
return set;
};
Range.prototype.intersects = function(range, options) {
if (!(range instanceof Range)) {
throw new TypeError('a Range is required');
}
return this.set.some(function(thisComparators) {
return thisComparators.every(function(thisComparator) {
return range.set.some(function(rangeComparators) {
return rangeComparators.every(function(rangeComparator) {
return thisComparator.intersects(rangeComparator, options);
});
});
});
});
};
// Mostly just for testing and legacy API reasons
exports.toComparators = toComparators;
function toComparators(range, options) {
return new Range(range, options).set.map(function(comp) {
return comp.map(function(c) {
return c.value;
}).join(' ').trim().split(' ');
});
}
// comprised of xranges, tildes, stars, and gtlt's at this point.
// already replaced the hyphen ranges
// turn into a set of JUST comparators.
function parseComparator(comp, options) {
debug('comp', comp, options);
comp = replaceCarets(comp, options);
debug('caret', comp);
comp = replaceTildes(comp, options);
debug('tildes', comp);
comp = replaceXRanges(comp, options);
debug('xrange', comp);
comp = replaceStars(comp, options);
debug('stars', comp);
return comp;
}
function isX(id) {
return !id || id.toLowerCase() === 'x' || id === '*';
}
// ~, ~> --> * (any, kinda silly)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
function replaceTildes(comp, options) {
return comp.trim().split(/\s+/).map(function(comp) {
return replaceTilde(comp, options);
}).join(' ');
}
function replaceTilde(comp, options) {
if (!options || typeof options !== 'object')
{ options = { loose: !!options, includePrerelease: false }; }
var r = options.loose ? re[TILDELOOSE] : re[TILDE];
return comp.replace(r, function(_, M, m, p, pr) {
debug('tilde', comp, _, M, m, p, pr);
var ret;
if (isX(M))
{ ret = ''; }
else if (isX(m))
{ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; }
else if (isX(p))
// ~1.2 == >=1.2.0 <1.3.0
{ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; }
else if (pr) {
debug('replaceTilde pr', pr);
if (pr.charAt(0) !== '-')
{ pr = '-' + pr; }
ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + (+m + 1) + '.0';
} else
// ~1.2.3 == >=1.2.3 <1.3.0
{ ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + (+m + 1) + '.0'; }
debug('tilde return', ret);
return ret;
});
}
// ^ --> * (any, kinda silly)
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
// ^1.2.3 --> >=1.2.3 <2.0.0
// ^1.2.0 --> >=1.2.0 <2.0.0
function replaceCarets(comp, options) {
return comp.trim().split(/\s+/).map(function(comp) {
return replaceCaret(comp, options);
}).join(' ');
}
function replaceCaret(comp, options) {
debug('caret', comp, options);
if (!options || typeof options !== 'object')
{ options = { loose: !!options, includePrerelease: false }; }
var r = options.loose ? re[CARETLOOSE] : re[CARET];
return comp.replace(r, function(_, M, m, p, pr) {
debug('caret', comp, _, M, m, p, pr);
var ret;
if (isX(M))
{ ret = ''; }
else if (isX(m))
{ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; }
else if (isX(p)) {
if (M === '0')
{ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; }
else
{ ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; }
} else if (pr) {
debug('replaceCaret pr', pr);
if (pr.charAt(0) !== '-')
{ pr = '-' + pr; }
if (M === '0') {
if (m === '0')
{ ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + m + '.' + (+p + 1); }
else
{ ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + (+m + 1) + '.0'; }
} else
{ ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + (+M + 1) + '.0.0'; }
} else {
debug('no pr');
if (M === '0') {
if (m === '0')
{ ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + m + '.' + (+p + 1); }
else
{ ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + (+m + 1) + '.0'; }
} else
{ ret = '>=' + M + '.' + m + '.' + p +
' <' + (+M + 1) + '.0.0'; }
}
debug('caret return', ret);
return ret;
});
}
function replaceXRanges(comp, options) {
debug('replaceXRanges', comp, options);
return comp.split(/\s+/).map(function(comp) {
return replaceXRange(comp, options);
}).join(' ');
}
function replaceXRange(comp, options) {
comp = comp.trim();
if (!options || typeof options !== 'object')
{ options = { loose: !!options, includePrerelease: false }; }
var r = options.loose ? re[XRANGELOOSE] : re[XRANGE];
return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
debug('xRange', comp, ret, gtlt, M, m, p, pr);
var xM = isX(M);
var xm = xM || isX(m);
var xp = xm || isX(p);
var anyX = xp;
if (gtlt === '=' && anyX)
{ gtlt = ''; }
if (xM) {
if (gtlt === '>' || gtlt === '<') {
// nothing is allowed
ret = '<0.0.0';
} else {
// nothing is forbidden
ret = '*';
}
} else if (gtlt && anyX) {
// replace X with 0
if (xm)
{ m = 0; }
if (xp)
{ p = 0; }
if (gtlt === '>') {
// >1 => >=2.0.0
// >1.2 => >=1.3.0
// >1.2.3 => >= 1.2.4
gtlt = '>=';
if (xm) {
M = +M + 1;
m = 0;
p = 0;
} else if (xp) {
m = +m + 1;
p = 0;
}
} else if (gtlt === '<=') {
// <=0.7.x is actually <0.8.0, since any 0.7.x should
// pass. Similarly, <=7.x is actually <8.0.0, etc.
gtlt = '<';
if (xm)
{ M = +M + 1; }
else
{ m = +m + 1; }
}
ret = gtlt + M + '.' + m + '.' + p;
} else if (xm) {
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
} else if (xp) {
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
}
debug('xRange return', ret);
return ret;
});
}
// Because * is AND-ed with everything else in the comparator,
// and '' means "any version", just remove the *s entirely.
function replaceStars(comp, options) {
debug('replaceStars', comp, options);
// Looseness is ignored here. star is always as loose as it gets!
return comp.trim().replace(re[STAR], '');
}
// This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
// 1.2 - 3.4 => >=1.2.0 <3.5.0
function hyphenReplace($0,
from, fM, fm, fp, fpr, fb,
to, tM, tm, tp, tpr, tb) {
if (isX(fM))
{ from = ''; }
else if (isX(fm))
{ from = '>=' + fM + '.0.0'; }
else if (isX(fp))
{ from = '>=' + fM + '.' + fm + '.0'; }
else
{ from = '>=' + from; }
if (isX(tM))
{ to = ''; }
else if (isX(tm))
{ to = '<' + (+tM + 1) + '.0.0'; }
else if (isX(tp))
{ to = '<' + tM + '.' + (+tm + 1) + '.0'; }
else if (tpr)
{ to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; }
else
{ to = '<=' + to; }
return (from + ' ' + to).trim();
}
// if ANY of the sets match ALL of its comparators, then pass
Range.prototype.test = function(version) {
var this$1 = this;
if (!version)
{ return false; }
if (typeof version === 'string')
{ version = new SemVer(version, this.options); }
for (var i = 0; i < this.set.length; i++) {
if (testSet(this$1.set[i], version, this$1.options))
{ return true; }
}
return false;
};
function testSet(set, version, options) {
for (var i = 0; i < set.length; i++) {
if (!set[i].test(version))
{ return false; }
}
if (!options)
{ options = {}; }
if (version.prerelease.length && !options.includePrerelease) {
// Find the set of versions that are allowed to have prereleases
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
// That should allow `1.2.3-pr.2` to pass.
// However, `1.2.4-alpha.notready` should NOT be allowed,
// even though it's within the range set by the comparators.
for (var i = 0; i < set.length; i++) {
debug(set[i].semver);
if (set[i].semver === ANY)
{ continue; }
if (set[i].semver.prerelease.length > 0) {
var allowed = set[i].semver;
if (allowed.major === version.major &&
allowed.minor === version.minor &&
allowed.patch === version.patch)
{ return true; }
}
}
// Version has a -pre, but it's not one of the ones we like.
return false;
}
return true;
}
exports.satisfies = satisfies;
function satisfies(version, range, options) {
try {
range = new Range(range, options);
} catch (er) {
return false;
}
return range.test(version);
}
exports.maxSatisfying = maxSatisfying;
function maxSatisfying(versions, range, options) {
var max = null;
var maxSV = null;
try {
var rangeObj = new Range(range, options);
} catch (er) {
return null;
}
versions.forEach(function (v) {
if (rangeObj.test(v)) { // satisfies(v, range, options)
if (!max || maxSV.compare(v) === -1) { // compare(max, v, true)
max = v;
maxSV = new SemVer(max, options);
}
}
});
return max;
}
exports.minSatisfying = minSatisfying;
function minSatisfying(versions, range, options) {
var min = null;
var minSV = null;
try {
var rangeObj = new Range(range, options);
} catch (er) {
return null;
}
versions.forEach(function (v) {
if (rangeObj.test(v)) { // satisfies(v, range, options)
if (!min || minSV.compare(v) === 1) { // compare(min, v, true)
min = v;
minSV = new SemVer(min, options);
}
}
});
return min;
}
exports.validRange = validRange;
function validRange(range, options) {
try {
// Return '*' instead of '' so that truthiness works.
// This will throw if it's invalid anyway
return new Range(range, options).range || '*';
} catch (er) {
return null;
}
}
// Determine if version is less than all the versions possible in the range
exports.ltr = ltr;
function ltr(version, range, options) {
return outside(version, range, '<', options);
}
// Determine if version is greater than all the versions possible in the range.
exports.gtr = gtr;
function gtr(version, range, options) {
return outside(version, range, '>', options);
}
exports.outside = outside;
function outside(version, range, hilo, options) {
version = new SemVer(version, options);
range = new Range(range, options);
var gtfn, ltefn, ltfn, comp, ecomp;
switch (hilo) {
case '>':
gtfn = gt;
ltefn = lte;
ltfn = lt;
comp = '>';
ecomp = '>=';
break;
case '<':
gtfn = lt;
ltefn = gte;
ltfn = gt;
comp = '<';
ecomp = '<=';
break;
default:
throw new TypeError('Must provide a hilo val of "<" or ">"');
}
// If it satisifes the range it is not outside
if (satisfies(version, range, options)) {
return false;
}
// From now on, variable terms are as if we're in "gtr" mode.
// but note that everything is flipped for the "ltr" function.
for (var i = 0; i < range.set.length; ++i) {
var comparators = range.set[i];
var high = null;
var low = null;
comparators.forEach(function(comparator) {
if (comparator.semver === ANY) {
comparator = new Comparator('>=0.0.0');
}
high = high || comparator;
low = low || comparator;
if (gtfn(comparator.semver, high.semver, options)) {
high = comparator;
} else if (ltfn(comparator.semver, low.semver, options)) {
low = comparator;
}
});
// If the edge version comparator has a operator then our version
// isn't outside it
if (high.operator === comp || high.operator === ecomp) {
return false;
}
// If the lowest version comparator has an operator and our version
// is less than it then it isn't higher than the range
if ((!low.operator || low.operator === comp) &&
ltefn(version, low.semver)) {
return false;
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
return false;
}
}
return true;
}
exports.prerelease = prerelease;
function prerelease(version, options) {
var parsed = parse(version, options);
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
}
exports.intersects = intersects;
function intersects(r1, r2, options) {
r1 = new Range(r1, options);
r2 = new Range(r2, options);
return r1.intersects(r2)
}
exports.coerce = coerce;
function coerce(version) {
if (version instanceof SemVer)
{ return version; }
if (typeof version !== 'string')
{ return null; }
var match = version.match(re[COERCE]);
if (match == null)
{ return null; }
return parse((match[1] || '0') + '.' + (match[2] || '0') + '.' + (match[3] || '0'));
}
});
var semver_1 = semver.SEMVER_SPEC_VERSION;
var semver_2 = semver.re;
var semver_3 = semver.src;
var semver_4 = semver.parse;
var semver_5 = semver.valid;
var semver_6 = semver.clean;
var semver_7 = semver.SemVer;
var semver_8 = semver.inc;
var semver_9 = semver.diff;
var semver_10 = semver.compareIdentifiers;
var semver_11 = semver.rcompareIdentifiers;
var semver_12 = semver.major;
var semver_13 = semver.minor;
var semver_14 = semver.patch;
var semver_15 = semver.compare;
var semver_16 = semver.compareLoose;
var semver_17 = semver.rcompare;
var semver_18 = semver.sort;
var semver_19 = semver.rsort;
var semver_20 = semver.gt;
var semver_21 = semver.lt;
var semver_22 = semver.eq;
var semver_23 = semver.neq;
var semver_24 = semver.gte;
var semver_25 = semver.lte;
var semver_26 = semver.cmp;
var semver_27 = semver.Comparator;
var semver_28 = semver.Range;
var semver_29 = semver.toComparators;
var semver_30 = semver.satisfies;
var semver_31 = semver.maxSatisfying;
var semver_32 = semver.minSatisfying;
var semver_33 = semver.validRange;
var semver_34 = semver.ltr;
var semver_35 = semver.gtr;
var semver_36 = semver.outside;
var semver_37 = semver.prerelease;
var semver_38 = semver.intersects;
var semver_39 = semver.coerce;
//
function throwError(msg) {
throw new Error(("[vue-test-utils]: " + msg))
}
function warn(msg) {
console.error(("[vue-test-utils]: " + msg));
}
var camelizeRE = /-(\w)/g;
var camelize = function (str) {
var camelizedStr = str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }
);
return camelizedStr.charAt(0).toLowerCase() + camelizedStr.slice(1)
};
/**
* Capitalize a string.
*/
var capitalize = function (str) { return str.charAt(0).toUpperCase() + str.slice(1); };
/**
* Hyphenate a camelCase string.
*/
var hyphenateRE = /\B([A-Z])/g;
var hyphenate = function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase(); };
function hasOwnProperty(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop)
}
function resolveComponent(id, components) {
if (typeof id !== 'string') {
return
}
// check local registration variations first
if (hasOwnProperty(components, id)) {
return components[id]
}
var camelizedId = camelize(id);
if (hasOwnProperty(components, camelizedId)) {
return components[camelizedId]
}
var PascalCaseId = capitalize(camelizedId);
if (hasOwnProperty(components, PascalCaseId)) {
return components[PascalCaseId]
}
// fallback to prototype chain
return components[id] || components[camelizedId] || components[PascalCaseId]
}
var UA =
typeof window !== 'undefined' &&
'navigator' in window &&
navigator.userAgent.toLowerCase();
var isPhantomJS = UA && UA.includes && UA.match(/phantomjs/i);
var isEdge = UA && UA.indexOf('edge/') > 0;
var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
// get the event used to trigger v-model handler that updates bound data
function getCheckedEvent() {
var version = Vue.version;
if (semver.satisfies(version, '2.1.9 - 2.1.10')) {
return 'click'
}
if (semver.satisfies(version, '2.2 - 2.4')) {
return isChrome ? 'click' : 'change'
}
// change is handler for version 2.0 - 2.1.8, and 2.5+
return 'change'
}
//
function isDomSelector(selector) {
if (typeof selector !== 'string') {
return false
}
try {
if (typeof document === 'undefined') {
throwError(
"mount must be run in a browser environment like " +
"PhantomJS, jsdom or chrome"
);
}
} catch (error) {
throwError(
"mount must be run in a browser environment like " +
"PhantomJS, jsdom or chrome"
);
}
try {
document.querySelector(selector);
return true
} catch (error) {
return false
}
}
function isVueComponent(c) {
if (isConstructor(c)) {
return true
}
if (c === null || typeof c !== 'object') {
return false
}
if (c.extends || c._Ctor) {
return true
}
if (typeof c.template === 'string') {
return true
}
return typeof c.render === 'function'
}
function componentNeedsCompiling(component) {
return (
component &&
!component.render &&
(component.template || component.extends || component.extendOptions) &&
!component.functional
)
}
function isRefSelector(refOptionsObject) {
if (
typeof refOptionsObject !== 'object' ||
Object.keys(refOptionsObject || {}).length !== 1
) {
return false
}
return typeof refOptionsObject.ref === 'string'
}
function isNameSelector(nameOptionsObject) {
if (typeof nameOptionsObject !== 'object' || nameOptionsObject === null) {
return false
}
return !!nameOptionsObject.name
}
function isConstructor(c) {
return typeof c === 'function' && c.cid
}
function isDynamicComponent(c) {
return typeof c === 'function' && !c.cid
}
function isComponentOptions(c) {
return typeof c === 'object' && (c.template || c.render)
}
function isFunctionalComponent(c) {
if (!isVueComponent(c)) {
return false
}
if (isConstructor(c)) {
return c.options.functional
}
return c.functional
}
function templateContainsComponent(
template,
name
) {
return [capitalize, camelize, hyphenate].some(function (format) {
var re = new RegExp(("<" + (format(name)) + "\\s*(\\s|>|(/>))"), 'g');
return re.test(template)
})
}
function isPlainObject(c) {
return Object.prototype.toString.call(c) === '[object Object]'
}
function makeMap(str, expectsLowerCase) {
var map = Object.create(null);
var list = str.split(',');
for (var i = 0; i < list.length; i++) {
map[list[i]] = true;
}
return expectsLowerCase
? function(val) {
return map[val.toLowerCase()]
}
: function(val) {
return map[val]
}
}
var isHTMLTag = makeMap(
'html,body,base,head,link,meta,style,title,' +
'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,' +
'embed,object,param,source,canvas,script,noscript,del,ins,' +
'caption,col,colgroup,table,thead,tbody,td,th,tr,video,' +
'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
'output,progress,select,textarea,' +
'details,dialog,menu,menuitem,summary,' +
'content,element,shadow,template,blockquote,iframe,tfoot'
);
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
var isSVG = makeMap(
'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
true
);
var isReservedTag = function (tag) { return isHTMLTag(tag) || isSVG(tag); };
var NAME_SELECTOR = 'NAME_SELECTOR';
var COMPONENT_SELECTOR = 'COMPONENT_SELECTOR';
var REF_SELECTOR = 'REF_SELECTOR';
var DOM_SELECTOR = 'DOM_SELECTOR';
var INVALID_SELECTOR = 'INVALID_SELECTOR';
var COMPAT_SYNC_MODE = 'COMPAT_SYNC_MODE';
var VUE_VERSION = Number(
((Vue.version.split('.')[0]) + "." + (Vue.version.split('.')[1]))
);
var FUNCTIONAL_OPTIONS =
VUE_VERSION >= 2.5 ? 'fnOptions' : 'functionalOptions';
var BEFORE_RENDER_LIFECYCLE_HOOK = semver.gt(Vue.version, '2.1.8')
? 'beforeCreate'
: 'beforeMount';
var CREATE_ELEMENT_ALIAS = semver.gt(Vue.version, '2.1.5')
? '_c'
: '_h';
//
function getSelectorType(selector) {
if (isDomSelector(selector)) { return DOM_SELECTOR }
if (isVueComponent(selector)) { return COMPONENT_SELECTOR }
if (isNameSelector(selector)) { return NAME_SELECTOR }
if (isRefSelector(selector)) { return REF_SELECTOR }
return INVALID_SELECTOR
}
function getSelector(
selector,
methodName
) {
var type = getSelectorType(selector);
if (type === INVALID_SELECTOR) {
throwError(
"wrapper." + methodName + "() must be passed a valid CSS selector, Vue " +
"constructor, or valid find option object"
);
}
return {
type: type,
value: selector
}
}
//
function getRealChild(vnode) {
var compOptions = vnode && vnode.componentOptions;
if (compOptions && compOptions.Ctor.options.abstract) {
return getRealChild(getFirstComponentChild(compOptions.children))
} else {
return vnode
}
}
function isSameChild(child, oldChild) {
return oldChild.key === child.key && oldChild.tag === child.tag
}
function getFirstComponentChild(children) {
if (Array.isArray(children)) {
for (var i = 0; i < children.length; i++) {
var c = children[i];
if (c && (c.componentOptions || isAsyncPlaceholder(c))) {
return c
}
}
}
}
function isPrimitive(value) {
return (
typeof value === 'string' ||
typeof value === 'number' ||
// $FlowIgnore
typeof value === 'symbol' ||
typeof value === 'boolean'
)
}
function isAsyncPlaceholder(node) {
return node.isComment && node.asyncFactory
}
function hasParentTransition(vnode) {
while ((vnode = vnode.parent)) {
if (vnode.data.transition) {
return true
}
}
}
var TransitionStub = {
render: function render(h) {
var children = this.$options._renderChildren;
if (!children) {
return
}
// filter out text nodes (possible whitespaces)
children = children.filter(function (c) { return c.tag || isAsyncPlaceholder(c); });
/* istanbul ignore if */
if (!children.length) {
return
}
// warn multiple elements
if (children.length > 1) {
warn(
"<transition> can only be used on a single element. " +
"Use " +
'<transition-group> for lists.'
);
}
var mode = this.mode;
// warn invalid mode
if (mode && mode !== 'in-out' && mode !== 'out-in') {
warn('invalid <transition> mode: ' + mode);
}
var rawChild = children[0];
// if this is a component root node and the component's
// parent container node also has transition, skip.
if (hasParentTransition(this.$vnode)) {
return rawChild
}
// apply transition data to child
// use getRealChild() to ignore abstract components e.g. keep-alive
var child = getRealChild(rawChild);
if (!child) {
return rawChild
}
var id = "__transition-" + (this._uid) + "-";
child.key =
child.key == null
? child.isComment
? id + 'comment'
: id + child.tag
: isPrimitive(child.key)
? String(child.key).indexOf(id) === 0
? child.key
: id + child.key
: child.key;
var data = child.data || (child.data = {});
var oldRawChild = this._vnode;
var oldChild = getRealChild(oldRawChild);
if (
child.data.directives &&
child.data.directives.some(function (d) { return d.name === 'show'; })
) {
child.data.show = true;
}
// mark v-show
// so that the transition module can hand over the control
// to the directive
if (
child.data.directives &&
child.data.directives.some(function (d) { return d.name === 'show'; })
) {
child.data.show = true;
}
if (
oldChild &&
oldChild.data &&
!isSameChild(child, oldChild) &&
!isAsyncPlaceholder(oldChild) &&
// #6687 component root is a comment node
!(
oldChild.componentInstance &&
oldChild.componentInstance._vnode.isComment
)
) {
oldChild.data = Object.assign({}, data);
}
return rawChild
}
}
//
var TransitionGroupStub = {
render: function render(h) {
var tag = this.tag || this.$vnode.data.tag || 'span';
var children = this.$slots.default || [];
return h(tag, null, children)
}
}
var config = {
stubs: {
transition: TransitionStub,
'transition-group': TransitionGroupStub
},
mocks: {},
methods: {},
provide: {},
logModifiedComponents: true,
silent: true
}
//
var WrapperArray = function WrapperArray(wrappers) {
var length = wrappers.length;
// $FlowIgnore
Object.defineProperty(this, 'wrappers', {
get: function () { return wrappers; },
set: function () { return throwError('wrapperArray.wrappers is read-only'); }
});
// $FlowIgnore
Object.defineProperty(this, 'length', {
get: function () { return length; },
set: function () { return throwError('wrapperArray.length is read-only'); }
});
};
WrapperArray.prototype.at = function at (index) {
if (index > this.length - 1) {
throwError(("no item exists at " + index));
}
return this.wrappers[index]
};
WrapperArray.prototype.attributes = function attributes () {
this.throwErrorIfWrappersIsEmpty('attributes');
throwError(
"attributes must be called on a single wrapper, use " +
"at(i) to access a wrapper"
);
};
WrapperArray.prototype.classes = function classes () {
this.throwErrorIfWrappersIsEmpty('classes');
throwError(
"classes must be called on a single wrapper, use " +
"at(i) to access a wrapper"
);
};
WrapperArray.prototype.contains = function contains (selector) {
this.throwErrorIfWrappersIsEmpty('contains');
return this.wrappers.every(function (wrapper) { return wrapper.contains(selector); })
};
WrapperArray.prototype.exists = function exists () {
return this.length > 0 && this.wrappers.every(function (wrapper) { return wrapper.exists(); })
};
WrapperArray.prototype.filter = function filter (predicate) {
return new WrapperArray(this.wrappers.filter(predicate))
};
WrapperArray.prototype.emitted = function emitted () {
this.throwErrorIfWrappersIsEmpty('emitted');
throwError(
"emitted must be called on a single wrapper, use " +
"at(i) to access a wrapper"
);
};
WrapperArray.prototype.emittedByOrder = function emittedByOrder () {
this.throwErrorIfWrappersIsEmpty('emittedByOrder');
throwError(
"emittedByOrder must be called on a single wrapper, " +
"use at(i) to access a wrapper"
);
};
WrapperArray.prototype.findAll = function findAll () {
this.throwErrorIfWrappersIsEmpty('findAll');
throwError(
"findAll must be called on a single wrapper, use " +
"at(i) to access a wrapper"
);
};
WrapperArray.prototype.find = function find () {
this.throwErrorIfWrappersIsEmpty('find');
throwError(
"find must be called on a single wrapper, use at(i) " +
"to access a wrapper"
);
};
WrapperArray.prototype.html = function html () {
this.throwErrorIfWrappersIsEmpty('html');
throwError(
"html must be called on a single wrapper, use at(i) " +
"to access a wrapper"
);
};
WrapperArray.prototype.is = function is (selector) {
this.throwErrorIfWrappersIsEmpty('is');
return this.wrappers.every(function (wrapper) { return wrapper.is(selector); })
};
WrapperArray.prototype.isEmpty = function isEmpty () {
this.throwErrorIfWrappersIsEmpty('isEmpty');
return this.wrappers.every(function (wrapper) { return wrapper.isEmpty(); })
};
WrapperArray.prototype.isVisible = function isVisible () {
this.throwErrorIfWrappersIsEmpty('isVisible');
return this.wrappers.every(function (wrapper) { return wrapper.isVisible(); })
};
WrapperArray.prototype.isVueInstance = function isVueInstance () {
this.throwErrorIfWrappersIsEmpty('isVueInstance');
return this.wrappers.every(function (wrapper) { return wrapper.isVueInstance(); })
};
WrapperArray.prototype.name = function name () {
this.throwErrorIfWrappersIsEmpty('name');
throwError(
"name must be called on a single wrapper, use at(i) " +
"to access a wrapper"
);
};
WrapperArray.prototype.props = function props () {
this.throwErrorIfWrappersIsEmpty('props');
throwError(
"props must be called on a single wrapper, use " +
"at(i) to access a wrapper"
);
};
WrapperArray.prototype.text = function text () {
this.throwErrorIfWrappersIsEmpty('text');
throwError(
"text must be called on a single wrapper, use at(i) " +
"to access a wrapper"
);
};
WrapperArray.prototype.throwErrorIfWrappersIsEmpty = function throwErrorIfWrappersIsEmpty (method) {
if (this.wrappers.length === 0) {
throwError((method + " cannot be called on 0 items"));
}
};
WrapperArray.prototype.setData = function setData (data) {
this.throwErrorIfWrappersIsEmpty('setData');
this.wrappers.forEach(function (wrapper) { return wrapper.setData(data); });
};
WrapperArray.prototype.setMethods = function setMethods (props) {
this.throwErrorIfWrappersIsEmpty('setMethods');
this.wrappers.forEach(function (wrapper) { return wrapper.setMethods(props); });
};
WrapperArray.prototype.setProps = function setProps (props) {
this.throwErrorIfWrappersIsEmpty('setProps');
this.wrappers.forEach(function (wrapper) { return wrapper.setProps(props); });
};
WrapperArray.prototype.setValue = function setValue (value) {
this.throwErrorIfWrappersIsEmpty('setValue');
this.wrappers.forEach(function (wrapper) { return wrapper.setValue(value); });
};
WrapperArray.prototype.setChecked = function setChecked (checked) {
if ( checked === void 0 ) checked = true;
this.throwErrorIfWrappersIsEmpty('setChecked');
this.wrappers.forEach(function (wrapper) { return wrapper.setChecked(checked); });
};
WrapperArray.prototype.setSelected = function setSelected () {
this.throwErrorIfWrappersIsEmpty('setSelected');
throwError(
"setSelected must be called on a single wrapper, " +
"use at(i) to access a wrapper"
);
};
WrapperArray.prototype.trigger = function trigger (event, options) {
this.throwErrorIfWrappersIsEmpty('trigger');
this.wrappers.forEach(function (wrapper) { return wrapper.trigger(event, options); });
};
WrapperArray.prototype.update = function update () {
this.throwErrorIfWrappersIsEmpty('update');
warn(
"update has been removed. All changes are now " +
"synchrnous without calling update"
);
};
WrapperArray.prototype.destroy = function destroy () {
this.throwErrorIfWrappersIsEmpty('destroy');
this.wrappers.forEach(function (wrapper) { return wrapper.destroy(); });
};
//
var ErrorWrapper = function ErrorWrapper(selector) {
this.selector = selector;
};
ErrorWrapper.prototype.at = function at () {
throwError(
("find did not return " + (this.selector) + ", cannot call at() on empty Wrapper")
);
};
ErrorWrapper.prototype.attributes = function attributes () {
throwError(
("find did not return " + (this.selector) + ", cannot call attributes() on empty Wrapper")
);
};
ErrorWrapper.prototype.classes = function classes () {
throwError(
("find did not return " + (this.selector) + ", cannot call classes() on empty Wrapper")
);
};
ErrorWrapper.prototype.contains = function contains () {
throwError(
("find did not return " + (this.selector) + ", cannot call contains() on empty Wrapper")
);
};
ErrorWrapper.prototype.emitted = function emitted () {
throwError(
("find did not return " + (this.selector) + ", cannot call emitted() on empty Wrapper")
);
};
ErrorWrapper.prototype.emittedByOrder = function emittedByOrder () {
throwError(
("find did not return " + (this.selector) + ", cannot call emittedByOrder() on empty Wrapper")
);
};
ErrorWrapper.prototype.exists = function exists () {
return false
};
ErrorWrapper.prototype.filter = function filter () {
throwError(
("find did not return " + (this.selector) + ", cannot call filter() on empty Wrapper")
);
};
ErrorWrapper.prototype.visible = function visible () {
throwError(
("find did not return " + (this.selector) + ", cannot call visible() on empty Wrapper")
);
};
ErrorWrapper.prototype.hasAttribute = function hasAttribute () {
throwError(
("find did not return " + (this.selector) + ", cannot call hasAttribute() on empty Wrapper")
);
};
ErrorWrapper.prototype.hasClass = function hasClass () {
throwError(
("find did not return " + (this.selector) + ", cannot call hasClass() on empty Wrapper")
);
};
ErrorWrapper.prototype.hasProp = function hasProp () {
throwError(
("find did not return " + (this.selector) + ", cannot call hasProp() on empty Wrapper")
);
};
ErrorWrapper.prototype.hasStyle = function hasStyle () {
throwError(
("find did not return " + (this.selector) + ", cannot call hasStyle() on empty Wrapper")
);
};
ErrorWrapper.prototype.findAll = function findAll () {
throwError(
("find did not return " + (this.selector) + ", cannot call findAll() on empty Wrapper")
);
};
ErrorWrapper.prototype.find = function find () {
throwError(
("find did not return " + (this.selector) + ", cannot call find() on empty Wrapper")
);
};
ErrorWrapper.prototype.html = function html () {
throwError(
("find did not return " + (this.selector) + ", cannot call html() on empty Wrapper")
);
};
ErrorWrapper.prototype.is = function is () {
throwError(
("find did not return " + (this.selector) + ", cannot call is() on empty Wrapper")
);
};
ErrorWrapper.prototype.isEmpty = function isEmpty () {
throwError(
("find did not return " + (this.selector) + ", cannot call isEmpty() on empty Wrapper")
);
};
ErrorWrapper.prototype.isVisible = function isVisible () {
throwError(
("find did not return " + (this.selector) + ", cannot call isVisible() on empty Wrapper")
);
};
ErrorWrapper.prototype.isVueInstance = function isVueInstance () {
throwError(
("find did not return " + (this.selector) + ", cannot call isVueInstance() on empty Wrapper")
);
};
ErrorWrapper.prototype.name = function name () {
throwError(
("find did not return " + (this.selector) + ", cannot call name() on empty Wrapper")
);
};
ErrorWrapper.prototype.props = function props () {
throwError(
("find did not return " + (this.selector) + ", cannot call props() on empty Wrapper")
);
};
ErrorWrapper.prototype.text = function text () {
throwError(
("find did not return " + (this.selector) + ", cannot call text() on empty Wrapper")
);
};
ErrorWrapper.prototype.setComputed = function setComputed () {
throwError(
("find did not return " + (this.selector) + ", cannot call setComputed() on empty Wrapper")
);
};
ErrorWrapper.prototype.setData = function setData () {
throwError(
("find did not return " + (this.selector) + ", cannot call setData() on empty Wrapper")
);
};
ErrorWrapper.prototype.setMethods = function setMethods () {
throwError(
("find did not return " + (this.selector) + ", cannot call setMethods() on empty Wrapper")
);
};
ErrorWrapper.prototype.setProps = function setProps () {
throwError(
("find did not return " + (this.selector) + ", cannot call setProps() on empty Wrapper")
);
};
ErrorWrapper.prototype.setValue = function setValue () {
throwError(
("find did not return " + (this.selector) + ", cannot call setValue() on empty Wrapper")
);
};
ErrorWrapper.prototype.setChecked = function setChecked () {
throwError(
("find did not return " + (this.selector) + ", cannot call setChecked() on empty Wrapper")
);
};
ErrorWrapper.prototype.setSelected = function setSelected () {
throwError(
("find did not return " + (this.selector) + ", cannot call setSelected() on empty Wrapper")
);
};
ErrorWrapper.prototype.trigger = function trigger () {
throwError(
("find did not return " + (this.selector) + ", cannot call trigger() on empty Wrapper")
);
};
ErrorWrapper.prototype.update = function update () {
throwError(
"update has been removed from vue-test-utils." +
"All updates are now synchronous by default"
);
};
ErrorWrapper.prototype.destroy = function destroy () {
throwError(
("find did not return " + (this.selector) + ", cannot call destroy() on empty Wrapper")
);
};
//
function findDOMNodes(
element,
selector
) {
var nodes = [];
if (!element || !element.querySelectorAll || !element.matches) {
return nodes
}
if (element.matches(selector)) {
nodes.push(element);
}
// $FlowIgnore
return nodes.concat([].slice.call(element.querySelectorAll(selector)))
}
function vmMatchesName(vm, name) {
return (
!!name && (vm.name === name || (vm.$options && vm.$options.name === name))
)
}
function vmCtorMatches(vm, component) {
if (
(vm.$options && vm.$options.$_vueTestUtils_original === component) ||
vm.$_vueTestUtils_original === component
) {
return true
}
var Ctor = isConstructor(component)
? component.options._Ctor
: component._Ctor;
if (!Ctor) {
return false
}
if (vm.constructor.extendOptions === component) {
return true
}
if (component.functional) {
return Object.keys(vm._Ctor || {}).some(function (c) {
return component === vm._Ctor[c].extendOptions
})
}
}
function matches(node, selector) {
if (selector.type === DOM_SELECTOR) {
var element = node instanceof Element ? node : node.elm;
return element && element.matches && element.matches(selector.value)
}
var isFunctionalSelector = isConstructor(selector.value)
? selector.value.options.functional
: selector.value.functional;
var componentInstance = isFunctionalSelector
? node[FUNCTIONAL_OPTIONS]
: node.child;
if (!componentInstance) {
return false
}
if (selector.type === COMPONENT_SELECTOR) {
if (vmCtorMatches(componentInstance, selector.value)) {
return true
}
}
// Fallback to name selector for COMPONENT_SELECTOR for Vue < 2.1
var nameSelector = isConstructor(selector.value)
? selector.value.extendOptions.name
: selector.value.name;
return vmMatchesName(componentInstance, nameSelector)
}
//
function findAllInstances(rootVm) {
var instances = [rootVm];
var i = 0;
while (i < instances.length) {
var vm = instances[i]
;(vm.$children || []).forEach(function (child) {
instances.push(child);
});
i++;
}
return instances
}
function findAllVNodes(vnode, selector) {
var matchingNodes = [];
var nodes = [vnode];
while (nodes.length) {
var node = nodes.shift();
if (node.children) {
var children = [].concat( node.children ).reverse();
children.forEach(function (n) {
nodes.unshift(n);
});
}
if (node.child) {
nodes.unshift(node.child._vnode);
}
if (matches(node, selector)) {
matchingNodes.push(node);
}
}
return matchingNodes
}
function removeDuplicateNodes(vNodes) {
var vNodeElms = vNodes.map(function (vNode) { return vNode.elm; });
return vNodes.filter(function (vNode, index) { return index === vNodeElms.indexOf(vNode.elm); })
}
function find(
root,
vm,
selector
) {
if (root instanceof Element && selector.type !== DOM_SELECTOR) {
throwError(
"cannot find a Vue instance on a DOM node. The node " +
"you are calling find on does not exist in the " +
"VDom. Are you adding the node as innerHTML?"
);
}
if (
selector.type === COMPONENT_SELECTOR &&
(selector.value.functional ||
(selector.value.options && selector.value.options.functional)) &&
VUE_VERSION < 2.3
) {
throwError(
"find for functional components is not supported " + "in Vue < 2.3"
);
}
if (root instanceof Element) {
return findDOMNodes(root, selector.value)
}
if (!root && selector.type !== DOM_SELECTOR) {
throwError(
"cannot find a Vue instance on a DOM node. The node " +
"you are calling find on does not exist in the " +
"VDom. Are you adding the node as innerHTML?"
);
}
if (!vm && selector.type === REF_SELECTOR) {
throwError("$ref selectors can only be used on Vue component " + "wrappers");
}
if (vm && vm.$refs && selector.value.ref in vm.$refs) {
var refs = vm.$refs[selector.value.ref];
return Array.isArray(refs) ? refs : [refs]
}
var nodes = findAllVNodes(root, selector);
var dedupedNodes = removeDuplicateNodes(nodes);
if (nodes.length > 0 || selector.type !== DOM_SELECTOR) {
return dedupedNodes
}
// Fallback in case element exists in HTML, but not in vnode tree
// (e.g. if innerHTML is set as a domProp)
return findDOMNodes(root.elm, selector.value)
}
//
function createWrapper(
node,
options
) {
if ( options === void 0 ) options = {};
var componentInstance = node.child;
if (componentInstance) {
return new VueWrapper(componentInstance, options)
}
return node instanceof Vue
? new VueWrapper(node, options)
: new Wrapper(node, options)
}
//
var i = 0;
function orderDeps(watcher) {
watcher.deps.forEach(function (dep) {
if (dep._sortedId === i) {
return
}
dep._sortedId = i;
dep.subs.forEach(orderDeps);
dep.subs = dep.subs.sort(function (a, b) { return a.id - b.id; });
});
}
function orderVmWatchers(vm) {
if (vm._watchers) {
vm._watchers.forEach(orderDeps);
}
if (vm._computedWatchers) {
Object.keys(vm._computedWatchers).forEach(function (computedWatcher) {
orderDeps(vm._computedWatchers[computedWatcher]);
});
}
vm._watcher && orderDeps(vm._watcher);
vm.$children.forEach(orderVmWatchers);
}
function orderWatchers(vm) {
orderVmWatchers(vm);
i++;
}
function recursivelySetData(vm, target, data) {
Object.keys(data).forEach(function (key) {
var val = data[key];
var targetVal = target[key];
if (isPlainObject(val) && isPlainObject(targetVal)) {
recursivelySetData(vm, targetVal, val);
} else {
vm.$set(target, key, val);
}
});
}
var abort = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var afterprint = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var animationend = {"eventInterface":"AnimationEvent","bubbles":true,"cancelable":false};
var animationiteration = {"eventInterface":"AnimationEvent","bubbles":true,"cancelable":false};
var animationstart = {"eventInterface":"AnimationEvent","bubbles":true,"cancelable":false};
var appinstalled = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var audioprocess = {"eventInterface":"AudioProcessingEvent"};
var audioend = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var audiostart = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var beforeprint = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var beforeunload = {"eventInterface":"BeforeUnloadEvent","bubbles":false,"cancelable":true};
var beginEvent = {"eventInterface":"TimeEvent","bubbles":false,"cancelable":false};
var blur = {"eventInterface":"FocusEvent","bubbles":false,"cancelable":false};
var boundary = {"eventInterface":"SpeechSynthesisEvent","bubbles":false,"cancelable":false};
var cached = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var canplay = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var canplaythrough = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var change = {"eventInterface":"Event","bubbles":true,"cancelable":false};
var chargingchange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var chargingtimechange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var checking = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var click = {"eventInterface":"MouseEvent","bubbles":true,"cancelable":true};
var close = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var complete = {"eventInterface":"OfflineAudioCompletionEvent"};
var compositionend = {"eventInterface":"CompositionEvent","bubbles":true,"cancelable":true};
var compositionstart = {"eventInterface":"CompositionEvent","bubbles":true,"cancelable":true};
var compositionupdate = {"eventInterface":"CompositionEvent","bubbles":true,"cancelable":false};
var contextmenu = {"eventInterface":"MouseEvent","bubbles":true,"cancelable":true};
var copy = {"eventInterface":"ClipboardEvent"};
var cut = {"eventInterface":"ClipboardEvent","bubbles":true,"cancelable":true};
var dblclick = {"eventInterface":"MouseEvent","bubbles":true,"cancelable":true};
var devicechange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var devicelight = {"eventInterface":"DeviceLightEvent","bubbles":false,"cancelable":false};
var devicemotion = {"eventInterface":"DeviceMotionEvent","bubbles":false,"cancelable":false};
var deviceorientation = {"eventInterface":"DeviceOrientationEvent","bubbles":false,"cancelable":false};
var deviceproximity = {"eventInterface":"DeviceProximityEvent","bubbles":false,"cancelable":false};
var dischargingtimechange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var DOMActivate = {"eventInterface":"UIEvent","bubbles":true,"cancelable":true};
var DOMAttributeNameChanged = {"eventInterface":"MutationNameEvent","bubbles":true,"cancelable":true};
var DOMAttrModified = {"eventInterface":"MutationEvent","bubbles":true,"cancelable":true};
var DOMCharacterDataModified = {"eventInterface":"MutationEvent","bubbles":true,"cancelable":true};
var DOMContentLoaded = {"eventInterface":"Event","bubbles":true,"cancelable":true};
var DOMElementNameChanged = {"eventInterface":"MutationNameEvent","bubbles":true,"cancelable":true};
var DOMFocusIn = {"eventInterface":"FocusEvent","bubbles":true,"cancelable":true};
var DOMFocusOut = {"eventInterface":"FocusEvent","bubbles":true,"cancelable":true};
var DOMNodeInserted = {"eventInterface":"MutationEvent","bubbles":true,"cancelable":true};
var DOMNodeInsertedIntoDocument = {"eventInterface":"MutationEvent","bubbles":true,"cancelable":true};
var DOMNodeRemoved = {"eventInterface":"MutationEvent","bubbles":true,"cancelable":true};
var DOMNodeRemovedFromDocument = {"eventInterface":"MutationEvent","bubbles":true,"cancelable":true};
var DOMSubtreeModified = {"eventInterface":"MutationEvent"};
var downloading = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var drag = {"eventInterface":"DragEvent","bubbles":true,"cancelable":true};
var dragend = {"eventInterface":"DragEvent","bubbles":true,"cancelable":false};
var dragenter = {"eventInterface":"DragEvent","bubbles":true,"cancelable":true};
var dragleave = {"eventInterface":"DragEvent","bubbles":true,"cancelable":false};
var dragover = {"eventInterface":"DragEvent","bubbles":true,"cancelable":true};
var dragstart = {"eventInterface":"DragEvent","bubbles":true,"cancelable":true};
var drop = {"eventInterface":"DragEvent","bubbles":true,"cancelable":true};
var durationchange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var emptied = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var end = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var ended = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var endEvent = {"eventInterface":"TimeEvent","bubbles":false,"cancelable":false};
var error = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var focus = {"eventInterface":"FocusEvent","bubbles":false,"cancelable":false};
var focusin = {"eventInterface":"FocusEvent","bubbles":true,"cancelable":false};
var focusout = {"eventInterface":"FocusEvent","bubbles":true,"cancelable":false};
var fullscreenchange = {"eventInterface":"Event","bubbles":true,"cancelable":false};
var fullscreenerror = {"eventInterface":"Event","bubbles":true,"cancelable":false};
var gamepadconnected = {"eventInterface":"GamepadEvent","bubbles":false,"cancelable":false};
var gamepaddisconnected = {"eventInterface":"GamepadEvent","bubbles":false,"cancelable":false};
var gotpointercapture = {"eventInterface":"PointerEvent","bubbles":false,"cancelable":false};
var hashchange = {"eventInterface":"HashChangeEvent","bubbles":true,"cancelable":false};
var lostpointercapture = {"eventInterface":"PointerEvent","bubbles":false,"cancelable":false};
var input = {"eventInterface":"Event","bubbles":true,"cancelable":false};
var invalid = {"eventInterface":"Event","cancelable":true,"bubbles":false};
var keydown = {"eventInterface":"KeyboardEvent","bubbles":true,"cancelable":true};
var keypress = {"eventInterface":"KeyboardEvent","bubbles":true,"cancelable":true};
var keyup = {"eventInterface":"KeyboardEvent","bubbles":true,"cancelable":true};
var languagechange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var levelchange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var load = {"eventInterface":"UIEvent","bubbles":false,"cancelable":false};
var loadeddata = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var loadedmetadata = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var loadend = {"eventInterface":"ProgressEvent","bubbles":false,"cancelable":false};
var loadstart = {"eventInterface":"ProgressEvent","bubbles":false,"cancelable":false};
var mark = {"eventInterface":"SpeechSynthesisEvent","bubbles":false,"cancelable":false};
var message = {"eventInterface":"MessageEvent","bubbles":false,"cancelable":false};
var messageerror = {"eventInterface":"MessageEvent","bubbles":false,"cancelable":false};
var mousedown = {"eventInterface":"MouseEvent","bubbles":true,"cancelable":true};
var mouseenter = {"eventInterface":"MouseEvent","bubbles":false,"cancelable":false};
var mouseleave = {"eventInterface":"MouseEvent","bubbles":false,"cancelable":false};
var mousemove = {"eventInterface":"MouseEvent","bubbles":true,"cancelable":true};
var mouseout = {"eventInterface":"MouseEvent","bubbles":true,"cancelable":true};
var mouseover = {"eventInterface":"MouseEvent","bubbles":true,"cancelable":true};
var mouseup = {"eventInterface":"MouseEvent","bubbles":true,"cancelable":true};
var nomatch = {"eventInterface":"SpeechRecognitionEvent","bubbles":false,"cancelable":false};
var notificationclick = {"eventInterface":"NotificationEvent","bubbles":false,"cancelable":false};
var noupdate = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var obsolete = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var offline = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var online = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var open = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var orientationchange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var pagehide = {"eventInterface":"PageTransitionEvent","bubbles":false,"cancelable":false};
var pageshow = {"eventInterface":"PageTransitionEvent","bubbles":false,"cancelable":false};
var paste = {"eventInterface":"ClipboardEvent","bubbles":true,"cancelable":true};
var pause = {"eventInterface":"SpeechSynthesisEvent","bubbles":false,"cancelable":false};
var pointercancel = {"eventInterface":"PointerEvent","bubbles":true,"cancelable":false};
var pointerdown = {"eventInterface":"PointerEvent","bubbles":true,"cancelable":true};
var pointerenter = {"eventInterface":"PointerEvent","bubbles":false,"cancelable":false};
var pointerleave = {"eventInterface":"PointerEvent","bubbles":false,"cancelable":false};
var pointerlockchange = {"eventInterface":"Event","bubbles":true,"cancelable":false};
var pointerlockerror = {"eventInterface":"Event","bubbles":true,"cancelable":false};
var pointermove = {"eventInterface":"PointerEvent","bubbles":true,"cancelable":true};
var pointerout = {"eventInterface":"PointerEvent","bubbles":true,"cancelable":true};
var pointerover = {"eventInterface":"PointerEvent","bubbles":true,"cancelable":true};
var pointerup = {"eventInterface":"PointerEvent","bubbles":true,"cancelable":true};
var play = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var playing = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var popstate = {"eventInterface":"PopStateEvent","bubbles":true,"cancelable":false};
var progress = {"eventInterface":"ProgressEvent","bubbles":false,"cancelable":false};
var push = {"eventInterface":"PushEvent","bubbles":false,"cancelable":false};
var pushsubscriptionchange = {"eventInterface":"PushEvent","bubbles":false,"cancelable":false};
var ratechange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var readystatechange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var repeatEvent = {"eventInterface":"TimeEvent","bubbles":false,"cancelable":false};
var reset = {"eventInterface":"Event","bubbles":true,"cancelable":true};
var resize = {"eventInterface":"UIEvent","bubbles":false,"cancelable":false};
var resourcetimingbufferfull = {"eventInterface":"Performance","bubbles":true,"cancelable":true};
var result = {"eventInterface":"SpeechRecognitionEvent","bubbles":false,"cancelable":false};
var resume = {"eventInterface":"SpeechSynthesisEvent","bubbles":false,"cancelable":false};
var scroll = {"eventInterface":"UIEvent","bubbles":false,"cancelable":false};
var seeked = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var seeking = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var select = {"eventInterface":"UIEvent","bubbles":true,"cancelable":false};
var selectstart = {"eventInterface":"Event","bubbles":true,"cancelable":true};
var selectionchange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var show = {"eventInterface":"MouseEvent","bubbles":false,"cancelable":false};
var slotchange = {"eventInterface":"Event","bubbles":true,"cancelable":false};
var soundend = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var soundstart = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var speechend = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var speechstart = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var stalled = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var start = {"eventInterface":"SpeechSynthesisEvent","bubbles":false,"cancelable":false};
var storage = {"eventInterface":"StorageEvent","bubbles":false,"cancelable":false};
var submit = {"eventInterface":"Event","bubbles":true,"cancelable":true};
var success = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var suspend = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var SVGAbort = {"eventInterface":"SVGEvent","bubbles":true,"cancelable":false};
var SVGError = {"eventInterface":"SVGEvent","bubbles":true,"cancelable":false};
var SVGLoad = {"eventInterface":"SVGEvent","bubbles":false,"cancelable":false};
var SVGResize = {"eventInterface":"SVGEvent","bubbles":true,"cancelable":false};
var SVGScroll = {"eventInterface":"SVGEvent","bubbles":true,"cancelable":false};
var SVGUnload = {"eventInterface":"SVGEvent","bubbles":false,"cancelable":false};
var SVGZoom = {"eventInterface":"SVGZoomEvent","bubbles":true,"cancelable":false};
var timeout = {"eventInterface":"ProgressEvent","bubbles":false,"cancelable":false};
var timeupdate = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var touchcancel = {"eventInterface":"TouchEvent","bubbles":true,"cancelable":false};
var touchend = {"eventInterface":"TouchEvent","bubbles":true,"cancelable":true};
var touchmove = {"eventInterface":"TouchEvent","bubbles":true,"cancelable":true};
var touchstart = {"eventInterface":"TouchEvent","bubbles":true,"cancelable":true};
var transitionend = {"eventInterface":"TransitionEvent","bubbles":true,"cancelable":true};
var unload = {"eventInterface":"UIEvent","bubbles":false};
var updateready = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var userproximity = {"eventInterface":"UserProximityEvent","bubbles":false,"cancelable":false};
var voiceschanged = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var visibilitychange = {"eventInterface":"Event","bubbles":true,"cancelable":false};
var volumechange = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var waiting = {"eventInterface":"Event","bubbles":false,"cancelable":false};
var wheel = {"eventInterface":"WheelEvent","bubbles":true,"cancelable":true};
var domEventTypes = {
abort: abort,
afterprint: afterprint,
animationend: animationend,
animationiteration: animationiteration,
animationstart: animationstart,
appinstalled: appinstalled,
audioprocess: audioprocess,
audioend: audioend,
audiostart: audiostart,
beforeprint: beforeprint,
beforeunload: beforeunload,
beginEvent: beginEvent,
blur: blur,
boundary: boundary,
cached: cached,
canplay: canplay,
canplaythrough: canplaythrough,
change: change,
chargingchange: chargingchange,
chargingtimechange: chargingtimechange,
checking: checking,
click: click,
close: close,
complete: complete,
compositionend: compositionend,
compositionstart: compositionstart,
compositionupdate: compositionupdate,
contextmenu: contextmenu,
copy: copy,
cut: cut,
dblclick: dblclick,
devicechange: devicechange,
devicelight: devicelight,
devicemotion: devicemotion,
deviceorientation: deviceorientation,
deviceproximity: deviceproximity,
dischargingtimechange: dischargingtimechange,
DOMActivate: DOMActivate,
DOMAttributeNameChanged: DOMAttributeNameChanged,
DOMAttrModified: DOMAttrModified,
DOMCharacterDataModified: DOMCharacterDataModified,
DOMContentLoaded: DOMContentLoaded,
DOMElementNameChanged: DOMElementNameChanged,
DOMFocusIn: DOMFocusIn,
DOMFocusOut: DOMFocusOut,
DOMNodeInserted: DOMNodeInserted,
DOMNodeInsertedIntoDocument: DOMNodeInsertedIntoDocument,
DOMNodeRemoved: DOMNodeRemoved,
DOMNodeRemovedFromDocument: DOMNodeRemovedFromDocument,
DOMSubtreeModified: DOMSubtreeModified,
downloading: downloading,
drag: drag,
dragend: dragend,
dragenter: dragenter,
dragleave: dragleave,
dragover: dragover,
dragstart: dragstart,
drop: drop,
durationchange: durationchange,
emptied: emptied,
end: end,
ended: ended,
endEvent: endEvent,
error: error,
focus: focus,
focusin: focusin,
focusout: focusout,
fullscreenchange: fullscreenchange,
fullscreenerror: fullscreenerror,
gamepadconnected: gamepadconnected,
gamepaddisconnected: gamepaddisconnected,
gotpointercapture: gotpointercapture,
hashchange: hashchange,
lostpointercapture: lostpointercapture,
input: input,
invalid: invalid,
keydown: keydown,
keypress: keypress,
keyup: keyup,
languagechange: languagechange,
levelchange: levelchange,
load: load,
loadeddata: loadeddata,
loadedmetadata: loadedmetadata,
loadend: loadend,
loadstart: loadstart,
mark: mark,
message: message,
messageerror: messageerror,
mousedown: mousedown,
mouseenter: mouseenter,
mouseleave: mouseleave,
mousemove: mousemove,
mouseout: mouseout,
mouseover: mouseover,
mouseup: mouseup,
nomatch: nomatch,
notificationclick: notificationclick,
noupdate: noupdate,
obsolete: obsolete,
offline: offline,
online: online,
open: open,
orientationchange: orientationchange,
pagehide: pagehide,
pageshow: pageshow,
paste: paste,
pause: pause,
pointercancel: pointercancel,
pointerdown: pointerdown,
pointerenter: pointerenter,
pointerleave: pointerleave,
pointerlockchange: pointerlockchange,
pointerlockerror: pointerlockerror,
pointermove: pointermove,
pointerout: pointerout,
pointerover: pointerover,
pointerup: pointerup,
play: play,
playing: playing,
popstate: popstate,
progress: progress,
push: push,
pushsubscriptionchange: pushsubscriptionchange,
ratechange: ratechange,
readystatechange: readystatechange,
repeatEvent: repeatEvent,
reset: reset,
resize: resize,
resourcetimingbufferfull: resourcetimingbufferfull,
result: result,
resume: resume,
scroll: scroll,
seeked: seeked,
seeking: seeking,
select: select,
selectstart: selectstart,
selectionchange: selectionchange,
show: show,
slotchange: slotchange,
soundend: soundend,
soundstart: soundstart,
speechend: speechend,
speechstart: speechstart,
stalled: stalled,
start: start,
storage: storage,
submit: submit,
success: success,
suspend: suspend,
SVGAbort: SVGAbort,
SVGError: SVGError,
SVGLoad: SVGLoad,
SVGResize: SVGResize,
SVGScroll: SVGScroll,
SVGUnload: SVGUnload,
SVGZoom: SVGZoom,
timeout: timeout,
timeupdate: timeupdate,
touchcancel: touchcancel,
touchend: touchend,
touchmove: touchmove,
touchstart: touchstart,
transitionend: transitionend,
unload: unload,
updateready: updateready,
userproximity: userproximity,
voiceschanged: voiceschanged,
visibilitychange: visibilitychange,
volumechange: volumechange,
waiting: waiting,
wheel: wheel
};
var domEventTypes$1 = Object.freeze({
abort: abort,
afterprint: afterprint,
animationend: animationend,
animationiteration: animationiteration,
animationstart: animationstart,
appinstalled: appinstalled,
audioprocess: audioprocess,
audioend: audioend,
audiostart: audiostart,
beforeprint: beforeprint,
beforeunload: beforeunload,
beginEvent: beginEvent,
blur: blur,
boundary: boundary,
cached: cached,
canplay: canplay,
canplaythrough: canplaythrough,
change: change,
chargingchange: chargingchange,
chargingtimechange: chargingtimechange,
checking: checking,
click: click,
close: close,
complete: complete,
compositionend: compositionend,
compositionstart: compositionstart,
compositionupdate: compositionupdate,
contextmenu: contextmenu,
copy: copy,
cut: cut,
dblclick: dblclick,
devicechange: devicechange,
devicelight: devicelight,
devicemotion: devicemotion,
deviceorientation: deviceorientation,
deviceproximity: deviceproximity,
dischargingtimechange: dischargingtimechange,
DOMActivate: DOMActivate,
DOMAttributeNameChanged: DOMAttributeNameChanged,
DOMAttrModified: DOMAttrModified,
DOMCharacterDataModified: DOMCharacterDataModified,
DOMContentLoaded: DOMContentLoaded,
DOMElementNameChanged: DOMElementNameChanged,
DOMFocusIn: DOMFocusIn,
DOMFocusOut: DOMFocusOut,
DOMNodeInserted: DOMNodeInserted,
DOMNodeInsertedIntoDocument: DOMNodeInsertedIntoDocument,
DOMNodeRemoved: DOMNodeRemoved,
DOMNodeRemovedFromDocument: DOMNodeRemovedFromDocument,
DOMSubtreeModified: DOMSubtreeModified,
downloading: downloading,
drag: drag,
dragend: dragend,
dragenter: dragenter,
dragleave: dragleave,
dragover: dragover,
dragstart: dragstart,
drop: drop,
durationchange: durationchange,
emptied: emptied,
end: end,
ended: ended,
endEvent: endEvent,
error: error,
focus: focus,
focusin: focusin,
focusout: focusout,
fullscreenchange: fullscreenchange,
fullscreenerror: fullscreenerror,
gamepadconnected: gamepadconnected,
gamepaddisconnected: gamepaddisconnected,
gotpointercapture: gotpointercapture,
hashchange: hashchange,
lostpointercapture: lostpointercapture,
input: input,
invalid: invalid,
keydown: keydown,
keypress: keypress,
keyup: keyup,
languagechange: languagechange,
levelchange: levelchange,
load: load,
loadeddata: loadeddata,
loadedmetadata: loadedmetadata,
loadend: loadend,
loadstart: loadstart,
mark: mark,
message: message,
messageerror: messageerror,
mousedown: mousedown,
mouseenter: mouseenter,
mouseleave: mouseleave,
mousemove: mousemove,
mouseout: mouseout,
mouseover: mouseover,
mouseup: mouseup,
nomatch: nomatch,
notificationclick: notificationclick,
noupdate: noupdate,
obsolete: obsolete,
offline: offline,
online: online,
open: open,
orientationchange: orientationchange,
pagehide: pagehide,
pageshow: pageshow,
paste: paste,
pause: pause,
pointercancel: pointercancel,
pointerdown: pointerdown,
pointerenter: pointerenter,
pointerleave: pointerleave,
pointerlockchange: pointerlockchange,
pointerlockerror: pointerlockerror,
pointermove: pointermove,
pointerout: pointerout,
pointerover: pointerover,
pointerup: pointerup,
play: play,
playing: playing,
popstate: popstate,
progress: progress,
push: push,
pushsubscriptionchange: pushsubscriptionchange,
ratechange: ratechange,
readystatechange: readystatechange,
repeatEvent: repeatEvent,
reset: reset,
resize: resize,
resourcetimingbufferfull: resourcetimingbufferfull,
result: result,
resume: resume,
scroll: scroll,
seeked: seeked,
seeking: seeking,
select: select,
selectstart: selectstart,
selectionchange: selectionchange,
show: show,
slotchange: slotchange,
soundend: soundend,
soundstart: soundstart,
speechend: speechend,
speechstart: speechstart,
stalled: stalled,
start: start,
storage: storage,
submit: submit,
success: success,
suspend: suspend,
SVGAbort: SVGAbort,
SVGError: SVGError,
SVGLoad: SVGLoad,
SVGResize: SVGResize,
SVGScroll: SVGScroll,
SVGUnload: SVGUnload,
SVGZoom: SVGZoom,
timeout: timeout,
timeupdate: timeupdate,
touchcancel: touchcancel,
touchend: touchend,
touchmove: touchmove,
touchstart: touchstart,
transitionend: transitionend,
unload: unload,
updateready: updateready,
userproximity: userproximity,
voiceschanged: voiceschanged,
visibilitychange: visibilitychange,
volumechange: volumechange,
waiting: waiting,
wheel: wheel,
default: domEventTypes
});
var require$$0 = ( domEventTypes$1 && domEventTypes ) || domEventTypes$1;
var domEventTypes$2 = require$$0;
var defaultEventType = {
eventInterface: 'Event',
cancelable: true,
bubbles: true
};
var modifiers = {
enter: 13,
tab: 9,
delete: 46,
esc: 27,
space: 32,
up: 38,
down: 40,
left: 37,
right: 39,
end: 35,
home: 36,
backspace: 8,
insert: 45,
pageup: 33,
pagedown: 34
};
function createEvent(
type,
modifier,
ref,
options
) {
var eventInterface = ref.eventInterface;
var bubbles = ref.bubbles;
var cancelable = ref.cancelable;
var SupportedEventInterface =
typeof window[eventInterface] === 'function'
? window[eventInterface]
: window.Event;
var event = new SupportedEventInterface(type, Object.assign({}, options,
{bubbles: bubbles,
cancelable: cancelable,
keyCode: modifiers[modifier]}));
return event
}
function createOldEvent(
type,
modifier,
ref
) {
var eventInterface = ref.eventInterface;
var bubbles = ref.bubbles;
var cancelable = ref.cancelable;
var event = document.createEvent('Event');
event.initEvent(type, bubbles, cancelable);
event.keyCode = modifiers[modifier];
return event
}
function createDOMEvent(type, options) {
var ref = type.split('.');
var eventType = ref[0];
var modifier = ref[1];
var meta = domEventTypes$2[eventType] || defaultEventType;
// Fallback for IE10,11 - https://stackoverflow.com/questions/26596123
var event =
typeof window.Event === 'function'
? createEvent(eventType, modifier, meta, options)
: createOldEvent(eventType, modifier, meta);
var eventPrototype = Object.getPrototypeOf(event);
Object.keys(options || {}).forEach(function (key) {
var propertyDescriptor = Object.getOwnPropertyDescriptor(
eventPrototype,
key
);
var canSetProperty = !(
propertyDescriptor && propertyDescriptor.setter === undefined
);
if (canSetProperty) {
event[key] = options[key];
}
});
return event
}
function errorHandler(errorOrString, vm) {
var error =
typeof errorOrString === 'object' ? errorOrString : new Error(errorOrString);
vm._error = error;
throw error
}
function throwIfInstancesThrew(vm) {
var instancesWithError = findAllInstances(vm).filter(function (_vm) { return _vm._error; });
if (instancesWithError.length > 0) {
throw instancesWithError[0]._error
}
}
var hasWarned = false;
// Vue swallows errors thrown by instances, even if the global error handler
// throws. In order to throw in the test, we add an _error property to an
// instance when it throws. Then we loop through the instances with
// throwIfInstancesThrew and throw an error in the test context if any
// instances threw.
function addGlobalErrorHandler(_Vue) {
var existingErrorHandler = _Vue.config.errorHandler;
if (existingErrorHandler === errorHandler) {
return
}
if (_Vue.config.errorHandler && !hasWarned) {
warn(
"Global error handler detected (Vue.config.errorHandler). \n" +
"Vue Test Utils sets a custom error handler to throw errors " +
"thrown by instances. If you want this behavior in " +
"your tests, you must remove the global error handler."
);
hasWarned = true;
} else {
_Vue.config.errorHandler = errorHandler;
}
}
//
var Wrapper = function Wrapper(
node,
options,
isVueWrapper
) {
var vnode = node instanceof Element ? null : node;
var element = node instanceof Element ? node : node.elm;
// Prevent redefine by VueWrapper
if (!isVueWrapper) {
// $FlowIgnore : issue with defineProperty
Object.defineProperty(this, 'rootNode', {
get: function () { return vnode || element; },
set: function () { return throwError('wrapper.rootNode is read-only'); }
});
// $FlowIgnore
Object.defineProperty(this, 'vnode', {
get: function () { return vnode; },
set: function () { return throwError('wrapper.vnode is read-only'); }
});
// $FlowIgnore
Object.defineProperty(this, 'element', {
get: function () { return element; },
set: function () { return throwError('wrapper.element is read-only'); }
});
// $FlowIgnore
Object.defineProperty(this, 'vm', {
get: function () { return undefined; },
set: function () { return throwError('wrapper.vm is read-only'); }
});
}
var frozenOptions = Object.freeze(options);
// $FlowIgnore
Object.defineProperty(this, 'options', {
get: function () { return frozenOptions; },
set: function () { return throwError('wrapper.options is read-only'); }
});
if (
this.vnode &&
(this.vnode[FUNCTIONAL_OPTIONS] || this.vnode.functionalContext)
) {
this.isFunctionalComponent = true;
}
};
Wrapper.prototype.at = function at () {
throwError('at() must be called on a WrapperArray');
};
/**
* Returns an Object containing all the attribute/value pairs on the element.
*/
Wrapper.prototype.attributes = function attributes (key) {
var attributes = this.element.attributes;
var attributeMap = {};
for (var i = 0; i < attributes.length; i++) {
var att = attributes.item(i);
attributeMap[att.localName] = att.value;
}
return key ? attributeMap[key] : attributeMap
};
/**
* Returns an Array containing all the classes on the element
*/
Wrapper.prototype.classes = function classes (className) {
var this$1 = this;
var classAttribute = this.element.getAttribute('class');
var classes = classAttribute ? classAttribute.split(' ') : [];
// Handle converting cssmodules identifiers back to the original class name
if (this.vm && this.vm.$style) {
var cssModuleIdentifiers = Object.keys(this.vm.$style).reduce(
function (acc, key) {
// $FlowIgnore
var moduleIdent = this$1.vm.$style[key];
if (moduleIdent) {
acc[moduleIdent.split(' ')[0]] = key;
}
return acc
},
{}
);
classes = classes.map(function (name) { return cssModuleIdentifiers[name] || name; });
}
return className ? !!(classes.indexOf(className) > -1) : classes
};
/**
* Checks if wrapper contains provided selector.
*/
Wrapper.prototype.contains = function contains (rawSelector) {
var selector = getSelector(rawSelector, 'contains');
var nodes = find(this.rootNode, this.vm, selector);
return nodes.length > 0
};
/**
* Calls destroy on vm
*/
Wrapper.prototype.destroy = function destroy () {
if (!this.isVueInstance()) {
throwError("wrapper.destroy() can only be called on a Vue instance");
}
if (this.element.parentNode) {
this.element.parentNode.removeChild(this.element);
}
// $FlowIgnore
this.vm.$destroy();
throwIfInstancesThrew(this.vm);
};
/**
* Returns an object containing custom events emitted by the Wrapper vm
*/
Wrapper.prototype.emitted = function emitted (
event
) {
if (!this._emitted && !this.vm) {
throwError("wrapper.emitted() can only be called on a Vue instance");
}
if (event) {
return this._emitted[event]
}
return this._emitted
};
/**
* Returns an Array containing custom events emitted by the Wrapper vm
*/
Wrapper.prototype.emittedByOrder = function emittedByOrder () {
if (!this._emittedByOrder && !this.vm) {
throwError(
"wrapper.emittedByOrder() can only be called on a Vue instance"
);
}
return this._emittedByOrder
};
/**
* Utility to check wrapper exists. Returns true as Wrapper always exists
*/
Wrapper.prototype.exists = function exists () {
if (this.vm) {
return !!this.vm && !this.vm._isDestroyed
}
return true
};
Wrapper.prototype.filter = function filter () {
throwError('filter() must be called on a WrapperArray');
};
/**
* Finds first node in tree of the current wrapper that
* matches the provided selector.
*/
Wrapper.prototype.find = function find$1 (rawSelector) {
var selector = getSelector(rawSelector, 'find');
var node = find(this.rootNode, this.vm, selector)[0];
if (!node) {
if (selector.type === REF_SELECTOR) {
return new ErrorWrapper(("ref=\"" + (selector.value.ref) + "\""))
}
return new ErrorWrapper(
typeof selector.value === 'string' ? selector.value : 'Component'
)
}
return createWrapper(node, this.options)
};
/**
* Finds node in tree of the current wrapper that matches
* the provided selector.
*/
Wrapper.prototype.findAll = function findAll (rawSelector) {
var this$1 = this;
var selector = getSelector(rawSelector, 'findAll');
var nodes = find(this.rootNode, this.vm, selector);
var wrappers = nodes.map(function (node) {
// Using CSS Selector, returns a VueWrapper instance if the root element
// binds a Vue instance.
return createWrapper(node, this$1.options)
});
return new WrapperArray(wrappers)
};
/**
* Returns HTML of element as a string
*/
Wrapper.prototype.html = function html () {
return this.element.outerHTML
};
/**
* Checks if node matches selector
*/
Wrapper.prototype.is = function is (rawSelector) {
var selector = getSelector(rawSelector, 'is');
if (selector.type === REF_SELECTOR) {
throwError('$ref selectors can not be used with wrapper.is()');
}
return matches(this.rootNode, selector)
};
/**
* Checks if node is empty
*/
Wrapper.prototype.isEmpty = function isEmpty () {
if (!this.vnode) {
return this.element.innerHTML === ''
}
var nodes = [];
var node = this.vnode;
var i = 0;
while (node) {
if (node.child) {
nodes.push(node.child._vnode);
}
node.children &&
node.children.forEach(function (n) {
nodes.push(n);
});
node = nodes[i++];
}
return nodes.every(function (n) { return n.isComment || n.child; })
};
/**
* Checks if node is visible
*/
Wrapper.prototype.isVisible = function isVisible () {
var element = this.element;
while (element) {
if (
element.style &&
(element.style.visibility === 'hidden' ||
element.style.display === 'none')
) {
return false
}
element = element.parentElement;
}
return true
};
/**
* Checks if wrapper is a vue instance
*/
Wrapper.prototype.isVueInstance = function isVueInstance () {
return !!this.vm
};
/**
* Returns name of component, or tag name if node is not a Vue component
*/
Wrapper.prototype.name = function name () {
if (this.vm) {
return (
this.vm.$options.name ||
// compat for Vue < 2.3
(this.vm.$options.extendOptions && this.vm.$options.extendOptions.name)
)
}
if (!this.vnode) {
return this.element.tagName
}
return this.vnode.tag
};
/**
* Returns an Object containing the prop name/value pairs on the element
*/
Wrapper.prototype.props = function props (key) {
var this$1 = this;
if (this.isFunctionalComponent) {
throwError(
"wrapper.props() cannot be called on a mounted functional component."
);
}
if (!this.vm) {
throwError('wrapper.props() must be called on a Vue instance');
}
var props = {};
var keys = this.vm && this.vm.$options._propKeys;
if (keys) {
(keys || {}).forEach(function (key) {
if (this$1.vm) {
props[key] = this$1.vm[key];
}
});
}
if (key) {
return props[key]
}
return props
};
/**
* Checks radio button or checkbox element
*/
Wrapper.prototype.setChecked = function setChecked (checked) {
if ( checked === void 0 ) checked = true;
if (typeof checked !== 'boolean') {
throwError('wrapper.setChecked() must be passed a boolean');
}
var tagName = this.element.tagName;
// $FlowIgnore
var type = this.attributes().type;
var event = getCheckedEvent();
if (tagName === 'INPUT' && type === 'checkbox') {
if (this.element.checked === checked) {
return
}
if (event !== 'click' || isPhantomJS) {
// $FlowIgnore
this.element.checked = checked;
}
this.trigger(event);
return
}
if (tagName === 'INPUT' && type === 'radio') {
if (!checked) {
throwError(
"wrapper.setChecked() cannot be called with parameter false on a " +
"<input type=\"radio\" /> element."
);
}
if (event !== 'click' || isPhantomJS) {
// $FlowIgnore
this.element.selected = true;
}
this.trigger(event);
return
}
throwError("wrapper.setChecked() cannot be called on this element");
};
/**
* Selects <option></option> element
*/
Wrapper.prototype.setSelected = function setSelected () {
var tagName = this.element.tagName;
if (tagName === 'SELECT') {
throwError(
"wrapper.setSelected() cannot be called on select. Call it on one of " +
"its options"
);
}
if (tagName === 'OPTION') {
// $FlowIgnore
this.element.selected = true;
// $FlowIgnore
var parentElement = this.element.parentElement;
// $FlowIgnore
if (parentElement.tagName === 'OPTGROUP') {
// $FlowIgnore
parentElement = parentElement.parentElement;
}
// $FlowIgnore
createWrapper(parentElement, this.options).trigger('change');
return
}
throwError("wrapper.setSelected() cannot be called on this element");
};
/**
* Sets vm data
*/
Wrapper.prototype.setData = function setData (data) {
if (this.isFunctionalComponent) {
throwError("wrapper.setData() cannot be called on a functional component");
}
if (!this.vm) {
throwError("wrapper.setData() can only be called on a Vue instance");
}
recursivelySetData(this.vm, this.vm, data);
};
/**
* Sets vm methods
*/
Wrapper.prototype.setMethods = function setMethods (methods) {
var this$1 = this;
if (!this.isVueInstance()) {
throwError("wrapper.setMethods() can only be called on a Vue instance");
}
Object.keys(methods).forEach(function (key) {
// $FlowIgnore : Problem with possibly null this.vm
this$1.vm[key] = methods[key];
// $FlowIgnore : Problem with possibly null this.vm
this$1.vm.$options.methods[key] = methods[key];
});
if (this.vnode) {
var context = this.vnode.context;
if (context.$options.render) { context._update(context._render()); }
}
};
/**
* Sets vm props
*/
Wrapper.prototype.setProps = function setProps (data) {
var this$1 = this;
var originalConfig = Vue.config.silent;
Vue.config.silent = config.silent;
if (this.isFunctionalComponent) {
throwError(
"wrapper.setProps() cannot be called on a functional component"
);
}
if (!this.vm) {
throwError("wrapper.setProps() can only be called on a Vue instance");
}
Object.keys(data).forEach(function (key) {
if (
typeof data[key] === 'object' &&
data[key] !== null &&
// $FlowIgnore : Problem with possibly null this.vm
data[key] === this$1.vm[key]
) {
throwError(
"wrapper.setProps() called with the same object of the existing " +
key + " property. You must call wrapper.setProps() with a new " +
"object to trigger reactivity"
);
}
if (
!this$1.vm ||
!this$1.vm.$options._propKeys ||
!this$1.vm.$options._propKeys.some(function (prop) { return prop === key; })
) {
if (VUE_VERSION > 2.3) {
// $FlowIgnore : Problem with possibly null this.vm
this$1.vm.$attrs[key] = data[key];
return
}
throwError(
"wrapper.setProps() called with " + key + " property which " +
"is not defined on the component"
);
}
if (this$1.vm && this$1.vm._props) {
// Set actual props value
this$1.vm._props[key] = data[key];
// $FlowIgnore : Problem with possibly null this.vm
this$1.vm[key] = data[key];
} else {
// $FlowIgnore : Problem with possibly null this.vm.$options
this$1.vm.$options.propsData[key] = data[key];
// $FlowIgnore : Problem with possibly null this.vm
this$1.vm[key] = data[key];
// $FlowIgnore : Need to call this twice to fix watcher bug in 2.0.x
this$1.vm[key] = data[key];
}
});
// $FlowIgnore : Problem with possibly null this.vm
this.vm.$forceUpdate();
if (this.options.sync === COMPAT_SYNC_MODE) {
// $FlowIgnore : Problem with possibly null this.vm
orderWatchers(this.vm || this.vnode.context.$root);
}
Vue.config.silent = originalConfig;
};
/**
* Sets element value and triggers input event
*/
Wrapper.prototype.setValue = function setValue (value) {
var tagName = this.element.tagName;
// $FlowIgnore
var type = this.attributes().type;
if (tagName === 'OPTION') {
throwError(
"wrapper.setValue() cannot be called on an <option> element. Use " +
"wrapper.setSelected() instead"
);
} else if (tagName === 'INPUT' && type === 'checkbox') {
throwError(
"wrapper.setValue() cannot be called on a <input type=\"checkbox\" /> " +
"element. Use wrapper.setChecked() instead"
);
} else if (tagName === 'INPUT' && type === 'radio') {
throwError(
"wrapper.setValue() cannot be called on a <input type=\"radio\" /> " +
"element. Use wrapper.setChecked() instead"
);
} else if (
tagName === 'INPUT' ||
tagName === 'TEXTAREA' ||
tagName === 'SELECT'
) {
var event = tagName === 'SELECT' ? 'change' : 'input';
// $FlowIgnore
this.element.value = value;
this.trigger(event);
} else {
throwError("wrapper.setValue() cannot be called on this element");
}
};
/**
* Return text of wrapper element
*/
Wrapper.prototype.text = function text () {
return this.element.textContent.trim()
};
/**
* Dispatches a DOM event on wrapper
*/
Wrapper.prototype.trigger = function trigger (type, options) {
if ( options === void 0 ) options = {};
if (typeof type !== 'string') {
throwError('wrapper.trigger() must be passed a string');
}
if (options.target) {
throwError(
"you cannot set the target value of an event. See the notes section " +
"of the docs for more details—" +
"https://vue-test-utils.vuejs.org/api/wrapper/trigger.html"
);
}
// Don't fire event on a disabled element
if (this.attributes().disabled) {
return
}
var event = createDOMEvent(type, options);
this.element.dispatchEvent(event);
if (this.vnode && this.options.sync === COMPAT_SYNC_MODE) {
orderWatchers(this.vm || this.vnode.context.$root);
}
};
Wrapper.prototype.update = function update () {
warn(
"update has been removed from vue-test-utils. All updates are now " +
"synchronous by default"
);
};
//
function setDepsSync(dep) {
dep.subs.forEach(setWatcherSync);
}
function setWatcherSync(watcher) {
if (watcher.sync === true) {
return
}
watcher.sync = true;
watcher.deps.forEach(setDepsSync);
}
function setWatchersToSync(vm) {
if (vm._watchers) {
vm._watchers.forEach(setWatcherSync);
}
if (vm._computedWatchers) {
Object.keys(vm._computedWatchers).forEach(function (computedWatcher) {
setWatcherSync(vm._computedWatchers[computedWatcher]);
});
}
setWatcherSync(vm._watcher);
vm.$children.forEach(setWatchersToSync);
// preventing double registration
if (!vm.$_vueTestUtils_updateInSetWatcherSync) {
vm.$_vueTestUtils_updateInSetWatcherSync = vm._update;
vm._update = function(vnode, hydrating) {
var this$1 = this;
this.$_vueTestUtils_updateInSetWatcherSync(vnode, hydrating);
if (VUE_VERSION >= 2.1 && this._isMounted && this.$options.updated) {
this.$options.updated.forEach(function (handler) {
handler.call(this$1);
});
}
};
}
}
//
var VueWrapper = (function (Wrapper$$1) {
function VueWrapper(vm, options) {
var this$1 = this;
Wrapper$$1.call(this, vm._vnode, options, true);
// $FlowIgnore : issue with defineProperty
Object.defineProperty(this, 'rootNode', {
get: function () { return vm.$vnode || { child: this$1.vm }; },
set: function () { return throwError('wrapper.vnode is read-only'); }
});
// $FlowIgnore : issue with defineProperty
Object.defineProperty(this, 'vnode', {
get: function () { return vm._vnode; },
set: function () { return throwError('wrapper.vnode is read-only'); }
});
// $FlowIgnore
Object.defineProperty(this, 'element', {
get: function () { return vm.$el; },
set: function () { return throwError('wrapper.element is read-only'); }
});
// $FlowIgnore
Object.defineProperty(this, 'vm', {
get: function () { return vm; },
set: function () { return throwError('wrapper.vm is read-only'); }
});
if (options.sync === COMPAT_SYNC_MODE) {
setWatchersToSync(vm);
orderWatchers(vm);
}
this.isFunctionalComponent = vm.$options._isFunctionalContainer;
this._emitted = vm.__emitted;
this._emittedByOrder = vm.__emittedByOrder;
}
if ( Wrapper$$1 ) VueWrapper.__proto__ = Wrapper$$1;
VueWrapper.prototype = Object.create( Wrapper$$1 && Wrapper$$1.prototype );
VueWrapper.prototype.constructor = VueWrapper;
return VueWrapper;
}(Wrapper));
//
function createVNodes(vm, slotValue, name) {
var el = vueTemplateCompiler.compileToFunctions(
("<div><template slot=" + name + ">" + slotValue + "</template></div>")
);
var _staticRenderFns = vm._renderProxy.$options.staticRenderFns;
var _staticTrees = vm._renderProxy._staticTrees;
vm._renderProxy._staticTrees = [];
vm._renderProxy.$options.staticRenderFns = el.staticRenderFns;
var vnode = el.render.call(vm._renderProxy, vm.$createElement);
vm._renderProxy.$options.staticRenderFns = _staticRenderFns;
vm._renderProxy._staticTrees = _staticTrees;
return vnode.children[0]
}
function createVNodesForSlot(
vm,
slotValue,
name
) {
if (typeof slotValue === 'string') {
return createVNodes(vm, slotValue, name)
}
var vnode = vm.$createElement(slotValue)
;(vnode.data || (vnode.data = {})).slot = name;
return vnode
}
function createSlotVNodes(
vm,
slots
) {
return Object.keys(slots).reduce(function (acc, key) {
var content = slots[key];
if (Array.isArray(content)) {
var nodes = content.map(function (slotDef) { return createVNodesForSlot(vm, slotDef, key); }
);
return acc.concat(nodes)
}
return acc.concat(createVNodesForSlot(vm, content, key))
}, [])
}
//
function addMocks(
_Vue,
mockedProperties
) {
if ( mockedProperties === void 0 ) mockedProperties = {};
if (mockedProperties === false) {
return
}
Object.keys(mockedProperties).forEach(function (key) {
try {
// $FlowIgnore
_Vue.prototype[key] = mockedProperties[key];
} catch (e) {
warn(
"could not overwrite property " + key + ", this is " +
"usually caused by a plugin that has added " +
"the property as a read-only value"
);
}
// $FlowIgnore
Vue.util.defineReactive(_Vue, key, mockedProperties[key]);
});
}
//
function logEvents(
vm,
emitted,
emittedByOrder
) {
var emit = vm.$emit;
vm.$emit = function (name) {
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
(emitted[name] || (emitted[name] = [])).push(args);
emittedByOrder.push({ name: name, args: args });
return emit.call.apply(emit, [ vm, name ].concat( args ))
};
}
function addEventLogger(_Vue) {
_Vue.mixin({
beforeCreate: function() {
this.__emitted = Object.create(null);
this.__emittedByOrder = [];
logEvents(this, this.__emitted, this.__emittedByOrder);
}
});
}
function addStubs(_Vue, stubComponents) {
var obj;
function addStubComponentsMixin() {
Object.assign(this.$options.components, stubComponents);
}
_Vue.mixin(( obj = {}, obj[BEFORE_RENDER_LIFECYCLE_HOOK] = addStubComponentsMixin, obj));
}
//
function compileFromString(str) {
if (!vueTemplateCompiler.compileToFunctions) {
throwError(
"vueTemplateCompiler is undefined, you must pass " +
"precompiled components if vue-template-compiler is " +
"undefined"
);
}
return vueTemplateCompiler.compileToFunctions(str)
}
function compileTemplate(component) {
if (component.template) {
Object.assign(component, vueTemplateCompiler.compileToFunctions(component.template));
}
if (component.components) {
Object.keys(component.components).forEach(function (c) {
var cmp = component.components[c];
if (!cmp.render) {
compileTemplate(cmp);
}
});
}
if (component.extends) {
compileTemplate(component.extends);
}
if (component.extendOptions && !component.options.render) {
compileTemplate(component.options);
}
}
function compileTemplateForSlots(slots) {
Object.keys(slots).forEach(function (key) {
var slot = Array.isArray(slots[key]) ? slots[key] : [slots[key]];
slot.forEach(function (slotValue) {
if (componentNeedsCompiling(slotValue)) {
compileTemplate(slotValue);
}
});
});
}
//
var MOUNTING_OPTIONS = [
'attachToDocument',
'mocks',
'slots',
'localVue',
'stubs',
'context',
'clone',
'attrs',
'listeners',
'propsData',
'sync',
'shouldProxy'
];
function extractInstanceOptions(options) {
var instanceOptions = Object.assign({}, options);
MOUNTING_OPTIONS.forEach(function (mountingOption) {
delete instanceOptions[mountingOption];
});
return instanceOptions
}
//
function isDestructuringSlotScope(slotScope) {
return slotScope[0] === '{' && slotScope[slotScope.length - 1] === '}'
}
function getVueTemplateCompilerHelpers(
_Vue
) {
// $FlowIgnore
var vue = new _Vue();
var helpers = {};
var names = [
'_c',
'_o',
'_n',
'_s',
'_l',
'_t',
'_q',
'_i',
'_m',
'_f',
'_k',
'_b',
'_v',
'_e',
'_u',
'_g'
];
names.forEach(function (name) {
helpers[name] = vue._renderProxy[name];
});
helpers.$createElement = vue._renderProxy.$createElement;
return helpers
}
function validateEnvironment() {
if (VUE_VERSION < 2.1) {
throwError("the scopedSlots option is only supported in vue@2.1+.");
}
}
var slotScopeRe = /<[^>]+ slot-scope=\"(.+)\"/;
// Hide warning about <template> disallowed as root element
function customWarn(msg) {
if (msg.indexOf('Cannot use <template> as component root element') === -1) {
console.error(msg);
}
}
function createScopedSlots(
scopedSlotsOption,
_Vue
) {
var scopedSlots = {};
if (!scopedSlotsOption) {
return scopedSlots
}
validateEnvironment();
var helpers = getVueTemplateCompilerHelpers(_Vue);
var loop = function ( scopedSlotName ) {
var slot = scopedSlotsOption[scopedSlotName];
var isFn = typeof slot === 'function';
// Type check to silence flow (can't use isFn)
var renderFn =
typeof slot === 'function'
? slot
: vueTemplateCompiler.compileToFunctions(slot, { warn: customWarn }).render;
var hasSlotScopeAttr = !isFn && slot.match(slotScopeRe);
var slotScope = hasSlotScopeAttr && hasSlotScopeAttr[1];
scopedSlots[scopedSlotName] = function(props) {
var obj;
var res;
if (isFn) {
res = renderFn.call(Object.assign({}, helpers), props);
} else if (slotScope && !isDestructuringSlotScope(slotScope)) {
res = renderFn.call(Object.assign({}, helpers, ( obj = {}, obj[slotScope] = props, obj)));
} else if (slotScope && isDestructuringSlotScope(slotScope)) {
res = renderFn.call(Object.assign({}, helpers, props));
} else {
res = renderFn.call(Object.assign({}, helpers, {props: props}));
}
// res is Array if <template> is a root element
return Array.isArray(res) ? res[0] : res
};
};
for (var scopedSlotName in scopedSlotsOption) loop( scopedSlotName );
return scopedSlots
}
//
function isVueComponentStub(comp) {
return (comp && comp.template) || isVueComponent(comp)
}
function isValidStub(stub) {
return (
typeof stub === 'boolean' ||
(!!stub && typeof stub === 'string') ||
isVueComponentStub(stub)
)
}
function resolveComponent$1(obj, component) {
return (
obj[component] ||
obj[hyphenate(component)] ||
obj[camelize(component)] ||
obj[capitalize(camelize(component))] ||
obj[capitalize(component)] ||
{}
)
}
function getCoreProperties(componentOptions) {
return {
attrs: componentOptions.attrs,
name: componentOptions.name,
props: componentOptions.props,
on: componentOptions.on,
key: componentOptions.key,
ref: componentOptions.ref,
domProps: componentOptions.domProps,
class: componentOptions.class,
staticClass: componentOptions.staticClass,
staticStyle: componentOptions.staticStyle,
style: componentOptions.style,
normalizedStyle: componentOptions.normalizedStyle,
nativeOn: componentOptions.nativeOn,
functional: componentOptions.functional
}
}
function createClassString(staticClass, dynamicClass) {
if (staticClass && dynamicClass) {
return staticClass + ' ' + dynamicClass
}
return staticClass || dynamicClass
}
function resolveOptions(component, _Vue) {
if (isDynamicComponent(component)) {
return {}
}
return isConstructor(component)
? component.options
: _Vue.extend(component).options
}
function createStubFromComponent(
originalComponent,
name,
_Vue
) {
var componentOptions = resolveOptions(originalComponent, _Vue);
var tagName = (name || 'anonymous') + "-stub";
// ignoreElements does not exist in Vue 2.0.x
if (Vue.config.ignoredElements) {
Vue.config.ignoredElements.push(tagName);
}
return Object.assign({}, getCoreProperties(componentOptions),
{$_vueTestUtils_original: originalComponent,
$_doNotStubChildren: true,
render: function render(h, context) {
return h(
tagName,
{
attrs: componentOptions.functional
? Object.assign({}, context.props,
context.data.attrs,
{class: createClassString(
context.data.staticClass,
context.data.class
)})
: Object.assign({}, this.$props)
},
context ? context.children : this.$options._renderChildren
)
}})
}
function createStubFromString(
templateString,
originalComponent,
name,
_Vue
) {
if ( originalComponent === void 0 ) originalComponent = {};
if (templateContainsComponent(templateString, name)) {
throwError('options.stub cannot contain a circular reference');
}
var componentOptions = resolveOptions(originalComponent, _Vue);
return Object.assign({}, getCoreProperties(componentOptions),
{$_doNotStubChildren: true},
compileFromString(templateString))
}
function validateStub(stub) {
if (!isValidStub(stub)) {
throwError("options.stub values must be passed a string or " + "component");
}
}
function createStubsFromStubsObject(
originalComponents,
stubs,
_Vue
) {
if ( originalComponents === void 0 ) originalComponents = {};
return Object.keys(stubs || {}).reduce(function (acc, stubName) {
var stub = stubs[stubName];
validateStub(stub);
if (stub === false) {
return acc
}
if (stub === true) {
var component = resolveComponent$1(originalComponents, stubName);
acc[stubName] = createStubFromComponent(component, stubName, _Vue);
return acc
}
if (typeof stub === 'string') {
var component$1 = resolveComponent$1(originalComponents, stubName);
acc[stubName] = createStubFromString(stub, component$1, stubName, _Vue);
return acc
}
if (componentNeedsCompiling(stub)) {
compileTemplate(stub);
}
acc[stubName] = stub;
return acc
}, {})
}
var isWhitelisted = function (el, whitelist) { return resolveComponent(el, whitelist); };
var isAlreadyStubbed = function (el, stubs) { return stubs.has(el); };
function shouldExtend(component, _Vue) {
return isConstructor(component) || (component && component.extends)
}
function extend(component, _Vue) {
var componentOptions = component.options ? component.options : component;
var stub = _Vue.extend(componentOptions);
stub.options.$_vueTestUtils_original = component;
stub.options._base = _Vue;
return stub
}
function createStubIfNeeded(shouldStub, component, _Vue, el) {
if (shouldStub) {
return createStubFromComponent(component || {}, el, _Vue)
}
if (shouldExtend(component, _Vue)) {
return extend(component, _Vue)
}
}
function shouldNotBeStubbed(el, whitelist, modifiedComponents) {
return (
(typeof el === 'string' && isReservedTag(el)) ||
isWhitelisted(el, whitelist) ||
isAlreadyStubbed(el, modifiedComponents)
)
}
function patchCreateElement(_Vue, stubs, stubAllComponents) {
var obj;
// This mixin patches vm.$createElement so that we can stub all components
// before they are rendered in shallow mode. We also need to ensure that
// component constructors were created from the _Vue constructor. If not,
// we must replace them with components created from the _Vue constructor
// before calling the original $createElement. This ensures that components
// have the correct instance properties and stubs when they are rendered.
function patchCreateElementMixin() {
var vm = this;
if (vm.$options.$_doNotStubChildren || vm.$options._isFunctionalContainer) {
return
}
var modifiedComponents = new Set();
var originalCreateElement = vm.$createElement;
var originalComponents = vm.$options.components;
var createElement = function (el) {
var obj;
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
if (shouldNotBeStubbed(el, stubs, modifiedComponents)) {
return originalCreateElement.apply(void 0, [ el ].concat( args ))
}
if (isConstructor(el) || isComponentOptions(el)) {
if (stubAllComponents) {
var stub = createStubFromComponent(el, el.name || 'anonymous', _Vue);
return originalCreateElement.apply(void 0, [ stub ].concat( args ))
}
var Constructor = shouldExtend(el, _Vue) ? extend(el, _Vue) : el;
return originalCreateElement.apply(void 0, [ Constructor ].concat( args ))
}
if (typeof el === 'string') {
var original = resolveComponent(el, originalComponents);
if (!original) {
return originalCreateElement.apply(void 0, [ el ].concat( args ))
}
if (isDynamicComponent(original)) {
return originalCreateElement.apply(void 0, [ el ].concat( args ))
}
var stub$1 = createStubIfNeeded(stubAllComponents, original, _Vue, el);
if (stub$1) {
Object.assign(vm.$options.components, ( obj = {}, obj[el] = stub$1, obj));
modifiedComponents.add(el);
}
}
return originalCreateElement.apply(void 0, [ el ].concat( args ))
};
vm[CREATE_ELEMENT_ALIAS] = createElement;
vm.$createElement = createElement;
}
_Vue.mixin(( obj = {}, obj[BEFORE_RENDER_LIFECYCLE_HOOK] = patchCreateElementMixin, obj));
}
//
function createContext(options, scopedSlots) {
var on = Object.assign({}, (options.context && options.context.on),
options.listeners);
return Object.assign({}, {attrs: Object.assign({}, options.attrs,
// pass as attrs so that inheritAttrs works correctly
// propsData should take precedence over attrs
options.propsData)},
(options.context || {}),
{on: on,
scopedSlots: scopedSlots})
}
function createChildren(vm, h, ref) {
var slots = ref.slots;
var context = ref.context;
var slotVNodes = slots ? createSlotVNodes(vm, slots) : undefined;
return (
(context &&
context.children &&
context.children.map(function (x) { return (typeof x === 'function' ? x(h) : x); })) ||
slotVNodes
)
}
function createInstance(
component,
options,
_Vue
) {
var componentOptions = isConstructor(component)
? component.options
: component;
// instance options are options that are passed to the
// root instance when it's instantiated
var instanceOptions = extractInstanceOptions(options);
var stubComponentsObject = createStubsFromStubsObject(
componentOptions.components,
// $FlowIgnore
options.stubs,
_Vue
);
addEventLogger(_Vue);
addMocks(_Vue, options.mocks);
addStubs(_Vue, stubComponentsObject);
patchCreateElement(_Vue, stubComponentsObject, options.shouldProxy);
if (componentNeedsCompiling(componentOptions)) {
compileTemplate(componentOptions);
}
// used to identify extended component using constructor
componentOptions.$_vueTestUtils_original = component;
// make sure all extends are based on this instance
var Constructor = _Vue.extend(componentOptions).extend(instanceOptions);
Constructor.options._base = _Vue;
var scopedSlots = createScopedSlots(options.scopedSlots, _Vue);
var parentComponentOptions = options.parentComponent || {};
parentComponentOptions.provide = options.provide;
parentComponentOptions.$_doNotStubChildren = true;
parentComponentOptions._isFunctionalContainer = componentOptions.functional;
parentComponentOptions.render = function(h) {
return h(
Constructor,
createContext(options, scopedSlots),
createChildren(this, h, options)
)
};
var Parent = _Vue.extend(parentComponentOptions);
return new Parent()
}
//
function createElement() {
if (document) {
var elem = document.createElement('div');
if (document.body) {
document.body.appendChild(elem);
}
return elem
}
}
function normalizeStubs(stubs) {
if ( stubs === void 0 ) stubs = {};
if (stubs === false) {
return false
}
if (isPlainObject(stubs)) {
return stubs
}
if (Array.isArray(stubs)) {
return stubs.reduce(function (acc, stub) {
if (typeof stub !== 'string') {
throwError('each item in an options.stubs array must be a string');
}
acc[stub] = true;
return acc
}, {})
}
throwError('options.stubs must be an object or an Array');
}
function normalizeProvide(provide) {
// Objects are not resolved in extended components in Vue < 2.5
// https://github.com/vuejs/vue/issues/6436
if (typeof provide === 'object' && VUE_VERSION < 2.5) {
var obj = Object.assign({}, provide);
return function () { return obj; }
}
return provide
}
//
function getOption(option, config) {
if (option === false) {
return false
}
if (option || (config && Object.keys(config).length > 0)) {
if (option instanceof Function) {
return option
}
if (config instanceof Function) {
throw new Error("Config can't be a Function.")
}
return Object.assign({}, config,
option)
}
}
function mergeOptions(options, config) {
var mocks = (getOption(options.mocks, config.mocks));
var methods = (getOption(options.methods, config.methods));
var provide = (getOption(options.provide, config.provide));
return Object.assign({}, options,
{provide: normalizeProvide(provide),
stubs: getOption(normalizeStubs(options.stubs), config.stubs),
mocks: mocks,
methods: methods,
sync: !!(options.sync || options.sync === undefined)})
}
//
function warnIfNoWindow() {
if (typeof window === 'undefined') {
throwError(
"window is undefined, vue-test-utils needs to be " +
"run in a browser environment. \n" +
"You can run the tests in node using jsdom \n" +
"See https://vue-test-utils.vuejs.org/guides/#browser-environment " +
"for more details."
);
}
}
/**
* Removes all key-value entries from the list cache.
*
* @private
* @name clear
* @memberOf ListCache
*/
function listCacheClear() {
this.__data__ = [];
this.size = 0;
}
var _listCacheClear = listCacheClear;
/**
* Performs a
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* comparison between two values to determine if they are equivalent.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
* @example
*
* var object = { 'a': 1 };
* var other = { 'a': 1 };
*
* _.eq(object, object);
* // => true
*
* _.eq(object, other);
* // => false
*
* _.eq('a', 'a');
* // => true
*
* _.eq('a', Object('a'));
* // => false
*
* _.eq(NaN, NaN);
* // => true
*/
function eq(value, other) {
return value === other || (value !== value && other !== other);
}
var eq_1 = eq;
/**
* Gets the index at which the `key` is found in `array` of key-value pairs.
*
* @private
* @param {Array} array The array to inspect.
* @param {*} key The key to search for.
* @returns {number} Returns the index of the matched value, else `-1`.
*/
function assocIndexOf(array, key) {
var length = array.length;
while (length--) {
if (eq_1(array[length][0], key)) {
return length;
}
}
return -1;
}
var _assocIndexOf = assocIndexOf;
/** Used for built-in method references. */
var arrayProto = Array.prototype;
/** Built-in value references. */
var splice = arrayProto.splice;
/**
* Removes `key` and its value from the list cache.
*
* @private
* @name delete
* @memberOf ListCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function listCacheDelete(key) {
var data = this.__data__,
index = _assocIndexOf(data, key);
if (index < 0) {
return false;
}
var lastIndex = data.length - 1;
if (index == lastIndex) {
data.pop();
} else {
splice.call(data, index, 1);
}
--this.size;
return true;
}
var _listCacheDelete = listCacheDelete;
/**
* Gets the list cache value for `key`.
*
* @private
* @name get
* @memberOf ListCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function listCacheGet(key) {
var data = this.__data__,
index = _assocIndexOf(data, key);
return index < 0 ? undefined : data[index][1];
}
var _listCacheGet = listCacheGet;
/**
* Checks if a list cache value for `key` exists.
*
* @private
* @name has
* @memberOf ListCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function listCacheHas(key) {
return _assocIndexOf(this.__data__, key) > -1;
}
var _listCacheHas = listCacheHas;
/**
* Sets the list cache `key` to `value`.
*
* @private
* @name set
* @memberOf ListCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the list cache instance.
*/
function listCacheSet(key, value) {
var data = this.__data__,
index = _assocIndexOf(data, key);
if (index < 0) {
++this.size;
data.push([key, value]);
} else {
data[index][1] = value;
}
return this;
}
var _listCacheSet = listCacheSet;
/**
* Creates an list cache object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function ListCache(entries) {
var this$1 = this;
var index = -1,
length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this$1.set(entry[0], entry[1]);
}
}
// Add methods to `ListCache`.
ListCache.prototype.clear = _listCacheClear;
ListCache.prototype['delete'] = _listCacheDelete;
ListCache.prototype.get = _listCacheGet;
ListCache.prototype.has = _listCacheHas;
ListCache.prototype.set = _listCacheSet;
var _ListCache = ListCache;
/**
* Removes all key-value entries from the stack.
*
* @private
* @name clear
* @memberOf Stack
*/
function stackClear() {
this.__data__ = new _ListCache;
this.size = 0;
}
var _stackClear = stackClear;
/**
* Removes `key` and its value from the stack.
*
* @private
* @name delete
* @memberOf Stack
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function stackDelete(key) {
var data = this.__data__,
result = data['delete'](key);
this.size = data.size;
return result;
}
var _stackDelete = stackDelete;
/**
* Gets the stack value for `key`.
*
* @private
* @name get
* @memberOf Stack
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function stackGet(key) {
return this.__data__.get(key);
}
var _stackGet = stackGet;
/**
* Checks if a stack value for `key` exists.
*
* @private
* @name has
* @memberOf Stack
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function stackHas(key) {
return this.__data__.has(key);
}
var _stackHas = stackHas;
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
var _freeGlobal = freeGlobal;
/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
/** Used as a reference to the global object. */
var root = _freeGlobal || freeSelf || Function('return this')();
var _root = root;
/** Built-in value references. */
var Symbol = _root.Symbol;
var _Symbol = Symbol;
/** Used for built-in method references. */
var objectProto = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$1 = objectProto.hasOwnProperty;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var nativeObjectToString = objectProto.toString;
/** Built-in value references. */
var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;
/**
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the raw `toStringTag`.
*/
function getRawTag(value) {
var isOwn = hasOwnProperty$1.call(value, symToStringTag),
tag = value[symToStringTag];
try {
value[symToStringTag] = undefined;
var unmasked = true;
} catch (e) {}
var result = nativeObjectToString.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag] = tag;
} else {
delete value[symToStringTag];
}
}
return result;
}
var _getRawTag = getRawTag;
/** Used for built-in method references. */
var objectProto$1 = Object.prototype;
/**
* Used to resolve the
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
* of values.
*/
var nativeObjectToString$1 = objectProto$1.toString;
/**
* Converts `value` to a string using `Object.prototype.toString`.
*
* @private
* @param {*} value The value to convert.
* @returns {string} Returns the converted string.
*/
function objectToString(value) {
return nativeObjectToString$1.call(value);
}
var _objectToString = objectToString;
/** `Object#toString` result references. */
var nullTag = '[object Null]',
undefinedTag = '[object Undefined]';
/** Built-in value references. */
var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined;
/**
* The base implementation of `getTag` without fallbacks for buggy environments.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the `toStringTag`.
*/
function baseGetTag(value) {
if (value == null) {
return value === undefined ? undefinedTag : nullTag;
}
return (symToStringTag$1 && symToStringTag$1 in Object(value))
? _getRawTag(value)
: _objectToString(value);
}
var _baseGetTag = baseGetTag;
/**
* Checks if `value` is the
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
* @example
*
* _.isObject({});
* // => true
*
* _.isObject([1, 2, 3]);
* // => true
*
* _.isObject(_.noop);
* // => true
*
* _.isObject(null);
* // => false
*/
function isObject(value) {
var type = typeof value;
return value != null && (type == 'object' || type == 'function');
}
var isObject_1 = isObject;
/** `Object#toString` result references. */
var asyncTag = '[object AsyncFunction]',
funcTag = '[object Function]',
genTag = '[object GeneratorFunction]',
proxyTag = '[object Proxy]';
/**
* Checks if `value` is classified as a `Function` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
* @example
*
* _.isFunction(_);
* // => true
*
* _.isFunction(/abc/);
* // => false
*/
function isFunction(value) {
if (!isObject_1(value)) {
return false;
}
// The use of `Object#toString` avoids issues with the `typeof` operator
// in Safari 9 which returns 'object' for typed arrays and other constructors.
var tag = _baseGetTag(value);
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}
var isFunction_1 = isFunction;
/** Used to detect overreaching core-js shims. */
var coreJsData = _root['__core-js_shared__'];
var _coreJsData = coreJsData;
/** Used to detect methods masquerading as native. */
var maskSrcKey = (function() {
var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || '');
return uid ? ('Symbol(src)_1.' + uid) : '';
}());
/**
* Checks if `func` has its source masked.
*
* @private
* @param {Function} func The function to check.
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
*/
function isMasked(func) {
return !!maskSrcKey && (maskSrcKey in func);
}
var _isMasked = isMasked;
/** Used for built-in method references. */
var funcProto = Function.prototype;
/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;
/**
* Converts `func` to its source code.
*
* @private
* @param {Function} func The function to convert.
* @returns {string} Returns the source code.
*/
function toSource(func) {
if (func != null) {
try {
return funcToString.call(func);
} catch (e) {}
try {
return (func + '');
} catch (e) {}
}
return '';
}
var _toSource = toSource;
/**
* Used to match `RegExp`
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
*/
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;
/** Used for built-in method references. */
var funcProto$1 = Function.prototype,
objectProto$2 = Object.prototype;
/** Used to resolve the decompiled source of functions. */
var funcToString$1 = funcProto$1.toString;
/** Used to check objects for own properties. */
var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
funcToString$1.call(hasOwnProperty$2).replace(reRegExpChar, '\\$&')
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);
/**
* The base implementation of `_.isNative` without bad shim checks.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a native function,
* else `false`.
*/
function baseIsNative(value) {
if (!isObject_1(value) || _isMasked(value)) {
return false;
}
var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor;
return pattern.test(_toSource(value));
}
var _baseIsNative = baseIsNative;
/**
* Gets the value at `key` of `object`.
*
* @private
* @param {Object} [object] The object to query.
* @param {string} key The key of the property to get.
* @returns {*} Returns the property value.
*/
function getValue(object, key) {
return object == null ? undefined : object[key];
}
var _getValue = getValue;
/**
* Gets the native function at `key` of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {string} key The key of the method to get.
* @returns {*} Returns the function if it's native, else `undefined`.
*/
function getNative(object, key) {
var value = _getValue(object, key);
return _baseIsNative(value) ? value : undefined;
}
var _getNative = getNative;
/* Built-in method references that are verified to be native. */
var Map = _getNative(_root, 'Map');
var _Map = Map;
/* Built-in method references that are verified to be native. */
var nativeCreate = _getNative(Object, 'create');
var _nativeCreate = nativeCreate;
/**
* Removes all key-value entries from the hash.
*
* @private
* @name clear
* @memberOf Hash
*/
function hashClear() {
this.__data__ = _nativeCreate ? _nativeCreate(null) : {};
this.size = 0;
}
var _hashClear = hashClear;
/**
* Removes `key` and its value from the hash.
*
* @private
* @name delete
* @memberOf Hash
* @param {Object} hash The hash to modify.
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function hashDelete(key) {
var result = this.has(key) && delete this.__data__[key];
this.size -= result ? 1 : 0;
return result;
}
var _hashDelete = hashDelete;
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';
/** Used for built-in method references. */
var objectProto$3 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$3 = objectProto$3.hasOwnProperty;
/**
* Gets the hash value for `key`.
*
* @private
* @name get
* @memberOf Hash
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function hashGet(key) {
var data = this.__data__;
if (_nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED ? undefined : result;
}
return hasOwnProperty$3.call(data, key) ? data[key] : undefined;
}
var _hashGet = hashGet;
/** Used for built-in method references. */
var objectProto$4 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$4 = objectProto$4.hasOwnProperty;
/**
* Checks if a hash value for `key` exists.
*
* @private
* @name has
* @memberOf Hash
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function hashHas(key) {
var data = this.__data__;
return _nativeCreate ? (data[key] !== undefined) : hasOwnProperty$4.call(data, key);
}
var _hashHas = hashHas;
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED$1 = '__lodash_hash_undefined__';
/**
* Sets the hash `key` to `value`.
*
* @private
* @name set
* @memberOf Hash
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the hash instance.
*/
function hashSet(key, value) {
var data = this.__data__;
this.size += this.has(key) ? 0 : 1;
data[key] = (_nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value;
return this;
}
var _hashSet = hashSet;
/**
* Creates a hash object.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Hash(entries) {
var this$1 = this;
var index = -1,
length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this$1.set(entry[0], entry[1]);
}
}
// Add methods to `Hash`.
Hash.prototype.clear = _hashClear;
Hash.prototype['delete'] = _hashDelete;
Hash.prototype.get = _hashGet;
Hash.prototype.has = _hashHas;
Hash.prototype.set = _hashSet;
var _Hash = Hash;
/**
* Removes all key-value entries from the map.
*
* @private
* @name clear
* @memberOf MapCache
*/
function mapCacheClear() {
this.size = 0;
this.__data__ = {
'hash': new _Hash,
'map': new (_Map || _ListCache),
'string': new _Hash
};
}
var _mapCacheClear = mapCacheClear;
/**
* Checks if `value` is suitable for use as unique object key.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
*/
function isKeyable(value) {
var type = typeof value;
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
? (value !== '__proto__')
: (value === null);
}
var _isKeyable = isKeyable;
/**
* Gets the data for `map`.
*
* @private
* @param {Object} map The map to query.
* @param {string} key The reference key.
* @returns {*} Returns the map data.
*/
function getMapData(map, key) {
var data = map.__data__;
return _isKeyable(key)
? data[typeof key == 'string' ? 'string' : 'hash']
: data.map;
}
var _getMapData = getMapData;
/**
* Removes `key` and its value from the map.
*
* @private
* @name delete
* @memberOf MapCache
* @param {string} key The key of the value to remove.
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
*/
function mapCacheDelete(key) {
var result = _getMapData(this, key)['delete'](key);
this.size -= result ? 1 : 0;
return result;
}
var _mapCacheDelete = mapCacheDelete;
/**
* Gets the map value for `key`.
*
* @private
* @name get
* @memberOf MapCache
* @param {string} key The key of the value to get.
* @returns {*} Returns the entry value.
*/
function mapCacheGet(key) {
return _getMapData(this, key).get(key);
}
var _mapCacheGet = mapCacheGet;
/**
* Checks if a map value for `key` exists.
*
* @private
* @name has
* @memberOf MapCache
* @param {string} key The key of the entry to check.
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
*/
function mapCacheHas(key) {
return _getMapData(this, key).has(key);
}
var _mapCacheHas = mapCacheHas;
/**
* Sets the map `key` to `value`.
*
* @private
* @name set
* @memberOf MapCache
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the map cache instance.
*/
function mapCacheSet(key, value) {
var data = _getMapData(this, key),
size = data.size;
data.set(key, value);
this.size += data.size == size ? 0 : 1;
return this;
}
var _mapCacheSet = mapCacheSet;
/**
* Creates a map cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function MapCache(entries) {
var this$1 = this;
var index = -1,
length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this$1.set(entry[0], entry[1]);
}
}
// Add methods to `MapCache`.
MapCache.prototype.clear = _mapCacheClear;
MapCache.prototype['delete'] = _mapCacheDelete;
MapCache.prototype.get = _mapCacheGet;
MapCache.prototype.has = _mapCacheHas;
MapCache.prototype.set = _mapCacheSet;
var _MapCache = MapCache;
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;
/**
* Sets the stack `key` to `value`.
*
* @private
* @name set
* @memberOf Stack
* @param {string} key The key of the value to set.
* @param {*} value The value to set.
* @returns {Object} Returns the stack cache instance.
*/
function stackSet(key, value) {
var data = this.__data__;
if (data instanceof _ListCache) {
var pairs = data.__data__;
if (!_Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
pairs.push([key, value]);
this.size = ++data.size;
return this;
}
data = this.__data__ = new _MapCache(pairs);
}
data.set(key, value);
this.size = data.size;
return this;
}
var _stackSet = stackSet;
/**
* Creates a stack cache object to store key-value pairs.
*
* @private
* @constructor
* @param {Array} [entries] The key-value pairs to cache.
*/
function Stack(entries) {
var data = this.__data__ = new _ListCache(entries);
this.size = data.size;
}
// Add methods to `Stack`.
Stack.prototype.clear = _stackClear;
Stack.prototype['delete'] = _stackDelete;
Stack.prototype.get = _stackGet;
Stack.prototype.has = _stackHas;
Stack.prototype.set = _stackSet;
var _Stack = Stack;
/**
* A specialized version of `_.forEach` for arrays without support for
* iteratee shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns `array`.
*/
function arrayEach(array, iteratee) {
var index = -1,
length = array == null ? 0 : array.length;
while (++index < length) {
if (iteratee(array[index], index, array) === false) {
break;
}
}
return array;
}
var _arrayEach = arrayEach;
var defineProperty = (function() {
try {
var func = _getNative(Object, 'defineProperty');
func({}, '', {});
return func;
} catch (e) {}
}());
var _defineProperty = defineProperty;
/**
* The base implementation of `assignValue` and `assignMergeValue` without
* value checks.
*
* @private
* @param {Object} object The object to modify.
* @param {string} key The key of the property to assign.
* @param {*} value The value to assign.
*/
function baseAssignValue(object, key, value) {
if (key == '__proto__' && _defineProperty) {
_defineProperty(object, key, {
'configurable': true,
'enumerable': true,
'value': value,
'writable': true
});
} else {
object[key] = value;
}
}
var _baseAssignValue = baseAssignValue;
/** Used for built-in method references. */
var objectProto$5 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$5 = objectProto$5.hasOwnProperty;
/**
* Assigns `value` to `key` of `object` if the existing value is not equivalent
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
* for equality comparisons.
*
* @private
* @param {Object} object The object to modify.
* @param {string} key The key of the property to assign.
* @param {*} value The value to assign.
*/
function assignValue(object, key, value) {
var objValue = object[key];
if (!(hasOwnProperty$5.call(object, key) && eq_1(objValue, value)) ||
(value === undefined && !(key in object))) {
_baseAssignValue(object, key, value);
}
}
var _assignValue = assignValue;
/**
* Copies properties of `source` to `object`.
*
* @private
* @param {Object} source The object to copy properties from.
* @param {Array} props The property identifiers to copy.
* @param {Object} [object={}] The object to copy properties to.
* @param {Function} [customizer] The function to customize copied values.
* @returns {Object} Returns `object`.
*/
function copyObject(source, props, object, customizer) {
var isNew = !object;
object || (object = {});
var index = -1,
length = props.length;
while (++index < length) {
var key = props[index];
var newValue = customizer
? customizer(object[key], source[key], key, object, source)
: undefined;
if (newValue === undefined) {
newValue = source[key];
}
if (isNew) {
_baseAssignValue(object, key, newValue);
} else {
_assignValue(object, key, newValue);
}
}
return object;
}
var _copyObject = copyObject;
/**
* The base implementation of `_.times` without support for iteratee shorthands
* or max array length checks.
*
* @private
* @param {number} n The number of times to invoke `iteratee`.
* @param {Function} iteratee The function invoked per iteration.
* @returns {Array} Returns the array of results.
*/
function baseTimes(n, iteratee) {
var index = -1,
result = Array(n);
while (++index < n) {
result[index] = iteratee(index);
}
return result;
}
var _baseTimes = baseTimes;
/**
* Checks if `value` is object-like. A value is object-like if it's not `null`
* and has a `typeof` result of "object".
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
* @example
*
* _.isObjectLike({});
* // => true
*
* _.isObjectLike([1, 2, 3]);
* // => true
*
* _.isObjectLike(_.noop);
* // => false
*
* _.isObjectLike(null);
* // => false
*/
function isObjectLike(value) {
return value != null && typeof value == 'object';
}
var isObjectLike_1 = isObjectLike;
/** `Object#toString` result references. */
var argsTag = '[object Arguments]';
/**
* The base implementation of `_.isArguments`.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
*/
function baseIsArguments(value) {
return isObjectLike_1(value) && _baseGetTag(value) == argsTag;
}
var _baseIsArguments = baseIsArguments;
/** Used for built-in method references. */
var objectProto$6 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$6 = objectProto$6.hasOwnProperty;
/** Built-in value references. */
var propertyIsEnumerable = objectProto$6.propertyIsEnumerable;
/**
* Checks if `value` is likely an `arguments` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
* else `false`.
* @example
*
* _.isArguments(function() { return arguments; }());
* // => true
*
* _.isArguments([1, 2, 3]);
* // => false
*/
var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) {
return isObjectLike_1(value) && hasOwnProperty$6.call(value, 'callee') &&
!propertyIsEnumerable.call(value, 'callee');
};
var isArguments_1 = isArguments;
/**
* Checks if `value` is classified as an `Array` object.
*
* @static
* @memberOf _
* @since 0.1.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
* @example
*
* _.isArray([1, 2, 3]);
* // => true
*
* _.isArray(document.body.children);
* // => false
*
* _.isArray('abc');
* // => false
*
* _.isArray(_.noop);
* // => false
*/
var isArray = Array.isArray;
var isArray_1 = isArray;
/**
* This method returns `false`.
*
* @static
* @memberOf _
* @since 4.13.0
* @category Util
* @returns {boolean} Returns `false`.
* @example
*
* _.times(2, _.stubFalse);
* // => [false, false]
*/
function stubFalse() {
return false;
}
var stubFalse_1 = stubFalse;
var isBuffer_1 = createCommonjsModule(function (module, exports) {
/** Detect free variable `exports`. */
var freeExports = 'object' == 'object' && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;
/** Built-in value references. */
var Buffer = moduleExports ? _root.Buffer : undefined;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
/**
* Checks if `value` is a buffer.
*
* @static
* @memberOf _
* @since 4.3.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
* @example
*
* _.isBuffer(new Buffer(2));
* // => true
*
* _.isBuffer(new Uint8Array(2));
* // => false
*/
var isBuffer = nativeIsBuffer || stubFalse_1;
module.exports = isBuffer;
});
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;
/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/;
/**
* Checks if `value` is a valid array-like index.
*
* @private
* @param {*} value The value to check.
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
*/
function isIndex(value, length) {
length = length == null ? MAX_SAFE_INTEGER : length;
return !!length &&
(typeof value == 'number' || reIsUint.test(value)) &&
(value > -1 && value % 1 == 0 && value < length);
}
var _isIndex = isIndex;
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER$1 = 9007199254740991;
/**
* Checks if `value` is a valid array-like length.
*
* **Note:** This method is loosely based on
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
* @example
*
* _.isLength(3);
* // => true
*
* _.isLength(Number.MIN_VALUE);
* // => false
*
* _.isLength(Infinity);
* // => false
*
* _.isLength('3');
* // => false
*/
function isLength(value) {
return typeof value == 'number' &&
value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1;
}
var isLength_1 = isLength;
/** `Object#toString` result references. */
var argsTag$1 = '[object Arguments]',
arrayTag = '[object Array]',
boolTag = '[object Boolean]',
dateTag = '[object Date]',
errorTag = '[object Error]',
funcTag$1 = '[object Function]',
mapTag = '[object Map]',
numberTag = '[object Number]',
objectTag = '[object Object]',
regexpTag = '[object RegExp]',
setTag = '[object Set]',
stringTag = '[object String]',
weakMapTag = '[object WeakMap]';
var arrayBufferTag = '[object ArrayBuffer]',
dataViewTag = '[object DataView]',
float32Tag = '[object Float32Array]',
float64Tag = '[object Float64Array]',
int8Tag = '[object Int8Array]',
int16Tag = '[object Int16Array]',
int32Tag = '[object Int32Array]',
uint8Tag = '[object Uint8Array]',
uint8ClampedTag = '[object Uint8ClampedArray]',
uint16Tag = '[object Uint16Array]',
uint32Tag = '[object Uint32Array]';
/** Used to identify `toStringTag` values of typed arrays. */
var typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] =
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
typedArrayTags[errorTag] = typedArrayTags[funcTag$1] =
typedArrayTags[mapTag] = typedArrayTags[numberTag] =
typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
typedArrayTags[setTag] = typedArrayTags[stringTag] =
typedArrayTags[weakMapTag] = false;
/**
* The base implementation of `_.isTypedArray` without Node.js optimizations.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
*/
function baseIsTypedArray(value) {
return isObjectLike_1(value) &&
isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)];
}
var _baseIsTypedArray = baseIsTypedArray;
/**
* The base implementation of `_.unary` without support for storing metadata.
*
* @private
* @param {Function} func The function to cap arguments for.
* @returns {Function} Returns the new capped function.
*/
function baseUnary(func) {
return function(value) {
return func(value);
};
}
var _baseUnary = baseUnary;
var _nodeUtil = createCommonjsModule(function (module, exports) {
/** Detect free variable `exports`. */
var freeExports = 'object' == 'object' && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;
/** Detect free variable `process` from Node.js. */
var freeProcess = moduleExports && _freeGlobal.process;
/** Used to access faster Node.js helpers. */
var nodeUtil = (function() {
try {
return freeProcess && freeProcess.binding && freeProcess.binding('util');
} catch (e) {}
}());
module.exports = nodeUtil;
});
/* Node.js helper references. */
var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray;
/**
* Checks if `value` is classified as a typed array.
*
* @static
* @memberOf _
* @since 3.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
* @example
*
* _.isTypedArray(new Uint8Array);
* // => true
*
* _.isTypedArray([]);
* // => false
*/
var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray;
var isTypedArray_1 = isTypedArray;
/** Used for built-in method references. */
var objectProto$7 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$7 = objectProto$7.hasOwnProperty;
/**
* Creates an array of the enumerable property names of the array-like `value`.
*
* @private
* @param {*} value The value to query.
* @param {boolean} inherited Specify returning inherited property names.
* @returns {Array} Returns the array of property names.
*/
function arrayLikeKeys(value, inherited) {
var isArr = isArray_1(value),
isArg = !isArr && isArguments_1(value),
isBuff = !isArr && !isArg && isBuffer_1(value),
isType = !isArr && !isArg && !isBuff && isTypedArray_1(value),
skipIndexes = isArr || isArg || isBuff || isType,
result = skipIndexes ? _baseTimes(value.length, String) : [],
length = result.length;
for (var key in value) {
if ((inherited || hasOwnProperty$7.call(value, key)) &&
!(skipIndexes && (
// Safari 9 has enumerable `arguments.length` in strict mode.
key == 'length' ||
// Node.js 0.10 has enumerable non-index properties on buffers.
(isBuff && (key == 'offset' || key == 'parent')) ||
// PhantomJS 2 has enumerable non-index properties on typed arrays.
(isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
// Skip index properties.
_isIndex(key, length)
))) {
result.push(key);
}
}
return result;
}
var _arrayLikeKeys = arrayLikeKeys;
/** Used for built-in method references. */
var objectProto$8 = Object.prototype;
/**
* Checks if `value` is likely a prototype object.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
*/
function isPrototype(value) {
var Ctor = value && value.constructor,
proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$8;
return value === proto;
}
var _isPrototype = isPrototype;
/**
* Creates a unary function that invokes `func` with its argument transformed.
*
* @private
* @param {Function} func The function to wrap.
* @param {Function} transform The argument transform.
* @returns {Function} Returns the new function.
*/
function overArg(func, transform) {
return function(arg) {
return func(transform(arg));
};
}
var _overArg = overArg;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeKeys = _overArg(Object.keys, Object);
var _nativeKeys = nativeKeys;
/** Used for built-in method references. */
var objectProto$9 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$8 = objectProto$9.hasOwnProperty;
/**
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
*/
function baseKeys(object) {
if (!_isPrototype(object)) {
return _nativeKeys(object);
}
var result = [];
for (var key in Object(object)) {
if (hasOwnProperty$8.call(object, key) && key != 'constructor') {
result.push(key);
}
}
return result;
}
var _baseKeys = baseKeys;
/**
* Checks if `value` is array-like. A value is considered array-like if it's
* not a function and has a `value.length` that's an integer greater than or
* equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
*
* @static
* @memberOf _
* @since 4.0.0
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
* @example
*
* _.isArrayLike([1, 2, 3]);
* // => true
*
* _.isArrayLike(document.body.children);
* // => true
*
* _.isArrayLike('abc');
* // => true
*
* _.isArrayLike(_.noop);
* // => false
*/
function isArrayLike(value) {
return value != null && isLength_1(value.length) && !isFunction_1(value);
}
var isArrayLike_1 = isArrayLike;
/**
* Creates an array of the own enumerable property names of `object`.
*
* **Note:** Non-object values are coerced to objects. See the
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
* for more details.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Object
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
* @example
*
* function Foo() {
* this.a = 1;
* this.b = 2;
* }
*
* Foo.prototype.c = 3;
*
* _.keys(new Foo);
* // => ['a', 'b'] (iteration order is not guaranteed)
*
* _.keys('hi');
* // => ['0', '1']
*/
function keys(object) {
return isArrayLike_1(object) ? _arrayLikeKeys(object) : _baseKeys(object);
}
var keys_1 = keys;
/**
* The base implementation of `_.assign` without support for multiple sources
* or `customizer` functions.
*
* @private
* @param {Object} object The destination object.
* @param {Object} source The source object.
* @returns {Object} Returns `object`.
*/
function baseAssign(object, source) {
return object && _copyObject(source, keys_1(source), object);
}
var _baseAssign = baseAssign;
/**
* This function is like
* [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
* except that it includes inherited enumerable properties.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
*/
function nativeKeysIn(object) {
var result = [];
if (object != null) {
for (var key in Object(object)) {
result.push(key);
}
}
return result;
}
var _nativeKeysIn = nativeKeysIn;
/** Used for built-in method references. */
var objectProto$10 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$9 = objectProto$10.hasOwnProperty;
/**
* The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
*/
function baseKeysIn(object) {
if (!isObject_1(object)) {
return _nativeKeysIn(object);
}
var isProto = _isPrototype(object),
result = [];
for (var key in object) {
if (!(key == 'constructor' && (isProto || !hasOwnProperty$9.call(object, key)))) {
result.push(key);
}
}
return result;
}
var _baseKeysIn = baseKeysIn;
/**
* Creates an array of the own and inherited enumerable property names of `object`.
*
* **Note:** Non-object values are coerced to objects.
*
* @static
* @memberOf _
* @since 3.0.0
* @category Object
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names.
* @example
*
* function Foo() {
* this.a = 1;
* this.b = 2;
* }
*
* Foo.prototype.c = 3;
*
* _.keysIn(new Foo);
* // => ['a', 'b', 'c'] (iteration order is not guaranteed)
*/
function keysIn$1(object) {
return isArrayLike_1(object) ? _arrayLikeKeys(object, true) : _baseKeysIn(object);
}
var keysIn_1 = keysIn$1;
/**
* The base implementation of `_.assignIn` without support for multiple sources
* or `customizer` functions.
*
* @private
* @param {Object} object The destination object.
* @param {Object} source The source object.
* @returns {Object} Returns `object`.
*/
function baseAssignIn(object, source) {
return object && _copyObject(source, keysIn_1(source), object);
}
var _baseAssignIn = baseAssignIn;
var _cloneBuffer = createCommonjsModule(function (module, exports) {
/** Detect free variable `exports`. */
var freeExports = 'object' == 'object' && exports && !exports.nodeType && exports;
/** Detect free variable `module`. */
var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;
/** Built-in value references. */
var Buffer = moduleExports ? _root.Buffer : undefined,
allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;
/**
* Creates a clone of `buffer`.
*
* @private
* @param {Buffer} buffer The buffer to clone.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Buffer} Returns the cloned buffer.
*/
function cloneBuffer(buffer, isDeep) {
if (isDeep) {
return buffer.slice();
}
var length = buffer.length,
result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
buffer.copy(result);
return result;
}
module.exports = cloneBuffer;
});
/**
* Copies the values of `source` to `array`.
*
* @private
* @param {Array} source The array to copy values from.
* @param {Array} [array=[]] The array to copy values to.
* @returns {Array} Returns `array`.
*/
function copyArray(source, array) {
var index = -1,
length = source.length;
array || (array = Array(length));
while (++index < length) {
array[index] = source[index];
}
return array;
}
var _copyArray = copyArray;
/**
* A specialized version of `_.filter` for arrays without support for
* iteratee shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} predicate The function invoked per iteration.
* @returns {Array} Returns the new filtered array.
*/
function arrayFilter(array, predicate) {
var index = -1,
length = array == null ? 0 : array.length,
resIndex = 0,
result = [];
while (++index < length) {
var value = array[index];
if (predicate(value, index, array)) {
result[resIndex++] = value;
}
}
return result;
}
var _arrayFilter = arrayFilter;
/**
* This method returns a new empty array.
*
* @static
* @memberOf _
* @since 4.13.0
* @category Util
* @returns {Array} Returns the new empty array.
* @example
*
* var arrays = _.times(2, _.stubArray);
*
* console.log(arrays);
* // => [[], []]
*
* console.log(arrays[0] === arrays[1]);
* // => false
*/
function stubArray() {
return [];
}
var stubArray_1 = stubArray;
/** Used for built-in method references. */
var objectProto$11 = Object.prototype;
/** Built-in value references. */
var propertyIsEnumerable$1 = objectProto$11.propertyIsEnumerable;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeGetSymbols = Object.getOwnPropertySymbols;
/**
* Creates an array of the own enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of symbols.
*/
var getSymbols = !nativeGetSymbols ? stubArray_1 : function(object) {
if (object == null) {
return [];
}
object = Object(object);
return _arrayFilter(nativeGetSymbols(object), function(symbol) {
return propertyIsEnumerable$1.call(object, symbol);
});
};
var _getSymbols = getSymbols;
/**
* Copies own symbols of `source` to `object`.
*
* @private
* @param {Object} source The object to copy symbols from.
* @param {Object} [object={}] The object to copy symbols to.
* @returns {Object} Returns `object`.
*/
function copySymbols(source, object) {
return _copyObject(source, _getSymbols(source), object);
}
var _copySymbols = copySymbols;
/**
* Appends the elements of `values` to `array`.
*
* @private
* @param {Array} array The array to modify.
* @param {Array} values The values to append.
* @returns {Array} Returns `array`.
*/
function arrayPush(array, values) {
var index = -1,
length = values.length,
offset = array.length;
while (++index < length) {
array[offset + index] = values[index];
}
return array;
}
var _arrayPush = arrayPush;
/** Built-in value references. */
var getPrototype = _overArg(Object.getPrototypeOf, Object);
var _getPrototype = getPrototype;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeGetSymbols$1 = Object.getOwnPropertySymbols;
/**
* Creates an array of the own and inherited enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of symbols.
*/
var getSymbolsIn = !nativeGetSymbols$1 ? stubArray_1 : function(object) {
var result = [];
while (object) {
_arrayPush(result, _getSymbols(object));
object = _getPrototype(object);
}
return result;
};
var _getSymbolsIn = getSymbolsIn;
/**
* Copies own and inherited symbols of `source` to `object`.
*
* @private
* @param {Object} source The object to copy symbols from.
* @param {Object} [object={}] The object to copy symbols to.
* @returns {Object} Returns `object`.
*/
function copySymbolsIn(source, object) {
return _copyObject(source, _getSymbolsIn(source), object);
}
var _copySymbolsIn = copySymbolsIn;
/**
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses
* `keysFunc` and `symbolsFunc` to get the enumerable property names and
* symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @param {Function} keysFunc The function to get the keys of `object`.
* @param {Function} symbolsFunc The function to get the symbols of `object`.
* @returns {Array} Returns the array of property names and symbols.
*/
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
var result = keysFunc(object);
return isArray_1(object) ? result : _arrayPush(result, symbolsFunc(object));
}
var _baseGetAllKeys = baseGetAllKeys;
/**
* Creates an array of own enumerable property names and symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names and symbols.
*/
function getAllKeys(object) {
return _baseGetAllKeys(object, keys_1, _getSymbols);
}
var _getAllKeys = getAllKeys;
/**
* Creates an array of own and inherited enumerable property names and
* symbols of `object`.
*
* @private
* @param {Object} object The object to query.
* @returns {Array} Returns the array of property names and symbols.
*/
function getAllKeysIn(object) {
return _baseGetAllKeys(object, keysIn_1, _getSymbolsIn);
}
var _getAllKeysIn = getAllKeysIn;
/* Built-in method references that are verified to be native. */
var DataView = _getNative(_root, 'DataView');
var _DataView = DataView;
/* Built-in method references that are verified to be native. */
var Promise = _getNative(_root, 'Promise');
var _Promise = Promise;
/* Built-in method references that are verified to be native. */
var Set$1 = _getNative(_root, 'Set');
var _Set = Set$1;
/* Built-in method references that are verified to be native. */
var WeakMap = _getNative(_root, 'WeakMap');
var _WeakMap = WeakMap;
/** `Object#toString` result references. */
var mapTag$1 = '[object Map]',
objectTag$1 = '[object Object]',
promiseTag = '[object Promise]',
setTag$1 = '[object Set]',
weakMapTag$1 = '[object WeakMap]';
var dataViewTag$1 = '[object DataView]';
/** Used to detect maps, sets, and weakmaps. */
var dataViewCtorString = _toSource(_DataView),
mapCtorString = _toSource(_Map),
promiseCtorString = _toSource(_Promise),
setCtorString = _toSource(_Set),
weakMapCtorString = _toSource(_WeakMap);
/**
* Gets the `toStringTag` of `value`.
*
* @private
* @param {*} value The value to query.
* @returns {string} Returns the `toStringTag`.
*/
var getTag = _baseGetTag;
// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != dataViewTag$1) ||
(_Map && getTag(new _Map) != mapTag$1) ||
(_Promise && getTag(_Promise.resolve()) != promiseTag) ||
(_Set && getTag(new _Set) != setTag$1) ||
(_WeakMap && getTag(new _WeakMap) != weakMapTag$1)) {
getTag = function(value) {
var result = _baseGetTag(value),
Ctor = result == objectTag$1 ? value.constructor : undefined,
ctorString = Ctor ? _toSource(Ctor) : '';
if (ctorString) {
switch (ctorString) {
case dataViewCtorString: return dataViewTag$1;
case mapCtorString: return mapTag$1;
case promiseCtorString: return promiseTag;
case setCtorString: return setTag$1;
case weakMapCtorString: return weakMapTag$1;
}
}
return result;
};
}
var _getTag = getTag;
/** Used for built-in method references. */
var objectProto$12 = Object.prototype;
/** Used to check objects for own properties. */
var hasOwnProperty$10 = objectProto$12.hasOwnProperty;
/**
* Initializes an array clone.
*
* @private
* @param {Array} array The array to clone.
* @returns {Array} Returns the initialized clone.
*/
function initCloneArray(array) {
var length = array.length,
result = array.constructor(length);
// Add properties assigned by `RegExp#exec`.
if (length && typeof array[0] == 'string' && hasOwnProperty$10.call(array, 'index')) {
result.index = array.index;
result.input = array.input;
}
return result;
}
var _initCloneArray = initCloneArray;
/** Built-in value references. */
var Uint8Array = _root.Uint8Array;
var _Uint8Array = Uint8Array;
/**
* Creates a clone of `arrayBuffer`.
*
* @private
* @param {ArrayBuffer} arrayBuffer The array buffer to clone.
* @returns {ArrayBuffer} Returns the cloned array buffer.
*/
function cloneArrayBuffer(arrayBuffer) {
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
new _Uint8Array(result).set(new _Uint8Array(arrayBuffer));
return result;
}
var _cloneArrayBuffer = cloneArrayBuffer;
/**
* Creates a clone of `dataView`.
*
* @private
* @param {Object} dataView The data view to clone.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Object} Returns the cloned data view.
*/
function cloneDataView(dataView, isDeep) {
var buffer = isDeep ? _cloneArrayBuffer(dataView.buffer) : dataView.buffer;
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
}
var _cloneDataView = cloneDataView;
/**
* Adds the key-value `pair` to `map`.
*
* @private
* @param {Object} map The map to modify.
* @param {Array} pair The key-value pair to add.
* @returns {Object} Returns `map`.
*/
function addMapEntry(map, pair) {
// Don't return `map.set` because it's not chainable in IE 11.
map.set(pair[0], pair[1]);
return map;
}
var _addMapEntry = addMapEntry;
/**
* A specialized version of `_.reduce` for arrays without support for
* iteratee shorthands.
*
* @private
* @param {Array} [array] The array to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @param {*} [accumulator] The initial value.
* @param {boolean} [initAccum] Specify using the first element of `array` as
* the initial value.
* @returns {*} Returns the accumulated value.
*/
function arrayReduce(array, iteratee, accumulator, initAccum) {
var index = -1,
length = array == null ? 0 : array.length;
if (initAccum && length) {
accumulator = array[++index];
}
while (++index < length) {
accumulator = iteratee(accumulator, array[index], index, array);
}
return accumulator;
}
var _arrayReduce = arrayReduce;
/**
* Converts `map` to its key-value pairs.
*
* @private
* @param {Object} map The map to convert.
* @returns {Array} Returns the key-value pairs.
*/
function mapToArray(map) {
var index = -1,
result = Array(map.size);
map.forEach(function(value, key) {
result[++index] = [key, value];
});
return result;
}
var _mapToArray = mapToArray;
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1;
/**
* Creates a clone of `map`.
*
* @private
* @param {Object} map The map to clone.
* @param {Function} cloneFunc The function to clone values.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Object} Returns the cloned map.
*/
function cloneMap(map, isDeep, cloneFunc) {
var array = isDeep ? cloneFunc(_mapToArray(map), CLONE_DEEP_FLAG) : _mapToArray(map);
return _arrayReduce(array, _addMapEntry, new map.constructor);
}
var _cloneMap = cloneMap;
/** Used to match `RegExp` flags from their coerced string values. */
var reFlags = /\w*$/;
/**
* Creates a clone of `regexp`.
*
* @private
* @param {Object} regexp The regexp to clone.
* @returns {Object} Returns the cloned regexp.
*/
function cloneRegExp(regexp) {
var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
result.lastIndex = regexp.lastIndex;
return result;
}
var _cloneRegExp = cloneRegExp;
/**
* Adds `value` to `set`.
*
* @private
* @param {Object} set The set to modify.
* @param {*} value The value to add.
* @returns {Object} Returns `set`.
*/
function addSetEntry(set, value) {
// Don't return `set.add` because it's not chainable in IE 11.
set.add(value);
return set;
}
var _addSetEntry = addSetEntry;
/**
* Converts `set` to an array of its values.
*
* @private
* @param {Object} set The set to convert.
* @returns {Array} Returns the values.
*/
function setToArray(set) {
var index = -1,
result = Array(set.size);
set.forEach(function(value) {
result[++index] = value;
});
return result;
}
var _setToArray = setToArray;
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG$1 = 1;
/**
* Creates a clone of `set`.
*
* @private
* @param {Object} set The set to clone.
* @param {Function} cloneFunc The function to clone values.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Object} Returns the cloned set.
*/
function cloneSet(set, isDeep, cloneFunc) {
var array = isDeep ? cloneFunc(_setToArray(set), CLONE_DEEP_FLAG$1) : _setToArray(set);
return _arrayReduce(array, _addSetEntry, new set.constructor);
}
var _cloneSet = cloneSet;
/** Used to convert symbols to primitives and strings. */
var symbolProto = _Symbol ? _Symbol.prototype : undefined,
symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
/**
* Creates a clone of the `symbol` object.
*
* @private
* @param {Object} symbol The symbol object to clone.
* @returns {Object} Returns the cloned symbol object.
*/
function cloneSymbol(symbol) {
return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
}
var _cloneSymbol = cloneSymbol;
/**
* Creates a clone of `typedArray`.
*
* @private
* @param {Object} typedArray The typed array to clone.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Object} Returns the cloned typed array.
*/
function cloneTypedArray(typedArray, isDeep) {
var buffer = isDeep ? _cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
}
var _cloneTypedArray = cloneTypedArray;
/** `Object#toString` result references. */
var boolTag$1 = '[object Boolean]',
dateTag$1 = '[object Date]',
mapTag$2 = '[object Map]',
numberTag$1 = '[object Number]',
regexpTag$1 = '[object RegExp]',
setTag$2 = '[object Set]',
stringTag$1 = '[object String]',
symbolTag = '[object Symbol]';
var arrayBufferTag$1 = '[object ArrayBuffer]',
dataViewTag$2 = '[object DataView]',
float32Tag$1 = '[object Float32Array]',
float64Tag$1 = '[object Float64Array]',
int8Tag$1 = '[object Int8Array]',
int16Tag$1 = '[object Int16Array]',
int32Tag$1 = '[object Int32Array]',
uint8Tag$1 = '[object Uint8Array]',
uint8ClampedTag$1 = '[object Uint8ClampedArray]',
uint16Tag$1 = '[object Uint16Array]',
uint32Tag$1 = '[object Uint32Array]';
/**
* Initializes an object clone based on its `toStringTag`.
*
* **Note:** This function only supports cloning values with tags of
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
*
* @private
* @param {Object} object The object to clone.
* @param {string} tag The `toStringTag` of the object to clone.
* @param {Function} cloneFunc The function to clone values.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Object} Returns the initialized clone.
*/
function initCloneByTag(object, tag, cloneFunc, isDeep) {
var Ctor = object.constructor;
switch (tag) {
case arrayBufferTag$1:
return _cloneArrayBuffer(object);
case boolTag$1:
case dateTag$1:
return new Ctor(+object);
case dataViewTag$2:
return _cloneDataView(object, isDeep);
case float32Tag$1: case float64Tag$1:
case int8Tag$1: case int16Tag$1: case int32Tag$1:
case uint8Tag$1: case uint8ClampedTag$1: case uint16Tag$1: case uint32Tag$1:
return _cloneTypedArray(object, isDeep);
case mapTag$2:
return _cloneMap(object, isDeep, cloneFunc);
case numberTag$1:
case stringTag$1:
return new Ctor(object);
case regexpTag$1:
return _cloneRegExp(object);
case setTag$2:
return _cloneSet(object, isDeep, cloneFunc);
case symbolTag:
return _cloneSymbol(object);
}
}
var _initCloneByTag = initCloneByTag;
/** Built-in value references. */
var objectCreate = Object.create;
/**
* The base implementation of `_.create` without support for assigning
* properties to the created object.
*
* @private
* @param {Object} proto The object to inherit from.
* @returns {Object} Returns the new object.
*/
var baseCreate = (function() {
function object() {}
return function(proto) {
if (!isObject_1(proto)) {
return {};
}
if (objectCreate) {
return objectCreate(proto);
}
object.prototype = proto;
var result = new object;
object.prototype = undefined;
return result;
};
}());
var _baseCreate = baseCreate;
/**
* Initializes an object clone.
*
* @private
* @param {Object} object The object to clone.
* @returns {Object} Returns the initialized clone.
*/
function initCloneObject(object) {
return (typeof object.constructor == 'function' && !_isPrototype(object))
? _baseCreate(_getPrototype(object))
: {};
}
var _initCloneObject = initCloneObject;
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG$2 = 1,
CLONE_FLAT_FLAG = 2,
CLONE_SYMBOLS_FLAG = 4;
/** `Object#toString` result references. */
var argsTag$2 = '[object Arguments]',
arrayTag$1 = '[object Array]',
boolTag$2 = '[object Boolean]',
dateTag$2 = '[object Date]',
errorTag$1 = '[object Error]',
funcTag$2 = '[object Function]',
genTag$1 = '[object GeneratorFunction]',
mapTag$3 = '[object Map]',
numberTag$2 = '[object Number]',
objectTag$2 = '[object Object]',
regexpTag$2 = '[object RegExp]',
setTag$3 = '[object Set]',
stringTag$2 = '[object String]',
symbolTag$1 = '[object Symbol]',
weakMapTag$2 = '[object WeakMap]';
var arrayBufferTag$2 = '[object ArrayBuffer]',
dataViewTag$3 = '[object DataView]',
float32Tag$2 = '[object Float32Array]',
float64Tag$2 = '[object Float64Array]',
int8Tag$2 = '[object Int8Array]',
int16Tag$2 = '[object Int16Array]',
int32Tag$2 = '[object Int32Array]',
uint8Tag$2 = '[object Uint8Array]',
uint8ClampedTag$2 = '[object Uint8ClampedArray]',
uint16Tag$2 = '[object Uint16Array]',
uint32Tag$2 = '[object Uint32Array]';
/** Used to identify `toStringTag` values supported by `_.clone`. */
var cloneableTags = {};
cloneableTags[argsTag$2] = cloneableTags[arrayTag$1] =
cloneableTags[arrayBufferTag$2] = cloneableTags[dataViewTag$3] =
cloneableTags[boolTag$2] = cloneableTags[dateTag$2] =
cloneableTags[float32Tag$2] = cloneableTags[float64Tag$2] =
cloneableTags[int8Tag$2] = cloneableTags[int16Tag$2] =
cloneableTags[int32Tag$2] = cloneableTags[mapTag$3] =
cloneableTags[numberTag$2] = cloneableTags[objectTag$2] =
cloneableTags[regexpTag$2] = cloneableTags[setTag$3] =
cloneableTags[stringTag$2] = cloneableTags[symbolTag$1] =
cloneableTags[uint8Tag$2] = cloneableTags[uint8ClampedTag$2] =
cloneableTags[uint16Tag$2] = cloneableTags[uint32Tag$2] = true;
cloneableTags[errorTag$1] = cloneableTags[funcTag$2] =
cloneableTags[weakMapTag$2] = false;
/**
* The base implementation of `_.clone` and `_.cloneDeep` which tracks
* traversed objects.
*
* @private
* @param {*} value The value to clone.
* @param {boolean} bitmask The bitmask flags.
* 1 - Deep clone
* 2 - Flatten inherited properties
* 4 - Clone symbols
* @param {Function} [customizer] The function to customize cloning.
* @param {string} [key] The key of `value`.
* @param {Object} [object] The parent object of `value`.
* @param {Object} [stack] Tracks traversed objects and their clone counterparts.
* @returns {*} Returns the cloned value.
*/
function baseClone(value, bitmask, customizer, key, object, stack) {
var result,
isDeep = bitmask & CLONE_DEEP_FLAG$2,
isFlat = bitmask & CLONE_FLAT_FLAG,
isFull = bitmask & CLONE_SYMBOLS_FLAG;
if (customizer) {
result = object ? customizer(value, key, object, stack) : customizer(value);
}
if (result !== undefined) {
return result;
}
if (!isObject_1(value)) {
return value;
}
var isArr = isArray_1(value);
if (isArr) {
result = _initCloneArray(value);
if (!isDeep) {
return _copyArray(value, result);
}
} else {
var tag = _getTag(value),
isFunc = tag == funcTag$2 || tag == genTag$1;
if (isBuffer_1(value)) {
return _cloneBuffer(value, isDeep);
}
if (tag == objectTag$2 || tag == argsTag$2 || (isFunc && !object)) {
result = (isFlat || isFunc) ? {} : _initCloneObject(value);
if (!isDeep) {
return isFlat
? _copySymbolsIn(value, _baseAssignIn(result, value))
: _copySymbols(value, _baseAssign(result, value));
}
} else {
if (!cloneableTags[tag]) {
return object ? value : {};
}
result = _initCloneByTag(value, tag, baseClone, isDeep);
}
}
// Check for circular references and return its corresponding clone.
stack || (stack = new _Stack);
var stacked = stack.get(value);
if (stacked) {
return stacked;
}
stack.set(value, result);
var keysFunc = isFull
? (isFlat ? _getAllKeysIn : _getAllKeys)
: (isFlat ? keysIn : keys_1);
var props = isArr ? undefined : keysFunc(value);
_arrayEach(props || value, function(subValue, key) {
if (props) {
key = subValue;
subValue = value[key];
}
// Recursively populate clone (susceptible to call stack limits).
_assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
});
return result;
}
var _baseClone = baseClone;
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG$3 = 1,
CLONE_SYMBOLS_FLAG$1 = 4;
/**
* This method is like `_.clone` except that it recursively clones `value`.
*
* @static
* @memberOf _
* @since 1.0.0
* @category Lang
* @param {*} value The value to recursively clone.
* @returns {*} Returns the deep cloned value.
* @see _.clone
* @example
*
* var objects = [{ 'a': 1 }, { 'b': 2 }];
*
* var deep = _.cloneDeep(objects);
* console.log(deep[0] === objects[0]);
* // => false
*/
function cloneDeep(value) {
return _baseClone(value, CLONE_DEEP_FLAG$3 | CLONE_SYMBOLS_FLAG$1);
}
var cloneDeep_1 = cloneDeep;
//
function createLocalVue(_Vue) {
if ( _Vue === void 0 ) _Vue = Vue;
var instance = _Vue.extend();
// clone global APIs
Object.keys(_Vue).forEach(function (key) {
if (!instance.hasOwnProperty(key)) {
var original = _Vue[key];
// cloneDeep can fail when cloning Vue instances
// cloneDeep checks that the instance has a Symbol
// which errors in Vue < 2.17 (https://github.com/vuejs/vue/pull/7878)
try {
instance[key] =
typeof original === 'object' ? cloneDeep_1(original) : original;
} catch (e) {
instance[key] = original;
}
}
});
// config is not enumerable
instance.config = cloneDeep_1(Vue.config);
instance.config.errorHandler = Vue.config.errorHandler;
// option merge strategies need to be exposed by reference
// so that merge strats registered by plugins can work properly
instance.config.optionMergeStrategies = Vue.config.optionMergeStrategies;
// make sure all extends are based on this instance.
// this is important so that global components registered by plugins,
// e.g. router-link are created using the correct base constructor
instance.options._base = instance;
// compat for vue-router < 2.7.1 where it does not allow multiple installs
if (instance._installedPlugins && instance._installedPlugins.length) {
instance._installedPlugins.length = 0;
}
var use = instance.use;
instance.use = function (plugin) {
var rest = [], len = arguments.length - 1;
while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ];
if (plugin.installed === true) {
plugin.installed = false;
}
if (plugin.install && plugin.install.installed === true) {
plugin.install.installed = false;
}
use.call.apply(use, [ instance, plugin ].concat( rest ));
};
return instance
}
var semver$1 = createCommonjsModule(function (module, exports) {
exports = module.exports = SemVer;
// The debug function is excluded entirely from the minified version.
/* nomin */ var debug;
/* nomin */ if (typeof process === 'object' &&
/* nomin */ process.env &&
/* nomin */ process.env.NODE_DEBUG &&
/* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG))
/* nomin */ { debug = function() {
/* nomin */ var args = Array.prototype.slice.call(arguments, 0);
/* nomin */ args.unshift('SEMVER');
/* nomin */ console.log.apply(console, args);
/* nomin */ }; }
/* nomin */ else
/* nomin */ { debug = function() {}; }
// Note: this is the semver.org version of the spec that it implements
// Not necessarily the package version of this code.
exports.SEMVER_SPEC_VERSION = '2.0.0';
var MAX_LENGTH = 256;
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
// Max safe segment length for coercion.
var MAX_SAFE_COMPONENT_LENGTH = 16;
// The actual regexps go on exports.re
var re = exports.re = [];
var src = exports.src = [];
var R = 0;
// The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings.
// ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits.
var NUMERICIDENTIFIER = R++;
src[NUMERICIDENTIFIER] = '0|[1-9]\\d*';
var NUMERICIDENTIFIERLOOSE = R++;
src[NUMERICIDENTIFIERLOOSE] = '[0-9]+';
// ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens.
var NONNUMERICIDENTIFIER = R++;
src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*';
// ## Main Version
// Three dot-separated numeric identifiers.
var MAINVERSION = R++;
src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[NUMERICIDENTIFIER] + ')\\.' +
'(' + src[NUMERICIDENTIFIER] + ')';
var MAINVERSIONLOOSE = R++;
src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
'(' + src[NUMERICIDENTIFIERLOOSE] + ')';
// ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier.
var PRERELEASEIDENTIFIER = R++;
src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
'|' + src[NONNUMERICIDENTIFIER] + ')';
var PRERELEASEIDENTIFIERLOOSE = R++;
src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
'|' + src[NONNUMERICIDENTIFIER] + ')';
// ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version
// identifiers.
var PRERELEASE = R++;
src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
'(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))';
var PRERELEASELOOSE = R++;
src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
'(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))';
// ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens.
var BUILDIDENTIFIER = R++;
src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+';
// ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata
// identifiers.
var BUILD = R++;
src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
'(?:\\.' + src[BUILDIDENTIFIER] + ')*))';
// ## Full Version String
// A main version, followed optionally by a pre-release version and
// build metadata.
// Note that the only major, minor, patch, and pre-release sections of
// the version string are capturing groups. The build metadata is not a
// capturing group, because it should not ever be used in version
// comparison.
var FULL = R++;
var FULLPLAIN = 'v?' + src[MAINVERSION] +
src[PRERELEASE] + '?' +
src[BUILD] + '?';
src[FULL] = '^' + FULLPLAIN + '$';
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry.
var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
src[PRERELEASELOOSE] + '?' +
src[BUILD] + '?';
var LOOSE = R++;
src[LOOSE] = '^' + LOOSEPLAIN + '$';
var GTLT = R++;
src[GTLT] = '((?:<|>)?=?)';
// Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required.
var XRANGEIDENTIFIERLOOSE = R++;
src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*';
var XRANGEIDENTIFIER = R++;
src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*';
var XRANGEPLAIN = R++;
src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:' + src[PRERELEASE] + ')?' +
src[BUILD] + '?' +
')?)?';
var XRANGEPLAINLOOSE = R++;
src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:' + src[PRERELEASELOOSE] + ')?' +
src[BUILD] + '?' +
')?)?';
var XRANGE = R++;
src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
var XRANGELOOSE = R++;
src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';
// Coercion.
// Extract anything that could conceivably be a part of a valid semver
var COERCE = R++;
src[COERCE] = '(?:^|[^\\d])' +
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
'(?:$|[^\\d])';
// Tilde ranges.
// Meaning is "reasonably at or greater than"
var LONETILDE = R++;
src[LONETILDE] = '(?:~>?)';
var TILDETRIM = R++;
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
var tildeTrimReplace = '$1~';
var TILDE = R++;
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
var TILDELOOSE = R++;
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
// Caret ranges.
// Meaning is "at least and backwards compatible with"
var LONECARET = R++;
src[LONECARET] = '(?:\\^)';
var CARETTRIM = R++;
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
var caretTrimReplace = '$1^';
var CARET = R++;
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
var CARETLOOSE = R++;
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
// A simple gt/lt/eq thing, or just "" to indicate "any version"
var COMPARATORLOOSE = R++;
src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$';
var COMPARATOR = R++;
src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';
// An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
var COMPARATORTRIM = R++;
src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
'\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';
// this one has to use the /g flag
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
var comparatorTrimReplace = '$1$2$3';
// Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form
// later.
var HYPHENRANGE = R++;
src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
'\\s+-\\s+' +
'(' + src[XRANGEPLAIN] + ')' +
'\\s*$';
var HYPHENRANGELOOSE = R++;
src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s+-\\s+' +
'(' + src[XRANGEPLAINLOOSE] + ')' +
'\\s*$';
// Star ranges basically just allow anything at all.
var STAR = R++;
src[STAR] = '(<|>)?=?\\s*\\*';
// Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag.
for (var i = 0; i < R; i++) {
debug(i, src[i]);
if (!re[i])
{ re[i] = new RegExp(src[i]); }
}
exports.parse = parse;
function parse(version, loose) {
if (version instanceof SemVer)
{ return version; }
if (typeof version !== 'string')
{ return null; }
if (version.length > MAX_LENGTH)
{ return null; }
var r = loose ? re[LOOSE] : re[FULL];
if (!r.test(version))
{ return null; }
try {
return new SemVer(version, loose);
} catch (er) {
return null;
}
}
exports.valid = valid;
function valid(version, loose) {
var v = parse(version, loose);
return v ? v.version : null;
}
exports.clean = clean;
function clean(version, loose) {
var s = parse(version.trim().replace(/^[=v]+/, ''), loose);
return s ? s.version : null;
}
exports.SemVer = SemVer;
function SemVer(version, loose) {
if (version instanceof SemVer) {
if (version.loose === loose)
{ return version; }
else
{ version = version.version; }
} else if (typeof version !== 'string') {
throw new TypeError('Invalid Version: ' + version);
}
if (version.length > MAX_LENGTH)
{ throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') }
if (!(this instanceof SemVer))
{ return new SemVer(version, loose); }
debug('SemVer', version, loose);
this.loose = loose;
var m = version.trim().match(loose ? re[LOOSE] : re[FULL]);
if (!m)
{ throw new TypeError('Invalid Version: ' + version); }
this.raw = version;
// these are actually numbers
this.major = +m[1];
this.minor = +m[2];
this.patch = +m[3];
if (this.major > MAX_SAFE_INTEGER || this.major < 0)
{ throw new TypeError('Invalid major version') }
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)
{ throw new TypeError('Invalid minor version') }
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)
{ throw new TypeError('Invalid patch version') }
// numberify any prerelease numeric ids
if (!m[4])
{ this.prerelease = []; }
else
{ this.prerelease = m[4].split('.').map(function(id) {
if (/^[0-9]+$/.test(id)) {
var num = +id;
if (num >= 0 && num < MAX_SAFE_INTEGER)
{ return num; }
}
return id;
}); }
this.build = m[5] ? m[5].split('.') : [];
this.format();
}
SemVer.prototype.format = function() {
this.version = this.major + '.' + this.minor + '.' + this.patch;
if (this.prerelease.length)
{ this.version += '-' + this.prerelease.join('.'); }
return this.version;
};
SemVer.prototype.toString = function() {
return this.version;
};
SemVer.prototype.compare = function(other) {
debug('SemVer.compare', this.version, this.loose, other);
if (!(other instanceof SemVer))
{ other = new SemVer(other, this.loose); }
return this.compareMain(other) || this.comparePre(other);
};
SemVer.prototype.compareMain = function(other) {
if (!(other instanceof SemVer))
{ other = new SemVer(other, this.loose); }
return compareIdentifiers(this.major, other.major) ||
compareIdentifiers(this.minor, other.minor) ||
compareIdentifiers(this.patch, other.patch);
};
SemVer.prototype.comparePre = function(other) {
var this$1 = this;
if (!(other instanceof SemVer))
{ other = new SemVer(other, this.loose); }
// NOT having a prerelease is > having one
if (this.prerelease.length && !other.prerelease.length)
{ return -1; }
else if (!this.prerelease.length && other.prerelease.length)
{ return 1; }
else if (!this.prerelease.length && !other.prerelease.length)
{ return 0; }
var i = 0;
do {
var a = this$1.prerelease[i];
var b = other.prerelease[i];
debug('prerelease compare', i, a, b);
if (a === undefined && b === undefined)
{ return 0; }
else if (b === undefined)
{ return 1; }
else if (a === undefined)
{ return -1; }
else if (a === b)
{ continue; }
else
{ return compareIdentifiers(a, b); }
} while (++i);
};
// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
SemVer.prototype.inc = function(release, identifier) {
var this$1 = this;
switch (release) {
case 'premajor':
this.prerelease.length = 0;
this.patch = 0;
this.minor = 0;
this.major++;
this.inc('pre', identifier);
break;
case 'preminor':
this.prerelease.length = 0;
this.patch = 0;
this.minor++;
this.inc('pre', identifier);
break;
case 'prepatch':
// If this is already a prerelease, it will bump to the next version
// drop any prereleases that might already exist, since they are not
// relevant at this point.
this.prerelease.length = 0;
this.inc('patch', identifier);
this.inc('pre', identifier);
break;
// If the input is a non-prerelease version, this acts the same as
// prepatch.
case 'prerelease':
if (this.prerelease.length === 0)
{ this.inc('patch', identifier); }
this.inc('pre', identifier);
break;
case 'major':
// If this is a pre-major version, bump up to the same major version.
// Otherwise increment major.
// 1.0.0-5 bumps to 1.0.0
// 1.1.0 bumps to 2.0.0
if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)
{ this.major++; }
this.minor = 0;
this.patch = 0;
this.prerelease = [];
break;
case 'minor':
// If this is a pre-minor version, bump up to the same minor version.
// Otherwise increment minor.
// 1.2.0-5 bumps to 1.2.0
// 1.2.1 bumps to 1.3.0
if (this.patch !== 0 || this.prerelease.length === 0)
{ this.minor++; }
this.patch = 0;
this.prerelease = [];
break;
case 'patch':
// If this is not a pre-release version, it will increment the patch.
// If it is a pre-release it will bump up to the same patch version.
// 1.2.0-5 patches to 1.2.0
// 1.2.0 patches to 1.2.1
if (this.prerelease.length === 0)
{ this.patch++; }
this.prerelease = [];
break;
// This probably shouldn't be used publicly.
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
case 'pre':
if (this.prerelease.length === 0)
{ this.prerelease = [0]; }
else {
var i = this.prerelease.length;
while (--i >= 0) {
if (typeof this$1.prerelease[i] === 'number') {
this$1.prerelease[i]++;
i = -2;
}
}
if (i === -1) // didn't increment anything
{ this.prerelease.push(0); }
}
if (identifier) {
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
if (this.prerelease[0] === identifier) {
if (isNaN(this.prerelease[1]))
{ this.prerelease = [identifier, 0]; }
} else
{ this.prerelease = [identifier, 0]; }
}
break;
default:
throw new Error('invalid increment argument: ' + release);
}
this.format();
this.raw = this.version;
return this;
};
exports.inc = inc;
function inc(version, release, loose, identifier) {
if (typeof(loose) === 'string') {
identifier = loose;
loose = undefined;
}
try {
return new SemVer(version, loose).inc(release, identifier).version;
} catch (er) {
return null;
}
}
exports.diff = diff;
function diff(version1, version2) {
if (eq(version1, version2)) {
return null;
} else {
var v1 = parse(version1);
var v2 = parse(version2);
if (v1.prerelease.length || v2.prerelease.length) {
for (var key in v1) {
if (key === 'major' || key === 'minor' || key === 'patch') {
if (v1[key] !== v2[key]) {
return 'pre'+key;
}
}
}
return 'prerelease';
}
for (var key in v1) {
if (key === 'major' || key === 'minor' || key === 'patch') {
if (v1[key] !== v2[key]) {
return key;
}
}
}
}
}
exports.compareIdentifiers = compareIdentifiers;
var numeric = /^[0-9]+$/;
function compareIdentifiers(a, b) {
var anum = numeric.test(a);
var bnum = numeric.test(b);
if (anum && bnum) {
a = +a;
b = +b;
}
return (anum && !bnum) ? -1 :
(bnum && !anum) ? 1 :
a < b ? -1 :
a > b ? 1 :
0;
}
exports.rcompareIdentifiers = rcompareIdentifiers;
function rcompareIdentifiers(a, b) {
return compareIdentifiers(b, a);
}
exports.major = major;
function major(a, loose) {
return new SemVer(a, loose).major;
}
exports.minor = minor;
function minor(a, loose) {
return new SemVer(a, loose).minor;
}
exports.patch = patch;
function patch(a, loose) {
return new SemVer(a, loose).patch;
}
exports.compare = compare;
function compare(a, b, loose) {
return new SemVer(a, loose).compare(new SemVer(b, loose));
}
exports.compareLoose = compareLoose;
function compareLoose(a, b) {
return compare(a, b, true);
}
exports.rcompare = rcompare;
function rcompare(a, b, loose) {
return compare(b, a, loose);
}
exports.sort = sort;
function sort(list, loose) {
return list.sort(function(a, b) {
return exports.compare(a, b, loose);
});
}
exports.rsort = rsort;
function rsort(list, loose) {
return list.sort(function(a, b) {
return exports.rcompare(a, b, loose);
});
}
exports.gt = gt;
function gt(a, b, loose) {
return compare(a, b, loose) > 0;
}
exports.lt = lt;
function lt(a, b, loose) {
return compare(a, b, loose) < 0;
}
exports.eq = eq;
function eq(a, b, loose) {
return compare(a, b, loose) === 0;
}
exports.neq = neq;
function neq(a, b, loose) {
return compare(a, b, loose) !== 0;
}
exports.gte = gte;
function gte(a, b, loose) {
return compare(a, b, loose) >= 0;
}
exports.lte = lte;
function lte(a, b, loose) {
return compare(a, b, loose) <= 0;
}
exports.cmp = cmp;
function cmp(a, op, b, loose) {
var ret;
switch (op) {
case '===':
if (typeof a === 'object') { a = a.version; }
if (typeof b === 'object') { b = b.version; }
ret = a === b;
break;
case '!==':
if (typeof a === 'object') { a = a.version; }
if (typeof b === 'object') { b = b.version; }
ret = a !== b;
break;
case '': case '=': case '==': ret = eq(a, b, loose); break;
case '!=': ret = neq(a, b, loose); break;
case '>': ret = gt(a, b, loose); break;
case '>=': ret = gte(a, b, loose); break;
case '<': ret = lt(a, b, loose); break;
case '<=': ret = lte(a, b, loose); break;
default: throw new TypeError('Invalid operator: ' + op);
}
return ret;
}
exports.Comparator = Comparator;
function Comparator(comp, loose) {
if (comp instanceof Comparator) {
if (comp.loose === loose)
{ return comp; }
else
{ comp = comp.value; }
}
if (!(this instanceof Comparator))
{ return new Comparator(comp, loose); }
debug('comparator', comp, loose);
this.loose = loose;
this.parse(comp);
if (this.semver === ANY)
{ this.value = ''; }
else
{ this.value = this.operator + this.semver.version; }
debug('comp', this);
}
var ANY = {};
Comparator.prototype.parse = function(comp) {
var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
var m = comp.match(r);
if (!m)
{ throw new TypeError('Invalid comparator: ' + comp); }
this.operator = m[1];
if (this.operator === '=')
{ this.operator = ''; }
// if it literally is just '>' or '' then allow anything.
if (!m[2])
{ this.semver = ANY; }
else
{ this.semver = new SemVer(m[2], this.loose); }
};
Comparator.prototype.toString = function() {
return this.value;
};
Comparator.prototype.test = function(version) {
debug('Comparator.test', version, this.loose);
if (this.semver === ANY)
{ return true; }
if (typeof version === 'string')
{ version = new SemVer(version, this.loose); }
return cmp(version, this.operator, this.semver, this.loose);
};
Comparator.prototype.intersects = function(comp, loose) {
if (!(comp instanceof Comparator)) {
throw new TypeError('a Comparator is required');
}
var rangeTmp;
if (this.operator === '') {
rangeTmp = new Range(comp.value, loose);
return satisfies(this.value, rangeTmp, loose);
} else if (comp.operator === '') {
rangeTmp = new Range(this.value, loose);
return satisfies(comp.semver, rangeTmp, loose);
}
var sameDirectionIncreasing =
(this.operator === '>=' || this.operator === '>') &&
(comp.operator === '>=' || comp.operator === '>');
var sameDirectionDecreasing =
(this.operator === '<=' || this.operator === '<') &&
(comp.operator === '<=' || comp.operator === '<');
var sameSemVer = this.semver.version === comp.semver.version;
var differentDirectionsInclusive =
(this.operator === '>=' || this.operator === '<=') &&
(comp.operator === '>=' || comp.operator === '<=');
var oppositeDirectionsLessThan =
cmp(this.semver, '<', comp.semver, loose) &&
((this.operator === '>=' || this.operator === '>') &&
(comp.operator === '<=' || comp.operator === '<'));
var oppositeDirectionsGreaterThan =
cmp(this.semver, '>', comp.semver, loose) &&
((this.operator === '<=' || this.operator === '<') &&
(comp.operator === '>=' || comp.operator === '>'));
return sameDirectionIncreasing || sameDirectionDecreasing ||
(sameSemVer && differentDirectionsInclusive) ||
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
};
exports.Range = Range;
function Range(range, loose) {
if (range instanceof Range) {
if (range.loose === loose) {
return range;
} else {
return new Range(range.raw, loose);
}
}
if (range instanceof Comparator) {
return new Range(range.value, loose);
}
if (!(this instanceof Range))
{ return new Range(range, loose); }
this.loose = loose;
// First, split based on boolean or ||
this.raw = range;
this.set = range.split(/\s*\|\|\s*/).map(function(range) {
return this.parseRange(range.trim());
}, this).filter(function(c) {
// throw out any that are not relevant for whatever reason
return c.length;
});
if (!this.set.length) {
throw new TypeError('Invalid SemVer Range: ' + range);
}
this.format();
}
Range.prototype.format = function() {
this.range = this.set.map(function(comps) {
return comps.join(' ').trim();
}).join('||').trim();
return this.range;
};
Range.prototype.toString = function() {
return this.range;
};
Range.prototype.parseRange = function(range) {
var loose = this.loose;
range = range.trim();
debug('range', range, loose);
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE];
range = range.replace(hr, hyphenReplace);
debug('hyphen replace', range);
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);
debug('comparator trim', range, re[COMPARATORTRIM]);
// `~ 1.2.3` => `~1.2.3`
range = range.replace(re[TILDETRIM], tildeTrimReplace);
// `^ 1.2.3` => `^1.2.3`
range = range.replace(re[CARETTRIM], caretTrimReplace);
// normalize spaces
range = range.split(/\s+/).join(' ');
// At this point, the range is completely trimmed and
// ready to be split into comparators.
var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR];
var set = range.split(' ').map(function(comp) {
return parseComparator(comp, loose);
}).join(' ').split(/\s+/);
if (this.loose) {
// in loose mode, throw out any that are not valid comparators
set = set.filter(function(comp) {
return !!comp.match(compRe);
});
}
set = set.map(function(comp) {
return new Comparator(comp, loose);
});
return set;
};
Range.prototype.intersects = function(range, loose) {
if (!(range instanceof Range)) {
throw new TypeError('a Range is required');
}
return this.set.some(function(thisComparators) {
return thisComparators.every(function(thisComparator) {
return range.set.some(function(rangeComparators) {
return rangeComparators.every(function(rangeComparator) {
return thisComparator.intersects(rangeComparator, loose);
});
});
});
});
};
// Mostly just for testing and legacy API reasons
exports.toComparators = toComparators;
function toComparators(range, loose) {
return new Range(range, loose).set.map(function(comp) {
return comp.map(function(c) {
return c.value;
}).join(' ').trim().split(' ');
});
}
// comprised of xranges, tildes, stars, and gtlt's at this point.
// already replaced the hyphen ranges
// turn into a set of JUST comparators.
function parseComparator(comp, loose) {
debug('comp', comp);
comp = replaceCarets(comp, loose);
debug('caret', comp);
comp = replaceTildes(comp, loose);
debug('tildes', comp);
comp = replaceXRanges(comp, loose);
debug('xrange', comp);
comp = replaceStars(comp, loose);
debug('stars', comp);
return comp;
}
function isX(id) {
return !id || id.toLowerCase() === 'x' || id === '*';
}
// ~, ~> --> * (any, kinda silly)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
function replaceTildes(comp, loose) {
return comp.trim().split(/\s+/).map(function(comp) {
return replaceTilde(comp, loose);
}).join(' ');
}
function replaceTilde(comp, loose) {
var r = loose ? re[TILDELOOSE] : re[TILDE];
return comp.replace(r, function(_, M, m, p, pr) {
debug('tilde', comp, _, M, m, p, pr);
var ret;
if (isX(M))
{ ret = ''; }
else if (isX(m))
{ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; }
else if (isX(p))
// ~1.2 == >=1.2.0 <1.3.0
{ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; }
else if (pr) {
debug('replaceTilde pr', pr);
if (pr.charAt(0) !== '-')
{ pr = '-' + pr; }
ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + (+m + 1) + '.0';
} else
// ~1.2.3 == >=1.2.3 <1.3.0
{ ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + (+m + 1) + '.0'; }
debug('tilde return', ret);
return ret;
});
}
// ^ --> * (any, kinda silly)
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
// ^1.2.3 --> >=1.2.3 <2.0.0
// ^1.2.0 --> >=1.2.0 <2.0.0
function replaceCarets(comp, loose) {
return comp.trim().split(/\s+/).map(function(comp) {
return replaceCaret(comp, loose);
}).join(' ');
}
function replaceCaret(comp, loose) {
debug('caret', comp, loose);
var r = loose ? re[CARETLOOSE] : re[CARET];
return comp.replace(r, function(_, M, m, p, pr) {
debug('caret', comp, _, M, m, p, pr);
var ret;
if (isX(M))
{ ret = ''; }
else if (isX(m))
{ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; }
else if (isX(p)) {
if (M === '0')
{ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; }
else
{ ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; }
} else if (pr) {
debug('replaceCaret pr', pr);
if (pr.charAt(0) !== '-')
{ pr = '-' + pr; }
if (M === '0') {
if (m === '0')
{ ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + m + '.' + (+p + 1); }
else
{ ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + (+m + 1) + '.0'; }
} else
{ ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + (+M + 1) + '.0.0'; }
} else {
debug('no pr');
if (M === '0') {
if (m === '0')
{ ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + m + '.' + (+p + 1); }
else
{ ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + (+m + 1) + '.0'; }
} else
{ ret = '>=' + M + '.' + m + '.' + p +
' <' + (+M + 1) + '.0.0'; }
}
debug('caret return', ret);
return ret;
});
}
function replaceXRanges(comp, loose) {
debug('replaceXRanges', comp, loose);
return comp.split(/\s+/).map(function(comp) {
return replaceXRange(comp, loose);
}).join(' ');
}
function replaceXRange(comp, loose) {
comp = comp.trim();
var r = loose ? re[XRANGELOOSE] : re[XRANGE];
return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
debug('xRange', comp, ret, gtlt, M, m, p, pr);
var xM = isX(M);
var xm = xM || isX(m);
var xp = xm || isX(p);
var anyX = xp;
if (gtlt === '=' && anyX)
{ gtlt = ''; }
if (xM) {
if (gtlt === '>' || gtlt === '<') {
// nothing is allowed
ret = '<0.0.0';
} else {
// nothing is forbidden
ret = '*';
}
} else if (gtlt && anyX) {
// replace X with 0
if (xm)
{ m = 0; }
if (xp)
{ p = 0; }
if (gtlt === '>') {
// >1 => >=2.0.0
// >1.2 => >=1.3.0
// >1.2.3 => >= 1.2.4
gtlt = '>=';
if (xm) {
M = +M + 1;
m = 0;
p = 0;
} else if (xp) {
m = +m + 1;
p = 0;
}
} else if (gtlt === '<=') {
// <=0.7.x is actually <0.8.0, since any 0.7.x should
// pass. Similarly, <=7.x is actually <8.0.0, etc.
gtlt = '<';
if (xm)
{ M = +M + 1; }
else
{ m = +m + 1; }
}
ret = gtlt + M + '.' + m + '.' + p;
} else if (xm) {
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
} else if (xp) {
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
}
debug('xRange return', ret);
return ret;
});
}
// Because * is AND-ed with everything else in the comparator,
// and '' means "any version", just remove the *s entirely.
function replaceStars(comp, loose) {
debug('replaceStars', comp, loose);
// Looseness is ignored here. star is always as loose as it gets!
return comp.trim().replace(re[STAR], '');
}
// This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
// 1.2 - 3.4 => >=1.2.0 <3.5.0
function hyphenReplace($0,
from, fM, fm, fp, fpr, fb,
to, tM, tm, tp, tpr, tb) {
if (isX(fM))
{ from = ''; }
else if (isX(fm))
{ from = '>=' + fM + '.0.0'; }
else if (isX(fp))
{ from = '>=' + fM + '.' + fm + '.0'; }
else
{ from = '>=' + from; }
if (isX(tM))
{ to = ''; }
else if (isX(tm))
{ to = '<' + (+tM + 1) + '.0.0'; }
else if (isX(tp))
{ to = '<' + tM + '.' + (+tm + 1) + '.0'; }
else if (tpr)
{ to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; }
else
{ to = '<=' + to; }
return (from + ' ' + to).trim();
}
// if ANY of the sets match ALL of its comparators, then pass
Range.prototype.test = function(version) {
var this$1 = this;
if (!version)
{ return false; }
if (typeof version === 'string')
{ version = new SemVer(version, this.loose); }
for (var i = 0; i < this.set.length; i++) {
if (testSet(this$1.set[i], version))
{ return true; }
}
return false;
};
function testSet(set, version) {
for (var i = 0; i < set.length; i++) {
if (!set[i].test(version))
{ return false; }
}
if (version.prerelease.length) {
// Find the set of versions that are allowed to have prereleases
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
// That should allow `1.2.3-pr.2` to pass.
// However, `1.2.4-alpha.notready` should NOT be allowed,
// even though it's within the range set by the comparators.
for (var i = 0; i < set.length; i++) {
debug(set[i].semver);
if (set[i].semver === ANY)
{ continue; }
if (set[i].semver.prerelease.length > 0) {
var allowed = set[i].semver;
if (allowed.major === version.major &&
allowed.minor === version.minor &&
allowed.patch === version.patch)
{ return true; }
}
}
// Version has a -pre, but it's not one of the ones we like.
return false;
}
return true;
}
exports.satisfies = satisfies;
function satisfies(version, range, loose) {
try {
range = new Range(range, loose);
} catch (er) {
return false;
}
return range.test(version);
}
exports.maxSatisfying = maxSatisfying;
function maxSatisfying(versions, range, loose) {
var max = null;
var maxSV = null;
try {
var rangeObj = new Range(range, loose);
} catch (er) {
return null;
}
versions.forEach(function (v) {
if (rangeObj.test(v)) { // satisfies(v, range, loose)
if (!max || maxSV.compare(v) === -1) { // compare(max, v, true)
max = v;
maxSV = new SemVer(max, loose);
}
}
});
return max;
}
exports.minSatisfying = minSatisfying;
function minSatisfying(versions, range, loose) {
var min = null;
var minSV = null;
try {
var rangeObj = new Range(range, loose);
} catch (er) {
return null;
}
versions.forEach(function (v) {
if (rangeObj.test(v)) { // satisfies(v, range, loose)
if (!min || minSV.compare(v) === 1) { // compare(min, v, true)
min = v;
minSV = new SemVer(min, loose);
}
}
});
return min;
}
exports.validRange = validRange;
function validRange(range, loose) {
try {
// Return '*' instead of '' so that truthiness works.
// This will throw if it's invalid anyway
return new Range(range, loose).range || '*';
} catch (er) {
return null;
}
}
// Determine if version is less than all the versions possible in the range
exports.ltr = ltr;
function ltr(version, range, loose) {
return outside(version, range, '<', loose);
}
// Determine if version is greater than all the versions possible in the range.
exports.gtr = gtr;
function gtr(version, range, loose) {
return outside(version, range, '>', loose);
}
exports.outside = outside;
function outside(version, range, hilo, loose) {
version = new SemVer(version, loose);
range = new Range(range, loose);
var gtfn, ltefn, ltfn, comp, ecomp;
switch (hilo) {
case '>':
gtfn = gt;
ltefn = lte;
ltfn = lt;
comp = '>';
ecomp = '>=';
break;
case '<':
gtfn = lt;
ltefn = gte;
ltfn = gt;
comp = '<';
ecomp = '<=';
break;
default:
throw new TypeError('Must provide a hilo val of "<" or ">"');
}
// If it satisifes the range it is not outside
if (satisfies(version, range, loose)) {
return false;
}
// From now on, variable terms are as if we're in "gtr" mode.
// but note that everything is flipped for the "ltr" function.
for (var i = 0; i < range.set.length; ++i) {
var comparators = range.set[i];
var high = null;
var low = null;
comparators.forEach(function(comparator) {
if (comparator.semver === ANY) {
comparator = new Comparator('>=0.0.0');
}
high = high || comparator;
low = low || comparator;
if (gtfn(comparator.semver, high.semver, loose)) {
high = comparator;
} else if (ltfn(comparator.semver, low.semver, loose)) {
low = comparator;
}
});
// If the edge version comparator has a operator then our version
// isn't outside it
if (high.operator === comp || high.operator === ecomp) {
return false;
}
// If the lowest version comparator has an operator and our version
// is less than it then it isn't higher than the range
if ((!low.operator || low.operator === comp) &&
ltefn(version, low.semver)) {
return false;
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
return false;
}
}
return true;
}
exports.prerelease = prerelease;
function prerelease(version, loose) {
var parsed = parse(version, loose);
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
}
exports.intersects = intersects;
function intersects(r1, r2, loose) {
r1 = new Range(r1, loose);
r2 = new Range(r2, loose);
return r1.intersects(r2)
}
exports.coerce = coerce;
function coerce(version) {
if (version instanceof SemVer)
{ return version; }
if (typeof version !== 'string')
{ return null; }
var match = version.match(re[COERCE]);
if (match == null)
{ return null; }
return parse((match[1] || '0') + '.' + (match[2] || '0') + '.' + (match[3] || '0'));
}
});
var semver_1$1 = semver$1.SEMVER_SPEC_VERSION;
var semver_2$1 = semver$1.re;
var semver_3$1 = semver$1.src;
var semver_4$1 = semver$1.parse;
var semver_5$1 = semver$1.valid;
var semver_6$1 = semver$1.clean;
var semver_7$1 = semver$1.SemVer;
var semver_8$1 = semver$1.inc;
var semver_9$1 = semver$1.diff;
var semver_10$1 = semver$1.compareIdentifiers;
var semver_11$1 = semver$1.rcompareIdentifiers;
var semver_12$1 = semver$1.major;
var semver_13$1 = semver$1.minor;
var semver_14$1 = semver$1.patch;
var semver_15$1 = semver$1.compare;
var semver_16$1 = semver$1.compareLoose;
var semver_17$1 = semver$1.rcompare;
var semver_18$1 = semver$1.sort;
var semver_19$1 = semver$1.rsort;
var semver_20$1 = semver$1.gt;
var semver_21$1 = semver$1.lt;
var semver_22$1 = semver$1.eq;
var semver_23$1 = semver$1.neq;
var semver_24$1 = semver$1.gte;
var semver_25$1 = semver$1.lte;
var semver_26$1 = semver$1.cmp;
var semver_27$1 = semver$1.Comparator;
var semver_28$1 = semver$1.Range;
var semver_29$1 = semver$1.toComparators;
var semver_30$1 = semver$1.satisfies;
var semver_31$1 = semver$1.maxSatisfying;
var semver_32$1 = semver$1.minSatisfying;
var semver_33$1 = semver$1.validRange;
var semver_34$1 = semver$1.ltr;
var semver_35$1 = semver$1.gtr;
var semver_36$1 = semver$1.outside;
var semver_37$1 = semver$1.prerelease;
var semver_38$1 = semver$1.intersects;
var semver_39$1 = semver$1.coerce;
//
function isValidSlot(slot) {
return isVueComponent(slot) || typeof slot === 'string'
}
function requiresTemplateCompiler(slot) {
if (typeof slot === 'string' && !vueTemplateCompiler.compileToFunctions) {
throwError(
"vueTemplateCompiler is undefined, you must pass " +
"precompiled components if vue-template-compiler is " +
"undefined"
);
}
}
function validateSlots(slots) {
Object.keys(slots).forEach(function (key) {
var slot = Array.isArray(slots[key]) ? slots[key] : [slots[key]];
slot.forEach(function (slotValue) {
if (!isValidSlot(slotValue)) {
throwError(
"slots[key] must be a Component, string or an array " +
"of Components"
);
}
requiresTemplateCompiler(slotValue);
});
});
}
function vueExtendUnsupportedOption(option) {
return (
"options." + option + " is not supported for " +
"components created with Vue.extend in Vue < 2.3. " +
"You can set " + option + " to false to mount the component."
)
}
// these options aren't supported if Vue is version < 2.3
// for components using Vue.extend. This is due to a bug
// that means the mixins we use to add properties are not applied
// correctly
var UNSUPPORTED_VERSION_OPTIONS = ['mocks', 'stubs', 'localVue'];
function validateOptions(options, component) {
if (options.parentComponent && !isPlainObject(options.parentComponent)) {
throwError(
"options.parentComponent should be a valid Vue component options object"
);
}
if (!isFunctionalComponent(component) && options.context) {
throwError(
"mount.context can only be used when mounting a functional component"
);
}
if (options.context && !isPlainObject(options.context)) {
throwError('mount.context must be an object');
}
if (VUE_VERSION < 2.3 && isConstructor(component)) {
UNSUPPORTED_VERSION_OPTIONS.forEach(function (option) {
if (options[option]) {
throwError(vueExtendUnsupportedOption(option));
}
});
}
if (options.slots) {
compileTemplateForSlots(options.slots);
// validate slots outside of the createSlots function so
// that we can throw an error without it being caught by
// the Vue error handler
// $FlowIgnore
validateSlots(options.slots);
}
}
//
Vue.config.productionTip = false;
Vue.config.devtools = false;
function getSyncOption(syncOption) {
if (syncOption === false) {
Vue.config.async = true;
return false
}
if (semver$1.lt(Vue.version, '2.5.18')) {
warn(
"Vue Test Utils runs in sync mode by default. Due to bugs, sync mode " +
"requires Vue > 2.5.18. In Vue Test Utils 1.0 sync mode will only be " +
"supported with Vue 2.5.18+ running in development mode. If you are " +
"unable to upgrade, you should rewrite your tests to run asynchronously" +
"you can do this by setting the sync mounting option to false."
);
return COMPAT_SYNC_MODE
}
if (typeof Vue.config.async === 'undefined') {
warn(
"Sync mode only works when Vue runs in dev mode. " +
"Please set Vue to run in dev mode, or set sync to false"
);
}
Vue.config.async = false;
return true
}
function mount(
component,
options
) {
if ( options === void 0 ) options = {};
warnIfNoWindow();
addGlobalErrorHandler(Vue);
var _Vue = createLocalVue(options.localVue);
var mergedOptions = mergeOptions(options, config);
validateOptions(mergedOptions, component);
var parentVm = createInstance(component, mergedOptions, _Vue);
var el = options.attachToDocument ? createElement() : undefined;
var vm = parentVm.$mount(el);
component._Ctor = {};
throwIfInstancesThrew(vm);
var sync = getSyncOption(mergedOptions.sync);
var wrapperOptions = {
attachedToDocument: !!mergedOptions.attachToDocument,
sync: sync
};
var root = parentVm.$options._isFunctionalContainer
? vm._vnode
: vm.$children[0];
return createWrapper(root, wrapperOptions)
}
//
function shallowMount(
component,
options
) {
if ( options === void 0 ) options = {};
return mount(component, Object.assign({}, options,
{shouldProxy: true}))
}
//
var toTypes = [String, Object];
var eventTypes = [String, Array];
var RouterLinkStub = {
name: 'RouterLinkStub',
props: {
to: {
type: toTypes,
required: true
},
tag: {
type: String,
default: 'a'
},
exact: Boolean,
append: Boolean,
replace: Boolean,
activeClass: String,
exactActiveClass: String,
event: {
type: eventTypes,
default: 'click'
}
},
render: function render(h) {
return h(this.tag, undefined, this.$slots.default)
}
}
function shallow(component, options) {
warn(
"shallow has been renamed to shallowMount. shallow " +
"will be removed in 1.0.0, use shallowMount instead"
);
return shallowMount(component, options)
}
var index = {
createLocalVue: createLocalVue,
createWrapper: createWrapper,
config: config,
mount: mount,
shallow: shallow,
shallowMount: shallowMount,
TransitionStub: TransitionStub,
TransitionGroupStub: TransitionGroupStub,
RouterLinkStub: RouterLinkStub,
Wrapper: Wrapper,
WrapperArray: WrapperArray
}
module.exports = index;