TypeScript transformation that inlines calls to small functions. ⚡️
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! 💖
Josh Goldberg 💻 🤔 🚇 🚧 🔧 |
💙 This package was templated with create-typescript-app.
Footnotes
-
See Microsoft/TypeScript: Added some Type type predicates internally #50010, which caused a 1-2% performance hit in TypeScript. ↩