swc4j
swc4j copied to clipboard
swc4j (SWC for Java) is an ultra-fast JavaScript and TypeScript compilation and bundling tool on JVM.
swc4j
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.
Features
- Linux + MacOS + Windows
- JavaScript, TypeScript, JSX, TSX, etc.
-
Parse
-
AST
- Visitor
- Plugin
- Comments
- Tokens
-
AST
-
Transform
- Minify
- Multiple Target ES Version
- Source Map
-
Transpile
- TS → JS
- JSX → JS
- TSX → JS
- Source Map
-
Sanitizer
- Built-in Object Protection
- Keyword Restriction
- Function Restriction
- Identifier Restriction
- Identifier Deletion
- Identifier Freeze
- Identifier Naming Convention
Quick Start
Dependency
- Add the following dependency to your project or download a snapshot build from the Actions.
<!-- 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
- Run the following Java code to transpile TypeScript to JavaScript.
// 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());
- The transpiled JavaScript code and inline source map are as follows.
function add(a, b) {
return a + b;
}
//# sourceMappingURL=data:application/json;base64,...
Sanitize
- Run the following Java code to sanitize the JavaScript code.
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());
}
- The output is as follows.
1. const a = 1; // Valid.
2. var a = 1; // Invalid: Keyword var is not allowed.
3. Object = {}; // Invalid: Identifier Object is not allowed.
Docs
- Tutorials
- Release Notes
Blog
- Run TypeScript Directly in Java
- Hello Swc4j, Goodbye Antlr
- How to Compromise V8 on JVM
- Write SWC Plugins in Java: Part 1, Part 2, Part 3
License
APACHE LICENSE, VERSION 2.0