@slicemachine/init 1.1.16-dev-alpha.3 → 1.1.16-dev-alpha.4

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.
package/build/index.js CHANGED
@@ -14,7 +14,7 @@ const ora = require('ora');
14
14
  const core = require('@slicemachine/core');
15
15
  const hapi = require('@hapi/hapi');
16
16
  const open = require('open');
17
- const t = require('io-ts');
17
+ const t$5 = require('io-ts');
18
18
  const cookie = require('@slicemachine/core/build/utils/cookie');
19
19
  const fs = require('fs');
20
20
  const NodeUtils = require('@slicemachine/core/build/node-utils');
@@ -60,7 +60,7 @@ const chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
60
60
  const ora__default = /*#__PURE__*/_interopDefaultLegacy(ora);
61
61
  const hapi__namespace = /*#__PURE__*/_interopNamespace(hapi);
62
62
  const open__default = /*#__PURE__*/_interopDefaultLegacy(open);
63
- const t__namespace = /*#__PURE__*/_interopNamespace(t);
63
+ const t__namespace = /*#__PURE__*/_interopNamespace(t$5);
64
64
  const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
65
65
  const NodeUtils__namespace = /*#__PURE__*/_interopNamespace(NodeUtils);
66
66
  const inquirer__namespace = /*#__PURE__*/_interopNamespace(inquirer);
@@ -457,6 +457,2877 @@ async function lsfiles(dir) {
457
457
  });
458
458
  }
459
459
 
