Skip to content

JoshuaKGoldberg/package-json-validator

Repository files navigation

package.json validator

Tools to validate package.json files.

🀝 Code of Conduct: Kept πŸ“ License: MIT πŸ“¦ npm version

Supported Specifications

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

Usages

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 { PJV } from "package-json-validator";

PJV.validate(/* ... */);

API

PJV.validate(packageData[([, spec], options)]);

spec is either npm, commonjs_1.0, or commonjs_1.1

options is an object with the following available:

{
    warnings: true, // show warnings
    recommendations: true // show recommendations
}

Example:

const { PJV } = require("package-json-validator");

PJV.validate(data, spec, options);

Example1:

const { PJV } = require("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 = PJV.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'
//  ]
}

Contributors

Alan
Alan

πŸ€”
Amila Welihinda
Amila Welihinda

πŸ’»
Andreas Brekken
Andreas Brekken

πŸ’»
August Valera
August Valera

πŸ’»
Brett Zamir
Brett Zamir

πŸ€”
Chris Montgomery
Chris Montgomery

πŸ’»
Clay Carpenter
Clay Carpenter

πŸ’»
Dav Glass
Dav Glass

πŸ’»
Denis
Denis

πŸ’»
DjDCH
DjDCH

πŸ›
Eric Cornelissen
Eric Cornelissen

πŸ›
Gord Tanner
Gord Tanner

πŸ’»
Hemanth HM
Hemanth HM

πŸ’»
J Rob Gant
J Rob Gant

πŸ›
Jason Jarrett
Jason Jarrett

πŸ€”
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

πŸ›
sarahhagstrom
sarahhagstrom

πŸ’»

Appreciation

Many thanks to @TechNickAI for creating the initial version and core infrastructure of this package! πŸ’–