# Default Rules

`package.json` fields are sorted by the order they are listed below. The default key sort order is alphabetical.

_Note: when a specific key order is used, any other keys will be sorted in the end of the object_

| Key                   | Rules                                                                          |
| --------------------- | ------------------------------------------------------------------------------ |
| \$schema              |                                                                                |
| name                  |                                                                                |
| displayName           |                                                                                |
| version               |                                                                                |
| private               |                                                                                |
| description           |                                                                                |
| categories            | Unique items                                                                   |
| keywords              | Unique items                                                                   |
| homepage              |                                                                                |
| bugs                  | Key order: `url`, `email`                                                      |
| repository            | Key order: `type`, `url`                                                       |
| funding               | Key order: `type`, `url`                                                       |
| license               | Key order: `type`, `url`                                                       |
| qna                   |                                                                                |
| author                | Key order: `name`, `email`, `url`                                              |
| maintainers           | Key order (per item): `name`, `email`, `url`                                   |
| contributors          | Key order (per item): `name`, `email`, `url`                                   |
| publisher             |                                                                                |
| sideEffects           |                                                                                |
| type                  |                                                                                |
| imports               |                                                                                |
| exports               |                                                                                |
| main                  |                                                                                |
| svelte                |                                                                                |
| umd:main              |                                                                                |
| jsdelivr              |                                                                                |
| unpkg                 |                                                                                |
| module                |                                                                                |
| source                |                                                                                |
| jsnext:main           |                                                                                |
| browser               |                                                                                |
| react-native          |                                                                                |
| types                 |                                                                                |
| typesVersions         |                                                                                |
| typings               |                                                                                |
| style                 |                                                                                |
| example               |                                                                                |
| examplestyle          |                                                                                |
| assets                |                                                                                |
| bin                   | Key sort                                                                       |
| man                   |                                                                                |
| directories           | Key order: `lib`, `bin`, `man`, `doc`, `example`, `test`                       |
| files                 | Unique items                                                                   |
| workspaces            |                                                                                |
| binary,               | Key order: `module_name`, `module_path`, `remote_path`, `package_name`, `host` |
| scripts               | [Script sort](#scripts)                                                        |
| betterScripts         | [Script sort](#scripts)                                                        |
| wireit                | [Wireit sort](#wireit)                                                         |
| contributes           | Key sort                                                                       |
| activationEvents      | Unique items                                                                   |
| husky                 | Sorts the `hooks` field using [git hook sort](#git-hooks)                      |
| simple-git-hooks      | Key sort using [git hook sort](#git-hooks)                                     |
| pre-commit            |                                                                                |
| commitlint            | Key sort                                                                       |
| lint-staged           |                                                                                |
| nano-staged           |                                                                                |
| config                | Key sort                                                                       |
| nodemonConfig         | Key sort                                                                       |
| browserify            | Key sort                                                                       |
| babel                 | Key sort                                                                       |
| browserslist          |                                                                                |
| xo                    | Key sort                                                                       |
| prettier              | [Prettier sort](#prettier)                                                     |
| eslintConfig          | [ESLint sort](#eslint)                                                         |
| eslintIgnore          |                                                                                |
| npmpackagejsonlint    | Key sort (also recognizes: npmPackageJsonLintConfig, npmpkgjsonlint)           |
| release               | Key sort                                                                       |
| remarkConfig          | Key sort                                                                       |
| stylelint             |                                                                                |
| ava                   | Key sort                                                                       |
| jest                  | Key sort                                                                       |
| mocha                 | Key sort                                                                       |
| nyc                   | Key sort                                                                       |
| tap                   | Key sort                                                                       |
| oclif                 | Key sort (deep)                                                                |
| resolutions           | Key sort                                                                       |
| dependencies          | Key sort                                                                       |
| devDependencies       | Key sort                                                                       |
| dependenciesMeta      | Key sort (deep)                                                                |
| peerDependencies      | Key sort                                                                       |
| peerDependenciesMeta  | Key sort (deep)                                                                |
| optionalDependencies  | Key sort                                                                       |
| bundledDependencies   | Sort unique items                                                              |
| bundleDependencies    | Sort unique items                                                              |
| extensionPack         | Sort unique items                                                              |
| extensionDependencies | Sort unique items                                                              |
| flat                  |                                                                                |
| packageManager        |                                                                                |
| engines               | Key sort                                                                       |
| engineStrict          | Key sort                                                                       |
| volta                 | Key order: `node`, `npm`, `yarn`                                               |
| languageName          |                                                                                |
| os                    |                                                                                |
| cpu                   |                                                                                |
| preferGlobal          | Key sort                                                                       |
| publishConfig         | Key sort                                                                       |
| icon                  |                                                                                |
| badges                | Key order (per item): `description`, `url`, `href`                             |
| galleryBanner         | Key sort                                                                       |
| preview               |                                                                                |
| markdown              |                                                                                |
| pnpm                  | Key sort (deep)                                                                |

## Special Rules

### ESLint

Fields are sorted by the order they are listed below:

| Key                           | Rules                                                               |
| ----------------------------- | ------------------------------------------------------------------- |
| env                           |                                                                     |
| parser                        |                                                                     |
| parserOptions                 |                                                                     |
| settings                      |                                                                     |
| plugins                       |                                                                     |
| extends                       |                                                                     |
| rules                         | Group built-in rules first, then plugin rules. Each group is sorted |
| overrides                     | Key order (per item): `files`, `excludedFiles`                      |
| globals                       |                                                                     |
| processor                     |                                                                     |
| noInlineConfig                |                                                                     |
| reportUnusedDisableDirectives |                                                                     |

### Git Hooks

Item order:

- `applypatch-msg`
- `pre-applypatch`
- `post-applypatch`
- `pre-commit`
- `pre-merge-commit`
- `prepare-commit-msg`
- `commit-msg`
- `post-commit`
- `pre-rebase`
- `post-checkout`
- `post-merge`
- `pre-push`
- `pre-receive`
- `update`
- `post-receive`
- `post-update`
- `push-to-checkout`
- `pre-auto-gc`
- `post-rewrite`
- `sendemail-validate`
- `fsmonitor-watchman`
- `p4-pre-submit`
- `post-index-chang`

### Prettier

Keys are sorted alphabetically except for `overrides`, which is placed last. Keys are also sorted in `overrides` and `overrides.options` items.

### Wireit

Script names are sorted alphabetically. Each script's properties use the order from [wireit's own examples](https://github.com/google/wireit), with remaining properties sorted alphabetically:

| Key          | Rules                                        |
| ------------ | -------------------------------------------- |
| command      |                                              |
| dependencies | Key order (per item): `script`, `cascade`    |
| files        |                                              |
| output       |                                              |
| _remaining_  | Alphabetical, with nested object key sorting |

### Scripts

Keys are sorted alphabetically except for [pre/post scripts](https://docs.npmjs.com/cli/v6/using-npm/scripts#pre--post-scripts). Those are placed before and after their corresponding base npm script.

An example - notice how `preinstall` and `postinstall` are placed before and after `install`:

```json
{
  "scripts": {
    "build": "",
    "preinstall": "",
    "install": "",
    "postinstall": "",
    "lint": ""
  }
}
```

Scripts for which the pre/post order is applied:

- install
- pack
- prepare
- publish
- restart
- shrinkwrap
- start
- stop
- test
- uninstall
- version
