vega 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -506,7 +506,6 @@
506
506
  results[i] = applyOperation(document, patch[i], validateOperation, true, banPrototypeModifications, i);
507
507
  document = results[i].newDocument; // in case root was replaced
508
508
  }
509
-
510
509
  results.newDocument = document;
511
510
  return results;
512
511
  }
@@ -877,6 +876,10 @@
877
876
  unescapePathComponent
878
877
  });
879
878
 
879
+ function getDefaultExportFromCjs (x) {
880
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
881
+ }
882
+
880
883
  // Note: This regex matches even invalid JSON strings, but since we’re
881
884
  // working on the output of `JSON.stringify` we know that only valid strings
882
885
  // are present (unless the user supplied a weird `options.indent` but in
@@ -943,6 +946,7 @@
943
946
  return string;
944
947
  }(passedObj, "", 0);
945
948
  };
949
+ var stringify$1 = /*@__PURE__*/getDefaultExportFromCjs(jsonStringifyPrettyCompact);
946
950
 
947
951
  var iterator;
948
952
  var hasRequiredIterator;
@@ -1237,7 +1241,7 @@
1237
1241
  }
1238
1242
  return ret;
1239
1243
  };
1240
- Yallist$1.prototype.splice = function (start, deleteCount) {
1244
+ Yallist$1.prototype.splice = function (start, deleteCount, ...nodes) {
1241
1245
  if (start > this.length) {
1242
1246
  start = this.length - 1;
1243
1247
  }
@@ -1258,8 +1262,8 @@
1258
1262
  if (walker !== this.head && walker !== this.tail) {
1259
1263
  walker = walker.prev;
1260
1264
  }
1261
- for (var i = 0; i < (arguments.length <= 2 ? 0 : arguments.length - 2); i++) {
1262
- walker = insert(this, walker, i + 2 < 2 || arguments.length <= i + 2 ? undefined : arguments[i + 2]);
1265
+ for (var i = 0; i < nodes.length; i++) {
1266
+ walker = insert(this, walker, nodes[i]);
1263
1267
  }
1264
1268
  return ret;
1265
1269
  };
@@ -1442,7 +1446,6 @@
1442
1446
  this[LRU_LIST] = new Yallist(); // list of items in order of use recency
1443
1447
  this[LENGTH] = 0; // length of items in the list
1444
1448
  }
1445
-
1446
1449
  dump() {
1447
1450
  return this[LRU_LIST].map(hit => isStale(this, hit) ? false : {
1448
1451
  k: hit.key,
@@ -1597,22 +1600,23 @@
1597
1600
  };
1598
1601
  var lruCache = LRUCache;
1599
1602
 
1600
- // parse out just the options we care about so we always get a consistent
1601
- // obj with keys in a consistent order.
1602
- const opts = ['includePrerelease', 'loose', 'rtl'];
1603
- const parseOptions$1 = options => !options ? {} : typeof options !== 'object' ? {
1603
+ // parse out just the options we care about
1604
+ const looseOption = Object.freeze({
1604
1605
  loose: true
1605
- } : opts.filter(k => options[k]).reduce((o, k) => {
1606
- o[k] = true;
1607
- return o;
1608
- }, {});
1606
+ });
1607
+ const emptyOpts = Object.freeze({});
1608
+ const parseOptions$1 = options => {
1609
+ if (!options) {
1610
+ return emptyOpts;
1611
+ }
1612
+ if (typeof options !== 'object') {
1613
+ return looseOption;
1614
+ }
1615
+ return options;
1616
+ };
1609
1617
  var parseOptions_1 = parseOptions$1;
1610
1618
 
1611
- var reExports = {};
1612
- var re$1 = {
1613
- get exports(){ return reExports; },
1614
- set exports(v){ reExports = v; },
1615
- };
1619
+ var re$1 = {exports: {}};
1616
1620
 
1617
1621
  // Note: this is the semver.org version of the spec that it implements
1618
1622
  // Not necessarily the package version of this code.
@@ -1622,39 +1626,63 @@
1622
1626
 
1623
1627
  // Max safe segment length for coercion.
1624
1628
  const MAX_SAFE_COMPONENT_LENGTH = 16;
1629
+
1630
+ // Max safe length for a build identifier. The max length minus 6 characters for
1631
+ // the shortest version with a build 0.0.0+BUILD.
1632
+ const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6;
1633
+ const RELEASE_TYPES = ['major', 'premajor', 'minor', 'preminor', 'patch', 'prepatch', 'prerelease'];
1625
1634
  var constants = {
1626
- SEMVER_SPEC_VERSION,
1627
1635
  MAX_LENGTH: MAX_LENGTH$1,
1636
+ MAX_SAFE_COMPONENT_LENGTH,
1637
+ MAX_SAFE_BUILD_LENGTH,
1628
1638
  MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,
1629
- MAX_SAFE_COMPONENT_LENGTH
1639
+ RELEASE_TYPES,
1640
+ SEMVER_SPEC_VERSION,
1641
+ FLAG_INCLUDE_PRERELEASE: 0b001,
1642
+ FLAG_LOOSE: 0b010
1630
1643
  };
1631
1644
 
1632
- const debug$1 = typeof process === 'object' && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? function () {
1633
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1634
- args[_key] = arguments[_key];
1635
- }
1636
- return console.error('SEMVER', ...args);
1637
- } : () => {};
1645
+ const debug$1 = typeof process === 'object' && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error('SEMVER', ...args) : () => {};
1638
1646
  var debug_1 = debug$1;
1639
1647
 
1640
1648
  (function (module, exports) {
1641
1649
  const {
1642
- MAX_SAFE_COMPONENT_LENGTH
1650
+ MAX_SAFE_COMPONENT_LENGTH,
1651
+ MAX_SAFE_BUILD_LENGTH,
1652
+ MAX_LENGTH
1643
1653
  } = constants;
1644
1654
  const debug = debug_1;
1645
1655
  exports = module.exports = {};
1646
1656
 
1647
1657
  // The actual regexps go on exports.re
1648
1658
  const re = exports.re = [];
1659
+ const safeRe = exports.safeRe = [];
1649
1660
  const src = exports.src = [];
1650
1661
  const t = exports.t = {};
1651
1662
  let R = 0;
1663
+ const LETTERDASHNUMBER = '[a-zA-Z0-9-]';
1664
+
1665
+ // Replace some greedy regex tokens to prevent regex dos issues. These regex are
1666
+ // used internally via the safeRe object since all inputs in this library get
1667
+ // normalized first to trim and collapse all extra whitespace. The original
1668
+ // regexes are exported for userland consumption and lower level usage. A
1669
+ // future breaking change could export the safer regex only with a note that
1670
+ // all input should have extra whitespace removed.
1671
+ const safeRegexReplacements = [['\\s', 1], ['\\d', MAX_LENGTH], [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]];
1672
+ const makeSafeRegex = value => {
1673
+ for (const [token, max] of safeRegexReplacements) {
1674
+ value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
1675
+ }
1676
+ return value;
1677
+ };
1652
1678
  const createToken = (name, value, isGlobal) => {
1679
+ const safe = makeSafeRegex(value);
1653
1680
  const index = R++;
1654
1681
  debug(name, index, value);
1655
1682
  t[name] = index;
1656
1683
  src[index] = value;
1657
1684
  re[index] = new RegExp(value, isGlobal ? 'g' : undefined);
1685
+ safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined);
1658
1686
  };
1659
1687
 
1660
1688
  // The following Regular Expressions can be used for tokenizing,
@@ -1664,13 +1692,13 @@
1664
1692
  // A single `0`, or a non-zero digit followed by zero or more digits.
1665
1693
 
1666
1694
  createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*');
1667
- createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+');
1695
+ createToken('NUMERICIDENTIFIERLOOSE', '\\d+');
1668
1696
 
1669
1697
  // ## Non-numeric Identifier
1670
1698
  // Zero or more digits, followed by a letter or hyphen, and then zero or
1671
1699
  // more letters, digits, or hyphens.
1672
1700
 
1673
- createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*');
1701
+ createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
1674
1702
 
1675
1703
  // ## Main Version
1676
1704
  // Three dot-separated numeric identifiers.
@@ -1694,7 +1722,7 @@
1694
1722
  // ## Build Metadata Identifier
1695
1723
  // Any combination of digits, letters, or hyphens.
1696
1724
 
1697
- createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+');
1725
+ createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`);
1698
1726
 
1699
1727
  // ## Build Metadata
1700
1728
  // Plus sign, followed by one or more period-separated build metadata
@@ -1733,8 +1761,11 @@
1733
1761
 
1734
1762
  // Coercion.
1735
1763
  // Extract anything that could conceivably be a part of a valid semver
1736
- createToken('COERCE', `${'(^|[^\\d])' + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:$|[^\\d])`);
1764
+ createToken('COERCEPLAIN', `${'(^|[^\\d])' + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
1765
+ createToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
1766
+ createToken('COERCEFULL', src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?` + `(?:${src[t.BUILD]})?` + `(?:$|[^\\d])`);
1737
1767
  createToken('COERCERTL', src[t.COERCE], true);
1768
+ createToken('COERCERTLFULL', src[t.COERCEFULL], true);
1738
1769
 
1739
1770
  // Tilde ranges.
1740
1771
  // Meaning is "reasonably at or greater than"
@@ -1773,7 +1804,8 @@
1773
1804
  // >=0.0.0 is like a star
1774
1805
  createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$');
1775
1806
  createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$');
1776
- })(re$1, reExports);
1807
+ })(re$1, re$1.exports);
1808
+ var reExports = re$1.exports;
1777
1809
 
1778
1810
  const numeric = /^[0-9]+$/;
1779
1811
  const compareIdentifiers$1 = (a, b) => {
@@ -1797,7 +1829,7 @@
1797
1829
  MAX_SAFE_INTEGER
1798
1830
  } = constants;
1799
1831
  const {
1800
- re,
1832
+ safeRe: re,
1801
1833
  t
1802
1834
  } = reExports;
1803
1835
  const parseOptions = parseOptions_1;
@@ -1814,7 +1846,7 @@
1814
1846
  version = version.version;
1815
1847
  }
1816
1848
  } else if (typeof version !== 'string') {
1817
- throw new TypeError(`Invalid Version: ${version}`);
1849
+ throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`);
1818
1850
  }
1819
1851
  if (version.length > MAX_LENGTH) {
1820
1852
  throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);
@@ -1947,36 +1979,36 @@
1947
1979
 
1948
1980
  // preminor will bump the version up to the next minor release, and immediately
1949
1981
  // down to pre-release. premajor and prepatch work the same way.
1950
- inc(release, identifier) {
1982
+ inc(release, identifier, identifierBase) {
1951
1983
  switch (release) {
1952
1984
  case 'premajor':
1953
1985
  this.prerelease.length = 0;
1954
1986
  this.patch = 0;
1955
1987
  this.minor = 0;
1956
1988
  this.major++;
1957
- this.inc('pre', identifier);
1989
+ this.inc('pre', identifier, identifierBase);
1958
1990
  break;
1959
1991
  case 'preminor':
1960
1992
  this.prerelease.length = 0;
1961
1993
  this.patch = 0;
1962
1994
  this.minor++;
1963
- this.inc('pre', identifier);
1995
+ this.inc('pre', identifier, identifierBase);
1964
1996
  break;
1965
1997
  case 'prepatch':
1966
1998
  // If this is already a prerelease, it will bump to the next version
1967
1999
  // drop any prereleases that might already exist, since they are not
1968
2000
  // relevant at this point.
1969
2001
  this.prerelease.length = 0;
1970
- this.inc('patch', identifier);
1971
- this.inc('pre', identifier);
2002
+ this.inc('patch', identifier, identifierBase);
2003
+ this.inc('pre', identifier, identifierBase);
1972
2004
  break;
1973
2005
  // If the input is a non-prerelease version, this acts the same as
1974
2006
  // prepatch.
1975
2007
  case 'prerelease':
1976
2008
  if (this.prerelease.length === 0) {
1977
- this.inc('patch', identifier);
2009
+ this.inc('patch', identifier, identifierBase);
1978
2010
  }
1979
- this.inc('pre', identifier);
2011
+ this.inc('pre', identifier, identifierBase);
1980
2012
  break;
1981
2013
  case 'major':
1982
2014
  // If this is a pre-major version, bump up to the same major version.
@@ -2014,38 +2046,53 @@
2014
2046
  // This probably shouldn't be used publicly.
2015
2047
  // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
2016
2048
  case 'pre':
2017
- if (this.prerelease.length === 0) {
2018
- this.prerelease = [0];
2019
- } else {
2020
- let i = this.prerelease.length;
2021
- while (--i >= 0) {
2022
- if (typeof this.prerelease[i] === 'number') {
2023
- this.prerelease[i]++;
2024
- i = -2;
2025
- }
2049
+ {
2050
+ const base = Number(identifierBase) ? 1 : 0;
2051
+ if (!identifier && identifierBase === false) {
2052
+ throw new Error('invalid increment argument: identifier is empty');
2026
2053
  }
2027
- if (i === -1) {
2028
- // didn't increment anything
2029
- this.prerelease.push(0);
2054
+ if (this.prerelease.length === 0) {
2055
+ this.prerelease = [base];
2056
+ } else {
2057
+ let i = this.prerelease.length;
2058
+ while (--i >= 0) {
2059
+ if (typeof this.prerelease[i] === 'number') {
2060
+ this.prerelease[i]++;
2061
+ i = -2;
2062
+ }
2063
+ }
2064
+ if (i === -1) {
2065
+ // didn't increment anything
2066
+ if (identifier === this.prerelease.join('.') && identifierBase === false) {
2067
+ throw new Error('invalid increment argument: identifier already exists');
2068
+ }
2069
+ this.prerelease.push(base);
2070
+ }
2030
2071
  }
2031
- }
2032
- if (identifier) {
2033
- // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
2034
- // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
2035
- if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
2036
- if (isNaN(this.prerelease[1])) {
2037
- this.prerelease = [identifier, 0];
2072
+ if (identifier) {
2073
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
2074
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
2075
+ let prerelease = [identifier, base];
2076
+ if (identifierBase === false) {
2077
+ prerelease = [identifier];
2078
+ }
2079
+ if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
2080
+ if (isNaN(this.prerelease[1])) {
2081
+ this.prerelease = prerelease;
2082
+ }
2083
+ } else {
2084
+ this.prerelease = prerelease;
2038
2085
  }
2039
- } else {
2040
- this.prerelease = [identifier, 0];
2041
2086
  }
2087
+ break;
2042
2088
  }
2043
- break;
2044
2089
  default:
2045
2090
  throw new Error(`invalid increment argument: ${release}`);
2046
2091
  }
2047
- this.format();
2048
- this.raw = this.version;
2092
+ this.raw = this.format();
2093
+ if (this.build.length) {
2094
+ this.raw += `+${this.build.join('.')}`;
2095
+ }
2049
2096
  return this;
2050
2097
  }
2051
2098
  };
@@ -2143,6 +2190,7 @@
2143
2190
  comp = comp.value;
2144
2191
  }
2145
2192
  }
2193
+ comp = comp.trim().split(/\s+/).join(' ');
2146
2194
  debug('comparator', comp, options);
2147
2195
  this.options = options;
2148
2196
  this.loose = !!options.loose;
@@ -2193,12 +2241,6 @@
2193
2241
  if (!(comp instanceof Comparator)) {
2194
2242
  throw new TypeError('a Comparator is required');
2195
2243
  }
2196
- if (!options || typeof options !== 'object') {
2197
- options = {
2198
- loose: !!options,
2199
- includePrerelease: false
2200
- };
2201
- }
2202
2244
  if (this.operator === '') {
2203
2245
  if (this.value === '') {
2204
2246
  return true;
@@ -2210,19 +2252,43 @@
2210
2252
  }
2211
2253
  return new Range(this.value, options).test(comp.semver);
2212
2254
  }
2213
- const sameDirectionIncreasing = (this.operator === '>=' || this.operator === '>') && (comp.operator === '>=' || comp.operator === '>');
2214
- const sameDirectionDecreasing = (this.operator === '<=' || this.operator === '<') && (comp.operator === '<=' || comp.operator === '<');
2215
- const sameSemVer = this.semver.version === comp.semver.version;
2216
- const differentDirectionsInclusive = (this.operator === '>=' || this.operator === '<=') && (comp.operator === '>=' || comp.operator === '<=');
2217
- const oppositeDirectionsLessThan = cmp(this.semver, '<', comp.semver, options) && (this.operator === '>=' || this.operator === '>') && (comp.operator === '<=' || comp.operator === '<');
2218
- const oppositeDirectionsGreaterThan = cmp(this.semver, '>', comp.semver, options) && (this.operator === '<=' || this.operator === '<') && (comp.operator === '>=' || comp.operator === '>');
2219
- return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
2255
+ options = parseOptions(options);
2256
+
2257
+ // Special cases where nothing can possibly be lower
2258
+ if (options.includePrerelease && (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {
2259
+ return false;
2260
+ }
2261
+ if (!options.includePrerelease && (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {
2262
+ return false;
2263
+ }
2264
+
2265
+ // Same direction increasing (> or >=)
2266
+ if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {
2267
+ return true;
2268
+ }
2269
+ // Same direction decreasing (< or <=)
2270
+ if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {
2271
+ return true;
2272
+ }
2273
+ // same SemVer and both sides are inclusive (<= or >=)
2274
+ if (this.semver.version === comp.semver.version && this.operator.includes('=') && comp.operator.includes('=')) {
2275
+ return true;
2276
+ }
2277
+ // opposite directions less than
2278
+ if (cmp(this.semver, '<', comp.semver, options) && this.operator.startsWith('>') && comp.operator.startsWith('<')) {
2279
+ return true;
2280
+ }
2281
+ // opposite directions greater than
2282
+ if (cmp(this.semver, '>', comp.semver, options) && this.operator.startsWith('<') && comp.operator.startsWith('>')) {
2283
+ return true;
2284
+ }
2285
+ return false;
2220
2286
  }
2221
2287
  }
2222
2288
  comparator = Comparator;
2223
2289
  const parseOptions = parseOptions_1;
2224
2290
  const {
2225
- re,
2291
+ safeRe: re,
2226
2292
  t
2227
2293
  } = reExports;
2228
2294
  const cmp = cmp_1;
@@ -2259,9 +2325,13 @@
2259
2325
  this.loose = !!options.loose;
2260
2326
  this.includePrerelease = !!options.includePrerelease;
2261
2327
 
2262
- // First, split based on boolean or ||
2263
- this.raw = range;
2264
- this.set = range.split('||')
2328
+ // First reduce all whitespace as much as possible so we do not have to rely
2329
+ // on potentially slow regexes like \s*. This is then stored and used for
2330
+ // future error messages as well.
2331
+ this.raw = range.trim().split(/\s+/).join(' ');
2332
+
2333
+ // First, split on ||
2334
+ this.set = this.raw.split('||')
2265
2335
  // map the range to a 2d array of comparators
2266
2336
  .map(r => this.parseRange(r.trim()))
2267
2337
  // throw out any comparator lists that are empty
@@ -2269,7 +2339,7 @@
2269
2339
  // in loose mode, but will still throw if the WHOLE range is invalid.
2270
2340
  .filter(c => c.length);
2271
2341
  if (!this.set.length) {
2272
- throw new TypeError(`Invalid SemVer Range: ${range}`);
2342
+ throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
2273
2343
  }
2274
2344
 
2275
2345
  // if we have any that are not the null set, throw out null sets.
@@ -2292,21 +2362,17 @@
2292
2362
  this.format();
2293
2363
  }
2294
2364
  format() {
2295
- this.range = this.set.map(comps => {
2296
- return comps.join(' ').trim();
2297
- }).join('||').trim();
2365
+ this.range = this.set.map(comps => comps.join(' ').trim()).join('||').trim();
2298
2366
  return this.range;
2299
2367
  }
2300
2368
  toString() {
2301
2369
  return this.range;
2302
2370
  }
2303
2371
  parseRange(range) {
2304
- range = range.trim();
2305
-
2306
2372
  // memoize range parsing for performance.
2307
2373
  // this is a very hot path, and fully deterministic.
2308
- const memoOpts = Object.keys(this.options).join(',');
2309
- const memoKey = `parseRange:${memoOpts}:${range}`;
2374
+ const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
2375
+ const memoKey = memoOpts + ':' + range;
2310
2376
  const cached = cache.get(memoKey);
2311
2377
  if (cached) {
2312
2378
  return cached;
@@ -2316,18 +2382,18 @@
2316
2382
  const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
2317
2383
  range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
2318
2384
  debug('hyphen replace', range);
2385
+
2319
2386
  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
2320
2387
  range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
2321
2388
  debug('comparator trim', range);
2322
2389
 
2323
2390
  // `~ 1.2.3` => `~1.2.3`
2324
2391
  range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
2392
+ debug('tilde trim', range);
2325
2393
 
2326
2394
  // `^ 1.2.3` => `^1.2.3`
2327
2395
  range = range.replace(re[t.CARETTRIM], caretTrimReplace);
2328
-
2329
- // normalize spaces
2330
- range = range.split(/\s+/).join(' ');
2396
+ debug('caret trim', range);
2331
2397
 
2332
2398
  // At this point, the range is completely trimmed and
2333
2399
  // ready to be split into comparators.
@@ -2407,12 +2473,16 @@
2407
2473
  const debug = debug_1;
2408
2474
  const SemVer = semver;
2409
2475
  const {
2410
- re,
2476
+ safeRe: re,
2411
2477
  t,
2412
2478
  comparatorTrimReplace,
2413
2479
  tildeTrimReplace,
2414
2480
  caretTrimReplace
2415
2481
  } = reExports;
2482
+ const {
2483
+ FLAG_INCLUDE_PRERELEASE,
2484
+ FLAG_LOOSE
2485
+ } = constants;
2416
2486
  const isNullSet = c => c.value === '<0.0.0-0';
2417
2487
  const isAny = c => c.value === '';
2418
2488
 
@@ -2455,9 +2525,9 @@
2455
2525
  // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
2456
2526
  // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
2457
2527
  // ~0.0.1 --> >=0.0.1 <0.1.0-0
2458
- const replaceTildes = (comp, options) => comp.trim().split(/\s+/).map(c => {
2459
- return replaceTilde(c, options);
2460
- }).join(' ');
2528
+ const replaceTildes = (comp, options) => {
2529
+ return comp.trim().split(/\s+/).map(c => replaceTilde(c, options)).join(' ');
2530
+ };
2461
2531
  const replaceTilde = (comp, options) => {
2462
2532
  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
2463
2533
  return comp.replace(r, (_, M, m, p, pr) => {
@@ -2490,9 +2560,9 @@
2490
2560
  // ^1.2.0 --> >=1.2.0 <2.0.0-0
2491
2561
  // ^0.0.1 --> >=0.0.1 <0.0.2-0
2492
2562
  // ^0.1.0 --> >=0.1.0 <0.2.0-0
2493
- const replaceCarets = (comp, options) => comp.trim().split(/\s+/).map(c => {
2494
- return replaceCaret(c, options);
2495
- }).join(' ');
2563
+ const replaceCarets = (comp, options) => {
2564
+ return comp.trim().split(/\s+/).map(c => replaceCaret(c, options)).join(' ');
2565
+ };
2496
2566
  const replaceCaret = (comp, options) => {
2497
2567
  debug('caret', comp, options);
2498
2568
  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
@@ -2539,9 +2609,7 @@
2539
2609
  };
2540
2610
  const replaceXRanges = (comp, options) => {
2541
2611
  debug('replaceXRanges', comp, options);
2542
- return comp.split(/\s+/).map(c => {
2543
- return replaceXRange(c, options);
2544
- }).join(' ');
2612
+ return comp.split(/\s+/).map(c => replaceXRange(c, options)).join(' ');
2545
2613
  };
2546
2614
  const replaceXRange = (comp, options) => {
2547
2615
  comp = comp.trim();
@@ -2697,6 +2765,7 @@
2697
2765
  return range.test(version);
2698
2766
  };
2699
2767
  var satisfies_1 = satisfies;
2768
+ var satisfies$1 = /*@__PURE__*/getDefaultExportFromCjs(satisfies_1);
2700
2769
 
2701
2770
  function adjustSpatial(item, encode, swap) {
2702
2771
  let t;
@@ -2857,6 +2926,8 @@
2857
2926
  test: (r, t) => RegExp(r).test(t)
2858
2927
  };
2859
2928
  const EventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'];
2929
+ const DisallowedMethods = new Set([Function, eval, setTimeout, setInterval]);
2930
+ if (typeof setImmediate === 'function') DisallowedMethods.add(setImmediate);
2860
2931
  const Visitors = {
2861
2932
  Literal: ($, n) => n.value,
2862
2933
  Identifier: ($, n) => {
@@ -2869,17 +2940,24 @@
2869
2940
  if (d) $.memberDepth += 1;
2870
2941
  const p = $(n.property);
2871
2942
  if (d) $.memberDepth -= 1;
2943
+ if (DisallowedMethods.has(o[p])) {
2944
+ // eslint-disable-next-line no-console
2945
+ console.error(`Prevented interpretation of member "${p}" which could lead to insecure code execution`);
2946
+ return;
2947
+ }
2872
2948
  return o[p];
2873
2949
  },
2874
2950
  CallExpression: ($, n) => {
2875
2951
  const args = n.arguments;
2876
- let name = n.callee.name; // handle special internal functions used by encoders
2877
- // re-route to corresponding standard function
2952
+ let name = n.callee.name;
2878
2953
 
2954
+ // handle special internal functions used by encoders
2955
+ // re-route to corresponding standard function
2879
2956
  if (name.startsWith('_')) {
2880
2957
  name = name.slice(1);
2881
- } // special case "if" due to conditional evaluation of branches
2958
+ }
2882
2959
 
2960
+ // special case "if" due to conditional evaluation of branches
2883
2961
  return name === 'if' ? $(args[0]) ? $(args[1]) : $(args[2]) : ($.fn[name] || Functions[name]).apply($.fn, args.map($));
2884
2962
  },
2885
2963
  ArrayExpression: ($, n) => n.elements.map($),
@@ -2891,7 +2969,12 @@
2891
2969
  $.memberDepth += 1;
2892
2970
  const k = $(p.key);
2893
2971
  $.memberDepth -= 1;
2894
- o[k] = $(p.value);
2972
+ if (DisallowedMethods.has($(p.value))) {
2973
+ // eslint-disable-next-line no-console
2974
+ console.error(`Prevented interpretation of property "${k}" which could lead to insecure code execution`);
2975
+ } else {
2976
+ o[k] = $(p.value);
2977
+ }
2895
2978
  return o;
2896
2979
  }, {})
2897
2980
  };
@@ -2902,8 +2985,9 @@
2902
2985
  $.params = params;
2903
2986
  $.datum = datum;
2904
2987
  $.event = event;
2905
- $.item = item; // route event functions to annotated vega event context
2988
+ $.item = item;
2906
2989
 
2990
+ // route event functions to annotated vega event context
2907
2991
  EventFunctions.forEach(f => $.fn[f] = function () {
2908
2992
  return event.vega[f](...arguments);
2909
2993
  });
@@ -2983,7 +3067,7 @@
2983
3067
  }
2984
3068
 
2985
3069
  var name$1 = "vega-themes";
2986
- var version$1$1 = "2.12.1";
3070
+ var version$1$1 = "2.14.0";
2987
3071
  var description$1 = "Themes for stylized Vega and Vega-Lite visualizations.";
2988
3072
  var keywords$1 = ["vega", "vega-lite", "themes", "style"];
2989
3073
  var license$1 = "BSD-3-Clause";
@@ -3024,28 +3108,39 @@
3024
3108
  preversion: "yarn lint",
3025
3109
  serve: "browser-sync start -s -f build examples --serveStatic examples",
3026
3110
  start: "yarn build && concurrently --kill-others -n Server,Rollup 'yarn serve' 'rollup -c -w'",
3027
- prepare: "beemo create-config",
3028
- eslintbase: "beemo eslint .",
3029
- format: "yarn eslintbase --fix",
3030
- lint: "yarn eslintbase",
3111
+ format: "eslint . --fix",
3112
+ lint: "eslint .",
3031
3113
  release: "release-it"
3032
3114
  };
3033
3115
  var devDependencies$1 = {
3034
- "@release-it/conventional-changelog": "^5.1.1",
3116
+ "@babel/core": "^7.22.9",
3117
+ "@babel/plugin-proposal-async-generator-functions": "^7.20.7",
3118
+ "@babel/plugin-proposal-json-strings": "^7.18.6",
3119
+ "@babel/plugin-proposal-object-rest-spread": "^7.20.7",
3120
+ "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
3121
+ "@babel/plugin-transform-runtime": "^7.22.9",
3122
+ "@babel/preset-env": "^7.22.9",
3123
+ "@babel/preset-typescript": "^7.22.5",
3124
+ "@release-it/conventional-changelog": "^7.0.0",
3035
3125
  "@rollup/plugin-json": "^6.0.0",
3036
- "@rollup/plugin-node-resolve": "^15.0.1",
3037
- "@rollup/plugin-terser": "^0.4.0",
3038
- "browser-sync": "^2.27.10",
3039
- concurrently: "^7.3.0",
3126
+ "@rollup/plugin-node-resolve": "^15.1.0",
3127
+ "@rollup/plugin-terser": "^0.4.3",
3128
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
3129
+ "@typescript-eslint/parser": "^6.0.0",
3130
+ "browser-sync": "^2.29.3",
3131
+ concurrently: "^8.2.0",
3132
+ eslint: "^8.45.0",
3133
+ "eslint-config-prettier": "^8.8.0",
3134
+ "eslint-plugin-prettier": "^5.0.0",
3040
3135
  "gh-pages": "^5.0.0",
3041
- "release-it": "^15.6.0",
3136
+ prettier: "^3.0.0",
3137
+ "release-it": "^16.1.0",
3138
+ rollup: "^3.26.2",
3042
3139
  "rollup-plugin-bundle-size": "^1.0.3",
3043
- "rollup-plugin-ts": "^3.0.2",
3044
- rollup: "^3.15.0",
3045
- typescript: "^4.7.4",
3046
- "vega-lite-dev-config": "^0.21.0",
3047
- "vega-lite": "^5.0.0",
3048
- vega: "^5.19.1"
3140
+ "rollup-plugin-ts": "^3.2.0",
3141
+ typescript: "^5.1.6",
3142
+ vega: "^5.25.0",
3143
+ "vega-lite": "^5.9.3"
3049
3144
  };
3050
3145
  var peerDependencies$1 = {
3051
3146
  vega: "*",
@@ -3622,9 +3717,10 @@
3622
3717
  * license that can be found in the LICENSE file or at
3623
3718
  * https://developers.google.com/open-source/licenses/bsd
3624
3719
  */
3720
+
3625
3721
  const markColor = '#3366CC';
3626
3722
  const gridColor = '#ccc';
3627
- const defaultFont = 'Arial, sans-serif';
3723
+ const defaultFont$1 = 'Arial, sans-serif';
3628
3724
  const googlechartsTheme = {
3629
3725
  arc: {
3630
3726
  fill: markColor
@@ -3656,20 +3752,20 @@
3656
3752
  },
3657
3753
  style: {
3658
3754
  'guide-label': {
3659
- font: defaultFont,
3755
+ font: defaultFont$1,
3660
3756
  fontSize: 12
3661
3757
  },
3662
3758
  'guide-title': {
3663
- font: defaultFont,
3759
+ font: defaultFont$1,
3664
3760
  fontSize: 12
3665
3761
  },
3666
3762
  'group-title': {
3667
- font: defaultFont,
3763
+ font: defaultFont$1,
3668
3764
  fontSize: 12
3669
3765
  }
3670
3766
  },
3671
3767
  title: {
3672
- font: defaultFont,
3768
+ font: defaultFont$1,
3673
3769
  fontSize: 14,
3674
3770
  fontWeight: 'bold',
3675
3771
  dy: -3,
@@ -3807,10 +3903,107 @@
3807
3903
  ordinal: ordinalPalette
3808
3904
  }
3809
3905
  };
3906
+ const defaultFont = 'IBM Plex Sans,system-ui,-apple-system,BlinkMacSystemFont,".sfnstext-regular",sans-serif';
3907
+ const fontWeight = 400;
3908
+ const darkCategories = ['#8a3ffc', '#33b1ff', '#007d79', '#ff7eb6', '#fa4d56', '#fff1f1', '#6fdc8c', '#4589ff', '#d12771', '#d2a106', '#08bdba', '#bae6ff', '#ba4e00', '#d4bbff'];
3909
+ const lightCategories = ['#6929c4', '#1192e8', '#005d5d', '#9f1853', '#fa4d56', '#570408', '#198038', '#002d9c', '#ee538b', '#b28600', '#009d9a', '#012749', '#8a3800', '#a56eff'];
3910
+ function genCarbonConfig({
3911
+ type,
3912
+ background
3913
+ }) {
3914
+ const viewbg = type === 'dark' ? '#161616' : '#ffffff';
3915
+ const textColor = type === 'dark' ? '#f4f4f4' : '#161616';
3916
+ const category = type === 'dark' ? darkCategories : lightCategories;
3917
+ const markColor = type === 'dark' ? '#d4bbff' : '#6929c4';
3918
+ return {
3919
+ background,
3920
+ arc: {
3921
+ fill: markColor
3922
+ },
3923
+ area: {
3924
+ fill: markColor
3925
+ },
3926
+ path: {
3927
+ stroke: markColor
3928
+ },
3929
+ rect: {
3930
+ fill: markColor
3931
+ },
3932
+ shape: {
3933
+ stroke: markColor
3934
+ },
3935
+ symbol: {
3936
+ stroke: markColor
3937
+ },
3938
+ circle: {
3939
+ fill: markColor
3940
+ },
3941
+ view: {
3942
+ fill: viewbg,
3943
+ stroke: viewbg
3944
+ },
3945
+ group: {
3946
+ fill: viewbg
3947
+ },
3948
+ title: {
3949
+ color: textColor,
3950
+ anchor: 'start',
3951
+ dy: -15,
3952
+ fontSize: 16,
3953
+ font: defaultFont,
3954
+ fontWeight: 600
3955
+ },
3956
+ axis: {
3957
+ labelColor: textColor,
3958
+ labelFontSize: 12,
3959
+ grid: true,
3960
+ gridColor: '#525252',
3961
+ titleColor: textColor,
3962
+ labelAngle: 0
3963
+ },
3964
+ style: {
3965
+ 'guide-label': {
3966
+ font: defaultFont,
3967
+ fill: textColor,
3968
+ fontWeight: fontWeight
3969
+ },
3970
+ 'guide-title': {
3971
+ font: defaultFont,
3972
+ fill: textColor,
3973
+ fontWeight: fontWeight
3974
+ }
3975
+ },
3976
+ range: {
3977
+ category,
3978
+ diverging: ['#750e13', '#a2191f', '#da1e28', '#fa4d56', '#ff8389', '#ffb3b8', '#ffd7d9', '#fff1f1', '#e5f6ff', '#bae6ff', '#82cfff', '#33b1ff', '#1192e8', '#0072c3', '#00539a', '#003a6d'],
3979
+ heatmap: ['#f6f2ff', '#e8daff', '#d4bbff', '#be95ff', '#a56eff', '#8a3ffc', '#6929c4', '#491d8b', '#31135e', '#1c0f30']
3980
+ }
3981
+ };
3982
+ }
3983
+ const carbonwhite = genCarbonConfig({
3984
+ type: 'light',
3985
+ background: '#ffffff'
3986
+ });
3987
+ const carbong10 = genCarbonConfig({
3988
+ type: 'light',
3989
+ background: '#f4f4f4'
3990
+ });
3991
+ const carbong90 = genCarbonConfig({
3992
+ type: 'dark',
3993
+ background: '#262626'
3994
+ });
3995
+ const carbong100 = genCarbonConfig({
3996
+ type: 'dark',
3997
+ background: '#161616'
3998
+ });
3810
3999
  const version$2 = pkg$1.version;
3811
4000
 
3812
4001
  var themes = /*#__PURE__*/Object.freeze({
3813
4002
  __proto__: null,
4003
+ carbong10: carbong10,
4004
+ carbong100: carbong100,
4005
+ carbong90: carbong90,
4006
+ carbonwhite: carbonwhite,
3814
4007
  dark: darkTheme,
3815
4008
  excel: excelTheme,
3816
4009
  fivethirtyeight: fiveThirtyEightTheme,
@@ -3865,8 +4058,7 @@
3865
4058
  for (i = j = 0; j < n; ++j) {
3866
4059
  c = p[j];
3867
4060
  if (c === '\\') {
3868
- s += p.substring(i, j);
3869
- s += p.substring(++j, ++j);
4061
+ s += p.substring(i, j++);
3870
4062
  i = j;
3871
4063
  } else if (c === q) {
3872
4064
  push();
@@ -3923,59 +4115,35 @@
3923
4115
  return typeof _ === 'string';
3924
4116
  }
3925
4117
 
3926
- /******************************************************************************
3927
- Copyright (c) Microsoft Corporation.
3928
-
3929
- Permission to use, copy, modify, and/or distribute this software for any
3930
- purpose with or without fee is hereby granted.
3931
-
3932
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
3933
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
3934
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
3935
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
3936
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
3937
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
3938
- PERFORMANCE OF THIS SOFTWARE.
3939
- ***************************************************************************** */
3940
-
3941
- function __rest(s, e) {
3942
- var t = {};
3943
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
3944
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
3945
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
3946
- }
3947
- return t;
3948
- }
3949
-
3950
4118
  /**
3951
4119
  * Format the value to be shown in the tooltip.
3952
4120
  *
3953
4121
  * @param value The value to show in the tooltip.
3954
4122
  * @param valueToHtml Function to convert a single cell value to an HTML string
3955
4123
  */
3956
- function formatValue(value, valueToHtml, maxDepth) {
4124
+ function formatValue(value, valueToHtml, maxDepth, baseURL) {
3957
4125
  if (isArray(value)) {
3958
4126
  return `[${value.map(v => valueToHtml(isString(v) ? v : stringify(v, maxDepth))).join(', ')}]`;
3959
4127
  }
3960
4128
  if (isObject(value)) {
3961
4129
  let content = '';
3962
- const _a = value,
3963
- {
3964
- title,
3965
- image
3966
- } = _a,
3967
- rest = __rest(_a, ["title", "image"]);
4130
+ const {
4131
+ title,
4132
+ image,
4133
+ ...rest
4134
+ } = value;
3968
4135
  if (title) {
3969
4136
  content += `<h2>${valueToHtml(title)}</h2>`;
3970
4137
  }
3971
4138
  if (image) {
3972
- content += `<img src="${valueToHtml(image)}">`;
4139
+ content += `<img src="${new URL(valueToHtml(image), baseURL || location.href).href}">`;
3973
4140
  }
3974
4141
  const keys = Object.keys(rest);
3975
4142
  if (keys.length > 0) {
3976
4143
  content += '<table>';
3977
4144
  for (const key of keys) {
3978
4145
  let val = rest[key];
4146
+
3979
4147
  // ignore undefined properties
3980
4148
  if (val === undefined) {
3981
4149
  continue;
@@ -3983,13 +4151,12 @@
3983
4151
  if (isObject(val)) {
3984
4152
  val = stringify(val, maxDepth);
3985
4153
  }
3986
- content += `<tr><td class="key">${valueToHtml(key)}:</td><td class="value">${valueToHtml(val)}</td></tr>`;
4154
+ content += `<tr><td class="key">${valueToHtml(key)}</td><td class="value">${valueToHtml(val)}</td></tr>`;
3987
4155
  }
3988
4156
  content += `</table>`;
3989
4157
  }
3990
4158
  return content || '{}'; // show empty object if there are no properties
3991
4159
  }
3992
-
3993
4160
  return valueToHtml(value);
3994
4161
  }
3995
4162
  function replacer(maxDepth) {
@@ -4010,6 +4177,7 @@
4010
4177
  return value;
4011
4178
  };
4012
4179
  }
4180
+
4013
4181
  /**
4014
4182
  * Stringify any JS object to valid JSON
4015
4183
  */
@@ -4040,10 +4208,6 @@
4040
4208
  margin-bottom: 10px;
4041
4209
  font-size: 13px;
4042
4210
  }
4043
- #vg-tooltip-element img {
4044
- max-width: 200px;
4045
- max-height: 200px;
4046
- }
4047
4211
  #vg-tooltip-element table {
4048
4212
  border-spacing: 0;
4049
4213
  }
@@ -4119,9 +4283,14 @@
4119
4283
  * A function to customize the rendered HTML of the tooltip.
4120
4284
  * @param value A value string, or object of value strings keyed by field
4121
4285
  * @param sanitize The `sanitize` function from `options.sanitize`
4286
+ * @param baseURL The `baseURL` from `options.baseURL`
4122
4287
  * @returns {string} The returned string will become the `innerHTML` of the tooltip element
4123
4288
  */
4124
- formatTooltip: formatValue
4289
+ formatTooltip: formatValue,
4290
+ /**
4291
+ * The baseurl to use in image paths.
4292
+ */
4293
+ baseURL: ''
4125
4294
  };
4126
4295
  /**
4127
4296
  * Escape special HTML characters.
@@ -4166,17 +4335,34 @@
4166
4335
  * The tooltip handler class.
4167
4336
  */
4168
4337
  class Handler {
4338
+ /**
4339
+ * The handler function. We bind this to this function in the constructor.
4340
+ */
4341
+
4342
+ /**
4343
+ * Complete tooltip options.
4344
+ */
4345
+
4346
+ /**
4347
+ * The tooltip html element.
4348
+ */
4349
+
4169
4350
  /**
4170
4351
  * Create the tooltip handler and initialize the element and style.
4171
4352
  *
4172
4353
  * @param options Tooltip Options
4173
4354
  */
4174
4355
  constructor(options) {
4175
- this.options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);
4356
+ this.options = {
4357
+ ...DEFAULT_OPTIONS,
4358
+ ...options
4359
+ };
4176
4360
  const elementId = this.options.id;
4177
4361
  this.el = null;
4362
+
4178
4363
  // bind this to call
4179
4364
  this.call = this.tooltipHandler.bind(this);
4365
+
4180
4366
  // prepend a default stylesheet for tooltips to the head
4181
4367
  if (!this.options.disableDefaultStyle && !document.getElementById(this.options.styleId)) {
4182
4368
  const style = document.createElement('style');
@@ -4190,28 +4376,32 @@
4190
4376
  }
4191
4377
  }
4192
4378
  }
4379
+
4193
4380
  /**
4194
4381
  * The tooltip handler function.
4195
4382
  */
4196
4383
  tooltipHandler(handler, event, item, value) {
4197
4384
  // console.log(handler, event, item, value);
4198
- var _a;
4385
+
4199
4386
  // append a div element that we use as a tooltip unless it already exists
4200
4387
  this.el = document.getElementById(this.options.id);
4201
4388
  if (!this.el) {
4202
4389
  this.el = document.createElement('div');
4203
4390
  this.el.setAttribute('id', this.options.id);
4204
4391
  this.el.classList.add('vg-tooltip');
4205
- const tooltipContainer = (_a = document.fullscreenElement) !== null && _a !== void 0 ? _a : document.body;
4392
+ const tooltipContainer = document.fullscreenElement ?? document.body;
4206
4393
  tooltipContainer.appendChild(this.el);
4207
4394
  }
4395
+
4208
4396
  // hide tooltip for null, undefined, or empty string values
4209
4397
  if (value == null || value === '') {
4210
4398
  this.el.classList.remove('visible', `${this.options.theme}-theme`);
4211
4399
  return;
4212
4400
  }
4401
+
4213
4402
  // set the tooltip content
4214
- this.el.innerHTML = this.options.formatTooltip(value, this.options.sanitize, this.options.maxDepth);
4403
+ this.el.innerHTML = this.options.formatTooltip(value, this.options.sanitize, this.options.maxDepth, this.options.baseURL);
4404
+
4215
4405
  // make the tooltip visible
4216
4406
  this.el.classList.add('visible', `${this.options.theme}-theme`);
4217
4407
  const {
@@ -4378,20 +4568,10 @@
4378
4568
  }
4379
4569
  `;
4380
4570
 
4381
- // polyfill for IE
4382
- if (!String.prototype.startsWith) {
4383
- // eslint-disable-next-line no-extend-native,func-names
4384
- String.prototype.startsWith = function (search, pos) {
4385
- return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
4386
- };
4387
- }
4388
4571
  function isURL(s) {
4389
4572
  return s.startsWith('http://') || s.startsWith('https://') || s.startsWith('//');
4390
4573
  }
4391
- function mergeDeep(dest) {
4392
- for (var _len = arguments.length, src = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
4393
- src[_key - 1] = arguments[_key];
4394
- }
4574
+ function mergeDeep(dest, ...src) {
4395
4575
  for (const s of src) {
4396
4576
  deepMerge_(dest, s);
4397
4577
  }
@@ -4404,7 +4584,7 @@
4404
4584
  }
4405
4585
 
4406
4586
  var name = "vega-embed";
4407
- var version$1 = "6.21.3";
4587
+ var version$1 = "6.25.0";
4408
4588
  var description = "Publish Vega visualizations as embedded web components.";
4409
4589
  var keywords = ["vega", "data", "visualization", "component", "embed"];
4410
4590
  var repository = {
@@ -4429,31 +4609,41 @@
4429
4609
  var unpkg = "build/vega-embed.min.js";
4430
4610
  var jsdelivr = "build/vega-embed.min.js";
4431
4611
  var types = "build/vega-embed.module.d.ts";
4432
- var files = ["src", "build", "build-es5", "patches"];
4612
+ var files = ["src", "build"];
4433
4613
  var devDependencies = {
4434
- "@babel/plugin-transform-runtime": "^7.19.6",
4435
- "@release-it/conventional-changelog": "^5.1.1",
4436
- "@rollup/plugin-commonjs": "24.0.1",
4437
- "@rollup/plugin-json": "^6.0.0",
4438
- "@rollup/plugin-node-resolve": "^15.0.1",
4439
- "@rollup/plugin-terser": "^0.4.0",
4440
- "@types/semver": "^7.3.13",
4441
- "browser-sync": "^2.27.11",
4442
- concurrently: "^7.6.0",
4443
- "del-cli": "^5.0.0",
4444
- "jest-canvas-mock": "^2.4.0",
4445
- "jest-environment-jsdom": "^29.4.3",
4446
- "patch-package": "^6.5.1",
4614
+ "@babel/core": "^7.24.4",
4615
+ "@babel/plugin-transform-runtime": "^7.24.3",
4616
+ "@babel/preset-env": "^7.24.4",
4617
+ "@babel/preset-typescript": "^7.24.1",
4618
+ "@release-it/conventional-changelog": "^8.0.1",
4619
+ "@rollup/plugin-commonjs": "25.0.7",
4620
+ "@rollup/plugin-json": "^6.1.0",
4621
+ "@rollup/plugin-node-resolve": "^15.2.3",
4622
+ "@rollup/plugin-terser": "^0.4.4",
4623
+ "@types/jest": "^29.5.12",
4624
+ "@types/semver": "^7.5.8",
4625
+ "@typescript-eslint/eslint-plugin": "^7.6.0",
4626
+ "@typescript-eslint/parser": "^7.6.0",
4627
+ "browser-sync": "^3.0.2",
4628
+ concurrently: "^8.2.2",
4629
+ "del-cli": "^5.1.0",
4630
+ eslint: "^8.56.0",
4631
+ "eslint-config-prettier": "^9.1.0",
4632
+ "eslint-plugin-jest": "^28.2.0",
4633
+ "eslint-plugin-prettier": "^5.1.3",
4634
+ jest: "^29.7.0",
4635
+ "jest-canvas-mock": "^2.5.2",
4636
+ "jest-environment-jsdom": "^29.7.0",
4447
4637
  "postinstall-postinstall": "^2.1.0",
4448
- "release-it": "^15.6.0",
4638
+ prettier: "^3.2.5",
4639
+ "release-it": "^17.1.1",
4640
+ rollup: "4.14.1",
4449
4641
  "rollup-plugin-bundle-size": "^1.0.3",
4450
- "rollup-plugin-ts": "^3.2.0",
4451
- rollup: "3.15.0",
4452
- sass: "^1.58.1",
4453
- typescript: "^4.9.5",
4454
- "vega-lite-dev-config": "^0.21.0",
4455
- "vega-lite": "^5.2.0",
4456
- vega: "^5.22.1"
4642
+ "rollup-plugin-ts": "^3.4.5",
4643
+ sass: "^1.74.1",
4644
+ typescript: "^5.4.5",
4645
+ vega: "^5.22.1",
4646
+ "vega-lite": "^5.2.0"
4457
4647
  };
4458
4648
  var peerDependencies = {
4459
4649
  vega: "^5.21.0",
@@ -4462,31 +4652,28 @@
4462
4652
  var dependencies = {
4463
4653
  "fast-json-patch": "^3.1.1",
4464
4654
  "json-stringify-pretty-compact": "^3.0.0",
4465
- semver: "^7.3.8",
4466
- tslib: "^2.5.0",
4467
- "vega-interpreter": "^1.0.4",
4655
+ semver: "^7.6.0",
4656
+ tslib: "^2.6.2",
4657
+ "vega-interpreter": "^1.0.5",
4468
4658
  "vega-schema-url-parser": "^2.2.0",
4469
- "vega-themes": "^2.12.1",
4470
- "vega-tooltip": "^0.30.1"
4659
+ "vega-themes": "^2.14.0",
4660
+ "vega-tooltip": "^0.34.0"
4471
4661
  };
4472
- var bundledDependencies = ["yallist"];
4473
4662
  var scripts = {
4474
4663
  prebuild: "yarn clean && yarn build:style",
4475
4664
  build: "rollup -c",
4476
4665
  "build:style": "./build-style.sh",
4477
- clean: "del-cli build build-es5 src/style.ts",
4666
+ clean: "del-cli build src/style.ts",
4478
4667
  prepublishOnly: "yarn clean && yarn build",
4479
4668
  preversion: "yarn lint && yarn test",
4480
4669
  serve: "browser-sync start --directory -s -f build *.html",
4481
4670
  start: "yarn build && concurrently --kill-others -n Server,Rollup 'yarn serve' 'rollup -c -w'",
4482
4671
  pretest: "yarn build:style",
4483
- test: "beemo jest --stdio stream",
4672
+ test: "jest",
4484
4673
  "test:inspect": "node --inspect-brk ./node_modules/.bin/jest --runInBand",
4485
- prepare: "beemo create-config && npx patch-package",
4486
- prettierbase: "beemo prettier '*.{css,scss,html}'",
4487
- eslintbase: "beemo eslint .",
4488
- format: "yarn eslintbase --fix && yarn prettierbase --write",
4489
- lint: "yarn eslintbase && yarn prettierbase --check",
4674
+ prettierbase: "prettier '*.{css,scss,html}'",
4675
+ format: "eslint . --fix && yarn prettierbase --write",
4676
+ lint: "eslint . && yarn prettierbase --check",
4490
4677
  release: "release-it"
4491
4678
  };
4492
4679
  var pkg = {
@@ -4509,18 +4696,16 @@
4509
4696
  devDependencies: devDependencies,
4510
4697
  peerDependencies: peerDependencies,
4511
4698
  dependencies: dependencies,
4512
- bundledDependencies: bundledDependencies,
4513
4699
  scripts: scripts
4514
4700
  };
4515
4701
 
4516
- var _w$vl;
4517
4702
  const version = pkg.version;
4518
4703
  const vega = vegaImport__namespace;
4519
4704
  let vegaLite = vegaLiteImport__namespace;
4520
4705
 
4521
4706
  // For backwards compatibility with Vega-Lite before v4.
4522
4707
  const w = typeof window !== 'undefined' ? window : undefined;
4523
- if (vegaLite === undefined && w !== null && w !== void 0 && (_w$vl = w.vl) !== null && _w$vl !== void 0 && _w$vl.compile) {
4708
+ if (vegaLite === undefined && w?.vl?.compile) {
4524
4709
  vegaLite = w.vl;
4525
4710
  }
4526
4711
  const DEFAULT_ACTIONS = {
@@ -4586,7 +4771,7 @@
4586
4771
  console.warn(`The given visualization spec is written in ${NAMES[parsed.library]}, but mode argument sets ${NAMES[providedMode] ?? providedMode}.`);
4587
4772
  }
4588
4773
  const mode = parsed.library;
4589
- if (!satisfies_1(VERSION[mode], `^${parsed.version.slice(1)}`)) {
4774
+ if (!satisfies$1(VERSION[mode], `^${parsed.version.slice(1)}`)) {
4590
4775
  console.warn(`The input spec uses ${NAMES[mode]} ${parsed.version}, but the current version of ${NAMES[mode]} is v${VERSION[mode]}.`);
4591
4776
  }
4592
4777
  return mode;
@@ -4608,8 +4793,7 @@
4608
4793
  return isLoader(opts) ? opts : vega.loader(opts);
4609
4794
  }
4610
4795
  function embedOptionsFromUsermeta(parsedSpec) {
4611
- var _parsedSpec$usermeta;
4612
- const opts = ((_parsedSpec$usermeta = parsedSpec.usermeta) === null || _parsedSpec$usermeta === void 0 ? void 0 : _parsedSpec$usermeta.embedOptions) ?? {};
4796
+ const opts = parsedSpec.usermeta?.embedOptions ?? {};
4613
4797
  if (vegaImport.isString(opts.defaultStyle)) {
4614
4798
  // we don't allow styles set via usermeta since it would allow injection of logic (we set the style via innerHTML)
4615
4799
  opts.defaultStyle = false;
@@ -4625,8 +4809,7 @@
4625
4809
  * Object : The Vega/Vega-Lite specification as a parsed JSON object.
4626
4810
  * @param opts A JavaScript object containing options for embedding.
4627
4811
  */
4628
- async function embed(el, spec) {
4629
- let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
4812
+ async function embed(el, spec, opts = {}) {
4630
4813
  let parsedSpec;
4631
4814
  let loader;
4632
4815
  if (vegaImport.isString(spec)) {
@@ -4673,9 +4856,7 @@
4673
4856
  rootContainer: document.head ?? document.body
4674
4857
  };
4675
4858
  }
4676
- async function _embed(el, spec) {
4677
- let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
4678
- let loader = arguments.length > 3 ? arguments[3] : undefined;
4859
+ async function _embed(el, spec, opts = {}, loader) {
4679
4860
  const config = opts.theme ? vegaImport.mergeConfig(themes[opts.theme], opts.config ?? {}) : opts.config;
4680
4861
  const actions = vegaImport.isBoolean(opts.actions) ? opts.actions : mergeDeep({}, DEFAULT_ACTIONS, opts.actions ?? {});
4681
4862
  const i18n = {
@@ -4707,7 +4888,7 @@
4707
4888
  if (mode === 'vega-lite') {
4708
4889
  if (vgSpec.$schema) {
4709
4890
  const parsed = e(vgSpec.$schema);
4710
- if (!satisfies_1(VERSION.vega, `^${parsed.version.slice(1)}`)) {
4891
+ if (!satisfies$1(VERSION.vega, `^${parsed.version.slice(1)}`)) {
4711
4892
  console.warn(`The compiled spec uses Vega ${parsed.version}, but current version is v${VERSION.vega}.`);
4712
4893
  }
4713
4894
  }
@@ -4783,9 +4964,17 @@
4783
4964
  }
4784
4965
  });
4785
4966
  if (opts.tooltip !== false) {
4786
- const handler = isTooltipHandler(opts.tooltip) ? opts.tooltip :
4967
+ const {
4968
+ loader: loader_,
4969
+ tooltip
4970
+ } = opts;
4971
+ const baseURL = loader_ && !isLoader(loader_) ? loader_?.baseURL : undefined;
4972
+ const handler = isTooltipHandler(tooltip) ? tooltip :
4787
4973
  // user provided boolean true or tooltip options
4788
- new Handler(opts.tooltip === true ? {} : opts.tooltip).call;
4974
+ new Handler({
4975
+ baseURL,
4976
+ ...(tooltip === true ? {} : tooltip)
4977
+ }).call;
4789
4978
  view.tooltip(handler);
4790
4979
  }
4791
4980
  let {
@@ -4816,7 +5005,7 @@
4816
5005
  let documentClickHandler;
4817
5006
  if (actions !== false) {
4818
5007
  let wrapper = element;
4819
- if (opts.defaultStyle !== false) {
5008
+ if (opts.defaultStyle !== false || opts.forceActionsMenu) {
4820
5009
  const details = document.createElement('details');
4821
5010
  details.title = i18n.CLICK_TO_VIEW_ACTIONS;
4822
5011
  element.append(details);
@@ -4863,7 +5052,7 @@
4863
5052
  viewSourceLink.text = i18n.SOURCE_ACTION;
4864
5053
  viewSourceLink.href = '#';
4865
5054
  viewSourceLink.addEventListener('click', function (e) {
4866
- viewSource(jsonStringifyPrettyCompact(spec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', mode);
5055
+ viewSource(stringify$1(spec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', mode);
4867
5056
  e.preventDefault();
4868
5057
  });
4869
5058
  ctrl.append(viewSourceLink);
@@ -4875,7 +5064,7 @@
4875
5064
  compileLink.text = i18n.COMPILED_ACTION;
4876
5065
  compileLink.href = '#';
4877
5066
  compileLink.addEventListener('click', function (e) {
4878
- viewSource(jsonStringifyPrettyCompact(vgSpec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', 'vega');
5067
+ viewSource(stringify$1(vgSpec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', 'vega');
4879
5068
  e.preventDefault();
4880
5069
  });
4881
5070
  ctrl.append(compileLink);
@@ -4892,7 +5081,7 @@
4892
5081
  config: config,
4893
5082
  mode,
4894
5083
  renderer,
4895
- spec: jsonStringifyPrettyCompact(spec)
5084
+ spec: stringify$1(spec)
4896
5085
  });
4897
5086
  e.preventDefault();
4898
5087
  });
@@ -4920,8 +5109,7 @@
4920
5109
  *
4921
5110
  * The main use case is in [Observable](https://observablehq.com/).
4922
5111
  */
4923
- async function container (spec) {
4924
- let opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
5112
+ async function container (spec, opt = {}) {
4925
5113
  const wrapper = document.createElement('div');
4926
5114
  wrapper.classList.add('vega-embed-wrapper');
4927
5115
  const div = document.createElement('div');
@@ -4931,11 +5119,11 @@
4931
5119
  source: false,
4932
5120
  compiled: true,
4933
5121
  editor: true,
4934
- ...(opt.actions ?? {})
5122
+ ...opt.actions
4935
5123
  };
4936
5124
  const result = await embed(div, spec, {
4937
5125
  actions,
4938
- ...(opt ?? {})
5126
+ ...opt
4939
5127
  });
4940
5128
  wrapper.value = result.view;
4941
5129
  return wrapper;
@@ -4947,11 +5135,11 @@
4947
5135
  function isElement(obj) {
4948
5136
  return obj instanceof HTMLElement;
4949
5137
  }
4950
- const wrapper = function () {
4951
- if (arguments.length > 1 && (vegaImport.isString(arguments.length <= 0 ? undefined : arguments[0]) && !isURL(arguments.length <= 0 ? undefined : arguments[0]) || isElement(arguments.length <= 0 ? undefined : arguments[0]) || arguments.length === 3)) {
4952
- return embed(arguments.length <= 0 ? undefined : arguments[0], arguments.length <= 1 ? undefined : arguments[1], arguments.length <= 2 ? undefined : arguments[2]);
5138
+ const wrapper = (...args) => {
5139
+ if (args.length > 1 && (vegaImport.isString(args[0]) && !isURL(args[0]) || isElement(args[0]) || args.length === 3)) {
5140
+ return embed(args[0], args[1], args[2]);
4953
5141
  }
4954
- return container(arguments.length <= 0 ? undefined : arguments[0], arguments.length <= 1 ? undefined : arguments[1]);
5142
+ return container(args[0], args[1]);
4955
5143
  };
4956
5144
  wrapper.vegaLite = vegaLite;
4957
5145
  wrapper.vl = vegaLite; // backwards compatibility