Research
Security News
Malicious PyPI Package ‘pycord-self’ Targets Discord Developers with Token Theft and Backdoor Exploit
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
ts-transformer-optimize-const-enum
Advanced tools
A TypeScript transformer that optimize exported const enum into object literal
A typescript transpiler that transform exported const enum into object literal.
This is just like the one from @babel/preset-typescript with optimizeConstEnums: true but it works for typescript compiler.
This will transform exported const enum from
export const enum MyEnum {
A,
B,
C,
D = 10,
E = C * 200
}
into object literal like this
export const MyEnum {
A: 0,
B: 1,
C: 2,
D: 10,
E: 400
} as const
and it also strips const
in declaration file, to make your code compatible with --isolatedModules
// my-enum.d.ts
declare enum MyEnum { A: 0, ... }
Const enum can only works in the same file. It works by inlining the exact value into code. With isolateModules, you can't use the exported const enum. The solution is to enable preserveConstEnums option to convert const enum to regular enum.
However, the regular enum compiles to
export var MyEnum;
(function(MyEnum) {
MyEnum[MyEnum['A'] = 0] = 'A';
MyEnum[MyEnum['B'] = 1] = 'B';
MyEnum[MyEnum['C'] = 2] = 'C';
MyEnum[MyEnum['D'] = 10] = 'D';
MyEnum[MyEnum['E'] = 400] = 'E';
})(MyEnum || (MyEnum = {}));
which is ugly and waste a lot of bytes. Not only can't you take advantage of enum inlining, but it also wastes a lot of bytes. That's why this transform existed.
If you use vanilla TypeScript compiler, you can use this with ttypescript and compile with ttsc
instead of tsc
// tsconfig.json
{
"compilerOptions": {
// ...
"plugins": [
{ "transform": "ts-transformer-optimize-const-enum" },
{ "transform": "ts-transformer-optimize-const-enum", "afterDeclarations": true },
]
},
// ...
}
The afterDeclarations part is to strip out const keyword from declaration file.
// webpack.config.js
const optimizeConstEnum = require('ts-transformer-optimize-const-enum').default;
module.exports = {
// ...
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader', // or 'awesome-typescript-loader'
options: {
getCustomTransformers: program => ({
before: [
optimizeConstEnum(program),
],
afterDeclarations: [
optimizeConstEnum(program),
],
}),
},
},
],
},
};
// rollup.config.js
import typescript from 'rollup-plugin-typescript2';
import optimizeConstEnum from 'ts-transformer-optimize-const-enum';
export default {
// ...
plugins: [
typescript({
transformers: [service => ({
before: [
optimizeConstEnum(service.getProgram()),
],
afterDeclarations: [
optimizeConstEnum(service.getProgram()),
],
})],
}),
],
};
Currently, only immediate export const enum works. For example: This will be fixed in later version.
// The following works
export const enum WorkingEnum {}
// The following doesn't work
const enum FailingEnum {}
export FailEnum;
FAQs
A TypeScript transformer that optimize exported const enum into object literal
The npm package ts-transformer-optimize-const-enum receives a total of 147 weekly downloads. As such, ts-transformer-optimize-const-enum popularity was classified as not popular.
We found that ts-transformer-optimize-const-enum demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.
Security News
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.