460
+ var re$5 = {exports: {}};
461
+
462
+ // Note: this is the semver.org version of the spec that it implements
463
+ // Not necessarily the package version of this code.
464
+ const SEMVER_SPEC_VERSION = '2.0.0';
465
+
466
+ const MAX_LENGTH$2 = 256;
467
+ const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER ||
468
+ /* istanbul ignore next */ 9007199254740991;
469
+
470
+ // Max safe segment length for coercion.
471
+ const MAX_SAFE_COMPONENT_LENGTH = 16;
472
+
473
+ var constants$1 = {
474
+ SEMVER_SPEC_VERSION,
475
+ MAX_LENGTH: MAX_LENGTH$2,
476
+ MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,
477
+ MAX_SAFE_COMPONENT_LENGTH,
478
+ };
479
+
480
+ const debug$3 = (
481
+ typeof process === 'object' &&
482
+ process.env &&
483
+ process.env.NODE_DEBUG &&
484
+ /\bsemver\b/i.test(process.env.NODE_DEBUG)
485
+ ) ? (...args) => console.error('SEMVER', ...args)
486
+ : () => {};
487
+
488
+ var debug_1 = debug$3;
489
+
490
+ (function (module, exports) {
491
+ const { MAX_SAFE_COMPONENT_LENGTH } = constants$1;
492
+ const debug = debug_1;
493
+ exports = module.exports = {};
494
+
495
+ // The actual regexps go on exports.re
496
+ const re = exports.re = [];
497
+ const src = exports.src = [];
498
+ const t = exports.t = {};
499
+ let R = 0;
500
+
501
+ const createToken = (name, value, isGlobal) => {
502
+ const index = R++;
503
+ debug(name, index, value);
504
+ t[name] = index;
505
+ src[index] = value;
506
+ re[index] = new RegExp(value, isGlobal ? 'g' : undefined);
507
+ };
508
+
509
+ // The following Regular Expressions can be used for tokenizing,
510
+ // validating, and parsing SemVer version strings.
511
+
512
+ // ## Numeric Identifier
513
+ // A single `0`, or a non-zero digit followed by zero or more digits.
514
+
515
+ createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*');
516
+ createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+');
517
+
518
+ // ## Non-numeric Identifier
519
+ // Zero or more digits, followed by a letter or hyphen, and then zero or
520
+ // more letters, digits, or hyphens.
521
+
522
+ createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*');
523
+
524
+ // ## Main Version
525
+ // Three dot-separated numeric identifiers.
526
+
527
+ createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
528
+ `(${src[t.NUMERICIDENTIFIER]})\\.` +
529
+ `(${src[t.NUMERICIDENTIFIER]})`);
530
+
531
+ createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
532
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
533
+ `(${src[t.NUMERICIDENTIFIERLOOSE]})`);
534
+
535
+ // ## Pre-release Version Identifier
536
+ // A numeric identifier, or a non-numeric identifier.
537
+
538
+ createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
539
+ }|${src[t.NONNUMERICIDENTIFIER]})`);
540
+
541
+ createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
542
+ }|${src[t.NONNUMERICIDENTIFIER]})`);
543
+
544
+ // ## Pre-release Version
545
+ // Hyphen, followed by one or more dot-separated pre-release version
546
+ // identifiers.
547
+
548
+ createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
549
+ }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
550
+
551
+ createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
552
+ }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
553
+
554
+ // ## Build Metadata Identifier
555
+ // Any combination of digits, letters, or hyphens.
556
+
557
+ createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+');
558
+
559
+ // ## Build Metadata
560
+ // Plus sign, followed by one or more period-separated build metadata
561
+ // identifiers.
562
+
563
+ createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
564
+ }(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
565
+
566
+ // ## Full Version String
567
+ // A main version, followed optionally by a pre-release version and
568
+ // build metadata.
569
+
570
+ // Note that the only major, minor, patch, and pre-release sections of
571
+ // the version string are capturing groups. The build metadata is not a
572
+ // capturing group, because it should not ever be used in version
573
+ // comparison.
574
+
575
+ createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
576
+ }${src[t.PRERELEASE]}?${
577
+ src[t.BUILD]}?`);
578
+
579
+ createToken('FULL', `^${src[t.FULLPLAIN]}$`);
580
+
581
+ // like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
582
+ // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
583
+ // common in the npm registry.
584
+ createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
585
+ }${src[t.PRERELEASELOOSE]}?${
586
+ src[t.BUILD]}?`);
587
+
588
+ createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`);
589
+
590
+ createToken('GTLT', '((?:<|>)?=?)');
591
+
592
+ // Something like "2.*" or "1.2.x".
593
+ // Note that "x.x" is a valid xRange identifer, meaning "any version"
594
+ // Only the first item is strictly required.
595
+ createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
596
+ createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
597
+
598
+ createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
599
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
600
+ `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
601
+ `(?:${src[t.PRERELEASE]})?${
602
+ src[t.BUILD]}?` +
603
+ `)?)?`);
604
+
605
+ createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
606
+ `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
607
+ `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
608
+ `(?:${src[t.PRERELEASELOOSE]})?${
609
+ src[t.BUILD]}?` +
610
+ `)?)?`);
611
+
612
+ createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
613
+ createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
614
+
615
+ // Coercion.
616
+ // Extract anything that could conceivably be a part of a valid semver
617
+ createToken('COERCE', `${'(^|[^\\d])' +
618
+ '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
619
+ `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
620
+ `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
621
+ `(?:$|[^\\d])`);
622
+ createToken('COERCERTL', src[t.COERCE], true);
623
+
624
+ // Tilde ranges.
625
+ // Meaning is "reasonably at or greater than"
626
+ createToken('LONETILDE', '(?:~>?)');
627
+
628
+ createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true);
629
+ exports.tildeTrimReplace = '$1~';
630
+
631
+ createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
632
+ createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
633
+
634
+ // Caret ranges.
635
+ // Meaning is "at least and backwards compatible with"
636
+ createToken('LONECARET', '(?:\\^)');
637
+
638
+ createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true);
639
+ exports.caretTrimReplace = '$1^';
640
+
641
+ createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
642
+ createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
643
+
644
+ // A simple gt/lt/eq thing, or just "" to indicate "any version"
645
+ createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
646
+ createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
647
+
648
+ // An expression to strip any whitespace between the gtlt and the thing
649
+ // it modifies, so that `> 1.2.3` ==> `>1.2.3`
650
+ createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
651
+ }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
652
+ exports.comparatorTrimReplace = '$1$2$3';
653
+
654
+ // Something like `1.2.3 - 1.2.4`
655
+ // Note that these all use the loose form, because they'll be
656
+ // checked against either the strict or loose comparator form
657
+ // later.
658
+ createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
659
+ `\\s+-\\s+` +
660
+ `(${src[t.XRANGEPLAIN]})` +
661
+ `\\s*$`);
662
+
663
+ createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
664
+ `\\s+-\\s+` +
665
+ `(${src[t.XRANGEPLAINLOOSE]})` +
666
+ `\\s*$`);
667
+
668
+ // Star ranges basically just allow anything at all.
669
+ createToken('STAR', '(<|>)?=?\\s*\\*');
670
+ // >=0.0.0 is like a star
671
+ createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$');
672
+ createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$');
673
+ }(re$5, re$5.exports));
674
+
675
+ // parse out just the options we care about so we always get a consistent
676
+ // obj with keys in a consistent order.
677
+ const opts = ['includePrerelease', 'loose', 'rtl'];
678
+ const parseOptions$4 = options =>
679
+ !options ? {}
680
+ : typeof options !== 'object' ? { loose: true }
681
+ : opts.filter(k => options[k]).reduce((o, k) => {
682
+ o[k] = true;
683
+ return o
684
+ }, {});
685
+ var parseOptions_1 = parseOptions$4;
686
+
687
+ const numeric = /^[0-9]+$/;
688
+ const compareIdentifiers$1 = (a, b) => {
689
+ const anum = numeric.test(a);
690
+ const bnum = numeric.test(b);
691
+
692
+ if (anum && bnum) {
693
+ a = +a;
694
+ b = +b;
695
+ }
696
+
697
+ return a === b ? 0
698
+ : (anum && !bnum) ? -1
699
+ : (bnum && !anum) ? 1
700
+ : a < b ? -1
701
+ : 1
702
+ };
703
+
704
+ const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);
705
+
706
+ var identifiers$1 = {
707
+ compareIdentifiers: compareIdentifiers$1,
708
+ rcompareIdentifiers,
709
+ };
710
+
711
+ const debug$2 = debug_1;
712
+ const { MAX_LENGTH: MAX_LENGTH$1, MAX_SAFE_INTEGER } = constants$1;
713
+ const { re: re$4, t: t$4 } = re$5.exports;
714
+
715
+ const parseOptions$3 = parseOptions_1;
716
+ const { compareIdentifiers } = identifiers$1;
717
+ class SemVer$f {
718
+ constructor (version, options) {
719
+ options = parseOptions$3(options);
720
+
721
+ if (version instanceof SemVer$f) {
722
+ if (version.loose === !!options.loose &&
723
+ version.includePrerelease === !!options.includePrerelease) {
724
+ return version
725
+ } else {
726
+ version = version.version;
727
+ }
728
+ } else if (typeof version !== 'string') {
729
+ throw new TypeError(`Invalid Version: ${version}`)
730
+ }
731
+
732
+ if (version.length > MAX_LENGTH$1) {
733
+ throw new TypeError(
734
+ `version is longer than ${MAX_LENGTH$1} characters`
735
+ )
736
+ }
737
+
738
+ debug$2('SemVer', version, options);
739
+ this.options = options;
740
+ this.loose = !!options.loose;
741
+ // this isn't actually relevant for versions, but keep it so that we
742
+ // don't run into trouble passing this.options around.
743
+ this.includePrerelease = !!options.includePrerelease;
744
+
745
+ const m = version.trim().match(options.loose ? re$4[t$4.LOOSE] : re$4[t$4.FULL]);
746
+
747
+ if (!m) {
748
+ throw new TypeError(`Invalid Version: ${version}`)
749
+ }
750
+
751
+ this.raw = version;
752
+
753
+ // these are actually numbers
754
+ this.major = +m[1];
755
+ this.minor = +m[2];
756
+ this.patch = +m[3];
757
+
758
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
759
+ throw new TypeError('Invalid major version')
760
+ }
761
+
762
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
763
+ throw new TypeError('Invalid minor version')
764
+ }
765
+
766
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
767
+ throw new TypeError('Invalid patch version')
768
+ }
769
+
770
+ // numberify any prerelease numeric ids
771
+ if (!m[4]) {
772
+ this.prerelease = [];
773
+ } else {
774
+ this.prerelease = m[4].split('.').map((id) => {
775
+ if (/^[0-9]+$/.test(id)) {
776
+ const num = +id;
777
+ if (num >= 0 && num < MAX_SAFE_INTEGER) {
778
+ return num
779
+ }
780
+ }
781
+ return id
782
+ });
783
+ }
784
+
785
+ this.build = m[5] ? m[5].split('.') : [];
786
+ this.format();
787
+ }
788
+
789
+ format () {
790
+ this.version = `${this.major}.${this.minor}.${this.patch}`;
791
+ if (this.prerelease.length) {
792
+ this.version += `-${this.prerelease.join('.')}`;
793
+ }
794
+ return this.version
795
+ }
796
+
797
+ toString () {
798
+ return this.version
799
+ }
800
+
801
+ compare (other) {
802
+ debug$2('SemVer.compare', this.version, this.options, other);
803
+ if (!(other instanceof SemVer$f)) {
804
+ if (typeof other === 'string' && other === this.version) {
805
+ return 0
806
+ }
807
+ other = new SemVer$f(other, this.options);
808
+ }
809
+
810
+ if (other.version === this.version) {
811
+ return 0
812
+ }
813
+
814
+ return this.compareMain(other) || this.comparePre(other)
815
+ }
816
+
817
+ compareMain (other) {
818
+ if (!(other instanceof SemVer$f)) {
819
+ other = new SemVer$f(other, this.options);
820
+ }
821
+
822
+ return (
823
+ compareIdentifiers(this.major, other.major) ||
824
+ compareIdentifiers(this.minor, other.minor) ||
825
+ compareIdentifiers(this.patch, other.patch)
826
+ )
827
+ }
828
+
829
+ comparePre (other) {
830
+ if (!(other instanceof SemVer$f)) {
831
+ other = new SemVer$f(other, this.options);
832
+ }
833
+
834
+ // NOT having a prerelease is > having one
835
+ if (this.prerelease.length && !other.prerelease.length) {
836
+ return -1
837
+ } else if (!this.prerelease.length && other.prerelease.length) {
838
+ return 1
839
+ } else if (!this.prerelease.length && !other.prerelease.length) {
840
+ return 0
841
+ }
842
+
843
+ let i = 0;
844
+ do {
845
+ const a = this.prerelease[i];
846
+ const b = other.prerelease[i];
847
+ debug$2('prerelease compare', i, a, b);
848
+ if (a === undefined && b === undefined) {
849
+ return 0
850
+ } else if (b === undefined) {
851
+ return 1
852
+ } else if (a === undefined) {
853
+ return -1
854
+ } else if (a === b) {
855
+ continue
856
+ } else {
857
+ return compareIdentifiers(a, b)
858
+ }
859
+ } while (++i)
860
+ }
861
+
862
+ compareBuild (other) {
863
+ if (!(other instanceof SemVer$f)) {
864
+ other = new SemVer$f(other, this.options);
865
+ }
866
+
867
+ let i = 0;
868
+ do {
869
+ const a = this.build[i];
870
+ const b = other.build[i];
871
+ debug$2('prerelease compare', i, a, b);
872
+ if (a === undefined && b === undefined) {
873
+ return 0
874
+ } else if (b === undefined) {
875
+ return 1
876
+ } else if (a === undefined) {
877
+ return -1
878
+ } else if (a === b) {
879
+ continue
880
+ } else {
881
+ return compareIdentifiers(a, b)
882
+ }
883
+ } while (++i)
884
+ }
885
+
886
+ // preminor will bump the version up to the next minor release, and immediately
887
+ // down to pre-release. premajor and prepatch work the same way.
888
+ inc (release, identifier) {
889
+ switch (release) {
890
+ case 'premajor':
891
+ this.prerelease.length = 0;
892
+ this.patch = 0;
893
+ this.minor = 0;
894
+ this.major++;
895
+ this.inc('pre', identifier);
896
+ break
897
+ case 'preminor':
898
+ this.prerelease.length = 0;
899
+ this.patch = 0;
900
+ this.minor++;
901
+ this.inc('pre', identifier);
902
+ break
903
+ case 'prepatch':
904
+ // If this is already a prerelease, it will bump to the next version
905
+ // drop any prereleases that might already exist, since they are not
906
+ // relevant at this point.
907
+ this.prerelease.length = 0;
908
+ this.inc('patch', identifier);
909
+ this.inc('pre', identifier);
910
+ break
911
+ // If the input is a non-prerelease version, this acts the same as
912
+ // prepatch.
913
+ case 'prerelease':
914
+ if (this.prerelease.length === 0) {
915
+ this.inc('patch', identifier);
916
+ }
917
+ this.inc('pre', identifier);
918
+ break
919
+
920
+ case 'major':
921
+ // If this is a pre-major version, bump up to the same major version.
922
+ // Otherwise increment major.
923
+ // 1.0.0-5 bumps to 1.0.0
924
+ // 1.1.0 bumps to 2.0.0
925
+ if (
926
+ this.minor !== 0 ||
927
+ this.patch !== 0 ||
928
+ this.prerelease.length === 0
929
+ ) {
930
+ this.major++;
931
+ }
932
+ this.minor = 0;
933
+ this.patch = 0;
934
+ this.prerelease = [];
935
+ break
936
+ case 'minor':
937
+ // If this is a pre-minor version, bump up to the same minor version.
938
+ // Otherwise increment minor.
939
+ // 1.2.0-5 bumps to 1.2.0
940
+ // 1.2.1 bumps to 1.3.0
941
+ if (this.patch !== 0 || this.prerelease.length === 0) {
942
+ this.minor++;
943
+ }
944
+ this.patch = 0;
945
+ this.prerelease = [];
946
+ break
947
+ case 'patch':
948
+ // If this is not a pre-release version, it will increment the patch.
949
+ // If it is a pre-release it will bump up to the same patch version.
950
+ // 1.2.0-5 patches to 1.2.0
951
+ // 1.2.0 patches to 1.2.1
952
+ if (this.prerelease.length === 0) {
953
+ this.patch++;
954
+ }
955
+ this.prerelease = [];
956
+ break
957
+ // This probably shouldn't be used publicly.
958
+ // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
959
+ case 'pre':
960
+ if (this.prerelease.length === 0) {
961
+ this.prerelease = [0];
962
+ } else {
963
+ let i = this.prerelease.length;
964
+ while (--i >= 0) {
965
+ if (typeof this.prerelease[i] === 'number') {
966
+ this.prerelease[i]++;
967
+ i = -2;
968
+ }
969
+ }
970
+ if (i === -1) {
971
+ // didn't increment anything
972
+ this.prerelease.push(0);
973
+ }
974
+ }
975
+ if (identifier) {
976
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
977
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
978
+ if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
979
+ if (isNaN(this.prerelease[1])) {
980
+ this.prerelease = [identifier, 0];
981
+ }
982
+ } else {
983
+ this.prerelease = [identifier, 0];
984
+ }
985
+ }
986
+ break
987
+
988
+ default:
989
+ throw new Error(`invalid increment argument: ${release}`)
990
+ }
991
+ this.format();
992
+ this.raw = this.version;
993
+ return this
994
+ }
995
+ }
996
+
997
+ var semver$1 = SemVer$f;
998
+
999
+ const { MAX_LENGTH } = constants$1;
1000
+ const { re: re$3, t: t$3 } = re$5.exports;
1001
+ const SemVer$e = semver$1;
1002
+
1003
+ const parseOptions$2 = parseOptions_1;
1004
+ const parse$6 = (version, options) => {
1005
+ options = parseOptions$2(options);
1006
+
1007
+ if (version instanceof SemVer$e) {
1008
+ return version
1009
+ }
1010
+
1011
+ if (typeof version !== 'string') {
1012
+ return null
1013
+ }
1014
+
1015
+ if (version.length > MAX_LENGTH) {
1016
+ return null
1017
+ }
1018
+
1019
+ const r = options.loose ? re$3[t$3.LOOSE] : re$3[t$3.FULL];
1020
+ if (!r.test(version)) {
1021
+ return null
1022
+ }
1023
+
1024
+ try {
1025
+ return new SemVer$e(version, options)
1026
+ } catch (er) {
1027
+ return null
1028
+ }
1029
+ };
1030
+
1031
+ var parse_1 = parse$6;
1032
+
1033
+ const parse$5 = parse_1;
1034
+ const valid$2 = (version, options) => {
1035
+ const v = parse$5(version, options);
1036
+ return v ? v.version : null
1037
+ };
1038
+ var valid_1 = valid$2;
1039
+
1040
+ const parse$4 = parse_1;
1041
+ const clean$1 = (version, options) => {
1042
+ const s = parse$4(version.trim().replace(/^[=v]+/, ''), options);
1043
+ return s ? s.version : null
1044
+ };
1045
+ var clean_1 = clean$1;
1046
+
1047
+ const SemVer$d = semver$1;
1048
+
1049
+ const inc$1 = (version, release, options, identifier) => {
1050
+ if (typeof (options) === 'string') {
1051
+ identifier = options;
1052
+ options = undefined;
1053
+ }
1054
+
1055
+ try {
1056
+ return new SemVer$d(
1057
+ version instanceof SemVer$d ? version.version : version,
1058
+ options
1059
+ ).inc(release, identifier).version
1060
+ } catch (er) {
1061
+ return null
1062
+ }
1063
+ };
1064
+ var inc_1 = inc$1;
1065
+
1066
+ const SemVer$c = semver$1;
1067
+ const compare$b = (a, b, loose) =>
1068
+ new SemVer$c(a, loose).compare(new SemVer$c(b, loose));
1069
+
1070
+ var compare_1 = compare$b;
1071
+
1072
+ const compare$a = compare_1;
1073
+ const eq$3 = (a, b, loose) => compare$a(a, b, loose) === 0;
1074
+ var eq_1 = eq$3;
1075
+
1076
+ const parse$3 = parse_1;
1077
+ const eq$2 = eq_1;
1078
+
1079
+ const diff$1 = (version1, version2) => {
1080
+ if (eq$2(version1, version2)) {
1081
+ return null
1082
+ } else {
1083
+ const v1 = parse$3(version1);
1084
+ const v2 = parse$3(version2);
1085
+ const hasPre = v1.prerelease.length || v2.prerelease.length;
1086
+ const prefix = hasPre ? 'pre' : '';
1087
+ const defaultResult = hasPre ? 'prerelease' : '';
1088
+ for (const key in v1) {
1089
+ if (key === 'major' || key === 'minor' || key === 'patch') {
1090
+ if (v1[key] !== v2[key]) {
1091
+ return prefix + key
1092
+ }
1093
+ }
1094
+ }
1095
+ return defaultResult // may be undefined
1096
+ }
1097
+ };
1098
+ var diff_1 = diff$1;
1099
+
1100
+ const SemVer$b = semver$1;
1101
+ const major$1 = (a, loose) => new SemVer$b(a, loose).major;
1102
+ var major_1 = major$1;
1103
+
1104
+ const SemVer$a = semver$1;
1105
+ const minor$1 = (a, loose) => new SemVer$a(a, loose).minor;
1106
+ var minor_1 = minor$1;
1107
+
1108
+ const SemVer$9 = semver$1;
1109
+ const patch$1 = (a, loose) => new SemVer$9(a, loose).patch;
1110
+ var patch_1 = patch$1;
1111
+
1112
+ const parse$2 = parse_1;
1113
+ const prerelease$1 = (version, options) => {
1114
+ const parsed = parse$2(version, options);
1115
+ return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
1116
+ };
1117
+ var prerelease_1 = prerelease$1;
1118
+
1119
+ const compare$9 = compare_1;
1120
+ const rcompare$1 = (a, b, loose) => compare$9(b, a, loose);
1121
+ var rcompare_1 = rcompare$1;
1122
+
1123
+ const compare$8 = compare_1;
1124
+ const compareLoose$1 = (a, b) => compare$8(a, b, true);
1125
+ var compareLoose_1 = compareLoose$1;
1126
+
1127
+ const SemVer$8 = semver$1;
1128
+ const compareBuild$3 = (a, b, loose) => {
1129
+ const versionA = new SemVer$8(a, loose);
1130
+ const versionB = new SemVer$8(b, loose);
1131
+ return versionA.compare(versionB) || versionA.compareBuild(versionB)
1132
+ };
1133
+ var compareBuild_1 = compareBuild$3;
1134
+
1135
+ const compareBuild$2 = compareBuild_1;
1136
+ const sort$1 = (list, loose) => list.sort((a, b) => compareBuild$2(a, b, loose));
1137
+ var sort_1 = sort$1;
1138
+
1139
+ const compareBuild$1 = compareBuild_1;
1140
+ const rsort$1 = (list, loose) => list.sort((a, b) => compareBuild$1(b, a, loose));
1141
+ var rsort_1 = rsort$1;
1142
+
1143
+ const compare$7 = compare_1;
1144
+ const gt$4 = (a, b, loose) => compare$7(a, b, loose) > 0;
1145
+ var gt_1 = gt$4;
1146
+
1147
+ const compare$6 = compare_1;
1148
+ const lt$3 = (a, b, loose) => compare$6(a, b, loose) < 0;
1149
+ var lt_1 = lt$3;
1150
+
1151
+ const compare$5 = compare_1;
1152
+ const neq$2 = (a, b, loose) => compare$5(a, b, loose) !== 0;
1153
+ var neq_1 = neq$2;
1154
+
1155
+ const compare$4 = compare_1;
1156
+ const gte$3 = (a, b, loose) => compare$4(a, b, loose) >= 0;
1157
+ var gte_1 = gte$3;
1158
+
1159
+ const compare$3 = compare_1;
1160
+ const lte$3 = (a, b, loose) => compare$3(a, b, loose) <= 0;
1161
+ var lte_1 = lte$3;
1162
+
1163
+ const eq$1 = eq_1;
1164
+ const neq$1 = neq_1;
1165
+ const gt$3 = gt_1;
1166
+ const gte$2 = gte_1;
1167
+ const lt$2 = lt_1;
1168
+ const lte$2 = lte_1;
1169
+
1170
+ const cmp$2 = (a, op, b, loose) => {
1171
+ switch (op) {
1172
+ case '===':
1173
+ if (typeof a === 'object') {
1174
+ a = a.version;
1175
+ }
1176
+ if (typeof b === 'object') {
1177
+ b = b.version;
1178
+ }
1179
+ return a === b
1180
+
1181
+ case '!==':
1182
+ if (typeof a === 'object') {
1183
+ a = a.version;
1184
+ }
1185
+ if (typeof b === 'object') {
1186
+ b = b.version;
1187
+ }
1188
+ return a !== b
1189
+
1190
+ case '':
1191
+ case '=':
1192
+ case '==':
1193
+ return eq$1(a, b, loose)
1194
+
1195
+ case '!=':
1196
+ return neq$1(a, b, loose)
1197
+
1198
+ case '>':
1199
+ return gt$3(a, b, loose)
1200
+
1201
+ case '>=':
1202
+ return gte$2(a, b, loose)
1203
+
1204
+ case '<':
1205
+ return lt$2(a, b, loose)
1206
+
1207
+ case '<=':
1208
+ return lte$2(a, b, loose)
1209
+
1210
+ default:
1211
+ throw new TypeError(`Invalid operator: ${op}`)
1212
+ }
1213
+ };
1214
+ var cmp_1 = cmp$2;
1215
+
1216
+ const SemVer$7 = semver$1;
1217
+ const parse$1 = parse_1;
1218
+ const { re: re$2, t: t$2 } = re$5.exports;
1219
+
1220
+ const coerce$1 = (version, options) => {
1221
+ if (version instanceof SemVer$7) {
1222
+ return version
1223
+ }
1224
+
1225
+ if (typeof version === 'number') {
1226
+ version = String(version);
1227
+ }
1228
+
1229
+ if (typeof version !== 'string') {
1230
+ return null
1231
+ }
1232
+
1233
+ options = options || {};
1234
+
1235
+ let match = null;
1236
+ if (!options.rtl) {
1237
+ match = version.match(re$2[t$2.COERCE]);
1238
+ } else {
1239
+ // Find the right-most coercible string that does not share
1240
+ // a terminus with a more left-ward coercible string.
1241
+ // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
1242
+ //
1243
+ // Walk through the string checking with a /g regexp
1244
+ // Manually set the index so as to pick up overlapping matches.
1245
+ // Stop when we get a match that ends at the string end, since no
1246
+ // coercible string can be more right-ward without the same terminus.
1247
+ let next;
1248
+ while ((next = re$2[t$2.COERCERTL].exec(version)) &&
1249
+ (!match || match.index + match[0].length !== version.length)
1250
+ ) {
1251
+ if (!match ||
1252
+ next.index + next[0].length !== match.index + match[0].length) {
1253
+ match = next;
1254
+ }
1255
+ re$2[t$2.COERCERTL].lastIndex = next.index + next[1].length + next[2].length;
1256
+ }
1257
+ // leave it in a clean state
1258
+ re$2[t$2.COERCERTL].lastIndex = -1;
1259
+ }
1260
+
1261
+ if (match === null) {
1262
+ return null
1263
+ }
1264
+
1265
+ return parse$1(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)
1266
+ };
1267
+ var coerce_1 = coerce$1;
1268
+
1269
+ var iterator = function (Yallist) {
1270
+ Yallist.prototype[Symbol.iterator] = function* () {
1271
+ for (let walker = this.head; walker; walker = walker.next) {
1272
+ yield walker.value;
1273
+ }
1274
+ };
1275
+ };
1276
+
1277
+ var yallist = Yallist$1;
1278
+
1279
+ Yallist$1.Node = Node;
1280
+ Yallist$1.create = Yallist$1;
1281
+
1282
+ function Yallist$1 (list) {
1283
+ var self = this;
1284
+ if (!(self instanceof Yallist$1)) {
1285
+ self = new Yallist$1();
1286
+ }
1287
+
1288
+ self.tail = null;
1289
+ self.head = null;
1290
+ self.length = 0;
1291
+
1292
+ if (list && typeof list.forEach === 'function') {
1293
+ list.forEach(function (item) {
1294
+ self.push(item);
1295
+ });
1296
+ } else if (arguments.length > 0) {
1297
+ for (var i = 0, l = arguments.length; i < l; i++) {
1298
+ self.push(arguments[i]);
1299
+ }
1300
+ }
1301
+
1302
+ return self
1303
+ }
1304
+
1305
+ Yallist$1.prototype.removeNode = function (node) {
1306
+ if (node.list !== this) {
1307
+ throw new Error('removing node which does not belong to this list')
1308
+ }
1309
+
1310
+ var next = node.next;
1311
+ var prev = node.prev;
1312
+
1313
+ if (next) {
1314
+ next.prev = prev;
1315
+ }
1316
+
1317
+ if (prev) {
1318
+ prev.next = next;
1319
+ }
1320
+
1321
+ if (node === this.head) {
1322
+ this.head = next;
1323
+ }
1324
+ if (node === this.tail) {
1325
+ this.tail = prev;
1326
+ }
1327
+
1328
+ node.list.length--;
1329
+ node.next = null;
1330
+ node.prev = null;
1331
+ node.list = null;
1332
+
1333
+ return next
1334
+ };
1335
+
1336
+ Yallist$1.prototype.unshiftNode = function (node) {
1337
+ if (node === this.head) {
1338
+ return
1339
+ }
1340
+
1341
+ if (node.list) {
1342
+ node.list.removeNode(node);
1343
+ }
1344
+
1345
+ var head = this.head;
1346
+ node.list = this;
1347
+ node.next = head;
1348
+ if (head) {
1349
+ head.prev = node;
1350
+ }
1351
+
1352
+ this.head = node;
1353
+ if (!this.tail) {
1354
+ this.tail = node;
1355
+ }
1356
+ this.length++;
1357
+ };
1358
+
1359
+ Yallist$1.prototype.pushNode = function (node) {
1360
+ if (node === this.tail) {
1361
+ return
1362
+ }
1363
+
1364
+ if (node.list) {
1365
+ node.list.removeNode(node);
1366
+ }
1367
+
1368
+ var tail = this.tail;
1369
+ node.list = this;
1370
+ node.prev = tail;
1371
+ if (tail) {
1372
+ tail.next = node;
1373
+ }
1374
+
1375
+ this.tail = node;
1376
+ if (!this.head) {
1377
+ this.head = node;
1378
+ }
1379
+ this.length++;
1380
+ };
1381
+
1382
+ Yallist$1.prototype.push = function () {
1383
+ for (var i = 0, l = arguments.length; i < l; i++) {
1384
+ push(this, arguments[i]);
1385
+ }
1386
+ return this.length
1387
+ };
1388
+
1389
+ Yallist$1.prototype.unshift = function () {
1390
+ for (var i = 0, l = arguments.length; i < l; i++) {
1391
+ unshift(this, arguments[i]);
1392
+ }
1393
+ return this.length
1394
+ };
1395
+
1396
+ Yallist$1.prototype.pop = function () {
1397
+ if (!this.tail) {
1398
+ return undefined
1399
+ }
1400
+
1401
+ var res = this.tail.value;
1402
+ this.tail = this.tail.prev;
1403
+ if (this.tail) {
1404
+ this.tail.next = null;
1405
+ } else {
1406
+ this.head = null;
1407
+ }
1408
+ this.length--;
1409
+ return res
1410
+ };
1411
+
1412
+ Yallist$1.prototype.shift = function () {
1413
+ if (!this.head) {
1414
+ return undefined
1415
+ }
1416
+
1417
+ var res = this.head.value;
1418
+ this.head = this.head.next;
1419
+ if (this.head) {
1420
+ this.head.prev = null;
1421
+ } else {
1422
+ this.tail = null;
1423
+ }
1424
+ this.length--;
1425
+ return res
1426
+ };
1427
+
1428
+ Yallist$1.prototype.forEach = function (fn, thisp) {
1429
+ thisp = thisp || this;
1430
+ for (var walker = this.head, i = 0; walker !== null; i++) {
1431
+ fn.call(thisp, walker.value, i, this);
1432
+ walker = walker.next;
1433
+ }
1434
+ };
1435
+
1436
+ Yallist$1.prototype.forEachReverse = function (fn, thisp) {
1437
+ thisp = thisp || this;
1438
+ for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
1439
+ fn.call(thisp, walker.value, i, this);
1440
+ walker = walker.prev;
1441
+ }
1442
+ };
1443
+
1444
+ Yallist$1.prototype.get = function (n) {
1445
+ for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
1446
+ // abort out of the list early if we hit a cycle
1447
+ walker = walker.next;
1448
+ }
1449
+ if (i === n && walker !== null) {
1450
+ return walker.value
1451
+ }
1452
+ };
1453
+
1454
+ Yallist$1.prototype.getReverse = function (n) {
1455
+ for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
1456
+ // abort out of the list early if we hit a cycle
1457
+ walker = walker.prev;
1458
+ }
1459
+ if (i === n && walker !== null) {
1460
+ return walker.value
1461
+ }
1462
+ };
1463
+
1464
+ Yallist$1.prototype.map = function (fn, thisp) {
1465
+ thisp = thisp || this;
1466
+ var res = new Yallist$1();
1467
+ for (var walker = this.head; walker !== null;) {
1468
+ res.push(fn.call(thisp, walker.value, this));
1469
+ walker = walker.next;
1470
+ }
1471
+ return res
1472
+ };
1473
+
1474
+ Yallist$1.prototype.mapReverse = function (fn, thisp) {
1475
+ thisp = thisp || this;
1476
+ var res = new Yallist$1();
1477
+ for (var walker = this.tail; walker !== null;) {
1478
+ res.push(fn.call(thisp, walker.value, this));
1479
+ walker = walker.prev;
1480
+ }
1481
+ return res
1482
+ };
1483
+
1484
+ Yallist$1.prototype.reduce = function (fn, initial) {
1485
+ var acc;
1486
+ var walker = this.head;
1487
+ if (arguments.length > 1) {
1488
+ acc = initial;
1489
+ } else if (this.head) {
1490
+ walker = this.head.next;
1491
+ acc = this.head.value;
1492
+ } else {
1493
+ throw new TypeError('Reduce of empty list with no initial value')
1494
+ }
1495
+
1496
+ for (var i = 0; walker !== null; i++) {
1497
+ acc = fn(acc, walker.value, i);
1498
+ walker = walker.next;
1499
+ }
1500
+
1501
+ return acc
1502
+ };
1503
+
1504
+ Yallist$1.prototype.reduceReverse = function (fn, initial) {
1505
+ var acc;
1506
+ var walker = this.tail;
1507
+ if (arguments.length > 1) {
1508
+ acc = initial;
1509
+ } else if (this.tail) {
1510
+ walker = this.tail.prev;
1511
+ acc = this.tail.value;
1512
+ } else {
1513
+ throw new TypeError('Reduce of empty list with no initial value')
1514
+ }
1515
+
1516
+ for (var i = this.length - 1; walker !== null; i--) {
1517
+ acc = fn(acc, walker.value, i);
1518
+ walker = walker.prev;
1519
+ }
1520
+
1521
+ return acc
1522
+ };
1523
+
1524
+ Yallist$1.prototype.toArray = function () {
1525
+ var arr = new Array(this.length);
1526
+ for (var i = 0, walker = this.head; walker !== null; i++) {
1527
+ arr[i] = walker.value;
1528
+ walker = walker.next;
1529
+ }
1530
+ return arr
1531
+ };
1532
+
1533
+ Yallist$1.prototype.toArrayReverse = function () {
1534
+ var arr = new Array(this.length);
1535
+ for (var i = 0, walker = this.tail; walker !== null; i++) {
1536
+ arr[i] = walker.value;
1537
+ walker = walker.prev;
1538
+ }
1539
+ return arr
1540
+ };
1541
+
1542
+ Yallist$1.prototype.slice = function (from, to) {
1543
+ to = to || this.length;
1544
+ if (to < 0) {
1545
+ to += this.length;
1546
+ }
1547
+ from = from || 0;
1548
+ if (from < 0) {
1549
+ from += this.length;
1550
+ }
1551
+ var ret = new Yallist$1();
1552
+ if (to < from || to < 0) {
1553
+ return ret
1554
+ }
1555
+ if (from < 0) {
1556
+ from = 0;
1557
+ }
1558
+ if (to > this.length) {
1559
+ to = this.length;
1560
+ }
1561
+ for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
1562
+ walker = walker.next;
1563
+ }
1564
+ for (; walker !== null && i < to; i++, walker = walker.next) {
1565
+ ret.push(walker.value);
1566
+ }
1567
+ return ret
1568
+ };
1569
+
1570
+ Yallist$1.prototype.sliceReverse = function (from, to) {
1571
+ to = to || this.length;
1572
+ if (to < 0) {
1573
+ to += this.length;
1574
+ }
1575
+ from = from || 0;
1576
+ if (from < 0) {
1577
+ from += this.length;
1578
+ }
1579
+ var ret = new Yallist$1();
1580
+ if (to < from || to < 0) {
1581
+ return ret
1582
+ }
1583
+ if (from < 0) {
1584
+ from = 0;
1585
+ }
1586
+ if (to > this.length) {
1587
+ to = this.length;
1588
+ }
1589
+ for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
1590
+ walker = walker.prev;
1591
+ }
1592
+ for (; walker !== null && i > from; i--, walker = walker.prev) {
1593
+ ret.push(walker.value);
1594
+ }
1595
+ return ret
1596
+ };
1597
+
1598
+ Yallist$1.prototype.splice = function (start, deleteCount, ...nodes) {
1599
+ if (start > this.length) {
1600
+ start = this.length - 1;
1601
+ }
1602
+ if (start < 0) {
1603
+ start = this.length + start;
1604
+ }
1605
+
1606
+ for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
1607
+ walker = walker.next;
1608
+ }
1609
+
1610
+ var ret = [];
1611
+ for (var i = 0; walker && i < deleteCount; i++) {
1612
+ ret.push(walker.value);
1613
+ walker = this.removeNode(walker);
1614
+ }
1615
+ if (walker === null) {
1616
+ walker = this.tail;
1617
+ }
1618
+
1619
+ if (walker !== this.head && walker !== this.tail) {
1620
+ walker = walker.prev;
1621
+ }
1622
+
1623
+ for (var i = 0; i < nodes.length; i++) {
1624
+ walker = insert(this, walker, nodes[i]);
1625
+ }
1626
+ return ret;
1627
+ };
1628
+
1629
+ Yallist$1.prototype.reverse = function () {
1630
+ var head = this.head;
1631
+ var tail = this.tail;
1632
+ for (var walker = head; walker !== null; walker = walker.prev) {
1633
+ var p = walker.prev;
1634
+ walker.prev = walker.next;
1635
+ walker.next = p;
1636
+ }
1637
+ this.head = tail;
1638
+ this.tail = head;
1639
+ return this
1640
+ };
1641
+
1642
+ function insert (self, node, value) {
1643
+ var inserted = node === self.head ?
1644
+ new Node(value, null, node, self) :
1645
+ new Node(value, node, node.next, self);
1646
+
1647
+ if (inserted.next === null) {
1648
+ self.tail = inserted;
1649
+ }
1650
+ if (inserted.prev === null) {
1651
+ self.head = inserted;
1652
+ }
1653
+
1654
+ self.length++;
1655
+
1656
+ return inserted
1657
+ }
1658
+
1659
+ function push (self, item) {
1660
+ self.tail = new Node(item, self.tail, null, self);
1661
+ if (!self.head) {
1662
+ self.head = self.tail;
1663
+ }
1664
+ self.length++;
1665
+ }
1666
+
1667
+ function unshift (self, item) {
1668
+ self.head = new Node(item, null, self.head, self);
1669
+ if (!self.tail) {
1670
+ self.tail = self.head;
1671
+ }
1672
+ self.length++;
1673
+ }
1674
+
1675
+ function Node (value, prev, next, list) {
1676
+ if (!(this instanceof Node)) {
1677
+ return new Node(value, prev, next, list)
1678
+ }
1679
+
1680
+ this.list = list;
1681
+ this.value = value;
1682
+
1683
+ if (prev) {
1684
+ prev.next = this;
1685
+ this.prev = prev;
1686
+ } else {
1687
+ this.prev = null;
1688
+ }
1689
+
1690
+ if (next) {
1691
+ next.prev = this;
1692
+ this.next = next;
1693
+ } else {
1694
+ this.next = null;
1695
+ }
1696
+ }
1697
+
1698
+ try {
1699
+ // add if support for Symbol.iterator is present
1700
+ iterator(Yallist$1);
1701
+ } catch (er) {}
1702
+
1703
+ // A linked list to keep track of recently-used-ness
1704
+ const Yallist = yallist;
1705
+
1706
+ const MAX = Symbol('max');
1707
+ const LENGTH = Symbol('length');
1708
+ const LENGTH_CALCULATOR = Symbol('lengthCalculator');
1709
+ const ALLOW_STALE = Symbol('allowStale');
1710
+ const MAX_AGE = Symbol('maxAge');
1711
+ const DISPOSE = Symbol('dispose');
1712
+ const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');
1713
+ const LRU_LIST = Symbol('lruList');
1714
+ const CACHE = Symbol('cache');
1715
+ const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');
1716
+
1717
+ const naiveLength = () => 1;
1718
+
1719
+ // lruList is a yallist where the head is the youngest
1720
+ // item, and the tail is the oldest. the list contains the Hit
1721
+ // objects as the entries.
1722
+ // Each Hit object has a reference to its Yallist.Node. This
1723
+ // never changes.
1724
+ //
1725
+ // cache is a Map (or PseudoMap) that matches the keys to
1726
+ // the Yallist.Node object.
1727
+ class LRUCache {
1728
+ constructor (options) {
1729
+ if (typeof options === 'number')
1730
+ options = { max: options };
1731
+
1732
+ if (!options)
1733
+ options = {};
1734
+
1735
+ if (options.max && (typeof options.max !== 'number' || options.max < 0))
1736
+ throw new TypeError('max must be a non-negative number')
1737
+ // Kind of weird to have a default max of Infinity, but oh well.
1738
+ this[MAX] = options.max || Infinity;
1739
+
1740
+ const lc = options.length || naiveLength;
1741
+ this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc;
1742
+ this[ALLOW_STALE] = options.stale || false;
1743
+ if (options.maxAge && typeof options.maxAge !== 'number')
1744
+ throw new TypeError('maxAge must be a number')
1745
+ this[MAX_AGE] = options.maxAge || 0;
1746
+ this[DISPOSE] = options.dispose;
1747
+ this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
1748
+ this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
1749
+ this.reset();
1750
+ }
1751
+
1752
+ // resize the cache when the max changes.
1753
+ set max (mL) {
1754
+ if (typeof mL !== 'number' || mL < 0)
1755
+ throw new TypeError('max must be a non-negative number')
1756
+
1757
+ this[MAX] = mL || Infinity;
1758
+ trim(this);
1759
+ }
1760
+ get max () {
1761
+ return this[MAX]
1762
+ }
1763
+
1764
+ set allowStale (allowStale) {
1765
+ this[ALLOW_STALE] = !!allowStale;
1766
+ }
1767
+ get allowStale () {
1768
+ return this[ALLOW_STALE]
1769
+ }
1770
+
1771
+ set maxAge (mA) {
1772
+ if (typeof mA !== 'number')
1773
+ throw new TypeError('maxAge must be a non-negative number')
1774
+
1775
+ this[MAX_AGE] = mA;
1776
+ trim(this);
1777
+ }
1778
+ get maxAge () {
1779
+ return this[MAX_AGE]
1780
+ }
1781
+
1782
+ // resize the cache when the lengthCalculator changes.
1783
+ set lengthCalculator (lC) {
1784
+ if (typeof lC !== 'function')
1785
+ lC = naiveLength;
1786
+
1787
+ if (lC !== this[LENGTH_CALCULATOR]) {
1788
+ this[LENGTH_CALCULATOR] = lC;
1789
+ this[LENGTH] = 0;
1790
+ this[LRU_LIST].forEach(hit => {
1791
+ hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
1792
+ this[LENGTH] += hit.length;
1793
+ });
1794
+ }
1795
+ trim(this);
1796
+ }
1797
+ get lengthCalculator () { return this[LENGTH_CALCULATOR] }
1798
+
1799
+ get length () { return this[LENGTH] }
1800
+ get itemCount () { return this[LRU_LIST].length }
1801
+
1802
+ rforEach (fn, thisp) {
1803
+ thisp = thisp || this;
1804
+ for (let walker = this[LRU_LIST].tail; walker !== null;) {
1805
+ const prev = walker.prev;
1806
+ forEachStep(this, fn, walker, thisp);
1807
+ walker = prev;
1808
+ }
1809
+ }
1810
+
1811
+ forEach (fn, thisp) {
1812
+ thisp = thisp || this;
1813
+ for (let walker = this[LRU_LIST].head; walker !== null;) {
1814
+ const next = walker.next;
1815
+ forEachStep(this, fn, walker, thisp);
1816
+ walker = next;
1817
+ }
1818
+ }
1819
+
1820
+ keys () {
1821
+ return this[LRU_LIST].toArray().map(k => k.key)
1822
+ }
1823
+
1824
+ values () {
1825
+ return this[LRU_LIST].toArray().map(k => k.value)
1826
+ }
1827
+
1828
+ reset () {
1829
+ if (this[DISPOSE] &&
1830
+ this[LRU_LIST] &&
1831
+ this[LRU_LIST].length) {
1832
+ this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
1833
+ }
1834
+
1835
+ this[CACHE] = new Map(); // hash of items by key
1836
+ this[LRU_LIST] = new Yallist(); // list of items in order of use recency
1837
+ this[LENGTH] = 0; // length of items in the list
1838
+ }
1839
+
1840
+ dump () {
1841
+ return this[LRU_LIST].map(hit =>
1842
+ isStale(this, hit) ? false : {
1843
+ k: hit.key,
1844
+ v: hit.value,
1845
+ e: hit.now + (hit.maxAge || 0)
1846
+ }).toArray().filter(h => h)
1847
+ }
1848
+
1849
+ dumpLru () {
1850
+ return this[LRU_LIST]
1851
+ }
1852
+
1853
+ set (key, value, maxAge) {
1854
+ maxAge = maxAge || this[MAX_AGE];
1855
+
1856
+ if (maxAge && typeof maxAge !== 'number')
1857
+ throw new TypeError('maxAge must be a number')
1858
+
1859
+ const now = maxAge ? Date.now() : 0;
1860
+ const len = this[LENGTH_CALCULATOR](value, key);
1861
+
1862
+ if (this[CACHE].has(key)) {
1863
+ if (len > this[MAX]) {
1864
+ del(this, this[CACHE].get(key));
1865
+ return false
1866
+ }
1867
+
1868
+ const node = this[CACHE].get(key);
1869
+ const item = node.value;
1870
+
1871
+ // dispose of the old one before overwriting
1872
+ // split out into 2 ifs for better coverage tracking
1873
+ if (this[DISPOSE]) {
1874
+ if (!this[NO_DISPOSE_ON_SET])
1875
+ this[DISPOSE](key, item.value);
1876
+ }
1877
+
1878
+ item.now = now;
1879
+ item.maxAge = maxAge;
1880
+ item.value = value;
1881
+ this[LENGTH] += len - item.length;
1882
+ item.length = len;
1883
+ this.get(key);
1884
+ trim(this);
1885
+ return true
1886
+ }
1887
+
1888
+ const hit = new Entry(key, value, len, now, maxAge);
1889
+
1890
+ // oversized objects fall out of cache automatically.
1891
+ if (hit.length > this[MAX]) {
1892
+ if (this[DISPOSE])
1893
+ this[DISPOSE](key, value);
1894
+
1895
+ return false
1896
+ }
1897
+
1898
+ this[LENGTH] += hit.length;
1899
+ this[LRU_LIST].unshift(hit);
1900
+ this[CACHE].set(key, this[LRU_LIST].head);
1901
+ trim(this);
1902
+ return true
1903
+ }
1904
+
1905
+ has (key) {
1906
+ if (!this[CACHE].has(key)) return false
1907
+ const hit = this[CACHE].get(key).value;
1908
+ return !isStale(this, hit)
1909
+ }
1910
+
1911
+ get (key) {
1912
+ return get(this, key, true)
1913
+ }
1914
+
1915
+ peek (key) {
1916
+ return get(this, key, false)
1917
+ }
1918
+
1919
+ pop () {
1920
+ const node = this[LRU_LIST].tail;
1921
+ if (!node)
1922
+ return null
1923
+
1924
+ del(this, node);
1925
+ return node.value
1926
+ }
1927
+
1928
+ del (key) {
1929
+ del(this, this[CACHE].get(key));
1930
+ }
1931
+
1932
+ load (arr) {
1933
+ // reset the cache
1934
+ this.reset();
1935
+
1936
+ const now = Date.now();
1937
+ // A previous serialized cache has the most recent items first
1938
+ for (let l = arr.length - 1; l >= 0; l--) {
1939
+ const hit = arr[l];
1940
+ const expiresAt = hit.e || 0;
1941
+ if (expiresAt === 0)
1942
+ // the item was created without expiration in a non aged cache
1943
+ this.set(hit.k, hit.v);
1944
+ else {
1945
+ const maxAge = expiresAt - now;
1946
+ // dont add already expired items
1947
+ if (maxAge > 0) {
1948
+ this.set(hit.k, hit.v, maxAge);
1949
+ }
1950
+ }
1951
+ }
1952
+ }
1953
+
1954
+ prune () {
1955
+ this[CACHE].forEach((value, key) => get(this, key, false));
1956
+ }
1957
+ }
1958
+
1959
+ const get = (self, key, doUse) => {
1960
+ const node = self[CACHE].get(key);
1961
+ if (node) {
1962
+ const hit = node.value;
1963
+ if (isStale(self, hit)) {
1964
+ del(self, node);
1965
+ if (!self[ALLOW_STALE])
1966
+ return undefined
1967
+ } else {
1968
+ if (doUse) {
1969
+ if (self[UPDATE_AGE_ON_GET])
1970
+ node.value.now = Date.now();
1971
+ self[LRU_LIST].unshiftNode(node);
1972
+ }
1973
+ }
1974
+ return hit.value
1975
+ }
1976
+ };
1977
+
1978
+ const isStale = (self, hit) => {
1979
+ if (!hit || (!hit.maxAge && !self[MAX_AGE]))
1980
+ return false
1981
+
1982
+ const diff = Date.now() - hit.now;
1983
+ return hit.maxAge ? diff > hit.maxAge
1984
+ : self[MAX_AGE] && (diff > self[MAX_AGE])
1985
+ };
1986
+
1987
+ const trim = self => {
1988
+ if (self[LENGTH] > self[MAX]) {
1989
+ for (let walker = self[LRU_LIST].tail;
1990
+ self[LENGTH] > self[MAX] && walker !== null;) {
1991
+ // We know that we're about to delete this one, and also
1992
+ // what the next least recently used key will be, so just
1993
+ // go ahead and set it now.
1994
+ const prev = walker.prev;
1995
+ del(self, walker);
1996
+ walker = prev;
1997
+ }
1998
+ }
1999
+ };
2000
+
2001
+ const del = (self, node) => {
2002
+ if (node) {
2003
+ const hit = node.value;
2004
+ if (self[DISPOSE])
2005
+ self[DISPOSE](hit.key, hit.value);
2006
+
2007
+ self[LENGTH] -= hit.length;
2008
+ self[CACHE].delete(hit.key);
2009
+ self[LRU_LIST].removeNode(node);
2010
+ }
2011
+ };
2012
+
2013
+ class Entry {
2014
+ constructor (key, value, length, now, maxAge) {
2015
+ this.key = key;
2016
+ this.value = value;
2017
+ this.length = length;
2018
+ this.now = now;
2019
+ this.maxAge = maxAge || 0;
2020
+ }
2021
+ }
2022
+
2023
+ const forEachStep = (self, fn, node, thisp) => {
2024
+ let hit = node.value;
2025
+ if (isStale(self, hit)) {
2026
+ del(self, node);
2027
+ if (!self[ALLOW_STALE])
2028
+ hit = undefined;
2029
+ }
2030
+ if (hit)
2031
+ fn.call(thisp, hit.value, hit.key, self);
2032
+ };
2033
+
2034
+ var lruCache = LRUCache;
2035
+
2036
+ // hoisted class for cyclic dependency
2037
+ class Range$b {
2038
+ constructor (range, options) {
2039
+ options = parseOptions$1(options);
2040
+
2041
+ if (range instanceof Range$b) {
2042
+ if (
2043
+ range.loose === !!options.loose &&
2044
+ range.includePrerelease === !!options.includePrerelease
2045
+ ) {
2046
+ return range
2047
+ } else {
2048
+ return new Range$b(range.raw, options)
2049
+ }
2050
+ }
2051
+
2052
+ if (range instanceof Comparator$4) {
2053
+ // just put it in the set and return
2054
+ this.raw = range.value;
2055
+ this.set = [[range]];
2056
+ this.format();
2057
+ return this
2058
+ }
2059
+
2060
+ this.options = options;
2061
+ this.loose = !!options.loose;
2062
+ this.includePrerelease = !!options.includePrerelease;
2063
+
2064
+ // First, split based on boolean or ||
2065
+ this.raw = range;
2066
+ this.set = range
2067
+ .split('||')
2068
+ // map the range to a 2d array of comparators
2069
+ .map(r => this.parseRange(r.trim()))
2070
+ // throw out any comparator lists that are empty
2071
+ // this generally means that it was not a valid range, which is allowed
2072
+ // in loose mode, but will still throw if the WHOLE range is invalid.
2073
+ .filter(c => c.length);
2074
+
2075
+ if (!this.set.length) {
2076
+ throw new TypeError(`Invalid SemVer Range: ${range}`)
2077
+ }
2078
+
2079
+ // if we have any that are not the null set, throw out null sets.
2080
+ if (this.set.length > 1) {
2081
+ // keep the first one, in case they're all null sets
2082
+ const first = this.set[0];
2083
+ this.set = this.set.filter(c => !isNullSet(c[0]));
2084
+ if (this.set.length === 0) {
2085
+ this.set = [first];
2086
+ } else if (this.set.length > 1) {
2087
+ // if we have any that are *, then the range is just *
2088
+ for (const c of this.set) {
2089
+ if (c.length === 1 && isAny(c[0])) {
2090
+ this.set = [c];
2091
+ break
2092
+ }
2093
+ }
2094
+ }
2095
+ }
2096
+
2097
+ this.format();
2098
+ }
2099
+
2100
+ format () {
2101
+ this.range = this.set
2102
+ .map((comps) => {
2103
+ return comps.join(' ').trim()
2104
+ })
2105
+ .join('||')
2106
+ .trim();
2107
+ return this.range
2108
+ }
2109
+
2110
+ toString () {
2111
+ return this.range
2112
+ }
2113
+
2114
+ parseRange (range) {
2115
+ range = range.trim();
2116
+
2117
+ // memoize range parsing for performance.
2118
+ // this is a very hot path, and fully deterministic.
2119
+ const memoOpts = Object.keys(this.options).join(',');
2120
+ const memoKey = `parseRange:${memoOpts}:${range}`;
2121
+ const cached = cache.get(memoKey);
2122
+ if (cached) {
2123
+ return cached
2124
+ }
2125
+
2126
+ const loose = this.options.loose;
2127
+ // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
2128
+ const hr = loose ? re$1[t$1.HYPHENRANGELOOSE] : re$1[t$1.HYPHENRANGE];
2129
+ range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
2130
+ debug$1('hyphen replace', range);
2131
+ // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
2132
+ range = range.replace(re$1[t$1.COMPARATORTRIM], comparatorTrimReplace);
2133
+ debug$1('comparator trim', range);
2134
+
2135
+ // `~ 1.2.3` => `~1.2.3`
2136
+ range = range.replace(re$1[t$1.TILDETRIM], tildeTrimReplace);
2137
+
2138
+ // `^ 1.2.3` => `^1.2.3`
2139
+ range = range.replace(re$1[t$1.CARETTRIM], caretTrimReplace);
2140
+
2141
+ // normalize spaces
2142
+ range = range.split(/\s+/).join(' ');
2143
+
2144
+ // At this point, the range is completely trimmed and
2145
+ // ready to be split into comparators.
2146
+
2147
+ let rangeList = range
2148
+ .split(' ')
2149
+ .map(comp => parseComparator(comp, this.options))
2150
+ .join(' ')
2151
+ .split(/\s+/)
2152
+ // >=0.0.0 is equivalent to *
2153
+ .map(comp => replaceGTE0(comp, this.options));
2154
+
2155
+ if (loose) {
2156
+ // in loose mode, throw out any that are not valid comparators
2157
+ rangeList = rangeList.filter(comp => {
2158
+ debug$1('loose invalid filter', comp, this.options);
2159
+ return !!comp.match(re$1[t$1.COMPARATORLOOSE])
2160
+ });
2161
+ }
2162
+ debug$1('range list', rangeList);
2163
+
2164
+ // if any comparators are the null set, then replace with JUST null set
2165
+ // if more than one comparator, remove any * comparators
2166
+ // also, don't include the same comparator more than once
2167
+ const rangeMap = new Map();
2168
+ const comparators = rangeList.map(comp => new Comparator$4(comp, this.options));
2169
+ for (const comp of comparators) {
2170
+ if (isNullSet(comp)) {
2171
+ return [comp]
2172
+ }
2173
+ rangeMap.set(comp.value, comp);
2174
+ }
2175
+ if (rangeMap.size > 1 && rangeMap.has('')) {
2176
+ rangeMap.delete('');
2177
+ }
2178
+
2179
+ const result = [...rangeMap.values()];
2180
+ cache.set(memoKey, result);
2181
+ return result
2182
+ }
2183
+
2184
+ intersects (range, options) {
2185
+ if (!(range instanceof Range$b)) {
2186
+ throw new TypeError('a Range is required')
2187
+ }
2188
+
2189
+ return this.set.some((thisComparators) => {
2190
+ return (
2191
+ isSatisfiable(thisComparators, options) &&
2192
+ range.set.some((rangeComparators) => {
2193
+ return (
2194
+ isSatisfiable(rangeComparators, options) &&
2195
+ thisComparators.every((thisComparator) => {
2196
+ return rangeComparators.every((rangeComparator) => {
2197
+ return thisComparator.intersects(rangeComparator, options)
2198
+ })
2199
+ })
2200
+ )
2201
+ })
2202
+ )
2203
+ })
2204
+ }
2205
+
2206
+ // if ANY of the sets match ALL of its comparators, then pass
2207
+ test (version) {
2208
+ if (!version) {
2209
+ return false
2210
+ }
2211
+
2212
+ if (typeof version === 'string') {
2213
+ try {
2214
+ version = new SemVer$6(version, this.options);
2215
+ } catch (er) {
2216
+ return false
2217
+ }
2218
+ }
2219
+
2220
+ for (let i = 0; i < this.set.length; i++) {
2221
+ if (testSet(this.set[i], version, this.options)) {
2222
+ return true
2223
+ }
2224
+ }
2225
+ return false
2226
+ }
2227
+ }
2228
+ var range = Range$b;
2229
+
2230
+ const LRU = lruCache;
2231
+ const cache = new LRU({ max: 1000 });
2232
+
2233
+ const parseOptions$1 = parseOptions_1;
2234
+ const Comparator$4 = comparator;
2235
+ const debug$1 = debug_1;
2236
+ const SemVer$6 = semver$1;
2237
+ const {
2238
+ re: re$1,
2239
+ t: t$1,
2240
+ comparatorTrimReplace,
2241
+ tildeTrimReplace,
2242
+ caretTrimReplace,
2243
+ } = re$5.exports;
2244
+
2245
+ const isNullSet = c => c.value === '<0.0.0-0';
2246
+ const isAny = c => c.value === '';
2247
+
2248
+ // take a set of comparators and determine whether there
2249
+ // exists a version which can satisfy it
2250
+ const isSatisfiable = (comparators, options) => {
2251
+ let result = true;
2252
+ const remainingComparators = comparators.slice();
2253
+ let testComparator = remainingComparators.pop();
2254
+
2255
+ while (result && remainingComparators.length) {
2256
+ result = remainingComparators.every((otherComparator) => {
2257
+ return testComparator.intersects(otherComparator, options)
2258
+ });
2259
+
2260
+ testComparator = remainingComparators.pop();
2261
+ }
2262
+
2263
+ return result
2264
+ };
2265
+
2266
+ // comprised of xranges, tildes, stars, and gtlt's at this point.
2267
+ // already replaced the hyphen ranges
2268
+ // turn into a set of JUST comparators.
2269
+ const parseComparator = (comp, options) => {
2270
+ debug$1('comp', comp, options);
2271
+ comp = replaceCarets(comp, options);
2272
+ debug$1('caret', comp);
2273
+ comp = replaceTildes(comp, options);
2274
+ debug$1('tildes', comp);
2275
+ comp = replaceXRanges(comp, options);
2276
+ debug$1('xrange', comp);
2277
+ comp = replaceStars(comp, options);
2278
+ debug$1('stars', comp);
2279
+ return comp
2280
+ };
2281
+
2282
+ const isX = id => !id || id.toLowerCase() === 'x' || id === '*';
2283
+
2284
+ // ~, ~> --> * (any, kinda silly)
2285
+ // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
2286
+ // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
2287
+ // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0
2288
+ // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
2289
+ // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
2290
+ // ~0.0.1 --> >=0.0.1 <0.1.0-0
2291
+ const replaceTildes = (comp, options) =>
2292
+ comp.trim().split(/\s+/).map((c) => {
2293
+ return replaceTilde(c, options)
2294
+ }).join(' ');
2295
+
2296
+ const replaceTilde = (comp, options) => {
2297
+ const r = options.loose ? re$1[t$1.TILDELOOSE] : re$1[t$1.TILDE];
2298
+ return comp.replace(r, (_, M, m, p, pr) => {
2299
+ debug$1('tilde', comp, _, M, m, p, pr);
2300
+ let ret;
2301
+
2302
+ if (isX(M)) {
2303
+ ret = '';
2304
+ } else if (isX(m)) {
2305
+ ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
2306
+ } else if (isX(p)) {
2307
+ // ~1.2 == >=1.2.0 <1.3.0-0
2308
+ ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
2309
+ } else if (pr) {
2310
+ debug$1('replaceTilde pr', pr);
2311
+ ret = `>=${M}.${m}.${p}-${pr
2312
+ } <${M}.${+m + 1}.0-0`;
2313
+ } else {
2314
+ // ~1.2.3 == >=1.2.3 <1.3.0-0
2315
+ ret = `>=${M}.${m}.${p
2316
+ } <${M}.${+m + 1}.0-0`;
2317
+ }
2318
+
2319
+ debug$1('tilde return', ret);
2320
+ return ret
2321
+ })
2322
+ };
2323
+
2324
+ // ^ --> * (any, kinda silly)
2325
+ // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0
2326
+ // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0
2327
+ // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0
2328
+ // ^1.2.3 --> >=1.2.3 <2.0.0-0
2329
+ // ^1.2.0 --> >=1.2.0 <2.0.0-0
2330
+ // ^0.0.1 --> >=0.0.1 <0.0.2-0
2331
+ // ^0.1.0 --> >=0.1.0 <0.2.0-0
2332
+ const replaceCarets = (comp, options) =>
2333
+ comp.trim().split(/\s+/).map((c) => {
2334
+ return replaceCaret(c, options)
2335
+ }).join(' ');
2336
+
2337
+ const replaceCaret = (comp, options) => {
2338
+ debug$1('caret', comp, options);
2339
+ const r = options.loose ? re$1[t$1.CARETLOOSE] : re$1[t$1.CARET];
2340
+ const z = options.includePrerelease ? '-0' : '';
2341
+ return comp.replace(r, (_, M, m, p, pr) => {
2342
+ debug$1('caret', comp, _, M, m, p, pr);
2343
+ let ret;
2344
+
2345
+ if (isX(M)) {
2346
+ ret = '';
2347
+ } else if (isX(m)) {
2348
+ ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
2349
+ } else if (isX(p)) {
2350
+ if (M === '0') {
2351
+ ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
2352
+ } else {
2353
+ ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
2354
+ }
2355
+ } else if (pr) {
2356
+ debug$1('replaceCaret pr', pr);
2357
+ if (M === '0') {
2358
+ if (m === '0') {
2359
+ ret = `>=${M}.${m}.${p}-${pr
2360
+ } <${M}.${m}.${+p + 1}-0`;
2361
+ } else {
2362
+ ret = `>=${M}.${m}.${p}-${pr
2363
+ } <${M}.${+m + 1}.0-0`;
2364
+ }
2365
+ } else {
2366
+ ret = `>=${M}.${m}.${p}-${pr
2367
+ } <${+M + 1}.0.0-0`;
2368
+ }
2369
+ } else {
2370
+ debug$1('no pr');
2371
+ if (M === '0') {
2372
+ if (m === '0') {
2373
+ ret = `>=${M}.${m}.${p
2374
+ }${z} <${M}.${m}.${+p + 1}-0`;
2375
+ } else {
2376
+ ret = `>=${M}.${m}.${p
2377
+ }${z} <${M}.${+m + 1}.0-0`;
2378
+ }
2379
+ } else {
2380
+ ret = `>=${M}.${m}.${p
2381
+ } <${+M + 1}.0.0-0`;
2382
+ }
2383
+ }
2384
+
2385
+ debug$1('caret return', ret);
2386
+ return ret
2387
+ })
2388
+ };
2389
+
2390
+ const replaceXRanges = (comp, options) => {
2391
+ debug$1('replaceXRanges', comp, options);
2392
+ return comp.split(/\s+/).map((c) => {
2393
+ return replaceXRange(c, options)
2394
+ }).join(' ')
2395
+ };
2396
+
2397
+ const replaceXRange = (comp, options) => {
2398
+ comp = comp.trim();
2399
+ const r = options.loose ? re$1[t$1.XRANGELOOSE] : re$1[t$1.XRANGE];
2400
+ return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
2401
+ debug$1('xRange', comp, ret, gtlt, M, m, p, pr);
2402
+ const xM = isX(M);
2403
+ const xm = xM || isX(m);
2404
+ const xp = xm || isX(p);
2405
+ const anyX = xp;
2406
+
2407
+ if (gtlt === '=' && anyX) {
2408
+ gtlt = '';
2409
+ }
2410
+
2411
+ // if we're including prereleases in the match, then we need
2412
+ // to fix this to -0, the lowest possible prerelease value
2413
+ pr = options.includePrerelease ? '-0' : '';
2414
+
2415
+ if (xM) {
2416
+ if (gtlt === '>' || gtlt === '<') {
2417
+ // nothing is allowed
2418
+ ret = '<0.0.0-0';
2419
+ } else {
2420
+ // nothing is forbidden
2421
+ ret = '*';
2422
+ }
2423
+ } else if (gtlt && anyX) {
2424
+ // we know patch is an x, because we have any x at all.
2425
+ // replace X with 0
2426
+ if (xm) {
2427
+ m = 0;
2428
+ }
2429
+ p = 0;
2430
+
2431
+ if (gtlt === '>') {
2432
+ // >1 => >=2.0.0
2433
+ // >1.2 => >=1.3.0
2434
+ gtlt = '>=';
2435
+ if (xm) {
2436
+ M = +M + 1;
2437
+ m = 0;
2438
+ p = 0;
2439
+ } else {
2440
+ m = +m + 1;
2441
+ p = 0;
2442
+ }
2443
+ } else if (gtlt === '<=') {
2444
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
2445
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
2446
+ gtlt = '<';
2447
+ if (xm) {
2448
+ M = +M + 1;
2449
+ } else {
2450
+ m = +m + 1;
2451
+ }
2452
+ }
2453
+
2454
+ if (gtlt === '<') {
2455
+ pr = '-0';
2456
+ }
2457
+
2458
+ ret = `${gtlt + M}.${m}.${p}${pr}`;
2459
+ } else if (xm) {
2460
+ ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
2461
+ } else if (xp) {
2462
+ ret = `>=${M}.${m}.0${pr
2463
+ } <${M}.${+m + 1}.0-0`;
2464
+ }
2465
+
2466
+ debug$1('xRange return', ret);
2467
+
2468
+ return ret
2469
+ })
2470
+ };
2471
+
2472
+ // Because * is AND-ed with everything else in the comparator,
2473
+ // and '' means "any version", just remove the *s entirely.
2474
+ const replaceStars = (comp, options) => {
2475
+ debug$1('replaceStars', comp, options);
2476
+ // Looseness is ignored here. star is always as loose as it gets!
2477
+ return comp.trim().replace(re$1[t$1.STAR], '')
2478
+ };
2479
+
2480
+ const replaceGTE0 = (comp, options) => {
2481
+ debug$1('replaceGTE0', comp, options);
2482
+ return comp.trim()
2483
+ .replace(re$1[options.includePrerelease ? t$1.GTE0PRE : t$1.GTE0], '')
2484
+ };
2485
+
2486
+ // This function is passed to string.replace(re[t.HYPHENRANGE])
2487
+ // M, m, patch, prerelease, build
2488
+ // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
2489
+ // 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
2490
+ // 1.2 - 3.4 => >=1.2.0 <3.5.0-0
2491
+ const hyphenReplace = incPr => ($0,
2492
+ from, fM, fm, fp, fpr, fb,
2493
+ to, tM, tm, tp, tpr, tb) => {
2494
+ if (isX(fM)) {
2495
+ from = '';
2496
+ } else if (isX(fm)) {
2497
+ from = `>=${fM}.0.0${incPr ? '-0' : ''}`;
2498
+ } else if (isX(fp)) {
2499
+ from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`;
2500
+ } else if (fpr) {
2501
+ from = `>=${from}`;
2502
+ } else {
2503
+ from = `>=${from}${incPr ? '-0' : ''}`;
2504
+ }
2505
+
2506
+ if (isX(tM)) {
2507
+ to = '';
2508
+ } else if (isX(tm)) {
2509
+ to = `<${+tM + 1}.0.0-0`;
2510
+ } else if (isX(tp)) {
2511
+ to = `<${tM}.${+tm + 1}.0-0`;
2512
+ } else if (tpr) {
2513
+ to = `<=${tM}.${tm}.${tp}-${tpr}`;
2514
+ } else if (incPr) {
2515
+ to = `<${tM}.${tm}.${+tp + 1}-0`;
2516
+ } else {
2517
+ to = `<=${to}`;
2518
+ }
2519
+
2520
+ return (`${from} ${to}`).trim()
2521
+ };
2522
+
2523
+ const testSet = (set, version, options) => {
2524
+ for (let i = 0; i < set.length; i++) {
2525
+ if (!set[i].test(version)) {
2526
+ return false
2527
+ }
2528
+ }
2529
+
2530
+ if (version.prerelease.length && !options.includePrerelease) {
2531
+ // Find the set of versions that are allowed to have prereleases
2532
+ // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
2533
+ // That should allow `1.2.3-pr.2` to pass.
2534
+ // However, `1.2.4-alpha.notready` should NOT be allowed,
2535
+ // even though it's within the range set by the comparators.
2536
+ for (let i = 0; i < set.length; i++) {
2537
+ debug$1(set[i].semver);
2538
+ if (set[i].semver === Comparator$4.ANY) {
2539
+ continue
2540
+ }
2541
+
2542
+ if (set[i].semver.prerelease.length > 0) {
2543
+ const allowed = set[i].semver;
2544
+ if (allowed.major === version.major &&
2545
+ allowed.minor === version.minor &&
2546
+ allowed.patch === version.patch) {
2547
+ return true
2548
+ }
2549
+ }
2550
+ }
2551
+
2552
+ // Version has a -pre, but it's not one of the ones we like.
2553
+ return false
2554
+ }
2555
+
2556
+ return true
2557
+ };
2558
+
2559
+ const ANY$2 = Symbol('SemVer ANY');
2560
+ // hoisted class for cyclic dependency
2561
+ class Comparator$3 {
2562
+ static get ANY () {
2563
+ return ANY$2
2564
+ }
2565
+
2566
+ constructor (comp, options) {
2567
+ options = parseOptions(options);
2568
+
2569
+ if (comp instanceof Comparator$3) {
2570
+ if (comp.loose === !!options.loose) {
2571
+ return comp
2572
+ } else {
2573
+ comp = comp.value;
2574
+ }
2575
+ }
2576
+
2577
+ debug('comparator', comp, options);
2578
+ this.options = options;
2579
+ this.loose = !!options.loose;
2580
+ this.parse(comp);
2581
+
2582
+ if (this.semver === ANY$2) {
2583
+ this.value = '';
2584
+ } else {
2585
+ this.value = this.operator + this.semver.version;
2586
+ }
2587
+
2588
+ debug('comp', this);
2589
+ }
2590
+
2591
+ parse (comp) {
2592
+ const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
2593
+ const m = comp.match(r);
2594
+
2595
+ if (!m) {
2596
+ throw new TypeError(`Invalid comparator: ${comp}`)
2597
+ }
2598
+
2599
+ this.operator = m[1] !== undefined ? m[1] : '';
2600
+ if (this.operator === '=') {
2601
+ this.operator = '';
2602
+ }
2603
+
2604
+ // if it literally is just '>' or '' then allow anything.
2605
+ if (!m[2]) {
2606
+ this.semver = ANY$2;
2607
+ } else {
2608
+ this.semver = new SemVer$5(m[2], this.options.loose);
2609
+ }
2610
+ }
2611
+
2612
+ toString () {
2613
+ return this.value
2614
+ }
2615
+
2616
+ test (version) {
2617
+ debug('Comparator.test', version, this.options.loose);
2618
+
2619
+ if (this.semver === ANY$2 || version === ANY$2) {
2620
+ return true
2621
+ }
2622
+
2623
+ if (typeof version === 'string') {
2624
+ try {
2625
+ version = new SemVer$5(version, this.options);
2626
+ } catch (er) {
2627
+ return false
2628
+ }
2629
+ }
2630
+
2631
+ return cmp$1(version, this.operator, this.semver, this.options)
2632
+ }
2633
+
2634
+ intersects (comp, options) {
2635
+ if (!(comp instanceof Comparator$3)) {
2636
+ throw new TypeError('a Comparator is required')
2637
+ }
2638
+
2639
+ if (!options || typeof options !== 'object') {
2640
+ options = {
2641
+ loose: !!options,
2642
+ includePrerelease: false,
2643
+ };
2644
+ }
2645
+
2646
+ if (this.operator === '') {
2647
+ if (this.value === '') {
2648
+ return true
2649
+ }
2650
+ return new Range$a(comp.value, options).test(this.value)
2651
+ } else if (comp.operator === '') {
2652
+ if (comp.value === '') {
2653
+ return true
2654
+ }
2655
+ return new Range$a(this.value, options).test(comp.semver)
2656
+ }
2657
+
2658
+ const sameDirectionIncreasing =
2659
+ (this.operator === '>=' || this.operator === '>') &&
2660
+ (comp.operator === '>=' || comp.operator === '>');
2661
+ const sameDirectionDecreasing =
2662
+ (this.operator === '<=' || this.operator === '<') &&
2663
+ (comp.operator === '<=' || comp.operator === '<');
2664
+ const sameSemVer = this.semver.version === comp.semver.version;
2665
+ const differentDirectionsInclusive =
2666
+ (this.operator === '>=' || this.operator === '<=') &&
2667
+ (comp.operator === '>=' || comp.operator === '<=');
2668
+ const oppositeDirectionsLessThan =
2669
+ cmp$1(this.semver, '<', comp.semver, options) &&
2670
+ (this.operator === '>=' || this.operator === '>') &&
2671
+ (comp.operator === '<=' || comp.operator === '<');
2672
+ const oppositeDirectionsGreaterThan =
2673
+ cmp$1(this.semver, '>', comp.semver, options) &&
2674
+ (this.operator === '<=' || this.operator === '<') &&
2675
+ (comp.operator === '>=' || comp.operator === '>');
2676
+
2677
+ return (
2678
+ sameDirectionIncreasing ||
2679
+ sameDirectionDecreasing ||
2680
+ (sameSemVer && differentDirectionsInclusive) ||
2681
+ oppositeDirectionsLessThan ||
2682
+ oppositeDirectionsGreaterThan
2683
+ )
2684
+ }
2685
+ }
2686
+
2687
+ var comparator = Comparator$3;
2688
+
2689
+ const parseOptions = parseOptions_1;
2690
+ const { re, t } = re$5.exports;
2691
+ const cmp$1 = cmp_1;
2692
+ const debug = debug_1;
2693
+ const SemVer$5 = semver$1;
2694
+ const Range$a = range;
2695
+
2696
+ const Range$9 = range;
2697
+ const satisfies$4 = (version, range, options) => {
2698
+ try {
2699
+ range = new Range$9(range, options);
2700
+ } catch (er) {
2701
+ return false
2702
+ }
2703
+ return range.test(version)
2704
+ };
2705
+ var satisfies_1 = satisfies$4;
2706
+
2707
+ const Range$8 = range;
2708
+
2709
+ // Mostly just for testing and legacy API reasons
2710
+ const toComparators$1 = (range, options) =>
2711
+ new Range$8(range, options).set
2712
+ .map(comp => comp.map(c => c.value).join(' ').trim().split(' '));
2713
+
2714
+ var toComparators_1 = toComparators$1;
2715
+
2716
+ const SemVer$4 = semver$1;
2717
+ const Range$7 = range;
2718
+
2719
+ const maxSatisfying$1 = (versions, range, options) => {
2720
+ let max = null;
2721
+ let maxSV = null;
2722
+ let rangeObj = null;
2723
+ try {
2724
+ rangeObj = new Range$7(range, options);
2725
+ } catch (er) {
2726
+ return null
2727
+ }
2728
+ versions.forEach((v) => {
2729
+ if (rangeObj.test(v)) {
2730
+ // satisfies(v, range, options)
2731
+ if (!max || maxSV.compare(v) === -1) {
2732
+ // compare(max, v, true)
2733
+ max = v;
2734
+ maxSV = new SemVer$4(max, options);
2735
+ }
2736
+ }
2737
+ });
2738
+ return max
2739
+ };
2740
+ var maxSatisfying_1 = maxSatisfying$1;
2741
+
2742
+ const SemVer$3 = semver$1;
2743
+ const Range$6 = range;
2744
+ const minSatisfying$1 = (versions, range, options) => {
2745
+ let min = null;
2746
+ let minSV = null;
2747
+ let rangeObj = null;
2748
+ try {
2749
+ rangeObj = new Range$6(range, options);
2750
+ } catch (er) {
2751
+ return null
2752
+ }
2753
+ versions.forEach((v) => {
2754
+ if (rangeObj.test(v)) {
2755
+ // satisfies(v, range, options)
2756
+ if (!min || minSV.compare(v) === 1) {
2757
+ // compare(min, v, true)
2758
+ min = v;
2759
+ minSV = new SemVer$3(min, options);
2760
+ }
2761
+ }
2762
+ });
2763
+ return min
2764
+ };
2765
+ var minSatisfying_1 = minSatisfying$1;
2766
+
2767
+ const SemVer$2 = semver$1;
2768
+ const Range$5 = range;
2769
+ const gt$2 = gt_1;
2770
+
2771
+ const minVersion$1 = (range, loose) => {
2772
+ range = new Range$5(range, loose);
2773
+
2774
+ let minver = new SemVer$2('0.0.0');
2775
+ if (range.test(minver)) {
2776
+ return minver
2777
+ }
2778
+
2779
+ minver = new SemVer$2('0.0.0-0');
2780
+ if (range.test(minver)) {
2781
+ return minver
2782
+ }
2783
+
2784
+ minver = null;
2785
+ for (let i = 0; i < range.set.length; ++i) {
2786
+ const comparators = range.set[i];
2787
+
2788
+ let setMin = null;
2789
+ comparators.forEach((comparator) => {
2790
+ // Clone to avoid manipulating the comparator's semver object.
2791
+ const compver = new SemVer$2(comparator.semver.version);
2792
+ switch (comparator.operator) {
2793
+ case '>':
2794
+ if (compver.prerelease.length === 0) {
2795
+ compver.patch++;
2796
+ } else {
2797
+ compver.prerelease.push(0);
2798
+ }
2799
+ compver.raw = compver.format();
2800
+ /* fallthrough */
2801
+ case '':
2802
+ case '>=':
2803
+ if (!setMin || gt$2(compver, setMin)) {
2804
+ setMin = compver;
2805
+ }
2806
+ break
2807
+ case '<':
2808
+ case '<=':
2809
+ /* Ignore maximum versions */
2810
+ break
2811
+ /* istanbul ignore next */
2812
+ default:
2813
+ throw new Error(`Unexpected operation: ${comparator.operator}`)
2814
+ }
2815
+ });
2816
+ if (setMin && (!minver || gt$2(minver, setMin))) {
2817
+ minver = setMin;
2818
+ }
2819
+ }
2820
+
2821
+ if (minver && range.test(minver)) {
2822
+ return minver
2823
+ }
2824
+
2825
+ return null
2826
+ };
2827
+ var minVersion_1 = minVersion$1;
2828
+
2829
+ const Range$4 = range;
2830
+ const validRange$1 = (range, options) => {
2831
+ try {
2832
+ // Return '*' instead of '' so that truthiness works.
2833
+ // This will throw if it's invalid anyway
2834
+ return new Range$4(range, options).range || '*'
2835
+ } catch (er) {
2836
+ return null
2837
+ }
2838
+ };
2839
+ var valid$1 = validRange$1;
2840
+
2841
+ const SemVer$1 = semver$1;
2842
+ const Comparator$2 = comparator;
2843
+ const { ANY: ANY$1 } = Comparator$2;
2844
+ const Range$3 = range;
2845
+ const satisfies$3 = satisfies_1;
2846
+ const gt$1 = gt_1;
2847
+ const lt$1 = lt_1;
2848
+ const lte$1 = lte_1;
2849
+ const gte$1 = gte_1;
2850
+
2851
+ const outside$3 = (version, range, hilo, options) => {
2852
+ version = new SemVer$1(version, options);
2853
+ range = new Range$3(range, options);
2854
+
2855
+ let gtfn, ltefn, ltfn, comp, ecomp;
2856
+ switch (hilo) {
2857
+ case '>':
2858
+ gtfn = gt$1;
2859
+ ltefn = lte$1;
2860
+ ltfn = lt$1;
2861
+ comp = '>';
2862
+ ecomp = '>=';
2863
+ break
2864
+ case '<':
2865
+ gtfn = lt$1;
2866
+ ltefn = gte$1;
2867
+ ltfn = gt$1;
2868
+ comp = '<';
2869
+ ecomp = '<=';
2870
+ break
2871
+ default:
2872
+ throw new TypeError('Must provide a hilo val of "<" or ">"')
2873
+ }
2874
+
2875
+ // If it satisfies the range it is not outside
2876
+ if (satisfies$3(version, range, options)) {
2877
+ return false
2878
+ }
2879
+
2880
+ // From now on, variable terms are as if we're in "gtr" mode.
2881
+ // but note that everything is flipped for the "ltr" function.
2882
+
2883
+ for (let i = 0; i < range.set.length; ++i) {
2884
+ const comparators = range.set[i];
2885
+
2886
+ let high = null;
2887
+ let low = null;
2888
+
2889
+ comparators.forEach((comparator) => {
2890
+ if (comparator.semver === ANY$1) {
2891
+ comparator = new Comparator$2('>=0.0.0');
2892
+ }
2893
+ high = high || comparator;
2894
+ low = low || comparator;
2895
+ if (gtfn(comparator.semver, high.semver, options)) {
2896
+ high = comparator;
2897
+ } else if (ltfn(comparator.semver, low.semver, options)) {
2898
+ low = comparator;
2899
+ }
2900
+ });
2901
+
2902
+ // If the edge version comparator has a operator then our version
2903
+ // isn't outside it
2904
+ if (high.operator === comp || high.operator === ecomp) {
2905
+ return false
2906
+ }
2907
+
2908
+ // If the lowest version comparator has an operator and our version
2909
+ // is less than it then it isn't higher than the range
2910
+ if ((!low.operator || low.operator === comp) &&
2911
+ ltefn(version, low.semver)) {
2912
+ return false
2913
+ } else if (low.operator === ecomp && ltfn(version, low.semver)) {
2914
+ return false
2915
+ }
2916
+ }
2917
+ return true
2918
+ };
2919
+
2920
+ var outside_1 = outside$3;
2921
+
2922
+ // Determine if version is greater than all the versions possible in the range.
2923
+ const outside$2 = outside_1;
2924
+ const gtr$1 = (version, range, options) => outside$2(version, range, '>', options);
2925
+ var gtr_1 = gtr$1;
2926
+
2927
+ const outside$1 = outside_1;
2928
+ // Determine if version is less than all the versions possible in the range
2929
+ const ltr$1 = (version, range, options) => outside$1(version, range, '<', options);
2930
+ var ltr_1 = ltr$1;
2931
+
2932
+ const Range$2 = range;
2933
+ const intersects$1 = (r1, r2, options) => {
2934
+ r1 = new Range$2(r1, options);
2935
+ r2 = new Range$2(r2, options);
2936
+ return r1.intersects(r2)
2937
+ };
2938
+ var intersects_1 = intersects$1;
2939
+
2940
+ // given a set of versions and a range, create a "simplified" range
2941
+ // that includes the same versions that the original range does
2942
+ // If the original range is shorter than the simplified one, return that.
2943
+ const satisfies$2 = satisfies_1;
2944
+ const compare$2 = compare_1;
2945
+ var simplify = (versions, range, options) => {
2946
+ const set = [];
2947
+ let first = null;
2948
+ let prev = null;
2949
+ const v = versions.sort((a, b) => compare$2(a, b, options));
2950
+ for (const version of v) {
2951
+ const included = satisfies$2(version, range, options);
2952
+ if (included) {
2953
+ prev = version;
2954
+ if (!first) {
2955
+ first = version;
2956
+ }
2957
+ } else {
2958
+ if (prev) {
2959
+ set.push([first, prev]);
2960
+ }
2961
+ prev = null;
2962
+ first = null;
2963
+ }
2964
+ }
2965
+ if (first) {
2966
+ set.push([first, null]);
2967
+ }
2968
+
2969
+ const ranges = [];
2970
+ for (const [min, max] of set) {
2971
+ if (min === max) {
2972
+ ranges.push(min);
2973
+ } else if (!max && min === v[0]) {
2974
+ ranges.push('*');
2975
+ } else if (!max) {
2976
+ ranges.push(`>=${min}`);
2977
+ } else if (min === v[0]) {
2978
+ ranges.push(`<=${max}`);
2979
+ } else {
2980
+ ranges.push(`${min} - ${max}`);
2981
+ }
2982
+ }
2983
+ const simplified = ranges.join(' || ');
2984
+ const original = typeof range.raw === 'string' ? range.raw : String(range);
2985
+ return simplified.length < original.length ? simplified : range
2986
+ };
2987
+
2988
+ const Range$1 = range;
2989
+ const Comparator$1 = comparator;
2990
+ const { ANY } = Comparator$1;
2991
+ const satisfies$1 = satisfies_1;
2992
+ const compare$1 = compare_1;
2993
+
2994
+ // Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
2995
+ // - Every simple range `r1, r2, ...` is a null set, OR
2996
+ // - Every simple range `r1, r2, ...` which is not a null set is a subset of
2997
+ // some `R1, R2, ...`
2998
+ //
2999
+ // Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
3000
+ // - If c is only the ANY comparator
3001
+ // - If C is only the ANY comparator, return true
3002
+ // - Else if in prerelease mode, return false
3003
+ // - else replace c with `[>=0.0.0]`
3004
+ // - If C is only the ANY comparator
3005
+ // - if in prerelease mode, return true
3006
+ // - else replace C with `[>=0.0.0]`
3007
+ // - Let EQ be the set of = comparators in c
3008
+ // - If EQ is more than one, return true (null set)
3009
+ // - Let GT be the highest > or >= comparator in c
3010
+ // - Let LT be the lowest < or <= comparator in c
3011
+ // - If GT and LT, and GT.semver > LT.semver, return true (null set)
3012
+ // - If any C is a = range, and GT or LT are set, return false
3013
+ // - If EQ
3014
+ // - If GT, and EQ does not satisfy GT, return true (null set)
3015
+ // - If LT, and EQ does not satisfy LT, return true (null set)
3016
+ // - If EQ satisfies every C, return true
3017
+ // - Else return false
3018
+ // - If GT
3019
+ // - If GT.semver is lower than any > or >= comp in C, return false
3020
+ // - If GT is >=, and GT.semver does not satisfy every C, return false
3021
+ // - If GT.semver has a prerelease, and not in prerelease mode
3022
+ // - If no C has a prerelease and the GT.semver tuple, return false
3023
+ // - If LT
3024
+ // - If LT.semver is greater than any < or <= comp in C, return false
3025
+ // - If LT is <=, and LT.semver does not satisfy every C, return false
3026
+ // - If GT.semver has a prerelease, and not in prerelease mode
3027
+ // - If no C has a prerelease and the LT.semver tuple, return false
3028
+ // - Else return true
3029
+
3030
+ const subset$1 = (sub, dom, options = {}) => {
3031
+ if (sub === dom) {
3032
+ return true
3033
+ }
3034
+
3035
+ sub = new Range$1(sub, options);
3036
+ dom = new Range$1(dom, options);
3037
+ let sawNonNull = false;
3038
+
3039
+ OUTER: for (const simpleSub of sub.set) {
3040
+ for (const simpleDom of dom.set) {
3041
+ const isSub = simpleSubset(simpleSub, simpleDom, options);
3042
+ sawNonNull = sawNonNull || isSub !== null;
3043
+ if (isSub) {
3044
+ continue OUTER
3045
+ }
3046
+ }
3047
+ // the null set is a subset of everything, but null simple ranges in
3048
+ // a complex range should be ignored. so if we saw a non-null range,
3049
+ // then we know this isn't a subset, but if EVERY simple range was null,
3050
+ // then it is a subset.
3051
+ if (sawNonNull) {
3052
+ return false
3053
+ }
3054
+ }
3055
+ return true
3056
+ };
3057
+
3058
+ const simpleSubset = (sub, dom, options) => {
3059
+ if (sub === dom) {
3060
+ return true
3061
+ }
3062
+
3063
+ if (sub.length === 1 && sub[0].semver === ANY) {
3064
+ if (dom.length === 1 && dom[0].semver === ANY) {
3065
+ return true
3066
+ } else if (options.includePrerelease) {
3067
+ sub = [new Comparator$1('>=0.0.0-0')];
3068
+ } else {
3069
+ sub = [new Comparator$1('>=0.0.0')];
3070
+ }
3071
+ }
3072
+
3073
+ if (dom.length === 1 && dom[0].semver === ANY) {
3074
+ if (options.includePrerelease) {
3075
+ return true
3076
+ } else {
3077
+ dom = [new Comparator$1('>=0.0.0')];
3078
+ }
3079
+ }
3080
+
3081
+ const eqSet = new Set();
3082
+ let gt, lt;
3083
+ for (const c of sub) {
3084
+ if (c.operator === '>' || c.operator === '>=') {
3085
+ gt = higherGT(gt, c, options);
3086
+ } else if (c.operator === '<' || c.operator === '<=') {
3087
+ lt = lowerLT(lt, c, options);
3088
+ } else {
3089
+ eqSet.add(c.semver);
3090
+ }
3091
+ }
3092
+
3093
+ if (eqSet.size > 1) {
3094
+ return null
3095
+ }
3096
+
3097
+ let gtltComp;
3098
+ if (gt && lt) {
3099
+ gtltComp = compare$1(gt.semver, lt.semver, options);
3100
+ if (gtltComp > 0) {
3101
+ return null
3102
+ } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {
3103
+ return null
3104
+ }
3105
+ }
3106
+
3107
+ // will iterate one or zero times
3108
+ for (const eq of eqSet) {
3109
+ if (gt && !satisfies$1(eq, String(gt), options)) {
3110
+ return null
3111
+ }
3112
+
3113
+ if (lt && !satisfies$1(eq, String(lt), options)) {
3114
+ return null
3115
+ }
3116
+
3117
+ for (const c of dom) {
3118
+ if (!satisfies$1(eq, String(c), options)) {
3119
+ return false
3120
+ }
3121
+ }
3122
+
3123
+ return true
3124
+ }
3125
+
3126
+ let higher, lower;
3127
+ let hasDomLT, hasDomGT;
3128
+ // if the subset has a prerelease, we need a comparator in the superset
3129
+ // with the same tuple and a prerelease, or it's not a subset
3130
+ let needDomLTPre = lt &&
3131
+ !options.includePrerelease &&
3132
+ lt.semver.prerelease.length ? lt.semver : false;
3133
+ let needDomGTPre = gt &&
3134
+ !options.includePrerelease &&
3135
+ gt.semver.prerelease.length ? gt.semver : false;
3136
+ // exception: <1.2.3-0 is the same as <1.2.3
3137
+ if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&
3138
+ lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {
3139
+ needDomLTPre = false;
3140
+ }
3141
+
3142
+ for (const c of dom) {
3143
+ hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=';
3144
+ hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=';
3145
+ if (gt) {
3146
+ if (needDomGTPre) {
3147
+ if (c.semver.prerelease && c.semver.prerelease.length &&
3148
+ c.semver.major === needDomGTPre.major &&
3149
+ c.semver.minor === needDomGTPre.minor &&
3150
+ c.semver.patch === needDomGTPre.patch) {
3151
+ needDomGTPre = false;
3152
+ }
3153
+ }
3154
+ if (c.operator === '>' || c.operator === '>=') {
3155
+ higher = higherGT(gt, c, options);
3156
+ if (higher === c && higher !== gt) {
3157
+ return false
3158
+ }
3159
+ } else if (gt.operator === '>=' && !satisfies$1(gt.semver, String(c), options)) {
3160
+ return false
3161
+ }
3162
+ }
3163
+ if (lt) {
3164
+ if (needDomLTPre) {
3165
+ if (c.semver.prerelease && c.semver.prerelease.length &&
3166
+ c.semver.major === needDomLTPre.major &&
3167
+ c.semver.minor === needDomLTPre.minor &&
3168
+ c.semver.patch === needDomLTPre.patch) {
3169
+ needDomLTPre = false;
3170
+ }
3171
+ }
3172
+ if (c.operator === '<' || c.operator === '<=') {
3173
+ lower = lowerLT(lt, c, options);
3174
+ if (lower === c && lower !== lt) {
3175
+ return false
3176
+ }
3177
+ } else if (lt.operator === '<=' && !satisfies$1(lt.semver, String(c), options)) {
3178
+ return false
3179
+ }
3180
+ }
3181
+ if (!c.operator && (lt || gt) && gtltComp !== 0) {
3182
+ return false
3183
+ }
3184
+ }
3185
+
3186
+ // if there was a < or >, and nothing in the dom, then must be false
3187
+ // UNLESS it was limited by another range in the other direction.
3188
+ // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
3189
+ if (gt && hasDomLT && !lt && gtltComp !== 0) {
3190
+ return false
3191
+ }
3192
+
3193
+ if (lt && hasDomGT && !gt && gtltComp !== 0) {
3194
+ return false
3195
+ }
3196
+
3197
+ // we needed a prerelease range in a specific tuple, but didn't get one
3198
+ // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,
3199
+ // because it includes prereleases in the 1.2.3 tuple
3200
+ if (needDomGTPre || needDomLTPre) {
3201
+ return false
3202
+ }
3203
+
3204
+ return true
3205
+ };
3206
+
3207
+ // >=1.2.3 is lower than >1.2.3
3208
+ const higherGT = (a, b, options) => {
3209
+ if (!a) {
3210
+ return b
3211
+ }
3212
+ const comp = compare$1(a.semver, b.semver, options);
3213
+ return comp > 0 ? a
3214
+ : comp < 0 ? b
3215
+ : b.operator === '>' && a.operator === '>=' ? b
3216
+ : a
3217
+ };
3218
+
3219
+ // <=1.2.3 is higher than <1.2.3
3220
+ const lowerLT = (a, b, options) => {
3221
+ if (!a) {
3222
+ return b
3223
+ }
3224
+ const comp = compare$1(a.semver, b.semver, options);
3225
+ return comp < 0 ? a
3226
+ : comp > 0 ? b
3227
+ : b.operator === '<' && a.operator === '<=' ? b
3228
+ : a
3229
+ };
3230
+
3231
+ var subset_1 = subset$1;
3232
+
3233
+ // just pre-load all the stuff that index.js lazily exports
3234
+ const internalRe = re$5.exports;
3235
+ const constants = constants$1;
3236
+ const SemVer = semver$1;
3237
+ const identifiers = identifiers$1;
3238
+ const parse = parse_1;
3239
+ const valid = valid_1;
3240
+ const clean = clean_1;
3241
+ const inc = inc_1;
3242
+ const diff = diff_1;
3243
+ const major = major_1;
3244
+ const minor = minor_1;
3245
+ const patch = patch_1;
3246
+ const prerelease = prerelease_1;
3247
+ const compare = compare_1;
3248
+ const rcompare = rcompare_1;
3249
+ const compareLoose = compareLoose_1;
3250
+ const compareBuild = compareBuild_1;
3251
+ const sort = sort_1;
3252
+ const rsort = rsort_1;
3253
+ const gt = gt_1;
3254
+ const lt = lt_1;
3255
+ const eq = eq_1;
3256
+ const neq = neq_1;
3257
+ const gte = gte_1;
3258
+ const lte = lte_1;
3259
+ const cmp = cmp_1;
3260
+ const coerce = coerce_1;
3261
+ const Comparator = comparator;
3262
+ const Range = range;
3263
+ const satisfies = satisfies_1;
3264
+ const toComparators = toComparators_1;
3265
+ const maxSatisfying = maxSatisfying_1;
3266
+ const minSatisfying = minSatisfying_1;
3267
+ const minVersion = minVersion_1;
3268
+ const validRange = valid$1;
3269
+ const outside = outside_1;
3270
+ const gtr = gtr_1;
3271
+ const ltr = ltr_1;
3272
+ const intersects = intersects_1;
3273
+ const simplifyRange = simplify;
3274
+ const subset = subset_1;
3275
+ var semver = {
3276
+ parse,
3277
+ valid,
3278
+ clean,
3279
+ inc,
3280
+ diff,
3281
+ major,
3282
+ minor,
3283
+ patch,
3284
+ prerelease,
3285
+ compare,
3286
+ rcompare,
3287
+ compareLoose,
3288
+ compareBuild,
3289
+ sort,
3290
+ rsort,
3291
+ gt,
3292
+ lt,
3293
+ eq,
3294
+ neq,
3295
+ gte,
3296
+ lte,
3297
+ cmp,
3298
+ coerce,
3299
+ Comparator,
3300
+ Range,
3301
+ satisfies,
3302
+ toComparators,
3303
+ maxSatisfying,
3304
+ minSatisfying,
3305
+ minVersion,
3306
+ validRange,
3307
+ outside,
3308
+ gtr,
3309
+ ltr,
3310
+ intersects,
3311
+ simplifyRange,
3312
+ subset,
3313
+ SemVer,
3314
+ re: internalRe.re,
3315
+ src: internalRe.src,
3316
+ tokens: internalRe.t,
3317
+ SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
3318
+ compareIdentifiers: identifiers.compareIdentifiers,
3319
+ rcompareIdentifiers: identifiers.rcompareIdentifiers,
3320
+ };
3321
+
3322
+ function checkVersion(threshold, version) {
3323
+ if (!version)
3324
+ return false;
3325
+ const parsedVersion = semver.coerce(version);
3326
+ if (parsedVersion === null)
3327
+ return false;
3328
+ return semver.satisfies(parsedVersion, threshold);
3329
+ }
3330
+
460
3331
  function findArgument(args, name) {
461
3332
  const flagIndex = args.indexOf(`--${name}`);
462
3333
  if (flagIndex === -1)
@@ -488,6 +3359,7 @@ const {
488
3359
  PRISMIC_CLIENT,
489
3360
  PRISMIC_DOM_PACKAGE_NAME,
490
3361
  PRISMIC_REACT_PACKAGE_NAME,
3362
+ PRISMIC_NEXT,
491
3363
  SM_PACKAGE_NAME,
492
3364
  NUXT_PRISMIC,
493
3365
  PRISMIC_VUE,
@@ -496,12 +3368,18 @@ const {
496
3368
  PRISMIC_HELPERS,
497
3369
  PRISMIC_TYPES
498
3370
  } = core.CONSTS;
499
- function depsForFramework(framework) {
3371
+ function nextDeps(version) {
3372
+ if (checkVersion(">=13.0.0", version)) {
3373
+ return PRISMIC_NEXT;
3374
+ }
3375
+ return "";
3376
+ }
3377
+ function depsForFramework(framework, version) {
500
3378
  switch (framework) {
501
3379
  case core.Models.Frameworks.react:
502
3380
  return `${PRISMIC_REACT_PACKAGE_NAME} ${PRISMIC_CLIENT} ${PRISMIC_HELPERS}`;
503
3381
  case core.Models.Frameworks.next:
504
- return `${PRISMIC_REACT_PACKAGE_NAME} ${PRISMIC_CLIENT} ${SLICE_SIMULATOR_REACT} ${PRISMIC_HELPERS}`;
3382
+ return `${PRISMIC_REACT_PACKAGE_NAME} ${nextDeps(version)} ${PRISMIC_CLIENT} ${SLICE_SIMULATOR_REACT} ${PRISMIC_HELPERS}`;
505
3383
  case core.Models.Frameworks.svelte:
506
3384
  return `${PRISMIC_DOM_PACKAGE_NAME} ${PRISMIC_CLIENT}`;
507
3385
  case core.Models.Frameworks.nuxt:
@@ -512,11 +3390,11 @@ function depsForFramework(framework) {
512
3390
  return "";
513
3391
  }
514
3392
  }
515
- async function addAndInstallDeps(framework, useYarn = false) {
3393
+ async function addAndInstallDeps(framework, version, useYarn = false) {
516
3394
  const installDevDependencyCommand = useYarn ? "yarn add -D" : "npm install --save-dev";
517
3395
  const installDependencyCommand = useYarn ? "yarn add" : "npm install --save";
518
3396
  const { stderr } = await execCommand(`${installDevDependencyCommand} ${SM_PACKAGE_NAME} ${PRISMIC_TYPES}`);
519
- const deps = depsForFramework(framework);
3397
+ const deps = depsForFramework(framework, version);
520
3398
  if (deps)
521
3399
  await execCommand(`${installDependencyCommand} ${deps}`);
522
3400
  return stderr;
@@ -526,11 +3404,11 @@ async function installDeps(useYarn = false) {
526
3404
  const { stderr } = await execCommand(installCommand);
527
3405
  return stderr;
528
3406
  }
529
- async function installRequiredDependencies(cwd, framework, skipDependencies) {
3407
+ async function installRequiredDependencies(cwd, framework, skipDependencies, version) {
530
3408
  const yarnLock = NodeUtils__namespace.Files.exists(NodeUtils__namespace.YarnLockPath(cwd));
531
3409
  const spinner = spinner$1("Installing Slice Machine");
532
3410
  spinner.start();
533
- const stderr = await (skipDependencies ? installDeps(yarnLock) : addAndInstallDeps(framework, yarnLock));
3411
+ const stderr = await (skipDependencies ? installDeps(yarnLock) : addAndInstallDeps(framework, version, yarnLock));
534
3412
  const pathToPkg = path__default["default"].join(NodeUtils__namespace.PackagePaths(cwd).value(), SM_PACKAGE_NAME);
535
3413
  const isPackageInstalled = NodeUtils__namespace.Files.exists(pathToPkg);
536
3414
  if (isPackageInstalled || !stderr.length) {
@@ -722,7 +3600,8 @@ async function promptForFramework() {
722
3600
  ]).then((res) => {
723
3601
  return {
724
3602
  value: res.framework,
725
- manuallyAdded: true
3603
+ manuallyAdded: true,
3604
+ version: void 0
726
3605
  };
727
3606
  });
728
3607
  }
@@ -731,25 +3610,26 @@ async function detectFramework(cwd) {
731
3610
  const spinner = spinner$1("Detecting framework to install correct dependencies");
732
3611
  spinner.start();
733
3612
  try {
734
- const maybeFramework = NodeUtils__namespace.Framework.defineFramework({
3613
+ const { framework, version } = NodeUtils__namespace.Framework.defineFrameworkWithVersion({
735
3614
  cwd,
736
3615
  supportedFrameworks: Object.values(core.Models.Frameworks)
737
3616
  });
738
3617
  spinner.stop();
739
- if (!maybeFramework || maybeFramework === core.Models.Frameworks.vanillajs) {
3618
+ if (!framework || framework === core.Models.Frameworks.vanillajs) {
740
3619
  writeError$1("Framework not detected");
741
3620
  return await promptForFramework();
742
3621
  }
743
- const nameToPrint = NodeUtils__namespace.Framework.fancyName(maybeFramework);
744
- if (!NodeUtils__namespace.Framework.isFrameworkSupported(maybeFramework)) {
3622
+ const nameToPrint = NodeUtils__namespace.Framework.fancyName(framework);
3623
+ if (!NodeUtils__namespace.Framework.isFrameworkSupported(framework)) {
745
3624
  writeError$1(`${nameToPrint} is currently not supported`);
746
3625
  console.log(failMessage);
747
3626
  process.exit(1);
748
3627
  }
749
3628
  writeCheck(`${nameToPrint} detected`);
750
3629
  return {
751
- value: maybeFramework,
752
- manuallyAdded: false
3630
+ value: framework,
3631
+ manuallyAdded: false,
3632
+ version
753
3633
  };
754
3634
  } catch (error) {
755
3635
  spinner.fail("package.json not found");
@@ -1199,7 +4079,7 @@ async function init() {
1199
4079
  const sliceLibPath = lib ? await installLib(cwd, lib, branch) : void 0;
1200
4080
  const wasStarter = await sendStarterData(client$1, cwd, pushDocuments);
1201
4081
  await configureProject(client$1, cwd, repository, frameworkResult, sliceLibPath, isTrackingAvailable);
1202
- await installRequiredDependencies(cwd, frameworkResult.value, wasStarter);
4082
+ await installRequiredDependencies(cwd, frameworkResult.value, wasStarter, frameworkResult.version);
1203
4083
  setVersion(cwd);
1204
4084
  displayFinalMessage(cwd, wasStarter, repository, client$1.apisEndpoints.Wroom);
1205
4085
  }