mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-15 02:44:47 +01:00
99 lines
3.3 KiB
Java
99 lines
3.3 KiB
Java
/*
|
|
* Copyright 2020 - 2022 Volker Berlin (i-net software)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package de.inetsoftware.jwebassembly;
|
|
|
|
import static de.inetsoftware.jwebassembly.SpiderMonkey.extractStream;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.URL;
|
|
import java.text.MessageFormat;
|
|
|
|
/**
|
|
* Download the node tool.
|
|
*
|
|
* @author Volker Berlin
|
|
*/
|
|
public class Node {
|
|
|
|
private String command;
|
|
|
|
private static final String BASE_URL = "https://nodejs.org/download/v8-canary/";
|
|
|
|
private static final String REVISION = "17.0.0-v8-canary20211019bcdcfc880b";
|
|
|
|
/**
|
|
* Check if there is a new version of the script engine
|
|
*
|
|
* @throws IOException
|
|
* if any error occur
|
|
*/
|
|
private void download() throws IOException {
|
|
String fileName;
|
|
String ext;
|
|
final String os = System.getProperty( "os.name", "" ).toLowerCase();
|
|
if( os.contains( "windows" ) ) {
|
|
boolean is32 = "32".equals( System.getProperty( "sun.arch.data.model" ) );
|
|
fileName = is32 ? "win-x86" : "win-x64";
|
|
ext = "zip";
|
|
} else if( os.contains( "mac" ) ) {
|
|
fileName = "darwin-x64";
|
|
ext = "tar.gz";
|
|
} else if( os.contains( "linux" ) ) {
|
|
fileName = "linux-x64";
|
|
ext = "tar.gz";
|
|
} else {
|
|
throw new IllegalStateException( "Unknown OS: " + os );
|
|
}
|
|
String urlStr = MessageFormat.format( "{0}v{1}/node-v{1}-{2}.{3}", BASE_URL, REVISION, fileName, ext );
|
|
|
|
File target = new File( System.getProperty( "java.io.tmpdir" ) + "/node" );
|
|
File commandDir = new File( target.getAbsolutePath() + MessageFormat.format( "/node-v{1}-{2}", BASE_URL, REVISION, fileName, ext ) );
|
|
|
|
if( commandDir.isDirectory() && commandDir.list().length > 1 ) {
|
|
// no download needed
|
|
System.out.println( "\tUP-TP-DATE, use version from " + commandDir );
|
|
} else {
|
|
URL url = new URL( urlStr );
|
|
System.out.println( "\tDownload: " + url );
|
|
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
|
|
conn.setConnectTimeout( 5000 );
|
|
|
|
InputStream input = conn.getInputStream();
|
|
|
|
extractStream( input, "tar.gz".equals( ext ), target );
|
|
}
|
|
|
|
command = commandDir.getAbsolutePath();
|
|
}
|
|
|
|
/**
|
|
* Get the node command. If file not exists then download it.
|
|
*
|
|
* @return the path to the executable
|
|
* @throws IOException
|
|
* if any I/O error occur
|
|
*/
|
|
public String getNodeDir() throws IOException {
|
|
if( command == null ) {
|
|
download();
|
|
}
|
|
return command;
|
|
}
|
|
}
|