pob 40.5.1 → 40.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/utils/nodeEngines.js +19 -10
- package/lib/utils/nodeEngines.test.js +18 -7
- package/package.json +8 -9
package/lib/utils/nodeEngines.js
CHANGED
|
@@ -3,13 +3,19 @@ import semver from "semver";
|
|
|
3
3
|
import { latestLTS, maintenanceLTS } from "./nodeVersions.js";
|
|
4
4
|
import * as packageUtils from "./package.js";
|
|
5
5
|
|
|
6
|
-
// 22.18.0 is the version with strip typescript out of experimental status
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
["
|
|
10
|
-
["
|
|
6
|
+
// 22.18.0 is the version with strip typescript out of experimental status.
|
|
7
|
+
// 22 skips node 23: features backported to 22 are experimental there.
|
|
8
|
+
const enginesNodeForMajor = new Map([
|
|
9
|
+
["22", "^22.18.0 || >=24.14.1"],
|
|
10
|
+
["24", ">=24.14.1"],
|
|
11
|
+
["26", ">=26.0.0"],
|
|
11
12
|
]);
|
|
12
13
|
|
|
14
|
+
const minVersionForMajor = (major) => {
|
|
15
|
+
const enginesNode = enginesNodeForMajor.get(major);
|
|
16
|
+
return enginesNode && semver.minVersion(enginesNode).version;
|
|
17
|
+
};
|
|
18
|
+
|
|
13
19
|
const legacyMajors = ["4", "6", "8", "10", "12", "14", "16", "18", "20"];
|
|
14
20
|
|
|
15
21
|
/**
|
|
@@ -61,7 +67,7 @@ export const resolveEnginesNode = (
|
|
|
61
67
|
const major = legacyMajors.includes(String(minNodeMajor))
|
|
62
68
|
? maintenanceLTS
|
|
63
69
|
: String(minNodeMajor);
|
|
64
|
-
const minVersion = minVersionForMajor
|
|
70
|
+
const minVersion = minVersionForMajor(major);
|
|
65
71
|
if (!minVersion) {
|
|
66
72
|
throw new Error(`Invalid min node version: ${minNodeMajor}`);
|
|
67
73
|
}
|
|
@@ -75,7 +81,7 @@ export const resolveEnginesNode = (
|
|
|
75
81
|
return currentEnginesNode;
|
|
76
82
|
}
|
|
77
83
|
|
|
78
|
-
return
|
|
84
|
+
return enginesNodeForMajor.get(major);
|
|
79
85
|
};
|
|
80
86
|
|
|
81
87
|
/**
|
|
@@ -129,15 +135,18 @@ export const updateNodeEngines = (pkg, { onlyLatestLTS } = {}) => {
|
|
|
129
135
|
packageUtils.removeDevDependencies(pkg, ["@types/node"]);
|
|
130
136
|
|
|
131
137
|
// Supports oldest current or active LTS version of node
|
|
132
|
-
const
|
|
138
|
+
const enginesNode = enginesNodeForMajor.get(
|
|
133
139
|
onlyLatestLTS ? latestLTS : maintenanceLTS,
|
|
134
140
|
);
|
|
135
141
|
|
|
136
142
|
if (
|
|
137
143
|
!pkg.engines.node ||
|
|
138
|
-
semver.
|
|
144
|
+
semver.lte(
|
|
145
|
+
semver.minVersion(pkg.engines.node),
|
|
146
|
+
semver.minVersion(enginesNode),
|
|
147
|
+
)
|
|
139
148
|
) {
|
|
140
|
-
pkg.engines.node =
|
|
149
|
+
pkg.engines.node = enginesNode;
|
|
141
150
|
}
|
|
142
151
|
}
|
|
143
152
|
};
|
|
@@ -6,6 +6,8 @@ import {
|
|
|
6
6
|
updateTypesNodeFromEngines,
|
|
7
7
|
} from "./nodeEngines.js";
|
|
8
8
|
|
|
9
|
+
const NODE_22 = "^22.18.0 || >=24.14.1";
|
|
10
|
+
|
|
9
11
|
describe("updateTypesNodeFromEngines", () => {
|
|
10
12
|
it("keeps pinned devDependencies pinned when lower than engines min major", () => {
|
|
11
13
|
const pkg = {
|
|
@@ -97,8 +99,8 @@ describe("updateTypesNodeFromEngines", () => {
|
|
|
97
99
|
|
|
98
100
|
describe("resolveEnginesNode", () => {
|
|
99
101
|
it.each([
|
|
100
|
-
["18",
|
|
101
|
-
["22",
|
|
102
|
+
["18", NODE_22],
|
|
103
|
+
["22", NODE_22],
|
|
102
104
|
["24", ">=24.14.1"],
|
|
103
105
|
["26", ">=26.0.0"],
|
|
104
106
|
])("resolves min major %s from envs", (minMajor, expected) => {
|
|
@@ -112,11 +114,11 @@ describe("resolveEnginesNode", () => {
|
|
|
112
114
|
});
|
|
113
115
|
|
|
114
116
|
it("migrates >=22.11.x", () => {
|
|
115
|
-
expect(resolveEnginesNode(">=22.11.0", "22", false)).toBe(
|
|
117
|
+
expect(resolveEnginesNode(">=22.11.0", "22", false)).toBe(NODE_22);
|
|
116
118
|
});
|
|
117
119
|
|
|
118
120
|
it("raises a lower engines.node without envs", () => {
|
|
119
|
-
expect(resolveEnginesNode(">=18.0.0", "22", false)).toBe(
|
|
121
|
+
expect(resolveEnginesNode(">=18.0.0", "22", false)).toBe(NODE_22);
|
|
120
122
|
});
|
|
121
123
|
|
|
122
124
|
it("keeps a higher engines.node without envs", () => {
|
|
@@ -124,7 +126,7 @@ describe("resolveEnginesNode", () => {
|
|
|
124
126
|
});
|
|
125
127
|
|
|
126
128
|
it("lets envs lower engines.node", () => {
|
|
127
|
-
expect(resolveEnginesNode(">=24.14.1", "22", true)).toBe(
|
|
129
|
+
expect(resolveEnginesNode(">=24.14.1", "22", true)).toBe(NODE_22);
|
|
128
130
|
});
|
|
129
131
|
|
|
130
132
|
it.each([true, false])(
|
|
@@ -161,7 +163,7 @@ describe("updateNodeEngines", () => {
|
|
|
161
163
|
it("uses the maintenance LTS without envs", () => {
|
|
162
164
|
const pkg = {};
|
|
163
165
|
updateNodeEngines(pkg, {});
|
|
164
|
-
expect(pkg.engines.node).toBe(
|
|
166
|
+
expect(pkg.engines.node).toBe(NODE_22);
|
|
165
167
|
});
|
|
166
168
|
|
|
167
169
|
it("uses the latest LTS without envs when onlyLatestLTS", () => {
|
|
@@ -179,7 +181,16 @@ describe("updateNodeEngines", () => {
|
|
|
179
181
|
updateNodeEngines(pkg, {});
|
|
180
182
|
expect(pkg.dependencies).toBeUndefined();
|
|
181
183
|
expect(pkg.devDependencies["@types/node"]).toBeUndefined();
|
|
182
|
-
expect(pkg.engines.node).toBe(
|
|
184
|
+
expect(pkg.engines.node).toBe(NODE_22);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it("migrates >=22.18.0 when there is no node target", () => {
|
|
188
|
+
const pkg = {
|
|
189
|
+
pob: { envs: [{ target: "browser" }] },
|
|
190
|
+
engines: { node: ">=22.18.0" },
|
|
191
|
+
};
|
|
192
|
+
updateNodeEngines(pkg, {});
|
|
193
|
+
expect(pkg.engines.node).toBe(NODE_22);
|
|
183
194
|
});
|
|
184
195
|
|
|
185
196
|
it("keeps a higher engines.node when there is no node target", () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pob",
|
|
3
|
-
"version": "40.
|
|
3
|
+
"version": "40.7.0",
|
|
4
4
|
"description": "Pile of bones, library generator with git/babel/typescript/typedoc/readme/vitest",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"skeleton"
|
|
@@ -32,11 +32,10 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@pob/codemods": "0.18.2",
|
|
35
|
-
"@pob/eslint-config": "68.
|
|
36
|
-
"@pob/eslint-config-typescript-react": "68.
|
|
37
|
-
"@pob/sort-object": "11.
|
|
38
|
-
"@pob/sort-pkg": "13.
|
|
39
|
-
"@types/inquirer": "9.0.10",
|
|
35
|
+
"@pob/eslint-config": "68.3.0",
|
|
36
|
+
"@pob/eslint-config-typescript-react": "68.4.0",
|
|
37
|
+
"@pob/sort-object": "11.3.0",
|
|
38
|
+
"@pob/sort-pkg": "13.3.0",
|
|
40
39
|
"@yeoman/adapter": "4.0.3",
|
|
41
40
|
"eslint": "10.14.0",
|
|
42
41
|
"findup-sync": "^5.0.0",
|
|
@@ -49,9 +48,9 @@
|
|
|
49
48
|
"mem-fs": "4.1.5",
|
|
50
49
|
"mem-fs-editor": "12.1.0",
|
|
51
50
|
"minimist": "1.2.8",
|
|
52
|
-
"oxfmt": "0.
|
|
51
|
+
"oxfmt": "0.75.0",
|
|
53
52
|
"parse-author": "2.0.0",
|
|
54
|
-
"pob-dependencies": "28.
|
|
53
|
+
"pob-dependencies": "28.6.0",
|
|
55
54
|
"semver": "7.8.5",
|
|
56
55
|
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
57
56
|
"validate-npm-package-name": "^8.0.0",
|
|
@@ -59,7 +58,7 @@
|
|
|
59
58
|
"yeoman-generator": "10.3.0"
|
|
60
59
|
},
|
|
61
60
|
"devDependencies": {
|
|
62
|
-
"@pob/root": "28.
|
|
61
|
+
"@pob/root": "28.6.0",
|
|
63
62
|
"@types/node": "24.19.1",
|
|
64
63
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
65
64
|
"@yeoman/types": "1.13.1",
|