@swc/plugin-constify
v0.1.44
Published
SWC plugin for optimization
Downloads
12
Readme
@swc/constify
This plugin can be used to hoist constant parts of any expressions as constant variables, without affecting the runtime behavior or readability of the code.
Why?
There are lots of cases where some parts of expressions are constant and thus can be reused, but others are not.
Configuration
This plugin can be configured with .swcrc
{
"jsc": {
"experimental": {
"plugins": [ ["@swc/plugin-constify", {
}] ]
}
}
Usage
Basically, this plugins is about extracting some parts of expressions.
import { constify, lazyConst } from "@swc/constify";
export function call(dynamic) {
const options = [
constify({
code: 1,
onClick() {},
}),
{
code: 2,
onClick() {
console.log(dynamic);
},
},
lazyConst({
code: 3,
onClick() {},
}),
];
return options;
}
becomes
const __CONST_0__ = {
code: 1,
onClick() {},
};
function __CONST_1__() {
const __data__ = {
code: 3,
onClick() {},
};
return (__CONST_1__ = function () {
return __data__;
})();
}
export function call(dynamic) {
const options = [
__CONST_0__,
{
code: 2,
onClick() {
console.log(dynamic);
},
},
__CONST_1__(),
];
return options;
}
Note that this plugin supports using non-top-level variables. Those are hoisted to uppermost scope with the all used variable in the scope. In other words, you can write code like
import { constify, lazyConst } from "@swc/constify";
export function call(d1) {
function a(d2) {
function a1() {
return [
constify({
code: d1,
onClick() {},
}),
constify({
code: d2,
onClick() {
console.log(d2);
},
}),
lazyConst({
code: d1,
onClick() {},
}),
];
}
return a1;
}
return a;
}
and it will be compiled as
export function call(d1) {
const __CONST_0__ = {
code: d1,
onClick() {},
};
function __CONST_2__() {
const __data__ = {
code: d1,
onClick() {},
};
return (__CONST_2__ = function () {
return __data__;
})();
}
function a(d2) {
const __CONST_1__ = {
code: d2,
onClick() {
console.log(d2);
},
};
function a1() {
return [__CONST_0__, __CONST_1__, __CONST_2__()];
}
return a1;
}
return a;
}
@swc/plugin-constify
0.1.44
Patch Changes
- 4ef0b7f: Add changelog to the readme
0.1.43
Patch Changes
- 4e72680: [email protected]
0.1.42
Patch Changes
- 16bb4d8: [email protected]