@uniweb/build 0.24.4 → 0.24.5

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/build",
3
- "version": "0.24.4",
3
+ "version": "0.24.5",
4
4
  "description": "Build tooling for the Uniweb Component Web Platform",
5
5
  "type": "module",
6
6
  "exports": {
@@ -59,17 +59,17 @@
59
59
  "js-yaml": "^4.1.0",
60
60
  "sharp": "^0.35.3",
61
61
  "yaml": "^2.5.0",
62
- "@uniweb/content-writer": "^0.3.3",
63
62
  "@uniweb/schemas": "^0.2.10",
63
+ "@uniweb/content-writer": "^0.3.3",
64
+ "@uniweb/projections": "^0.3.3",
64
65
  "@uniweb/semantic-parser": "^1.2.3",
65
- "@uniweb/theming": "^0.1.15",
66
- "@uniweb/projections": "^0.3.3"
66
+ "@uniweb/theming": "^0.1.15"
67
67
  },
68
68
  "optionalDependencies": {
69
- "@uniweb/runtime": "^0.12.2",
69
+ "@uniweb/content-reader": "^1.2.3",
70
70
  "@uniweb/schemas": "^0.2.10",
71
- "@uniweb/semantic-parser": "^1.2.3",
72
- "@uniweb/content-reader": "^1.2.3"
71
+ "@uniweb/runtime": "^0.12.2",
72
+ "@uniweb/semantic-parser": "^1.2.3"
73
73
  },
74
74
  "peerDependencies": {
75
75
  "vite": "^5.0.0 || ^6.0.0 || ^7.0.0",
@@ -90,6 +90,22 @@ function placeByUuid(ctx, uuid, targetAbs) {
90
90
  // most are identity; only `default_language` differs (the file key is camelCase
91
91
  // `defaultLanguage`).
92
92
  const INFO_TO_SITE_YML = {
93
+ // ⛔ `foundation` is the one entry a caller may SUPPRESS (`keepAuthoredFoundation`),
94
+ // and it is the same principle as restoring authored asset paths below: a round
95
+ // trip must not mangle what the author wrote.
96
+ //
97
+ // The stored value is not always what they wrote. `publish` stamps the RELEASED,
98
+ // version-pinned ref over it, because delivery is version-pinned end to end. Project
99
+ // that straight back into a workspace project and `foundation: src` becomes
100
+ // `@org/x@1.2.3` — which `detectFoundationType` REFUSES for a build (a build is
101
+ // offline and does not guess where a foundation is served), so the project can no
102
+ // longer `build`, `dev` or `export`. Measured 2026-08-19.
103
+ //
104
+ // ⚖️ It is NOT wrong everywhere, which is why this is a caller's decision and not a
105
+ // deletion: a project from `uniweb clone` has no local foundation on disk, and there
106
+ // the pinned ref is exactly what site.yml should say. Only the caller knows which
107
+ // shape it is writing into — and it needs the build's own resolver to know, which is
108
+ // why that check is not made here (it would drag the vite chain into `uwx/`).
93
109
  foundation: 'foundation',
94
110
  languages: 'languages',
95
111
  default_language: 'defaultLanguage',
@@ -152,7 +168,7 @@ const INFO_TO_SITE_YML = {
152
168
  * @returns {{ siteConfig: string, theme?: string, headHtml?: string }} per-file
153
169
  * write status ('updated' | 'unchanged')
154
170
  */
155
- export function siteInfoToConfig({ document, siteRoot, sourceLocale = LOCALIZED_FIELD_ASSUMPTION.defaultSourceLocale, collector }) {
171
+ export function siteInfoToConfig({ document, siteRoot, sourceLocale = LOCALIZED_FIELD_ASSUMPTION.defaultSourceLocale, collector, keepAuthoredFoundation = false }) {
156
172
  const info = document?.info || {}
157
173
 
158
174
  const siteChanges = {}
@@ -173,6 +189,7 @@ export function siteInfoToConfig({ document, siteRoot, sourceLocale = LOCALIZED_
173
189
 
174
190
  // Verbatim fields (includes `seo` — the site-level social/SEO block).
175
191
  for (const [infoKey, ymlKey] of Object.entries(INFO_TO_SITE_YML)) {
192
+ if (infoKey === 'foundation' && keepAuthoredFoundation) continue
176
193
  if (info[infoKey] !== undefined) siteChanges[ymlKey] = info[infoKey]
177
194
  }
178
195
 
@@ -626,7 +643,7 @@ function projectLayout(layoutSections, layoutBaseDir, report, prune, ctx) {
626
643
  * empty set.
627
644
  * @returns {{ config: object, collections: object, locales: object, pages: string[], sections: string[], layout: string[], deleted: string[], renamed: object[] }}
628
645
  */
629
- export function siteContentDocumentToProject({ document, siteRoot, sourceLocale = LOCALIZED_FIELD_ASSUMPTION.defaultSourceLocale, prune = false }) {
646
+ export function siteContentDocumentToProject({ document, siteRoot, sourceLocale = LOCALIZED_FIELD_ASSUMPTION.defaultSourceLocale, prune = false, keepAuthoredFoundation = false }) {
630
647
  const report = { config: null, collections: null, locales: null, assets: null, pages: [], sections: [], layout: [], deleted: [], renamed: [] }
631
648
 
632
649
  // Collects target-locale translations of localized scalars as they're projected;
@@ -640,7 +657,7 @@ export function siteContentDocumentToProject({ document, siteRoot, sourceLocale
640
657
  // round trip that changed nothing.
641
658
  report.assets = restoreAssetRefs(document, readAssetMap(siteRoot))
642
659
 
643
- report.config = siteInfoToConfig({ document, siteRoot, sourceLocale, collector })
660
+ report.config = siteInfoToConfig({ document, siteRoot, sourceLocale, collector, keepAuthoredFoundation })
644
661
  report.collections = declarationsToCollectionsYml({ document, siteRoot })
645
662
 
646
663
  // The uuid identity index (gitignored `.uniweb/`): read the prior map to anchor