ts-function-inliner
v0.2.1
Published
TypeScript transformation that inlines calls to small functions. ⚡️
Readme
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:
export function isNotFalsy(value: unknown) {
return !!value;
}Before:
export const value = isNotFalsy("Hello!");After:
export const value = !!"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.
Usage
npm i ts-function-inlinerPer 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 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"));
});Development
See .github/CONTRIBUTING.md, then .github/DEVELOPMENT.md.
Thanks! ⚡
Contributors
💝 This package was templated with
create-typescript-appusing the Bingo engine.
[^1]: See Microsoft/TypeScript: Added some Type type predicates internally #50010, which caused a 1-2% performance hit in TypeScript.
