react-apps-ui 1.0.12 → 1.0.13

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 (3) hide show
  1. package/dist/index.js +49 -11
  2. package/package.json +1 -1
  3. package/src/index.ts +56 -11
package/dist/index.js CHANGED
@@ -17,6 +17,32 @@ program
17
17
  .name("react-apps-ui")
18
18
  .description("Add high-quality components to your React Native app")
19
19
  .version("1.0.0");
20
+ // Helper to filter out packages that are already in package.json
21
+ function filterMissingDeps(deps) {
22
+ const packageJsonPath = path_1.default.join(process.cwd(), "package.json");
23
+ if (!fs_1.default.existsSync(packageJsonPath))
24
+ return deps;
25
+ try {
26
+ const pkg = JSON.parse(fs_1.default.readFileSync(packageJsonPath, "utf-8"));
27
+ const installed = {
28
+ ...(pkg.dependencies || {}),
29
+ ...(pkg.devDependencies || {}),
30
+ };
31
+ return deps.filter((dep) => {
32
+ let pkgName = dep;
33
+ if (dep.startsWith("@")) {
34
+ pkgName = "@" + dep.slice(1).split("@")[0];
35
+ }
36
+ else {
37
+ pkgName = dep.split("@")[0];
38
+ }
39
+ return !installed[pkgName];
40
+ });
41
+ }
42
+ catch {
43
+ return deps;
44
+ }
45
+ }
20
46
  // --- THE INIT COMMAND ---
21
47
  // 1. Define the foundational architecture for each engine
22
48
  const BASE_DEPS = {
@@ -124,18 +150,24 @@ program
124
150
  }
125
151
  }
126
152
  }
127
- // 5. INSTALL FOUNDATIONAL NPM DEPENDENCIES
128
- if (setup.npm.length > 0) {
129
- const depList = setup.npm.join(" ");
130
- console.log(chalk_1.default.blue(`\nšŸ“¦ Installing foundational NPM dependencies: ${depList}...`));
153
+ // 5. INSTALL FOUNDATIONAL NPM DEPENDENCIES (Skipping already installed)
154
+ const missingBaseDeps = filterMissingDeps(setup.npm);
155
+ if (missingBaseDeps.length > 0) {
156
+ const depList = missingBaseDeps.join(" ");
157
+ console.log(chalk_1.default.blue(`\nšŸ“¦ Installing missing foundational NPM dependencies: ${depList}...`));
131
158
  try {
132
- (0, child_process_1.execSync)(`npm install ${depList}`, { stdio: "inherit" });
159
+ (0, child_process_1.execSync)(`npm install ${depList} --legacy-peer-deps`, {
160
+ stdio: "inherit",
161
+ });
133
162
  console.log(chalk_1.default.green("āœ“ Dependencies installed successfully."));
134
163
  }
135
164
  catch (err) {
136
165
  console.log(chalk_1.default.red("āŒ Failed to install dependencies. You may need to install them manually."));
137
166
  }
138
167
  }
168
+ else {
169
+ console.log(chalk_1.default.green("\nāœ“ All foundational NPM dependencies are already installed. Skipping."));
170
+ }
139
171
  console.log(chalk_1.default.blue("\nšŸŽ‰ Initialization complete!"));
140
172
  console.log(chalk_1.default.dim("Wrap your app in the <ThemeProvider> to get started."));
141
173
  }
@@ -211,7 +243,7 @@ program
211
243
  }
212
244
  }
213
245
  }
214
- // 5. INSTALL NPM DEPENDENCIES
246
+ // 5. INSTALL NPM DEPENDENCIES (Skipping already installed)
215
247
  const depsToInstall = new Set();
216
248
  // Collect all dependencies from the components we just added
217
249
  for (const compName of componentsToAdd) {
@@ -220,18 +252,24 @@ program
220
252
  compData.dependencies.forEach((dep) => depsToInstall.add(dep));
221
253
  }
222
254
  }
223
- if (depsToInstall.size > 0) {
224
- const depList = Array.from(depsToInstall).join(" ");
225
- console.log(chalk_1.default.blue(`\nšŸ“¦ Installing NPM dependencies: ${depList}...`));
255
+ // Filter out anything already installed in user's package.json
256
+ const missingDeps = filterMissingDeps(Array.from(depsToInstall));
257
+ if (missingDeps.length > 0) {
258
+ const depList = missingDeps.join(" ");
259
+ console.log(chalk_1.default.blue(`\nšŸ“¦ Installing missing NPM dependencies: ${depList}...`));
226
260
  try {
227
- // This runs 'npm install' directly in the user's terminal
228
- (0, child_process_1.execSync)(`npm install ${depList}`, { stdio: "inherit" });
261
+ (0, child_process_1.execSync)(`npm install ${depList} --legacy-peer-deps`, {
262
+ stdio: "inherit",
263
+ });
229
264
  console.log(chalk_1.default.green("āœ“ Dependencies installed successfully."));
230
265
  }
231
266
  catch (err) {
232
267
  console.log(chalk_1.default.red("āŒ Failed to install dependencies. You may need to install them manually."));
233
268
  }
234
269
  }
270
+ else if (depsToInstall.size > 0) {
271
+ console.log(chalk_1.default.green("\nāœ“ Required NPM dependencies are already installed. Skipping."));
272
+ }
235
273
  console.log(chalk_1.default.blue("\nšŸŽ‰ Components installed successfully!"));
236
274
  }
