# @ts-tools/robotrix

> Useful TypeScript transpilation transformers.

Latest version **7.0.0** (published 2026-07-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install @ts-tools/robotrix
pnpm add @ts-tools/robotrix
yarn add @ts-tools/robotrix
bun add @ts-tools/robotrix
```

## Health

**Score 60/100 (C)** — status: active.

Positive: esm support; no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads; no types.

## Facts

| | |
|---|---|
| Version | 7.0.0 |
| Published | 2026-07-09 |
| First published | 2018-09-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Node | >=22 |
| Dependencies | 0 |
| Unpacked size | 68 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 171 |
| Author | Avi Vahl |
| Maintainers | avi.vahl |

## Links

- npm: https://www.npmjs.com/package/@ts-tools/robotrix
- Repository: https://github.com/AviVahl/ts-tools
- Issues: https://github.com/AviVahl/ts-tools/issues
- npm.io page: https://npm.io/package/@ts-tools/robotrix

## Recent versions

- 7.0.0 (latest) — 2026-07-09
- 6.1.0 — 2024-12-13
- 6.0.0 — 2024-08-19
- 5.0.2 — 2023-08-24
- 5.0.1 — 2023-07-20
- 5.0.0 — 2023-07-19
- 4.0.0 — 2022-05-09
- 3.0.1 — 2021-06-26
- 3.0.0 — 2020-09-04
- 2.1.0 — 2020-08-12
- 2.0.0 — 2020-07-21
- 1.0.4 — 2020-02-21
- 1.0.3 — 2020-02-04
- 1.0.2 — 2020-02-04
- 1.0.1 — 2020-01-29
- … 14 more at https://npm.io/package/@ts-tools/robotrix/versions

## README

# @ts-tools/robotrix

[![npm version](https://img.shields.io/npm/v/@ts-tools/robotrix.svg)](https://www.npmjs.com/package/@ts-tools/robotrix)

Useful [TypeScript](https://www.typescriptlang.org/) transpilation transformers.

## Getting started

Install the library:

```
npm i @ts-tools/robotrix
```

## Transformers

### Node Env Transformer

Replaces `process.env.[PARAM]` expressions with string literals, using provided `env`.

```ts
import ts from 'typescript';
import { createNodeEnvTransformer } from '@ts-tools/robotrix';

const nodeEnvTransformer = createNodeEnvTransformer(process.env);

const transpileOutput = ts.transpileModule(code, { transformers: { before: [nodeEnvTransformer] } });
```

### React Dev Transformer

Adds meta-data which is used by `React` for development error messages.

It adds the following attributes to all JSX elements:

- `__self={this}`
- `__source={{ fileName: __jsxFileName, lineNumber: [jsx line number], pos: [jsx node position], end: [jsx node end] }}`

if `__source` was added, the following declaration is prepended to source file: `const __jsxFileName = [absolute file path]`

```ts
import ts from 'typescript';
import { reactDevTransformer } from '@ts-tools/robotrix';

const transpileOutput = ts.transpileModule(code, { transformers: { before: [reactDevTransformer] } });
```

### Dead Ifs Transformer

Detects and removes dead `if` branches. Checks the expression of every `if` statement, and cancels out always falsy branches.

It detects `true`, `false`, and basic string equality comparison (`==`, `===`, `!=`, `!==`).

```ts
import ts from 'typescript';
import { deadIfsTransformer } from '@ts-tools/robotrix';

const transpileOutput = ts.transpileModule(code, { transformers: { before: [deadIfsTransformer] } });
```

### Remap Imports Transformer

Remaps targets of `esnext`'s static or dynamic imports/re-exports.

```ts
import ts from 'typescript';
import { createRemapImportsTransformer } from '@ts-tools/robotrix';

const remapImportsTransformer = createRemapImportsTransformer({
  remapTarget(target: string, containingFile: string): string {
    // remaps 'lodash' to 'lodash-es'
    // all others targets are untouched
    return target === 'lodash' ? 'lodash-es' : target;
  },
});

const transpileOutput = ts.transpileModule(code, { transformers: { before: [remapImportsTransformer] } });
```

### CommonJS to ESM Transformer

Transforms CommonJS calls/exports to ESM syntax.
If a source file is identified as using `require`, `module`, or `exports`, it is wrapped with the following:

```ts
[generated imports]

let exports = {}, module = { exports }

[original code]

export default module.exports
```

Each `require(...)` call with a string request is converted to a generated import statement with a unique identifier.

```ts
import ts from 'typescript';
import { createCjsToEsmTransformer } from '@ts-tools/robotrix';

const cjsToEsmTransformer = createCjsToEsmTransformer();
const transpileOutput = ts.transpileModule(code, { transformers: { before: [cjsToEsmTransformer] } });
```

`createCjsToEsmTransformer()` also accepts an optional options object, where one can currently specify
`shouldTransform` to control whether to transform `require(...)` calls based on their target.

```ts
const blacklisted = new Set(['fs', 'another', 'etc']);

// doesn't convert any require(...) calls that target items in blacklisted
const cjsToEsmTransformer = createCjsToEsmTransformer({
  shouldTransform: (request) => !blacklisted.has(request),
});
```

### Resolved Modules Transformer

Remaps static/dynamic esm imports/re-exports to the actual files resolved by TypeScript.
It ignores relative targets (`./` or `../`) or ones resolved to definition (`.d.ts`) files.

Unlike other transformers in **robotrix**, this transformer requires TypeScript to resolve imports
as part of a typed-checked transpilation (where a `ts.Program` is involved). This means
it can be used when creating a custom `ts.LanguageService` and specifying `getCustomTransformers()`
during host creation.

```ts
import ts from 'typescript';
import { resolvedModulesTransformer } from '@ts-tools/robotrix';

const languageServiceHost: ts.LanguageServiceHost = {
  getCustomTransformers() {
    return {
      before: [resolvedModulesTransformer],
    };
  },
  // ...rest of the host implementation is up to you
};

const languageService = ts.createLanguageService(languageServiceHost);
```

## License

MIT

---
_Source: https://npm.io/package/@ts-tools/robotrix · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
