# package-json-validator

> Tools to validate package.json files.

Latest version **1.6.1** (published 2026-08-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install package-json-validator
pnpm add package-json-validator
yarn add package-json-validator
bun add package-json-validator
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 1.6.1 |
| Published | 2026-08-13 |
| First published | 2013-09-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | ^20.19.0 \|\| ^22.12.0 \|\| >=24.0.0 |
| Dependencies | 4 |
| Unpacked size | 129.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| Maintainers | joshuakgoldberg, mfaith |
| Keywords | lint, package.json, package.json linter, package.json validator, validator |

## Links

- npm: https://www.npmjs.com/package/package-json-validator
- Repository: https://github.com/michaelfaith/package-json-validator
- Homepage: https://github.com/michaelfaith/package-json-validator#readme
- Issues: https://github.com/michaelfaith/package-json-validator/issues
- npm.io page: https://npm.io/package/package-json-validator

## Dependencies (4)

- [semver](https://npm.io/package/semver.md) ^7.7.2
- [npm-package-arg](https://npm.io/package/npm-package-arg.md) ^13.0.2
- [validate-npm-package-name](https://npm.io/package/validate-npm-package-name.md) ^7.0.0
- [validate-npm-package-license](https://npm.io/package/validate-npm-package-license.md) ^3.0.4

## Alternatives

- [eslint-plugin-sonarjs](https://npm.io/package/eslint-plugin-sonarjs.md) — 2.9M weekly downloads
- [eslint-config-expo](https://npm.io/package/eslint-config-expo.md) — 1.5M weekly downloads
- [@matter/protocol](https://npm.io/package/@matter/protocol.md) — 63.5K weekly downloads
- [@eventcatalog/linter](https://npm.io/package/@eventcatalog/linter.md) — 24.8K weekly downloads
- [@pandacss/eslint-plugin](https://npm.io/package/@pandacss/eslint-plugin.md) — 18.7K weekly downloads

## Recent versions

- 1.6.1 (latest) — 2026-08-13
- 2.0.0-beta.1 (beta) — 2026-08-23
- 1.0.0-rc.0 (rc) — 2026-02-17
- 2.0.0-beta.0 — 2026-08-22
- 1.6.0 — 2026-08-01
- 1.5.2 — 2026-05-28
- 1.5.1 — 2026-05-02
- 1.5.0 — 2026-05-01
- 1.4.1 — 2026-04-24
- 1.4.0 — 2026-04-11
- 1.3.1 — 2026-03-11
- 1.3.0 — 2026-03-10
- 1.2.1 — 2026-03-09
- 1.2.0 — 2026-03-08
- 1.1.0 — 2026-03-07
- … 92 more at https://npm.io/package/package-json-validator/versions

## README

<h1 align="center">package.json validator</h1>

<p align="center">Tools to validate <code>package.json</code> files.</p>

<p align="center">
	<!-- prettier-ignore-start -->
	<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
	<a href="#contributors" target="_blank"><img alt="👪 All Contributors: 43" src="https://img.shields.io/badge/%F0%9F%91%AA_all_contributors-43-21bb42.svg" /></a>
<!-- ALL-CONTRIBUTORS-BADGE:END -->
	<!-- prettier-ignore-end -->
	<a href="https://codecov.io/gh/michaelfaith/package-json-validator" target="_blank"><img alt="🧪 Coverage" src="https://img.shields.io/codecov/c/github/michaelfaith/package-json-validator?label=%F0%9F%A7%AA%20coverage" /></a>
	<a href="https://github.com/michaelfaith/package-json-validator/blob/main/LICENSE.md" target="_blank"><img alt="📝 License: MIT" src="https://img.shields.io/badge/%F0%9F%93%9D_license-MIT-21bb42.svg" /></a>
	<a href="http://npmjs.com/package/package-json-validator" target="_blank"><img alt="📦 npm version" src="https://img.shields.io/npm/v/package-json-validator?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
	<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>

## Usage

```shell
npm install package-json-validator
```

```js
import { validate } from 'package-json-validator';

validate(/* ... */);
```

For tools that run these validations, see:

- [eslint-plugin-package-json](https://github.com/michaelfaith/eslint-plugin-package-json): to detect all violations and keep them warned against via ESLint
- [package-json-validator-cli](https://github.com/JoshuaKGoldberg/package-json-validator-cli): if you want just a one-shot tool to run in the CLI

## Result Types

Following are the types involved in the return type of our granular `validate*` functions.

### Result

The `Result` type, is the common top-level return type for all of our granular `validate*` functions.
It provides rich information about the nature of the issues encountered as part of validating.
For complex objects like `exports`, its tree structure can give information on which parts of the structure have issues.

#### errorMessages: string[]

The full collection of error messages (including errors from child element).
This consists of the `Issue.message` for all of the items in this Result's `issues`, as well as the `message`s of all descendent `issues`.

#### issues: Issue[]

Collection of issues for _this_ object (property or array element).

#### childResults: ChildResult[]

Collection of result objects for child elements (either properties or array elements), if this property is an object or array.

### ChildResult extends Result

Result object for a child (either a property in an object or an element of an array).

#### index: number

The index of this property in relation to its parent's collection (properties or array elements).

### Issue

#### message: string

The message with information about this issue.

## Functions

### validate(data, options?)

This function validates an entire `package.json` and returns a list of errors, if
any violations are found.

#### Parameters

- `data` packageData object or a JSON-stringified version of the package data.
- `options` is an object with the following:
  ```ts
  interface Options {
    recommendations?: boolean; // show recommendations
    warnings?: boolean; // show warnings
  }
  ```

#### Examples

Example using an object:

```js
import { validate } from 'package-json-validator';

const packageData = {
  name: 'my-package',
  version: '1.2.3',
};

validate(packageData);
```

Example using a string:

```js
import { validate } from 'package-json-validator';

const text = JSON.stringify({
  name: 'packageJsonValidator',
  version: '0.1.0',
  private: true,
  dependencies: {
    'date-fns': '^2.29.3',
    install: '^0.13.0',
    react: '^18.2.0',
    'react-chartjs-2': '^5.0.1',
    'react-dom': '^18.2.0',
    'react-material-ui-carousel': '^3.4.2',
    'react-multi-carousel': '^2.8.2',
    'react-redux': '^8.0.5',
    'react-router-dom': '^6.4.3',
    'react-scripts': '5.0.1',
    redux: '^4.2.0',
    'styled-components': '^5.3.6',
    'web-vitals': '^2.1.4',
  },
  scripts: {
    start: 'react-scripts start',
  },
  eslintConfig: {
    extends: ['react-app', 'react-app/jest'],
  },
  browserslist: {
    production: ['>0.2%', 'not dead', 'not op_mini all'],
    development: [
      'last 1 chrome version',
      'last 1 firefox version',
      'last 1 safari version',
    ],
  },
});

const data = validate(text);

console.log(data);

// {
//   valid: true,
//   warnings: [
//     'Missing recommended field: description',
//     'Missing recommended field: keywords',
//     'Missing recommended field: bugs',
//     'Missing recommended field: licenses',
//     'Missing recommended field: author',
//     'Missing recommended field: contributors',
//     'Missing recommended field: repository'
//   ],
//   recommendations: [
//     'Missing optional field: homepage',
//     'Missing optional field: engines'
//   ]
// }
```

#### New Return Type (>= 1.4.0)

Starting in v1.4, you can opt-in to the new `Result` return type for `validate`.
This has been the return type for all of the more granular `validate*` functions for a while now, and gives more specific information about which parts of the `package.json` are failing validation.
See [Result Types](#result-types) for more details about this construct.

If you'd like to opt-in to the new behavior before it becomes the default experience, pass `true` into the second parameter.

```ts
import { validate } from 'package-json-validator';

const data = {
  name: 'packageJsonValidator',
  version: '0.1.0',
  private: true,
  dependencies: {
    'date-fns': '^2.29.3',
    install: '^0.13.0',
    react: '^18.2.0',
    'react-chartjs-2': '^5.0.1',
    'react-dom': '^18.2.0',
    'react-material-ui-carousel': '^3.4.2',
    'react-multi-carousel': '^2.8.2',
    'react-redux': '^8.0.5',
    'react-router-dom': '^6.4.3',
    'react-scripts': '5.0.1',
    redux: '^4.2.0',
    'styled-components': '^5.3.6',
    'web-vitals': '^2.1.4',
  },
  scripts: {
    start: 'react-scripts start',
  },
  eslintConfig: {
    extends: ['react-app', 'react-app/jest'],
  },
  browserslist: {
    production: ['>0.2%', 'not dead', 'not op_mini all'],
    development: [
      'last 1 chrome version',
      'last 1 firefox version',
      'last 1 safari version',
    ],
  },
};

let result = validate(data, true);

console.log(result.issues.length); // 0
console.log(result.errorMessages.length); // 0
console.log(result.childResults.length); // 7 (one for each top-level property)

result = validate({}, true);

console.log(result.issues.length); // 2
console.log(result.childResults.length); // 0
console.log(result.errorMessages);
// [
//   'Missing required property: name',
//   'Missing required property: version',
// ]
```

### validateAuthor(value)

This function validates the value of the `author` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is either a string or an object
- if it's an object, it should include a `name` field and, optionally, `email` and / or `url` fields.
- if present, the `email` and `url` fields should be valid email and url, respectively.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateAuthor } from 'package-json-validator';

const packageData = {
  author: {
    email: 'b@rubble.com',
    name: 'Barney Rubble',
    url: 'http://barnyrubble.tumblr.com/',
  },
};

const result = validateAuthor(packageData.author);
```

```ts
import { validateAuthor } from 'package-json-validator';

const packageData = {
  author: 'Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)',
};

const result = validateAuthor(packageData.author);
```

### validateBin(value)

This function validates the value of the `bin` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- It should be of type `string` or `object`.
- If it's a `string`, it should be a relative path to an executable file.
- If it's an `object`, it should be a key to string value object, and the values should all be relative paths.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateBin } from 'package-json-validator';

const packageData = {
  bin: './my-cli.js',
};

const result = validateBin(packageData.bin);
```

```ts
import { validateBin } from 'package-json-validator';

const packageData = {
  bin: {
    'my-cli': './my-cli.js',
    'my-dev-cli': './dev/my-cli.js',
  },
};

const result = validateBin(packageData.bin);
```

### validateBrowser(value)

This function validates the value of the `browser` property of a `package.json`, checking that the value is a non-empty string.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateBrowser } from 'package-json-validator';

const packageData = {
  browser: 'index.umd.js',
};

const result = validateBrowser(packageData.browser);
```

### validateBugs(value)

This function validates the value of the `bugs` property of a `package.json`.
It takes the value, and validates that it's one of the following.

- a `string` url
- an `object` with either properties `email` or `url` (or both)
- `email` should be a valid email address
- `url` should be a valid URL

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateBugs } from 'package-json-validator';

const packageData = {
  bugs: {
    email: 'example@npmjs.com',
    url: 'https://github.com/npm/example/issues',
  },
};

const result = validateBugs(packageData.bugs);
```

### validateBundleDependencies(value)

This function validates the value of the `bundleDependencies` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is either an array or a boolean
- if it's an array, all items should be strings

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateBundleDependencies } from 'package-json-validator';

const packageData = {
  bundleDependencies: ['renderized', 'super-streams'],
};

const result = validateBundleDependencies(packageData.bundleDependencies);
```

### validateConfig(value)

This function validates the value of the `config` property of a `package.json`.
It takes the value, and validates that it's an object.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateConfig } from 'package-json-validator';

const packageData = {
  config: {
    debug: true,
    host: 'localhost',
    port: 8080,
  },
};

const result = validateConfig(packageData.config);
```

### validateContributors(value)

This function validates the value of the `contributors` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an `Array` of objects
- each object in the array should be a "person" object with at least a `name` and optionally `email` and `url`
- the `email` and `url` properties, if present, should be valid email and URL formats.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateContributors } from 'package-json-validator';

const packageData = {
  contributors: [
    {
      email: 'b@rubble.com',
      name: 'Barney Rubble',
      url: 'http://barnyrubble.tumblr.com/',
    },
  ],
};

const result = validateContributors(packageData.contributors);
```

### validateCpu(value)

This function validates the value of the `cpu` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an array
- all items in the array should be one of the following:

"arm", "arm64", "ia32", "loong64", "mips", "mipsel", "ppc64", "riscv64", "s390", "s390x", "x64"

> [!NOTE]
> These values are the list of possible `process.arch` values [documented by Node](https://nodejs.org/api/process.html#processarch).

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateCpu } from 'package-json-validator';

const packageData = {
  cpu: ['x64', 'ia32'],
};

const result = validateCpu(packageData.cpu);
```

### validateDependencies(value, options)

Also: `validateDevDependencies`, `validateOptionalDependencies`, and `validatePeerDependencies`

These functions validate the value of their respective `dependency` property.
They take the value, and validate it against the following criteria.

- It should be of type an `object`.
- The object should be a record of key value pairs
- For each property, the key should be a valid package name, and the value should be a valid version

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateDependencies } from 'package-json-validator';

const packageData = {
  dependencies: {
    '@catalog/package': 'catalog:',
    '@my/package': '^1.2.3',
    '@workspace/package': 'workspace:^',
  },
};

const result = validateDependencies(packageData.dependencies);
```

#### ValidateDependenciesOptions

- `allowNamedRegistries`: Relaxes validation on dependency versions to allow for named registries, a feature [supported by pnpm](https://pnpm.io/settings#namedregistries) since 11.1.0 (Default: `false`)

```ts
import { validateDependencies } from 'package-json-validator';

const packageData = {
  dependencies: {
    '@my/package': '^1.2.3',
    '@company/package': 'work:svgo@^1.0.0', // Would have failed validation
  },
};

const result = validateDependencies(packageData.dependencies, {
  allowNamedRegistries: true,
});
```

### validateDescription(value)

This function validates the value of the `description` property of a `package.json`, checking that the value is a non-empty string.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateDescription } from 'package-json-validator';

const packageData = {
  description: 'The Fragile',
};

const result = validateDescription(packageData.description);
```

### validateDirectories(value)

This function validates the value of the `directories` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an object
- its keys are non-empty strings
- its values are all non-empty strings

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateDirectories } from 'package-json-validator';

const packageData = {
  directories: {
    bin: 'dist/bin',
    man: 'docs',
  },
};

const result = validateDirectories(packageData.directories);
```

### validateDevEngines(value)

This function validates the value of the `devEngines` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- It should be an `object` with any of the following properties
  - `cpu`
  - `libc`
  - `os`
  - `packageManager`
  - `runtime`
- The value of each property should be an object or an Array of objects with the following properties
  - `name` (required): the name of the engine, e.g. "node", "npm", "yarn", "bun"
  - `version` (optional): the version of the engine, which should be a valid semver range
  - `onFail` (optional): should be one of the following values: `warn`, `error`, `ignore` or `download`

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateDevEngines } from 'package-json-validator';

const packageData = {
  devEngines: {
    runtime: {
      name: 'node',
      version: '^20.19.0 || >=22.12.0',
      onFail: 'download',
    },
    packageManager: {
      name: 'pnpm',
      version: '^10.0.0',
      onFail: 'error',
    },
  },
};

const result = validateDevEngines(packageData.devEngines);
```

#### See Also

- https://docs.npmjs.com/cli/v11/configuring-npm/package-json#devengines
- https://pnpm.io/package_json#devenginesruntime

### validateEngines(value)

This function validates the value of the `engines` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- It should be of type `object`.
- It should be a key to string value object, and the values should all be non-empty.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateEngines } from 'package-json-validator';

const packageData = {
  engines: {
    node: '^20.19.0 || >=22.12.0',
  },
};

const result = validateEngines(packageData.engines);
```

### validateExports(value)

This function validates the value of the `exports` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- It should be of type `string` or `object`.
- If it's a `string`, it should be a path to an entry point.
- If it's an export condition `object`, its properties should have values that are either a path to an entry point, or another exports condition object.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateExports } from 'package-json-validator';

const packageData = {
  exports: './index.js',
};

const result = validateExports(packageData.exports);
```

```ts
import { validateExports } from 'package-json-validator';

const packageData = {
  exports: {
    '.': {
      types: './index.d.ts',
      default: './index.js',
    },
    './secondary': {
      types: './secondary.d.ts',
      default: './secondary.js',
    },
  },
};

const result = validateExports(packageData.exports);
```

### validateFiles(value)

This function validates the value of the `files` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an array
- all items in the array should be non-empty strings

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateFiles } from 'package-json-validator';

const packageData = {
  files: ['dist', 'CHANGELOG.md'],
};

const result = validateFiles(packageData.files);
```

### validateFunding(value)

This function validates the value of the `funding` property of a `package.json`.
It takes the value, and validates that it's one of the following.

- a `string` url
- an `object` with properties `type` and `url`, with `url` being a valid url
- an `Array` consisting of items of the above two

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateFunding } from 'package-json-validator';

const packageData = {
  funding: [
    {
      type: 'individual',
      url: 'http://npmjs.com/donate',
    },
    'http://npmjs.com/donate-also',
    {
      type: 'patreon',
      url: 'https://www.patreon.com/user',
    },
  ],
};

const result = validateFunding(packageData.funding);
```

### validateGypfile(value)

This function validates the value of the `gypfile` property of a `package.json`.
It takes the value, and checks that it's a boolean.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateGypfile } from 'package-json-validator';

const packageData = {
  gypfile: false,
};

const result = validateGypfile(packageData.gypfile);
```

### validateHomepage(value)

This function validates the value of the `homepage` property of a `package.json`, checking that the value is a string containing a valid url.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateHomepage } from 'package-json-validator';

const packageData = {
  homepage: 'The Fragile',
};

const result = validateDescription(packageData.homepage);
```

### validateKeywords(value)

This function validates the value of the `keywords` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an array
- all items in the array should be non-empty strings

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateKeywords } from 'package-json-validator';

const packageData = {
  keywords: ['eslint', 'package.json'],
};

const result = validateKeywords(packageData.keywords);
```

### validateLibc(value)

This function validates the value of the `libc` property of a `package.json`.
It takes the value, and validates that it's either a string or an Array of strings.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateLibc } from 'package-json-validator';

const packageData = {
  libc: 'glibc',
};

const result = validateLibc(packageData.man);
```

### validateLicense(value)

This function validates the value of the `license` property of a `package.json`.
It takes the value, and validates it using `validate-npm-package-license`, which is the same package that npm uses.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateLicense } from 'package-json-validator';

const packageData = {
  license: 'MIT',
};

const result = validateLicense(packageData.license);
```

### validateMain(value)

This function validates the value of the `main` property of a `package.json`, checking that the value is a non-empty string.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateMain } from 'package-json-validator';

const packageData = {
  main: 'index.js',
};

const result = validateMain(packageData.main);
```

### validateMan(value)

This function validates the value of the `man` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is either a string or an array of strings
- the string(s) must end in a number (and optionally .gz)

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateMan } from 'package-json-validator';

const packageData = {
  man: ['./man/foo.1', './man/bar.1'],
};

const result = validateMan(packageData.man);
```

### validateName(value)

This function validates the value of the `name` property of a `package.json`.
It takes the value, and validates it using `validate-npm-package-name`, which is the same package that npm uses.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateName } from 'package-json-validator';

const packageData = {
  name: 'some-package',
};

const result = validateName(packageData.name);
```

### validateOs(value)

This function validates the value of the `os` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an array
- all items in the array should be one of the following:

"aix", "android", "darwin", "freebsd", "linux", "openbsd", "sunos", and "win32"

> [!NOTE]
> These values are the list of possible `process.platform` values [documented by Node](https://nodejs.org/api/process.html#processplatform).

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateOs } from 'package-json-validator';

const packageData = {
  os: ['linux', 'win32'],
};

const result = validateOs(packageData.os);
```

### validatePackageManager(value)

This function validates the value of the `packageManager` property of a `package.json`.
It takes the value, and checks that it's a string with a valid package manager and version.
The package manager portion should be `npm`, `pnpm`, `yarn`, `bun`, or `deno`, while the version portion should be a valid semver version.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validatePackageManager } from 'package-json-validator';

const packageData = {
  packageManager: 'pnpm@10.3.0',
};

const result = validatePackageManager(packageData.packageManager);
```

### validatePeerDependenciesMeta(value)

This function validates the value of the `peerDependenciesMeta` property of a `package.json`.
It takes the value, and checks that it is an object whose keys are valid package names and whose values are objects with only an `optional` property.
The `optional` property must be a boolean.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validatePeerDependenciesMeta } from 'package-json-validator';

const packageData = {
  peerDependenciesMeta: {
    react: {
      optional: true,
    },
  },
};

const result = validatePeerDependenciesMeta(packageData.peerDependenciesMeta);
```

### validatePrivate(value)

This function validates the value of the `private` property of a `package.json`.
It takes the value, and checks that it's a boolean.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validatePrivate } from 'package-json-validator';

const packageData = {
  private: true,
};

const result = validatePrivate(packageData.private);
```

### validatePublishConfig(value)

This function validates the value of the `publishConfig` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an object
- if any of the following properties are present, they should conform to the type defined by the package manager
  - access
  - bin
  - cpu
  - directory
  - exports
  - main
  - provenance
  - tag

> [!NOTE]
> These properties are a (non-exhaustive) combination of those supported by `npm`, `pnpm`, and `yarn`.
>
> - <https://docs.npmjs.com/cli/v11/commands/npm-publish#configuration>
> - <https://pnpm.io/package_json#publishconfig>
> - <https://yarnpkg.com/configuration/manifest#publishConfig>

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validatePublishConfig } from 'package-json-validator';

