Skip to content
This repository has been archived by the owner on Aug 10, 2020. It is now read-only.

JoshuaKGoldberg/tsc-fancy

Repository files navigation

tsc-fancy

Build Status npm version Downloads

✨ Snazzy utilities around the TypeScript CLI. ✨

npm install --global tsc-fancy

tsc-fancy

Or for the terse:

tscf

What?

Some user-requested features are too esoteric for TypeScript to add them. That's fine! We can just stick them here, outside of the main repository. 🔥

Everything passed to the tsc-fancy CLI that it doesn't recognize is given directly to tsc. Thus, you can use tsc-fancy as a drop-in replacement for tsc.

CLI Flags

--preserveConsoleOutput

Use with tsc's -w/--watch mode to stop it from clearing the screen on recompiles. This is useful for tools such as monorepo build aggregators that run multiple tsc instances at once.

> tsc-fancy --preserveConsoleOutput --pretty --watch

[1:23:45 PM] Compilation complete. Watching for file changes.
[1:23:56 PM] File change detected. Starting incremental compilation...
[1:23:56 PM] Compilation complete. Watching for file changes.

See TypeScript#21295.

--preserveConsoleOutput uses --replace logic under the hood to remove the console clearing character \x1Bc / \u001bc.

--replace

Replaces TSC characters with your own. Each replacement is converted to a RegExp with the /gi flag.

> tsc-fancy --replace error "Oh dearest me!" --pretty false

src/file.ts(1,5): Oh dearest me! TS2322: Type '"no"' is not assignable to type 'number'.
src/file.ts(2,5): Oh dearest me! TS2322: Type '"yes"' is not assignable to type 'number'.

--tsc

Alias of the tsc executable to exec, if not "tsc".

> tsc-fancy --tsc ../TypeScript/built/local/tsc.js

Programmatic Usage

This package exposes an execTsc method that takes in an options object and returns the spawned ChildProcess.

import { execTsc } from "tsc-fancy";

execTsc()
    .on("close", (code: number) => {
        console.log("All done! Exit code:", code);
    });
    .on("error", (error: error) => {
        console.log("Oh no! Error:", error);
    });

The options object's type is exported as ExecTscOptions.

args: string[]

Arguments to directly pass to tsc.

execTsc({
    args: ["--p", ".", "--watch"],
});

In CLI usage, these are everything not known by tsc-fancy.

replacers: Map<RegExp, string>

Regular expressions with text to replace them with.

execTsc({
    replacers: new Map([
        [/error/gi, "Oh dearest me!"],
    ]),
});

tsc: string

Alias of the tsc executable to exec, if not "tsc".

execTsc({
    tsc: "../TypeScript/built/local/tsc.js",
});

Contributing

🙌 See Contributing.md. 🙌