Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nadeesha/ts-prune
Find unused exports in a typescript project. 🛀
https://github.com/nadeesha/ts-prune
typescript utility
Last synced: 8 days ago
JSON representation
Find unused exports in a typescript project. 🛀
- Host: GitHub
- URL: https://github.com/nadeesha/ts-prune
- Owner: nadeesha
- License: mit
- Archived: true
- Created: 2019-04-26T22:46:36.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-12-04T14:27:46.000Z (about 1 year ago)
- Last Synced: 2024-04-14T07:10:44.841Z (10 months ago)
- Topics: typescript, utility
- Language: TypeScript
- Homepage:
- Size: 1.53 MB
- Stars: 2,027
- Watchers: 6
- Forks: 68
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-tech-list - TS Prune - Find potentially unused exports in your Typescript project with zero configuration. (TypeScript / Email)
- awesome-javascript - ts-prune
- awesome-javascript - ts-prune
README
![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 is going into maintanence mode
Please use [knip](https://github.com/webpro/knip) which carries on the spirit.
More details
I started ts-prune to find a sustainable way to detect unused exports in Typescript code. Due to the absence of native APIs that enable this, the best way forward was to consolidate a few hacks together that did this semi-elegantly for _most_ usecases.
However, due to the popularity of ts-prune, it has absorbed more use cases, and complexity has bloated to the point that I'm no longer comfortable to add more features or do any other changes to the core system.
The most important thing for ts-prune is to be backwards compatible and reliable for existing use cases.
## What will happen
- Critical bug fixes
- Patching vulnerabilities in third party code## What will not happen
- Entertaining feature requests
- Accepting PRs for net new features of refactors## Notes for the future
- This is a feature Typescript should support natively, and each "hack" has a bunch of trade-offs.
- Due to the sheer fragmentation of TS/JS ecosystem between frameworks, package managers etc a non-native solution will result in complexity bloat.
- At this point, the maintainer has two choices
1. Aggresively defend against feature requests, changes and anger the open-source community
2. Accept complexity bloat, and dedicate time and energy for compaction
# 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)
- `-u, --unusedInModule` - skip files that are used in module (marked as `used in module`)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?
You can either,
##### 1. Use the `-i, --ignore` configuration option:
```sh
ts-prune --ignore 'src/ignore-this-path'
```##### 2. Use `grep -v` to filter the output:
```sh
ts-prune | grep -v src/ignore-this-path
```#### How do I ignore multiple paths?
You can either,
##### 1. Use the `-i, --ignore` configuration option:
```sh
ts-prune --ignore 'src/ignore-this-path|src/also-ignore-this-path'
```##### 2. Use multiple `grep -v` to filter the output:
```sh
ts-prune | grep -v src/ignore-this-path | grep -v src/also-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
Nadeesha Cabral
Snyk bot
Dan Vanderkam
Josh Goldberg ✨
Vitaly Iegorov
Amir Arad
Ashok Argent-Katwala
Caleb Peterson
David Graham
Davis Ford
Hugo Duprat
Ivo Raisr
Jacob Bandes-Storch
Kristján Oddsson
Mikhail Belyaev
Reece Daniels
Simon Jang
The Gitter Badger
Tim Bodeit
Tim Saunders
Torkel Rogstad
Victor Nogueira
William Candillon
curtvict