package.json validator
Tools to validate package.json
files.
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"]
--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, 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: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 / orurl
fields. - if present, the
email
andurl
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
orobject
. - 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);
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 list of error messages, if a violation is found.
Examples
import { validateConfig } from "package-json-validator";
const packageData = {
config: {
debug: true,
host: "localhost",
port: 8080,
},
};
const errors = validateScripts(packageData.config);
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);
Specification
This package uses the npm
spec along with additional supporting documentation from node, 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
, then .github/DEVELOPMENT.md
.
Thanks! 💖
Contributors
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.