uniweb 0.12.49 → 0.12.51

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uniweb",
3
- "version": "0.12.49",
3
+ "version": "0.12.51",
4
4
  "description": "Create structured Vite + React sites with content/code separation",
5
5
  "type": "module",
6
6
  "bin": {
@@ -41,13 +41,13 @@
41
41
  "js-yaml": "^4.1.0",
42
42
  "prompts": "^2.4.2",
43
43
  "tar": "^7.0.0",
44
- "@uniweb/core": "0.7.20",
45
- "@uniweb/kit": "0.9.24",
46
- "@uniweb/runtime": "0.8.26"
44
+ "@uniweb/kit": "0.9.25",
45
+ "@uniweb/runtime": "0.8.27",
46
+ "@uniweb/core": "0.7.21"
47
47
  },
48
48
  "peerDependencies": {
49
- "@uniweb/build": "0.14.31",
50
49
  "@uniweb/content-reader": "1.1.12",
50
+ "@uniweb/build": "0.14.33",
51
51
  "@uniweb/semantic-parser": "1.1.17"
52
52
  },
53
53
  "peerDependenciesMeta": {
@@ -1158,6 +1158,7 @@ async function addCi(rootDir, opts, pm = 'pnpm') {
1158
1158
  // project's floor, raised if that pnpm needs more.
1159
1159
  const pnpmVersion = resolveCiPnpmVersion(rootPkg)
1160
1160
  const nodeVersion = resolveCiNodeVersion(rootPkg.engines?.node, pm, pnpmVersion)
1161
+ reportCiToolchain({ pm, pnpmVersion, nodeVersion, rootPkg })
1161
1162
 
1162
1163
  const siteDir = join(rootDir, site.path)
1163
1164
  if (!resolvedDomain) {
@@ -1282,6 +1283,23 @@ function stripScope(name) {
1282
1283
  return name.startsWith('@') ? name.split('/').pop() : name
1283
1284
  }
1284
1285
 
1286
+ /**
1287
+ * Print the toolchain the generated workflow will install.
1288
+ *
1289
+ * These versions are inferred whenever the project doesn't state them, and a
1290
+ * silent inference is exactly what let a wrong pnpm/Node pairing ship
1291
+ * unnoticed. Showing what resolved — and how to override it — follows the
1292
+ * same "resolve, then show what resolved" rule the publish scope picker uses.
1293
+ */
1294
+ function reportCiToolchain({ pm, pnpmVersion, nodeVersion, rootPkg }) {
1295
+ const declared = typeof rootPkg?.packageManager === 'string'
1296
+ const tool = pm === 'pnpm' ? `pnpm ${pnpmVersion}` : pm === 'yarn' ? 'yarn' : 'npm'
1297
+ info(`CI will use ${tool} + Node ${nodeVersion}${declared ? '' : ' (inferred)'}`)
1298
+ if (!declared && pm === 'pnpm') {
1299
+ info(`Pin with "packageManager": "pnpm@<version>" in package.json to use a different major.`)
1300
+ }
1301
+ }
1302
+
1285
1303
  /**
1286
1304
  * Write scaffolded CI files. Refuses to overwrite without --force so
1287
1305
  * re-running doesn't silently clobber edits the user made to a workflow.
@@ -1342,6 +1360,7 @@ async function addFoundationCi(rootDir, opts, adapter, pm) {
1342
1360
  // project's floor, raised if that pnpm needs more.
1343
1361
  const pnpmVersion = resolveCiPnpmVersion(rootPkg)
1344
1362
  const nodeVersion = resolveCiNodeVersion(rootPkg.engines?.node, pm, pnpmVersion)
1363
+ reportCiToolchain({ pm, pnpmVersion, nodeVersion, rootPkg })
1345
1364
 
1346
1365
  let result
1347
1366
  try {
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-07-21T21:33:51.867Z",
3
+ "generatedAt": "2026-07-22T07:03:30.454Z",
4
4
  "packages": {
5
5
  "@uniweb/build": {
6
- "version": "0.14.31",
6
+ "version": "0.14.33",
7
7
  "path": "framework/build",
8
8
  "deps": [
9
9
  "@uniweb/content-reader",
@@ -25,7 +25,7 @@
25
25
  "deps": []
26
26
  },
27
27
  "@uniweb/core": {
28
- "version": "0.7.20",
28
+ "version": "0.7.21",
29
29
  "path": "framework/core",
30
30
  "deps": [
31
31
  "@uniweb/semantic-parser",
@@ -43,7 +43,7 @@
43
43
  "deps": []
44
44
  },
45
45
  "@uniweb/kit": {
46
- "version": "0.9.24",
46
+ "version": "0.9.25",
47
47
  "path": "framework/kit",
48
48
  "deps": [
49
49
  "@uniweb/core",
@@ -61,7 +61,7 @@
61
61
  "deps": []
62
62
  },
63
63
  "@uniweb/runtime": {
64
- "version": "0.8.26",
64
+ "version": "0.8.27",
65
65
  "path": "framework/runtime",
66
66
  "deps": [
67
67
  "@uniweb/core",
@@ -94,12 +94,12 @@
94
94
  "deps": []
95
95
  },
96
96
  "@uniweb/theming": {
97
- "version": "0.1.8",
97
+ "version": "0.1.9",
98
98
  "path": "framework/theming",
99
99
  "deps": []
100
100
  },
101
101
  "@uniweb/unipress": {
102
- "version": "0.4.38",
102
+ "version": "0.4.40",
103
103
  "path": "framework/unipress",
104
104
  "deps": [
105
105
  "@uniweb/build",
package/src/versions.js CHANGED
@@ -56,28 +56,32 @@ export const REACT_VERSION = '^19.0.0'
56
56
  * Default pnpm major for generated CI, used only when the project does not
57
57
  * say which pnpm it uses (see `resolveCiPnpmVersion`).
58
58
  *
59
- * **This is deliberately 10, not the newest release.** CI must run the same
60
- * toolchain the developer runs, or it reports failures that have nothing to
61
- * do with their code. Pinning 11 while projects were on 10 produced exactly
62
- * that, twice over, on a real repo:
59
+ * **Tracks the current stable major.** `pnpm@latest` is 11.x, so a developer
60
+ * running `npm i -g pnpm` today gets 11 and CI should run what they run.
61
+ * Both of pnpm 11's install-time policies are handled:
63
62
  *
64
- * - pnpm 11 refuses any dependency published in the last 24 hours
65
- * (`ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION`). Publish a package and its
66
- * consumer's CI fails until the next day.
67
- * - pnpm 11 changed build-script approval: `onlyBuiltDependencies` in
68
- * `pnpm-workspace.yaml` no longer suffices, and the install exits 1 with
69
- * `ERR_PNPM_IGNORED_BUILDS`. Uniweb sites use `sharp` for image
70
- * processing, so this breaks essentially every site's first CI run.
63
+ * - Build-script approval. pnpm 11 renamed `onlyBuiltDependencies` (list)
64
+ * to `allowBuilds` (map) and ignores the old name, so an unprepared
65
+ * project fails with `ERR_PNPM_IGNORED_BUILDS`. The workspace template
66
+ * emits both spellings, so scaffolds install on either major.
67
+ * - Minimum release age. pnpm 11 refuses dependencies published in the
68
+ * last 24 hours. Installing locally with pnpm 11 auto-collects the
69
+ * needed `minimumReleaseAgeExclude` entries into `pnpm-workspace.yaml`,
70
+ * and CI then honours them — verified end to end.
71
71
  *
72
- * Neither is a bug in pnpm both are reasonable hardening. They are simply
73
- * not things a generated workflow should impose on a project that has not
74
- * opted into that major.
72
+ * **The one combination that breaks is installing locally with pnpm 10 while
73
+ * CI runs 11**: pnpm 10 never writes those exclude entries, so CI rejects any
74
+ * dependency in the lockfile published within the last day — including
75
+ * unrelated transitive ones. A project still on pnpm 10 should say so with
76
+ * `"packageManager": "pnpm@10.x.y"`, which `resolveCiPnpmVersion` honours and
77
+ * which pins CI to match. `uniweb add ci` prints the resolved toolchain so
78
+ * that choice is visible rather than silent.
75
79
  *
76
80
  * A bare major installs the latest patch of that major at CI run time. Before
77
81
  * bumping this, check the new major's release notes for install-time policy
78
82
  * changes, and update `PNPM_MIN_NODE` in the same commit.
79
83
  */
80
- export const PNPM_VERSION = '10'
84
+ export const PNPM_VERSION = '11'
81
85
 
82
86
  /**
83
87
  * Minimum Node major each supported pnpm major will run on, from that