![Build](https://img.shields.io/github/workflow/status/nadeesha/ts-prune/Run%20CI%20Pipeline) ![npm](https://img.shields.io/npm/dm/ts-prune) ![GitHub issues](https://img.shields.io/github/issues-raw/nadeesha/ts-prune) # ts-prune Find potentially unused exports in your Typescript project with zero configuration. [![asciicast](https://asciinema.org/a/liQKNmkGkedCnyHuJzzgu7uDI.svg)](https://asciinema.org/a/liQKNmkGkedCnyHuJzzgu7uDI) [![Join the chat at https://gitter.im/ts-prune/community](https://badges.gitter.im/ts-prune/community.svg)](https://gitter.im/ts-prune/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ## Getting Started `ts-prune` exposes a cli that reads your tsconfig file and prints out all the unused exports in your source files. ### Installing Install ts-prune with yarn or npm ```sh # npm npm install ts-prune --save-dev # yarn yarn add -D ts-prune ``` ### Usage You can install it in your project and alias it to a npm script in package.json. ```json { "scripts": { "find-deadcode": "ts-prune" } } ``` If you want to run against different Typescript configuration than tsconfig.json: ```sh ts-prune -p tsconfig.dev.json ``` ### Examples - [gatsby-material-starter](https://github.com/Vagr9K/gatsby-material-starter/blob/bdeba4160319c1977c83ee90e035c7fe1bd1854c/themes/material/package.json#L147) - [DestinyItemManager](https://github.com/DestinyItemManager/DIM/blob/aeb43dd848b5137656e6f47812189a2beb970089/package.json#L26) ### Configuration ts-prune supports CLI and file configuration via [cosmiconfig](https://github.com/davidtheclark/cosmiconfig#usage) (all file formats are supported). #### Configuration options - `-p, --project` - __tsconfig.json__ path(`tsconfig.json` by default) - `-i, --ignore` - errors ignore RegExp pattern - `-e, --error` - return error code if unused exports are found - `-s, --skip` - skip these files when determining whether code is used. (For example, `.test.ts?` will stop ts-prune from considering an export in test file usages) CLI configuration options: ```bash ts-prune -p my-tsconfig.json -i my-component-ignore-patterns? ``` Configuration file example `ts-prunerc`: ```json { "ignore": "my-component-ignore-patterns?" } ``` ### FAQ #### How do I get the count of unused exports? ```sh ts-prune | wc -l ``` #### How do I ignore a specific path? ```sh ts-prune | grep -v src/ignore-this-path ``` #### How do I ignore a specific identifier? You can either, ##### 1. Prefix the export with `// ts-prune-ignore-next` ```ts // ts-prune-ignore-next export const thisNeedsIgnoring = foo; ``` ##### 2. Use `grep -v` to ignore a more widely used export name ```sh ts-prune | grep -v ignoreThisThroughoutMyCodebase ``` ### Acknowledgements - The excellent [ts-morph](https://github.com/dsherret/ts-morph) library. And [this gist](https://gist.github.com/dsherret/0bae87310ce24866ae22425af80a9864) by [@dsherret](https://github.com/dsherret). ### Contributors