const packageData = {
  publishConfig: {
    provenance: true,
  },
};

const result = validatePublishConfig(packageData.publishConfig);
```

### validateRepository(value)

This function validates the value of the `repository` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- It should be of type `object` or `string`.
- If it's an `object`, it should have `type`, `url`, and optionally `directory`.
- `type` and `directory` (if present) should be non-empty strings
- `url` should be a valid repo url
- If it's a `string`, it should be the shorthand repo string from a supported provider.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateRepository } from 'package-json-validator';

const packageData = {
  repository: {
    type: 'git',
    url: 'git+https://github.com/michaelfaith/package-json-validator.git',
    directory: 'packages/package-json-validator',
  },
};

const result = validateRepository(packageData.repository);
```

```ts
import { validateRepository } from 'package-json-validator';

const packageData = {
  repository: 'github:michaelfaith/package-json-validator',
};

const result = validateRepository(packageData.repository);
```

### validateScripts(value)

This function validates the value of the `scripts` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an object
- its keys are non-empty strings
- its values are all non-empty strings

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateScripts } from 'package-json-validator';

const packageData = {
  scripts: {
    build: 'rollup -c',
    lint: 'eslint .',
    test: 'vitest',
  },
};

const result = validateScripts(packageData.scripts);
```

### validateSideEffects(value)

This function validates the value of the `sideEffects` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- The value is either a boolean or an Array.
- If it's an array, all items should be non-empty strings.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateSideEffects } from 'package-json-validator';

const packageData = {
  sideEffects: false,
};

const result = validateSideEffects(packageData.sideEffects);
```

