Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(docs) : provide docs for jest-haste-map package #14613

Merged
merged 3 commits into from
Oct 12, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions packages/jest-haste-map/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# jest-haste-map

`jest-haste-map` is a module used by Jest, a popular JavaScript testing framework, to create a fast lookup of files in a project. It helps Jest efficiently locate and track changes in files during testing, making it particularly useful for large projects with many files.

## why jest-haste-map ?

- **Parallel crawling and analysis:** jest-haste-map crawls the entire project, extracts dependencies, and analyzes files in parallel across worker processes.This can significantly improve the performance of the map building process.
- **Cached file system:** jest-haste-map keeps a cache of the file system in memory and on disk. This allows for fast file related operations, such as resolving module imports and checking for changes.
- **Minimal work**: jest-haste-map only does the minimal amount of work necessary when files change. (If you are using [watchman](https://facebook.github.io/watchman/) (recommended for large projects), Jest will ask watchman for changed files instead of crawling the file system. This is very fast even if you have tens of thousands of files.)
- **File system watching:** jest-haste-map can watch the file system for changes. This is useful for building interactive tools, such as watch mode.

## Installation

with npm :

```bash
npm install jest-haste-map --save-dev
```

with yarn :

```bash
yarn add jest-haste-map --dev
```

## usage

`jest-haste-map` is compatible with both `ES modules` and `CommonJS`

### simple usage

```javascript
const map = new HasteMap.default({
// options
});
```

### Example usage (get all files with .js extension in the project)

```javascript
import HasteMap from 'jest-haste-map';
import os from 'os';
import {dirname} from 'path';
import {fileURLToPath} from 'url';

const root = dirname(fileURLToPath(import.meta.url));

const map = new HasteMap.default({
id: 'myproject', //Used for caching.
extensions: ['js'], // Tells jest-haste-map to only crawl .js files.
maxWorkers: os.availableParallelism(), //Parallelizes across all available CPUs.
platforms: [], // This is only used for React Native, you can leave it empty.
roots: [root], // Can be used to only search a subset of files within `rootDir`
retainAllFiles: true,
rootDir: root, //The project root.
});

const {hasteFS} = await map.build();

const files = hasteFS.getAllFiles();

console.log(files);
```

### options

| Option | Type | Required | Default Value |
| ---------------------- | ------------------- | -------- | ------------- |
| cacheDirectory | string | No | `os.tmpdir()` |
| computeDependencies | boolean | No | `true` |
| computeSha1 | boolean | No | `false` |
| console | Console | No | - |
| dependencyExtractor | string \| null | No | `null` |
| enableSymlinks | boolean | No | `false` |
| extensions | Array<string> | Yes | - |
| forceNodeFilesystemAPI | boolean | Yes | - |
| hasteImplModulePath | string | Yes | - |
| hasteMapModulePath | string | Yes | - |
| id | string | Yes | - |
| ignorePattern | HasteRegExp | No | - |
| maxWorkers | number | Yes | - |
| mocksPattern | string | No | - |
| platforms | Array<string> | Yes | - |
| resetCache | boolean | No | - |
| retainAllFiles | boolean | Yes | - |
| rootDir | string | Yes | - |
| roots | Array<string> | Yes | - |
| skipPackageJson | boolean | Yes | - |
| throwOnModuleCollision | boolean | Yes | - |
| useWatchman | boolean | No | `true` |

For more, you can check [github](https://github.com/jestjs/jest/tree/main/packages/jest-haste-map)