Détail du package

package-json-validator

JoshuaKGoldberg390kMIT0.11.0

Tools to validate package.json files.

lint, package.json, package.json linter, package.json validator

readme

package.json validator

Tools to validate package.json files.

👪 All Contributors: 35 🤝 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'
//  ]
}

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

💻
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.

changelog

Changelog

0.10.2 (2025-04-29)

Bug Fixes

  • support jsr package version specifiers (#211) (77e8c7e)

0.10.1 (2025-04-03)

Bug Fixes

  • bump to create-typescript-app@2 with transitions action (#178) (c9a968c), closes #172
  • empty commit to trigger release (ecd3ee5)

0.10.0 (2025-01-30)

Features

0.9.0 (2025-01-28)

Features

0.8.0 (2025-01-15)

Features

0.7.3 (2024-12-31)

Bug Fixes

  • add support for catalog:, npm:, and workspace: protocol (#103) (91c139a), closes #71 #71

0.7.2 (2024-12-30)

Bug Fixes

0.7.1 (2024-12-17)

Bug Fixes

0.7.0 (2024-10-17)

Features

0.6.8 (2024-10-15)

Bug Fixes

  • demo files are now in demo/ (84f7689)

0.6.7 (2024-10-15)

Bug Fixes

  • add missing files to publish (fd3cdd1)

0.6.6 (2024-10-15)

Bug Fixes

  • also check peerDependencies for valid semver (#96) (b64e97a), closes #65
  • don't require version or name if package has "private": true (895f710)
  • remove references to expired domain (e09d248)