package-json-validator
TypeScript icon, indicating that this package has built-in type declarations

0.18.0 • Public • Published

package.json validator

Tools to validate package.json files.

👪 All Contributors: 36 🤝 Code of Conduct: Kept 🧪 Coverage 📝 License: MIT 📦 npm version 💪 TypeScript: Strict

Usage

Command line

npm install package-json-validator -g

See pjv --help for usage:

Options:
  --filename, -f         package.json file to validate                      [default: "package.json"]
  --spec, -s             which spec to use - npm|commonjs_1.0|commonjs_1.1  [default: "npm"]
  --warnings, -w         display warnings                                   [default: false]
  --recommendations, -r  display recommendations                            [default: false]
  --quiet, -q            less output                                        [default: false]
  --help, -h, -?         this help message                                  [default: false]

Node.js

npm install package-json-validator
import { validate } from "package-json-validator";

validate(/* ... */);

API

validate(data, spec?, 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.
  • spec is either npm, commonjs_1.0, or commonjs_1.1
  • options is an object with the following:
    interface Options {
    	recommendations?: boolean; // show recommendations
    	warnings?: boolean; // show warnings
    }

Examples

Example using an object:

import { validate } from "package-json-validator";

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

validate(packageData);

Example using a string:

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);

Output for above example:

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'
//  ]
}

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 list of error messages, if any violations are found.

Examples

import { validateAuthor } from "package-json-validator";

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

const errors = validateAuthor(packageData.author);
import { validateAuthor } from "package-json-validator";

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

const errors = 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 list of error messages, if any violations are found.

Examples

import { validateBin } from "package-json-validator";

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

const errors = validateBin(packageData.bin);
import { validateBin } from "package-json-validator";

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

const errors = validateBin(packageData.bin);

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 list of error messages, if any violations are found.

Examples

import { validateBundleDependencies } from "package-json-validator";

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

const errors = validateBundleDependencies(packageData.packageData);

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 list of error messages, if any violations are found.

Examples

import { validateScripts } from "package-json-validator";

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

const errors = validateScripts(packageData.scripts);

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 an error message, if a violation is found.

Examples

import { validateType } from "package-json-validator";

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

const errors = validateType(packageData.type);

Supported Specifications

Of course, there are multiple ones to follow, which makes it trickier.

Development

See .github/CONTRIBUTING.md, then .github/DEVELOPMENT.md. Thanks! 💖

Contributors

Alan
Alan

🤔
Amila Welihinda
Amila Welihinda

💻
Andreas Brekken
Andreas Brekken

💻
August Valera
August Valera

💻
Azat S.
Azat S.

💻
Brett Zamir
Brett Zamir

🤔
Chris Montgomery
Chris Montgomery

💻
Clay Carpenter
Clay Carpenter

💻
Daniel Bayley
Daniel Bayley

🐛
Dav Glass
Dav Glass

💻
Denis
Denis

💻
DjDCH
DjDCH

🐛
Eric Cornelissen
Eric Cornelissen

🐛
Gord Tanner
Gord Tanner

💻
Hannah Wolfe
Hannah Wolfe

🤔
Hemanth HM
Hemanth HM

💻
J Rob Gant
J Rob Gant

🐛
Jason Jarrett
Jason Jarrett

🤔
Jason Karns
Jason Karns

🤔
Jatin Chopra
Jatin Chopra

💻
Josh Goldberg ✨
Josh Goldberg ✨

🐛 💻 📖 🤔 🚧 🔧 🖋 🚇 📆
L N M Anudeep
L N M Anudeep

💻
Linus Unnebäck
Linus Unnebäck

🚧
Matthew Holloway
Matthew Holloway

🐛
Nick Sullivan
Nick Sullivan

🐛 💻 📖 🤔 🚧
Norman Sue
Norman Sue

🐛
Peter deHaan
Peter deHaan

🤔 💻
Reggi
Reggi

🤔
Sebastien Dubois
Sebastien Dubois

💻
Simon
Simon

🤔
Slava Fomin II
Slava Fomin II

🤔
Stephen Zhou
Stephen Zhou

💻
Veniamin Krol
Veniamin Krol

💻
gramergrater
gramergrater

🐛
michael faith
michael faith

💻 🤔 🚇 🔧 🚧 🐛
sarahhagstrom
sarahhagstrom

💻

Appreciation

Many thanks to @TechNickAI for creating the initial version and core infrastructure of this package! 💖

💝 This package was templated with create-typescript-app using the Bingo framework.

Package Sidebar

Install

npm i package-json-validator

Weekly Downloads

91,477

Version

0.18.0

License

MIT

Unpacked Size

67.1 kB

Total Files

40

Last publish

Collaborators

  • joshuakgoldberg