Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

TypeScript transformation that inlines calls to small functions.

License

Notifications You must be signed in to change notification settings

JoshuaKGoldberg/ts-function-inliner

Repository files navigation

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:

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-inliner

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 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


Josh Goldberg

This package was templated with create-typescript-app using the Bingo framework.

Footnotes

  1. See Microsoft/TypeScript: Added some Type type predicates internally #50010, which caused a 1-2% performance hit in TypeScript. -

About

TypeScript transformation that inlines calls to small functions.

Resources

Readme

License

MIT license

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

Contributors