Skip to content

Commit e654011

Browse files
committed
Update esbuild binaries and add scss binary check
1 parent 2169ecf commit e654011

6 files changed

Lines changed: 92 additions & 30 deletions

File tree

‎bundle-original/pom.xml‎

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<artifactId>esbuild-java-bundle-original</artifactId>
1111
<name>Esbuild wrapper for Java bundled with original binaries</name>
1212
<properties>
13-
<esbuild.version>0.23.0</esbuild.version>
13+
<esbuild.version>0.25.9</esbuild.version>
1414
</properties>
1515
<dependencies>
1616
<dependency>
@@ -64,11 +64,23 @@
6464
<url url="https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-${esbuild.version}.tgz" />
6565
<url url="https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-${esbuild.version}.tgz" />
6666
<url url="https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-${esbuild.version}.tgz" />
67-
<url url="https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-${esbuild.version}.tgz" />
67+
<url url="https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-${esbuild.version}.tgz" />
6868
<url url="https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-${esbuild.version}.tgz" />
6969
<url url="https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-${esbuild.version}.tgz" />
70-
<url url="https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-${esbuild.version}.tgz" />
70+
<url url="https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-${esbuild.version}.tgz" />
7171
</get>
72+
<move file="src/main/resources/darwin-arm64-${esbuild.version}.tgz"
73+
tofile="src/main/resources/macos-arm64-${esbuild.version}.tgz"
74+
failonerror="false"/>
75+
<move file="src/main/resources/darwin-x64-${esbuild.version}.tgz"
76+
tofile="src/main/resources/macos-x64-${esbuild.version}.tgz"
77+
failonerror="false"/>
78+
<move file="src/main/resources/win32-arm64-${esbuild.version}.tgz"
79+
tofile="src/main/resources/windows-arm64-${esbuild.version}.tgz"
80+
failonerror="false"/>
81+
<move file="src/main/resources/win32-x64-${esbuild.version}.tgz"
82+
tofile="src/main/resources/windows-x64-${esbuild.version}.tgz"
83+
failonerror="false"/>
7284
</target>
7385
</configuration>
7486
<goals>

‎bundle-scss/pom.xml‎

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
<name>Esbuild wrapper for Java bundled with mvnpm scss binaries</name>
1212
<packaging>jar</packaging>
1313
<properties>
14-
<esbuild.mvnpm-build.version>0.0.9</esbuild.mvnpm-build.version>
15-
<esbuild.version>0.23.0-mvnpm-${esbuild.mvnpm-build.version}</esbuild.version>
14+
<esbuild.mvnpm-build.version>0.0.10</esbuild.mvnpm-build.version>
15+
<esbuild.version>0.25.9-mvnpm-${esbuild.mvnpm-build.version}</esbuild.version>
1616
</properties>
1717
<dependencies>
1818
<dependency>
@@ -63,14 +63,27 @@
6363
<configuration>
6464
<target>
6565
<get dest="src/main/resources" skipexisting="true">
66-
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-darwin-arm64-${esbuild.version}.tgz" />
67-
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-darwin-x64-${esbuild.version}.tgz" />
68-
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-win32-x64-${esbuild.version}.tgz" />
69-
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-win32-ia32-${esbuild.version}.tgz" />
66+
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-macos-arm64-${esbuild.version}.tgz" />
67+
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-macos-x64-${esbuild.version}.tgz" />
68+
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-windows-x64-${esbuild.version}.tgz" />
69+
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-windows-arm64-${esbuild.version}.tgz" />
7070
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-linux-arm64-${esbuild.version}.tgz" />
7171
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-linux-x64-${esbuild.version}.tgz" />
72-
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-linux-ia32-${esbuild.version}.tgz" />
72+
<url url="https://github.com/mvnpm/esbuild/releases/download/v${esbuild.mvnpm-build.version}/esbuild-linux-arm64-${esbuild.version}.tgz" />
73+
7374
</get>
75+
<move file="src/main/resources/macos-arm64-${esbuild.version}.tgz"
76+
tofile="src/main/resources/darwin-arm64-${esbuild.version}.tgz"
77+
failonerror="false"/>
78+
<move file="src/main/resources/macos-x64-${esbuild.version}.tgz"
79+
tofile="src/main/resources/darwin-x64-${esbuild.version}.tgz"
80+
failonerror="false"/>
81+
<move file="src/main/resources/windows-arm64-${esbuild.version}.tgz"
82+
tofile="src/main/resources/win32-arm64-${esbuild.version}.tgz"
83+
failonerror="false"/>
84+
<move file="src/main/resources/windows-x64-${esbuild.version}.tgz"
85+
tofile="src/main/resources/win32-x64-${esbuild.version}.tgz"
86+
failonerror="false"/>
7487
</target>
7588
</configuration>
7689
<goals>

