[WIP] This is an experimental tree shaker for JS based on Oxc.
If this project goes well, I personally hope it can become part of the Oxc or the Rolldown project.
- Try it online: https://kermanx.github.io/tree-shaker/
- Test262 Result: Goto commits and view the latest comment
Tree shake the following code (this already works!):
export function f() {
function g(a) {
if (a)
console.log('effect')
else
return 'str'
}
let { ["x"]: y = 1 } = { x: g('') ? undefined : g(1) }
return y
}
To:
export function f() {
return 1
}
- Performance!
- JS Builtins metadata
- Pure notation support
- Test against fixtures from other tree shakers like Rollup
- Implement built-in objects and properties
- Rollup-like try-scope optimization/de-optimization
- Reuse code with oxc_minifier for JS computation logics
- Type narrowing
- Multiple-module support
- Parse the code via
oxc_parser
. - Build the semantic information via
oxc_semantic
. - Tree shake the code.
- Emulate the runtime behavior of the code. (Control flow, Side effects, ...)
- Analyze the possible runtime values of the variables.
- Remove the dead code.
- Minify the code via
oxc_minifier
. (Optional)
Entity
: Represents the analyzed information of a JS value.Consumable
: Entity or AST Nodes or some other things that the runtime value ofEntity
depends on.- Scopes:
- Call Scope: Function call scope.
- Cf Scope: Control flow scope.
- Variable Scope: Variable scope.
- Try Scope: Try statement or function.