TypeScript transformation that inlines calls to small functions. ⚡️
MIT License
Many projects choose to extract common shared logic into small helper functions. TypeScript projects often use small user-defined type guards to inform type narrowing. Unfortunately, the overhead of extracting logic into functions can hurt application performance before JIT optimizers fully kick in.[^1]
This TypeScript transformation plugin detects calls to small one-line functions and inlines them in the output JavaScript. The resultant code will function the same regardless of the transformation.
Given the following function:
export function isNotFalsy(value: unknown) {
return !!value;
}
Before:
isNotFalsy("Hello!");
After:
!!"Hello!";
Note: this transformer does not remove the original function declarations. Use a separate tool after the transform, such as Terser, if you'd like to configure that.
npm i ts-function-inliner
Per github.com/Microsoft/TypeScript/issues/14419, TSConfig plugins don't support transformers. However, you can use this in other pipelines.
Specify it as a custom transformer with gulp-typescript:
import gulp from "gulp";
import ts from "gulp-typescript";
import { transformerProgram } from "ts-function-inliner";
gulp.task("typescript", function () {
gulp
.src("src/**/*.ts")
.pipe(
ts({
getCustomTransformers: (program) => ({
before: [transformerProgram(program)],
}),
}),
)
.pipe(gulp.dest("lib"));
});
See .github/CONTRIBUTING.md
.
Thanks! 💖
[^1]: See Microsoft/TypeScript: Added some Type type predicates internally #50010, which caused a 1-2% performance hit in TypeScript.
💙 This package was templated with create-typescript-app.