TypeScript Function Inliner
TypeScript transformation that inlines calls to small functions.
Explanation
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.
Example
Given the following function:
return !!value;
}
Before:
After:
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.
Usage
Per github.com/Microsoft/TypeScript/issues/14419, TSConfig plugins don't support transformers. However, you can use this in other pipelines.
Usage with Gulp
Specify it as a custom transformer with gulp-typescript:
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"));
});
Development
See .github/CONTRIBUTING.md, then .github/DEVELOPMENT.md.
Thanks!
Contributors
Josh Goldberg |
This package was templated with
create-typescript-appusing the Bingo framework.
Footnotes
-
See Microsoft/TypeScript: Added some Type type predicates internally #50010, which caused a 1-2% performance hit in TypeScript. -