Codebase list node-compare-versions / ce9290c
New upstream version 5.0.1 Yadd 1 year, 8 months ago
18 changed file(s) with 1504 addition(s) and 1192 deletion(s). Raw diff Collapse all Expand all
00 # Changelog
1
2 ## [5.0.1](https://github.com/omichelsen/compare-versions/releases/tag/v5.0.1) - 2022-08-26
3 - Include source file in npm bundle for source maps.
4
5 ## [5.0.0](https://github.com/omichelsen/compare-versions/releases/tag/v5.0.0) - 2022-08-25
6 - BREAKING CHANGE: main export is now named.
7 - Rewrite in TypeScript. Ensure single source of truth for all outputs.
8 - Support ESM and CJS (through UMD).
9 - Dropped Bower support.
10
11 ## [4.1.4](https://github.com/omichelsen/compare-versions/releases/tag/v4.1.4) - 2022-08-23
12 - Fix `satisfies()` CJS export.
13
14 ## [4.1.3](https://github.com/omichelsen/compare-versions/releases/tag/v4.1.3) - 2022-01-11
15 - Export CJS style in ESM for cross compatibility.
116
217 ## [4.1.2](https://github.com/omichelsen/compare-versions/releases/tag/v4.1.2) - 2021-12-09
318 - Do not allow leading comparators in `validate()`.
1818 $ npm install compare-versions
1919 ```
2020
21 Note: Starting from v4 this library includes a ESM version which will automatically be selected by your bundler (webpack, parcel etc). The old CJS version is `index.js` and the new ESM version is `index.mjs`.
21 __Note__: Starting from v5 the main export is now _named_ like so: `import { compareVersions } from 'compare-versions'`.
22
23 __Note__: Starting from v4 this library includes a ESM version which will automatically be selected by your bundler (webpack, parcel etc). The CJS/UMD version is `lib/umd/index.js` and the new ESM version is `lib/esm/index.js`.
2224
2325 ## Usage
2426
2527 Will return `1` if first version is greater, `0` if versions are equal, and `-1` if the second version is greater:
2628
2729 ```js
28 import compareVersions from 'compare-versions';
30 import { compareVersions } from 'compare-versions';
2931
3032 compareVersions('11.1.1', '10.0.0'); // 1
3133 compareVersions('10.0.0', '10.0.0'); // 0
8486
8587 ### Validate version numbers
8688
87 Applies the same ruleset used comparing version numbers and returns a boolean:
89 Applies the same rules used comparing version numbers and returns a boolean:
8890
8991 ```js
9092 import { validate } from 'compare-versions';
9698
9799 ### Browser
98100
99 If included directly in the browser, `compareVersions()` is available on the global window:
101 If included directly in the browser, the functions above are available on the global window under the `compareVersions` object:
100102
101103 ```html
102 <script src=https://unpkg.com/compare-versions></script>
104 <script src=https://unpkg.com/compare-versions/lib/umd/index.js></script>
103105 <script>
104 window.compareVersions('11.0.0', '10.0.0');
105 window.compareVersions.compare('11.0.0', '10.0.0', '>');
106 window.compareVersions.validate('11.0.0');
107 window.compareVersions.satisfies('1.2.0', '^1.0.0');
106 const { compareVersions, compare, satisfies, validate } = window.compareVersions
107 console.log(compareVersions('11.0.0', '10.0.0'))
108 console.log(compare('11.0.0', '10.0.0', '>'))
109 console.log(satisfies('1.2.0', '^1.0.0'))
110 console.log(validate('11.0.0'))
108111 </script>
109112 ```
+0
-11
bower.json less more
0 {
1 "name": "compare-versions",
2 "version": "4.1.2",
3 "description": "Compare semver version strings to find greater, equal or lesser.",
4 "main": "index.js",
5 "authors": ["Ole Bjørn Michelsen <ole@michelsen.dk>"],
6 "moduleType": ["amd", "globals", "node"],
7 "keywords": ["semver", "version", "compare", "browser", "node"],
8 "license": "MIT",
9 "ignore": ["**/.*", "node_modules", "bower_components", "test", "tests"]
10 }
+0
-72
index.d.ts less more
0 declare namespace compareVersions {
1 /**
2 * Allowed arithmetic operators
3 */
4 type CompareOperator = '>' | '>=' | '=' | '<' | '<=';
5 }
6
7 declare const compareVersions: {
8 /**
9 * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.
10 * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.
11 * @param firstVersion - First version to compare
12 * @param secondVersion - Second version to compare
13 * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).
14 */
15 (firstVersion: string, secondVersion: string): 1 | 0 | -1;
16
17 /**
18 * Compare [semver](https://semver.org/) version strings using the specified operator.
19 *
20 * @param firstVersion First version to compare
21 * @param secondVersion Second version to compare
22 * @param operator Allowed arithmetic operator to use
23 * @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.
24 *
25 * @example
26 * ```
27 * compareVersions.compare('10.1.8', '10.0.4', '>'); // return true
28 * compareVersions.compare('10.0.1', '10.0.1', '='); // return true
29 * compareVersions.compare('10.1.1', '10.2.2', '<'); // return true
30 * compareVersions.compare('10.1.1', '10.2.2', '<='); // return true
31 * compareVersions.compare('10.1.1', '10.2.2', '>='); // return false
32 * ```
33 */
34 compare(
35 firstVersion: string,
36 secondVersion: string,
37 operator: compareVersions.CompareOperator
38 ): boolean;
39
40 /**
41 * Validate [semver](https://semver.org/) version strings.
42 *
43 * @param version Version number to validate
44 * @returns `true` if the version number is a valid semver version number, `false` otherwise.
45 *
46 * @example
47 * ```
48 * compareVersions.validate('1.0.0-rc.1'); // return true
49 * compareVersions.validate('1.0-rc.1'); // return false
50 * compareVersions.validate('foo'); // return false
51 * ```
52 */
53 validate(version: string): boolean;
54
55 /**
56 * Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.
57 *
58 * @param version Version number to match
59 * @param range Range pattern for version
60 * @returns `true` if the version number is within the range, `false` otherwise.
61 *
62 * @example
63 * ```
64 * satisfies('1.1.0', '^1.0.0'); // return true
65 * satisfies('1.1.0', '~1.0.0'); // return false
66 * ```
67 */
68 satisfies(version: string, range: string): boolean;
69 };
70
71 export = compareVersions;
+0
-165
index.js less more
0 /* global define */
1 (function (root, factory) {
2 /* istanbul ignore next */
3 if (typeof define === 'function' && define.amd) {
4 define([], factory);
5 } else if (typeof exports === 'object') {
6 module.exports = factory();
7 } else {
8 root.compareVersions = factory();
9 }
10 })(this, function () {
11 var semver =
12 /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i;
13
14 function indexOrEnd(str, q) {
15 return str.indexOf(q) === -1 ? str.length : str.indexOf(q);
16 }
17
18 function split(v) {
19 var c = v.replace(/^v/, '').replace(/\+.*$/, '');
20 var patchIndex = indexOrEnd(c, '-');
21 var arr = c.substring(0, patchIndex).split('.');
22 arr.push(c.substring(patchIndex + 1));
23 return arr;
24 }
25
26 function tryParse(v) {
27 var n = parseInt(v, 10);
28 return isNaN(n) ? v : n;
29 }
30
31 function validateAndParse(v) {
32 if (typeof v !== 'string') {
33 throw new TypeError('Invalid argument expected string');
34 }
35 var match = v.match(semver);
36 if (!match) {
37 throw new Error(
38 "Invalid argument not valid semver ('" + v + "' received)"
39 );
40 }
41 match.shift();
42 return match;
43 }
44
45 function forceType(a, b) {
46 return typeof a !== typeof b ? [String(a), String(b)] : [a, b];
47 }
48
49 function compareStrings(a, b) {
50 var [ap, bp] = forceType(tryParse(a), tryParse(b));
51 if (ap > bp) return 1;
52 if (ap < bp) return -1;
53 return 0;
54 }
55
56 function compareSegments(a, b) {
57 for (var i = 0; i < Math.max(a.length, b.length); i++) {
58 var r = compareStrings(a[i] || 0, b[i] || 0);
59 if (r !== 0) return r;
60 }
61 return 0;
62 }
63
64 function compareVersions(v1, v2) {
65 [v1, v2].forEach(validateAndParse);
66
67 var s1 = split(v1);
68 var s2 = split(v2);
69
70 for (var i = 0; i < Math.max(s1.length - 1, s2.length - 1); i++) {
71 var n1 = parseInt(s1[i] || 0, 10);
72 var n2 = parseInt(s2[i] || 0, 10);
73
74 if (n1 > n2) return 1;
75 if (n2 > n1) return -1;
76 }
77
78 var sp1 = s1[s1.length - 1];
79 var sp2 = s2[s2.length - 1];
80
81 if (sp1 && sp2) {
82 var p1 = sp1.split('.').map(tryParse);
83 var p2 = sp2.split('.').map(tryParse);
84
85 for (i = 0; i < Math.max(p1.length, p2.length); i++) {
86 if (
87 p1[i] === undefined ||
88 (typeof p2[i] === 'string' && typeof p1[i] === 'number')
89 )
90 return -1;
91 if (
92 p2[i] === undefined ||
93 (typeof p1[i] === 'string' && typeof p2[i] === 'number')
94 )
95 return 1;
96
97 if (p1[i] > p2[i]) return 1;
98 if (p2[i] > p1[i]) return -1;
99 }
100 } else if (sp1 || sp2) {
101 return sp1 ? -1 : 1;
102 }
103
104 return 0;
105 }
106
107 var allowedOperators = ['>', '>=', '=', '<', '<='];
108
109 var operatorResMap = {
110 '>': [1],
111 '>=': [0, 1],
112 '=': [0],
113 '<=': [-1, 0],
114 '<': [-1],
115 };
116
117 function validateOperator(op) {
118 if (typeof op !== 'string') {
119 throw new TypeError(
120 'Invalid operator type, expected string but got ' + typeof op
121 );
122 }
123 if (allowedOperators.indexOf(op) === -1) {
124 throw new TypeError(
125 'Invalid operator, expected one of ' + allowedOperators.join('|')
126 );
127 }
128 }
129
130 compareVersions.validate = function (version) {
131 return typeof version === 'string' && semver.test(version);
132 };
133
134 compareVersions.compare = function (v1, v2, operator) {
135 // Validate operator
136 validateOperator(operator);
137
138 // since result of compareVersions can only be -1 or 0 or 1
139 // a simple map can be used to replace switch
140 var res = compareVersions(v1, v2);
141 return operatorResMap[operator].indexOf(res) > -1;
142 };
143
144 compareVersions.satisfies = function (v, r) {
145 // if no range operator then "="
146 var match = r.match(/^([<>=~^]+)/);
147 var op = match ? match[1] : '=';
148
149 // if gt/lt/eq then operator compare
150 if (op !== '^' && op !== '~') return compareVersions.compare(v, r, op);
151
152 // else range of either "~" or "^" is assumed
153 var [v1, v2, v3] = validateAndParse(v);
154 var [m1, m2, m3] = validateAndParse(r);
155 if (compareStrings(v1, m1) !== 0) return false;
156 if (op === '^') {
157 return compareSegments([v2, v3], [m2, m3]) >= 0;
158 }
159 if (compareStrings(v2, m2) !== 0) return false;
160 return compareStrings(v3, m3) >= 0;
161 };
162
163 return compareVersions;
164 });
+0
-119
index.mjs less more
0 export default function compareVersions(v1, v2) {
1 // validate input and split into segments
2 const n1 = validateAndParse(v1);
3 const n2 = validateAndParse(v2);
4
5 // pop off the patch
6 const p1 = n1.pop();
7 const p2 = n2.pop();
8
9 // validate numbers
10 const r = compareSegments(n1, n2);
11 if (r !== 0) return r;
12
13 // validate pre-release
14 if (p1 && p2) {
15 return compareSegments(p1.split('.'), p2.split('.'));
16 } else if (p1 || p2) {
17 return p1 ? -1 : 1;
18 }
19
20 return 0;
21 }
22
23 export const validate = (v) =>
24 typeof v === 'string' && /^[v\d]/.test(v) && semver.test(v);
25
26 export const compare = (v1, v2, operator) => {
27 // validate input operator
28 assertValidOperator(operator);
29
30 // since result of compareVersions can only be -1 or 0 or 1
31 // a simple map can be used to replace switch
32 const res = compareVersions(v1, v2);
33
34 return operatorResMap[operator].includes(res);
35 };
36
37 export const satisfies = (v, r) => {
38 // if no range operator then "="
39 const m = r.match(/^([<>=~^]+)/);
40 const op = m ? m[1] : '=';
41
42 // if gt/lt/eq then operator compare
43 if (op !== '^' && op !== '~') return compare(v, r, op);
44
45 // else range of either "~" or "^" is assumed
46 const [v1, v2, v3] = validateAndParse(v);
47 const [r1, r2, r3] = validateAndParse(r);
48 if (compareStrings(v1, r1) !== 0) return false;
49 if (op === '^') {
50 return compareSegments([v2, v3], [r2, r3]) >= 0;
51 }
52 if (compareStrings(v2, r2) !== 0) return false;
53 return compareStrings(v3, r3) >= 0;
54 };
55
56 const semver =
57 /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i;
58
59 const validateAndParse = (v) => {
60 if (typeof v !== 'string') {
61 throw new TypeError('Invalid argument expected string');
62 }
63 const match = v.match(semver);
64 if (!match) {
65 throw new Error(`Invalid argument not valid semver ('${v}' received)`);
66 }
67 match.shift();
68 return match;
69 };
70
71 const isWildcard = (s) => s === '*' || s === 'x' || s === 'X';
72
73 const tryParse = (v) => {
74 const n = parseInt(v, 10);
75 return isNaN(n) ? v : n;
76 };
77
78 const forceType = (a, b) =>
79 typeof a !== typeof b ? [String(a), String(b)] : [a, b];
80
81 const compareStrings = (a, b) => {
82 if (isWildcard(a) || isWildcard(b)) return 0;
83 const [ap, bp] = forceType(tryParse(a), tryParse(b));
84 if (ap > bp) return 1;
85 if (ap < bp) return -1;
86 return 0;
87 };
88
89 const compareSegments = (a, b) => {
90 for (let i = 0; i < Math.max(a.length, b.length); i++) {
91 const r = compareStrings(a[i] || 0, b[i] || 0);
92 if (r !== 0) return r;
93 }
94 return 0;
95 };
96
97 const operatorResMap = {
98 '>': [1],
99 '>=': [0, 1],
100 '=': [0],
101 '<=': [-1, 0],
102 '<': [-1],
103 };
104
105 const allowedOperators = Object.keys(operatorResMap);
106
107 const assertValidOperator = (op) => {
108 if (typeof op !== 'string') {
109 throw new TypeError(
110 `Invalid operator type, expected string but got ${typeof op}`
111 );
112 }
113 if (allowedOperators.indexOf(op) === -1) {
114 throw new Error(
115 `Invalid operator, expected one of ${allowedOperators.join('|')}`
116 );
117 }
118 };
00 {
11 "name": "compare-versions",
2 "version": "4.1.2",
2 "version": "5.0.0",
33 "lockfileVersion": 2,
44 "requires": true,
55 "packages": {
66 "": {
7 "version": "4.1.2",
7 "name": "compare-versions",
8 "version": "5.0.0",
89 "license": "MIT",
910 "devDependencies": {
11 "@types/mocha": "^9.1.0",
1012 "c8": "^7.10.0",
11 "mocha": "^9.0.0"
13 "mocha": "^10.0.0",
14 "rollup": "^2.78.1",
15 "ts-node": "^10.7.0",
16 "typescript": "^4.6.3"
1217 }
1318 },
1419 "node_modules/@bcoe/v8-coverage": {
1722 "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
1823 "dev": true
1924 },
25 "node_modules/@cspotcode/source-map-support": {
26 "version": "0.8.1",
27 "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
28 "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
29 "dev": true,
30 "dependencies": {
31 "@jridgewell/trace-mapping": "0.3.9"
32 },
33 "engines": {
34 "node": ">=12"
35 }
36 },
2037 "node_modules/@istanbuljs/schema": {
2138 "version": "0.1.3",
2239 "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
2643 "node": ">=8"
2744 }
2845 },
46 "node_modules/@jridgewell/resolve-uri": {
47 "version": "3.1.0",
48 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
49 "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
50 "dev": true,
51 "engines": {
52 "node": ">=6.0.0"
53 }
54 },
55 "node_modules/@jridgewell/sourcemap-codec": {
56 "version": "1.4.14",
57 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
58 "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
59 "dev": true
60 },
61 "node_modules/@jridgewell/trace-mapping": {
62 "version": "0.3.9",
63 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
64 "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
65 "dev": true,
66 "dependencies": {
67 "@jridgewell/resolve-uri": "^3.0.3",
68 "@jridgewell/sourcemap-codec": "^1.4.10"
69 }
70 },
71 "node_modules/@tsconfig/node10": {
72 "version": "1.0.9",
73 "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
74 "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
75 "dev": true
76 },
77 "node_modules/@tsconfig/node12": {
78 "version": "1.0.11",
79 "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
80 "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
81 "dev": true
82 },
83 "node_modules/@tsconfig/node14": {
84 "version": "1.0.3",
85 "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
86 "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
87 "dev": true
88 },
89 "node_modules/@tsconfig/node16": {
90 "version": "1.0.3",
91 "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
92 "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
93 "dev": true
94 },
2995 "node_modules/@types/istanbul-lib-coverage": {
30 "version": "2.0.3",
31 "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
32 "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
33 "dev": true
96 "version": "2.0.4",
97 "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
98 "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
99 "dev": true
100 },
101 "node_modules/@types/mocha": {
102 "version": "9.1.1",
103 "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
104 "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
105 "dev": true
106 },
107 "node_modules/@types/node": {
108 "version": "18.7.12",
109 "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.12.tgz",
110 "integrity": "sha512-caqFX7GwvZ4KLnhpI9CfiMkgHKp6kvFAIgpkha0cjO7bAQvB6dWe+q3fTHmm7fQvv59pd4tPj77nriq2M6U2dw==",
111 "dev": true,
112 "peer": true
34113 },
35114 "node_modules/@ungap/promise-all-settled": {
36115 "version": "1.1.2",
38117 "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
39118 "dev": true
40119 },
120 "node_modules/acorn": {
121 "version": "8.8.0",
122 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
123 "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
124 "dev": true,
125 "bin": {
126 "acorn": "bin/acorn"
127 },
128 "engines": {
129 "node": ">=0.4.0"
130 }
131 },
132 "node_modules/acorn-walk": {
133 "version": "8.2.0",
134 "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
135 "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
136 "dev": true,
137 "engines": {
138 "node": ">=0.4.0"
139 }
140 },
41141 "node_modules/ansi-colors": {
42142 "version": "4.1.1",
43143 "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
84184 "node": ">= 8"
85185 }
86186 },
187 "node_modules/arg": {
188 "version": "4.1.3",
189 "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
190 "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
191 "dev": true
192 },
87193 "node_modules/argparse": {
88194 "version": "2.0.1",
89195 "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
106212 }
107213 },
108214 "node_modules/brace-expansion": {
109 "version": "1.1.11",
110 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
111 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
112 "dev": true,
113 "dependencies": {
114 "balanced-match": "^1.0.0",
115 "concat-map": "0.0.1"
215 "version": "2.0.1",
216 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
217 "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
218 "dev": true,
219 "dependencies": {
220 "balanced-match": "^1.0.0"
116221 }
117222 },
118223 "node_modules/braces": {
134239 "dev": true
135240 },
136241 "node_modules/c8": {
137 "version": "7.10.0",
138 "resolved": "https://registry.npmjs.org/c8/-/c8-7.10.0.tgz",
139 "integrity": "sha512-OAwfC5+emvA6R7pkYFVBTOtI5ruf9DahffGmIqUc9l6wEh0h7iAFP6dt/V9Ioqlr2zW5avX9U9/w1I4alTRHkA==",
242 "version": "7.12.0",
243 "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz",
244 "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==",
140245 "dev": true,
141246 "dependencies": {
142247 "@bcoe/v8-coverage": "^0.2.3",
143 "@istanbuljs/schema": "^0.1.2",
248 "@istanbuljs/schema": "^0.1.3",
144249 "find-up": "^5.0.0",
145250 "foreground-child": "^2.0.0",
146 "istanbul-lib-coverage": "^3.0.1",
251 "istanbul-lib-coverage": "^3.2.0",
147252 "istanbul-lib-report": "^3.0.0",
148 "istanbul-reports": "^3.0.2",
149 "rimraf": "^3.0.0",
253 "istanbul-reports": "^3.1.4",
254 "rimraf": "^3.0.2",
150255 "test-exclude": "^6.0.0",
151 "v8-to-istanbul": "^8.0.0",
256 "v8-to-istanbul": "^9.0.0",
152257 "yargs": "^16.2.0",
153 "yargs-parser": "^20.2.7"
258 "yargs-parser": "^20.2.9"
154259 },
155260 "bin": {
156261 "c8": "bin/c8.js"
159264 "node": ">=10.12.0"
160265 }
161266 },
162 "node_modules/c8/node_modules/yargs-parser": {
163 "version": "20.2.9",
164 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
165 "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
267 "node_modules/camelcase": {
268 "version": "6.3.0",
269 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
270 "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
166271 "dev": true,
167272 "engines": {
168273 "node": ">=10"
274 },
275 "funding": {
276 "url": "https://github.com/sponsors/sindresorhus"
169277 }
170278 },
171279 "node_modules/chalk": {
184292 "url": "https://github.com/chalk/chalk?sponsor=1"
185293 }
186294 },
187 "node_modules/chalk/node_modules/supports-color": {
188 "version": "7.2.0",
189 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
190 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
191 "dev": true,
192 "dependencies": {
193 "has-flag": "^4.0.0"
194 },
195 "engines": {
196 "node": ">=8"
197 }
198 },
199295 "node_modules/chokidar": {
200 "version": "3.5.2",
201 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
202 "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
203 "dev": true,
296 "version": "3.5.3",
297 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
298 "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
299 "dev": true,
300 "funding": [
301 {
302 "type": "individual",
303 "url": "https://paulmillr.com/funding/"
304 }
305 ],
204306 "dependencies": {
205307 "anymatch": "~3.1.2",
206308 "braces": "~3.0.2",
249351 "node_modules/concat-map": {
250352 "version": "0.0.1",
251353 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
252 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
354 "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
253355 "dev": true
254356 },
255357 "node_modules/convert-source-map": {
261363 "safe-buffer": "~5.1.1"
262364 }
263365 },
366 "node_modules/convert-source-map/node_modules/safe-buffer": {
367 "version": "5.1.2",
368 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
369 "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
370 "dev": true
371 },
372 "node_modules/create-require": {
373 "version": "1.1.1",
374 "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
375 "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
376 "dev": true
377 },
264378 "node_modules/cross-spawn": {
265379 "version": "7.0.3",
266380 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
276390 }
277391 },
278392 "node_modules/debug": {
279 "version": "4.3.2",
280 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
281 "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
393 "version": "4.3.4",
394 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
395 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
282396 "dev": true,
283397 "dependencies": {
284398 "ms": "2.1.2"
298412 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
299413 "dev": true
300414 },
415 "node_modules/decamelize": {
416 "version": "4.0.0",
417 "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
418 "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
419 "dev": true,
420 "engines": {
421 "node": ">=10"
422 },
423 "funding": {
424 "url": "https://github.com/sponsors/sindresorhus"
425 }
426 },
301427 "node_modules/diff": {
302428 "version": "5.0.0",
303429 "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
387513 "node_modules/fs.realpath": {
388514 "version": "1.0.0",
389515 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
390 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
516 "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
391517 "dev": true
392518 },
393519 "node_modules/fsevents": {
414540 }
415541 },
416542 "node_modules/glob": {
417 "version": "7.1.7",
418 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
419 "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
543 "version": "7.2.0",
544 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
545 "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
420546 "dev": true,
421547 "dependencies": {
422548 "fs.realpath": "^1.0.0",
445571 "node": ">= 6"
446572 }
447573 },
448 "node_modules/growl": {
449 "version": "1.10.5",
450 "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
451 "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
452 "dev": true,
453 "engines": {
454 "node": ">=4.x"
574 "node_modules/glob/node_modules/brace-expansion": {
575 "version": "1.1.11",
576 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
577 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
578 "dev": true,
579 "dependencies": {
580 "balanced-match": "^1.0.0",
581 "concat-map": "0.0.1"
582 }
583 },
584 "node_modules/glob/node_modules/minimatch": {
585 "version": "3.1.2",
586 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
587 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
588 "dev": true,
589 "dependencies": {
590 "brace-expansion": "^1.1.7"
591 },
592 "engines": {
593 "node": "*"
455594 }
456595 },
457596 "node_modules/has-flag": {
481620 "node_modules/inflight": {
482621 "version": "1.0.6",
483622 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
484 "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
623 "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
485624 "dev": true,
486625 "dependencies": {
487626 "once": "^1.3.0",
509648 "node_modules/is-extglob": {
510649 "version": "2.1.1",
511650 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
512 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
651 "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
513652 "dev": true,
514653 "engines": {
515654 "node": ">=0.10.0"
569708 "node_modules/isexe": {
570709 "version": "2.0.0",
571710 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
572 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
711 "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
573712 "dev": true
574713 },
575714 "node_modules/istanbul-lib-coverage": {
595734 "node": ">=8"
596735 }
597736 },
598 "node_modules/istanbul-lib-report/node_modules/supports-color": {
599 "version": "7.2.0",
600 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
601 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
602 "dev": true,
603 "dependencies": {
604 "has-flag": "^4.0.0"
605 },
606 "engines": {
607 "node": ">=8"
608 }
609 },
610737 "node_modules/istanbul-reports": {
611 "version": "3.0.5",
612 "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz",
613 "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==",
738 "version": "3.1.5",
739 "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
740 "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
614741 "dev": true,
615742 "dependencies": {
616743 "html-escaper": "^2.0.0",
678805 "url": "https://github.com/sponsors/sindresorhus"
679806 }
680807 },
808 "node_modules/make-error": {
809 "version": "1.3.6",
810 "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
811 "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
812 "dev": true
813 },
681814 "node_modules/minimatch": {
682 "version": "3.0.4",
683 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
684 "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
685 "dev": true,
686 "dependencies": {
687 "brace-expansion": "^1.1.7"
688 },
689 "engines": {
690 "node": "*"
815 "version": "5.0.1",
816 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
817 "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
818 "dev": true,
819 "dependencies": {
820 "brace-expansion": "^2.0.1"
821 },
822 "engines": {
823 "node": ">=10"
691824 }
692825 },
693826 "node_modules/mocha": {
694 "version": "9.1.3",
695 "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
696 "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
827 "version": "10.0.0",
828 "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
829 "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
697830 "dev": true,
698831 "dependencies": {
699832 "@ungap/promise-all-settled": "1.1.2",
700833 "ansi-colors": "4.1.1",
701834 "browser-stdout": "1.3.1",
702 "chokidar": "3.5.2",
703 "debug": "4.3.2",
835 "chokidar": "3.5.3",
836 "debug": "4.3.4",
704837 "diff": "5.0.0",
705838 "escape-string-regexp": "4.0.0",
706839 "find-up": "5.0.0",
707 "glob": "7.1.7",
708 "growl": "1.10.5",
840 "glob": "7.2.0",
709841 "he": "1.2.0",
710842 "js-yaml": "4.1.0",
711843 "log-symbols": "4.1.0",
712 "minimatch": "3.0.4",
844 "minimatch": "5.0.1",
713845 "ms": "2.1.3",
714 "nanoid": "3.1.25",
846 "nanoid": "3.3.3",
715847 "serialize-javascript": "6.0.0",
716848 "strip-json-comments": "3.1.1",
717849 "supports-color": "8.1.1",
718 "which": "2.0.2",
719 "workerpool": "6.1.5",
850 "workerpool": "6.2.1",
720851 "yargs": "16.2.0",
721852 "yargs-parser": "20.2.4",
722853 "yargs-unparser": "2.0.0"
723854 },
724855 "bin": {
725856 "_mocha": "bin/_mocha",
726 "mocha": "bin/mocha"
727 },
728 "engines": {
729 "node": ">= 12.0.0"
857 "mocha": "bin/mocha.js"
858 },
859 "engines": {
860 "node": ">= 14.0.0"
730861 },
731862 "funding": {
732863 "type": "opencollective",
733864 "url": "https://opencollective.com/mochajs"
865 }
866 },
867 "node_modules/mocha/node_modules/supports-color": {
868 "version": "8.1.1",
869 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
870 "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
871 "dev": true,
872 "dependencies": {
873 "has-flag": "^4.0.0"
874 },
875 "engines": {
876 "node": ">=10"
877 },
878 "funding": {
879 "url": "https://github.com/chalk/supports-color?sponsor=1"
880 }
881 },
882 "node_modules/mocha/node_modules/yargs-parser": {
883 "version": "20.2.4",
884 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
885 "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
886 "dev": true,
887 "engines": {
888 "node": ">=10"
734889 }
735890 },
736891 "node_modules/ms": {
740895 "dev": true
741896 },
742897 "node_modules/nanoid": {
743 "version": "3.1.25",
744 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
745 "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
898 "version": "3.3.3",
899 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
900 "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
746901 "dev": true,
747902 "bin": {
748903 "nanoid": "bin/nanoid.cjs"
763918 "node_modules/once": {
764919 "version": "1.4.0",
765920 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
766 "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
921 "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
767922 "dev": true,
768923 "dependencies": {
769924 "wrappy": "1"
811966 "node_modules/path-is-absolute": {
812967 "version": "1.0.1",
813968 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
814 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
969 "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
815970 "dev": true,
816971 "engines": {
817972 "node": ">=0.10.0"
827982 }
828983 },
829984 "node_modules/picomatch": {
830 "version": "2.3.0",
831 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
832 "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
985 "version": "2.3.1",
986 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
987 "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
833988 "dev": true,
834989 "engines": {
835990 "node": ">=8.6"
8621017 "node_modules/require-directory": {
8631018 "version": "2.1.1",
8641019 "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
865 "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
1020 "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
8661021 "dev": true,
8671022 "engines": {
8681023 "node": ">=0.10.0"
8831038 "url": "https://github.com/sponsors/isaacs"
8841039 }
8851040 },
1041 "node_modules/rollup": {
1042 "version": "2.78.1",
1043 "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
1044 "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
1045 "dev": true,
1046 "bin": {
1047 "rollup": "dist/bin/rollup"
1048 },
1049 "engines": {
1050 "node": ">=10.0.0"
1051 },
1052 "optionalDependencies": {
1053 "fsevents": "~2.3.2"
1054 }
1055 },
8861056 "node_modules/safe-buffer": {
887 "version": "5.1.2",
888 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
889 "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
890 "dev": true
1057 "version": "5.2.1",
1058 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1059 "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1060 "dev": true,
1061 "funding": [
1062 {
1063 "type": "github",
1064 "url": "https://github.com/sponsors/feross"
1065 },
1066 {
1067 "type": "patreon",
1068 "url": "https://www.patreon.com/feross"
1069 },
1070 {
1071 "type": "consulting",
1072 "url": "https://feross.org/support"
1073 }
1074 ]
8911075 },
8921076 "node_modules/semver": {
8931077 "version": "6.3.0",
9291113 }
9301114 },
9311115 "node_modules/signal-exit": {
932 "version": "3.0.5",
933 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
934 "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
1116 "version": "3.0.7",
1117 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1118 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
9351119 "dev": true
9361120 },
9371121 "node_modules/string-width": {
9731157 }
9741158 },
9751159 "node_modules/supports-color": {
976 "version": "8.1.1",
977 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
978 "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
1160 "version": "7.2.0",
1161 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1162 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
9791163 "dev": true,
9801164 "dependencies": {
9811165 "has-flag": "^4.0.0"
9821166 },
9831167 "engines": {
984 "node": ">=10"
985 },
986 "funding": {
987 "url": "https://github.com/chalk/supports-color?sponsor=1"
1168 "node": ">=8"
9881169 }
9891170 },
9901171 "node_modules/test-exclude": {
10011182 "node": ">=8"
10021183 }
10031184 },
1185 "node_modules/test-exclude/node_modules/brace-expansion": {
1186 "version": "1.1.11",
1187 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1188 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1189 "dev": true,
1190 "dependencies": {
1191 "balanced-match": "^1.0.0",
1192 "concat-map": "0.0.1"
1193 }
1194 },
1195 "node_modules/test-exclude/node_modules/minimatch": {
1196 "version": "3.1.2",
1197 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1198 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1199 "dev": true,
1200 "dependencies": {
1201 "brace-expansion": "^1.1.7"
1202 },
1203 "engines": {
1204 "node": "*"
1205 }
1206 },
10041207 "node_modules/to-regex-range": {
10051208 "version": "5.0.1",
10061209 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
10131216 "node": ">=8.0"
10141217 }
10151218 },
1219 "node_modules/ts-node": {
1220 "version": "10.9.1",
1221 "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
1222 "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
1223 "dev": true,
1224 "dependencies": {
1225 "@cspotcode/source-map-support": "^0.8.0",
1226 "@tsconfig/node10": "^1.0.7",
1227 "@tsconfig/node12": "^1.0.7",
1228 "@tsconfig/node14": "^1.0.0",
1229 "@tsconfig/node16": "^1.0.2",
1230 "acorn": "^8.4.1",
1231 "acorn-walk": "^8.1.1",
1232 "arg": "^4.1.0",
1233 "create-require": "^1.1.0",
1234 "diff": "^4.0.1",
1235 "make-error": "^1.1.1",
1236 "v8-compile-cache-lib": "^3.0.1",
1237 "yn": "3.1.1"
1238 },
1239 "bin": {
1240 "ts-node": "dist/bin.js",
1241 "ts-node-cwd": "dist/bin-cwd.js",
1242 "ts-node-esm": "dist/bin-esm.js",
1243 "ts-node-script": "dist/bin-script.js",
1244 "ts-node-transpile-only": "dist/bin-transpile.js",
1245 "ts-script": "dist/bin-script-deprecated.js"
1246 },
1247 "peerDependencies": {
1248 "@swc/core": ">=1.2.50",
1249 "@swc/wasm": ">=1.2.50",
1250 "@types/node": "*",
1251 "typescript": ">=2.7"
1252 },
1253 "peerDependenciesMeta": {
1254 "@swc/core": {
1255 "optional": true
1256 },
1257 "@swc/wasm": {
1258 "optional": true
1259 }
1260 }
1261 },
1262 "node_modules/ts-node/node_modules/diff": {
1263 "version": "4.0.2",
1264 "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
1265 "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
1266 "dev": true,
1267 "engines": {
1268 "node": ">=0.3.1"
1269 }
1270 },
1271 "node_modules/typescript": {
1272 "version": "4.7.4",
1273 "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
1274 "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
1275 "dev": true,
1276 "bin": {
1277 "tsc": "bin/tsc",
1278 "tsserver": "bin/tsserver"
1279 },
1280 "engines": {
1281 "node": ">=4.2.0"
1282 }
1283 },
1284 "node_modules/v8-compile-cache-lib": {
1285 "version": "3.0.1",
1286 "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
1287 "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
1288 "dev": true
1289 },
10161290 "node_modules/v8-to-istanbul": {
1017 "version": "8.1.0",
1018 "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
1019 "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==",
1020 "dev": true,
1021 "dependencies": {
1291 "version": "9.0.1",
1292 "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz",
1293 "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==",
1294 "dev": true,
1295 "dependencies": {
1296 "@jridgewell/trace-mapping": "^0.3.12",
10221297 "@types/istanbul-lib-coverage": "^2.0.1",
1023 "convert-source-map": "^1.6.0",
1024 "source-map": "^0.7.3"
1298 "convert-source-map": "^1.6.0"
10251299 },
10261300 "engines": {
10271301 "node": ">=10.12.0"
10281302 }
10291303 },
1030 "node_modules/v8-to-istanbul/node_modules/source-map": {
1031 "version": "0.7.3",
1032 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
1033 "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
1034 "dev": true,
1035 "engines": {
1036 "node": ">= 8"
1304 "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": {
1305 "version": "0.3.15",
1306 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
1307 "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
1308 "dev": true,
1309 "dependencies": {
1310 "@jridgewell/resolve-uri": "^3.0.3",
1311 "@jridgewell/sourcemap-codec": "^1.4.10"
10371312 }
10381313 },
10391314 "node_modules/which": {
10521327 }
10531328 },
10541329 "node_modules/workerpool": {
1055 "version": "6.1.5",
1056 "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
1057 "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
1330 "version": "6.2.1",
1331 "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
1332 "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
10581333 "dev": true
10591334 },
10601335 "node_modules/wrap-ansi": {
10771352 "node_modules/wrappy": {
10781353 "version": "1.0.2",
10791354 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1080 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1355 "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
10811356 "dev": true
10821357 },
10831358 "node_modules/y18n": {
11081383 }
11091384 },
11101385 "node_modules/yargs-parser": {
1111 "version": "20.2.4",
1112 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
1113 "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
1386 "version": "20.2.9",
1387 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
1388 "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
11141389 "dev": true,
11151390 "engines": {
11161391 "node": ">=10"
11311406 "node": ">=10"
11321407 }
11331408 },
1134 "node_modules/yargs-unparser/node_modules/camelcase": {
1135 "version": "6.2.0",
1136 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
1137 "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
1138 "dev": true,
1139 "engines": {
1140 "node": ">=10"
1141 },
1142 "funding": {
1143 "url": "https://github.com/sponsors/sindresorhus"
1144 }
1145 },
1146 "node_modules/yargs-unparser/node_modules/decamelize": {
1147 "version": "4.0.0",
1148 "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
1149 "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
1150 "dev": true,
1151 "engines": {
1152 "node": ">=10"
1153 },
1154 "funding": {
1155 "url": "https://github.com/sponsors/sindresorhus"
1409 "node_modules/yn": {
1410 "version": "3.1.1",
1411 "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
1412 "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
1413 "dev": true,
1414 "engines": {
1415 "node": ">=6"
11561416 }
11571417 },
11581418 "node_modules/yocto-queue": {
11751435 "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
11761436 "dev": true
11771437 },
1438 "@cspotcode/source-map-support": {
1439 "version": "0.8.1",
1440 "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
1441 "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
1442 "dev": true,
1443 "requires": {
1444 "@jridgewell/trace-mapping": "0.3.9"
1445 }
1446 },
11781447 "@istanbuljs/schema": {
11791448 "version": "0.1.3",
11801449 "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
11811450 "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
11821451 "dev": true
11831452 },
1453 "@jridgewell/resolve-uri": {
1454 "version": "3.1.0",
1455 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
1456 "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
1457 "dev": true
1458 },
1459 "@jridgewell/sourcemap-codec": {
1460 "version": "1.4.14",
1461 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
1462 "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
1463 "dev": true
1464 },
1465 "@jridgewell/trace-mapping": {
1466 "version": "0.3.9",
1467 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
1468 "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
1469 "dev": true,
1470 "requires": {
1471 "@jridgewell/resolve-uri": "^3.0.3",
1472 "@jridgewell/sourcemap-codec": "^1.4.10"
1473 }
1474 },
1475 "@tsconfig/node10": {
1476 "version": "1.0.9",
1477 "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
1478 "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
1479 "dev": true
1480 },
1481 "@tsconfig/node12": {
1482 "version": "1.0.11",
1483 "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
1484 "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
1485 "dev": true
1486 },
1487 "@tsconfig/node14": {
1488 "version": "1.0.3",
1489 "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
1490 "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
1491 "dev": true
1492 },
1493 "@tsconfig/node16": {
1494 "version": "1.0.3",
1495 "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
1496 "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==",
1497 "dev": true
1498 },
11841499 "@types/istanbul-lib-coverage": {
1185 "version": "2.0.3",
1186 "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
1187 "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
1188 "dev": true
1500 "version": "2.0.4",
1501 "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
1502 "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
1503 "dev": true
1504 },
1505 "@types/mocha": {
1506 "version": "9.1.1",
1507 "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
1508 "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
1509 "dev": true
1510 },
1511 "@types/node": {
1512 "version": "18.7.12",
1513 "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.12.tgz",
1514 "integrity": "sha512-caqFX7GwvZ4KLnhpI9CfiMkgHKp6kvFAIgpkha0cjO7bAQvB6dWe+q3fTHmm7fQvv59pd4tPj77nriq2M6U2dw==",
1515 "dev": true,
1516 "peer": true
11891517 },
11901518 "@ungap/promise-all-settled": {
11911519 "version": "1.1.2",
11931521 "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
11941522 "dev": true
11951523 },
1524 "acorn": {
1525 "version": "8.8.0",
1526 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
1527 "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
1528 "dev": true
1529 },
1530 "acorn-walk": {
1531 "version": "8.2.0",
1532 "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
1533 "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
1534 "dev": true
1535 },
11961536 "ansi-colors": {
11971537 "version": "4.1.1",
11981538 "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
12241564 "picomatch": "^2.0.4"
12251565 }
12261566 },
1567 "arg": {
1568 "version": "4.1.3",
1569 "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
1570 "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
1571 "dev": true
1572 },
12271573 "argparse": {
12281574 "version": "2.0.1",
12291575 "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
12431589 "dev": true
12441590 },
12451591 "brace-expansion": {
1246 "version": "1.1.11",
1247 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1248 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1249 "dev": true,
1250 "requires": {
1251 "balanced-match": "^1.0.0",
1252 "concat-map": "0.0.1"
1592 "version": "2.0.1",
1593 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1594 "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1595 "dev": true,
1596 "requires": {
1597 "balanced-match": "^1.0.0"
12531598 }
12541599 },
12551600 "braces": {
12681613 "dev": true
12691614 },
12701615 "c8": {
1271 "version": "7.10.0",
1272 "resolved": "https://registry.npmjs.org/c8/-/c8-7.10.0.tgz",
1273 "integrity": "sha512-OAwfC5+emvA6R7pkYFVBTOtI5ruf9DahffGmIqUc9l6wEh0h7iAFP6dt/V9Ioqlr2zW5avX9U9/w1I4alTRHkA==",
1616 "version": "7.12.0",
1617 "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz",
1618 "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==",
12741619 "dev": true,
12751620 "requires": {
12761621 "@bcoe/v8-coverage": "^0.2.3",
1277 "@istanbuljs/schema": "^0.1.2",
1622 "@istanbuljs/schema": "^0.1.3",
12781623 "find-up": "^5.0.0",
12791624 "foreground-child": "^2.0.0",
1280 "istanbul-lib-coverage": "^3.0.1",
1625 "istanbul-lib-coverage": "^3.2.0",
12811626 "istanbul-lib-report": "^3.0.0",
1282 "istanbul-reports": "^3.0.2",
1283 "rimraf": "^3.0.0",
1627 "istanbul-reports": "^3.1.4",
1628 "rimraf": "^3.0.2",
12841629 "test-exclude": "^6.0.0",
1285 "v8-to-istanbul": "^8.0.0",
1630 "v8-to-istanbul": "^9.0.0",
12861631 "yargs": "^16.2.0",
1287 "yargs-parser": "^20.2.7"
1288 },
1289 "dependencies": {
1290 "yargs-parser": {
1291 "version": "20.2.9",
1292 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
1293 "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
1294 "dev": true
1295 }
1296 }
1632 "yargs-parser": "^20.2.9"
1633 }
1634 },
1635 "camelcase": {
1636 "version": "6.3.0",
1637 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
1638 "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
1639 "dev": true
12971640 },
12981641 "chalk": {
12991642 "version": "4.1.2",
13031646 "requires": {
13041647 "ansi-styles": "^4.1.0",
13051648 "supports-color": "^7.1.0"
1306 },
1307 "dependencies": {
1308 "supports-color": {
1309 "version": "7.2.0",
1310 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1311 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1312 "dev": true,
1313 "requires": {
1314 "has-flag": "^4.0.0"
1315 }
1316 }
13171649 }
13181650 },
13191651 "chokidar": {
1320 "version": "3.5.2",
1321 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
1322 "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
1652 "version": "3.5.3",
1653 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1654 "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
13231655 "dev": true,
13241656 "requires": {
13251657 "anymatch": "~3.1.2",
13611693 "concat-map": {
13621694 "version": "0.0.1",
13631695 "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1364 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1696 "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
13651697 "dev": true
13661698 },
13671699 "convert-source-map": {
13711703 "dev": true,
13721704 "requires": {
13731705 "safe-buffer": "~5.1.1"
1374 }
1706 },
1707 "dependencies": {
1708 "safe-buffer": {
1709 "version": "5.1.2",
1710 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1711 "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1712 "dev": true
1713 }
1714 }
1715 },
1716 "create-require": {
1717 "version": "1.1.1",
1718 "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
1719 "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
1720 "dev": true
13751721 },
13761722 "cross-spawn": {
13771723 "version": "7.0.3",
13851731 }
13861732 },
13871733 "debug": {
1388 "version": "4.3.2",
1389 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
1390 "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
1734 "version": "4.3.4",
1735 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1736 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
13911737 "dev": true,
13921738 "requires": {
13931739 "ms": "2.1.2"
14011747 }
14021748 }
14031749 },
1750 "decamelize": {
1751 "version": "4.0.0",
1752 "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
1753 "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
1754 "dev": true
1755 },
14041756 "diff": {
14051757 "version": "5.0.0",
14061758 "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
14631815 "fs.realpath": {
14641816 "version": "1.0.0",
14651817 "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1466 "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1818 "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
14671819 "dev": true
14681820 },
14691821 "fsevents": {
14801832 "dev": true
14811833 },
14821834 "glob": {
1483 "version": "7.1.7",
1484 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
1485 "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
1835 "version": "7.2.0",
1836 "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
1837 "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
14861838 "dev": true,
14871839 "requires": {
14881840 "fs.realpath": "^1.0.0",
14911843 "minimatch": "^3.0.4",
14921844 "once": "^1.3.0",
14931845 "path-is-absolute": "^1.0.0"
1846 },
1847 "dependencies": {
1848 "brace-expansion": {
1849 "version": "1.1.11",
1850 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1851 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1852 "dev": true,
1853 "requires": {
1854 "balanced-match": "^1.0.0",
1855 "concat-map": "0.0.1"
1856 }
1857 },
1858 "minimatch": {
1859 "version": "3.1.2",
1860 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1861 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1862 "dev": true,
1863 "requires": {
1864 "brace-expansion": "^1.1.7"
1865 }
1866 }
14941867 }
14951868 },
14961869 "glob-parent": {
15021875 "is-glob": "^4.0.1"
15031876 }
15041877 },
1505 "growl": {
1506 "version": "1.10.5",
1507 "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
1508 "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
1509 "dev": true
1510 },
15111878 "has-flag": {
15121879 "version": "4.0.0",
15131880 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
15291896 "inflight": {
15301897 "version": "1.0.6",
15311898 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1532 "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1899 "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
15331900 "dev": true,
15341901 "requires": {
15351902 "once": "^1.3.0",
15541921 "is-extglob": {
15551922 "version": "2.1.1",
15561923 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1557 "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1924 "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
15581925 "dev": true
15591926 },
15601927 "is-fullwidth-code-point": {
15931960 "isexe": {
15941961 "version": "2.0.0",
15951962 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1596 "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1963 "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
15971964 "dev": true
15981965 },
15991966 "istanbul-lib-coverage": {
16111978 "istanbul-lib-coverage": "^3.0.0",
16121979 "make-dir": "^3.0.0",
16131980 "supports-color": "^7.1.0"
1981 }
1982 },
1983 "istanbul-reports": {
1984 "version": "3.1.5",
1985 "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
1986 "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
1987 "dev": true,
1988 "requires": {
1989 "html-escaper": "^2.0.0",
1990 "istanbul-lib-report": "^3.0.0"
1991 }
1992 },
1993 "js-yaml": {
1994 "version": "4.1.0",
1995 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1996 "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1997 "dev": true,
1998 "requires": {
1999 "argparse": "^2.0.1"
2000 }
2001 },
2002 "locate-path": {
2003 "version": "6.0.0",
2004 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2005 "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2006 "dev": true,
2007 "requires": {
2008 "p-locate": "^5.0.0"
2009 }
2010 },
2011 "log-symbols": {
2012 "version": "4.1.0",
2013 "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
2014 "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
2015 "dev": true,
2016 "requires": {
2017 "chalk": "^4.1.0",
2018 "is-unicode-supported": "^0.1.0"
2019 }
2020 },
2021 "make-dir": {
2022 "version": "3.1.0",
2023 "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
2024 "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
2025 "dev": true,
2026 "requires": {
2027 "semver": "^6.0.0"
2028 }
2029 },
2030 "make-error": {
2031 "version": "1.3.6",
2032 "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
2033 "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
2034 "dev": true
2035 },
2036 "minimatch": {
2037 "version": "5.0.1",
2038 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
2039 "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
2040 "dev": true,
2041 "requires": {
2042 "brace-expansion": "^2.0.1"
2043 }
2044 },
2045 "mocha": {
2046 "version": "10.0.0",
2047 "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
2048 "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
2049 "dev": true,
2050 "requires": {
2051 "@ungap/promise-all-settled": "1.1.2",
2052 "ansi-colors": "4.1.1",
2053 "browser-stdout": "1.3.1",
2054 "chokidar": "3.5.3",
2055 "debug": "4.3.4",
2056 "diff": "5.0.0",
2057 "escape-string-regexp": "4.0.0",
2058 "find-up": "5.0.0",
2059 "glob": "7.2.0",
2060 "he": "1.2.0",
2061 "js-yaml": "4.1.0",
2062 "log-symbols": "4.1.0",
2063 "minimatch": "5.0.1",
2064 "ms": "2.1.3",
2065 "nanoid": "3.3.3",
2066 "serialize-javascript": "6.0.0",
2067 "strip-json-comments": "3.1.1",
2068 "supports-color": "8.1.1",
2069 "workerpool": "6.2.1",
2070 "yargs": "16.2.0",
2071 "yargs-parser": "20.2.4",
2072 "yargs-unparser": "2.0.0"
16142073 },
16152074 "dependencies": {
16162075 "supports-color": {
1617 "version": "7.2.0",
1618 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1619 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2076 "version": "8.1.1",
2077 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
2078 "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
16202079 "dev": true,
16212080 "requires": {
16222081 "has-flag": "^4.0.0"
16232082 }
2083 },
2084 "yargs-parser": {
2085 "version": "20.2.4",
2086 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
2087 "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
2088 "dev": true
16242089 }
1625 }
1626 },
1627 "istanbul-reports": {
1628 "version": "3.0.5",
1629 "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz",
1630 "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==",
1631 "dev": true,
1632 "requires": {
1633 "html-escaper": "^2.0.0",
1634 "istanbul-lib-report": "^3.0.0"
1635 }
1636 },
1637 "js-yaml": {
1638 "version": "4.1.0",
1639 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1640 "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1641 "dev": true,
1642 "requires": {
1643 "argparse": "^2.0.1"
1644 }
1645 },
1646 "locate-path": {
1647 "version": "6.0.0",
1648 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
1649 "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
1650 "dev": true,
1651 "requires": {
1652 "p-locate": "^5.0.0"
1653 }
1654 },
1655 "log-symbols": {
1656 "version": "4.1.0",
1657 "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
1658 "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
1659 "dev": true,
1660 "requires": {
1661 "chalk": "^4.1.0",
1662 "is-unicode-supported": "^0.1.0"
1663 }
1664 },
1665 "make-dir": {
1666 "version": "3.1.0",
1667 "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1668 "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1669 "dev": true,
1670 "requires": {
1671 "semver": "^6.0.0"
1672 }
1673 },
1674 "minimatch": {
1675 "version": "3.0.4",
1676 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1677 "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1678 "dev": true,
1679 "requires": {
1680 "brace-expansion": "^1.1.7"
1681 }
1682 },
1683 "mocha": {
1684 "version": "9.1.3",
1685 "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
1686 "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
1687 "dev": true,
1688 "requires": {
1689 "@ungap/promise-all-settled": "1.1.2",
1690 "ansi-colors": "4.1.1",
1691 "browser-stdout": "1.3.1",
1692 "chokidar": "3.5.2",
1693 "debug": "4.3.2",
1694 "diff": "5.0.0",
1695 "escape-string-regexp": "4.0.0",
1696 "find-up": "5.0.0",
1697 "glob": "7.1.7",
1698 "growl": "1.10.5",
1699 "he": "1.2.0",
1700 "js-yaml": "4.1.0",
1701 "log-symbols": "4.1.0",
1702 "minimatch": "3.0.4",
1703 "ms": "2.1.3",
1704 "nanoid": "3.1.25",
1705 "serialize-javascript": "6.0.0",
1706 "strip-json-comments": "3.1.1",
1707 "supports-color": "8.1.1",
1708 "which": "2.0.2",
1709 "workerpool": "6.1.5",
1710 "yargs": "16.2.0",
1711 "yargs-parser": "20.2.4",
1712 "yargs-unparser": "2.0.0"
17132090 }
17142091 },
17152092 "ms": {
17192096 "dev": true
17202097 },
17212098 "nanoid": {
1722 "version": "3.1.25",
1723 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
1724 "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
2099 "version": "3.3.3",
2100 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
2101 "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
17252102 "dev": true
17262103 },
17272104 "normalize-path": {
17332110 "once": {
17342111 "version": "1.4.0",
17352112 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1736 "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2113 "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
17372114 "dev": true,
17382115 "requires": {
17392116 "wrappy": "1"
17662143 "path-is-absolute": {
17672144 "version": "1.0.1",
17682145 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1769 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2146 "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
17702147 "dev": true
17712148 },
17722149 "path-key": {
17762153 "dev": true
17772154 },
17782155 "picomatch": {
1779 "version": "2.3.0",
1780 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
1781 "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
2156 "version": "2.3.1",
2157 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
2158 "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
17822159 "dev": true
17832160 },
17842161 "randombytes": {
18022179 "require-directory": {
18032180 "version": "2.1.1",
18042181 "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1805 "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
2182 "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
18062183 "dev": true
18072184 },
18082185 "rimraf": {
18142191 "glob": "^7.1.3"
18152192 }
18162193 },
2194 "rollup": {
2195 "version": "2.78.1",
2196 "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz",
2197 "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==",
2198 "dev": true,
2199 "requires": {
2200 "fsevents": "~2.3.2"
2201 }
2202 },
18172203 "safe-buffer": {
1818 "version": "5.1.2",
1819 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1820 "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2204 "version": "5.2.1",
2205 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2206 "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
18212207 "dev": true
18222208 },
18232209 "semver": {
18512237 "dev": true
18522238 },
18532239 "signal-exit": {
1854 "version": "3.0.5",
1855 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
1856 "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
2240 "version": "3.0.7",
2241 "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
2242 "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
18572243 "dev": true
18582244 },
18592245 "string-width": {
18832269 "dev": true
18842270 },
18852271 "supports-color": {
1886 "version": "8.1.1",
1887 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
1888 "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
2272 "version": "7.2.0",
2273 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2274 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
18892275 "dev": true,
18902276 "requires": {
18912277 "has-flag": "^4.0.0"
19002286 "@istanbuljs/schema": "^0.1.2",
19012287 "glob": "^7.1.4",
19022288 "minimatch": "^3.0.4"
2289 },
2290 "dependencies": {
2291 "brace-expansion": {
2292 "version": "1.1.11",
2293 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
2294 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
2295 "dev": true,
2296 "requires": {
2297 "balanced-match": "^1.0.0",
2298 "concat-map": "0.0.1"
2299 }
2300 },
2301 "minimatch": {
2302 "version": "3.1.2",
2303 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2304 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2305 "dev": true,
2306 "requires": {
2307 "brace-expansion": "^1.1.7"
2308 }
2309 }
19032310 }
19042311 },
19052312 "to-regex-range": {
19112318 "is-number": "^7.0.0"
19122319 }
19132320 },
2321 "ts-node": {
2322 "version": "10.9.1",
2323 "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
2324 "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
2325 "dev": true,
2326 "requires": {
2327 "@cspotcode/source-map-support": "^0.8.0",
2328 "@tsconfig/node10": "^1.0.7",
2329 "@tsconfig/node12": "^1.0.7",
2330 "@tsconfig/node14": "^1.0.0",
2331 "@tsconfig/node16": "^1.0.2",
2332 "acorn": "^8.4.1",
2333 "acorn-walk": "^8.1.1",
2334 "arg": "^4.1.0",
2335 "create-require": "^1.1.0",
2336 "diff": "^4.0.1",
2337 "make-error": "^1.1.1",
2338 "v8-compile-cache-lib": "^3.0.1",
2339 "yn": "3.1.1"
2340 },
2341 "dependencies": {
2342 "diff": {
2343 "version": "4.0.2",
2344 "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
2345 "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
2346 "dev": true
2347 }
2348 }
2349 },
2350 "typescript": {
2351 "version": "4.7.4",
2352 "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
2353 "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
2354 "dev": true
2355 },
2356 "v8-compile-cache-lib": {
2357 "version": "3.0.1",
2358 "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
2359 "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
2360 "dev": true
2361 },
19142362 "v8-to-istanbul": {
1915 "version": "8.1.0",
1916 "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
1917 "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==",
1918 "dev": true,
1919 "requires": {
2363 "version": "9.0.1",
2364 "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz",
2365 "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==",
2366 "dev": true,
2367 "requires": {
2368 "@jridgewell/trace-mapping": "^0.3.12",
19202369 "@types/istanbul-lib-coverage": "^2.0.1",
1921 "convert-source-map": "^1.6.0",
1922 "source-map": "^0.7.3"
1923 },
1924 "dependencies": {
1925 "source-map": {
1926 "version": "0.7.3",
1927 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
1928 "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
1929 "dev": true
2370 "convert-source-map": "^1.6.0"
2371 },
2372 "dependencies": {
2373 "@jridgewell/trace-mapping": {
2374 "version": "0.3.15",
2375 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
2376 "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
2377 "dev": true,
2378 "requires": {
2379 "@jridgewell/resolve-uri": "^3.0.3",
2380 "@jridgewell/sourcemap-codec": "^1.4.10"
2381 }
19302382 }
19312383 }
19322384 },
19402392 }
19412393 },
19422394 "workerpool": {
1943 "version": "6.1.5",
1944 "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
1945 "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
2395 "version": "6.2.1",
2396 "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
2397 "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
19462398 "dev": true
19472399 },
19482400 "wrap-ansi": {
19592411 "wrappy": {
19602412 "version": "1.0.2",
19612413 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1962 "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2414 "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
19632415 "dev": true
19642416 },
19652417 "y18n": {
19842436 }
19852437 },
19862438 "yargs-parser": {
1987 "version": "20.2.4",
1988 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
1989 "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
2439 "version": "20.2.9",
2440 "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
2441 "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
19902442 "dev": true
19912443 },
19922444 "yargs-unparser": {
19992451 "decamelize": "^4.0.0",
20002452 "flat": "^5.0.2",
20012453 "is-plain-obj": "^2.1.0"
2002 },
2003 "dependencies": {
2004 "camelcase": {
2005 "version": "6.2.0",
2006 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
2007 "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
2008 "dev": true
2009 },
2010 "decamelize": {
2011 "version": "4.0.0",
2012 "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
2013 "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
2014 "dev": true
2015 }
2016 }
2454 }
2455 },
2456 "yn": {
2457 "version": "3.1.1",
2458 "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
2459 "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
2460 "dev": true
20172461 },
20182462 "yocto-queue": {
20192463 "version": "0.1.0",
00 {
11 "name": "compare-versions",
2 "version": "4.1.2",
2 "version": "5.0.1",
33 "description": "Compare semver version strings to find greater, equal or lesser.",
44 "repository": {
55 "type": "git",
1919 "node"
2020 ],
2121 "scripts": {
22 "test": "c8 --reporter=lcov mocha"
22 "build": "npm run build:esm && npm run build:umd",
23 "build:esm": "tsc --module esnext --target es2017 --outDir lib/esm",
24 "build:umd": "rollup lib/esm/index.js --format umd --name compareVersions --sourcemap -o lib/umd/index.js",
25 "test": "c8 --reporter=lcov mocha -r ts-node/register test/**/*.ts"
2326 },
24 "main": "index.js",
25 "module": "index.mjs",
26 "types": "index.d.ts",
27 "main": "./lib/umd/index.js",
28 "module": "./lib/esm/index.js",
29 "types": "./lib/esm/index.d.ts",
2730 "sideEffects": false,
2831 "files": [
29 "index.js",
30 "index.mjs",
31 "index.d.ts"
32 "lib",
33 "src"
3234 ],
3335 "devDependencies": {
36 "@types/mocha": "^9.1.0",
3437 "c8": "^7.10.0",
35 "mocha": "^9.0.0"
38 "mocha": "^10.0.0",
39 "rollup": "^2.78.1",
40 "ts-node": "^10.7.0",
41 "typescript": "^4.6.3"
3642 }
3743 }
0 /**
1 * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.
2 * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.
3 * @param v1 - First version to compare
4 * @param v2 - Second version to compare
5 * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).
6 */
7 export const compareVersions = (v1: string, v2: string) => {
8 // validate input and split into segments
9 const n1 = validateAndParse(v1);
10 const n2 = validateAndParse(v2);
11
12 // pop off the patch
13 const p1 = n1.pop();
14 const p2 = n2.pop();
15
16 // validate numbers
17 const r = compareSegments(n1, n2);
18 if (r !== 0) return r;
19
20 // validate pre-release
21 if (p1 && p2) {
22 return compareSegments(p1.split('.'), p2.split('.'));
23 } else if (p1 || p2) {
24 return p1 ? -1 : 1;
25 }
26
27 return 0;
28 };
29
30 /**
31 * Validate [semver](https://semver.org/) version strings.
32 *
33 * @param version Version number to validate
34 * @returns `true` if the version number is a valid semver version number, `false` otherwise.
35 *
36 * @example
37 * ```
38 * validate('1.0.0-rc.1'); // return true
39 * validate('1.0-rc.1'); // return false
40 * validate('foo'); // return false
41 * ```
42 */
43 export const validate = (version: string) =>
44 typeof version === 'string' && /^[v\d]/.test(version) && semver.test(version);
45
46 /**
47 * Allowed arithmetic operators
48 */
49 export type CompareOperator = '>' | '>=' | '=' | '<' | '<=';
50
51 /**
52 * Compare [semver](https://semver.org/) version strings using the specified operator.
53 *
54 * @param v1 First version to compare
55 * @param v2 Second version to compare
56 * @param operator Allowed arithmetic operator to use
57 * @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.
58 *
59 * @example
60 * ```
61 * compare('10.1.8', '10.0.4', '>'); // return true
62 * compare('10.0.1', '10.0.1', '='); // return true
63 * compare('10.1.1', '10.2.2', '<'); // return true
64 * compare('10.1.1', '10.2.2', '<='); // return true
65 * compare('10.1.1', '10.2.2', '>='); // return false
66 * ```
67 */
68 export const compare = (v1: string, v2: string, operator: CompareOperator) => {
69 // validate input operator
70 assertValidOperator(operator);
71
72 // since result of compareVersions can only be -1 or 0 or 1
73 // a simple map can be used to replace switch
74 const res = compareVersions(v1, v2);
75
76 return operatorResMap[operator].includes(res);
77 };
78
79 /**
80 * Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.
81 *
82 * @param version Version number to match
83 * @param range Range pattern for version
84 * @returns `true` if the version number is within the range, `false` otherwise.
85 *
86 * @example
87 * ```
88 * satisfies('1.1.0', '^1.0.0'); // return true
89 * satisfies('1.1.0', '~1.0.0'); // return false
90 * ```
91 */
92 export const satisfies = (version: string, range: string) => {
93 // if no range operator then "="
94 const m = range.match(/^([<>=~^]+)/);
95 const op = m ? m[1] : '=';
96
97 // if gt/lt/eq then operator compare
98 if (op !== '^' && op !== '~')
99 return compare(version, range, op as CompareOperator);
100
101 // else range of either "~" or "^" is assumed
102 const [v1, v2, v3] = validateAndParse(version);
103 const [r1, r2, r3] = validateAndParse(range);
104 if (compareStrings(v1, r1) !== 0) return false;
105 if (op === '^') {
106 return compareSegments([v2, v3], [r2, r3]) >= 0;
107 }
108 if (compareStrings(v2, r2) !== 0) return false;
109 return compareStrings(v3, r3) >= 0;
110 };
111
112 const semver =
113 /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i;
114
115 const validateAndParse = (version: string) => {
116 if (typeof version !== 'string') {
117 throw new TypeError('Invalid argument expected string');
118 }
119 const match = version.match(semver);
120 if (!match) {
121 throw new Error(
122 `Invalid argument not valid semver ('${version}' received)`
123 );
124 }
125 match.shift();
126 return match;
127 };
128
129 const isWildcard = (s: string) => s === '*' || s === 'x' || s === 'X';
130
131 const tryParse = (v: string) => {
132 const n = parseInt(v, 10);
133 return isNaN(n) ? v : n;
134 };
135
136 const forceType = (a: string | number, b: string | number) =>
137 typeof a !== typeof b ? [String(a), String(b)] : [a, b];
138
139 const compareStrings = (a: string, b: string) => {
140 if (isWildcard(a) || isWildcard(b)) return 0;
141 const [ap, bp] = forceType(tryParse(a), tryParse(b));
142 if (ap > bp) return 1;
143 if (ap < bp) return -1;
144 return 0;
145 };
146
147 const compareSegments = (
148 a: string | RegExpMatchArray,
149 b: string | RegExpMatchArray
150 ) => {
151 for (let i = 0; i < Math.max(a.length, b.length); i++) {
152 const r = compareStrings(a[i] || '0', b[i] || '0');
153 if (r !== 0) return r;
154 }
155 return 0;
156 };
157
158 const operatorResMap = {
159 '>': [1],
160 '>=': [0, 1],
161 '=': [0],
162 '<=': [-1, 0],
163 '<': [-1],
164 };
165
166 const allowedOperators = Object.keys(operatorResMap);
167
168 const assertValidOperator = (op: string) => {
169 if (typeof op !== 'string') {
170 throw new TypeError(
171 `Invalid operator type, expected string but got ${typeof op}`
172 );
173 }
174 if (allowedOperators.indexOf(op) === -1) {
175 throw new Error(
176 `Invalid operator, expected one of ${allowedOperators.join('|')}`
177 );
178 }
179 };
+0
-297
test/compare.mjs less more
0 import assert from 'assert';
1 import compareVersions, { compare } from '../index.mjs';
2
3 describe('compare versions', () => {
4 const cmp = {
5 1: '>',
6 0: '=',
7 '-1': '<',
8 };
9
10 const runTests = (dataSet) => {
11 dataSet.forEach(([v1, v2, expected]) => {
12 it(`${v1} ${cmp[expected]} ${v2}`, () =>
13 assert.strictEqual(
14 compareVersions(v1, v2),
15 expected,
16 `${v1} ${cmp[expected]} ${v2} !== ${expected}`
17 ));
18 });
19 };
20
21 describe('single-segment versions', () => {
22 runTests([
23 ['10', '9', 1],
24 ['10', '10', 0],
25 ['9', '10', -1],
26 ]);
27 });
28
29 describe('two-segment versions', () => {
30 runTests([
31 ['10.8', '10.4', 1],
32 ['10.1', '10.1', 0],
33 ['10.1', '10.2', -1],
34 ]);
35 });
36
37 describe('three-segment versions', () => {
38 runTests([
39 ['10.1.8', '10.0.4', 1],
40 ['10.0.1', '10.0.1', 0],
41 ['10.1.1', '10.2.2', -1],
42 ['11.0.10', '11.0.2', 1],
43 ['11.0.2', '11.0.10', -1],
44 ]);
45 });
46
47 describe('four-segment versions - https://www.chromium.org/developers/version-numbers', () => {
48 runTests([
49 ['1.0.0.0', '1', 0],
50 ['1.0.0.0', '1.0', 0],
51 ['1.0.0.0', '1.0.0', 0],
52 ['1.0.0.0', '1.0.0.0', 0],
53 ['1.2.3.4', '1.2.3.4', 0],
54 ['1.2.3.4', '1.2.3.04', 0],
55 ['v1.2.3.4', '01.2.3.4', 0],
56 ['1.2.3.4', '1.2.3.5', -1],
57 ['1.2.3.5', '1.2.3.4', 1],
58 ['1.0.0.0-alpha', '1.0.0-alpha', 0],
59 ['1.0.0.0-alpha', '1.0.0.0-beta', -1],
60 ]);
61 });
62
63 describe('different segment versions', () => {
64 runTests([
65 ['11.1.10', '11.0', 1],
66 ['1.1.1', '1', 1],
67 ['01.1.0', '1.01', 0],
68 ['1.0.0', '1', 0],
69 ['10.0.0', '10.114', -1],
70 ['1.0', '1.4.1', -1],
71 ]);
72 });
73
74 describe('pre-release versions - https://semver.org/#spec-item-9', () => {
75 runTests([
76 ['1.0.0-alpha.1', '1.0.0-alpha', 1],
77 ['1.0.0-alpha', '1.0.0-alpha.1', -1],
78 ['1.0.0-alpha.1', '1.0.0-alpha.beta', -1],
79 ['1.0.0-alpha.beta', '1.0.0-beta', -1],
80 ['1.0.0-beta', '1.0.0-beta.2', -1],
81 ['1.0.0-beta.2', '1.0.0-beta.11', -1],
82 ['1.0.0-beta.11', '1.0.0-rc.1', -1],
83 ['1.0.0-rc.1', '1.0.0', -1],
84 ['1.0.0-alpha', '1', -1],
85 ['1.0.0-beta.11', '1.0.0-beta.1', 1],
86 ['1.0.0-beta.10', '1.0.0-beta.9', 1],
87 ['1.0.0-beta.10', '1.0.0-beta.90', -1],
88 ]);
89 });
90
91 describe('ignore build metadata - https://semver.org/#spec-item-10', () => {
92 runTests([
93 ['1.4.0-build.3928', '1.4.0-build.3928+sha.a8d9d4f', 0],
94 ['1.4.0-build.3928+sha.b8dbdb0', '1.4.0-build.3928+sha.a8d9d4f', 0],
95 ['1.0.0-alpha+001', '1.0.0-alpha', 0],
96 ['1.0.0-beta+exp.sha.5114f85', '1.0.0-beta+exp.sha.999999', 0],
97 ['1.0.0+20130313144700', '1.0.0', 0],
98 ['1.0.0+20130313144700', '2.0.0', -1],
99 ['1.0.0+20130313144700', '1.0.1+11234343435', -1],
100 ['1.0.1+1', '1.0.1+2', 0],
101 ['1.0.0+a-a', '1.0.0+a-b', 0],
102 ]);
103 });
104
105 describe('ignore leading `v`', () => {
106 runTests([
107 ['v1.0.0', '1.0.0', 0],
108 ['v1.0.0', 'v1.0.0', 0],
109 ['v1.0.0', 'v1.0.0', 0],
110 ['v1.0.0-alpha', '1.0.0-alpha', 0],
111 ]);
112 });
113
114 describe('ignore leading `0`', () => {
115 runTests([
116 ['01.0.0', '1', 0],
117 ['01.0.0', '1.0.0', 0],
118 ['1.01.0', '1.01.0', 0],
119 ['1.0.03', '1.0.3', 0],
120 ['1.0.03-alpha', '1.0.3-alpha', 0],
121 ['v01.0.0', '1.0.0', 0],
122 ['v01.0.0', '2.0.0', -1],
123 ]);
124 });
125
126 describe('wildcards', () => {
127 runTests([
128 ['3', '3.x.x', 0],
129 ['3.3', '3.x.x', 0],
130 ['3.3.3', '3.x.x', 0],
131 ['3.x.x', '3.3.3', 0],
132 ['3.3.3', '3.X.X', 0],
133 ['3.3.3', '3.3.x', 0],
134 ['3.3.3', '3.*.*', 0],
135 ['3.3.3', '3.3.*', 0],
136 ['3.0.3', '3.0.*', 0],
137 ['0.7.x', '0.6.0', 1],
138 ['0.7.x', '0.6.0-asdf', 1],
139 ['0.7.x', '0.6.2', 1],
140 ['0.7.x', '0.7.0-asdf', 1],
141 ['1.2.*', '1.1.3', 1],
142 ['1.2.*', '1.1.9999', 1],
143 ['1.2.x', '1.0.0', 1],
144 ['1.2.x', '1.1.0', 1],
145 ['1.2.x', '1.1.3', 1],
146 ['2.*.*', '1.0.1', 1],
147 ['2.*.*', '1.1.3', 1],
148 ['2.x.x', '1.0.0', 1],
149 ['2.x.x', '1.1.3', 1],
150 ]);
151 });
152
153 describe('invalid input', () => {
154 [
155 [42, /Invalid argument expected string/],
156 [{}, /Invalid argument expected string/],
157 [[], /Invalid argument expected string/],
158 [() => undefined, /Invalid argument expected string/],
159 ['6.3.', /Invalid argument not valid semver/],
160 ['1.2.3a', /Invalid argument not valid semver/],
161 ['1.2.-3a', /Invalid argument not valid semver/],
162 ].forEach(([v1, exception]) => {
163 it(`should throw on ${v1}`, () => {
164 assert.throws(() => {
165 compareVersions(v1, v1);
166 }, exception);
167 });
168 });
169 });
170
171 runTests([
172 ['0.1.20', '0.1.5', 1],
173 ['0.6.1-1', '0.6.1-0', 1],
174 ['1', '0.0.0-beta', 1],
175 ['1', '0.2.3', 1],
176 ['1', '0.2.4', 1],
177 ['1', '1.0.0-0', 1],
178 ['1', '1.0.0-beta', 1],
179 ['1.0', '0.0.0', 1],
180 ['1.0', '0.1.0', 1],
181 ['1.0', '0.1.2', 1],
182 ['1.0.0', '0.0.0', 1],
183 ['1.0.0', '0.0.1', 1],
184 ['1.0.0', '0.2.3', 1],
185 ['1.0.0-beta.2', '1.0.0-beta.1', 1],
186 ['1.2.2', '1.2.1', 1],
187 ['2', '1.0.0', 1],
188 ['2', '1.0.0-beta', 1],
189 ['2', '1.9999.9999', 1],
190 ['2.0.0', '1.0.0', 1],
191 ['2.0.0', '1.1.1', 1],
192 ['2.0.0', '1.2.9', 1],
193 ['2.0.0', '1.9999.9999', 1],
194 ['2.3', '2.2.1', 1],
195 ['2.3', '2.2.2', 1],
196 ['2.4', '2.3.0', 1],
197 ['2.4', '2.3.5', 1],
198 ['3.2.1', '2.3.2', 1],
199 ['3.2.1', '3.2.0', 1],
200 ['v0.5.4-pre', '0.5.4-alpha', 1],
201 ['v3.2.1', 'v2.3.2', 1],
202 ]);
203 });
204
205 describe('human readable compare versions', () => {
206 const runTests = (dataSet) => {
207 dataSet.forEach(([v1, v2, operator, expected]) => {
208 it(`${v1} ${operator} ${v2}`, () =>
209 assert.strictEqual(
210 compare(v1, v2, operator),
211 expected,
212 `${v1} ${operator} ${v2} !== ${expected}`
213 ));
214 });
215 };
216
217 const runThrows = (dataSet) => {
218 dataSet.forEach(([v1, v2, operator, expected]) => {
219 it(`${v1} ${operator} ${v2}`, () => {
220 assert.throws(() => {
221 compare(v1, v2, operator);
222 }, expected);
223 });
224 });
225 };
226
227 runThrows([
228 ['3.2.1', '3.2.0', null, /Invalid operator type, expected string but got /],
229 [
230 '3.2.1',
231 '3.2.0',
232 undefined,
233 /Invalid operator type, expected string but got /,
234 ],
235 [
236 '3.2.1',
237 '3.2.0',
238 true,
239 /Invalid operator type, expected string but got boolean/,
240 ],
241 [
242 '3.2.1',
243 '3.2.0',
244 1,
245 /Invalid operator type, expected string but got number/,
246 ],
247 [
248 '3.2.1',
249 '3.2.0',
250 { foo: 'bar' },
251 /Invalid operator type, expected string but got object/,
252 ],
253 [
254 '3.2.1',
255 '3.2.0',
256 () => {},
257 /Invalid operator type, expected string but got function/,
258 ],
259 ['3.2.1', '3.2.0', '', /Invalid operator, expected one of /],
260 ['3.2.1', '3.2.0', 'foo', /Invalid operator, expected one of /],
261 ['3.2.1', '3.2.0', '> ', /Invalid operator, expected one of /],
262 ]);
263
264 it('should throw the same Errors thrown by the main function', () => {
265 [
266 [42, /Invalid argument expected string/],
267 [{}, /Invalid argument expected string/],
268 [[], /Invalid argument expected string/],
269 [() => undefined, /Invalid argument expected string/],
270 ['6.3.', /Invalid argument not valid semver/],
271 ['1.2.3a', /Invalid argument not valid semver/],
272 ['1.2.-3a', /Invalid argument not valid semver/],
273 ].forEach(([v1, exception]) => {
274 assert.throws(() => {
275 compare(v1, v1, '>');
276 }, exception);
277 });
278 });
279
280 runTests([
281 ['10.1.8', '10.0.4', '>', true],
282 ['10.1.8', '10.0.4', '>=', true],
283 ['10.0.1', '10.0.1', '=', true],
284 ['10.0.1', '10.1.*', '=', false],
285 ['3.3.3', '3.x.x', '<', false],
286 ['3.3.3', '3.x.x', '>=', true],
287 ['10.1.1', '10.2.2', '<', true],
288 ['10.1.1', '10.0.2', '<', false],
289 ['10.1.1', '10.2.2', '<=', true],
290 ['10.1.1', '10.1.1', '<=', true],
291 ['10.1.1', '10.0.2', '<=', false],
292 ['10.1.1', '10.0.2', '>=', true],
293 ['10.1.1', '10.1.1', '>=', true],
294 ['10.1.1', '10.2.2', '>=', false],
295 ]);
296 });
0 import assert from 'assert';
1 import { compareVersions, compare, CompareOperator } from '../src/index';
2
3 describe('compare versions', () => {
4 const cmp = {
5 '1': '>',
6 '0': '=',
7 '-1': '<',
8 } as { [key: string]: string };
9
10 const runTests = (dataSet: Array<[string, string, number]>) => {
11 dataSet.forEach(([v1, v2, expected]) => {
12 it(`${v1} ${cmp[expected]} ${v2}`, () =>
13 assert.strictEqual(
14 compareVersions(v1, v2),
15 expected,
16 `${v1} ${cmp[expected]} ${v2} !== ${expected}`
17 ));
18 });
19 };
20
21 describe('single-segment versions', () => {
22 runTests([
23 ['10', '9', 1],
24 ['10', '10', 0],
25 ['9', '10', -1],
26 ]);
27 });
28
29 describe('two-segment versions', () => {
30 runTests([
31 ['10.8', '10.4', 1],
32 ['10.1', '10.1', 0],
33 ['10.1', '10.2', -1],
34 ]);
35 });
36
37 describe('three-segment versions', () => {
38 runTests([
39 ['10.1.8', '10.0.4', 1],
40 ['10.0.1', '10.0.1', 0],
41 ['10.1.1', '10.2.2', -1],
42 ['11.0.10', '11.0.2', 1],
43 ['11.0.2', '11.0.10', -1],
44 ]);
45 });
46
47 describe('four-segment versions - https://www.chromium.org/developers/version-numbers', () => {
48 runTests([
49 ['1.0.0.0', '1', 0],
50 ['1.0.0.0', '1.0', 0],
51 ['1.0.0.0', '1.0.0', 0],
52 ['1.0.0.0', '1.0.0.0', 0],
53 ['1.2.3.4', '1.2.3.4', 0],
54 ['1.2.3.4', '1.2.3.04', 0],
55 ['v1.2.3.4', '01.2.3.4', 0],
56 ['1.2.3.4', '1.2.3.5', -1],
57 ['1.2.3.5', '1.2.3.4', 1],
58 ['1.0.0.0-alpha', '1.0.0-alpha', 0],
59 ['1.0.0.0-alpha', '1.0.0.0-beta', -1],
60 ]);
61 });
62
63 describe('different segment versions', () => {
64 runTests([
65 ['11.1.10', '11.0', 1],
66 ['1.1.1', '1', 1],
67 ['01.1.0', '1.01', 0],
68 ['1.0.0', '1', 0],
69 ['10.0.0', '10.114', -1],
70 ['1.0', '1.4.1', -1],
71 ]);
72 });
73
74 describe('pre-release versions - https://semver.org/#spec-item-9', () => {
75 runTests([
76 ['1.0.0-alpha.1', '1.0.0-alpha', 1],
77 ['1.0.0-alpha', '1.0.0-alpha.1', -1],
78 ['1.0.0-alpha.1', '1.0.0-alpha.beta', -1],
79 ['1.0.0-alpha.beta', '1.0.0-beta', -1],
80 ['1.0.0-beta', '1.0.0-beta.2', -1],
81 ['1.0.0-beta.2', '1.0.0-beta.11', -1],
82 ['1.0.0-beta.11', '1.0.0-rc.1', -1],
83 ['1.0.0-rc.1', '1.0.0', -1],
84 ['1.0.0-alpha', '1', -1],
85 ['1.0.0-beta.11', '1.0.0-beta.1', 1],
86 ['1.0.0-beta.10', '1.0.0-beta.9', 1],
87 ['1.0.0-beta.10', '1.0.0-beta.90', -1],
88 ]);
89 });
90
91 describe('ignore build metadata - https://semver.org/#spec-item-10', () => {
92 runTests([
93 ['1.4.0-build.3928', '1.4.0-build.3928+sha.a8d9d4f', 0],
94 ['1.4.0-build.3928+sha.b8dbdb0', '1.4.0-build.3928+sha.a8d9d4f', 0],
95 ['1.0.0-alpha+001', '1.0.0-alpha', 0],
96 ['1.0.0-beta+exp.sha.5114f85', '1.0.0-beta+exp.sha.999999', 0],
97 ['1.0.0+20130313144700', '1.0.0', 0],
98 ['1.0.0+20130313144700', '2.0.0', -1],
99 ['1.0.0+20130313144700', '1.0.1+11234343435', -1],
100 ['1.0.1+1', '1.0.1+2', 0],
101 ['1.0.0+a-a', '1.0.0+a-b', 0],
102 ]);
103 });
104
105 describe('ignore leading `v`', () => {
106 runTests([
107 ['v1.0.0', '1.0.0', 0],
108 ['v1.0.0', 'v1.0.0', 0],
109 ['v1.0.0', 'v1.0.0', 0],
110 ['v1.0.0-alpha', '1.0.0-alpha', 0],
111 ]);
112 });
113
114 describe('ignore leading `0`', () => {
115 runTests([
116 ['01.0.0', '1', 0],
117 ['01.0.0', '1.0.0', 0],
118 ['1.01.0', '1.01.0', 0],
119 ['1.0.03', '1.0.3', 0],
120 ['1.0.03-alpha', '1.0.3-alpha', 0],
121 ['v01.0.0', '1.0.0', 0],
122 ['v01.0.0', '2.0.0', -1],
123 ]);
124 });
125
126 describe('wildcards', () => {
127 runTests([
128 ['3', '3.x.x', 0],
129 ['3.3', '3.x.x', 0],
130 ['3.3.3', '3.x.x', 0],
131 ['3.x.x', '3.3.3', 0],
132 ['3.3.3', '3.X.X', 0],
133 ['3.3.3', '3.3.x', 0],
134 ['3.3.3', '3.*.*', 0],
135 ['3.3.3', '3.3.*', 0],
136 ['3.0.3', '3.0.*', 0],
137 ['0.7.x', '0.6.0', 1],
138 ['0.7.x', '0.6.0-asdf', 1],
139 ['0.7.x', '0.6.2', 1],
140 ['0.7.x', '0.7.0-asdf', 1],
141 ['1.2.*', '1.1.3', 1],
142 ['1.2.*', '1.1.9999', 1],
143 ['1.2.x', '1.0.0', 1],
144 ['1.2.x', '1.1.0', 1],
145 ['1.2.x', '1.1.3', 1],
146 ['2.*.*', '1.0.1', 1],
147 ['2.*.*', '1.1.3', 1],
148 ['2.x.x', '1.0.0', 1],
149 ['2.x.x', '1.1.3', 1],
150 ]);
151 });
152
153 describe('invalid input', () => {
154 (
155 [
156 [42, /Invalid argument expected string/],
157 [{}, /Invalid argument expected string/],
158 [[], /Invalid argument expected string/],
159 [() => undefined, /Invalid argument expected string/],
160 ['6.3.', /Invalid argument not valid semver/],
161 ['1.2.3a', /Invalid argument not valid semver/],
162 ['1.2.-3a', /Invalid argument not valid semver/],
163 ] as const
164 ).forEach(([v1, exception]) => {
165 it(`should throw on ${v1}`, () => {
166 assert.throws(() => {
167 compareVersions(v1 as any, v1 as any);
168 }, exception);
169 });
170 });
171 });
172
173 runTests([
174 ['0.1.20', '0.1.5', 1],
175 ['0.6.1-1', '0.6.1-0', 1],
176 ['1', '0.0.0-beta', 1],
177 ['1', '0.2.3', 1],
178 ['1', '0.2.4', 1],
179 ['1', '1.0.0-0', 1],
180 ['1', '1.0.0-beta', 1],
181 ['1.0', '0.0.0', 1],
182 ['1.0', '0.1.0', 1],
183 ['1.0', '0.1.2', 1],
184 ['1.0.0', '0.0.0', 1],
185 ['1.0.0', '0.0.1', 1],
186 ['1.0.0', '0.2.3', 1],
187 ['1.0.0-beta.2', '1.0.0-beta.1', 1],
188 ['1.2.2', '1.2.1', 1],
189 ['2', '1.0.0', 1],
190 ['2', '1.0.0-beta', 1],
191 ['2', '1.9999.9999', 1],
192 ['2.0.0', '1.0.0', 1],
193 ['2.0.0', '1.1.1', 1],
194 ['2.0.0', '1.2.9', 1],
195 ['2.0.0', '1.9999.9999', 1],
196 ['2.3', '2.2.1', 1],
197 ['2.3', '2.2.2', 1],
198 ['2.4', '2.3.0', 1],
199 ['2.4', '2.3.5', 1],
200 ['3.2.1', '2.3.2', 1],
201 ['3.2.1', '3.2.0', 1],
202 ['v0.5.4-pre', '0.5.4-alpha', 1],
203 ['v3.2.1', 'v2.3.2', 1],
204 ]);
205 });
206
207 describe('human readable compare versions', () => {
208 const runTests = (
209 dataSet: Array<[string, string, CompareOperator, boolean]>
210 ) => {
211 dataSet.forEach(([v1, v2, operator, expected]) => {
212 it(`${v1} ${operator} ${v2}`, () =>
213 assert.strictEqual(
214 compare(v1, v2, operator),
215 expected,
216 `${v1} ${operator} ${v2} !== ${expected}`
217 ));
218 });
219 };
220
221 const runThrows = (dataSet: Array<[string, string, any, RegExp]>) => {
222 dataSet.forEach(([v1, v2, operator, expected]) => {
223 it(`${v1} ${operator} ${v2}`, () => {
224 assert.throws(() => {
225 compare(v1, v2, operator);
226 }, expected);
227 });
228 });
229 };
230
231 runThrows([
232 ['3.2.1', '3.2.0', null, /Invalid operator type, expected string but got /],
233 [
234 '3.2.1',
235 '3.2.0',
236 undefined,
237 /Invalid operator type, expected string but got /,
238 ],
239 [
240 '3.2.1',
241 '3.2.0',
242 true,
243 /Invalid operator type, expected string but got boolean/,
244 ],
245 [
246 '3.2.1',
247 '3.2.0',
248 1,
249 /Invalid operator type, expected string but got number/,
250 ],
251 [
252 '3.2.1',
253 '3.2.0',
254 { foo: 'bar' },
255 /Invalid operator type, expected string but got object/,
256 ],
257 [
258 '3.2.1',
259 '3.2.0',
260 () => {},
261 /Invalid operator type, expected string but got function/,
262 ],
263 ['3.2.1', '3.2.0', '', /Invalid operator, expected one of /],
264 ['3.2.1', '3.2.0', 'foo', /Invalid operator, expected one of /],
265 ['3.2.1', '3.2.0', '> ', /Invalid operator, expected one of /],
266 ]);
267
268 it('should throw the same Errors thrown by the main function', () => {
269 (
270 [
271 [42, /Invalid argument expected string/],
272 [{}, /Invalid argument expected string/],
273 [[], /Invalid argument expected string/],
274 [() => undefined, /Invalid argument expected string/],
275 ['6.3.', /Invalid argument not valid semver/],
276 ['1.2.3a', /Invalid argument not valid semver/],
277 ['1.2.-3a', /Invalid argument not valid semver/],
278 ] as const
279 ).forEach(([v1, exception]) => {
280 assert.throws(() => {
281 compare(v1 as any, v1 as any, '>');
282 }, exception);
283 });
284 });
285
286 runTests([
287 ['10.1.8', '10.0.4', '>', true],
288 ['10.1.8', '10.0.4', '>=', true],
289 ['10.0.1', '10.0.1', '=', true],
290 ['10.0.1', '10.1.*', '=', false],
291 ['3.3.3', '3.x.x', '<', false],
292 ['3.3.3', '3.x.x', '>=', true],
293 ['10.1.1', '10.2.2', '<', true],
294 ['10.1.1', '10.0.2', '<', false],
295 ['10.1.1', '10.2.2', '<=', true],
296 ['10.1.1', '10.1.1', '<=', true],
297 ['10.1.1', '10.0.2', '<=', false],
298 ['10.1.1', '10.0.2', '>=', true],
299 ['10.1.1', '10.1.1', '>=', true],
300 ['10.1.1', '10.2.2', '>=', false],
301 ]);
302 });
+0
-59
test/satisfies.mjs less more
0 import assert from 'assert';
1 import { satisfies } from '../index.mjs';
2
3 describe('validate versions', () => {
4 [
5 ['1.0.0', '^1', true],
6 ['1.0.0', '^1.0', true],
7 ['1.0.0', '^1.0.0', true],
8 ['1.2.0', '^1.0.0', true],
9 ['v1.2.0', '^1.0.0', true],
10 ['2.0.0', '^1.0.0', false],
11 ['1.0.0', '^1.2.0', false],
12 ['1.0.1', '^1.2.0', false],
13 ['1.3.4', '^1.2.5', true],
14 ['1.0.0', '~1.2.0', false],
15 ['1.0.0', '~1.0.1', false],
16 ['1.0.1', '~1.0.0', true],
17 ['1.3.4', '~1.2.5', false],
18 ['1.0.0', '~1.0.0', true],
19 ['1.0.0-alpha.1', '^1.0.0', true],
20 ['1.1.0-alpha.1', '^1.0.0', true],
21 ['1.2.0', '>1.0.0', true],
22 ['1.2.0', '<1.0.0', false],
23 ['1.0.0', '<=1.0.0', true],
24 ['1.0.0', '<=2.0.0', true],
25 ['1.0.1', '1.0.0', false],
26 ['1.0.0', '1.0.0', true],
27 ['10.1.8', '>10.0.4', true],
28 ['10.1.8', '>=10.0.4', true],
29 ['10.0.1', '=10.0.1', true],
30 ['10.0.1', '=10.1.*', false],
31 ['10.1.1', '<10.2.2', true],
32 ['10.1.1', '<10.0.2', false],
33 ['10.1.1', '<=10.2.2', true],
34 ['10.1.1', '<=10.1.1', true],
35 ['10.1.1', '<=10.0.2', false],
36 ['10.1.1', '>=10.0.2', true],
37 ['10.1.1', '>=10.1.1', true],
38 ['10.1.1', '>=10.2.2', false],
39 ['3', '3.x.x', true],
40 ['3.3', '3.x.x', true],
41 ['3.3.3', '3.x.x', true],
42 ['3.x.x', '3.3.3', true],
43 ['3.3.3', '3.X.X', true],
44 ['3.3.3', '3.3.x', true],
45 ['3.3.3', '3.*.*', true],
46 ['3.3.3', '3.3.*', true],
47 ['3.0.3', '3.0.*', true],
48 ['1.1.0', '1.2.x', false],
49 ['1.1.0', '2.x.x', false],
50 ['2.0.0', '<2.x.x', false],
51 ['2.0.0', '<=2.x.x', true],
52 ['2.0.0', '>2.x.x', false],
53 ].forEach(([v, m, expected]) => {
54 it(`${v} satisfies ${m}`, () => {
55 assert.equal(satisfies(v, m), expected);
56 });
57 });
58 });
0 import assert from 'assert';
1 import { satisfies } from '../src/index';
2
3 describe('validate versions', () => {
4 (
5 [
6 ['1.0.0', '^1', true],
7 ['1.0.0', '^1.0', true],
8 ['1.0.0', '^1.0.0', true],
9 ['1.2.0', '^1.0.0', true],
10 ['v1.2.0', '^1.0.0', true],
11 ['2.0.0', '^1.0.0', false],
12 ['1.0.0', '^1.2.0', false],
13 ['1.0.1', '^1.2.0', false],
14 ['1.3.4', '^1.2.5', true],
15 ['1.0.0', '~1.2.0', false],
16 ['1.0.0', '~1.0.1', false],
17 ['1.0.1', '~1.0.0', true],
18 ['1.3.4', '~1.2.5', false],
19 ['1.0.0', '~1.0.0', true],
20 ['1.0.0-alpha.1', '^1.0.0', true],
21 ['1.1.0-alpha.1', '^1.0.0', true],
22 ['1.2.0', '>1.0.0', true],
23 ['1.2.0', '<1.0.0', false],
24 ['1.0.0', '<=1.0.0', true],
25 ['1.0.0', '<=2.0.0', true],
26 ['1.0.1', '1.0.0', false],
27 ['1.0.0', '1.0.0', true],
28 ['10.1.8', '>10.0.4', true],
29 ['10.1.8', '>=10.0.4', true],
30 ['10.0.1', '=10.0.1', true],
31 ['10.0.1', '=10.1.*', false],
32 ['10.1.1', '<10.2.2', true],
33 ['10.1.1', '<10.0.2', false],
34 ['10.1.1', '<=10.2.2', true],
35 ['10.1.1', '<=10.1.1', true],
36 ['10.1.1', '<=10.0.2', false],
37 ['10.1.1', '>=10.0.2', true],
38 ['10.1.1', '>=10.1.1', true],
39 ['10.1.1', '>=10.2.2', false],
40 ['11.0.0', '>=10.1.1', true],
41 ['3', '3.x.x', true],
42 ['3.3', '3.x.x', true],
43 ['3.3.3', '3.x.x', true],
44 ['3.x.x', '3.3.3', true],
45 ['3.3.3', '3.X.X', true],
46 ['3.3.3', '3.3.x', true],
47 ['3.3.3', '3.*.*', true],
48 ['3.3.3', '3.3.*', true],
49 ['3.0.3', '3.0.*', true],
50 ['1.1.0', '1.2.x', false],
51 ['1.1.0', '2.x.x', false],
52 ['2.0.0', '<2.x.x', false],
53 ['2.0.0', '<=2.x.x', true],
54 ['2.0.0', '>2.x.x', false],
55 ] as const
56 ).forEach(([v, m, expected]) => {
57 it(`${v} satisfies ${m}`, () => {
58 assert.equal(satisfies(v, m), expected);
59 });
60 });
61 });
+0
-47
test/sort.mjs less more
0 import assert from 'assert';
1 import compareVersions from '../index.mjs';
2
3 describe('sort versions', function () {
4 it('should sort versions', function () {
5 const versions = [
6 '1.2.3',
7 '4.11.6',
8 '4.2.0',
9 '1.5.19',
10 '1.5.5',
11 '4.1.3',
12 '2.3.1',
13 '10.5.5',
14 '11.3.0',
15 ];
16
17 assert.deepEqual(versions.sort(compareVersions), [
18 '1.2.3',
19 '1.5.5',
20 '1.5.19',
21 '2.3.1',
22 '4.1.3',
23 '4.2.0',
24 '4.11.6',
25 '10.5.5',
26 '11.3.0',
27 ]);
28 });
29
30 it('should sort different digits', function () {
31 const versions = ['1.0', '1.0.0', '1.0.1'];
32
33 assert.deepEqual(versions.sort(compareVersions), ['1.0', '1.0.0', '1.0.1']);
34 });
35
36 it('should sort pre-release', function () {
37 const versions = ['1.0.0', '1.0.1', '1.0.1-gamma', '1.0.1-alpha'];
38
39 assert.deepEqual(versions.sort(compareVersions), [
40 '1.0.0',
41 '1.0.1-alpha',
42 '1.0.1-gamma',
43 '1.0.1',
44 ]);
45 });
46 });
0 import assert from 'assert';
1 import { compareVersions } from '../src/index';
2
3 describe('sort versions', function () {
4 it('should sort versions', function () {
5 const versions = [
6 '1.2.3',
7 '4.11.6',
8 '4.2.0',
9 '1.5.19',
10 '1.5.5',
11 '4.1.3',
12 '2.3.1',
13 '10.5.5',
14 '11.3.0',
15 ];
16
17 assert.deepEqual(versions.sort(compareVersions), [
18 '1.2.3',
19 '1.5.5',
20 '1.5.19',
21 '2.3.1',
22 '4.1.3',
23 '4.2.0',
24 '4.11.6',
25 '10.5.5',
26 '11.3.0',
27 ]);
28 });
29
30 it('should sort different digits', function () {
31 const versions = ['1.0', '1.0.0', '1.0.1'];
32
33 assert.deepEqual(versions.sort(compareVersions), ['1.0', '1.0.0', '1.0.1']);
34 });
35
36 it('should sort pre-release', function () {
37 const versions = ['1.0.0', '1.0.1', '1.0.1-gamma', '1.0.1-alpha'];
38
39 assert.deepEqual(versions.sort(compareVersions), [
40 '1.0.0',
41 '1.0.1-alpha',
42 '1.0.1-gamma',
43 '1.0.1',
44 ]);
45 });
46 });
+0
-32
test/validate.mjs less more
0 import assert from 'assert';
1 import { validate } from '../index.mjs';
2
3 describe('validate versions', () => {
4 [
5 [undefined, false],
6 [null, false],
7 [42, false],
8 [{}, false],
9 [[], false],
10 [() => undefined, false],
11 ['foo', false],
12 ['6.3.', false],
13 ['1.2.3a', false],
14 ['1.2.-3a', false],
15 ['v1.0.0', true],
16 ['01.0.0', true],
17 ['1.0.x', true],
18 ['1.0.0-rc.1', true],
19 ['1.0.0-alpha', true],
20 ['1.0.0-build.3928', true],
21 ['1.0.0+20130313144700', true],
22 ['1.2.3.100', true],
23 ['2020', true],
24 ['=1.0', false],
25 ['>1.0.0', false],
26 ].forEach(([v, expected]) => {
27 it(`${v}`, () => {
28 assert.equal(validate(v), expected);
29 });
30 });
31 });
0 import assert from 'assert';
1 import { validate } from '../src/index';
2
3 describe('validate versions', () => {
4 (
5 [
6 [undefined, false],
7 [null, false],
8 [42, false],
9 [{}, false],
10 [[], false],
11 [() => undefined, false],
12 ['foo', false],
13 ['6.3.', false],
14 ['1.2.3a', false],
15 ['1.2.-3a', false],
16 ['v1.0.0', true],
17 ['01.0.0', true],
18 ['1.0.x', true],
19 ['1.0.0-rc.1', true],
20 ['1.0.0-alpha', true],
21 ['1.0.0-build.3928', true],
22 ['1.0.0+20130313144700', true],
23 ['1.2.3.100', true],
24 ['2020', true],
25 ['=1.0', false],
26 ['>1.0.0', false],
27 ] as const
28 ).forEach(([v, expected]) => {
29 it(`${v}`, () => {
30 assert.equal(validate(v as any), expected);
31 });
32 });
33 });
0 {
1 "compilerOptions": {
2 "declaration": true,
3 "esModuleInterop": true,
4 "module": "UMD",
5 "noUnusedLocals": true,
6 "noUnusedParameters": true,
7 "outDir": ".",
8 "sourceMap": true,
9 "strict": true,
10 "target": "ES5"
11 },
12 "include": [
13 "src/index.ts"
14 ],
15 "exclude": [
16 "./src/test/**/*",
17 "node_modules"
18 ]
19 }