1
1
'use strict' ;
2
2
const SEMVER = / (?< major > \d + ) (?: \. (?< minor > \d + ) ) ? (?: \. (?< patch > \d + ) ) ? / ;
3
3
// eslint-disable-next-line redos/no-vulnerable -- ok
4
- const SEMVER_WITH_REQUIRED_MINOR = / (?< major > \d + ) \. (?< minor > \d + ) (?: \. (?< patch > \d + ) ) ? / ;
4
+ const SEMVER_WITH_REQUIRED_MINOR_COMPONENT = / (?< major > \d + ) \. (?< minor > \d + ) (?: \. (?< patch > \d + ) ) ? / ;
5
5
6
- function semver ( input , requiredMinor ) {
6
+ function semver ( input , requiredMinorComponent ) {
7
7
if ( input instanceof semver ) return input ;
8
8
// eslint-disable-next-line new-cap -- ok
9
- if ( ! ( this instanceof semver ) ) return new semver ( input , requiredMinor ) ;
10
- const match = ( requiredMinor ? SEMVER_WITH_REQUIRED_MINOR : SEMVER ) . exec ( input ) ;
9
+ if ( ! ( this instanceof semver ) ) return new semver ( input , requiredMinorComponent ) ;
10
+
11
+ const match = ( requiredMinorComponent ? SEMVER_WITH_REQUIRED_MINOR_COMPONENT : SEMVER ) . exec ( input ) ;
12
+
11
13
if ( ! match ) {
12
14
let message = `Invalid version: ${ input } ` ;
13
- if ( requiredMinor && SEMVER . test ( input ) ) message += ', minor component required' ;
15
+ if ( requiredMinorComponent && SEMVER . test ( input ) ) message += ', minor component required' ;
14
16
throw new TypeError ( message ) ;
15
17
}
18
+
16
19
const { major, minor, patch } = match . groups ;
17
20
this . major = parseInt ( major , 10 ) ;
18
21
this . minor = minor ? parseInt ( minor , 10 ) : 0 ;
@@ -32,6 +35,35 @@ function compare($a, operator, $b) {
32
35
} return operator === '==' || operator === '<=' || operator === '>=' ;
33
36
}
34
37
38
+ function normalizeCoreJSVersion ( raw ) {
39
+ if ( ! [ 'string' , 'object' ] . includes ( typeof raw ) ) {
40
+ throw new TypeError ( '`core-js` version should be specified as a SemVer string with minor component' ) ;
41
+ }
42
+
43
+ let requiredMinorComponent = true ;
44
+
45
+ if ( raw === 'node_modules' ) {
46
+ // eslint-disable-next-line node/global-require -- ok
47
+ raw = require ( 'core-js/package.json' ) . version ;
48
+ } else if ( raw === 'package.json' ) {
49
+ requiredMinorComponent = false ;
50
+ // eslint-disable-next-line node/global-require, import/no-dynamic-require -- ok
51
+ const { dependencies, devDependencies, peerDependencies } = require ( `${ process . cwd ( ) } /package.json` ) ;
52
+ raw = dependencies ?. [ 'core-js' ] ?? devDependencies ?. [ 'core-js' ] ?? peerDependencies ?. [ 'core-js' ] ;
53
+ if ( raw === undefined ) {
54
+ throw new TypeError ( '`core-js` is not specified in your `package.json`' ) ;
55
+ }
56
+ }
57
+
58
+ const version = semver ( raw , requiredMinorComponent ) ;
59
+
60
+ if ( version . major !== 4 ) {
61
+ throw new RangeError ( 'This version of `@core-js/compat` works only with `core-js@4`' ) ;
62
+ }
63
+
64
+ return version ;
65
+ }
66
+
35
67
function filterOutStabilizedProposals ( modules ) {
36
68
const modulesSet = new Set ( modules ) ;
37
69
@@ -60,6 +92,7 @@ module.exports = {
60
92
compare,
61
93
filterOutStabilizedProposals,
62
94
intersection,
95
+ normalizeCoreJSVersion,
63
96
semver,
64
97
sortObjectByKey,
65
98
} ;
0 commit comments