
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
package-json-validator
Advanced tools
Tools to validate package.json
files.
npm install package-json-validator
import { validate } from "package-json-validator";
validate(/* ... */);
For tools that run these validations, see:
This function validates an entire package.json
and returns a list of errors, if
any violations are found.
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
}
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'
// ]
}
This function validates the value of the author
property of a package.json
.
It takes the value, and validates it against the following criteria.
name
field and, optionally, email
and / or url
fields.email
and url
fields should be valid email and url, respectively.It returns a list of error messages, if any violations are found.
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);
This function validates the value of the bin
property of a package.json
.
It takes the value, and validates it against the following criteria.
string
or object
.string
, it should be a relative path to an executable file.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.
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);
This function validates the value of the bundleDependencies
property of a package.json
.
It takes the value, and validates it against the following criteria.
It returns a list of error messages, if any violations are found.
import { validateBundleDependencies } from "package-json-validator";
const packageData = {
bundleDependencies: ["renderized", "super-streams"],
};
const errors = validateBundleDependencies(packageData.bundleDependencies);
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.
import { validateConfig } from "package-json-validator";
const packageData = {
config: {
debug: true,
host: "localhost",
port: 8080,
},
};
const errors = validateScripts(packageData.config);
This function validates the value of the cpu
property of a package.json
.
It takes the value, and validates it against the following criteria.
It returns a list of error messages, if any violations are found.
import { validateCpu } from "package-json-validator";
const packageData = {
cpu: ["x64", "ia32"],
};
const errors = validateCpu(packageData.cpu);
Also: validateDevDependencies(value)
, validateOptionalDependencies(value)
, and validatePeerDependencies(value)
These functions validate the value of their respective dependency
property.
They take the value, and validate it against the following criteria.
object
.It returns a list of error messages, if any violations are found.
import { validateDependencies } from "package-json-validator";
const packageData = {
dependencies: {
"@catalog/package": "catalog:",
"@my/package": "^1.2.3",
"@workspace/package": "workspace:^",
},
};
const errors = validateBin(packageData.dependencies);
This function validates the value of the description
property of a package.json
.
It checks that the value is a non-empty string, and returns a list of error messages, if a violation is found.
import { validateDescription } from "package-json-validator";
const packageData = {
description: "The Fragile",
};
const errors = validateDescription(packageData.description);
This function validates the value of the directories
property of a package.json
.
It takes the value, and validates it against the following criteria.
It returns a list of error messages, if any violations are found.
import { validateDirectories } from "package-json-validator";
const packageData = {
directories: {
bin: "dist/bin",
man: "docs",
},
};
const errors = validateDirectories(packageData.directories);
This function validates the value of the exports
property of a package.json
.
It takes the value, and validates it against the following criteria.
string
or object
.string
, it should be a path to an entry point.object
, its properties should have values that are either a path to an entry point, or another exports condition object.It returns a list of error messages, if any violations are found.
import { validateExports } from "package-json-validator";
const packageData = {
exports: "./index.js",
};
const errors = validateExports(packageData.exports);
/* eslint-disable perfectionist/sort-objects */
import { validateExports } from "package-json-validator";
const packageData = {
exports: {
".": {
types: "./index.d.ts",
default: "./index.js",
},
"./secondary": {
types: "./secondary.d.ts",
default: "./secondary.js",
},
},
};
const errors = validateExports(packageData.exports);
/* eslint-enable perfectionist/sort-objects */
This function validates the value of the license
property of a package.json
.
It takes the value, and validates it using validate-npm-package-license
, which is the same package that npm uses.
It returns a list of error messages, if a violation is found.
import { validateLicense } from "package-json-validator";
const packageData = {
license: "MIT",
};
const errors = validateLicense(packageData.license);
This function validates the value of the scripts
property of a package.json
.
It takes the value, and validates it against the following criteria.
It returns a list of error messages, if any violations are found.
import { validateScripts } from "package-json-validator";
const packageData = {
scripts: {
build: "rollup -c",
lint: "eslint .",
test: "vitest",
},
};
const errors = validateScripts(packageData.scripts);
This function validates the value of the type
property of a package.json
.
It takes the value, and validates it against the following criteria.
'commonjs'
or 'module'
It returns an error message, if a violation is found.
import { validateType } from "package-json-validator";
const packageData = {
type: "module",
};
const errors = validateType(packageData.type);
This function validates the value of the version
property of a package.json
.
It takes the value, and validates it using semver
, which is the same package that npm uses.
It returns a list of error messages, if a violation is found.
import { validateVersion } from "package-json-validator";
const packageData = {
version: "1.2.3",
};
const errors = validateVersion(packageData.version);
This package uses the npm
spec along with additional supporting documentation from node, as its source of truth for validation.
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.
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.
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.
See .github/CONTRIBUTING.md
, then .github/DEVELOPMENT.md
.
Thanks! π
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.
0.30.0 (2025-08-22)
FAQs
Tools to validate package.json files.
The npm package package-json-validator receives a total of 86,824 weekly downloads. As such, package-json-validator popularity was classified as popular.
We found that package-json-validator demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last weekβs supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.