Back to Fuse

Developing Fuse.js

DEVELOPERS.md

7.3.02.2 KB
Original Source

Developing Fuse.js

<a name="setup"></a> Setup

shell
npm install

<a name="scripts"></a> Scripts

CommandDescription
npm run buildBuild all dist targets (CJS, ESM, minified, types)
npm testRun the test suite (vitest)
npm run typecheckType-check the source without emitting
npm run lintLint source and tests (eslint)
npm run devWatch mode for ESM dev build
npm run dev:cjsWatch mode for CJS dev build
node bench.mjsRun benchmarks (10k records)

<a name="structure"></a> Project Structure

Source is TypeScript. Types are emitted from source via rollup-plugin-dts.

src/
  core/         — Fuse class, config, scoring, query parser, formatting
  search/       — Bitap algorithm + extended search (operators, matchers)
  tools/        — FuseIndex, KeyStore, MaxHeap, field-length norm
  helpers/      — Utility functions (type guards, get, diacritics)
  types.ts      — Shared type definitions
  entry.ts      — Entry point with static methods and type exports
test/           — Tests and fixtures
scripts/        — Rollup build configs
dist/           — Built output (CJS, ESM, .d.ts)

<a name="commits"></a> Git Commit Guidelines

Fuse.js follows conventional commits. Commit messages are used to generate the changelog.

Format

<type>(<scope>): <subject>

Types

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Formatting, missing semi-colons, etc.
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: A code change that improves performance
  • test: Adding or correcting tests
  • chore: Build process or auxiliary tools

Scope

The scope specifies the area of the change, e.g. search, index, options. Use * for changes affecting multiple scopes.

Subject

  • Imperative, present tense: "change" not "changed"
  • Don't capitalize the first letter
  • No period at the end