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](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates) 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: ```ts export function isNotFalsy(value: unknown) { return !!value; } ``` Before: ```ts isNotFalsy("Hello!"); ``` After: ```ts !!"Hello!"; ``` > Note: this transformer does not remove the original function declarations. > Use a separate tool after the transform, such as [Terser](https://github.com/terser/terser), if you'd like to configure that. ## Usage ```shell npm i ts-function-inliner ``` Per [github.com/Microsoft/TypeScript/issues/14419](https://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](https://github.com/ivogabe/gulp-typescript): ```ts 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`](./.github/CONTRIBUTING.md). Thanks! ð ## ContributorsJosh Goldberg ð» ð¤ ð ð§ ð§ |