@vexblocks/cli 1.1.2 → 1.1.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.
Files changed (2) hide show
  1. package/dist/index.js +53 -0
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -33,6 +33,7 @@ var PROTECTED_FILES = [
33
33
  "packages/backend/convex/cms/vexblocks.config.ts",
34
34
  "packages/backend/.env",
35
35
  "packages/backend/.env.local",
36
+ "packages/backend/package.json",
36
37
  "packages/cms-shared/src/types/generated.ts",
37
38
  "packages/backend/emails/change-email-template.ts",
38
39
  "packages/backend/emails/otp-email-template.ts",
@@ -92,6 +93,47 @@ async function getPackageManager(cwd) {
92
93
  }
93
94
  return "npm";
94
95
  }
96
+ async function mergePackageJson(targetPath, sourcePackageJson) {
97
+ let existingPackageJson = {};
98
+ if (await fs.pathExists(targetPath)) {
99
+ existingPackageJson = await fs.readJson(targetPath);
100
+ }
101
+ const mergedPackageJson = {
102
+ // Preserve user's name and version if they exist
103
+ name: existingPackageJson.name || sourcePackageJson.name,
104
+ version: existingPackageJson.version || sourcePackageJson.version,
105
+ private: sourcePackageJson.private,
106
+ // Merge scripts (source scripts take precedence for VexBlocks-specific scripts)
107
+ scripts: {
108
+ ...existingPackageJson.scripts,
109
+ ...sourcePackageJson.scripts
110
+ },
111
+ // Merge dependencies (source versions take precedence)
112
+ dependencies: {
113
+ ...existingPackageJson.dependencies,
114
+ ...sourcePackageJson.dependencies
115
+ },
116
+ // Merge devDependencies (source versions take precedence)
117
+ devDependencies: {
118
+ ...existingPackageJson.devDependencies,
119
+ ...sourcePackageJson.devDependencies
120
+ },
121
+ // Preserve any other custom fields from existing package.json
122
+ ...Object.fromEntries(
123
+ Object.entries(existingPackageJson).filter(
124
+ ([key]) => ![
125
+ "name",
126
+ "version",
127
+ "private",
128
+ "scripts",
129
+ "dependencies",
130
+ "devDependencies"
131
+ ].includes(key)
132
+ )
133
+ )
134
+ };
135
+ await fs.writeJson(targetPath, mergedPackageJson, { spaces: 2 });
136
+ }
95
137
 
96
138
  // src/utils/github.ts
97
139
  import path2 from "path";
@@ -508,6 +550,17 @@ async function installBackendPackage(targetPath, sourcePath, spinner) {
508
550
  spinner.text = `Installing backend... ${pc2.dim(file)}`;
509
551
  });
510
552
  }
553
+ spinner.text = "Merging package.json...";
554
+ try {
555
+ const sourcePackageJsonContent = await fetchFile(
556
+ `${sourcePath}/package.json`
557
+ );
558
+ const sourcePackageJson = JSON.parse(sourcePackageJsonContent);
559
+ const targetPackageJsonPath = path4.join(targetPath, "package.json");
560
+ await mergePackageJson(targetPackageJsonPath, sourcePackageJson);
561
+ } catch {
562
+ spinner.warn("Could not merge package.json, skipping");
563
+ }
511
564
  }
512
565
  function showNextSteps(packages) {
513
566
  const packageManager = "pnpm";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vexblocks/cli",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "CLI for adding VexBlocks Headless CMS to your Turborepo project",
5
5
  "keywords": [
6
6
  "cms",