237
275
  catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-apps-ui",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "description": "A universal, Shadcn-inspired UI component CLI for Web, React Native, and Expo.",
5
5
  "author": "Anand Vyas",
6
6
  "license": "MIT",
package/src/index.ts CHANGED
@@ -17,6 +17,32 @@ program
17
17
  .description("Add high-quality components to your React Native app")
18
18
  .version("1.0.0");
19
19
 
20
+ // Helper to filter out packages that are already in package.json
21
+ function filterMissingDeps(deps: string[]): string[] {
22
+ const packageJsonPath = path.join(process.cwd(), "package.json");
23
+ if (!fs.existsSync(packageJsonPath)) return deps;
24
+
25
+ try {
26
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
27
+ const installed = {
28
+ ...(pkg.dependencies || {}),
29
+ ...(pkg.devDependencies || {}),
30
+ };
31
+
32
+ return deps.filter((dep) => {
33
+ let pkgName = dep;
34
+ if (dep.startsWith("@")) {
35
+ pkgName = "@" + dep.slice(1).split("@")[0];
36
+ } else {
37
+ pkgName = dep.split("@")[0];
38
+ }
39
+ return !installed[pkgName];
40
+ });
41
+ } catch {
42
+ return deps;
43
+ }
44
+ }
45
+
20
46
  // --- THE INIT COMMAND ---
21
47
 
22
48
  // 1. Define the foundational architecture for each engine
@@ -184,16 +210,20 @@ program
184
210
  }
185
211
  }
186
212
 
187
- // 5. INSTALL FOUNDATIONAL NPM DEPENDENCIES
188
- if (setup.npm.length > 0) {
189
- const depList = setup.npm.join(" ");
213
+ // 5. INSTALL FOUNDATIONAL NPM DEPENDENCIES (Skipping already installed)
214
+ const missingBaseDeps = filterMissingDeps(setup.npm);
215
+
216
+ if (missingBaseDeps.length > 0) {
217
+ const depList = missingBaseDeps.join(" ");
190
218
  console.log(
191
219
  chalk.blue(
192
- `\nšŸ“¦ Installing foundational NPM dependencies: ${depList}...`,
220
+ `\nšŸ“¦ Installing missing foundational NPM dependencies: ${depList}...`,
193
221
  ),
194
222
  );
195
223
  try {
196
- execSync(`npm install ${depList}`, { stdio: "inherit" });
224
+ execSync(`npm install ${depList} --legacy-peer-deps`, {
225
+ stdio: "inherit",
226
+ });
197
227
  console.log(
198
228
  chalk.green("āœ“ Dependencies installed successfully."),
199
229
  );
@@ -204,6 +234,12 @@ program
204
234
  ),
205
235
  );
206
236
  }
237
+ } else {
238
+ console.log(
239
+ chalk.green(
240
+ "\nāœ“ All foundational NPM dependencies are already installed. Skipping.",
241
+ ),
242
+ );
207
243
  }
208
244
 
209
245
  console.log(chalk.blue("\nšŸŽ‰ Initialization complete!"));
@@ -331,7 +367,7 @@ program
331
367
  }
332
368
  }
333
369
 
334
- // 5. INSTALL NPM DEPENDENCIES
370
+ // 5. INSTALL NPM DEPENDENCIES (Skipping already installed)
335
371
  const depsToInstall = new Set<string>();
336
372
 
337
373
  // Collect all dependencies from the components we just added
@@ -344,16 +380,19 @@ program
344
380
  }
345
381
  }
346
382
 
347
- if (depsToInstall.size > 0) {
348
- const depList = Array.from(depsToInstall).join(" ");
383
+ // Filter out anything already installed in user's package.json
384
+ const missingDeps = filterMissingDeps(Array.from(depsToInstall));
385
+ if (missingDeps.length > 0) {
386
+ const depList = missingDeps.join(" ");
349
387
  console.log(
350
388
  chalk.blue(
351
- `\nšŸ“¦ Installing NPM dependencies: ${depList}...`,
389
+ `\nšŸ“¦ Installing missing NPM dependencies: ${depList}...`,
352
390
  ),
353
391
  );
354
392
  try {
355
- // This runs 'npm install' directly in the user's terminal
356
- execSync(`npm install ${depList}`, { stdio: "inherit" });
393
+ execSync(`npm install ${depList} --legacy-peer-deps`, {
394
+ stdio: "inherit",
395
+ });
357
396
  console.log(
358
397
  chalk.green("āœ“ Dependencies installed successfully."),
359
398
  );
@@ -364,6 +403,12 @@ program
364
403
  ),
365
404
  );
366
405
  }
406
+ } else if (depsToInstall.size > 0) {
407
+ console.log(
408
+ chalk.green(
409
+ "\nāœ“ Required NPM dependencies are already installed. Skipping.",
410
+ ),
411
+ );
367
412
  }
368
413
 
369
414
  console.log(chalk.blue("\nšŸŽ‰ Components installed successfully!"));