nx-factory-cli 2.0.1 → 2.0.2

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 (61) hide show
  1. package/dist/commands/add-app.d.ts +15 -0
  2. package/dist/commands/add-app.d.ts.map +1 -0
  3. package/dist/commands/add-app.js +365 -0
  4. package/dist/commands/add-app.js.map +1 -0
  5. package/dist/commands/add-component.d.ts +2 -0
  6. package/dist/commands/add-component.d.ts.map +1 -0
  7. package/dist/commands/add-component.js +110 -0
  8. package/dist/commands/add-component.js.map +1 -0
  9. package/dist/commands/add-lib.d.ts +9 -0
  10. package/dist/commands/add-lib.d.ts.map +1 -0
  11. package/dist/commands/add-lib.js +190 -0
  12. package/dist/commands/add-lib.js.map +1 -0
  13. package/dist/commands/add-storybook.d.ts +6 -0
  14. package/dist/commands/add-storybook.d.ts.map +1 -0
  15. package/dist/commands/add-storybook.js +181 -0
  16. package/dist/commands/add-storybook.js.map +1 -0
  17. package/dist/commands/doctor.d.ts +2 -0
  18. package/dist/commands/doctor.d.ts.map +1 -0
  19. package/dist/commands/doctor.js +230 -0
  20. package/dist/commands/doctor.js.map +1 -0
  21. package/dist/commands/init.d.ts +9 -0
  22. package/dist/commands/init.d.ts.map +1 -0
  23. package/dist/commands/init.js +505 -0
  24. package/dist/commands/init.js.map +1 -0
  25. package/dist/commands/list.d.ts +2 -0
  26. package/dist/commands/list.d.ts.map +1 -0
  27. package/dist/commands/list.js +130 -0
  28. package/dist/commands/list.js.map +1 -0
  29. package/dist/commands/publish.d.ts +8 -0
  30. package/dist/commands/publish.d.ts.map +1 -0
  31. package/dist/commands/publish.js +179 -0
  32. package/dist/commands/publish.js.map +1 -0
  33. package/dist/commands/remove-component.d.ts +5 -0
  34. package/dist/commands/remove-component.d.ts.map +1 -0
  35. package/dist/commands/remove-component.js +172 -0
  36. package/dist/commands/remove-component.js.map +1 -0
  37. package/dist/commands/update.d.ts +5 -0
  38. package/dist/commands/update.d.ts.map +1 -0
  39. package/dist/commands/update.js +126 -0
  40. package/dist/commands/update.js.map +1 -0
  41. package/dist/config.d.ts +14 -0
  42. package/dist/config.d.ts.map +1 -0
  43. package/dist/config.js +35 -0
  44. package/dist/config.js.map +1 -0
  45. package/dist/exec.d.ts +25 -0
  46. package/dist/exec.d.ts.map +1 -0
  47. package/dist/exec.js +80 -0
  48. package/dist/exec.js.map +1 -0
  49. package/dist/files.d.ts +7 -0
  50. package/dist/files.d.ts.map +1 -0
  51. package/dist/files.js +23 -0
  52. package/dist/files.js.map +1 -0
  53. package/dist/index.d.ts +3 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +85 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/ui.d.ts +44 -0
  58. package/dist/ui.d.ts.map +1 -0
  59. package/dist/ui.js +149 -0
  60. package/dist/ui.js.map +1 -0
  61. package/package.json +1 -1
