# Package Structure

The following structure ensures packages work optimally with our monorepo/Nx workflow.

### `./package.json`

- All TanStack projects have `"type": "module"` to set the default resolution of `.js` files to ESM; this does not have any impact on building for CJS
- It is also essential to have an `"exports"` field
- For legacy reasons, you should also include the `"main"`, `"module"`, and `"types"` fields
- All packages have the following scripts which are cached by Nx: `"test:eslint"`, `"test:types"`, `"test:lib"`, `"build"`, `"test:build"`

### `./tsconfig.json`

- Extends the root-level tsconfig (e.g. `"extends": "../../tsconfig.json"`)
- Add any framework-specific options and included files here

### `./src`

- This folder should only include code which gets built and shipped to users
- Tests should not be placed in this folder, as they bloat the shipped code, and can unintentionally invalidate the Nx cache

### `./tests`

- This folder should include all test files
- It should also include any test setup files required by that framework

### `./tsdown.config.ts`

- Defines `tsdown` config, including any framework-specific plugins.

### `./vitest.config.ts`

- Defines config for Vitest
