https://github.com/jamiebuilds/purposefile
Make sure every file in your repo is exactly where it should be
https://github.com/jamiebuilds/purposefile
Last synced: 10 months ago
JSON representation
Make sure every file in your repo is exactly where it should be
- Host: GitHub
- URL: https://github.com/jamiebuilds/purposefile
- Owner: jamiebuilds
- License: other
- Created: 2019-04-30T01:25:18.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2020-07-16T23:51:31.000Z (over 5 years ago)
- Last Synced: 2025-04-21T04:21:34.494Z (11 months ago)
- Language: TypeScript
- Homepage:
- Size: 1.51 MB
- Stars: 169
- Watchers: 3
- Forks: 5
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-github-repos - jamiebuilds/purposefile - Make sure every file in your repo is exactly where it should be (TypeScript)
README
# purposefile
> Make sure every file in your repo is exactly where it should be.

## Install
First, [make sure node and npm are installed](https://nodejs.org/).
Then if you have an existing `package.json` you can run:
```sh
npm install --save-dev purposefile
npx purposefile
```
Or if you want to use it globally you can also just run:
```sh
npx purposefile
```
It's recommended that you save this to your [`package.json#scripts`](https://docs.npmjs.com/misc/scripts)
```json
{
"name": "my-package",
"scripts": {
"check-files": "purposefile"
}
}
```
```sh
npm run check-files
```
## Usage
First create a `.purposefile` in the root of your project like this:
```properties
.purposefile Configures purposefile
.gitignore Configures git to ignore certain files
.prettierrc Configures Prettier
.prettierignore Configures Prettier ignored files
package.json Configures npm and related tools
package-lock.json Lock file for npm dependencies
tsconfig.json Configures TypeScript
README.md Documentation for repo
LICENSE License for package
.git/** Internal git state & config
node_modules/**/* Dependencies installed by npm
typings/*/*.d.ts TypeScript library type definitions
src/**/*.ts Source files
!src/**/*.test.ts Dont place test files within src/
test/**/*.test.ts Test files
dist/**/*.{js,d.ts}{,.map} Built source files
.github/*.png Images for README
```
> **Note:** Entries are matched in reverse order. Entries with no defined
> purpose or that start with a `!` act like negations to the globs above them.
Then run:
```sh
npx purposefile
```
If all the files in the repo are known, you'll get:

Or if there's any unknown files:

If you want to check the purpose of a file you can run:
```sh
purposefile path/to/file
```

If you want to check the purpose of many files at once you can also specify globs:
```sh
purposefile '**' --ignore '**/node_modules/**'
```

> **Note:** You can specify multiple `--ignore` patterns to exclude files from being listed.
If you want to check `purposefile` before every commit, you can do so with [Husky](https://github.com/typicode/husky):
```jsonc
{
"husky": {
"hooks": {
"pre-commit": "purposefile" // Or "purposefile && lint-staged" if you use `lint-staged`
}
}
}
```