@@ -0,0 +1,130 @@
1
+ import path from "path";
2
+ import { pathExists } from "../files.js";
3
+ import { loadConfig } from "../config.js";
4
+ import { c, printError } from "../ui.js";
5
+ export async function listCommand() {
6
+ const cfg = await loadConfig();
7
+ // Resolve UI package dir
8
+ const uiPkgDir = await detectUiPackageDir(cfg?.uiPackage);
9
+ if (!uiPkgDir) {
10
+ printError({
11
+ title: "UI package not found",
12
+ detail: "Run from the monorepo root.",
13
+ recovery: [{ label: "", cmd: "cd <monorepo-root> && nx-factory list" }],
14
+ });
15
+ process.exit(1);
16
+ return;
17
+ }
18
+ const { default: fs } = await import("fs-extra");
19
+ // ─── Installed components ──────────────────────────────────────────────────
20
+ const uiComponentsDir = path.join(uiPkgDir, "src/components/ui");
21
+ let installed = [];
22
+ if (await pathExists(uiComponentsDir)) {
23
+ const files = await fs.readdir(uiComponentsDir);
24
+ installed = files
25
+ .filter((f) => f.endsWith(".tsx") || f.endsWith(".ts"))
26
+ .map((f) => f.replace(/\.tsx?$/, ""))
27
+ .sort();
28
+ }
29
+ // ─── Barrel export check ───────────────────────────────────────────────────
30
+ const barrelPath = path.join(uiPkgDir, "src/index.ts");
31
+ let barrelContent = "";
32
+ if (await pathExists(barrelPath)) {
33
+ barrelContent = await fs.readFile(barrelPath, "utf-8");
34
+ }
35
+ const exported = new Set([...barrelContent.matchAll(/\.\/components\/ui\/([^"']+)/g)].map((m) => m[1]));
36
+ const notExported = installed.filter((comp) => !exported.has(comp));
37
+ // ─── App import scan ───────────────────────────────────────────────────────
38
+ const appsDir = path.join(process.cwd(), "apps");
39
+ const importMap = new Map(); // component → apps[]
40
+ if (await pathExists(appsDir)) {
41
+ const apps = await fs.readdir(appsDir);
42
+ for (const app of apps) {
43
+ const appSrc = path.join(appsDir, app, "src");
44
+ if (!(await pathExists(appSrc)))
45
+ continue;
46
+ const files = await collectTsFiles(appSrc);
47
+ for (const file of files) {
48
+ const content = await fs.readFile(file, "utf-8");
49
+ for (const comp of installed) {
50
+ const name = toComponentName(comp);
51
+ if (content.includes(name)) {
52
+ if (!importMap.has(comp))
53
+ importMap.set(comp, []);
54
+ if (!importMap.get(comp).includes(app)) {
55
+ importMap.get(comp).push(app);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ // ─── Render ────────────────────────────────────────────────────────────────
63
+ const pkgName = cfg?.uiPackage ?? path.basename(uiPkgDir);
64
+ console.log(`\n ${c.dim("─".repeat(44))}`);
65
+ console.log(` ${c.whiteBold(`@workspace/${pkgName}`)} ${c.dim(`${installed.length} component${installed.length !== 1 ? "s" : ""}`)}`);
66
+ console.log(` ${c.dim("─".repeat(44))}\n`);
67
+ if (installed.length === 0) {
68
+ console.log(` ${c.dim("No components installed yet.")}`);
69
+ console.log(` ${c.dim("Run: ")}${c.purple("nx-factory add-component button card")}\n`);
70
+ return;
71
+ }
72
+ // Column layout
73
+ const colW = 24;
74
+ for (const comp of installed) {
75
+ const inBarrel = exported.has(comp);
76
+ const usedIn = importMap.get(comp) ?? [];
77
+ const barrelTag = inBarrel ? c.green("✓") : c.yellow("!");
78
+ const usageTxt = usedIn.length > 0
79
+ ? c.dim(`used in: ${usedIn.join(", ")}`)
80
+ : c.dim("not imported by any app");
81
+ console.log(` ${barrelTag} ${c.white(comp.padEnd(colW))} ${usageTxt}`);
82
+ }
83
+ if (notExported.length > 0) {
84
+ console.log(`\n ${c.yellow("⚠")} ${c.yellow(`${notExported.length} component${notExported.length > 1 ? "s" : ""} missing from barrel export:`)}`);
85
+ console.log(` ${c.dim(notExported.join(", "))}`);
86
+ console.log(` ${c.dim("Run ")}${c.purple("nx-factory doctor")}${c.dim(" to fix automatically")}`);
87
+ }
88
+ console.log();
89
+ }
90
+ async function detectUiPackageDir(uiPackage) {
91
+ const base = uiPackage ?? "ui";
92
+ // Try config-specified name first
93
+ const configured = path.join(process.cwd(), "packages", base);
94
+ if (await pathExists(path.join(configured, "components.json")))
95
+ return configured;
96
+ // Already inside the UI package
97
+ if (await pathExists(path.join(process.cwd(), "components.json")))
98
+ return process.cwd();
99
+ // Scan packages/*
100
+ const packagesDir = path.join(process.cwd(), "packages");
101
+ if (await pathExists(packagesDir)) {
102
+ const { default: fs } = await import("fs-extra");
103
+ const dirs = await fs.readdir(packagesDir);
104
+ for (const d of dirs) {
105
+ const candidate = path.join(packagesDir, d);
106
+ if (await pathExists(path.join(candidate, "components.json")))
107
+ return candidate;
108
+ }
109
+ }
110
+ return null;
111
+ }
112
+ async function collectTsFiles(dir) {
113
+ const { default: fs } = await import("fs-extra");
114
+ const results = [];
115
+ const entries = await fs.readdir(dir, { withFileTypes: true });
116
+ for (const entry of entries) {
117
+ const full = path.join(dir, entry.name);
118
+ if (entry.isDirectory() && entry.name !== "node_modules") {
119
+ results.push(...(await collectTsFiles(full)));
120
+ }
121
+ else if (entry.isFile() && /\.(tsx?|jsx?)$/.test(entry.name)) {
122
+ results.push(full);
123
+ }
124
+ }
125
+ return results;
126
+ }
127
+ function toComponentName(kebab) {
128
+ return kebab.split("-").map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join("");
129
+ }
130
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface PublishOptions {
2
+ tag?: string;
3
+ dryRun?: boolean;
4
+ yes?: boolean;
5
+ }
6
+ export declare function publishCommand(options: PublishOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,GAAG,CAAC,EAAM,MAAM,CAAC;IACjB,MAAM,CAAC,EAAG,OAAO,CAAC;IAClB,GAAG,CAAC,EAAM,OAAO,CAAC;CACnB;AAQD,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyJ3E"}
@@ -0,0 +1,179 @@
1
+ import inquirer from "inquirer";
2
+ import path from "path";
3
+ import { pathExists, readJson, writeJson } from "../files.js";
4
+ import { loadConfig } from "../config.js";
5
+ import { run, runInDir, detectPackageManager } from "../exec.js";
6
+ import { c, q, createStepRunner, printSection, printSuccess, printError, printWarn } from "../ui.js";
7
+ export async function publishCommand(options) {
8
+ const cfg = await loadConfig();
9
+ const uiPkgDir = await detectUiPackageDir(cfg?.uiPackage);
10
+ if (!uiPkgDir) {
11
+ printError({
12
+ title: "UI package not found",
13
+ detail: "Run from the monorepo root.",
14
+ recovery: [{ label: "", cmd: "cd <monorepo-root> && nx-factory publish" }],
15
+ });
16
+ process.exit(1);
17
+ return;
18
+ }
19
+ // ─── Read current package.json ────────────────────────────────────────────
20
+ const pkgJsonPath = path.join(uiPkgDir, "package.json");
21
+ if (!(await pathExists(pkgJsonPath))) {
22
+ printError({
23
+ title: "No package.json found in UI package",
24
+ recovery: [{ label: "", cmd: "nx-factory doctor" }],
25
+ });
26
+ process.exit(1);
27
+ return;
28
+ }
29
+ const pkgJson = await readJson(pkgJsonPath);
30
+ if (pkgJson.private) {
31
+ printWarn(`${pkgJson.name} is marked private: true`, "Remove 'private' from package.json to publish, or use --dry-run to preview.");
32
+ if (!options.yes) {
33
+ const { confirmed } = await inquirer.prompt({
34
+ type: "confirm",
35
+ name: "confirmed",
36
+ message: q("Continue anyway?"),
37
+ default: false,
38
+ });
39
+ if (!confirmed) {
40
+ console.log(`\n ${c.dim("Aborted.")}\n`);
41
+ return;
42
+ }
43
+ }
44
+ }
45
+ const currentVersion = pkgJson.version ?? "0.0.0";
46
+ const pm = (await detectPackageManager()) ?? cfg?.pkgManager ?? "pnpm";
47
+ // ─── Prompts ──────────────────────────────────────────────────────────────
48
+ const defaults = {
49
+ bumpType: "patch",
50
+ tag: options.tag ?? "latest",
51
+ registry: "https://registry.npmjs.org",
52
+ };
53
+ const answers = options.yes
54
+ ? defaults
55
+ : await inquirer.prompt([
56
+ {
57
+ type: "list",
58
+ name: "bumpType",
59
+ message: q("Version bump", `current: ${currentVersion}`),
60
+ choices: [
61
+ { name: `patch ${bumpVersion(currentVersion, "patch")}`, value: "patch" },
62
+ { name: `minor ${bumpVersion(currentVersion, "minor")}`, value: "minor" },
63
+ { name: `major ${bumpVersion(currentVersion, "major")}`, value: "major" },
64
+ ],
65
+ default: defaults.bumpType,
66
+ },
67
+ {
68
+ type: "input",
69
+ name: "tag",
70
+ message: q("npm dist-tag", "latest · next · beta · canary"),
71
+ default: defaults.tag,
72
+ },
73
+ {
74
+ type: "input",
75
+ name: "registry",
76
+ message: q("npm registry", "leave blank for default (npmjs.org)"),
77
+ default: defaults.registry,
78
+ },
79
+ ]);
80
+ const bumpType = (answers.bumpType ?? defaults.bumpType);
81
+ const distTag = (answers.tag ?? defaults.tag);
82
+ const registry = (answers.registry ?? defaults.registry);
83
+ const nextVersion = bumpVersion(currentVersion, bumpType);
84
+ const pkgName = pkgJson.name;
85
+ printSection(`${options.dryRun ? "[dry run] " : ""}Publishing ${pkgName}@${nextVersion}`);
86
+ const step = createStepRunner(5, options.dryRun);
87
+ // ─── Step 1: Check npm auth ────────────────────────────────────────────────
88
+ await step("Verify npm authentication", async () => {
89
+ try {
90
+ await run("npm", ["whoami", `--registry=${registry}`]);
91
+ }
92
+ catch {
93
+ printError({
94
+ title: "Not logged in to npm",
95
+ recovery: [
96
+ { label: "Log in first:", cmd: `npm login --registry=${registry}` },
97
+ ],
98
+ });
99
+ process.exit(1);
100
+ return;
101
+ }
102
+ });
103
+ // ─── Step 2: Bump version ─────────────────────────────────────────────────
104
+ await step(`Bump version ${currentVersion} → ${nextVersion}`, async () => {
105
+ const updated = { ...pkgJson, version: nextVersion };
106
+ await writeJson(pkgJsonPath, updated);
107
+ });
108
+ // ─── Step 3: Build ────────────────────────────────────────────────────────
109
+ await step("Build package (tsup)", async () => {
110
+ await runInDir(uiPkgDir, pm, ["run", "build"]);
111
+ });
112
+ // ─── Step 4: Write changelog entry ────────────────────────────────────────
113
+ await step("Append changelog entry", async () => {
114
+ const changelogPath = path.join(uiPkgDir, "CHANGELOG.md");
115
+ const { default: fs } = await import("fs-extra");
116
+ const date = new Date().toISOString().split("T")[0];
117
+ const entry = `\n## ${nextVersion} — ${date}\n\n- ${bumpType} release\n`;
118
+ const existing = (await pathExists(changelogPath))
119
+ ? await fs.readFile(changelogPath, "utf-8")
120
+ : "# Changelog\n";
121
+ const header = existing.startsWith("# Changelog") ? existing : "# Changelog\n" + existing;
122
+ const lines = header.split("\n");
123
+ // Insert after the first line (the # Changelog heading)
124
+ lines.splice(1, 0, entry);
125
+ await fs.writeFile(changelogPath, lines.join("\n"), "utf-8");
126
+ });
127
+ // ─── Step 5: Publish ──────────────────────────────────────────────────────
128
+ await step(`Publish to npm (tag: ${distTag})`, async () => {
129
+ const publishArgs = [
130
+ "publish",
131
+ "--access=public",
132
+ `--tag=${distTag}`,
133
+ `--registry=${registry}`,
134
+ ];
135
+ if (options.dryRun)
136
+ publishArgs.push("--dry-run");
137
+ await runInDir(uiPkgDir, "npm", publishArgs);
138
+ });
139
+ printSuccess({
140
+ title: `${pkgName}@${nextVersion} published`,
141
+ commands: [
142
+ { cmd: `npm install ${pkgName}@${nextVersion}`, comment: "install in a new project" },
143
+ { cmd: `npm dist-tag ls ${pkgName}`, comment: "verify dist-tags" },
144
+ ],
145
+ tips: options.dryRun
146
+ ? [{ label: "This was a dry run — nothing was published.", cmd: "Remove --dry-run to publish for real" }]
147
+ : [{ label: "View on npm:", cmd: `https://www.npmjs.com/package/${pkgName}` }],
148
+ });
149
+ }
150
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
151
+ function bumpVersion(version, type) {
152
+ const parts = version.split(".").map(Number);
153
+ const [major = 0, minor = 0, patch = 0] = parts;
154
+ if (type === "major")
155
+ return `${major + 1}.0.0`;
156
+ if (type === "minor")
157
+ return `${major}.${minor + 1}.0`;
158
+ return `${major}.${minor}.${patch + 1}`;
159
+ }
160
+ async function detectUiPackageDir(uiPackage) {
161
+ const base = uiPackage ?? "ui";
162
+ const configured = path.join(process.cwd(), "packages", base);
163
+ if (await pathExists(path.join(configured, "components.json")))
164
+ return configured;
165
+ if (await pathExists(path.join(process.cwd(), "components.json")))
166
+ return process.cwd();
167
+ const packagesDir = path.join(process.cwd(), "packages");
168
+ if (await pathExists(packagesDir)) {
169
+ const { default: fs } = await import("fs-extra");
170
+ const dirs = await fs.readdir(packagesDir);
171
+ for (const d of dirs) {
172
+ const candidate = path.join(packagesDir, d);
173
+ if (await pathExists(path.join(candidate, "components.json")))
174
+ return candidate;
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function removeComponentCommand(components: string[], opts: {
2
+ yes?: boolean;
3
+ dryRun?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=remove-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-component.d.ts","sourceRoot":"","sources":["../../src/commands/remove-component.ts"],"names":[],"mappings":"AAMA,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAkIf"}
@@ -0,0 +1,172 @@
1
+ import inquirer from "inquirer";
2
+ import path from "path";
3
+ import { pathExists, writeFile } from "../files.js";
4
+ import { loadConfig } from "../config.js";
5
+ import { c, q, printSuccess, printError, printWarn } from "../ui.js";
6
+ export async function removeComponentCommand(components, opts) {
7
+ const cfg = await loadConfig();
8
+ const uiPkgDir = await detectUiPackageDir(cfg?.uiPackage);
9
+ if (!uiPkgDir) {
10
+ printError({
11
+ title: "UI package not found",
12
+ detail: "Run from the monorepo root.",
13
+ recovery: [{ label: "", cmd: "cd <monorepo-root> && nx-factory remove-component button" }],
14
+ });
15
+ process.exit(1);
16
+ return;
17
+ }
18
+ // If no args, show installed components as a checkbox list
19
+ if (components.length === 0) {
20
+ const installed = await getInstalledComponents(uiPkgDir);
21
+ if (installed.length === 0) {
22
+ console.log(`\n ${c.dim("No components installed.")}\n`);
23
+ return;
24
+ }
25
+ const { selected } = await inquirer.prompt({
26
+ type: "checkbox",
27
+ name: "selected",
28
+ message: q("Which components do you want to remove?", "space to toggle · enter to confirm"),
29
+ choices: installed,
30
+ validate: (v) => v.length > 0 || c.red("Select at least one"),
31
+ });
32
+ components = selected;
33
+ }
34
+ // ─── App usage scan ────────────────────────────────────────────────────────
35
+ const usageWarnings = [];
36
+ const appsDir = path.join(process.cwd(), "apps");
37
+ if (await pathExists(appsDir)) {
38
+ const { default: fs } = await import("fs-extra");
39
+ const apps = await fs.readdir(appsDir);
40
+ for (const app of apps) {
41
+ const appSrc = path.join(appsDir, app, "src");
42
+ if (!(await pathExists(appSrc)))
43
+ continue;
44
+ const files = await collectTsFiles(appSrc);
45
+ for (const file of files) {
46
+ const content = await fs.readFile(file, "utf-8");
47
+ for (const comp of components) {
48
+ const name = toComponentName(comp);
49
+ if (content.includes(name)) {
50
+ usageWarnings.push(`${app} imports ${name}`);
51
+ break;
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
57
+ if (usageWarnings.length > 0) {
58
+ printWarn(`${usageWarnings.length} app${usageWarnings.length > 1 ? "s" : ""} still import${usageWarnings.length === 1 ? "s" : ""} these components`, usageWarnings.join(" · "));
59
+ if (!opts.yes) {
60
+ const { confirmed } = await inquirer.prompt({
61
+ type: "confirm",
62
+ name: "confirmed",
63
+ message: q("Remove anyway?"),
64
+ default: false,
65
+ });
66
+ if (!confirmed) {
67
+ console.log(`\n ${c.dim("Aborted.")}\n`);
68
+ return;
69
+ }
70
+ }
71
+ }
72
+ const { default: fs } = await import("fs-extra");
73
+ const removed = [];
74
+ const failed = [];
75
+ for (const comp of components) {
76
+ const compFile = path.join(uiPkgDir, "src/components/ui", `${comp}.tsx`);
77
+ const exists = await pathExists(compFile);
78
+ if (!exists) {
79
+ console.log(` ${c.yellow("⚠")} ${c.dim(`${comp} — file not found, skipping`)}`);
80
+ continue;
81
+ }
82
+ if (opts.dryRun) {
83
+ console.log(` ${c.purpleDim("│")} ${c.dim(`[dry run] would remove: src/components/ui/${comp}.tsx`)}`);
84
+ removed.push(comp);
85
+ continue;
86
+ }
87
+ try {
88
+ await fs.remove(compFile);
89
+ removed.push(comp);
90
+ }
91
+ catch {
92
+ failed.push(comp);
93
+ }
94
+ }
95
+ // ─── Update barrel exports ─────────────────────────────────────────────────
96
+ if (removed.length > 0 && !opts.dryRun) {
97
+ const barrelPath = path.join(uiPkgDir, "src/index.ts");
98
+ if (await pathExists(barrelPath)) {
99
+ let barrel = await fs.readFile(barrelPath, "utf-8");
100
+ for (const comp of removed) {
101
+ barrel = barrel
102
+ .split("\n")
103
+ .filter((line) => !line.includes(`./components/ui/${comp}`))
104
+ .join("\n");
105
+ }
106
+ await writeFile(barrelPath, barrel);
107
+ console.log(` ${c.dim("✓")} ${c.dim("barrel exports updated")}`);
108
+ }
109
+ }
110
+ if (failed.length > 0) {
111
+ printWarn(`Failed to remove: ${failed.join(", ")}`, "Try removing manually from src/components/ui/");
112
+ }
113
+ if (removed.length > 0) {
114
+ printSuccess({
115
+ title: opts.dryRun
116
+ ? `${removed.length} component${removed.length > 1 ? "s" : ""} would be removed (dry run)`
117
+ : `${removed.length} component${removed.length > 1 ? "s" : ""} removed`,
118
+ commands: opts.dryRun
119
+ ? [{ cmd: "nx-factory remove-component " + removed.join(" "), comment: "run without --dry-run to apply" }]
120
+ : [{ cmd: `pnpm nx build @workspace/${cfg?.uiPackage ?? "ui"}`, comment: "rebuild the UI package" }],
121
+ });
122
+ }
123
+ }
124
+ async function getInstalledComponents(uiPkgDir) {
125
+ const dir = path.join(uiPkgDir, "src/components/ui");
126
+ if (!(await pathExists(dir)))
127
+ return [];
128
+ const { default: fs } = await import("fs-extra");
129
+ const files = await fs.readdir(dir);
130
+ return files
131
+ .filter((f) => f.endsWith(".tsx") || f.endsWith(".ts"))
132
+ .map((f) => f.replace(/\.tsx?$/, ""))
133
+ .sort();
134
+ }
135
+ async function detectUiPackageDir(uiPackage) {
136
+ const base = uiPackage ?? "ui";
137
+ const configured = path.join(process.cwd(), "packages", base);
138
+ if (await pathExists(path.join(configured, "components.json")))
139
+ return configured;
140
+ if (await pathExists(path.join(process.cwd(), "components.json")))
141
+ return process.cwd();
142
+ const packagesDir = path.join(process.cwd(), "packages");
143
+ if (await pathExists(packagesDir)) {
144
+ const { default: fs } = await import("fs-extra");
145
+ const dirs = await fs.readdir(packagesDir);
146
+ for (const d of dirs) {
147
+ const candidate = path.join(packagesDir, d);
148
+ if (await pathExists(path.join(candidate, "components.json")))
149
+ return candidate;
150
+ }
151
+ }
152
+ return null;
153
+ }
154
+ async function collectTsFiles(dir) {
155
+ const { default: fs } = await import("fs-extra");
156
+ const results = [];
157
+ const entries = await fs.readdir(dir, { withFileTypes: true });
158
+ for (const entry of entries) {
159
+ const full = path.join(dir, entry.name);
160
+ if (entry.isDirectory() && entry.name !== "node_modules") {
161
+ results.push(...(await collectTsFiles(full)));
162
+ }
163
+ else if (entry.isFile() && /\.(tsx?|jsx?)$/.test(entry.name)) {
164
+ results.push(full);
165
+ }
166
+ }
167
+ return results;
168
+ }
169
+ function toComponentName(kebab) {
170
+ return kebab.split("-").map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join("");
171
+ }
172
+ //# sourceMappingURL=remove-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-component.js","sourceRoot":"","sources":["../../src/commands/remove-component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function updateCommand(components: string[], opts: {
2
+ yes?: boolean;
3
+ dryRun?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAOA,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAqGf"}