‎core/pom.xml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212

1313
<description>Small wrapper around esbuild to be able to use it in Java</description>
1414
<properties>
15-
<esbuild.mvnpm-build.version>0.0.9</esbuild.mvnpm-build.version>
16-
<esbuild.version>0.23.0-mvnpm-${esbuild.mvnpm-build.version}</esbuild.version>
15+
<esbuild.mvnpm-build.version>0.0.10</esbuild.mvnpm-build.version>
16+
<esbuild.version>0.25.9-mvnpm-${esbuild.mvnpm-build.version}</esbuild.version>
1717
</properties>
1818

1919
<dependencies>

‎core/src/main/java/io/mvnpm/esbuild/resolve/DownloadResolver.java‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package io.mvnpm.esbuild.resolve;
22

3-
import static io.mvnpm.esbuild.resolve.Resolvers.*;
3+
import static io.mvnpm.esbuild.resolve.Resolvers.CLASSIFIER;
4+
import static io.mvnpm.esbuild.resolve.Resolvers.createDestination;
5+
import static io.mvnpm.esbuild.resolve.Resolvers.extract;
6+
import static io.mvnpm.esbuild.resolve.Resolvers.getTgzPath;
7+
import static io.mvnpm.esbuild.resolve.Resolvers.requireExecutablePath;
48

