melonjs 16.1.0 → 16.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +1 -0
  2. package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +1 -1
  3. package/dist/melonjs.mjs/_virtual/earcut.js +1 -1
  4. package/dist/melonjs.mjs/_virtual/howler.js +1 -1
  5. package/dist/melonjs.mjs/_virtual/index.js +1 -1
  6. package/dist/melonjs.mjs/_virtual/re.js +10 -0
  7. package/dist/melonjs.mjs/application/application.js +1 -1
  8. package/dist/melonjs.mjs/application/header.js +1 -1
  9. package/dist/melonjs.mjs/application/resize.js +1 -1
  10. package/dist/melonjs.mjs/application/settings.js +1 -1
  11. package/dist/melonjs.mjs/audio/audio.js +1 -1
  12. package/dist/melonjs.mjs/camera/camera2d.js +1 -1
  13. package/dist/melonjs.mjs/const.js +1 -1
  14. package/dist/melonjs.mjs/geometries/ellipse.js +1 -1
  15. package/dist/melonjs.mjs/geometries/line.js +1 -1
  16. package/dist/melonjs.mjs/geometries/path2d.js +1 -1
  17. package/dist/melonjs.mjs/geometries/point.js +1 -1
  18. package/dist/melonjs.mjs/geometries/poly.js +1 -1
  19. package/dist/melonjs.mjs/geometries/rectangle.js +1 -1
  20. package/dist/melonjs.mjs/geometries/roundrect.js +1 -1
  21. package/dist/melonjs.mjs/geometries/toarccanvas.js +1 -1
  22. package/dist/melonjs.mjs/index.js +2 -2
  23. package/dist/melonjs.mjs/input/gamepad.js +1 -1
  24. package/dist/melonjs.mjs/input/input.js +1 -1
  25. package/dist/melonjs.mjs/input/keyboard.js +1 -1
  26. package/dist/melonjs.mjs/input/pointer.js +1 -1
  27. package/dist/melonjs.mjs/input/pointerevent.js +1 -1
  28. package/dist/melonjs.mjs/lang/console.js +1 -1
  29. package/dist/melonjs.mjs/lang/deprecated.js +1 -1
  30. package/dist/melonjs.mjs/level/level.js +1 -1
  31. package/dist/melonjs.mjs/level/tiled/TMXGroup.js +1 -1
  32. package/dist/melonjs.mjs/level/tiled/TMXLayer.js +1 -1
  33. package/dist/melonjs.mjs/level/tiled/TMXObject.js +1 -1
  34. package/dist/melonjs.mjs/level/tiled/TMXTile.js +1 -1
  35. package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +1 -1
  36. package/dist/melonjs.mjs/level/tiled/TMXTileset.js +1 -1
  37. package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +1 -1
  38. package/dist/melonjs.mjs/level/tiled/TMXUtils.js +1 -1
  39. package/dist/melonjs.mjs/level/tiled/constants.js +1 -1
  40. package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
  41. package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
  42. package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
  43. package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +1 -1
  44. package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
  45. package/dist/melonjs.mjs/level/tiled/renderer/autodetect.js +1 -1
  46. package/dist/melonjs.mjs/loader/cache.js +1 -1
  47. package/dist/melonjs.mjs/loader/loader.js +1 -1
  48. package/dist/melonjs.mjs/loader/loadingscreen.js +1 -1
  49. package/dist/melonjs.mjs/loader/melonjs_logo.png.js +1 -1
  50. package/dist/melonjs.mjs/loader/parsers/binary.js +1 -1
  51. package/dist/melonjs.mjs/loader/parsers/fetchdata.js +1 -1
  52. package/dist/melonjs.mjs/loader/parsers/fontface.js +1 -1
  53. package/dist/melonjs.mjs/loader/parsers/image.js +1 -1
  54. package/dist/melonjs.mjs/loader/parsers/json.js +1 -1
  55. package/dist/melonjs.mjs/loader/parsers/script.js +1 -1
  56. package/dist/melonjs.mjs/loader/parsers/tmx.js +1 -1
  57. package/dist/melonjs.mjs/loader/parsers/video.js +3 -2
  58. package/dist/melonjs.mjs/loader/settings.js +1 -1
  59. package/dist/melonjs.mjs/math/color.js +1 -1
  60. package/dist/melonjs.mjs/math/math.js +1 -1
  61. package/dist/melonjs.mjs/math/matrix2.js +1 -1
  62. package/dist/melonjs.mjs/math/matrix3.js +1 -1
  63. package/dist/melonjs.mjs/math/observable_vector2.js +1 -1
  64. package/dist/melonjs.mjs/math/observable_vector3.js +1 -1
  65. package/dist/melonjs.mjs/math/vector2.js +1 -1
  66. package/dist/melonjs.mjs/math/vector3.js +1 -1
  67. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/arraymultimap.js +1 -1
  68. package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/esm/multimap.js +1 -1
  69. package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +1 -1
  70. package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +1 -1
  71. package/dist/melonjs.mjs/node_modules/eventemitter3/index2.js +1 -1
  72. package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +1 -1
  73. package/dist/melonjs.mjs/node_modules/semver/classes/comparator.js +165 -0
  74. package/dist/melonjs.mjs/node_modules/semver/classes/range.js +564 -0
  75. package/dist/melonjs.mjs/node_modules/semver/classes/semver.js +317 -0
  76. package/dist/melonjs.mjs/node_modules/semver/functions/clean.js +17 -0
  77. package/dist/melonjs.mjs/node_modules/semver/functions/cmp.js +68 -0
  78. package/dist/melonjs.mjs/node_modules/semver/functions/coerce.js +73 -0
  79. package/dist/melonjs.mjs/node_modules/semver/functions/compare-build.js +18 -0
  80. package/dist/melonjs.mjs/node_modules/semver/functions/compare-loose.js +14 -0
  81. package/dist/melonjs.mjs/node_modules/semver/functions/compare.js +16 -0
  82. package/dist/melonjs.mjs/node_modules/semver/functions/diff.js +76 -0
  83. package/dist/melonjs.mjs/node_modules/semver/functions/eq.js +14 -0
  84. package/dist/melonjs.mjs/node_modules/semver/functions/gt.js +14 -0
  85. package/dist/melonjs.mjs/node_modules/semver/functions/gte.js +14 -0
  86. package/dist/melonjs.mjs/node_modules/semver/functions/inc.js +30 -0
  87. package/dist/melonjs.mjs/node_modules/semver/functions/lt.js +14 -0
  88. package/dist/melonjs.mjs/node_modules/semver/functions/lte.js +14 -0
  89. package/dist/melonjs.mjs/node_modules/semver/functions/major.js +14 -0
  90. package/dist/melonjs.mjs/node_modules/semver/functions/minor.js +14 -0
  91. package/dist/melonjs.mjs/node_modules/semver/functions/neq.js +14 -0
  92. package/dist/melonjs.mjs/node_modules/semver/functions/parse.js +27 -0
  93. package/dist/melonjs.mjs/node_modules/semver/functions/patch.js +14 -0
  94. package/dist/melonjs.mjs/node_modules/semver/functions/prerelease.js +17 -0
  95. package/dist/melonjs.mjs/node_modules/semver/functions/rcompare.js +14 -0
  96. package/dist/melonjs.mjs/node_modules/semver/functions/rsort.js +14 -0
  97. package/dist/melonjs.mjs/node_modules/semver/functions/satisfies.js +21 -0
  98. package/dist/melonjs.mjs/node_modules/semver/functions/sort.js +14 -0
  99. package/dist/melonjs.mjs/node_modules/semver/functions/valid.js +17 -0
  100. package/dist/melonjs.mjs/node_modules/semver/index.js +140 -0
  101. package/dist/melonjs.mjs/node_modules/semver/internal/constants.js +44 -0
  102. package/dist/melonjs.mjs/node_modules/semver/internal/debug.js +18 -0
  103. package/dist/melonjs.mjs/node_modules/semver/internal/identifiers.js +32 -0
  104. package/dist/melonjs.mjs/node_modules/semver/internal/parse-options.js +24 -0
  105. package/dist/melonjs.mjs/node_modules/semver/internal/re.js +234 -0
  106. package/dist/melonjs.mjs/node_modules/semver/node_modules/lru-cache/index.js +352 -0
  107. package/dist/melonjs.mjs/node_modules/semver/node_modules/yallist/iterator.js +24 -0
  108. package/dist/melonjs.mjs/node_modules/semver/node_modules/yallist/yallist.js +444 -0
  109. package/dist/melonjs.mjs/node_modules/semver/ranges/gtr.js +15 -0
  110. package/dist/melonjs.mjs/node_modules/semver/ranges/intersects.js +18 -0
  111. package/dist/melonjs.mjs/node_modules/semver/ranges/ltr.js +15 -0
  112. package/dist/melonjs.mjs/node_modules/semver/ranges/max-satisfying.js +37 -0
  113. package/dist/melonjs.mjs/node_modules/semver/ranges/min-satisfying.js +36 -0
  114. package/dist/melonjs.mjs/node_modules/semver/ranges/min-version.js +74 -0
  115. package/dist/melonjs.mjs/node_modules/semver/ranges/outside.js +98 -0
  116. package/dist/melonjs.mjs/node_modules/semver/ranges/simplify.js +59 -0
  117. package/dist/melonjs.mjs/node_modules/semver/ranges/subset.js +261 -0
  118. package/dist/melonjs.mjs/node_modules/semver/ranges/to-comparators.js +19 -0
  119. package/dist/melonjs.mjs/node_modules/semver/ranges/valid.js +22 -0
  120. package/dist/melonjs.mjs/particles/emitter.js +1 -1
  121. package/dist/melonjs.mjs/particles/particle.js +1 -1
  122. package/dist/melonjs.mjs/particles/settings.js +1 -1
  123. package/dist/melonjs.mjs/physics/body.js +1 -1
  124. package/dist/melonjs.mjs/physics/bounds.js +1 -1
  125. package/dist/melonjs.mjs/physics/collision.js +1 -1
  126. package/dist/melonjs.mjs/physics/detector.js +1 -1
  127. package/dist/melonjs.mjs/physics/quadtree.js +1 -1
  128. package/dist/melonjs.mjs/physics/response.js +1 -1
  129. package/dist/melonjs.mjs/physics/sat.js +1 -1
  130. package/dist/melonjs.mjs/physics/world.js +1 -1
  131. package/dist/melonjs.mjs/plugin/plugin.js +4 -4
  132. package/dist/melonjs.mjs/renderable/collectable.js +1 -1
  133. package/dist/melonjs.mjs/renderable/colorlayer.js +1 -1
  134. package/dist/melonjs.mjs/renderable/container.js +1 -1
  135. package/dist/melonjs.mjs/renderable/draggable.js +1 -1
  136. package/dist/melonjs.mjs/renderable/dragndrop.js +1 -1
  137. package/dist/melonjs.mjs/renderable/entity/entity.js +1 -1
  138. package/dist/melonjs.mjs/renderable/imagelayer.js +1 -1
  139. package/dist/melonjs.mjs/renderable/light2d.js +10 -1
  140. package/dist/melonjs.mjs/renderable/nineslicesprite.js +1 -1
  141. package/dist/melonjs.mjs/renderable/renderable.js +1 -1
  142. package/dist/melonjs.mjs/renderable/sprite.js +1 -1
  143. package/dist/melonjs.mjs/renderable/text/bitmaptext.js +1 -1
  144. package/dist/melonjs.mjs/renderable/text/bitmaptextdata.js +1 -1
  145. package/dist/melonjs.mjs/renderable/text/glyph.js +1 -1
  146. package/dist/melonjs.mjs/renderable/text/text.js +1 -1
  147. package/dist/melonjs.mjs/renderable/text/textmetrics.js +1 -1
  148. package/dist/melonjs.mjs/renderable/text/textstyle.js +1 -1
  149. package/dist/melonjs.mjs/renderable/trigger.js +1 -1
  150. package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +1 -1
  151. package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +1 -1
  152. package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +1 -1
  153. package/dist/melonjs.mjs/state/stage.js +1 -1
  154. package/dist/melonjs.mjs/state/state.js +1 -1
  155. package/dist/melonjs.mjs/system/device.js +1 -1
  156. package/dist/melonjs.mjs/system/dom.js +1 -1
  157. package/dist/melonjs.mjs/system/event.js +1 -1
  158. package/dist/melonjs.mjs/system/platform.js +1 -1
  159. package/dist/melonjs.mjs/system/pooling.js +1 -1
  160. package/dist/melonjs.mjs/system/save.js +1 -1
  161. package/dist/melonjs.mjs/system/timer.js +1 -1
  162. package/dist/melonjs.mjs/tweens/easing.js +1 -1
  163. package/dist/melonjs.mjs/tweens/interpolation.js +1 -1
  164. package/dist/melonjs.mjs/tweens/tween.js +1 -1
  165. package/dist/melonjs.mjs/utils/agent.js +1 -1
  166. package/dist/melonjs.mjs/utils/array.js +1 -1
  167. package/dist/melonjs.mjs/utils/file.js +1 -1
  168. package/dist/melonjs.mjs/utils/function.js +1 -1
  169. package/dist/melonjs.mjs/utils/string.js +1 -1
  170. package/dist/melonjs.mjs/utils/utils.js +7 -19
  171. package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +1 -1
  172. package/dist/melonjs.mjs/video/renderer.js +1 -1
  173. package/dist/melonjs.mjs/video/texture/atlas.js +1 -1
  174. package/dist/melonjs.mjs/video/texture/cache.js +1 -1
  175. package/dist/melonjs.mjs/video/texture/canvas_texture.js +1 -1
  176. package/dist/melonjs.mjs/video/utils/autodetect.js +1 -1
  177. package/dist/melonjs.mjs/video/video.js +1 -1
  178. package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +1 -1
  179. package/dist/melonjs.mjs/video/webgl/compositors/compositor.js +1 -1
  180. package/dist/melonjs.mjs/video/webgl/compositors/primitive_compositor.js +1 -1
  181. package/dist/melonjs.mjs/video/webgl/compositors/quad_compositor.js +1 -1
  182. package/dist/melonjs.mjs/video/webgl/glshader.js +1 -1
  183. package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +1 -1
  184. package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +1 -1
  185. package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +1 -1
  186. package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +1 -1
  187. package/dist/melonjs.mjs/video/webgl/utils/attributes.js +1 -1
  188. package/dist/melonjs.mjs/video/webgl/utils/precision.js +1 -1
  189. package/dist/melonjs.mjs/video/webgl/utils/program.js +1 -1
  190. package/dist/melonjs.mjs/video/webgl/utils/string.js +1 -1
  191. package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +1 -1
  192. package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1 -1
  193. package/dist/melonjs.module.js +3151 -29
  194. package/dist/types/utils/utils.d.ts +4 -6
  195. package/package.json +2 -1
  196. package/src/loader/parsers/video.js +2 -1
  197. package/src/plugin/plugin.js +1 -1
  198. package/src/renderable/light2d.js +9 -0
  199. package/src/utils/utils.js +7 -18
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - v16.1.0
2
+ * melonJS Game Engine - v16.1.2
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -277,9 +277,9 @@ var engineUserAgent$1 = /*@__PURE__*/getDefaultExportFromCjs(engineUserAgent);
277
277
  var global$c = global$e;
278
278
  var userAgent = engineUserAgent;
279
279
 
280
- var process = global$c.process;
280
+ var process$1 = global$c.process;
281
281
  var Deno = global$c.Deno;
282
- var versions = process && process.versions || Deno && Deno.version;
282
+ var versions = process$1 && process$1.versions || Deno && Deno.version;
283
283
  var v8 = versions && versions.v8;
284
284
  var match, version$1;
285
285
 
