caoccao / swc4j

swc4j (SWC for Java) is an ultra-fast JavaScript and TypeScript compilation and bundling tool on JVM.
Apache License 2.0
30 stars 1 forks source link
compiler java javascript javet jsx parser rust swc transpile transpiler tsc tsx typescript

swc4j

Maven Central Discord

swc4j Build

swc4j (SWC for Java) is an ultra-fast JavaScript and TypeScript compilation and bundling tool on JVM. It is part of the Javet portfolio serving the processing of JavaScript and TypeScript code before the code is executed in Node.js or V8 on JVM.

swc4j and Javet

Features

Quick Start

Dependency

<!-- Maven -->
<dependency>
    <groupId>com.caoccao.javet</groupId>
    <artifactId>swc4j</artifactId>
    <version>0.9.0</version>
</dependency>
// Gradle Kotlin DSL
implementation("com.caoccao.javet:swc4j:0.9.0")
// Gradle Groovy DSL
implementation 'com.caoccao.javet:swc4j:0.9.0'

Transpile

// Prepare a simple TypeScript code snippet.
String code = "function add(a:number, b:number) { return a+b; }";
// Prepare a script name.
URL specifier = new URL("file:///abc.ts");
// Prepare an option with script name and media type.
Swc4jTranspileOptions options = new Swc4jTranspileOptions()
        .setSpecifier(specifier)
        .setMediaType(Swc4jMediaType.TypeScript);
// Transpile the code.
Swc4jTranspileOutput output = new Swc4j().transpile(code, options);
// Print the transpiled code.
System.out.println(output.getCode());
function add(a, b) {
  return a + b;
}
//# sourceMappingURL=data:application/json;base64,...

Sanitize

JavetSanitizerStatementListChecker checker = new JavetSanitizerStatementListChecker();

// 1. Check if keyword const can be used.
String codeString = "const a = 1;";
checker.check(codeString);
System.out.println("1. " + codeString + " // Valid.");

// 2. Check if keyword var can be used.
codeString = "var a = 1;";
try {
    checker.check(codeString);
} catch (JavetSanitizerException e) {
    System.out.println("2. " + codeString + " // Invalid: " + e.getMessage());
}

// 3. Check if Object is mutable.
codeString = "Object = {};";
try {
    checker.check(codeString);
} catch (JavetSanitizerException e) {
    System.out.println("3. " + codeString + " // Invalid: " + e.getMessage());
}
1. const a = 1; // Valid.
2. var a = 1; // Invalid: Keyword var is not allowed.
3. Object = {}; // Invalid: Identifier Object is not allowed.

Docs

Blog

License

APACHE LICENSE, VERSION 2.0