@@ -7,10 +7,12 @@ const semver = require("semver");
7
7
8
8
const SnapshotGenerator = require ( "./snapshot-generator" ) ;
9
9
const TnsJavaClassesGenerator = require ( "./tns-java-classes-generator" ) ;
10
+ const { getJsonFile } = require ( "./utils" ) ;
10
11
const { getPackageJson } = require ( "../../projectHelpers" ) ;
11
12
12
13
const MIN_ANDROID_RUNTIME_VERSION = "3.0.0" ;
13
14
const VALID_ANDROID_RUNTIME_TAGS = Object . freeze ( [ "next" , "rc" ] ) ;
15
+ const V8_VERSIONS_URL = "https://api.myjson.com/bins/b3s3l" ;
14
16
15
17
const resolveRelativePath = ( path ) => {
16
18
if ( path )
@@ -96,22 +98,24 @@ ProjectSnapshotGenerator.installSnapshotArtefacts = function(projectRoot) {
96
98
}
97
99
}
98
100
99
- ProjectSnapshotGenerator . prototype . getV8Version = function ( ) {
100
- const runtimeVersion = this . getAndroidRuntimeVersion ( ) ;
101
-
102
- if ( ! runtimeVersion ) {
103
- return ;
104
- } else if (
105
- VALID_ANDROID_RUNTIME_TAGS . includes ( runtimeVersion ) ||
106
-
107
- semver . gte ( runtimeVersion , "3.1.0" )
108
- ) {
109
- return "5.5.372" ;
110
- } else if ( semver . gte ( runtimeVersion , "2.4.0" ) ) {
111
- return "5.2.361" ;
112
- } else if ( semver . gte ( runtimeVersion , "2.0.0" ) ) {
113
- return "4.7.80" ;
114
- }
101
+ ProjectSnapshotGenerator . prototype . getV8Version = function ( generationOptions ) {
102
+ return new Promise ( ( resolve , reject ) => {
103
+ const maybeV8Version = generationOptions . v8Version ;
104
+ if ( maybeV8Version ) {
105
+ return resolve ( maybeV8Version ) ;
106
+ }
107
+
108
+ getJsonFile ( V8_VERSIONS_URL ) . then ( v8VersionsMap => {
109
+ const runtimeVersion = this . getAndroidRuntimeVersion ( ) . replace ( / - .* / , "" ) ;
110
+
111
+ const runtimeRange = Object . keys ( v8VersionsMap ) . find ( range => {
112
+ return semver . satisfies ( runtimeVersion , range )
113
+ } ) ;
114
+
115
+ const v8Version = v8VersionsMap [ runtimeRange ] ;
116
+ return resolve ( v8Version ) ;
117
+ } ) . catch ( reject ) ;
118
+ } ) ;
115
119
}
116
120
117
121
ProjectSnapshotGenerator . prototype . validateAndroidRuntimeVersion = function ( ) {
@@ -178,23 +182,29 @@ ProjectSnapshotGenerator.prototype.generate = function(generationOptions) {
178
182
179
183
// Generate snapshots
180
184
const generator = new SnapshotGenerator ( { buildPath : this . getBuildPath ( ) } ) ;
181
- return generator . generate ( {
182
- snapshotToolsPath,
183
- inputFile : generationOptions . inputFile || join ( this . options . projectRoot , "__snapshot.js" ) ,
184
- targetArchs : generationOptions . targetArchs || [ "arm" , "arm64" , "ia32" ] ,
185
- v8Version : generationOptions . v8Version || this . getV8Version ( ) ,
186
- preprocessedInputFile : generationOptions . preprocessedInputFile ,
187
- useLibs : generationOptions . useLibs || false ,
188
- androidNdkPath
189
- } ) . then ( ( ) => {
190
- console . log ( "Snapshots build finished succesfully!" ) ;
191
-
192
- if ( generationOptions . install ) {
193
- ProjectSnapshotGenerator . cleanSnapshotArtefacts ( this . options . projectRoot ) ;
194
- ProjectSnapshotGenerator . installSnapshotArtefacts ( this . options . projectRoot ) ;
195
- console . log ( generationOptions . useLibs ?
196
- "Snapshot is included in the app as dynamically linked library (.so file)." :
197
- "Snapshot is included in the app as binary .blob file. The more space-efficient option is to embed it in a dynamically linked library (.so file)." ) ;
198
- }
185
+
186
+ return this . getV8Version ( generationOptions ) . then ( v8Version => {
187
+ return generator . generate ( {
188
+ snapshotToolsPath,
189
+ inputFile : generationOptions . inputFile || join ( this . options . projectRoot , "__snapshot.js" ) ,
190
+ targetArchs : generationOptions . targetArchs || [ "arm" , "arm64" , "ia32" ] ,
191
+ v8Version : generationOptions . v8Version || this . getV8Version ( ) ,
192
+ preprocessedInputFile : generationOptions . preprocessedInputFile ,
193
+ useLibs : generationOptions . useLibs || false ,
194
+ androidNdkPath
195
+ } ) . then ( ( ) => {
196
+ console . log ( "Snapshots build finished succesfully!" ) ;
197
+
198
+ if ( generationOptions . install ) {
199
+ ProjectSnapshotGenerator . cleanSnapshotArtefacts ( this . options . projectRoot ) ;
200
+ ProjectSnapshotGenerator . installSnapshotArtefacts ( this . options . projectRoot ) ;
201
+ console . log ( generationOptions . useLibs ?
202
+ "Snapshot is included in the app as dynamically linked library (.so file)." :
203
+ "Snapshot is included in the app as binary .blob file. The more space-efficient option is to embed it in a dynamically linked library (.so file)." ) ;
204
+ }
205
+ } ) ;
206
+ } ) . catch ( error => {
207
+ throw new Error ( "Cannot find suitable v8 version!" ) ;
199
208
} ) ;
200
209
}
210
+
0 commit comments