uniweb 0.7.2 → 0.7.3

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.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "Create structured Vite + React sites with content/code separation",
5
5
  "type": "module",
6
6
  "bin": {
@@ -43,7 +43,7 @@
43
43
  "tar": "^7.0.0",
44
44
  "@uniweb/build": "0.7.2",
45
45
  "@uniweb/core": "0.5.0",
46
- "@uniweb/kit": "0.6.0",
47
- "@uniweb/runtime": "0.6.0"
46
+ "@uniweb/runtime": "0.6.0",
47
+ "@uniweb/kit": "0.6.0"
48
48
  }
49
49
  }
@@ -14,7 +14,7 @@ import { readFile, writeFile } from 'node:fs/promises'
14
14
  import { join, relative } from 'node:path'
15
15
  import prompts from 'prompts'
16
16
  import yaml from 'js-yaml'
17
- import { scaffoldFoundation, scaffoldSite, applyContent } from '../utils/scaffold.js'
17
+ import { scaffoldFoundation, scaffoldSite, applyContent, mergeTemplateDependencies } from '../utils/scaffold.js'
18
18
  import {
19
19
  readWorkspaceConfig,
20
20
  addWorkspaceGlob,
@@ -469,6 +469,14 @@ async function applyFromTemplate(templateId, packageType, targetDir, projectName
469
469
  onProgress: (msg) => info(` ${msg}`),
470
470
  })
471
471
 
472
+ // Merge template dependencies
473
+ if (metadata.dependencies) {
474
+ const deps = metadata.dependencies[packageType] || metadata.dependencies[match?.name]
475
+ if (deps) {
476
+ await mergeTemplateDependencies(join(targetDir, 'package.json'), deps)
477
+ }
478
+ }
479
+
472
480
  // If site content applied, inform about expected section types
473
481
  if (packageType === 'site' && metadata.components) {
474
482
  log('')
package/src/index.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  parseTemplateId,
28
28
  } from './templates/index.js'
29
29
  import { validateTemplate } from './templates/validator.js'
30
- import { scaffoldWorkspace, scaffoldFoundation, scaffoldSite, applyContent, applyStarter } from './utils/scaffold.js'
30
+ import { scaffoldWorkspace, scaffoldFoundation, scaffoldSite, applyContent, applyStarter, mergeTemplateDependencies } from './utils/scaffold.js'
31
31
 
32
32
  // Colors for terminal output
33
33
  const colors = {
@@ -202,6 +202,14 @@ async function createFromContentTemplate(projectDir, projectName, metadata, temp
202
202
  onProgress?.(`Applying ${metadata.name} content to ${pkg.name}...`)
203
203
  await applyContent(contentDir.dir, fullPath, { projectName }, { onProgress, onWarning })
204
204
  }
205
+
206
+ // Merge template dependencies into package.json
207
+ if (metadata.dependencies) {
208
+ const deps = metadata.dependencies[pkg.name] || metadata.dependencies[pkg.type]
209
+ if (deps) {
210
+ await mergeTemplateDependencies(join(fullPath, 'package.json'), deps)
211
+ }
212
+ }
205
213
  }
206
214
 
207
215
  success(`Created project: ${projectName}`)
@@ -173,3 +173,24 @@ export async function applyStarter(projectDir, context, options = {}) {
173
173
  const siteTargetDir = join(projectDir, siteDir)
174
174
  await applyContent(siteContentDir, siteTargetDir, context, options)
175
175
  }
176
+
177
+ /**
178
+ * Merge additional dependencies from a content template into a scaffolded package.json
179
+ *
180
+ * Reads the package.json at the given path, adds any deps not already present
181
+ * (in either dependencies or devDependencies), and writes it back.
182
+ *
183
+ * @param {string} packageJsonPath - Absolute path to package.json
184
+ * @param {Object} deps - Dependencies to merge (name → version)
185
+ */
186
+ export async function mergeTemplateDependencies(packageJsonPath, deps) {
187
+ if (!deps || Object.keys(deps).length === 0) return
188
+ const pkg = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'))
189
+ if (!pkg.dependencies) pkg.dependencies = {}
190
+ for (const [name, version] of Object.entries(deps)) {
191
+ if (!pkg.dependencies[name] && !pkg.devDependencies?.[name]) {
192
+ pkg.dependencies[name] = version
193
+ }
194
+ }
195
+ await fs.writeFile(packageJsonPath, JSON.stringify(pkg, null, 2) + '\n')
196
+ }