TypeScript Function Inliner

TypeScript transformation that inlines calls to small functions. ⚡️

👪 All Contributors: 1 🤝 Code of Conduct: Kept 🧪 Coverage 📝 License: MIT 📦 npm version 💪 TypeScript: Strict

## 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! 💖 ## Contributors
Josh Goldberg
Josh Goldberg

💻 🤔 🚇 🚧 🔧
[^1]: See [Microsoft/TypeScript: Added some Type type predicates internally #50010](https://github.com/microsoft/TypeScript/pull/50010), which caused a 1-2% performance hit in TypeScript. > 💙 This package was templated with [create-typescript-app](https://github.com/JoshuaKGoldberg/create-typescript-app).