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.
@@ -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
- const minVersionForMajor = new Map([
8
- ["22", "22.18.0"],
9
- ["24", "24.14.1"],
10
- ["26", "26.0.0"],
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.get(major);
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 `>=${minVersion}`;
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 minVersion = minVersionForMajor.get(
138
+ const enginesNode = enginesNodeForMajor.get(
133
139
  onlyLatestLTS ? latestLTS : maintenanceLTS,
134
140
  );
135
141
 
136
142
  if (
137
143
  !pkg.engines.node ||
138
- semver.lt(semver.minVersion(pkg.engines.node), minVersion)
144
+ semver.lte(
145
+ semver.minVersion(pkg.engines.node),
146
+ semver.minVersion(enginesNode),
147
+ )
139
148
  ) {
140
- pkg.engines.node = `>=${minVersion}`;
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", ">=22.18.0"],
101
- ["22", ">=22.18.0"],
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(">=22.18.0");
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(">=22.18.0");
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(">=22.18.0");
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(">=22.18.0");
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(">=22.18.0");
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.5.1",
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.2.0",
36
- "@pob/eslint-config-typescript-react": "68.2.0",
37
- "@pob/sort-object": "11.2.0",
38
- "@pob/sort-pkg": "13.2.0",
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.72.0",
51
+ "oxfmt": "0.75.0",
53
52
  "parse-author": "2.0.0",
54
- "pob-dependencies": "28.4.0",
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.4.0",
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",