@solidstarters/create-solid-app 1.2.29 → 1.2.30

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.
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env node
2
+ // scripts/upgrade-dependencies.js
3
+ // Requires "type": "module" in package.json (ESM). If using CJS, replace imports with require().
4
+
5
+ import fs from "fs";
6
+ import path from "path";
7
+ import { execSync } from "child_process";
8
+ import { fileURLToPath } from "url";
9
+
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = path.dirname(__filename);
12
+
13
+ // Packages to keep up-to-date in each template
14
+ const NEST_DEPS = [
15
+ "@solidstarters/solid-core",
16
+ "@solidstarters/solid-code-builder",
17
+ ];
18
+ const NEXT_DEPS = ["@solidstarters/solid-core-ui"];
19
+
20
+ // Template locations
21
+ const NEST_TEMPLATE_DIR = path.resolve(__dirname, "templates/nest-template");
22
+ const NEXT_TEMPLATE_DIR = path.resolve(__dirname, "templates/next-template");
23
+
24
+ function getLatestVersion(pkg) {
25
+ try {
26
+ return execSync(`npm view ${pkg} version`, { stdio: ["ignore", "pipe", "pipe"] })
27
+ .toString()
28
+ .trim();
29
+ } catch (e) {
30
+ throw new Error(`Failed to fetch latest version for ${pkg}: ${e.message}`);
31
+ }
32
+ }
33
+
34
+ function updateTemplateDeps(templateDir, packages) {
35
+ const pkgJsonPath = path.resolve(templateDir, "package.json");
36
+ if (!fs.existsSync(pkgJsonPath)) {
37
+ console.warn(`⚠️ package.json not found at ${pkgJsonPath}, skipping.`);
38
+ return { updated: false, file: pkgJsonPath };
39
+ }
40
+
41
+ const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
42
+ let changed = false;
43
+
44
+ for (const dep of packages) {
45
+ const latest = `^${getLatestVersion(dep)}`;
46
+
47
+ const inDeps = pkgJson.dependencies?.[dep];
48
+ const inDevDeps = pkgJson.devDependencies?.[dep];
49
+
50
+ // Decide where to place the dep if missing; default to "dependencies"
51
+ if (inDeps != null) {
52
+ if (inDeps !== latest) {
53
+ pkgJson.dependencies[dep] = latest;
54
+ changed = true;
55
+ console.log(`⬆️ ${dep}: ${inDeps} → ${latest} in ${pkgJsonPath}`);
56
+ } else {
57
+ console.log(`✅ ${dep} already latest (${latest}) in ${pkgJsonPath}`);
58
+ }
59
+ } else if (inDevDeps != null) {
60
+ if (inDevDeps !== latest) {
61
+ pkgJson.devDependencies[dep] = latest;
62
+ changed = true;
63
+ console.log(`⬆️ ${dep}: ${inDevDeps} → ${latest} in ${pkgJsonPath}`);
64
+ } else {
65
+ console.log(`✅ ${dep} already latest (${latest}) in ${pkgJsonPath}`);
66
+ }
67
+ } else {
68
+ // Not present; add to dependencies
69
+ pkgJson.dependencies = pkgJson.dependencies || {};
70
+ pkgJson.dependencies[dep] = latest;
71
+ changed = true;
72
+ console.log(`➕ Added ${dep}@${latest} to dependencies in ${pkgJsonPath}`);
73
+ }
74
+ }
75
+
76
+ if (changed) {
77
+ fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + "\n");
78
+ }
79
+
80
+ return { updated: changed, file: pkgJsonPath };
81
+ }
82
+
83
+ /** Upgrade both template folders and return array of files that changed */
84
+ export function upgradeDependencies() {
85
+ const results = [];
86
+ results.push(updateTemplateDeps(NEST_TEMPLATE_DIR, NEST_DEPS));
87
+ results.push(updateTemplateDeps(NEXT_TEMPLATE_DIR, NEXT_DEPS));
88
+
89
+ const changedFiles = results.filter(r => r.updated).map(r => r.file);
90
+ return changedFiles;
91
+ }
92
+
93
+ // Allow running as a standalone script
94
+ if (import.meta.url === `file://${__filename}`) {
95
+ try {
96
+ const changed = upgradeDependencies();
97
+ if (changed.length) {
98
+ console.log("\n📝 Updated files:");
99
+ changed.forEach(f => console.log(` - ${f}`));
100
+ process.exit(0);
101
+ } else {
102
+ console.log("✔ No template dependency changes needed.");
103
+ process.exit(0);
104
+ }
105
+ } catch (err) {
106
+ console.error("❌ Error updating dependencies:", err.message);
107
+ process.exit(1);
108
+ }
109
+ }