From b6ac10002c35b5911d922ff5feb8ad845db53cd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Apr 2026 10:38:48 +0000 Subject: [PATCH 1/2] Bump package-json-validator from 0.6.4 to 1.4.1 Bumps [package-json-validator](https://github.com/michaelfaith/package-json-validator) from 0.6.4 to 1.4.1. - [Release notes](https://github.com/michaelfaith/package-json-validator/releases) - [Changelog](https://github.com/michaelfaith/package-json-validator/blob/main/CHANGELOG.md) - [Commits](https://github.com/michaelfaith/package-json-validator/commits/v1.4.1) --- updated-dependencies: - dependency-name: package-json-validator dependency-version: 0.32.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- pnpm-lock.yaml | 95 ++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 73 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 5b9d47ac..8c62a3fa 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@yarnpkg/lockfile": "^1.1.0", "chalk": "^5.0.1", "node-exceptions": "^4.0.1", - "package-json-validator": "0.6.4", + "package-json-validator": "1.4.1", "semver": "^7.3.7", "semver-intersect": "^1.4.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bcd50eec..08bf3f79 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: ^4.0.1 version: 4.0.1 package-json-validator: - specifier: 0.6.4 - version: 0.6.4 + specifier: 1.4.1 + version: 1.4.1 semver: specifier: ^7.3.7 version: 7.7.4 @@ -870,6 +870,10 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + hosted-git-info@9.0.2: + resolution: {integrity: sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==} + engines: {node: ^20.17.0 || >=22.9.0} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -1060,9 +1064,6 @@ packages: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} - minimist@0.0.10: - resolution: {integrity: sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} @@ -1099,8 +1100,9 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true - optimist@0.6.1: - resolution: {integrity: sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==} + npm-package-arg@13.0.2: + resolution: {integrity: sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==} + engines: {node: ^20.17.0 || >=22.9.0} p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} @@ -1121,9 +1123,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-json-validator@0.6.4: - resolution: {integrity: sha512-sp5bWr5eUoVgNV50vsJyil0XCluM+qMvtba8X4ug5Z/0YtYZsePka+tZgqiZnAyFyf5pwXaSDwYncFdSEzX7PA==} - hasBin: true + package-json-validator@1.4.1: + resolution: {integrity: sha512-kH0EKKflJOfYQeiANow4FkVn2yXVUdxPxtcSiAWSBOVXNopDBdPUShTKGVGy8Dln3n0dZZUETe0p1wGyUQGwBw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} parse-ms@4.0.0: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} @@ -1172,6 +1174,10 @@ packages: resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} + proc-log@6.1.0: + resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} + engines: {node: ^20.17.0 || >=22.9.0} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1247,6 +1253,18 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -1345,6 +1363,13 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@7.0.2: + resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} + engines: {node: ^20.17.0 || >=22.9.0} + vscode-languageserver-textdocument@1.0.12: resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} @@ -1366,10 +1391,6 @@ packages: engines: {node: '>= 8'} hasBin: true - wordwrap@0.0.3: - resolution: {integrity: sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==} - engines: {node: '>=0.4.0'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -2285,6 +2306,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hosted-git-info@9.0.2: + dependencies: + lru-cache: 11.3.5 + html-escaper@2.0.2: {} https-proxy-agent@7.0.6: @@ -2433,8 +2458,6 @@ snapshots: dependencies: brace-expansion: 2.1.0 - minimist@0.0.10: {} - minipass@7.1.3: {} minizlib@3.1.0: @@ -2457,10 +2480,12 @@ snapshots: dependencies: abbrev: 3.0.1 - optimist@0.6.1: + npm-package-arg@13.0.2: dependencies: - minimist: 0.0.10 - wordwrap: 0.0.3 + hosted-git-info: 9.0.2 + proc-log: 6.1.0 + semver: 7.7.4 + validate-npm-package-name: 7.0.2 p-limit@3.1.0: dependencies: @@ -2479,9 +2504,12 @@ snapshots: package-json-from-dist@1.0.1: {} - package-json-validator@0.6.4: + package-json-validator@1.4.1: dependencies: - optimist: 0.6.1 + npm-package-arg: 13.0.2 + semver: 7.7.4 + validate-npm-package-license: 3.0.4 + validate-npm-package-name: 7.0.2 parse-ms@4.0.0: {} @@ -2517,6 +2545,8 @@ snapshots: dependencies: parse-ms: 4.0.0 + proc-log@6.1.0: {} + queue-microtask@1.2.3: {} require-directory@2.1.1: {} @@ -2573,6 +2603,20 @@ snapshots: source-map@0.6.1: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.23 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 + + spdx-license-ids@3.0.23: {} + sprintf-js@1.0.3: {} stack-utils@2.0.6: @@ -2669,6 +2713,13 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@7.0.2: {} + vscode-languageserver-textdocument@1.0.12: {} vscode-uri@3.1.0: {} @@ -2686,8 +2737,6 @@ snapshots: dependencies: isexe: 2.0.0 - wordwrap@0.0.3: {} - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 From 7d66f16bfd4963fefe841b3f045eaf9bb0b02349 Mon Sep 17 00:00:00 2001 From: Jordan Mele Date: Sun, 26 Apr 2026 21:22:02 +1000 Subject: [PATCH 2/2] Handle `package-json-validator` breaking changes --- src/main.ts | 23 +++++++++++++++++------ src/missing-types.d.ts | 31 ------------------------------- 2 files changed, 17 insertions(+), 37 deletions(-) diff --git a/src/main.ts b/src/main.ts index 58458031..d9f9a15f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,6 +1,6 @@ import semver from "semver"; import { intersect as semverIntersect } from "semver-intersect"; -import { PJV, INpmValidateResult } from "package-json-validator"; +import { validate as packageJsonValidator } from "package-json-validator"; import fs from "fs"; import path from "path"; import chalk from "chalk"; @@ -14,8 +14,6 @@ export { InvalidBowerPackageException, } from "./exceptions.js"; -const packageJsonValidator = PJV.validate; - // Known dependency keys const npmDependencyTypes = [ "dependencies", @@ -61,6 +59,14 @@ interface ITemplatePath { path: string; } +interface INpmValidateResult { + valid: boolean; + errors?: { field: string; message: string }[]; + critical?: Record | string; + warnings?: string[]; + recommendations?: string[]; +} + /** * @public */ @@ -296,7 +302,10 @@ function npmValidate(pkg: INodeTemplate, pkgSpec: string, log: LogOption): void if (pkg[depType] && typeof pkg[depType] !== 'object') { if (!results.errors) results.errors = []; results.valid = false; - results.errors.push(`"${depType}" must be an object.`); + results.errors.push({ + field: depType, + message: "must be an object." + }); } } } @@ -328,14 +337,16 @@ function npmErrors(results: INpmValidateResult, log: LogOption): void { if (log) { // Announce critical errors. if (results.critical) { - log(chalk.bgRed("Critical Error: ") + chalk.red(results.critical)); + const criticalError = typeof results.critical === "string" ? results.critical : JSON.stringify(results.critical); + log(chalk.bgRed("Critical Error: ") + chalk.red(criticalError)); } // Announce errors. if (results.errors) { log(chalk.underline.red("Errors:")); for (let error of results.errors) { - log(" " + chalk.red(error)); + const errorMessage = `${error.field}: ${error.message}`; + log(" " + chalk.red(errorMessage)); } } diff --git a/src/missing-types.d.ts b/src/missing-types.d.ts index b111dafa..4656fb95 100644 --- a/src/missing-types.d.ts +++ b/src/missing-types.d.ts @@ -1,34 +1,3 @@ declare module "semver-intersect" { export function intersect(...versions: string[]): string; } - -declare module "package-json-validator" { - export interface INpmValidateResult { - valid: boolean; - errors?: string[]; - critical?: string; - warnings?: string[]; - recommendations?: string[] - } - type PackageSpecs = "npm" | "commonjs_1.0" | "commonjs_1.1"; - type PJV = { - packageFormat: string, - versionFormat: string, - urlFormat: string, - emailFormat: string, - getSpecMap(specName: PackageSpecs): false | {}, - parse(data: string): string; - validate( - data: string, - specName?: PackageSpecs, - options?: {} - ): INpmValidateResult, - validateType(name: string, field: {}, value: any): string[], - validateDependencies(name: string, deps: {}): string[], - isValidVersionRange(v: string): boolean, - validateUrlOrMailto(name: string, obj: {}): string[], - validatePeople(name: string, obj: {}): string[], - validateUrlTypes(name: string, obj: {}): string[], - } - export const PJV: PJV; -}