59
import java.io.File;
610
import java.io.FileOutputStream;
711
import java.io.IOException;
8-
import java.io.UncheckedIOException;
912
import java.net.URL;
1013
import java.nio.channels.Channels;
1114
import java.nio.channels.ReadableByteChannel;
@@ -31,7 +34,7 @@ public Path resolve(String version) throws IOException {
3134
try {
3235
downloadFile(new URL(url), tarFile);
3336
} catch (IOException e) {
34-
throw new UncheckedIOException("could not download esbuild with version " + version, e);
37+
throw new EsbuildResolutionException("could not download esbuild with version " + version, e);
3538
}
3639
try {
3740
final File file = destination.toFile();
@@ -40,7 +43,7 @@ public Path resolve(String version) throws IOException {
4043
return requireExecutablePath(extracted);
4144
} catch (IOException e) {
4245
Files.deleteIfExists(tarFile);
43-
throw new UncheckedIOException("could not resolve esbuild with version " + version, e);
46+
throw new EsbuildResolutionException("could not resolve esbuild with version " + version, e);
4447
}
4548
}
4649

@@ -62,7 +65,7 @@ private String getDownloadUrl(String version) {
6265
if (version.contains("mvnpm")) {
6366
return MVNPM_URL_TEMPLATE.formatted(version.substring(version.lastIndexOf("-") + 1)) + tgz;
6467
}
65-
return ESBUILD_URL_TEMPLATE.formatted(CLASSIFIER) + tgz;
68+
return (ESBUILD_URL_TEMPLATE.formatted(CLASSIFIER) + tgz).replace("windows", "win32").replace("macos", "darwin");
6669
}
6770

6871
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.mvnpm.esbuild.resolve;
2+
3+
public class EsbuildResolutionException extends RuntimeException {
4+
public EsbuildResolutionException(String message) {
5+
super(message);
6+
}
7+
8+
public EsbuildResolutionException(String message, Throwable cause) {
9+
super(message, cause);
10+
}
11+
}

‎core/src/main/java/io/mvnpm/esbuild/resolve/Resolvers.java‎

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
1414
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
1515
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
16+
import org.apache.commons.io.FileUtils;
1617

1718
final class Resolvers {
1819
private static final Logger logger = Logger.getLogger(Resolvers.class.getName());
@@ -39,10 +40,29 @@ static Path resolveExecutablePath(Path bundleDir) {
3940
return bundleDir.resolve(isWindows() ? path + ".exe" : path);
4041
}
4142

42-
static Path requireExecutablePath(Path bundleDir) throws IOException {
43+
static Path resolveSassExecutablePath(Path bundleDir) {
44+
String path = "dart-sass/sass";
45+
return bundleDir.resolve(isWindows() ? path + ".bat" : path);
46+
}
47+
48+
static Path getExecutablePath(Path bundleDir) throws IOException {
4349
final Path path = resolveExecutablePath(bundleDir);
4450
if (!Files.isExecutable(path)) {
45-
throw new IOException("Invalid esbuild executable: " + path);
51+
return null;
52+
}
53+
if (bundleDir.toString().contains("-mvnpm-")) {
54+
// check for scss
55+
if (!Files.isExecutable(resolveSassExecutablePath(bundleDir))) {
56+
return null;
57+
}
58+
}
59+
return path;
60+
}
61+
62+
static Path requireExecutablePath(Path bundleDir) throws IOException {
63+
final Path path = getExecutablePath(bundleDir);
64+
if (path == null) {
65+
throw new IOException("Invalid esbuild executable in: " + bundleDir);
4666
}
4767
return path;
4868
}
@@ -63,27 +83,29 @@ private static boolean isWindows() {
6383
private static String determineClassifier() {
6484
final String osName = System.getProperty("os.name").toLowerCase();
6585
final String osArch = System.getProperty("os.arch").toLowerCase();
66-
String classifier;
67-
86+
String classifier = null;
6887
if (osName.contains("mac")) {
6988
if (osArch.equals("aarch64") || osArch.contains("arm")) {
70-
classifier = "darwin-arm64";
89+
classifier = "macos-arm64";
7190
} else {
72-
classifier = "darwin-x64";
91+
classifier = "macos-x64";
7392
}
7493
} else if (osName.contains("win")) {
75-
classifier = osArch.contains("64") ? "win32-x64" : "win32-ia32";
94+
if (osArch.equals("aarch64") || osArch.equals("arm64")) {
95+
classifier = "windows-arm64";
96+
} else if (osArch.contains("64")) {
97+
classifier = "windows-x64";
98+
}
7699
} else {
77100
if (osArch.equals("aarch64") || osArch.equals("arm64")) {
78101
classifier = "linux-arm64";
79-
} else if (osArch.contains("arm")) {
80-
classifier = "linux-arm";
81102
} else if (osArch.contains("64")) {
82103
classifier = "linux-x64";
83-
} else {
84-
classifier = "linux-ia32";
85104
}
86105
}
106+
if (classifier == null) {
107+
throw new EsbuildResolutionException("Incompatible os: '%s' and arch: '%s' for esbuild".formatted(osName, osArch));
108+
}
87109
return classifier;
88110
}
89111

@@ -93,9 +115,10 @@ static Path extract(InputStream archive, String destination) throws IOException
93115
}
94116

95117
static Path extract(InputStream archive, File destination) throws IOException {
96-
if (!destination.exists()) {
97-
destination.mkdirs();
118+
if (destination.isDirectory() && destination.exists()) {
119+
FileUtils.deleteDirectory(destination);
98120
}
121+
destination.mkdirs();
99122

100123
try (GzipCompressorInputStream gzipIn = new GzipCompressorInputStream(archive);
101124
TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipIn)) {

0 commit comments

Comments
 (0)