1
- var semver = require ( 'semver' )
2
-
3
- function getNextTarget ( runtime , targets ) {
4
- if ( targets == null ) targets = allTargets
5
- var latest = targets . filter ( function ( t ) { return t . runtime === runtime } ) . slice ( - 1 ) [ 0 ]
6
- var increment = runtime === 'electron' ? 'minor' : 'major'
7
- var next = semver . inc ( latest . target , increment )
8
- // Electron releases appear in the registry in their beta form, sometimes there is
9
- // no active beta line. During this time we need to double bump
10
- if ( runtime === 'electron' && semver . parse ( latest . target ) . prerelease . length ) {
11
- next = semver . inc ( next , 'major' )
12
- }
13
- return next
14
- }
1
+ import fs from 'node:fs' ;
2
+ import path from 'node:path' ;
3
+ import { fileURLToPath } from 'node:url' ;
4
+
5
+ import semver from 'semver' ;
6
+
7
+ import { getNextTarget } from './getNextTarget.js' ;
15
8
16
- function getAbi ( target , runtime ) {
9
+ export function getAbi ( target , runtime ) {
17
10
if ( target === String ( Number ( target ) ) ) return target
18
11
if ( target ) target = target . replace ( / ^ v / , '' )
19
12
if ( ! runtime ) runtime = 'node'
@@ -23,37 +16,37 @@ function getAbi (target, runtime) {
23
16
if ( target === process . versions . node ) return process . versions . modules
24
17
}
25
18
26
- var abi
27
- var lastTarget
19
+ let abi
20
+ let lastTarget
28
21
29
- for ( var i = 0 ; i < allTargets . length ; i ++ ) {
30
- var t = allTargets [ i ]
22
+ for ( let i = 0 ; i < allTargets . length ; i ++ ) {
23
+ const t = allTargets [ i ]
31
24
if ( t . runtime !== runtime ) continue
32
25
if ( semver . lte ( t . target , target ) && ( ! lastTarget || semver . gte ( t . target , lastTarget ) ) ) {
33
26
abi = t . abi
34
27
lastTarget = t . target
35
28
}
36
29
}
37
30
38
- if ( abi && semver . lt ( target , getNextTarget ( runtime ) ) ) return abi
31
+ if ( abi && semver . lt ( target , getNextTarget ( runtime , allTargets ) ) ) return abi
39
32
throw new Error ( 'Could not detect abi for version ' + target + ' and runtime ' + runtime + '. Updating "node-abi" might help solve this issue if it is a new release of ' + runtime )
40
33
}
41
34
42
- function getTarget ( abi , runtime ) {
35
+ export function getTarget ( abi , runtime ) {
43
36
if ( abi && abi !== String ( Number ( abi ) ) ) return abi
44
37
if ( ! runtime ) runtime = 'node'
45
38
46
39
if ( runtime === 'node' && ! abi ) return process . versions . node
47
40
48
- var match = allTargets
41
+ const match = allTargets
49
42
. filter ( function ( t ) {
50
43
return t . abi === abi && t . runtime === runtime
51
44
} )
52
45
. map ( function ( t ) {
53
46
return t . target
54
47
} )
55
48
if ( match . length ) {
56
- var betaSeparatorIndex = match [ 0 ] . indexOf ( "-" )
49
+ const betaSeparatorIndex = match [ 0 ] . indexOf ( "-" )
57
50
return betaSeparatorIndex > - 1
58
51
? match [ 0 ] . substring ( 0 , betaSeparatorIndex )
59
52
: match [ 0 ]
@@ -63,31 +56,31 @@ function getTarget (abi, runtime) {
63
56
}
64
57
65
58
function sortByTargetFn ( a , b ) {
66
- var abiComp = Number ( a . abi ) - Number ( b . abi )
59
+ const abiComp = Number ( a . abi ) - Number ( b . abi )
67
60
if ( abiComp !== 0 ) return abiComp
68
61
if ( a . target < b . target ) return - 1
69
62
if ( a . target > b . target ) return 1
70
63
return 0
71
64
}
72
65
73
66
function loadGeneratedTargets ( ) {
74
- var registry = require ( './ abi_registry.json')
75
- var targets = {
67
+ const registry = JSON . parse ( fs . readFileSync ( path . join ( path . dirname ( fileURLToPath ( import . meta . url ) ) , ' abi_registry.json') , 'utf8' ) )
68
+ const targets = {
76
69
supported : [ ] ,
77
70
additional : [ ] ,
78
71
future : [ ]
79
72
}
80
73
81
74
registry . forEach ( function ( item ) {
82
- var target = {
75
+ const target = {
83
76
runtime : item . runtime ,
84
77
target : item . target ,
85
78
abi : item . abi
86
79
}
87
80
if ( item . lts ) {
88
- var startDate = new Date ( Date . parse ( item . lts [ 0 ] ) )
89
- var endDate = new Date ( Date . parse ( item . lts [ 1 ] ) )
90
- var currentDate = new Date ( )
81
+ const startDate = new Date ( Date . parse ( item . lts [ 0 ] ) )
82
+ const endDate = new Date ( Date . parse ( item . lts [ 1 ] ) )
83
+ const currentDate = new Date ( )
91
84
target . lts = startDate < currentDate && currentDate < endDate
92
85
} else {
93
86
target . lts = false
@@ -109,9 +102,9 @@ function loadGeneratedTargets () {
109
102
return targets
110
103
}
111
104
112
- var generatedTargets = loadGeneratedTargets ( )
105
+ const generatedTargets = loadGeneratedTargets ( )
113
106
114
- var supportedTargets = [
107
+ export const supportedTargets = [
115
108
{ runtime : 'node' , target : '5.0.0' , abi : '47' , lts : false } ,
116
109
{ runtime : 'node' , target : '6.0.0' , abi : '48' , lts : false } ,
117
110
{ runtime : 'node' , target : '7.0.0' , abi : '51' , lts : false } ,
@@ -129,22 +122,20 @@ var supportedTargets = [
129
122
{ runtime : 'electron' , target : '2.0.0' , abi : '57' , lts : false } ,
130
123
{ runtime : 'electron' , target : '3.0.0' , abi : '64' , lts : false } ,
131
124
{ runtime : 'electron' , target : '4.0.0' , abi : '64' , lts : false } ,
132
- { runtime : 'electron' , target : '4.0.4' , abi : '69' , lts : false }
125
+ { runtime : 'electron' , target : '4.0.4' , abi : '69' , lts : false } ,
126
+ ...generatedTargets . supported
133
127
]
134
128
135
- supportedTargets . push . apply ( supportedTargets , generatedTargets . supported )
136
-
137
- var additionalTargets = [
129
+ export const additionalTargets = [
138
130
{ runtime : 'node-webkit' , target : '0.13.0' , abi : '47' , lts : false } ,
139
131
{ runtime : 'node-webkit' , target : '0.15.0' , abi : '48' , lts : false } ,
140
132
{ runtime : 'node-webkit' , target : '0.18.3' , abi : '51' , lts : false } ,
141
133
{ runtime : 'node-webkit' , target : '0.23.0' , abi : '57' , lts : false } ,
142
- { runtime : 'node-webkit' , target : '0.26.5' , abi : '59' , lts : false }
134
+ { runtime : 'node-webkit' , target : '0.26.5' , abi : '59' , lts : false } ,
135
+ ...generatedTargets . additional
143
136
]
144
137
145
- additionalTargets . push . apply ( additionalTargets , generatedTargets . additional )
146
-
147
- var deprecatedTargets = [
138
+ export const deprecatedTargets = [
148
139
{ runtime : 'node' , target : '0.2.0' , abi : '1' , lts : false } ,
149
140
{ runtime : 'node' , target : '0.9.1' , abi : '0x000A' , lts : false } ,
150
141
{ runtime : 'node' , target : '0.9.9' , abi : '0x000B' , lts : false } ,
@@ -162,18 +153,9 @@ var deprecatedTargets = [
162
153
{ runtime : 'electron' , target : '0.33.0' , abi : '46' , lts : false }
163
154
]
164
155
165
- var futureTargets = generatedTargets . future
156
+ export const futureTargets = generatedTargets . future
166
157
167
- var allTargets = deprecatedTargets
158
+ export const allTargets = deprecatedTargets
168
159
. concat ( supportedTargets )
169
160
. concat ( additionalTargets )
170
161
. concat ( futureTargets )
171
-
172
- exports . getAbi = getAbi
173
- exports . getTarget = getTarget
174
- exports . deprecatedTargets = deprecatedTargets
175
- exports . supportedTargets = supportedTargets
176
- exports . additionalTargets = additionalTargets
177
- exports . futureTargets = futureTargets
178
- exports . allTargets = allTargets
179
- exports . _getNextTarget = getNextTarget
0 commit comments