@@ -6608,7 +6608,7 @@ function cureLocalIntersections(start, triangles, dim) {
6608
6608
  var a = p.prev,
6609
6609
  b = p.next.next;
6610
6610
 
6611
- if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {
6611
+ if (!equals(a, b) && intersects$3(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {
6612
6612
 
6613
6613
  triangles.push(a.i / dim | 0);
6614
6614
  triangles.push(p.i / dim | 0);
@@ -6879,7 +6879,7 @@ function equals(p1, p2) {
6879
6879
  }
6880
6880
 
6881
6881
  // check if two segments intersect
6882
- function intersects(p1, q1, p2, q2) {
6882
+ function intersects$3(p1, q1, p2, q2) {
6883
6883
  var o1 = sign(area(p1, q1, p2));
6884
6884
  var o2 = sign(area(p1, q1, q2));
6885
6885
  var o3 = sign(area(p2, q2, p1));
@@ -6909,7 +6909,7 @@ function intersectsPolygon(a, b) {
6909
6909
  var p = a;
6910
6910
  do {
6911
6911
  if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
6912
- intersects(p, p.next, a, b)) return true;
6912
+ intersects$3(p, p.next, a, b)) return true;
6913
6913
  p = p.next;
6914
6914
  } while (p !== a);
6915
6915
 
@@ -20034,6 +20034,3131 @@ function preloadFontFace(data, onload, onerror) {
20034
20034
  return 1;
20035
20035
  }
20036
20036
 
20037
+ var re$3 = {exports: {}};
20038
+
20039
+ // Note: this is the semver.org version of the spec that it implements
20040
+ // Not necessarily the package version of this code.
20041
+ const SEMVER_SPEC_VERSION = '2.0.0';
20042
+
20043
+ const MAX_LENGTH$1 = 256;
20044
+ const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER ||
20045
+ /* istanbul ignore next */ 9007199254740991;
20046
+
20047
+ // Max safe segment length for coercion.
20048
+ const MAX_SAFE_COMPONENT_LENGTH = 16;
20049
+
20050
+ // Max safe length for a build identifier. The max length minus 6 characters for
20051
+ // the shortest version with a build 0.0.0+BUILD.
20052
+ const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6;
20053
+
20054
+ const RELEASE_TYPES = [
20055
+ 'major',
20056
+ 'premajor',
20057
+ 'minor',
20058
+ 'preminor',
20059
+ 'patch',
20060
+ 'prepatch',
20061
+ 'prerelease',
20062
+ ];
20063
+
20064
+ var constants$1 = {
20065
+ MAX_LENGTH: MAX_LENGTH$1,
20066
+ MAX_SAFE_COMPONENT_LENGTH,
20067
+ MAX_SAFE_BUILD_LENGTH,
20068
+ MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,
20069
+ RELEASE_TYPES,
20070
+ SEMVER_SPEC_VERSION,
20071
+ FLAG_INCLUDE_PRERELEASE: 0b001,
20072
+ FLAG_LOOSE: 0b010,
20073
+ };
20074
+
20075
+ var constants$2 = /*@__PURE__*/getDefaultExportFromCjs(constants$1);
20076
+
20077
+ const debug$1 = (
20078
+ typeof process === 'object' &&
20079
+ process.env &&
20080
+ process.env.NODE_DEBUG &&
20081
+ /\bsemver\b/i.test(process.env.NODE_DEBUG)
20082
+ ) ? (...args) => console.error('SEMVER', ...args)
20083
+ : () => {};
20084
+
20085
+ var debug_1 = debug$1;
20086
+
20087
+ var debug$2 = /*@__PURE__*/getDefaultExportFromCjs(debug_1);
20088
+
20089
+ var re_1 = re$3.exports;
20090
+
20091
+ (function (module, exports) {
20092
+ const {
20093
+ MAX_SAFE_COMPONENT_LENGTH,
20094
+ MAX_SAFE_BUILD_LENGTH,
20095
+ MAX_LENGTH,
20096
+ } = constants$1;
20097
+ const debug = debug_1;
20098
+ exports = module.exports = {};
20099
+
20100
+ // The actual regexps go on exports.re
20101
+ const re = exports.re = [];
20102
+ const safeRe = exports.safeRe = [];
20103
+ const src = exports.src = [];
20104
+ const t = exports.t = {};
20105
+ let R = 0;
20106
+
20107
+ const LETTERDASHNUMBER = '[a-zA-Z0-9-]';
20108
+
20109
+ // Replace some greedy regex tokens to prevent regex dos issues. These regex are
20110
+ // used internally via the safeRe object since all inputs in this library get
20111
+ // normalized first to trim and collapse all extra whitespace. The original
20112
+ // regexes are exported for userland consumption and lower level usage. A
20113
+ // future breaking change could export the safer regex only with a note that
20114
+ // all input should have extra whitespace removed.
20115
+ const safeRegexReplacements = [
20116
+ ['\\s', 1],
20117
+ ['\\d', MAX_LENGTH],
20118
+ [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],
20119
+ ];
20120
+
20121
+ const makeSafeRegex = (value) => {
20122
+ for (const [token, max] of safeRegexReplacements) {
20123
+ value = value
20124
+ .split(`${token}*`).join(`${token}{0,${max}}`)
20125
+ .split(`${token}+`).join(`${token}{1,${max}}`);
20126
+ }
20127
+ return value
20128
+ };
20129
+
20130
+ const createToken = (name, value, isGlobal) => {
20131
+ const safe = makeSafeRegex(value);
20132
+ const index = R++;
20133
+ debug(name, index, value);
20134
+ t[name] = index;
20135
+ src[index] = value;
20136
+ re[index] = new RegExp(value, isGlobal ? 'g' : undefined);
20137
+ safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined);
20138
+ };
20139
+
20140
+ // The following Regular Expressions can be used for tokenizing,
20141
+ // validating, and parsing SemVer version strings.
20142
+
20143
+ // ## Numeric Identifier
20144
+ // A single `0`, or a non-zero digit followed by zero or more digits.
20145
+
20146
+ createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*');
20147
+ createToken('NUMERICIDENTIFIERLOOSE', '\\d+');
20148
+
20149
+ // ## Non-numeric Identifier
20150
+ // Zero or more digits, followed by a letter or hyphen, and then zero or
20151
+ // more letters, digits, or hyphens.
20152
+
20153
+ createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
20154
+
20155
+ // ## Main Version
20156
+ // Three dot-separated numeric identifiers.
20157
+
20158
+ createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
20159
+ `(${src[t.NUMERICIDENTIFIER]})\\.` +
20160
+ `(${src[t.NUMERICIDENTIFIER]})`);
20161
+
20162
+ createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
20163
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
20164
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})`);
20165
+
20166
+ // ## Pre-release Version Identifier
20167
+ // A numeric identifier, or a non-numeric identifier.
20168
+
20169
+ createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
20170
+ }|${src[t.NONNUMERICIDENTIFIER]})`);
20171
+
20172
+ createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
20173
+ }|${src[t.NONNUMERICIDENTIFIER]})`);
20174
+
20175
+ // ## Pre-release Version
20176
+ // Hyphen, followed by one or more dot-separated pre-release version
20177
+ // identifiers.
20178
+
20179
+ createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
20180
+ }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
20181
+
20182
+ createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
20183
+ }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
20184
+
20185
+ // ## Build Metadata Identifier
20186
+ // Any combination of digits, letters, or hyphens.
20187
+
20188
+ createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`);
20189
+
20190
+ // ## Build Metadata
20191
+ // Plus sign, followed by one or more period-separated build metadata
20192
+ // identifiers.
20193
+
20194
+ createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
20195
+ }(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
20196
+
20197
+ // ## Full Version String
20198
+ // A main version, followed optionally by a pre-release version and
20199
+ // build metadata.
20200
+
20201
+ // Note that the only major, minor, patch, and pre-release sections of
20202
+ // the version string are capturing groups. The build metadata is not a
20203
+ // capturing group, because it should not ever be used in version
20204
+ // comparison.
20205
+
20206
+ createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
20207
+ }${src[t.PRERELEASE]}?${
20208
+ src[t.BUILD]}?`);
20209
+
20210
+ createToken('FULL', `^${src[t.FULLPLAIN]}$`);
20211
+
20212
+ // like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
20213
+ // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
20214
+ // common in the npm registry.
20215
+ createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
20216
+ }${src[t.PRERELEASELOOSE]}?${
20217
+ src[t.BUILD]}?`);
20218
+
20219
+ createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`);
20220
+
20221
+ createToken('GTLT', '((?:<|>)?=?)');
20222
+
20223
+ // Something like "2.*" or "1.2.x".
20224
+ // Note that "x.x" is a valid xRange identifer, meaning "any version"
20225
+ // Only the first item is strictly required.
20226
+ createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
20227
+ createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
20228
+
20229
+ createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
20230
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
20231
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
20232
+ `(?:${src[t.PRERELEASE]})?${
20233
+ src[t.BUILD]}?` +
20234
+ `)?)?`);
20235
+
20236
+ createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
20237
+ `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
20238
+ `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
20239
+ `(?:${src[t.PRERELEASELOOSE]})?${
20240
+ src[t.BUILD]}?` +
20241
+ `)?)?`);
20242
+
20243
+ createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
20244
+ createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
20245
+
20246
+ // Coercion.
20247
+ // Extract anything that could conceivably be a part of a valid semver
20248
+ createToken('COERCEPLAIN', `${'(^|[^\\d])' +
20249
+ '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
20250
+ `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
20251
+ `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
20252
+ createToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
20253
+ createToken('COERCEFULL', src[t.COERCEPLAIN] +
20254
+ `(?:${src[t.PRERELEASE]})?` +
20255
+ `(?:${src[t.BUILD]})?` +
20256
+ `(?:$|[^\\d])`);
20257
+ createToken('COERCERTL', src[t.COERCE], true);
20258
+ createToken('COERCERTLFULL', src[t.COERCEFULL], true);
20259
+
20260
+ // Tilde ranges.
20261
+ // Meaning is "reasonably at or greater than"
20262
+ createToken('LONETILDE', '(?:~>?)');
20263
+
20264
+ createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true);
20265
+ exports.tildeTrimReplace = '$1~';
20266
+
20267
+ createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
20268
+ createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
20269
+
20270
+ // Caret ranges.
20271
+ // Meaning is "at least and backwards compatible with"
20272
+ createToken('LONECARET', '(?:\\^)');
20273
+
20274
+ createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true);
20275
+ exports.caretTrimReplace = '$1^';
20276
+
20277
+ createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
20278
+ createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
20279
+
20280
+ // A simple gt/lt/eq thing, or just "" to indicate "any version"
20281
+ createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
20282
+ createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
20283
+
20284
+ // An expression to strip any whitespace between the gtlt and the thing
20285
+ // it modifies, so that `> 1.2.3` ==> `>1.2.3`
20286
+ createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
20287
+ }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
20288
+ exports.comparatorTrimReplace = '$1$2$3';
20289
+
20290
+ // Something like `1.2.3 - 1.2.4`
20291
+ // Note that these all use the loose form, because they'll be
20292
+ // checked against either the strict or loose comparator form
20293
+ // later.
20294
+ createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
20295
+ `\\s+-\\s+` +
20296
+ `(${src[t.XRANGEPLAIN]})` +
20297
+ `\\s*$`);
20298
+
20299
+ createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
20300
+ `\\s+-\\s+` +
20301
+ `(${src[t.XRANGEPLAINLOOSE]})` +
20302
+ `\\s*$`);
20303
+
20304
+ // Star ranges basically just allow anything at all.
20305
+ createToken('STAR', '(<|>)?=?\\s*\\*');
20306
+ // >=0.0.0 is like a star
20307
+ createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$');
20308
+ createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$');
20309
+ } (re$3, re$3.exports));
20310
+
20311
+ var reExports = re$3.exports;
20312
+ var re$2 = /*@__PURE__*/getDefaultExportFromCjs(reExports);
20313
+
20314
+ // parse out just the options we care about
20315
+ const looseOption = Object.freeze({ loose: true });
20316
+ const emptyOpts = Object.freeze({ });
20317
+ const parseOptions$1 = options => {
20318
+ if (!options) {
20319
+ return emptyOpts
20320
+ }
20321
+
20322
+ if (typeof options !== 'object') {
20323
+ return looseOption
20324
+ }
20325
+
20326
+ return options
20327
+ };
20328
+ var parseOptions_1 = parseOptions$1;
20329
+
20330
+ var parseOptions$2 = /*@__PURE__*/getDefaultExportFromCjs(parseOptions_1);
20331
+
20332
+ const numeric = /^[0-9]+$/;
20333
+ const compareIdentifiers$1 = (a, b) => {
20334
+ const anum = numeric.test(a);
20335
+ const bnum = numeric.test(b);
20336
+
20337
+ if (anum && bnum) {
20338
+ a = +a;
20339
+ b = +b;
20340
+ }
20341
+
20342
+ return a === b ? 0
20343
+ : (anum && !bnum) ? -1
20344
+ : (bnum && !anum) ? 1
20345
+ : a < b ? -1
20346
+ : 1
20347
+ };
20348
+
20349
+ const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);
20350
+
20351
+ var identifiers$1 = {
20352
+ compareIdentifiers: compareIdentifiers$1,
20353
+ rcompareIdentifiers,
20354
+ };
20355
+
20356
+ var identifiers$2 = /*@__PURE__*/getDefaultExportFromCjs(identifiers$1);
20357
+
20358
+ const debug = debug_1;
20359
+ const { MAX_LENGTH, MAX_SAFE_INTEGER } = constants$1;
20360
+ const { safeRe: re$1, t: t$1 } = reExports;
20361
+
20362
+ const parseOptions = parseOptions_1;
20363
+ const { compareIdentifiers } = identifiers$1;
20364
+ let SemVer$d = class SemVer {
20365
+ constructor (version, options) {
20366
+ options = parseOptions(options);
20367
+
20368
+ if (version instanceof SemVer) {
20369
+ if (version.loose === !!options.loose &&
20370
+ version.includePrerelease === !!options.includePrerelease) {
20371
+ return version
20372
+ } else {
20373
+ version = version.version;
20374
+ }
20375
+ } else if (typeof version !== 'string') {
20376
+ throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`)
20377
+ }
20378
+
20379
+ if (version.length > MAX_LENGTH) {
20380
+ throw new TypeError(
20381
+ `version is longer than ${MAX_LENGTH} characters`
20382
+ )
20383
+ }
20384
+
20385
+ debug('SemVer', version, options);
20386
+ this.options = options;
20387
+ this.loose = !!options.loose;
20388
+ // this isn't actually relevant for versions, but keep it so that we
20389
+ // don't run into trouble passing this.options around.
20390
+ this.includePrerelease = !!options.includePrerelease;
20391
+
20392
+ const m = version.trim().match(options.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]);
20393
+
20394
+ if (!m) {
20395
+ throw new TypeError(`Invalid Version: ${version}`)
20396
+ }
20397
+
20398
+ this.raw = version;
20399
+
20400
+ // these are actually numbers
20401
+ this.major = +m[1];
20402
+ this.minor = +m[2];
20403
+ this.patch = +m[3];
20404
+
20405
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
20406
+ throw new TypeError('Invalid major version')
20407
+ }
20408
+
20409
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
20410
+ throw new TypeError('Invalid minor version')
20411
+ }
20412
+
20413
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
20414
+ throw new TypeError('Invalid patch version')
20415
+ }
20416
+
20417
+ // numberify any prerelease numeric ids
20418
+ if (!m[4]) {
20419
+ this.prerelease = [];
20420
+ } else {
20421
+ this.prerelease = m[4].split('.').map((id) => {
20422
+ if (/^[0-9]+$/.test(id)) {
20423
+ const num = +id;
20424
+ if (num >= 0 && num < MAX_SAFE_INTEGER) {
20425
+ return num
20426
+ }
20427
+ }
20428
+ return id
20429
+ });
20430
+ }
20431
+
20432
+ this.build = m[5] ? m[5].split('.') : [];
20433
+ this.format();
20434
+ }
20435
+
20436
+ format () {
20437
+ this.version = `${this.major}.${this.minor}.${this.patch}`;
20438
+ if (this.prerelease.length) {
20439
+ this.version += `-${this.prerelease.join('.')}`;
20440
+ }
20441
+ return this.version
20442
+ }
20443
+
20444
+ toString () {
20445
+ return this.version
20446
+ }
20447
+
20448
+ compare (other) {
20449
+ debug('SemVer.compare', this.version, this.options, other);
20450
+ if (!(other instanceof SemVer)) {
20451
+ if (typeof other === 'string' && other === this.version) {
20452
+ return 0
20453
+ }
20454
+ other = new SemVer(other, this.options);
20455
+ }
20456
+
20457
+ if (other.version === this.version) {
20458
+ return 0
20459
+ }
20460
+
20461
+ return this.compareMain(other) || this.comparePre(other)
20462
+ }
20463
+
20464
+ compareMain (other) {
20465
+ if (!(other instanceof SemVer)) {
20466
+ other = new SemVer(other, this.options);
20467
+ }
20468
+
20469
+ return (
20470
+ compareIdentifiers(this.major, other.major) ||
20471
+ compareIdentifiers(this.minor, other.minor) ||
20472
+ compareIdentifiers(this.patch, other.patch)
20473
+ )
20474
+ }
20475
+
20476
+ comparePre (other) {
20477
+ if (!(other instanceof SemVer)) {
20478
+ other = new SemVer(other, this.options);
20479
+ }
20480
+
20481
+ // NOT having a prerelease is > having one
20482
+ if (this.prerelease.length && !other.prerelease.length) {
20483
+ return -1
20484
+ } else if (!this.prerelease.length && other.prerelease.length) {
20485
+ return 1
20486
+ } else if (!this.prerelease.length && !other.prerelease.length) {
20487
+ return 0
20488
+ }
20489
+
20490
+ let i = 0;
20491
+ do {
20492
+ const a = this.prerelease[i];
20493
+ const b = other.prerelease[i];
20494
+ debug('prerelease compare', i, a, b);
20495
+ if (a === undefined && b === undefined) {
20496
+ return 0
20497
+ } else if (b === undefined) {
20498
+ return 1
20499
+ } else if (a === undefined) {
20500
+ return -1
20501
+ } else if (a === b) {
20502
+ continue
20503
+ } else {
20504
+ return compareIdentifiers(a, b)
20505
+ }
20506
+ } while (++i)
20507
+ }
20508
+
20509
+ compareBuild (other) {
20510
+ if (!(other instanceof SemVer)) {
20511
+ other = new SemVer(other, this.options);
20512
+ }
20513
+
20514
+ let i = 0;
20515
+ do {
20516
+ const a = this.build[i];
20517
+ const b = other.build[i];
20518
+ debug('prerelease compare', i, a, b);
20519
+ if (a === undefined && b === undefined) {
20520
+ return 0
20521
+ } else if (b === undefined) {
20522
+ return 1
20523
+ } else if (a === undefined) {
20524
+ return -1
20525
+ } else if (a === b) {
20526
+ continue
20527
+ } else {
20528
+ return compareIdentifiers(a, b)
20529
+ }
20530
+ } while (++i)
20531
+ }
20532
+
20533
+ // preminor will bump the version up to the next minor release, and immediately
20534
+ // down to pre-release. premajor and prepatch work the same way.
20535
+ inc (release, identifier, identifierBase) {
20536
+ switch (release) {
20537
+ case 'premajor':
20538
+ this.prerelease.length = 0;
20539
+ this.patch = 0;
20540
+ this.minor = 0;
20541
+ this.major++;
20542
+ this.inc('pre', identifier, identifierBase);
20543
+ break
20544
+ case 'preminor':
20545
+ this.prerelease.length = 0;
20546
+ this.patch = 0;
20547
+ this.minor++;
20548
+ this.inc('pre', identifier, identifierBase);
20549
+ break
20550
+ case 'prepatch':
20551
+ // If this is already a prerelease, it will bump to the next version
20552
+ // drop any prereleases that might already exist, since they are not
20553
+ // relevant at this point.
20554
+ this.prerelease.length = 0;
20555
+ this.inc('patch', identifier, identifierBase);
20556
+ this.inc('pre', identifier, identifierBase);
20557
+ break
20558
+ // If the input is a non-prerelease version, this acts the same as
20559
+ // prepatch.
20560
+ case 'prerelease':
20561
+ if (this.prerelease.length === 0) {
20562
+ this.inc('patch', identifier, identifierBase);
20563
+ }
20564
+ this.inc('pre', identifier, identifierBase);
20565
+ break
20566
+
20567
+ case 'major':
20568
+ // If this is a pre-major version, bump up to the same major version.
20569
+ // Otherwise increment major.
20570
+ // 1.0.0-5 bumps to 1.0.0
20571
+ // 1.1.0 bumps to 2.0.0
20572
+ if (
20573
+ this.minor !== 0 ||
20574
+ this.patch !== 0 ||
20575
+ this.prerelease.length === 0
20576
+ ) {
20577
+ this.major++;
20578
+ }
20579
+ this.minor = 0;
20580
+ this.patch = 0;
20581
+ this.prerelease = [];
20582
+ break
20583
+ case 'minor':
20584
+ // If this is a pre-minor version, bump up to the same minor version.
20585
+ // Otherwise increment minor.
20586
+ // 1.2.0-5 bumps to 1.2.0
20587
+ // 1.2.1 bumps to 1.3.0
20588
+ if (this.patch !== 0 || this.prerelease.length === 0) {
20589
+ this.minor++;
20590
+ }
20591
+ this.patch = 0;
20592
+ this.prerelease = [];
20593
+ break
20594
+ case 'patch':
20595
+ // If this is not a pre-release version, it will increment the patch.
20596
+ // If it is a pre-release it will bump up to the same patch version.
20597
+ // 1.2.0-5 patches to 1.2.0
20598
+ // 1.2.0 patches to 1.2.1
20599
+ if (this.prerelease.length === 0) {
20600
+ this.patch++;
20601
+ }
20602
+ this.prerelease = [];
20603
+ break
20604
+ // This probably shouldn't be used publicly.
20605
+ // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
20606
+ case 'pre': {
20607
+ const base = Number(identifierBase) ? 1 : 0;
20608
+
20609
+ if (!identifier && identifierBase === false) {
20610
+ throw new Error('invalid increment argument: identifier is empty')
20611
+ }
20612
+
20613
+ if (this.prerelease.length === 0) {
20614
+ this.prerelease = [base];
20615
+ } else {
20616
+ let i = this.prerelease.length;
20617
+ while (--i >= 0) {
20618
+ if (typeof this.prerelease[i] === 'number') {
20619
+ this.prerelease[i]++;
20620
+ i = -2;
20621
+ }
20622
+ }
20623
+ if (i === -1) {
20624
+ // didn't increment anything
20625
+ if (identifier === this.prerelease.join('.') && identifierBase === false) {
20626
+ throw new Error('invalid increment argument: identifier already exists')
20627
+ }
20628
+ this.prerelease.push(base);
20629
+ }
20630
+ }
20631
+ if (identifier) {
20632
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
20633
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
20634
+ let prerelease = [identifier, base];
20635
+ if (identifierBase === false) {
20636
+ prerelease = [identifier];
20637
+ }
20638
+ if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
20639
+ if (isNaN(this.prerelease[1])) {
20640
+ this.prerelease = prerelease;
20641
+ }
20642
+ } else {
20643
+ this.prerelease = prerelease;
20644
+ }
20645
+ }
20646
+ break
20647
+ }
20648
+ default:
20649
+ throw new Error(`invalid increment argument: ${release}`)
20650
+ }
20651
+ this.raw = this.format();
20652
+ if (this.build.length) {
20653
+ this.raw += `+${this.build.join('.')}`;
20654
+ }
20655
+ return this
20656
+ }
20657
+ };
20658
+
20659
+ var semver$1 = SemVer$d;
20660
+
20661
+ var semver$2 = /*@__PURE__*/getDefaultExportFromCjs(semver$1);
20662
+
20663
+ const SemVer$c = semver$1;
20664
+ const parse$7 = (version, options, throwErrors = false) => {
20665
+ if (version instanceof SemVer$c) {
20666
+ return version
20667
+ }
20668
+ try {
20669
+ return new SemVer$c(version, options)
20670
+ } catch (er) {
20671
+ if (!throwErrors) {
20672
+ return null
20673
+ }
20674
+ throw er
20675
+ }
20676
+ };
20677
+
20678
+ var parse_1 = parse$7;
20679
+
20680
+ var parse$8 = /*@__PURE__*/getDefaultExportFromCjs(parse_1);
20681
+
20682
+ const parse$6 = parse_1;
20683
+ const valid$3 = (version, options) => {
20684
+ const v = parse$6(version, options);
20685
+ return v ? v.version : null
20686
+ };
20687
+ var valid_1 = valid$3;
20688
+
20689
+ var valid$4 = /*@__PURE__*/getDefaultExportFromCjs(valid_1);
20690
+
20691
+ const parse$5 = parse_1;
20692
+ const clean$1 = (version, options) => {
20693
+ const s = parse$5(version.trim().replace(/^[=v]+/, ''), options);
20694
+ return s ? s.version : null
20695
+ };
20696
+ var clean_1 = clean$1;
20697
+
20698
+ var clean$2 = /*@__PURE__*/getDefaultExportFromCjs(clean_1);
20699
+
20700
+ const SemVer$b = semver$1;
20701
+
20702
+ const inc$1 = (version, release, options, identifier, identifierBase) => {
20703
+ if (typeof (options) === 'string') {
20704
+ identifierBase = identifier;
20705
+ identifier = options;
20706
+ options = undefined;
20707
+ }
20708
+
20709
+ try {
20710
+ return new SemVer$b(
20711
+ version instanceof SemVer$b ? version.version : version,
20712
+ options
20713
+ ).inc(release, identifier, identifierBase).version
20714
+ } catch (er) {
20715
+ return null
20716
+ }
20717
+ };
20718
+ var inc_1 = inc$1;
20719
+
20720
+ var inc$2 = /*@__PURE__*/getDefaultExportFromCjs(inc_1);
20721
+
20722
+ const parse$4 = parse_1;
20723
+
20724
+ const diff$1 = (version1, version2) => {
20725
+ const v1 = parse$4(version1, null, true);
20726
+ const v2 = parse$4(version2, null, true);
20727
+ const comparison = v1.compare(v2);
20728
+
20729
+ if (comparison === 0) {
20730
+ return null
20731
+ }
20732
+
20733
+ const v1Higher = comparison > 0;
20734
+ const highVersion = v1Higher ? v1 : v2;
20735
+ const lowVersion = v1Higher ? v2 : v1;
20736
+ const highHasPre = !!highVersion.prerelease.length;
20737
+ const lowHasPre = !!lowVersion.prerelease.length;
20738
+
20739
+ if (lowHasPre && !highHasPre) {
20740
+ // Going from prerelease -> no prerelease requires some special casing
20741
+
20742
+ // If the low version has only a major, then it will always be a major
20743
+ // Some examples:
20744
+ // 1.0.0-1 -> 1.0.0
20745
+ // 1.0.0-1 -> 1.1.1
20746
+ // 1.0.0-1 -> 2.0.0
20747
+ if (!lowVersion.patch && !lowVersion.minor) {
20748
+ return 'major'
20749
+ }
20750
+
20751
+ // Otherwise it can be determined by checking the high version
20752
+
20753
+ if (highVersion.patch) {
20754
+ // anything higher than a patch bump would result in the wrong version
20755
+ return 'patch'
20756
+ }
20757
+
20758
+ if (highVersion.minor) {
20759
+ // anything higher than a minor bump would result in the wrong version
20760
+ return 'minor'
20761
+ }
20762
+
20763
+ // bumping major/minor/patch all have same result
20764
+ return 'major'
20765
+ }
20766
+
20767
+ // add the `pre` prefix if we are going to a prerelease version
20768
+ const prefix = highHasPre ? 'pre' : '';
20769
+
20770
+ if (v1.major !== v2.major) {
20771
+ return prefix + 'major'
20772
+ }
20773
+
20774
+ if (v1.minor !== v2.minor) {
20775
+ return prefix + 'minor'
20776
+ }
20777
+
20778
+ if (v1.patch !== v2.patch) {
20779
+ return prefix + 'patch'
20780
+ }
20781
+
20782
+ // high and low are preleases
20783
+ return 'prerelease'
20784
+ };
20785
+
20786
+ var diff_1 = diff$1;
20787
+
20788
+ var diff$2 = /*@__PURE__*/getDefaultExportFromCjs(diff_1);
20789
+
20790
+ const SemVer$a = semver$1;
20791
+ const major$1 = (a, loose) => new SemVer$a(a, loose).major;
20792
+ var major_1 = major$1;
20793
+
20794
+ var major$2 = /*@__PURE__*/getDefaultExportFromCjs(major_1);
20795
+
20796
+ const SemVer$9 = semver$1;
20797
+ const minor$1 = (a, loose) => new SemVer$9(a, loose).minor;
20798
+ var minor_1 = minor$1;
20799
+
20800
+ var minor$2 = /*@__PURE__*/getDefaultExportFromCjs(minor_1);
20801
+
20802
+ const SemVer$8 = semver$1;
20803
+ const patch$2 = (a, loose) => new SemVer$8(a, loose).patch;
20804
+ var patch_1 = patch$2;
20805
+
20806
+ var patch$3 = /*@__PURE__*/getDefaultExportFromCjs(patch_1);
20807
+
20808
+ const parse$3 = parse_1;
20809
+ const prerelease$1 = (version, options) => {
20810
+ const parsed = parse$3(version, options);
20811
+ return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
20812
+ };
20813
+ var prerelease_1 = prerelease$1;
20814
+
20815
+ var prerelease$2 = /*@__PURE__*/getDefaultExportFromCjs(prerelease_1);
20816
+
20817
+ const SemVer$7 = semver$1;
20818
+ const compare$b = (a, b, loose) =>
20819
+ new SemVer$7(a, loose).compare(new SemVer$7(b, loose));
20820
+
20821
+ var compare_1 = compare$b;
20822
+
20823
+ var compare$c = /*@__PURE__*/getDefaultExportFromCjs(compare_1);
20824
+
20825
+ const compare$a = compare_1;
20826
+ const rcompare$1 = (a, b, loose) => compare$a(b, a, loose);
20827
+ var rcompare_1 = rcompare$1;
20828
+
20829
+ var rcompare$2 = /*@__PURE__*/getDefaultExportFromCjs(rcompare_1);
20830
+
20831
+ const compare$9 = compare_1;
20832
+ const compareLoose$1 = (a, b) => compare$9(a, b, true);
20833
+ var compareLoose_1 = compareLoose$1;
20834
+
20835
+ var compareLoose$2 = /*@__PURE__*/getDefaultExportFromCjs(compareLoose_1);
20836
+
20837
+ const SemVer$6 = semver$1;
20838
+ const compareBuild$3 = (a, b, loose) => {
20839
+ const versionA = new SemVer$6(a, loose);
20840
+ const versionB = new SemVer$6(b, loose);
20841
+ return versionA.compare(versionB) || versionA.compareBuild(versionB)
20842
+ };
20843
+ var compareBuild_1 = compareBuild$3;
20844
+
20845
+ var compareBuild$4 = /*@__PURE__*/getDefaultExportFromCjs(compareBuild_1);
20846
+
20847
+ const compareBuild$2 = compareBuild_1;
20848
+ const sort$1 = (list, loose) => list.sort((a, b) => compareBuild$2(a, b, loose));
20849
+ var sort_1 = sort$1;
20850
+
20851
+ var sort$2 = /*@__PURE__*/getDefaultExportFromCjs(sort_1);
20852
+
20853
+ const compareBuild$1 = compareBuild_1;
20854
+ const rsort$1 = (list, loose) => list.sort((a, b) => compareBuild$1(b, a, loose));
20855
+ var rsort_1 = rsort$1;
20856
+
20857
+ var rsort$2 = /*@__PURE__*/getDefaultExportFromCjs(rsort_1);
20858
+
20859
+ const compare$8 = compare_1;
20860
+ const gt$4 = (a, b, loose) => compare$8(a, b, loose) > 0;
20861
+ var gt_1 = gt$4;
20862
+
20863
+ var gt$5 = /*@__PURE__*/getDefaultExportFromCjs(gt_1);
20864
+
20865
+ const compare$7 = compare_1;
20866
+ const lt$3 = (a, b, loose) => compare$7(a, b, loose) < 0;
20867
+ var lt_1 = lt$3;
20868
+
20869
+ var lt$4 = /*@__PURE__*/getDefaultExportFromCjs(lt_1);
20870
+
20871
+ const compare$6 = compare_1;
20872
+ const eq$2 = (a, b, loose) => compare$6(a, b, loose) === 0;
20873
+ var eq_1 = eq$2;
20874
+
20875
+ var eq$3 = /*@__PURE__*/getDefaultExportFromCjs(eq_1);
20876
+
20877
+ const compare$5 = compare_1;
20878
+ const neq$2 = (a, b, loose) => compare$5(a, b, loose) !== 0;
20879
+ var neq_1 = neq$2;
20880
+
20881
+ var neq$3 = /*@__PURE__*/getDefaultExportFromCjs(neq_1);
20882
+
20883
+ const compare$4 = compare_1;
20884
+ const gte$3 = (a, b, loose) => compare$4(a, b, loose) >= 0;
20885
+ var gte_1 = gte$3;
20886
+
20887
+ var gte$4 = /*@__PURE__*/getDefaultExportFromCjs(gte_1);
20888
+
20889
+ const compare$3 = compare_1;
20890
+ const lte$3 = (a, b, loose) => compare$3(a, b, loose) <= 0;
20891
+ var lte_1 = lte$3;
20892
+
20893
+ var lte$4 = /*@__PURE__*/getDefaultExportFromCjs(lte_1);
20894
+
20895
+ const eq$1 = eq_1;
20896
+ const neq$1 = neq_1;
20897
+ const gt$3 = gt_1;
20898
+ const gte$2 = gte_1;
20899
+ const lt$2 = lt_1;
20900
+ const lte$2 = lte_1;
20901
+
20902
+ const cmp$1 = (a, op, b, loose) => {
20903
+ switch (op) {
20904
+ case '===':
20905
+ if (typeof a === 'object') {
20906
+ a = a.version;
20907
+ }
20908
+ if (typeof b === 'object') {
20909
+ b = b.version;
20910
+ }
20911
+ return a === b
20912
+
20913
+ case '!==':
20914
+ if (typeof a === 'object') {
20915
+ a = a.version;
20916
+ }
20917
+ if (typeof b === 'object') {
20918
+ b = b.version;
20919
+ }
20920
+ return a !== b
20921
+
20922
+ case '':
20923
+ case '=':
20924
+ case '==':
20925
+ return eq$1(a, b, loose)
20926
+
20927
+ case '!=':
20928
+ return neq$1(a, b, loose)
20929
+
20930
+ case '>':
20931
+ return gt$3(a, b, loose)
20932
+
20933
+ case '>=':
20934
+ return gte$2(a, b, loose)
20935
+
20936
+ case '<':
20937
+ return lt$2(a, b, loose)
20938
+
20939
+ case '<=':
20940
+ return lte$2(a, b, loose)
20941
+
20942
+ default:
20943
+ throw new TypeError(`Invalid operator: ${op}`)
20944
+ }
20945
+ };
20946
+ var cmp_1 = cmp$1;
20947
+
20948
+ var cmp$2 = /*@__PURE__*/getDefaultExportFromCjs(cmp_1);
20949
+
20950
+ const SemVer$5 = semver$1;
20951
+ const parse$2 = parse_1;
20952
+ const { safeRe: re, t } = reExports;
20953
+
20954
+ const coerce$1 = (version, options) => {
20955
+ if (version instanceof SemVer$5) {
20956
+ return version
20957
+ }
20958
+
20959
+ if (typeof version === 'number') {
20960
+ version = String(version);
20961
+ }
20962
+
20963
+ if (typeof version !== 'string') {
20964
+ return null
20965
+ }
20966
+
20967
+ options = options || {};
20968
+
20969
+ let match = null;
20970
+ if (!options.rtl) {
20971
+ match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
20972
+ } else {
20973
+ // Find the right-most coercible string that does not share
20974
+ // a terminus with a more left-ward coercible string.
20975
+ // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
20976
+ // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'
20977
+ //
20978
+ // Walk through the string checking with a /g regexp
20979
+ // Manually set the index so as to pick up overlapping matches.
20980
+ // Stop when we get a match that ends at the string end, since no
20981
+ // coercible string can be more right-ward without the same terminus.
20982
+ const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
20983
+ let next;
20984
+ while ((next = coerceRtlRegex.exec(version)) &&
20985
+ (!match || match.index + match[0].length !== version.length)
20986
+ ) {
20987
+ if (!match ||
20988
+ next.index + next[0].length !== match.index + match[0].length) {
20989
+ match = next;
20990
+ }
20991
+ coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;
20992
+ }
20993
+ // leave it in a clean state
20994
+ coerceRtlRegex.lastIndex = -1;
20995
+ }
20996
+
20997
+ if (match === null) {
20998
+ return null
20999
+ }
21000
+
21001
+ const major = match[2];
21002
+ const minor = match[3] || '0';
21003
+ const patch = match[4] || '0';
21004
+ const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : '';
21005
+ const build = options.includePrerelease && match[6] ? `+${match[6]}` : '';
21006
+
21007
+ return parse$2(`${major}.${minor}.${patch}${prerelease}${build}`, options)
21008
+ };
21009
+ var coerce_1 = coerce$1;
21010
+
21011
+ var coerce$2 = /*@__PURE__*/getDefaultExportFromCjs(coerce_1);
21012
+
21013
+ var iterator;
21014
+ var hasRequiredIterator;
21015
+
21016
+ function requireIterator () {
21017
+ if (hasRequiredIterator) return iterator;
21018
+ hasRequiredIterator = 1;
21019
+ 'use strict';
21020
+ iterator = function (Yallist) {
21021
+ Yallist.prototype[Symbol.iterator] = function* () {
21022
+ for (let walker = this.head; walker; walker = walker.next) {
21023
+ yield walker.value;
21024
+ }
21025
+ };
21026
+ };
21027
+ return iterator;
21028
+ }
21029
+
21030
+ var yallist;
21031
+ var hasRequiredYallist;
21032
+
21033
+ function requireYallist () {
21034
+ if (hasRequiredYallist) return yallist;
21035
+ hasRequiredYallist = 1;
21036
+ 'use strict';
21037
+ yallist = Yallist;
21038
+
21039
+ Yallist.Node = Node;
21040
+ Yallist.create = Yallist;
21041
+
21042
+ function Yallist (list) {
21043
+ var self = this;
21044
+ if (!(self instanceof Yallist)) {
21045
+ self = new Yallist();
21046
+ }
21047
+
21048
+ self.tail = null;
21049
+ self.head = null;
21050
+ self.length = 0;
21051
+
21052
+ if (list && typeof list.forEach === 'function') {
21053
+ list.forEach(function (item) {
21054
+ self.push(item);
21055
+ });
21056
+ } else if (arguments.length > 0) {
21057
+ for (var i = 0, l = arguments.length; i < l; i++) {
21058
+ self.push(arguments[i]);
21059
+ }
21060
+ }
21061
+
21062
+ return self
21063
+ }
21064
+
21065
+ Yallist.prototype.removeNode = function (node) {
21066
+ if (node.list !== this) {
21067
+ throw new Error('removing node which does not belong to this list')
21068
+ }
21069
+
21070
+ var next = node.next;
21071
+ var prev = node.prev;
21072
+
21073
+ if (next) {
21074
+ next.prev = prev;
21075
+ }
21076
+
21077
+ if (prev) {
21078
+ prev.next = next;
21079
+ }
21080
+
21081
+ if (node === this.head) {
21082
+ this.head = next;
21083
+ }
21084
+ if (node === this.tail) {
21085
+ this.tail = prev;
21086
+ }
21087
+
21088
+ node.list.length--;
21089
+ node.next = null;
21090
+ node.prev = null;
21091
+ node.list = null;
21092
+
21093
+ return next
21094
+ };
21095
+
21096
+ Yallist.prototype.unshiftNode = function (node) {
21097
+ if (node === this.head) {
21098
+ return
21099
+ }
21100
+
21101
+ if (node.list) {
21102
+ node.list.removeNode(node);
21103
+ }
21104
+
21105
+ var head = this.head;
21106
+ node.list = this;
21107
+ node.next = head;
21108
+ if (head) {
21109
+ head.prev = node;
21110
+ }
21111
+
21112
+ this.head = node;
21113
+ if (!this.tail) {
21114
+ this.tail = node;
21115
+ }
21116
+ this.length++;
21117
+ };
21118
+
21119
+ Yallist.prototype.pushNode = function (node) {
21120
+ if (node === this.tail) {
21121
+ return
21122
+ }
21123
+
21124
+ if (node.list) {
21125
+ node.list.removeNode(node);
21126
+ }
21127
+
21128
+ var tail = this.tail;
21129
+ node.list = this;
21130
+ node.prev = tail;
21131
+ if (tail) {
21132
+ tail.next = node;
21133
+ }
21134
+
21135
+ this.tail = node;
21136
+ if (!this.head) {
21137
+ this.head = node;
21138
+ }
21139
+ this.length++;
21140
+ };
21141
+
21142
+ Yallist.prototype.push = function () {
21143
+ for (var i = 0, l = arguments.length; i < l; i++) {
21144
+ push(this, arguments[i]);
21145
+ }
21146
+ return this.length
21147
+ };
21148
+
21149
+ Yallist.prototype.unshift = function () {
21150
+ for (var i = 0, l = arguments.length; i < l; i++) {
21151
+ unshift(this, arguments[i]);
21152
+ }
21153
+ return this.length
21154
+ };
21155
+
21156
+ Yallist.prototype.pop = function () {
21157
+ if (!this.tail) {
21158
+ return undefined
21159
+ }
21160
+
21161
+ var res = this.tail.value;
21162
+ this.tail = this.tail.prev;
21163
+ if (this.tail) {
21164
+ this.tail.next = null;
21165
+ } else {
21166
+ this.head = null;
21167
+ }
21168
+ this.length--;
21169
+ return res
21170
+ };
21171
+
21172
+ Yallist.prototype.shift = function () {
21173
+ if (!this.head) {
21174
+ return undefined
21175
+ }
21176
+
21177
+ var res = this.head.value;
21178
+ this.head = this.head.next;
21179
+ if (this.head) {
21180
+ this.head.prev = null;
21181
+ } else {
21182
+ this.tail = null;
21183
+ }
21184
+ this.length--;
21185
+ return res
21186
+ };
21187
+
21188
+ Yallist.prototype.forEach = function (fn, thisp) {
21189
+ thisp = thisp || this;
21190
+ for (var walker = this.head, i = 0; walker !== null; i++) {
21191
+ fn.call(thisp, walker.value, i, this);
21192
+ walker = walker.next;
21193
+ }
21194
+ };
21195
+
21196
+ Yallist.prototype.forEachReverse = function (fn, thisp) {
21197
+ thisp = thisp || this;
21198
+ for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
21199
+ fn.call(thisp, walker.value, i, this);
21200
+ walker = walker.prev;
21201
+ }
21202
+ };
21203
+
21204
+ Yallist.prototype.get = function (n) {
21205
+ for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
21206
+ // abort out of the list early if we hit a cycle
21207
+ walker = walker.next;
21208
+ }
21209
+ if (i === n && walker !== null) {
21210
+ return walker.value
21211
+ }
21212
+ };
21213
+
21214
+ Yallist.prototype.getReverse = function (n) {
21215
+ for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
21216
+ // abort out of the list early if we hit a cycle
21217
+ walker = walker.prev;
21218
+ }
21219
+ if (i === n && walker !== null) {
21220
+ return walker.value
21221
+ }
21222
+ };
21223
+
21224
+ Yallist.prototype.map = function (fn, thisp) {
21225
+ thisp = thisp || this;
21226
+ var res = new Yallist();
21227
+ for (var walker = this.head; walker !== null;) {
21228
+ res.push(fn.call(thisp, walker.value, this));
21229
+ walker = walker.next;
21230
+ }
21231
+ return res
21232
+ };
21233
+
21234
+ Yallist.prototype.mapReverse = function (fn, thisp) {
21235
+ thisp = thisp || this;
21236
+ var res = new Yallist();
21237
+ for (var walker = this.tail; walker !== null;) {
21238
+ res.push(fn.call(thisp, walker.value, this));
21239
+ walker = walker.prev;
21240
+ }
21241
+ return res
21242
+ };
21243
+
21244
+ Yallist.prototype.reduce = function (fn, initial) {
21245
+ var acc;
21246
+ var walker = this.head;
21247
+ if (arguments.length > 1) {
21248
+ acc = initial;
21249
+ } else if (this.head) {
21250
+ walker = this.head.next;
21251
+ acc = this.head.value;
21252
+ } else {
21253
+ throw new TypeError('Reduce of empty list with no initial value')
21254
+ }
21255
+
21256
+ for (var i = 0; walker !== null; i++) {
21257
+ acc = fn(acc, walker.value, i);
21258
+ walker = walker.next;
21259
+ }
21260
+
21261
+ return acc
21262
+ };
21263
+
21264
+ Yallist.prototype.reduceReverse = function (fn, initial) {
21265
+ var acc;
21266
+ var walker = this.tail;
21267
+ if (arguments.length > 1) {
21268
+ acc = initial;
21269
+ } else if (this.tail) {
21270
+ walker = this.tail.prev;
21271
+ acc = this.tail.value;
21272
+ } else {
21273
+ throw new TypeError('Reduce of empty list with no initial value')
21274
+ }
21275
+
21276
+ for (var i = this.length - 1; walker !== null; i--) {
21277
+ acc = fn(acc, walker.value, i);
21278
+ walker = walker.prev;
21279
+ }
21280
+
21281
+ return acc
21282
+ };
21283
+
21284
+ Yallist.prototype.toArray = function () {
21285
+ var arr = new Array(this.length);
21286
+ for (var i = 0, walker = this.head; walker !== null; i++) {
21287
+ arr[i] = walker.value;
21288
+ walker = walker.next;
21289
+ }
21290
+ return arr
21291
+ };
21292
+
21293
+ Yallist.prototype.toArrayReverse = function () {
21294
+ var arr = new Array(this.length);
21295
+ for (var i = 0, walker = this.tail; walker !== null; i++) {
21296
+ arr[i] = walker.value;
21297
+ walker = walker.prev;
21298
+ }
21299
+ return arr
21300
+ };
21301
+
21302
+ Yallist.prototype.slice = function (from, to) {
21303
+ to = to || this.length;
21304
+ if (to < 0) {
21305
+ to += this.length;
21306
+ }
21307
+ from = from || 0;
21308
+ if (from < 0) {
21309
+ from += this.length;
21310
+ }
21311
+ var ret = new Yallist();
21312
+ if (to < from || to < 0) {
21313
+ return ret
21314
+ }
21315
+ if (from < 0) {
21316
+ from = 0;
21317
+ }
21318
+ if (to > this.length) {
21319
+ to = this.length;
21320
+ }
21321
+ for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
21322
+ walker = walker.next;
21323
+ }
21324
+ for (; walker !== null && i < to; i++, walker = walker.next) {
21325
+ ret.push(walker.value);
21326
+ }
21327
+ return ret
21328
+ };
21329
+
21330
+ Yallist.prototype.sliceReverse = function (from, to) {
21331
+ to = to || this.length;
21332
+ if (to < 0) {
21333
+ to += this.length;
21334
+ }
21335
+ from = from || 0;
21336
+ if (from < 0) {
21337
+ from += this.length;
21338
+ }
21339
+ var ret = new Yallist();
21340
+ if (to < from || to < 0) {
21341
+ return ret
21342
+ }
21343
+ if (from < 0) {
21344
+ from = 0;
21345
+ }
21346
+ if (to > this.length) {
21347
+ to = this.length;
21348
+ }
21349
+ for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
21350
+ walker = walker.prev;
21351
+ }
21352
+ for (; walker !== null && i > from; i--, walker = walker.prev) {
21353
+ ret.push(walker.value);
21354
+ }
21355
+ return ret
21356
+ };
21357
+
21358
+ Yallist.prototype.splice = function (start, deleteCount, ...nodes) {
21359
+ if (start > this.length) {
21360
+ start = this.length - 1;
21361
+ }
21362
+ if (start < 0) {
21363
+ start = this.length + start;
21364
+ }
21365
+
21366
+ for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
21367
+ walker = walker.next;
21368
+ }
21369
+
21370
+ var ret = [];
21371
+ for (var i = 0; walker && i < deleteCount; i++) {
21372
+ ret.push(walker.value);
21373
+ walker = this.removeNode(walker);
21374
+ }
21375
+ if (walker === null) {
21376
+ walker = this.tail;
21377
+ }
21378
+
21379
+ if (walker !== this.head && walker !== this.tail) {
21380
+ walker = walker.prev;
21381
+ }
21382
+
21383
+ for (var i = 0; i < nodes.length; i++) {
21384
+ walker = insert(this, walker, nodes[i]);
21385
+ }
21386
+ return ret;
21387
+ };
21388
+
21389
+ Yallist.prototype.reverse = function () {
21390
+ var head = this.head;
21391
+ var tail = this.tail;
21392
+ for (var walker = head; walker !== null; walker = walker.prev) {
21393
+ var p = walker.prev;
21394
+ walker.prev = walker.next;
21395
+ walker.next = p;
21396
+ }
21397
+ this.head = tail;
21398
+ this.tail = head;
21399
+ return this
21400
+ };
21401
+
21402
+ function insert (self, node, value) {
21403
+ var inserted = node === self.head ?
21404
+ new Node(value, null, node, self) :
21405
+ new Node(value, node, node.next, self);
21406
+
21407
+ if (inserted.next === null) {
21408
+ self.tail = inserted;
21409
+ }
21410
+ if (inserted.prev === null) {
21411
+ self.head = inserted;
21412
+ }
21413
+
21414
+ self.length++;
21415
+
21416
+ return inserted
21417
+ }
21418
+
21419
+ function push (self, item) {
21420
+ self.tail = new Node(item, self.tail, null, self);
21421
+ if (!self.head) {
21422
+ self.head = self.tail;
21423
+ }
21424
+ self.length++;
21425
+ }
21426
+
21427
+ function unshift (self, item) {
21428
+ self.head = new Node(item, null, self.head, self);
21429
+ if (!self.tail) {
21430
+ self.tail = self.head;
21431
+ }
21432
+ self.length++;
21433
+ }
21434
+
21435
+ function Node (value, prev, next, list) {
21436
+ if (!(this instanceof Node)) {
21437
+ return new Node(value, prev, next, list)
21438
+ }
21439
+
21440
+ this.list = list;
21441
+ this.value = value;
21442
+
21443
+ if (prev) {
21444
+ prev.next = this;
21445
+ this.prev = prev;
21446
+ } else {
21447
+ this.prev = null;
21448
+ }
21449
+
21450
+ if (next) {
21451
+ next.prev = this;
21452
+ this.next = next;
21453
+ } else {
21454
+ this.next = null;
21455
+ }
21456
+ }
21457
+
21458
+ try {
21459
+ // add if support for Symbol.iterator is present
21460
+ requireIterator()(Yallist);
21461
+ } catch (er) {}
21462
+ return yallist;
21463
+ }
21464
+
21465
+ var lruCache;
21466
+ var hasRequiredLruCache;
21467
+
21468
+ function requireLruCache () {
21469
+ if (hasRequiredLruCache) return lruCache;
21470
+ hasRequiredLruCache = 1;
21471
+ 'use strict';
21472
+
21473
+ // A linked list to keep track of recently-used-ness
21474
+ const Yallist = requireYallist();
21475
+
21476
+ const MAX = Symbol('max');
21477
+ const LENGTH = Symbol('length');
21478
+ const LENGTH_CALCULATOR = Symbol('lengthCalculator');
21479
+ const ALLOW_STALE = Symbol('allowStale');
21480
+ const MAX_AGE = Symbol('maxAge');
21481
+ const DISPOSE = Symbol('dispose');
21482
+ const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');
21483
+ const LRU_LIST = Symbol('lruList');
21484
+ const CACHE = Symbol('cache');
21485
+ const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');
21486
+
21487
+ const naiveLength = () => 1;
21488
+
21489
+ // lruList is a yallist where the head is the youngest
21490
+ // item, and the tail is the oldest. the list contains the Hit
21491
+ // objects as the entries.
21492
+ // Each Hit object has a reference to its Yallist.Node. This
21493
+ // never changes.
21494
+ //
21495
+ // cache is a Map (or PseudoMap) that matches the keys to
21496
+ // the Yallist.Node object.
21497
+ class LRUCache {
21498
+ constructor (options) {
21499
+ if (typeof options === 'number')
21500
+ options = { max: options };
21501
+
21502
+ if (!options)
21503
+ options = {};
21504
+
21505
+ if (options.max && (typeof options.max !== 'number' || options.max < 0))
21506
+ throw new TypeError('max must be a non-negative number')
21507
+ // Kind of weird to have a default max of Infinity, but oh well.
21508
+ const max = this[MAX] = options.max || Infinity;
21509
+
21510
+ const lc = options.length || naiveLength;
21511
+ this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc;
21512
+ this[ALLOW_STALE] = options.stale || false;
21513
+ if (options.maxAge && typeof options.maxAge !== 'number')
21514
+ throw new TypeError('maxAge must be a number')
21515
+ this[MAX_AGE] = options.maxAge || 0;
21516
+ this[DISPOSE] = options.dispose;
21517
+ this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
21518
+ this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
21519
+ this.reset();
21520
+ }
21521
+
21522
+ // resize the cache when the max changes.
21523
+ set max (mL) {
21524
+ if (typeof mL !== 'number' || mL < 0)
21525
+ throw new TypeError('max must be a non-negative number')
21526
+
21527
+ this[MAX] = mL || Infinity;
21528
+ trim(this);
21529
+ }
21530
+ get max () {
21531
+ return this[MAX]
21532
+ }
21533
+
21534
+ set allowStale (allowStale) {
21535
+ this[ALLOW_STALE] = !!allowStale;
21536
+ }
21537
+ get allowStale () {
21538
+ return this[ALLOW_STALE]
21539
+ }
21540
+
21541
+ set maxAge (mA) {
21542
+ if (typeof mA !== 'number')
21543
+ throw new TypeError('maxAge must be a non-negative number')
21544
+
21545
+ this[MAX_AGE] = mA;
21546
+ trim(this);
21547
+ }
21548
+ get maxAge () {
21549
+ return this[MAX_AGE]
21550
+ }
21551
+
21552
+ // resize the cache when the lengthCalculator changes.
21553
+ set lengthCalculator (lC) {
21554
+ if (typeof lC !== 'function')
21555
+ lC = naiveLength;
21556
+
21557
+ if (lC !== this[LENGTH_CALCULATOR]) {
21558
+ this[LENGTH_CALCULATOR] = lC;
21559
+ this[LENGTH] = 0;
21560
+ this[LRU_LIST].forEach(hit => {
21561
+ hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
21562
+ this[LENGTH] += hit.length;
21563
+ });
21564
+ }
21565
+ trim(this);
21566
+ }
21567
+ get lengthCalculator () { return this[LENGTH_CALCULATOR] }
21568
+
21569
+ get length () { return this[LENGTH] }
21570
+ get itemCount () { return this[LRU_LIST].length }
21571
+
21572
+ rforEach (fn, thisp) {
21573
+ thisp = thisp || this;
21574
+ for (let walker = this[LRU_LIST].tail; walker !== null;) {
21575
+ const prev = walker.prev;
21576
+ forEachStep(this, fn, walker, thisp);
21577
+ walker = prev;
21578
+ }
21579
+ }
21580
+
21581
+ forEach (fn, thisp) {
21582
+ thisp = thisp || this;
21583
+ for (let walker = this[LRU_LIST].head; walker !== null;) {
21584
+ const next = walker.next;
21585
+ forEachStep(this, fn, walker, thisp);
21586
+ walker = next;
21587
+ }
21588
+ }
21589
+
21590
+ keys () {
21591
+ return this[LRU_LIST].toArray().map(k => k.key)
21592
+ }
21593
+
21594
+ values () {
21595
+ return this[LRU_LIST].toArray().map(k => k.value)
21596
+ }
21597
+
21598
+ reset () {
21599
+ if (this[DISPOSE] &&
21600
+ this[LRU_LIST] &&
21601
+ this[LRU_LIST].length) {
21602
+ this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
21603
+ }
21604
+
21605
+ this[CACHE] = new Map(); // hash of items by key
21606
+ this[LRU_LIST] = new Yallist(); // list of items in order of use recency
21607
+ this[LENGTH] = 0; // length of items in the list
21608
+ }
21609
+
21610
+ dump () {
21611
+ return this[LRU_LIST].map(hit =>
21612
+ isStale(this, hit) ? false : {
21613
+ k: hit.key,
21614
+ v: hit.value,
21615
+ e: hit.now + (hit.maxAge || 0)
21616
+ }).toArray().filter(h => h)
21617
+ }
21618
+
21619
+ dumpLru () {
21620
+ return this[LRU_LIST]
21621
+ }
21622
+
21623
+ set (key, value, maxAge) {
21624
+ maxAge = maxAge || this[MAX_AGE];
21625
+
21626
+ if (maxAge && typeof maxAge !== 'number')
21627
+ throw new TypeError('maxAge must be a number')
21628
+
21629
+ const now = maxAge ? Date.now() : 0;
21630
+ const len = this[LENGTH_CALCULATOR](value, key);
21631
+
21632
+ if (this[CACHE].has(key)) {
21633
+ if (len > this[MAX]) {
21634
+ del(this, this[CACHE].get(key));
21635
+ return false
21636
+ }
21637
+
21638
+ const node = this[CACHE].get(key);
21639
+ const item = node.value;
21640
+
21641
+ // dispose of the old one before overwriting
21642
+ // split out into 2 ifs for better coverage tracking
21643
+ if (this[DISPOSE]) {
21644
+ if (!this[NO_DISPOSE_ON_SET])
21645
+ this[DISPOSE](key, item.value);
21646
+ }
21647
+
21648
+ item.now = now;
21649
+ item.maxAge = maxAge;
21650
+ item.value = value;
21651
+ this[LENGTH] += len - item.length;
21652
+ item.length = len;
21653
+ this.get(key);
21654
+ trim(this);
21655
+ return true
21656
+ }
21657
+
21658
+ const hit = new Entry(key, value, len, now, maxAge);
21659
+
21660
+ // oversized objects fall out of cache automatically.
21661
+ if (hit.length > this[MAX]) {
21662
+ if (this[DISPOSE])
21663
+ this[DISPOSE](key, value);
21664
+
21665
+ return false
21666
+ }
21667
+
21668
+ this[LENGTH] += hit.length;
21669
+ this[LRU_LIST].unshift(hit);
21670
+ this[CACHE].set(key, this[LRU_LIST].head);
21671
+ trim(this);
21672
+ return true
21673
+ }
21674
+
21675
+ has (key) {
21676
+ if (!this[CACHE].has(key)) return false
21677
+ const hit = this[CACHE].get(key).value;
21678
+ return !isStale(this, hit)
21679
+ }
21680
+
21681
+ get (key) {
21682
+ return get(this, key, true)
21683
+ }
21684
+
21685
+ peek (key) {
21686
+ return get(this, key, false)
21687
+ }
21688
+
21689
+ pop () {
21690
+ const node = this[LRU_LIST].tail;
21691
+ if (!node)
21692
+ return null
21693
+
21694
+ del(this, node);
21695
+ return node.value
21696
+ }
21697
+
21698
+ del (key) {
21699
+ del(this, this[CACHE].get(key));
21700
+ }
21701
+
21702
+ load (arr) {
21703
+ // reset the cache
21704
+ this.reset();
21705
+
21706
+ const now = Date.now();
21707
+ // A previous serialized cache has the most recent items first
21708
+ for (let l = arr.length - 1; l >= 0; l--) {
21709
+ const hit = arr[l];
21710
+ const expiresAt = hit.e || 0;
21711
+ if (expiresAt === 0)
21712
+ // the item was created without expiration in a non aged cache
21713
+ this.set(hit.k, hit.v);
21714
+ else {
21715
+ const maxAge = expiresAt - now;
21716
+ // dont add already expired items
21717
+ if (maxAge > 0) {
21718
+ this.set(hit.k, hit.v, maxAge);
21719
+ }
21720
+ }
21721
+ }
21722
+ }
21723
+
21724
+ prune () {
21725
+ this[CACHE].forEach((value, key) => get(this, key, false));
21726
+ }
21727
+ }
21728
+
21729
+ const get = (self, key, doUse) => {
21730
+ const node = self[CACHE].get(key);
21731
+ if (node) {
21732
+ const hit = node.value;
21733
+ if (isStale(self, hit)) {
21734
+ del(self, node);
21735
+ if (!self[ALLOW_STALE])
21736
+ return undefined
21737
+ } else {
21738
+ if (doUse) {
21739
+ if (self[UPDATE_AGE_ON_GET])
21740
+ node.value.now = Date.now();
21741
+ self[LRU_LIST].unshiftNode(node);
21742
+ }
21743
+ }
21744
+ return hit.value
21745
+ }
21746
+ };
21747
+
21748
+ const isStale = (self, hit) => {
21749
+ if (!hit || (!hit.maxAge && !self[MAX_AGE]))
21750
+ return false
21751
+
21752
+ const diff = Date.now() - hit.now;
21753
+ return hit.maxAge ? diff > hit.maxAge
21754
+ : self[MAX_AGE] && (diff > self[MAX_AGE])
21755
+ };
21756
+
21757
+ const trim = self => {
21758
+ if (self[LENGTH] > self[MAX]) {
21759
+ for (let walker = self[LRU_LIST].tail;
21760
+ self[LENGTH] > self[MAX] && walker !== null;) {
21761
+ // We know that we're about to delete this one, and also
21762
+ // what the next least recently used key will be, so just
21763
+ // go ahead and set it now.
21764
+ const prev = walker.prev;
21765
+ del(self, walker);
21766
+ walker = prev;
21767
+ }
21768
+ }
21769
+ };
21770
+
21771
+ const del = (self, node) => {
21772
+ if (node) {
21773
+ const hit = node.value;
21774
+ if (self[DISPOSE])
21775
+ self[DISPOSE](hit.key, hit.value);
21776
+
21777
+ self[LENGTH] -= hit.length;
21778
+ self[CACHE].delete(hit.key);
21779
+ self[LRU_LIST].removeNode(node);
21780
+ }
21781
+ };
21782
+
21783
+ class Entry {
21784
+ constructor (key, value, length, now, maxAge) {
21785
+ this.key = key;
21786
+ this.value = value;
21787
+ this.length = length;
21788
+ this.now = now;
21789
+ this.maxAge = maxAge || 0;
21790
+ }
21791
+ }
21792
+
21793
+ const forEachStep = (self, fn, node, thisp) => {
21794
+ let hit = node.value;
21795
+ if (isStale(self, hit)) {
21796
+ del(self, node);
21797
+ if (!self[ALLOW_STALE])
21798
+ hit = undefined;
21799
+ }
21800
+ if (hit)
21801
+ fn.call(thisp, hit.value, hit.key, self);
21802
+ };
21803
+
21804
+ lruCache = LRUCache;
21805
+ return lruCache;
21806
+ }
21807
+
21808
+ var range;
21809
+ var hasRequiredRange;
21810
+
21811
+ function requireRange () {
21812
+ if (hasRequiredRange) return range;
21813
+ hasRequiredRange = 1;
21814
+ // hoisted class for cyclic dependency
21815
+ class Range {
21816
+ constructor (range, options) {
21817
+ options = parseOptions(options);
21818
+
21819
+ if (range instanceof Range) {
21820
+ if (
21821
+ range.loose === !!options.loose &&
21822
+ range.includePrerelease === !!options.includePrerelease
21823
+ ) {
21824
+ return range
21825
+ } else {
21826
+ return new Range(range.raw, options)
21827
+ }
21828
+ }
21829
+
21830
+ if (range instanceof Comparator) {
21831
+ // just put it in the set and return
21832
+ this.raw = range.value;
21833
+ this.set = [[range]];
21834
+ this.format();
21835
+ return this
21836
+ }
21837
+
21838
+ this.options = options;
21839
+ this.loose = !!options.loose;
21840
+ this.includePrerelease = !!options.includePrerelease;
21841
+
21842
+ // First reduce all whitespace as much as possible so we do not have to rely
21843
+ // on potentially slow regexes like \s*. This is then stored and used for
21844
+ // future error messages as well.
21845
+ this.raw = range
21846
+ .trim()
21847
+ .split(/\s+/)
21848
+ .join(' ');
21849
+
21850
+ // First, split on ||
21851
+ this.set = this.raw
21852
+ .split('||')
21853
+ // map the range to a 2d array of comparators
21854
+ .map(r => this.parseRange(r.trim()))
21855
+ // throw out any comparator lists that are empty
21856
+ // this generally means that it was not a valid range, which is allowed
21857
+ // in loose mode, but will still throw if the WHOLE range is invalid.
21858
+ .filter(c => c.length);
21859
+
21860
+ if (!this.set.length) {
21861
+ throw new TypeError(`Invalid SemVer Range: ${this.raw}`)
21862
+ }
21863
+
21864
+ // if we have any that are not the null set, throw out null sets.
21865
+ if (this.set.length > 1) {
21866
+ // keep the first one, in case they're all null sets
21867
+ const first = this.set[0];
21868
+ this.set = this.set.filter(c => !isNullSet(c[0]));
21869
+ if (this.set.length === 0) {
21870
+ this.set = [first];
21871
+ } else if (this.set.length > 1) {
21872
+ // if we have any that are *, then the range is just *
21873
+ for (const c of this.set) {
21874
+ if (c.length === 1 && isAny(c[0])) {
21875
+ this.set = [c];
21876
+ break
21877
+ }
21878
+ }
21879
+ }
21880
+ }
21881
+
21882
+ this.format();
21883
+ }
21884
+
21885
+ format () {
21886
+ this.range = this.set
21887
+ .map((comps) => comps.join(' ').trim())
21888
+ .join('||')
21889
+ .trim();
21890
+ return this.range
21891
+ }
21892
+
21893
+ toString () {
21894
+ return this.range
21895
+ }
21896
+
21897
+ parseRange (range) {
21898
+ // memoize range parsing for performance.
21899
+ // this is a very hot path, and fully deterministic.
21900
+ const memoOpts =
21901
+ (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |
21902
+ (this.options.loose && FLAG_LOOSE);
21903
+ const memoKey = memoOpts + ':' + range;
21904
+ const cached = cache.get(memoKey);
21905
+ if (cached) {
21906
+ return cached
21907
+ }
21908
+
21909
+ const loose = this.options.loose;
21910
+ // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
21911
+ const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
21912
+ range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
21913
+ debug('hyphen replace', range);
21914
+
21915
+ // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
21916
+ range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
21917
+ debug('comparator trim', range);
21918
+
21919
+ // `~ 1.2.3` => `~1.2.3`
21920
+ range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
21921
+ debug('tilde trim', range);
21922
+
21923
+ // `^ 1.2.3` => `^1.2.3`
21924
+ range = range.replace(re[t.CARETTRIM], caretTrimReplace);
21925
+ debug('caret trim', range);
21926
+
21927
+ // At this point, the range is completely trimmed and
21928
+ // ready to be split into comparators.
21929
+
21930
+ let rangeList = range
21931
+ .split(' ')
21932
+ .map(comp => parseComparator(comp, this.options))
21933
+ .join(' ')
21934
+ .split(/\s+/)
21935
+ // >=0.0.0 is equivalent to *
21936
+ .map(comp => replaceGTE0(comp, this.options));
21937
+
21938
+ if (loose) {
21939
+ // in loose mode, throw out any that are not valid comparators
21940
+ rangeList = rangeList.filter(comp => {
21941
+ debug('loose invalid filter', comp, this.options);
21942
+ return !!comp.match(re[t.COMPARATORLOOSE])
21943
+ });
21944
+ }
21945
+ debug('range list', rangeList);
21946
+
21947
+ // if any comparators are the null set, then replace with JUST null set
21948
+ // if more than one comparator, remove any * comparators
21949
+ // also, don't include the same comparator more than once
21950
+ const rangeMap = new Map();
21951
+ const comparators = rangeList.map(comp => new Comparator(comp, this.options));
21952
+ for (const comp of comparators) {
21953
+ if (isNullSet(comp)) {
21954
+ return [comp]
21955
+ }
21956
+ rangeMap.set(comp.value, comp);
21957
+ }
21958
+ if (rangeMap.size > 1 && rangeMap.has('')) {
21959
+ rangeMap.delete('');
21960
+ }
21961
+
21962
+ const result = [...rangeMap.values()];
21963
+ cache.set(memoKey, result);
21964
+ return result
21965
+ }
21966
+
21967
+ intersects (range, options) {
21968
+ if (!(range instanceof Range)) {
21969
+ throw new TypeError('a Range is required')
21970
+ }
21971
+
21972
+ return this.set.some((thisComparators) => {
21973
+ return (
21974
+ isSatisfiable(thisComparators, options) &&
21975
+ range.set.some((rangeComparators) => {
21976
+ return (
21977
+ isSatisfiable(rangeComparators, options) &&
21978
+ thisComparators.every((thisComparator) => {
21979
+ return rangeComparators.every((rangeComparator) => {
21980
+ return thisComparator.intersects(rangeComparator, options)
21981
+ })
21982
+ })
21983
+ )
21984
+ })
21985
+ )
21986
+ })
21987
+ }
21988
+
21989
+ // if ANY of the sets match ALL of its comparators, then pass
21990
+ test (version) {
21991
+ if (!version) {
21992
+ return false
21993
+ }
21994
+
21995
+ if (typeof version === 'string') {
21996
+ try {
21997
+ version = new SemVer(version, this.options);
21998
+ } catch (er) {
21999
+ return false
22000
+ }
22001
+ }
22002
+
22003
+ for (let i = 0; i < this.set.length; i++) {
22004
+ if (testSet(this.set[i], version, this.options)) {
22005
+ return true
22006
+ }
22007
+ }
22008
+ return false
22009
+ }
22010
+ }
22011
+
22012
+ range = Range;
22013
+
22014
+ const LRU = requireLruCache();
22015
+ const cache = new LRU({ max: 1000 });
22016
+
22017
+ const parseOptions = parseOptions_1;
22018
+ const Comparator = requireComparator();
22019
+ const debug = debug_1;
22020
+ const SemVer = semver$1;
22021
+ const {
22022
+ safeRe: re,
22023
+ t,
22024
+ comparatorTrimReplace,
22025
+ tildeTrimReplace,
22026
+ caretTrimReplace,
22027
+ } = reExports;
22028
+ const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = constants$1;
22029
+
22030
+ const isNullSet = c => c.value === '<0.0.0-0';
22031
+ const isAny = c => c.value === '';
22032
+
22033
+ // take a set of comparators and determine whether there
22034
+ // exists a version which can satisfy it
22035
+ const isSatisfiable = (comparators, options) => {
22036
+ let result = true;
22037
+ const remainingComparators = comparators.slice();
22038
+ let testComparator = remainingComparators.pop();
22039
+
22040
+ while (result && remainingComparators.length) {
22041
+ result = remainingComparators.every((otherComparator) => {
22042
+ return testComparator.intersects(otherComparator, options)
22043
+ });
22044
+
22045
+ testComparator = remainingComparators.pop();
22046
+ }
22047
+
22048
+ return result
22049
+ };
22050
+
22051
+ // comprised of xranges, tildes, stars, and gtlt's at this point.
22052
+ // already replaced the hyphen ranges
22053
+ // turn into a set of JUST comparators.
22054
+ const parseComparator = (comp, options) => {
22055
+ debug('comp', comp, options);
22056
+ comp = replaceCarets(comp, options);
22057
+ debug('caret', comp);
22058
+ comp = replaceTildes(comp, options);
22059
+ debug('tildes', comp);
22060
+ comp = replaceXRanges(comp, options);
22061
+ debug('xrange', comp);
22062
+ comp = replaceStars(comp, options);
22063
+ debug('stars', comp);
22064
+ return comp
22065
+ };
22066
+
22067
+ const isX = id => !id || id.toLowerCase() === 'x' || id === '*';
22068
+
22069
+ // ~, ~> --> * (any, kinda silly)
22070
+ // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
22071
+ // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
22072
+ // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0
22073
+ // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
22074
+ // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
22075
+ // ~0.0.1 --> >=0.0.1 <0.1.0-0
22076
+ const replaceTildes = (comp, options) => {
22077
+ return comp
22078
+ .trim()
22079
+ .split(/\s+/)
22080
+ .map((c) => replaceTilde(c, options))
22081
+ .join(' ')
22082
+ };
22083
+
22084
+ const replaceTilde = (comp, options) => {
22085
+ const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
22086
+ return comp.replace(r, (_, M, m, p, pr) => {
22087
+ debug('tilde', comp, _, M, m, p, pr);
22088
+ let ret;
22089
+
22090
+ if (isX(M)) {
22091
+ ret = '';
22092
+ } else if (isX(m)) {
22093
+ ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
22094
+ } else if (isX(p)) {
22095
+ // ~1.2 == >=1.2.0 <1.3.0-0
22096
+ ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
22097
+ } else if (pr) {
22098
+ debug('replaceTilde pr', pr);
22099
+ ret = `>=${M}.${m}.${p}-${pr
22100
+ } <${M}.${+m + 1}.0-0`;
22101
+ } else {
22102
+ // ~1.2.3 == >=1.2.3 <1.3.0-0
22103
+ ret = `>=${M}.${m}.${p
22104
+ } <${M}.${+m + 1}.0-0`;
22105
+ }
22106
+
22107
+ debug('tilde return', ret);
22108
+ return ret
22109
+ })
22110
+ };
22111
+
22112
+ // ^ --> * (any, kinda silly)
22113
+ // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0
22114
+ // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0
22115
+ // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0
22116
+ // ^1.2.3 --> >=1.2.3 <2.0.0-0
22117
+ // ^1.2.0 --> >=1.2.0 <2.0.0-0
22118
+ // ^0.0.1 --> >=0.0.1 <0.0.2-0
22119
+ // ^0.1.0 --> >=0.1.0 <0.2.0-0
22120
+ const replaceCarets = (comp, options) => {
22121
+ return comp
22122
+ .trim()
22123
+ .split(/\s+/)
22124
+ .map((c) => replaceCaret(c, options))
22125
+ .join(' ')
22126
+ };
22127
+
22128
+ const replaceCaret = (comp, options) => {
22129
+ debug('caret', comp, options);
22130
+ const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
22131
+ const z = options.includePrerelease ? '-0' : '';
22132
+ return comp.replace(r, (_, M, m, p, pr) => {
22133
+ debug('caret', comp, _, M, m, p, pr);
22134
+ let ret;
22135
+
22136
+ if (isX(M)) {
22137
+ ret = '';
22138
+ } else if (isX(m)) {
22139
+ ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
22140
+ } else if (isX(p)) {
22141
+ if (M === '0') {
22142
+ ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
22143
+ } else {
22144
+ ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
22145
+ }
22146
+ } else if (pr) {
22147
+ debug('replaceCaret pr', pr);
22148
+ if (M === '0') {
22149
+ if (m === '0') {
22150
+ ret = `>=${M}.${m}.${p}-${pr
22151
+ } <${M}.${m}.${+p + 1}-0`;
22152
+ } else {
22153
+ ret = `>=${M}.${m}.${p}-${pr
22154
+ } <${M}.${+m + 1}.0-0`;
22155
+ }
22156
+ } else {
22157
+ ret = `>=${M}.${m}.${p}-${pr
22158
+ } <${+M + 1}.0.0-0`;
22159
+ }
22160
+ } else {
22161
+ debug('no pr');
22162
+ if (M === '0') {
22163
+ if (m === '0') {
22164
+ ret = `>=${M}.${m}.${p
22165
+ }${z} <${M}.${m}.${+p + 1}-0`;
22166
+ } else {
22167
+ ret = `>=${M}.${m}.${p
22168
+ }${z} <${M}.${+m + 1}.0-0`;
22169
+ }
22170
+ } else {
22171
+ ret = `>=${M}.${m}.${p
22172
+ } <${+M + 1}.0.0-0`;
22173
+ }
22174
+ }
22175
+
22176
+ debug('caret return', ret);
22177
+ return ret
22178
+ })
22179
+ };
22180
+
22181
+ const replaceXRanges = (comp, options) => {
22182
+ debug('replaceXRanges', comp, options);
22183
+ return comp
22184
+ .split(/\s+/)
22185
+ .map((c) => replaceXRange(c, options))
22186
+ .join(' ')
22187
+ };
22188
+
22189
+ const replaceXRange = (comp, options) => {
22190
+ comp = comp.trim();
22191
+ const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
22192
+ return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
22193
+ debug('xRange', comp, ret, gtlt, M, m, p, pr);
22194
+ const xM = isX(M);
22195
+ const xm = xM || isX(m);
22196
+ const xp = xm || isX(p);
22197
+ const anyX = xp;
22198
+
22199
+ if (gtlt === '=' && anyX) {
22200
+ gtlt = '';
22201
+ }
22202
+
22203
+ // if we're including prereleases in the match, then we need
22204
+ // to fix this to -0, the lowest possible prerelease value
22205
+ pr = options.includePrerelease ? '-0' : '';
22206
+
22207
+ if (xM) {
22208
+ if (gtlt === '>' || gtlt === '<') {
22209
+ // nothing is allowed
22210
+ ret = '<0.0.0-0';
22211
+ } else {
22212
+ // nothing is forbidden
22213
+ ret = '*';
22214
+ }
22215
+ } else if (gtlt && anyX) {
22216
+ // we know patch is an x, because we have any x at all.
22217
+ // replace X with 0
22218
+ if (xm) {
22219
+ m = 0;
22220
+ }
22221
+ p = 0;
22222
+
22223
+ if (gtlt === '>') {
22224
+ // >1 => >=2.0.0
22225
+ // >1.2 => >=1.3.0
22226
+ gtlt = '>=';
22227
+ if (xm) {
22228
+ M = +M + 1;
22229
+ m = 0;
22230
+ p = 0;
22231
+ } else {
22232
+ m = +m + 1;
22233
+ p = 0;
22234
+ }
22235
+ } else if (gtlt === '<=') {
22236
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
22237
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
22238
+ gtlt = '<';
22239
+ if (xm) {
22240
+ M = +M + 1;
22241
+ } else {
22242
+ m = +m + 1;
22243
+ }
22244
+ }
22245
+
22246
+ if (gtlt === '<') {
22247
+ pr = '-0';
22248
+ }
22249
+
22250
+ ret = `${gtlt + M}.${m}.${p}${pr}`;
22251
+ } else if (xm) {
22252
+ ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
22253
+ } else if (xp) {
22254
+ ret = `>=${M}.${m}.0${pr
22255
+ } <${M}.${+m + 1}.0-0`;
22256
+ }
22257
+
22258
+ debug('xRange return', ret);
22259
+
22260
+ return ret
22261
+ })
22262
+ };
22263
+
22264
+ // Because * is AND-ed with everything else in the comparator,
22265
+ // and '' means "any version", just remove the *s entirely.
22266
+ const replaceStars = (comp, options) => {
22267
+ debug('replaceStars', comp, options);
22268
+ // Looseness is ignored here. star is always as loose as it gets!
22269
+ return comp
22270
+ .trim()
22271
+ .replace(re[t.STAR], '')
22272
+ };
22273
+
22274
+ const replaceGTE0 = (comp, options) => {
22275
+ debug('replaceGTE0', comp, options);
22276
+ return comp
22277
+ .trim()
22278
+ .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')
22279
+ };
22280
+
22281
+ // This function is passed to string.replace(re[t.HYPHENRANGE])
22282
+ // M, m, patch, prerelease, build
22283
+ // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
22284
+ // 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
22285
+ // 1.2 - 3.4 => >=1.2.0 <3.5.0-0
22286
+ const hyphenReplace = incPr => ($0,
22287
+ from, fM, fm, fp, fpr, fb,
22288
+ to, tM, tm, tp, tpr, tb) => {
22289
+ if (isX(fM)) {
22290
+ from = '';
22291
+ } else if (isX(fm)) {
22292
+ from = `>=${fM}.0.0${incPr ? '-0' : ''}`;
22293
+ } else if (isX(fp)) {
22294
+ from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`;
22295
+ } else if (fpr) {
22296
+ from = `>=${from}`;
22297
+ } else {
22298
+ from = `>=${from}${incPr ? '-0' : ''}`;
22299
+ }
22300
+
22301
+ if (isX(tM)) {
22302
+ to = '';
22303
+ } else if (isX(tm)) {
22304
+ to = `<${+tM + 1}.0.0-0`;
22305
+ } else if (isX(tp)) {
22306
+ to = `<${tM}.${+tm + 1}.0-0`;
22307
+ } else if (tpr) {
22308
+ to = `<=${tM}.${tm}.${tp}-${tpr}`;
22309
+ } else if (incPr) {
22310
+ to = `<${tM}.${tm}.${+tp + 1}-0`;
22311
+ } else {
22312
+ to = `<=${to}`;
22313
+ }
22314
+
22315
+ return `${from} ${to}`.trim()
22316
+ };
22317
+
22318
+ const testSet = (set, version, options) => {
22319
+ for (let i = 0; i < set.length; i++) {
22320
+ if (!set[i].test(version)) {
22321
+ return false
22322
+ }
22323
+ }
22324
+
22325
+ if (version.prerelease.length && !options.includePrerelease) {
22326
+ // Find the set of versions that are allowed to have prereleases
22327
+ // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
22328
+ // That should allow `1.2.3-pr.2` to pass.
22329
+ // However, `1.2.4-alpha.notready` should NOT be allowed,
22330
+ // even though it's within the range set by the comparators.
22331
+ for (let i = 0; i < set.length; i++) {
22332
+ debug(set[i].semver);
22333
+ if (set[i].semver === Comparator.ANY) {
22334
+ continue
22335
+ }
22336
+
22337
+ if (set[i].semver.prerelease.length > 0) {
22338
+ const allowed = set[i].semver;
22339
+ if (allowed.major === version.major &&
22340
+ allowed.minor === version.minor &&
22341
+ allowed.patch === version.patch) {
22342
+ return true
22343
+ }
22344
+ }
22345
+ }
22346
+
22347
+ // Version has a -pre, but it's not one of the ones we like.
22348
+ return false
22349
+ }
22350
+
22351
+ return true
22352
+ };
22353
+ return range;
22354
+ }
22355
+
22356
+ var comparator;
22357
+ var hasRequiredComparator;
22358
+
22359
+ function requireComparator () {
22360
+ if (hasRequiredComparator) return comparator;
22361
+ hasRequiredComparator = 1;
22362
+ const ANY = Symbol('SemVer ANY');
22363
+ // hoisted class for cyclic dependency
22364
+ class Comparator {
22365
+ static get ANY () {
22366
+ return ANY
22367
+ }
22368
+
22369
+ constructor (comp, options) {
22370
+ options = parseOptions(options);
22371
+
22372
+ if (comp instanceof Comparator) {
22373
+ if (comp.loose === !!options.loose) {
22374
+ return comp
22375
+ } else {
22376
+ comp = comp.value;
22377
+ }
22378
+ }
22379
+
22380
+ comp = comp.trim().split(/\s+/).join(' ');
22381
+ debug('comparator', comp, options);
22382
+ this.options = options;
22383
+ this.loose = !!options.loose;
22384
+ this.parse(comp);
22385
+
22386
+ if (this.semver === ANY) {
22387
+ this.value = '';
22388
+ } else {
22389
+ this.value = this.operator + this.semver.version;
22390
+ }
22391
+
22392
+ debug('comp', this);
22393
+ }
22394
+
22395
+ parse (comp) {
22396
+ const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
22397
+ const m = comp.match(r);
22398
+
22399
+ if (!m) {
22400
+ throw new TypeError(`Invalid comparator: ${comp}`)
22401
+ }
22402
+
22403
+ this.operator = m[1] !== undefined ? m[1] : '';
22404
+ if (this.operator === '=') {
22405
+ this.operator = '';
22406
+ }
22407
+
22408
+ // if it literally is just '>' or '' then allow anything.
22409
+ if (!m[2]) {
22410
+ this.semver = ANY;
22411
+ } else {
22412
+ this.semver = new SemVer(m[2], this.options.loose);
22413
+ }
22414
+ }
22415
+
22416
+ toString () {
22417
+ return this.value
22418
+ }
22419
+
22420
+ test (version) {
22421
+ debug('Comparator.test', version, this.options.loose);
22422
+
22423
+ if (this.semver === ANY || version === ANY) {
22424
+ return true
22425
+ }
22426
+
22427
+ if (typeof version === 'string') {
22428
+ try {
22429
+ version = new SemVer(version, this.options);
22430
+ } catch (er) {
22431
+ return false
22432
+ }
22433
+ }
22434
+
22435
+ return cmp(version, this.operator, this.semver, this.options)
22436
+ }
22437
+
22438
+ intersects (comp, options) {
22439
+ if (!(comp instanceof Comparator)) {
22440
+ throw new TypeError('a Comparator is required')
22441
+ }
22442
+
22443
+ if (this.operator === '') {
22444
+ if (this.value === '') {
22445
+ return true
22446
+ }
22447
+ return new Range(comp.value, options).test(this.value)
22448
+ } else if (comp.operator === '') {
22449
+ if (comp.value === '') {
22450
+ return true
22451
+ }
22452
+ return new Range(this.value, options).test(comp.semver)
22453
+ }
22454
+
22455
+ options = parseOptions(options);
22456
+
22457
+ // Special cases where nothing can possibly be lower
22458
+ if (options.includePrerelease &&
22459
+ (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {
22460
+ return false
22461
+ }
22462
+ if (!options.includePrerelease &&
22463
+ (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {
22464
+ return false
22465
+ }
22466
+
22467
+ // Same direction increasing (> or >=)
22468
+ if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {
22469
+ return true
22470
+ }
22471
+ // Same direction decreasing (< or <=)
22472
+ if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {
22473
+ return true
22474
+ }
22475
+ // same SemVer and both sides are inclusive (<= or >=)
22476
+ if (
22477
+ (this.semver.version === comp.semver.version) &&
22478
+ this.operator.includes('=') && comp.operator.includes('=')) {
22479
+ return true
22480
+ }
22481
+ // opposite directions less than
22482
+ if (cmp(this.semver, '<', comp.semver, options) &&
22483
+ this.operator.startsWith('>') && comp.operator.startsWith('<')) {
22484
+ return true
22485
+ }
22486
+ // opposite directions greater than
22487
+ if (cmp(this.semver, '>', comp.semver, options) &&
22488
+ this.operator.startsWith('<') && comp.operator.startsWith('>')) {
22489
+ return true
22490
+ }
22491
+ return false
22492
+ }
22493
+ }
22494
+
22495
+ comparator = Comparator;
22496
+
22497
+ const parseOptions = parseOptions_1;
22498
+ const { safeRe: re, t } = reExports;
22499
+ const cmp = cmp_1;
22500
+ const debug = debug_1;
22501
+ const SemVer = semver$1;
22502
+ const Range = requireRange();
22503
+ return comparator;
22504
+ }
22505
+
22506
+ const Range$9 = requireRange();
22507
+ const satisfies$4 = (version, range, options) => {
22508
+ try {
22509
+ range = new Range$9(range, options);
22510
+ } catch (er) {
22511
+ return false
22512
+ }
22513
+ return range.test(version)
22514
+ };
22515
+ var satisfies_1 = satisfies$4;
22516
+
22517
+ var satisfies$5 = /*@__PURE__*/getDefaultExportFromCjs(satisfies_1);
22518
+
22519
+ const Range$8 = requireRange();
22520
+
22521
+ // Mostly just for testing and legacy API reasons
22522
+ const toComparators$1 = (range, options) =>
22523
+ new Range$8(range, options).set
22524
+ .map(comp => comp.map(c => c.value).join(' ').trim().split(' '));
22525
+
22526
+ var toComparators_1 = toComparators$1;
22527
+
22528
+ var toComparators$2 = /*@__PURE__*/getDefaultExportFromCjs(toComparators_1);
22529
+
22530
+ const SemVer$4 = semver$1;
22531
+ const Range$7 = requireRange();
22532
+
22533
+ const maxSatisfying$1 = (versions, range, options) => {
22534
+ let max = null;
22535
+ let maxSV = null;
22536
+ let rangeObj = null;
22537
+ try {
22538
+ rangeObj = new Range$7(range, options);
22539
+ } catch (er) {
22540
+ return null
22541
+ }
22542
+ versions.forEach((v) => {
22543
+ if (rangeObj.test(v)) {
22544
+ // satisfies(v, range, options)
22545
+ if (!max || maxSV.compare(v) === -1) {
22546
+ // compare(max, v, true)
22547
+ max = v;
22548
+ maxSV = new SemVer$4(max, options);
22549
+ }
22550
+ }
22551
+ });
22552
+ return max
22553
+ };
22554
+ var maxSatisfying_1 = maxSatisfying$1;
22555
+
22556
+ var maxSatisfying$2 = /*@__PURE__*/getDefaultExportFromCjs(maxSatisfying_1);
22557
+
22558
+ const SemVer$3 = semver$1;
22559
+ const Range$6 = requireRange();
22560
+ const minSatisfying$1 = (versions, range, options) => {
22561
+ let min = null;
22562
+ let minSV = null;
22563
+ let rangeObj = null;
22564
+ try {
22565
+ rangeObj = new Range$6(range, options);
22566
+ } catch (er) {
22567
+ return null
22568
+ }
22569
+ versions.forEach((v) => {
22570
+ if (rangeObj.test(v)) {
22571
+ // satisfies(v, range, options)
22572
+ if (!min || minSV.compare(v) === 1) {
22573
+ // compare(min, v, true)
22574
+ min = v;
22575
+ minSV = new SemVer$3(min, options);
22576
+ }
22577
+ }
22578
+ });
22579
+ return min
22580
+ };
22581
+ var minSatisfying_1 = minSatisfying$1;
22582
+
22583
+ var minSatisfying$2 = /*@__PURE__*/getDefaultExportFromCjs(minSatisfying_1);
22584
+
22585
+ const SemVer$2 = semver$1;
22586
+ const Range$5 = requireRange();
22587
+ const gt$2 = gt_1;
22588
+
22589
+ const minVersion$1 = (range, loose) => {
22590
+ range = new Range$5(range, loose);
22591
+
22592
+ let minver = new SemVer$2('0.0.0');
22593
+ if (range.test(minver)) {
22594
+ return minver
22595
+ }
22596
+
22597
+ minver = new SemVer$2('0.0.0-0');
22598
+ if (range.test(minver)) {
22599
+ return minver
22600
+ }
22601
+
22602
+ minver = null;
22603
+ for (let i = 0; i < range.set.length; ++i) {
22604
+ const comparators = range.set[i];
22605
+
22606
+ let setMin = null;
22607
+ comparators.forEach((comparator) => {
22608
+ // Clone to avoid manipulating the comparator's semver object.
22609
+ const compver = new SemVer$2(comparator.semver.version);
22610
+ switch (comparator.operator) {
22611
+ case '>':
22612
+ if (compver.prerelease.length === 0) {
22613
+ compver.patch++;
22614
+ } else {
22615
+ compver.prerelease.push(0);
22616
+ }
22617
+ compver.raw = compver.format();
22618
+ /* fallthrough */
22619
+ case '':
22620
+ case '>=':
22621
+ if (!setMin || gt$2(compver, setMin)) {
22622
+ setMin = compver;
22623
+ }
22624
+ break
22625
+ case '<':
22626
+ case '<=':
22627
+ /* Ignore maximum versions */
22628
+ break
22629
+ /* istanbul ignore next */
22630
+ default:
22631
+ throw new Error(`Unexpected operation: ${comparator.operator}`)
22632
+ }
22633
+ });
22634
+ if (setMin && (!minver || gt$2(minver, setMin))) {
22635
+ minver = setMin;
22636
+ }
22637
+ }
22638
+
22639
+ if (minver && range.test(minver)) {
22640
+ return minver
22641
+ }
22642
+
22643
+ return null
22644
+ };
22645
+ var minVersion_1 = minVersion$1;
22646
+
22647
+ var minVersion$2 = /*@__PURE__*/getDefaultExportFromCjs(minVersion_1);
22648
+
22649
+ const Range$4 = requireRange();
22650
+ const validRange$1 = (range, options) => {
22651
+ try {
22652
+ // Return '*' instead of '' so that truthiness works.
22653
+ // This will throw if it's invalid anyway
22654
+ return new Range$4(range, options).range || '*'
22655
+ } catch (er) {
22656
+ return null
22657
+ }
22658
+ };
22659
+ var valid$1 = validRange$1;
22660
+
22661
+ var valid$2 = /*@__PURE__*/getDefaultExportFromCjs(valid$1);
22662
+
22663
+ const SemVer$1 = semver$1;
22664
+ const Comparator$2 = requireComparator();
22665
+ const { ANY: ANY$1 } = Comparator$2;
22666
+ const Range$3 = requireRange();
22667
+ const satisfies$3 = satisfies_1;
22668
+ const gt$1 = gt_1;
22669
+ const lt$1 = lt_1;
22670
+ const lte$1 = lte_1;
22671
+ const gte$1 = gte_1;
22672
+
22673
+ const outside$3 = (version, range, hilo, options) => {
22674
+ version = new SemVer$1(version, options);
22675
+ range = new Range$3(range, options);
22676
+
22677
+ let gtfn, ltefn, ltfn, comp, ecomp;
22678
+ switch (hilo) {
22679
+ case '>':
22680
+ gtfn = gt$1;
22681
+ ltefn = lte$1;
22682
+ ltfn = lt$1;
22683
+ comp = '>';
22684
+ ecomp = '>=';
22685
+ break
22686
+ case '<':
22687
+ gtfn = lt$1;
22688
+ ltefn = gte$1;
22689
+ ltfn = gt$1;
22690
+ comp = '<';
22691
+ ecomp = '<=';
22692
+ break
22693
+ default:
22694
+ throw new TypeError('Must provide a hilo val of "<" or ">"')
22695
+ }
22696
+
22697
+ // If it satisfies the range it is not outside
22698
+ if (satisfies$3(version, range, options)) {
22699
+ return false
22700
+ }
22701
+
22702
+ // From now on, variable terms are as if we're in "gtr" mode.
22703
+ // but note that everything is flipped for the "ltr" function.
22704
+
22705
+ for (let i = 0; i < range.set.length; ++i) {
22706
+ const comparators = range.set[i];
22707
+
22708
+ let high = null;
22709
+ let low = null;
22710
+
22711
+ comparators.forEach((comparator) => {
22712
+ if (comparator.semver === ANY$1) {
22713
+ comparator = new Comparator$2('>=0.0.0');
22714
+ }
22715
+ high = high || comparator;
22716
+ low = low || comparator;
22717
+ if (gtfn(comparator.semver, high.semver, options)) {
22718
+ high = comparator;
22719
+ } else if (ltfn(comparator.semver, low.semver, options)) {
22720
+ low = comparator;
22721
+ }
22722
+ });
22723
+
22724
+ // If the edge version comparator has a operator then our version
22725
+ // isn't outside it
22726
+ if (high.operator === comp || high.operator === ecomp) {
22727
+ return false
22728
+ }
22729
+
22730
+ // If the lowest version comparator has an operator and our version
22731
+ // is less than it then it isn't higher than the range
22732
+ if ((!low.operator || low.operator === comp) &&
22733
+ ltefn(version, low.semver)) {
22734
+ return false
22735
+ } else if (low.operator === ecomp && ltfn(version, low.semver)) {
22736
+ return false
22737
+ }
22738
+ }
22739
+ return true
22740
+ };
22741
+
22742
+ var outside_1 = outside$3;
22743
+
22744
+ var outside$4 = /*@__PURE__*/getDefaultExportFromCjs(outside_1);
22745
+
22746
+ // Determine if version is greater than all the versions possible in the range.
22747
+ const outside$2 = outside_1;
22748
+ const gtr$1 = (version, range, options) => outside$2(version, range, '>', options);
22749
+ var gtr_1 = gtr$1;
22750
+
22751
+ var gtr$2 = /*@__PURE__*/getDefaultExportFromCjs(gtr_1);
22752
+
22753
+ const outside$1 = outside_1;
22754
+ // Determine if version is less than all the versions possible in the range
22755
+ const ltr$1 = (version, range, options) => outside$1(version, range, '<', options);
22756
+ var ltr_1 = ltr$1;
22757
+
22758
+ var ltr$2 = /*@__PURE__*/getDefaultExportFromCjs(ltr_1);
22759
+
22760
+ const Range$2 = requireRange();
22761
+ const intersects$1 = (r1, r2, options) => {
22762
+ r1 = new Range$2(r1, options);
22763
+ r2 = new Range$2(r2, options);
22764
+ return r1.intersects(r2, options)
22765
+ };
22766
+ var intersects_1 = intersects$1;
22767
+
22768
+ var intersects$2 = /*@__PURE__*/getDefaultExportFromCjs(intersects_1);
22769
+
22770
+ // given a set of versions and a range, create a "simplified" range
22771
+ // that includes the same versions that the original range does
22772
+ // If the original range is shorter than the simplified one, return that.
22773
+ const satisfies$2 = satisfies_1;
22774
+ const compare$2 = compare_1;
22775
+ var simplify = (versions, range, options) => {
22776
+ const set = [];
22777
+ let first = null;
22778
+ let prev = null;
22779
+ const v = versions.sort((a, b) => compare$2(a, b, options));
22780
+ for (const version of v) {
22781
+ const included = satisfies$2(version, range, options);
22782
+ if (included) {
22783
+ prev = version;
22784
+ if (!first) {
22785
+ first = version;
22786
+ }
22787
+ } else {
22788
+ if (prev) {
22789
+ set.push([first, prev]);
22790
+ }
22791
+ prev = null;
22792
+ first = null;
22793
+ }
22794
+ }
22795
+ if (first) {
22796
+ set.push([first, null]);
22797
+ }
22798
+
22799
+ const ranges = [];
22800
+ for (const [min, max] of set) {
22801
+ if (min === max) {
22802
+ ranges.push(min);
22803
+ } else if (!max && min === v[0]) {
22804
+ ranges.push('*');
22805
+ } else if (!max) {
22806
+ ranges.push(`>=${min}`);
22807
+ } else if (min === v[0]) {
22808
+ ranges.push(`<=${max}`);
22809
+ } else {
22810
+ ranges.push(`${min} - ${max}`);
22811
+ }
22812
+ }
22813
+ const simplified = ranges.join(' || ');
22814
+ const original = typeof range.raw === 'string' ? range.raw : String(range);
22815
+ return simplified.length < original.length ? simplified : range
22816
+ };
22817
+
22818
+ var simplify$1 = /*@__PURE__*/getDefaultExportFromCjs(simplify);
22819
+
22820
+ const Range$1 = requireRange();
22821
+ const Comparator$1 = requireComparator();
22822
+ const { ANY } = Comparator$1;
22823
+ const satisfies$1 = satisfies_1;
22824
+ const compare$1 = compare_1;
22825
+
22826
+ // Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
22827
+ // - Every simple range `r1, r2, ...` is a null set, OR
22828
+ // - Every simple range `r1, r2, ...` which is not a null set is a subset of
22829
+ // some `R1, R2, ...`
22830
+ //
22831
+ // Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
22832
+ // - If c is only the ANY comparator
22833
+ // - If C is only the ANY comparator, return true
22834
+ // - Else if in prerelease mode, return false
22835
+ // - else replace c with `[>=0.0.0]`
22836
+ // - If C is only the ANY comparator
22837
+ // - if in prerelease mode, return true
22838
+ // - else replace C with `[>=0.0.0]`
22839
+ // - Let EQ be the set of = comparators in c
22840
+ // - If EQ is more than one, return true (null set)
22841
+ // - Let GT be the highest > or >= comparator in c
22842
+ // - Let LT be the lowest < or <= comparator in c
22843
+ // - If GT and LT, and GT.semver > LT.semver, return true (null set)
22844
+ // - If any C is a = range, and GT or LT are set, return false
22845
+ // - If EQ
22846
+ // - If GT, and EQ does not satisfy GT, return true (null set)
22847
+ // - If LT, and EQ does not satisfy LT, return true (null set)
22848
+ // - If EQ satisfies every C, return true
22849
+ // - Else return false
22850
+ // - If GT
22851
+ // - If GT.semver is lower than any > or >= comp in C, return false
22852
+ // - If GT is >=, and GT.semver does not satisfy every C, return false
22853
+ // - If GT.semver has a prerelease, and not in prerelease mode
22854
+ // - If no C has a prerelease and the GT.semver tuple, return false
22855
+ // - If LT
22856
+ // - If LT.semver is greater than any < or <= comp in C, return false
22857
+ // - If LT is <=, and LT.semver does not satisfy every C, return false
22858
+ // - If GT.semver has a prerelease, and not in prerelease mode
22859
+ // - If no C has a prerelease and the LT.semver tuple, return false
22860
+ // - Else return true
22861
+
22862
+ const subset$1 = (sub, dom, options = {}) => {
22863
+ if (sub === dom) {
22864
+ return true
22865
+ }
22866
+
22867
+ sub = new Range$1(sub, options);
22868
+ dom = new Range$1(dom, options);
22869
+ let sawNonNull = false;
22870
+
22871
+ OUTER: for (const simpleSub of sub.set) {
22872
+ for (const simpleDom of dom.set) {
22873
+ const isSub = simpleSubset(simpleSub, simpleDom, options);
22874
+ sawNonNull = sawNonNull || isSub !== null;
22875
+ if (isSub) {
22876
+ continue OUTER
22877
+ }
22878
+ }
22879
+ // the null set is a subset of everything, but null simple ranges in
22880
+ // a complex range should be ignored. so if we saw a non-null range,
22881
+ // then we know this isn't a subset, but if EVERY simple range was null,
22882
+ // then it is a subset.
22883
+ if (sawNonNull) {
22884
+ return false
22885
+ }
22886
+ }
22887
+ return true
22888
+ };
22889
+
22890
+ const minimumVersionWithPreRelease = [new Comparator$1('>=0.0.0-0')];
22891
+ const minimumVersion = [new Comparator$1('>=0.0.0')];
22892
+
22893
+ const simpleSubset = (sub, dom, options) => {
22894
+ if (sub === dom) {
22895
+ return true
22896
+ }
22897
+
22898
+ if (sub.length === 1 && sub[0].semver === ANY) {
22899
+ if (dom.length === 1 && dom[0].semver === ANY) {
22900
+ return true
22901
+ } else if (options.includePrerelease) {
22902
+ sub = minimumVersionWithPreRelease;
22903
+ } else {
22904
+ sub = minimumVersion;
22905
+ }
22906
+ }
22907
+
22908
+ if (dom.length === 1 && dom[0].semver === ANY) {
22909
+ if (options.includePrerelease) {
22910
+ return true
22911
+ } else {
22912
+ dom = minimumVersion;
22913
+ }
22914
+ }
22915
+
22916
+ const eqSet = new Set();
22917
+ let gt, lt;
22918
+ for (const c of sub) {
22919
+ if (c.operator === '>' || c.operator === '>=') {
22920
+ gt = higherGT(gt, c, options);
22921
+ } else if (c.operator === '<' || c.operator === '<=') {
22922
+ lt = lowerLT(lt, c, options);
22923
+ } else {
22924
+ eqSet.add(c.semver);
22925
+ }
22926
+ }
22927
+
22928
+ if (eqSet.size > 1) {
22929
+ return null
22930
+ }
22931
+
22932
+ let gtltComp;
22933
+ if (gt && lt) {
22934
+ gtltComp = compare$1(gt.semver, lt.semver, options);
22935
+ if (gtltComp > 0) {
22936
+ return null
22937
+ } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {
22938
+ return null
22939
+ }
22940
+ }
22941
+
22942
+ // will iterate one or zero times
22943
+ for (const eq of eqSet) {
22944
+ if (gt && !satisfies$1(eq, String(gt), options)) {
22945
+ return null
22946
+ }
22947
+
22948
+ if (lt && !satisfies$1(eq, String(lt), options)) {
22949
+ return null
22950
+ }
22951
+
22952
+ for (const c of dom) {
22953
+ if (!satisfies$1(eq, String(c), options)) {
22954
+ return false
22955
+ }
22956
+ }
22957
+
22958
+ return true
22959
+ }
22960
+
22961
+ let higher, lower;
22962
+ let hasDomLT, hasDomGT;
22963
+ // if the subset has a prerelease, we need a comparator in the superset
22964
+ // with the same tuple and a prerelease, or it's not a subset
22965
+ let needDomLTPre = lt &&
22966
+ !options.includePrerelease &&
22967
+ lt.semver.prerelease.length ? lt.semver : false;
22968
+ let needDomGTPre = gt &&
22969
+ !options.includePrerelease &&
22970
+ gt.semver.prerelease.length ? gt.semver : false;
22971
+ // exception: <1.2.3-0 is the same as <1.2.3
22972
+ if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&
22973
+ lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {
22974
+ needDomLTPre = false;
22975
+ }
22976
+
22977
+ for (const c of dom) {
22978
+ hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=';
22979
+ hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=';
22980
+ if (gt) {
22981
+ if (needDomGTPre) {
22982
+ if (c.semver.prerelease && c.semver.prerelease.length &&
22983
+ c.semver.major === needDomGTPre.major &&
22984
+ c.semver.minor === needDomGTPre.minor &&
22985
+ c.semver.patch === needDomGTPre.patch) {
22986
+ needDomGTPre = false;
22987
+ }
22988
+ }
22989
+ if (c.operator === '>' || c.operator === '>=') {
22990
+ higher = higherGT(gt, c, options);
22991
+ if (higher === c && higher !== gt) {
22992
+ return false
22993
+ }
22994
+ } else if (gt.operator === '>=' && !satisfies$1(gt.semver, String(c), options)) {
22995
+ return false
22996
+ }
22997
+ }
22998
+ if (lt) {
22999
+ if (needDomLTPre) {
23000
+ if (c.semver.prerelease && c.semver.prerelease.length &&
23001
+ c.semver.major === needDomLTPre.major &&
23002
+ c.semver.minor === needDomLTPre.minor &&
23003
+ c.semver.patch === needDomLTPre.patch) {
23004
+ needDomLTPre = false;
23005
+ }
23006
+ }
23007
+ if (c.operator === '<' || c.operator === '<=') {
23008
+ lower = lowerLT(lt, c, options);
23009
+ if (lower === c && lower !== lt) {
23010
+ return false
23011
+ }
23012
+ } else if (lt.operator === '<=' && !satisfies$1(lt.semver, String(c), options)) {
23013
+ return false
23014
+ }
23015
+ }
23016
+ if (!c.operator && (lt || gt) && gtltComp !== 0) {
23017
+ return false
23018
+ }
23019
+ }
23020
+
23021
+ // if there was a < or >, and nothing in the dom, then must be false
23022
+ // UNLESS it was limited by another range in the other direction.
23023
+ // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
23024
+ if (gt && hasDomLT && !lt && gtltComp !== 0) {
23025
+ return false
23026
+ }
23027
+
23028
+ if (lt && hasDomGT && !gt && gtltComp !== 0) {
23029
+ return false
23030
+ }
23031
+
23032
+ // we needed a prerelease range in a specific tuple, but didn't get one
23033
+ // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,
23034
+ // because it includes prereleases in the 1.2.3 tuple
23035
+ if (needDomGTPre || needDomLTPre) {
23036
+ return false
23037
+ }
23038
+
23039
+ return true
23040
+ };
23041
+
23042
+ // >=1.2.3 is lower than >1.2.3
23043
+ const higherGT = (a, b, options) => {
23044
+ if (!a) {
23045
+ return b
23046
+ }
23047
+ const comp = compare$1(a.semver, b.semver, options);
23048
+ return comp > 0 ? a
23049
+ : comp < 0 ? b
23050
+ : b.operator === '>' && a.operator === '>=' ? b
23051
+ : a
23052
+ };
23053
+
23054
+ // <=1.2.3 is higher than <1.2.3
23055
+ const lowerLT = (a, b, options) => {
23056
+ if (!a) {
23057
+ return b
23058
+ }
23059
+ const comp = compare$1(a.semver, b.semver, options);
23060
+ return comp < 0 ? a
23061
+ : comp > 0 ? b
23062
+ : b.operator === '<' && a.operator === '<=' ? b
23063
+ : a
23064
+ };
23065
+
23066
+ var subset_1 = subset$1;
23067
+
23068
+ var subset$2 = /*@__PURE__*/getDefaultExportFromCjs(subset_1);
23069
+
23070
+ // just pre-load all the stuff that index.js lazily exports
23071
+ const internalRe = reExports;
23072
+ const constants = constants$1;
23073
+ const SemVer = semver$1;
23074
+ const identifiers = identifiers$1;
23075
+ const parse$1 = parse_1;
23076
+ const valid = valid_1;
23077
+ const clean = clean_1;
23078
+ const inc = inc_1;
23079
+ const diff = diff_1;
23080
+ const major = major_1;
23081
+ const minor = minor_1;
23082
+ const patch$1 = patch_1;
23083
+ const prerelease = prerelease_1;
23084
+ const compare = compare_1;
23085
+ const rcompare = rcompare_1;
23086
+ const compareLoose = compareLoose_1;
23087
+ const compareBuild = compareBuild_1;
23088
+ const sort = sort_1;
23089
+ const rsort = rsort_1;
23090
+ const gt = gt_1;
23091
+ const lt = lt_1;
23092
+ const eq = eq_1;
23093
+ const neq = neq_1;
23094
+ const gte = gte_1;
23095
+ const lte = lte_1;
23096
+ const cmp = cmp_1;
23097
+ const coerce = coerce_1;
23098
+ const Comparator = requireComparator();
23099
+ const Range = requireRange();
23100
+ const satisfies = satisfies_1;
23101
+ const toComparators = toComparators_1;
23102
+ const maxSatisfying = maxSatisfying_1;
23103
+ const minSatisfying = minSatisfying_1;
23104
+ const minVersion = minVersion_1;
23105
+ const validRange = valid$1;
23106
+ const outside = outside_1;
23107
+ const gtr = gtr_1;
23108
+ const ltr = ltr_1;
23109
+ const intersects = intersects_1;
23110
+ const simplifyRange = simplify;
23111
+ const subset = subset_1;
23112
+ var semver = {
23113
+ parse: parse$1,
23114
+ valid,
23115
+ clean,
23116
+ inc,
23117
+ diff,
23118
+ major,
23119
+ minor,
23120
+ patch: patch$1,
23121
+ prerelease,
23122
+ compare,
23123
+ rcompare,
23124
+ compareLoose,
23125
+ compareBuild,
23126
+ sort,
23127
+ rsort,
23128
+ gt,
23129
+ lt,
23130
+ eq,
23131
+ neq,
23132
+ gte,
23133
+ lte,
23134
+ cmp,
23135
+ coerce,
23136
+ Comparator,
23137
+ Range,
23138
+ satisfies,
23139
+ toComparators,
23140
+ maxSatisfying,
23141
+ minSatisfying,
23142
+ minVersion,
23143
+ validRange,
23144
+ outside,
23145
+ gtr,
23146
+ ltr,
23147
+ intersects,
23148
+ simplifyRange,
23149
+ subset,
23150
+ SemVer,
23151
+ re: internalRe.re,
23152
+ src: internalRe.src,
23153
+ tokens: internalRe.t,
23154
+ SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
23155
+ RELEASE_TYPES: constants.RELEASE_TYPES,
23156
+ compareIdentifiers: identifiers.compareIdentifiers,
23157
+ rcompareIdentifiers: identifiers.rcompareIdentifiers,
23158
+ };
23159
+
23160
+ var index = /*@__PURE__*/getDefaultExportFromCjs(semver);
23161
+
20037
23162
  /**
20038
23163
  * a collection of utility functions
20039
23164
  * @namespace utils
@@ -20048,11 +23173,9 @@ let GUID_index = 0;
20048
23173
  * @public
20049
23174
  * @memberof utils
20050
23175
  * @name checkVersion
20051
- * @param {string} first - First version string to compare
20052
- * @param {string} second - second version string to compare
20053
- * @returns {number} comparison result <br>&lt; 0 : first &lt; second<br>
20054
- * 0 : first == second<br>
20055
- * &gt; 0 : first &gt; second
23176
+ * @param {string} v1 - First version string to compare
23177
+ * @param {string} v2 - second version string to compare
23178
+ * @returns {number} Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if v2 is greater
20056
23179
  * @example
20057
23180
  * if (me.utils.checkVersion("7.0.0") > 0) {
20058
23181
  * console.error(
@@ -20060,19 +23183,8 @@ let GUID_index = 0;
20060
23183
  * );
20061
23184
  * }
20062
23185
  */
20063
- function checkVersion(first, second) {
20064
- let a = first.split(".");
20065
- let b = second.split(".");
20066
- let len = Math.min(a.length, b.length);
20067
- let result = 0;
20068
-
20069
- for (let i = 0; i < len; i++) {
20070
- if ((result = +a[i] - +b[i])) {
20071
- break;
20072
- }
20073
- }
20074
-
20075
- return result ? result : a.length - b.length;
23186
+ function checkVersion(v1, v2) {
23187
+ return semver.compare(v1, v2);
20076
23188
  }
20077
23189
 
20078
23190
  /**
@@ -27785,7 +30897,8 @@ function preloadVideo(data, onload, onerror) {
27785
30897
  }
27786
30898
 
27787
30899
  if (typeof onload === "function") {
27788
- if (data.stream === true) {
30900
+ // some mobile browser (e.g. safari) won't emit the canplay event if autoplay is disabled
30901
+ if (data.stream === true || data.autoplay === false) {
27789
30902
  videoElement.onloadedmetadata = () => {
27790
30903
  if (typeof onload === "function") {
27791
30904
  onload();
@@ -36481,6 +39594,15 @@ class Light2d extends Renderable {
36481
39594
  return this.visibleArea.setShape(this.getBounds().centerX, this.getBounds().centerY, this.width, this.height);
36482
39595
  }
36483
39596
 
39597
+ /**
39598
+ * update function
39599
+ * @param {number} dt - time since the last update in milliseconds.
39600
+ * @returns {boolean} true if dirty
39601
+ */
39602
+ update(dt) { // eslint-disable-line no-unused-vars
39603
+ return true;
39604
+ }
39605
+
36484
39606
  /**
36485
39607
  * draw this Light2d (automatically called by melonJS)
36486
39608
  * @name draw
@@ -39533,9 +42655,9 @@ class BasePlugin {
39533
42655
  * define the minimum required version of melonJS<br>
39534
42656
  * this can be overridden by the plugin
39535
42657
  * @type {string}
39536
- * @default "16.1.0"
42658
+ * @default "16.1.2"
39537
42659
  */
39538
- this.version = "16.1.0";
42660
+ this.version = "16.1.2";
39539
42661
 
39540
42662
  /**
39541
42663
  * a reference to the app/game that registered this plugin
@@ -39638,7 +42760,7 @@ function register(plugin, name = plugin.toString().match(/ (\w+)/)[1]) {
39638
42760
  }
39639
42761
 
39640
42762
  // compatibility testing
39641
- if (checkVersion(instance.version, version) < 0) {
42763
+ if (checkVersion(instance.version, version) > 0) {
39642
42764
  throw new Error("Plugin version mismatch, expected: " + instance.version + ", got: " + version);
39643
42765
  }
39644
42766
 
@@ -39817,7 +42939,7 @@ Renderer.prototype.getHeight = function() {
39817
42939
  * @name version
39818
42940
  * @type {string}
39819
42941
  */
39820
- const version = "16.1.0";
42942
+ const version = "16.1.2";
39821
42943
 
39822
42944
  /**
39823
42945
  * a flag indicating that melonJS is fully initialized