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

0.13.3 β€’ 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);

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

99,524

Version

0.13.3

License

MIT

Unpacked Size

99.1 kB

Total Files

61

Last publish

Collaborators

  • joshuakgoldberg