### validateType(value)

This function validates the value of the `type` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is a string
- its value is either `'commonjs'` or `'module'`

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateType } from 'package-json-validator';

const packageData = {
  type: 'module',
};

const result = validateType(packageData.type);
```

### validateVersion(value)

This function validates the value of the `version` property of a `package.json`.
It takes the value, and validates it using `semver`, which is the same package that npm uses.

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateVersion } from 'package-json-validator';

const packageData = {
  version: '1.2.3',
};

const result = validateVersion(packageData.version);
```

### validateWorkspaces(value)

This function validates the value of the `workspaces` property of a `package.json`.
It takes the value, and validates it against the following criteria.

- the property is an array
- all items in the array should be non-empty strings

It returns a `Result` object (See [Result Types](#result-types)).

#### Examples

```ts
import { validateWorkspaces } from 'package-json-validator';

const packageData = {
  workspaces: ['./app', './packages/*'],
};

const result = validateWorkspaces(packageData.cpu);
```

## Specification

This package uses the `npm` [spec](https://docs.npmjs.com/cli/configuring-npm/package-json) along with additional [supporting documentation from node](https://nodejs.org/api/packages.html), as its source of truth for validation.

## Deprecation Policy

We never _want_ to remove things, when we're building them!
But the reality is that libraries evolve and deprecations are a fact of life.
Following are the different timeframes that we've defined as it relates to deprecating APIs in this project.

### RFC Timeframe (6 weeks)

When some aspect of our API is going to be deprecated (and eventually removed), it must initially go through an RFC phase.
Whoever's motivating the removal of the api, should create an RFC issue explaining the proposal and inviting feedback from the community.
That RFC should remain active for at least 6 weeks.
The RFC text should make clear what the target date is for closing the RFC.
Once the RFC period is over, if the removal is still moving forward, the API(s) should be officially deprecated.

### Removal Timeframe (6 months)

Once an API has been marked as deprecated, it will remain intact for at least 6 months.
After 6 months from the date of deprecation, the API is subject to removal.

## Development

See [`.github/CONTRIBUTING.md`](./.github/CONTRIBUTING.md), then [`.github/DEVELOPMENT.md`](./.github/DEVELOPMENT.md).
Thanks! 💖

## Contributors

<!-- spellchecker: disable -->
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tbody>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://alan.norbauer.com/"><img src="https://avatars.githubusercontent.com/u/1009?v=4?s=100" width="100px;" alt="Alan"/><br /><sub><b>Alan</b></sub></a><br /><a href="#ideas-altano" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://amilajack.com/"><img src="https://avatars.githubusercontent.com/u/6374832?v=4?s=100" width="100px;" alt="Amila Welihinda"/><br /><sub><b>Amila Welihinda</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=amilajack" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://brekken.com/"><img src="https://avatars.githubusercontent.com/u/843958?v=4?s=100" width="100px;" alt="Andreas Brekken"/><br /><sub><b>Andreas Brekken</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=abrkn" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/andreww2012"><img src="https://avatars.githubusercontent.com/u/6554045?v=4?s=100" width="100px;" alt="Andrew Kazakov"/><br /><sub><b>Andrew Kazakov</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=andreww2012" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://gitlab.com/4U6U57"><img src="https://avatars.githubusercontent.com/u/4676561?v=4?s=100" width="100px;" alt="August Valera"/><br /><sub><b>August Valera</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=4U6U57" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://azat.io"><img src="https://avatars.githubusercontent.com/u/5698350?v=4?s=100" width="100px;" alt="Azat S."/><br /><sub><b>Azat S.</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=azat-io" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/anomiex"><img src="https://avatars.githubusercontent.com/u/1030580?v=4?s=100" width="100px;" alt="Brad Jorsch"/><br /><sub><b>Brad Jorsch</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=anomiex" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="http://brett-zamir.me/"><img src="https://avatars.githubusercontent.com/u/20234?v=4?s=100" width="100px;" alt="Brett Zamir"/><br /><sub><b>Brett Zamir</b></sub></a><br /><a href="#ideas-brettz9" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://www.chrismontgomery.info/"><img src="https://avatars.githubusercontent.com/u/232356?v=4?s=100" width="100px;" alt="Chris Montgomery"/><br /><sub><b>Chris Montgomery</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=chmontgomery" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://www.claycarpenter.us/"><img src="https://avatars.githubusercontent.com/u/550902?v=4?s=100" width="100px;" alt="Clay Carpenter"/><br /><sub><b>Clay Carpenter</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=claycarpenter" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://danielbayley.dev"><img src="https://avatars.githubusercontent.com/u/7797479?v=4?s=100" width="100px;" alt="Daniel Bayley"/><br /><sub><b>Daniel Bayley</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Adanielbayley" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://foobar.social/web/@davglass"><img src="https://avatars.githubusercontent.com/u/32551?v=4?s=100" width="100px;" alt="Dav Glass"/><br /><sub><b>Dav Glass</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=davglass" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://ddy.su"><img src="https://avatars.githubusercontent.com/u/14067329?v=4?s=100" width="100px;" alt="Denis"/><br /><sub><b>Denis</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=de-don" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/DjDCH"><img src="https://avatars.githubusercontent.com/u/1269117?v=4?s=100" width="100px;" alt="DjDCH"/><br /><sub><b>DjDCH</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3ADjDCH" title="Bug reports">🐛</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="http://lishaduck.github.io"><img src="https://avatars.githubusercontent.com/u/88557639?v=4?s=100" width="100px;" alt="Eli"/><br /><sub><b>Eli</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Alishaduck" title="Bug reports">🐛</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=lishaduck" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://www.ericcornelissen.dev/"><img src="https://avatars.githubusercontent.com/u/3742559?v=4?s=100" width="100px;" alt="Eric Cornelissen"/><br /><sub><b>Eric Cornelissen</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Aericcornelissen" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/gtanner"><img src="https://avatars.githubusercontent.com/u/317051?v=4?s=100" width="100px;" alt="Gord Tanner"/><br /><sub><b>Gord Tanner</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=gtanner" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://hannah.wf"><img src="https://avatars.githubusercontent.com/u/101513?v=4?s=100" width="100px;" alt="Hannah Wolfe"/><br /><sub><b>Hannah Wolfe</b></sub></a><br /><a href="#ideas-erisds" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://h3manth.com/"><img src="https://avatars.githubusercontent.com/u/18315?v=4?s=100" width="100px;" alt="Hemanth HM"/><br /><sub><b>Hemanth HM</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=hemanth" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://hirok.io"><img src="https://avatars.githubusercontent.com/u/1075694?v=4?s=100" width="100px;" alt="Hiroki Osame"/><br /><sub><b>Hiroki Osame</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=privatenumber" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://rob.gant.ninja/"><img src="https://avatars.githubusercontent.com/u/710553?v=4?s=100" width="100px;" alt="J Rob Gant"/><br /><sub><b>J Rob Gant</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Argant" title="Bug reports">🐛</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="http://staxmanade.com/"><img src="https://avatars.githubusercontent.com/u/156715?v=4?s=100" width="100px;" alt="Jason Jarrett"/><br /><sub><b>Jason Jarrett</b></sub></a><br /><a href="#ideas-staxmanade" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://jasonkarns.com"><img src="https://avatars.githubusercontent.com/u/119972?v=4?s=100" width="100px;" alt="Jason Karns"/><br /><sub><b>Jason Karns</b></sub></a><br /><a href="#ideas-jasonkarns" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/jatin"><img src="https://avatars.githubusercontent.com/u/1121748?v=4?s=100" width="100px;" alt="Jatin Chopra"/><br /><sub><b>Jatin Chopra</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=jatin" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://www.joshuakgoldberg.com/"><img src="https://avatars.githubusercontent.com/u/3335181?v=4?s=100" width="100px;" alt="Josh Goldberg ✨"/><br /><sub><b>Josh Goldberg ✨</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3AJoshuaKGoldberg" title="Bug reports">🐛</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=JoshuaKGoldberg" title="Code">💻</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=JoshuaKGoldberg" title="Documentation">📖</a> <a href="#ideas-JoshuaKGoldberg" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-JoshuaKGoldberg" title="Maintenance">🚧</a> <a href="#tool-JoshuaKGoldberg" title="Tools">🔧</a> <a href="#content-JoshuaKGoldberg" title="Content">🖋</a> <a href="#infra-JoshuaKGoldberg" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#projectManagement-JoshuaKGoldberg" title="Project Management">📆</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/anudeep586"><img src="https://avatars.githubusercontent.com/u/61861542?v=4?s=100" width="100px;" alt="L N M Anudeep"/><br /><sub><b>L N M Anudeep</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=anudeep586" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="http://linus.xn--unnebck-9wa.se/"><img src="https://avatars.githubusercontent.com/u/189580?v=4?s=100" width="100px;" alt="Linus Unnebäck"/><br /><sub><b>Linus Unnebäck</b></sub></a><br /><a href="#maintenance-LinusU" title="Maintenance">🚧</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://dedic.eu"><img src="https://avatars.githubusercontent.com/u/3134692?v=4?s=100" width="100px;" alt="Marek Dědič"/><br /><sub><b>Marek Dědič</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Amarekdedic" title="Bug reports">🐛</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=marekdedic" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="http://holloway.co.nz/"><img src="https://avatars.githubusercontent.com/u/620580?v=4?s=100" width="100px;" alt="Matthew Holloway"/><br /><sub><b>Matthew Holloway</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Aholloway" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://morrisoncole.co.uk"><img src="https://avatars.githubusercontent.com/u/963368?v=4?s=100" width="100px;" alt="Morrison Cole"/><br /><sub><b>Morrison Cole</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3AMorrisonCole" title="Bug reports">🐛</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=MorrisonCole" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/TechNickAI"><img src="https://avatars.githubusercontent.com/u/142708?v=4?s=100" width="100px;" alt="Nick Sullivan"/><br /><sub><b>Nick Sullivan</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3ATechNickAI" title="Bug reports">🐛</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=TechNickAI" title="Code">💻</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=TechNickAI" title="Documentation">📖</a> <a href="#ideas-TechNickAI" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-TechNickAI" title="Maintenance">🚧</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/normful"><img src="https://avatars.githubusercontent.com/u/2453169?v=4?s=100" width="100px;" alt="Norman Sue"/><br /><sub><b>Norman Sue</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Anormful" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://about.me/peterdehaan"><img src="https://avatars.githubusercontent.com/u/557895?v=4?s=100" width="100px;" alt="Peter deHaan"/><br /><sub><b>Peter deHaan</b></sub></a><br /><a href="#ideas-pdehaan" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=pdehaan" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://reggi.com/"><img src="https://avatars.githubusercontent.com/u/296798?v=4?s=100" width="100px;" alt="Reggi"/><br /><sub><b>Reggi</b></sub></a><br /><a href="#ideas-reggi" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://dsebastien.net/"><img src="https://avatars.githubusercontent.com/u/89887?v=4?s=100" width="100px;" alt="Sebastien Dubois"/><br /><sub><b>Sebastien Dubois</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=dsebastien" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="http://www.sdealmeida.com/"><img src="https://avatars.githubusercontent.com/u/1103528?v=4?s=100" width="100px;" alt="Simon"/><br /><sub><b>Simon</b></sub></a><br /><a href="#ideas-sdalmeida" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/slavafomin"><img src="https://avatars.githubusercontent.com/u/1702725?v=4?s=100" width="100px;" alt="Slava Fomin II"/><br /><sub><b>Slava Fomin II</b></sub></a><br /><a href="#ideas-slavafomin" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/hyoban"><img src="https://avatars.githubusercontent.com/u/38493346?v=4?s=100" width="100px;" alt="Stephen Zhou"/><br /><sub><b>Stephen Zhou</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=hyoban" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/vkrol"><img src="https://avatars.githubusercontent.com/u/153412?v=4?s=100" width="100px;" alt="Veniamin Krol"/><br /><sub><b>Veniamin Krol</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=vkrol" title="Code">💻</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/gramergrater"><img src="https://avatars.githubusercontent.com/u/9351863?v=4?s=100" width="100px;" alt="gramergrater"/><br /><sub><b>gramergrater</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Agramergrater" title="Bug reports">🐛</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/hh-lohmann"><img src="https://avatars.githubusercontent.com/u/6406712?v=4?s=100" width="100px;" alt="hh.lohmann"/><br /><sub><b>hh.lohmann</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=hh-lohmann" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/michaelfaith"><img src="https://avatars.githubusercontent.com/u/8071845?v=4?s=100" width="100px;" alt="michael faith"/><br /><sub><b>michael faith</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=michaelfaith" title="Code">💻</a> <a href="#ideas-michaelfaith" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-michaelfaith" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#tool-michaelfaith" title="Tools">🔧</a> <a href="#maintenance-michaelfaith" title="Maintenance">🚧</a> <a href="https://github.com/michaelfaith/package-json-validator/issues?q=author%3Amichaelfaith" title="Bug reports">🐛</a> <a href="https://github.com/michaelfaith/package-json-validator/commits?author=michaelfaith" title="Documentation">📖</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="14.28%"><a href="https://github.com/sarahhagstrom"><img src="https://avatars.githubusercontent.com/u/1223862?v=4?s=100" width="100px;" alt="sarahhagstrom"/><br /><sub><b>sarahhagstrom</b></sub></a><br /><a href="https://github.com/michaelfaith/package-json-validator/commits?author=sarahhagstrom" title="Code">💻</a></td>
    </tr>
  </tbody>
</table>

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->
<!-- spellchecker: enable -->

## Appreciation

Many thanks to [@TechNickAI](https://github.com/TechNickAI) for creating the initial version and core infrastructure of this package! 💖

---
_Source: https://npm.io/package/package-json-validator · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
