Skip to content

Commit 02f6842

Browse files
Support devEngines field in package.json (#4561)
* 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](npm/cli#7766) and [Corepack 0.32.0](nodejs/corepack#643). * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent b5ef550 commit 02f6842

File tree

2 files changed

+146
-0
lines changed

2 files changed

+146
-0
lines changed

src/schemas/json/package.json

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,33 @@
304304
"required": [
305305
"url"
306306
]
307+
},
308+
"devEngineDependency": {
309+
"description": "Specifies requirements for development environment components such as operating systems, runtimes, or package managers. Used to ensure consistent development environments across the team.",
310+
"type": "object",
311+
"required": [
312+
"name"
313+
],
314+
"properties": {
315+
"name": {
316+
"type": "string",
317+
"description": "The name of the dependency, with allowed values depending on the parent field"
318+
},
319+
"version": {
320+
"type": "string",
321+
"description": "The version range for the dependency"
322+
},
323+
"onFail": {
324+
"type": "string",
325+
"enum": [
326+
"ignore",
327+
"warn",
328+
"error",
329+
"download"
330+
],
331+
"description": "What action to take if validation fails"
332+
}
333+
}
307334
}
308335
},
309336
"type": "object",
@@ -810,6 +837,82 @@
810837
"type": "string"
811838
}
812839
},
840+
"devEngines": {
841+
"description": "Define the runtime and package manager for developing the current project.",
842+
"type": "object",
843+
"properties": {
844+
"os": {
845+
"oneOf": [
846+
{
847+
"$ref": "#/definitions/devEngineDependency"
848+
},
849+
{
850+
"type": "array",
851+
"items": {
852+
"$ref": "#/definitions/devEngineDependency"
853+
}
854+
}
855+
],
856+
"description": "Specifies which operating systems are supported for development"
857+
},
858+
"cpu": {
859+
"oneOf": [
860+
{
861+
"$ref": "#/definitions/devEngineDependency"
862+
},
863+
{
864+
"type": "array",
865+
"items": {
866+
"$ref": "#/definitions/devEngineDependency"
867+
}
868+
}
869+
],
870+
"description": "Specifies which CPU architectures are supported for development"
871+
},
872+
"libc": {
873+
"oneOf": [
874+
{
875+
"$ref": "#/definitions/devEngineDependency"
876+
},
877+
{
878+
"type": "array",
879+
"items": {
880+
"$ref": "#/definitions/devEngineDependency"
881+
}
882+
}
883+
],
884+
"description": "Specifies which C standard libraries are supported for development"
885+
},
886+
"runtime": {
887+
"oneOf": [
888+
{
889+
"$ref": "#/definitions/devEngineDependency"
890+
},
891+
{
892+
"type": "array",
893+
"items": {
894+
"$ref": "#/definitions/devEngineDependency"
895+
}
896+
}
897+
],
898+
"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/)"
899+
},
900+
"packageManager": {
901+
"oneOf": [
902+
{
903+
"$ref": "#/definitions/devEngineDependency"
904+
},
905+
{
906+
"type": "array",
907+
"items": {
908+
"$ref": "#/definitions/devEngineDependency"
909+
}
910+
}
911+
],
912+
"description": "Specifies which package managers are supported for development"
913+
}
914+
}
915+
},
813916
"preferGlobal": {
814917
"type": "boolean",
815918
"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."

src/test/package/devEngines.json

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"devEngines": {
3+
"cpu": [
4+
{
5+
"name": "arm"
6+
},
7+
{
8+
"name": "x86"
9+
}
10+
],
11+
"libc": {
12+
"name": "glibc"
13+
},
14+
"os": {
15+
"name": "darwin",
16+
"version": ">= 23.0.0"
17+
},
18+
"packageManager": [
19+
{
20+
"name": "bun",
21+
"onFail": "ignore",
22+
"version": ">= 1.0.0"
23+
},
24+
{
25+
"name": "yarn",
26+
"onFail": "download",
27+
"version": "3.2.3"
28+
}
29+
],
30+
"runtime": [
31+
{
32+
"name": "bun",
33+
"onFail": "ignore",
34+
"version": ">= 1.0.0"
35+
},
36+
{
37+
"name": "node",
38+
"onFail": "error",
39+
"version": ">= 20.0.0"
40+
}
41+
]
42+
}
43+
}

0 commit comments

Comments
 (0)