From c72a694a632e67220faa48ac0dab44ae662bdc84 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 13 Mar 2025 21:40:58 +0800 Subject: [PATCH 1/2] Support `devEngines` field in `package.json` It's a [standardization effort by the OpenJS Foundation](https://github.com/openjs-foundation/package-metadata-interoperability-collab-space/blob/43e31689ae1fff8c46b617548655a3f60e0c9387/devengines-field-proposal.md) and has been implemented in [NPM 10.9.0](https://github.com/npm/cli/pull/7766) and [Corepack 0.32.0](https://github.com/nodejs/corepack/pull/643). --- src/schemas/json/package.json | 76 ++++++++++++++++++++++++++++++++ src/test/package/devEngines.json | 43 ++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 src/test/package/devEngines.json diff --git a/src/schemas/json/package.json b/src/schemas/json/package.json index bd74c992dcb..2326c30096f 100644 --- a/src/schemas/json/package.json +++ b/src/schemas/json/package.json @@ -304,6 +304,26 @@ "required": [ "url" ] + }, + "devEngineDependency": { + "description": "Specifies requirements for development environment components such as operating systems, runtimes, or package managers. Used to ensure consistent development environments across the team.", + "type": "object", + "required": ["name"], + "properties": { + "name": { + "type": "string", + "description": "The name of the dependency, with allowed values depending on the parent field" + }, + "version": { + "type": "string", + "description": "The version range for the dependency" + }, + "onFail": { + "type": "string", + "enum": ["ignore", "warn", "error", "download"], + "description": "What action to take if validation fails" + } + } } }, "type": "object", @@ -810,6 +830,62 @@ "type": "string" } }, + "devEngines": { + "description": "Define the runtime and package manager for developing the current project.", + "type": "object", + "properties": { + "os": { + "oneOf": [ + { "$ref": "#/definitions/devEngineDependency" }, + { + "type": "array", + "items": { "$ref": "#/definitions/devEngineDependency" } + } + ], + "description": "Specifies which operating systems are supported for development" + }, + "cpu": { + "oneOf": [ + { "$ref": "#/definitions/devEngineDependency" }, + { + "type": "array", + "items": { "$ref": "#/definitions/devEngineDependency" } + } + ], + "description": "Specifies which CPU architectures are supported for development" + }, + "libc": { + "oneOf": [ + { "$ref": "#/definitions/devEngineDependency" }, + { + "type": "array", + "items": { "$ref": "#/definitions/devEngineDependency" } + } + ], + "description": "Specifies which C standard libraries are supported for development" + }, + "runtime": { + "oneOf": [ + { "$ref": "#/definitions/devEngineDependency" }, + { + "type": "array", + "items": { "$ref": "#/definitions/devEngineDependency" } + } + ], + "description": "Specifies which JavaScript runtimes (like Node.js, Deno, Bun) are supported for development. Values should use WinterCG Runtime Keys (see https://runtime-keys.proposal.wintercg.org/)" + }, + "packageManager": { + "oneOf": [ + { "$ref": "#/definitions/devEngineDependency" }, + { + "type": "array", + "items": { "$ref": "#/definitions/devEngineDependency" } + } + ], + "description": "Specifies which package managers are supported for development" + } + } + }, "preferGlobal": { "type": "boolean", "description": "DEPRECATED: This option used to trigger an npm warning, but it will no longer warn. It is purely there for informational purposes. It is now recommended that you install any binaries as local devDependencies wherever possible." diff --git a/src/test/package/devEngines.json b/src/test/package/devEngines.json new file mode 100644 index 00000000000..eee078d2b74 --- /dev/null +++ b/src/test/package/devEngines.json @@ -0,0 +1,43 @@ +{ + "devEngines": { + "cpu": [ + { + "name": "arm" + }, + { + "name": "x86" + } + ], + "libc": { + "name": "glibc" + }, + "os": { + "name": "darwin", + "version": ">= 23.0.0" + }, + "packageManager": [ + { + "name": "bun", + "onFail": "ignore", + "version": ">= 1.0.0" + }, + { + "name": "yarn", + "onFail": "download", + "version": "3.2.3" + } + ], + "runtime": [ + { + "name": "bun", + "onFail": "ignore", + "version": ">= 1.0.0" + }, + { + "name": "node", + "onFail": "error", + "version": ">= 20.0.0" + } + ] + } +} From 340bd2fcfd52474c0996cd42bc71ada0407fa76a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:49:38 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/schemas/json/package.json | 51 ++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/schemas/json/package.json b/src/schemas/json/package.json index 2326c30096f..aaeba1aa85c 100644 --- a/src/schemas/json/package.json +++ b/src/schemas/json/package.json @@ -308,7 +308,9 @@ "devEngineDependency": { "description": "Specifies requirements for development environment components such as operating systems, runtimes, or package managers. Used to ensure consistent development environments across the team.", "type": "object", - "required": ["name"], + "required": [ + "name" + ], "properties": { "name": { "type": "string", @@ -320,7 +322,12 @@ }, "onFail": { "type": "string", - "enum": ["ignore", "warn", "error", "download"], + "enum": [ + "ignore", + "warn", + "error", + "download" + ], "description": "What action to take if validation fails" } } @@ -836,50 +843,70 @@ "properties": { "os": { "oneOf": [ - { "$ref": "#/definitions/devEngineDependency" }, + { + "$ref": "#/definitions/devEngineDependency" + }, { "type": "array", - "items": { "$ref": "#/definitions/devEngineDependency" } + "items": { + "$ref": "#/definitions/devEngineDependency" + } } ], "description": "Specifies which operating systems are supported for development" }, "cpu": { "oneOf": [ - { "$ref": "#/definitions/devEngineDependency" }, + { + "$ref": "#/definitions/devEngineDependency" + }, { "type": "array", - "items": { "$ref": "#/definitions/devEngineDependency" } + "items": { + "$ref": "#/definitions/devEngineDependency" + } } ], "description": "Specifies which CPU architectures are supported for development" }, "libc": { "oneOf": [ - { "$ref": "#/definitions/devEngineDependency" }, + { + "$ref": "#/definitions/devEngineDependency" + }, { "type": "array", - "items": { "$ref": "#/definitions/devEngineDependency" } + "items": { + "$ref": "#/definitions/devEngineDependency" + } } ], "description": "Specifies which C standard libraries are supported for development" }, "runtime": { "oneOf": [ - { "$ref": "#/definitions/devEngineDependency" }, + { + "$ref": "#/definitions/devEngineDependency" + }, { "type": "array", - "items": { "$ref": "#/definitions/devEngineDependency" } + "items": { + "$ref": "#/definitions/devEngineDependency" + } } ], "description": "Specifies which JavaScript runtimes (like Node.js, Deno, Bun) are supported for development. Values should use WinterCG Runtime Keys (see https://runtime-keys.proposal.wintercg.org/)" }, "packageManager": { "oneOf": [ - { "$ref": "#/definitions/devEngineDependency" }, + { + "$ref": "#/definitions/devEngineDependency" + }, { "type": "array", - "items": { "$ref": "#/definitions/devEngineDependency" } + "items": { + "$ref": "#/definitions/devEngineDependency" + } } ], "description": "Specifies which package managers are supported for development"