@srcroot/ui 0.0.16 → 0.0.18

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 +19 -20
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -579,16 +579,21 @@ async function init(options) {
579
579
  } else {
580
580
  spinner.info(`Found ${chalk.cyan(missing.length)} missing ${missing.length === 1 ? "dependency" : "dependencies"}: ${chalk.dim(missing.map((d) => d.split("@")[0]).join(", "))}`);
581
581
  }
582
- async function installOneByOne(spinner2, packageManager2, installCmd2, missing2, cwd2, execSync) {
582
+ async function runCommand(command, cwd2) {
583
+ const { exec } = await import("child_process");
584
+ const { promisify } = await import("util");
585
+ const execAsync = promisify(exec);
586
+ return await execAsync(command, { cwd: cwd2 });
587
+ }
588
+ async function installOneByOne(spinner2, packageManager2, installCmd2, missing2, cwd2) {
583
589
  spinner2.warn("Batch installation failed. Attempting to install dependencies one by one...");
584
590
  let allSucceeded = true;
591
+ const installFlags = packageManager2 === "npm" ? "--legacy-peer-deps" : "";
585
592
  for (const dep of missing2) {
586
- spinner2.start(`Installing ${chalk.cyan(dep)} via ${packageManager2}...`);
593
+ spinner2.start(`Installing ${chalk.cyan(dep)} via ${packageManager2}${installFlags ? " (with --legacy-peer-deps)" : ""}...`);
587
594
  try {
588
- execSync(`${packageManager2} ${installCmd2} ${dep}`, {
589
- stdio: "pipe",
590
- cwd: cwd2
591
- });
595
+ const command = installFlags ? `${packageManager2} ${installCmd2} ${installFlags} ${dep}` : `${packageManager2} ${installCmd2} ${dep}`;
596
+ await runCommand(command, cwd2);
592
597
  spinner2.succeed(`Installed ${chalk.green(dep)}`);
593
598
  } catch (depError) {
594
599
  allSucceeded = false;
@@ -609,35 +614,29 @@ async function init(options) {
609
614
  console.log(chalk.green("\n\u2705 All dependencies installed successfully!\n"));
610
615
  } else {
611
616
  console.log(chalk.yellow("\n\u26A0 Some dependencies failed to install."));
617
+ const manualCmd = installFlags ? `${packageManager2} ${installCmd2} ${installFlags} ${missing2.join(" ")}` : `${packageManager2} ${installCmd2} ${missing2.join(" ")}`;
612
618
  console.log(chalk.dim(`
613
- Please manually run: ${packageManager2} ${installCmd2} ${missing2.join(" ")}
619
+ Please manually run: ${manualCmd}
614
620
  `));
615
621
  }
616
622
  }
617
623
  if (missing.length > 0) {
618
- const { execSync } = await import("child_process");
619
- spinner.text = `Installing dependencies via ${packageManager}: ${missing.join(", ")}...`;
624
+ spinner.start(`Installing dependencies via ${packageManager}: ${missing.join(", ")}...`);
620
625
  try {
621
- execSync(`${packageManager} ${installCmd} ${missing.join(" ")}`, {
622
- stdio: "pipe",
623
- cwd
624
- });
626
+ await runCommand(`${packageManager} ${installCmd} ${missing.join(" ")}`, cwd);
625
627
  spinner.succeed("Dependencies installed");
626
628
  } catch (error) {
627
629
  const stderr = error.stderr?.toString() || "";
628
630
  if (packageManager === "npm" && (stderr.includes("ERESOLVE") || stderr.includes("peer dependency") || stderr.includes("conflicting peer dependency") || stderr.includes("Cannot read properties of null"))) {
629
- spinner.text = "Batch installation failed. Retrying with --legacy-peer-deps...";
631
+ spinner.start("Batch installation failed. Retrying with --legacy-peer-deps...");
630
632
  try {
631
- execSync(`npm install --legacy-peer-deps ${missing.join(" ")}`, {
632
- stdio: "pipe",
633
- cwd
634
- });
633
+ await runCommand(`npm install --legacy-peer-deps ${missing.join(" ")}`, cwd);
635
634
  spinner.succeed("Dependencies installed (used --legacy-peer-deps)");
636
635
  } catch (retryError) {
637
- await installOneByOne(spinner, packageManager, installCmd, missing, cwd, execSync);
636
+ await installOneByOne(spinner, packageManager, installCmd, missing, cwd);
638
637
  }
639
638
  } else {
640
- await installOneByOne(spinner, packageManager, installCmd, missing, cwd, execSync);
639
+ await installOneByOne(spinner, packageManager, installCmd, missing, cwd);
641
640
  }
642
641
  }
643
642
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@srcroot/ui",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "A shadcn-style CLI UI library with polymorphic, accessible React components",
5
5
  "type": "module",
6
6
  "bin": {