trix-ui 0.1.9 → 0.2.0

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 @@
1
+ export * from "./shared/add-collection.js";
@@ -0,0 +1,2 @@
1
+ export * from "./shared/add-collection.js";
2
+ //# sourceMappingURL=add-collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-collection.js","sourceRoot":"","sources":["../../src/commands/add-collection.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA"}
@@ -1,94 +1,196 @@
1
1
  import path from "node:path";
2
+ import chalk from "chalk";
2
3
  import { Command } from "commander";
4
+ import ora from "ora";
3
5
  import { loadConfig } from "../lib/config.js";
4
- import { copyFileSafe, fileExists } from "../lib/fs.js";
5
- import { installRegistryEntries } from "../lib/install.js";
6
+ import { directoryExists } from "../lib/fs.js";
6
7
  import { loadLockfile, saveLockfile } from "../lib/lockfile.js";
7
- import { getTemplatePath } from "../lib/paths.js";
8
+ import { logger } from "../lib/logger.js";
8
9
  import { getRegistrySections, loadRegistry } from "../lib/registry.js";
10
+ import { analyzeEntryDependencies, confirmOverwrite, createEmptyResult, displayInstallationPlan, displayResults, getEntryNames, installEntries, normalizeEntryNames, validateEntries } from "./shared/add-collection.js";
11
+ import { ensureProjectFiles } from "./add/project-files.js";
12
+ import { confirmDependencyInstallation, confirmInstallation } from "./add/prompts.js";
13
+ import { displayManualInstallInstructions } from "./add/ui.js";
14
+ import { installNpmDependencies } from "./add/install.js";
15
+ function toAddConfig(config) {
16
+ return config;
17
+ }
18
+ const SECTION_LABELS = {
19
+ entrySingular: "section",
20
+ entryPlural: "sections"
21
+ };
9
22
  export const addSectionCommand = new Command("add-section")
10
23
  .description("Add prebuilt sections to your project")
11
- .argument("<sections...>", "section names")
12
- .option("--force", "overwrite existing files")
24
+ .argument("<sections...>", "section names (or 'all' to install everything)")
25
+ .option("-f, --force", "overwrite existing files", false)
26
+ .option("-y, --yes", "skip confirmation prompts", false)
27
+ .option("-s, --silent", "suppress output messages", false)
28
+ .option("-c, --cwd <path>", "working directory to add sections")
29
+ .option("--skip-deps", "skip dependency installation", false)
13
30
  .action(async (sections, options) => {
31
+ const spinner = options.silent ? null : ora({ color: "blue" });
32
+ const shouldLog = !options.silent;
33
+ const shouldPrompt = !options.yes && !options.silent;
14
34
  try {
15
- const cwd = process.cwd();
16
- const config = await loadConfig(cwd);
35
+ const cwd = path.resolve(options.cwd || process.cwd());
36
+ if (shouldLog) {
37
+ logger.info({ cwd }, "Adding sections");
38
+ }
39
+ if (!(await directoryExists(cwd))) {
40
+ logger.error(`Directory does not exist: ${cwd}`);
41
+ process.exit(1);
42
+ }
43
+ spinner?.start("Loading configuration...");
44
+ const config = toAddConfig(await loadConfig(cwd));
45
+ spinner?.succeed("Configuration loaded");
46
+ spinner?.start("Loading registry and lockfile...");
17
47
  const registry = await loadRegistry(config, cwd);
18
48
  const lockfile = await loadLockfile(cwd);
49
+ spinner?.succeed("Registry and lockfile loaded");
19
50
  const availableSections = getRegistrySections(registry);
20
51
  if (availableSections.length === 0) {
21
- throw new Error("No sections available in the registry.");
52
+ logger.error("No sections available in the registry.");
53
+ process.exit(1);
22
54
  }
23
- const sectionMap = new Map(availableSections.map((section) => [section.name, section]));
24
- const uniqueSections = [
25
- ...new Set(sections.map((name) => name.trim()))
26
- ].filter(Boolean);
27
- const missing = uniqueSections.filter((name) => !sectionMap.has(name));
28
- if (missing.length) {
29
- throw new Error(`Unknown sections: ${missing.join(", ")}`);
55
+ let requestedSections = normalizeEntryNames(sections);
56
+ if (requestedSections.length === 0) {
57
+ logger.error("No section names provided.");
58
+ process.exit(1);
30
59
  }
31
- const utilsPath = path.resolve(cwd, config.paths.utils);
32
- if (!(await fileExists(utilsPath))) {
33
- await copyFileSafe(getTemplatePath("lib/utils.ts"), utilsPath, true);
60
+ if (requestedSections.includes("all")) {
61
+ const allSections = getEntryNames(availableSections);
62
+ if (shouldLog) {
63
+ console.log(chalk.yellow(`\nThis will install ${allSections.length} sections:`));
64
+ console.log(chalk.gray(allSections.join(", ")));
65
+ }
66
+ const shouldContinue = shouldPrompt
67
+ ? await confirmInstallation(`all ${allSections.length} sections`)
68
+ : true;
69
+ if (!shouldContinue) {
70
+ logger.info("Installation cancelled");
71
+ process.exit(0);
72
+ }
73
+ requestedSections = allSections;
34
74
  }
35
- const stylesPath = path.resolve(cwd, config.paths.styles);
36
- if (!(await fileExists(stylesPath))) {
37
- await copyFileSafe(getTemplatePath("styles/globals.css"), stylesPath, true);
75
+ spinner?.start("Validating sections...");
76
+ const validation = validateEntries(requestedSections, availableSections);
77
+ spinner?.stop();
78
+ if (validation.invalid.length > 0) {
79
+ logger.error("The following sections were not found:");
80
+ validation.invalid.forEach((name) => logger.error(` \u0007 ${name}`));
81
+ if (validation.suggestions.length > 0 && shouldLog) {
82
+ console.log(chalk.yellow("\nDid you mean:"));
83
+ validation.suggestions.forEach((suggestion) => console.log(chalk.gray(` \u0007 ${suggestion}`)));
84
+ }
85
+ process.exit(1);
86
+ return;
38
87
  }
39
- const dependencyNames = new Set();
40
- for (const name of uniqueSections) {
41
- const entry = sectionMap.get(name);
42
- entry?.dependencies?.local?.forEach((dep) => dependencyNames.add(dep));
88
+ spinner?.start("Analyzing dependencies...");
89
+ const analysis = analyzeEntryDependencies(validation.valid, availableSections, registry, lockfile, "sections");
90
+ spinner?.stop();
91
+ if (shouldLog) {
92
+ displayInstallationPlan(analysis, options, SECTION_LABELS);
43
93
  }
44
- const npmDependencies = new Set();
45
- let dependencyInstalled = [];
46
- let dependencySkipped = [];
47
- if (dependencyNames.size) {
48
- const dependencySummary = await installRegistryEntries({
94
+ let forceInstall = Boolean(options.force);
95
+ if (analysis.conflicts.length > 0 && !forceInstall) {
96
+ if (shouldLog) {
97
+ logger.warn("The following sections or dependencies already exist:");
98
+ analysis.conflicts.forEach((name) => logger.warn(` \u0007 ${name}`));
99
+ }
100
+ if (options.yes) {
101
+ forceInstall = true;
102
+ }
103
+ else if (shouldPrompt) {
104
+ const shouldOverwrite = await confirmOverwrite(SECTION_LABELS.entryPlural);
105
+ if (!shouldOverwrite) {
106
+ logger.info("Installation cancelled");
107
+ process.exit(0);
108
+ return;
109
+ }
110
+ forceInstall = true;
111
+ }
112
+ }
113
+ const installCount = forceInstall
114
+ ? analysis.totalTargets
115
+ : analysis.totalToInstall;
116
+ if (shouldPrompt && installCount > 0) {
117
+ const label = analysis.componentDependencies.length > 0
118
+ ? `${installCount} item${installCount > 1 ? "s" : ""}`
119
+ : `${installCount} ${SECTION_LABELS.entrySingular}${installCount > 1 ? "s" : ""}`;
120
+ const shouldInstall = await confirmInstallation(label);
121
+ if (!shouldInstall) {
122
+ logger.info("Installation cancelled");
123
+ process.exit(0);
124
+ return;
125
+ }
126
+ }
127
+ spinner?.start("Verifying project setup...");
128
+ await ensureProjectFiles(cwd, config);
129
+ spinner?.succeed("Project setup verified");
130
+ const dependenciesResult = analysis.componentDependencies.length > 0
131
+ ? await installEntries(registry.components, analysis.componentDependencies, lockfile.components, {
49
132
  cwd,
50
133
  config,
51
- entries: registry.components,
52
- names: [...dependencyNames],
53
- lockEntries: lockfile.components,
54
- force: Boolean(options.force),
55
- itemLabel: "components"
56
- });
57
- dependencyInstalled = dependencySummary.installed;
58
- dependencySkipped = dependencySummary.skipped;
59
- dependencySummary.npmDependencies.forEach((dep) => npmDependencies.add(dep));
60
- }
61
- const sectionSummary = await installRegistryEntries({
134
+ force: forceInstall,
135
+ spinner,
136
+ itemLabel: "component"
137
+ })
138
+ : createEmptyResult();
139
+ const sectionsResult = await installEntries(availableSections, validation.valid, lockfile.sections, {
62
140
  cwd,
63
141
  config,
64
- entries: availableSections,
65
- names: uniqueSections,
66
- lockEntries: lockfile.sections,
67
- force: Boolean(options.force),
68
- itemLabel: "sections"
142
+ force: forceInstall,
143
+ spinner,
144
+ itemLabel: "section"
69
145
  });
70
- sectionSummary.npmDependencies.forEach((dep) => npmDependencies.add(dep));
146
+ const npmDependencies = new Set();
147
+ dependenciesResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
148
+ sectionsResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
149
+ spinner?.start("Updating lockfile...");
71
150
  await saveLockfile(cwd, lockfile);
72
- if (dependencyInstalled.length) {
73
- console.log(`Installed component dependencies: ${dependencyInstalled.join(", ")}`);
151
+ spinner?.succeed("Lockfile updated");
152
+ const combinedResult = {
153
+ entries: sectionsResult,
154
+ dependencies: dependenciesResult,
155
+ npmDependencies,
156
+ conflicts: analysis.conflicts
157
+ };
158
+ if (npmDependencies.size > 0 && !options.skipDeps) {
159
+ const shouldInstallDeps = shouldPrompt
160
+ ? await confirmDependencyInstallation(npmDependencies)
161
+ : true;
162
+ if (shouldInstallDeps) {
163
+ await installNpmDependencies({
164
+ cwd,
165
+ dependencies: npmDependencies,
166
+ spinner
167
+ });
168
+ }
169
+ else {
170
+ if (shouldLog) {
171
+ await displayManualInstallInstructions(npmDependencies, cwd);
172
+ }
173
+ }
74
174
  }
75
- if (dependencySkipped.length) {
76
- console.log(`Skipped component dependencies (already present): ${dependencySkipped.join(", ")}`);
175
+ else if (npmDependencies.size > 0 && shouldLog) {
176
+ await displayManualInstallInstructions(npmDependencies, cwd);
77
177
  }
78
- if (sectionSummary.installed.length) {
79
- console.log(`Installed sections: ${sectionSummary.installed.join(", ")}`);
178
+ if (shouldLog) {
179
+ displayResults(combinedResult, { ...options, force: forceInstall }, SECTION_LABELS);
80
180
  }
81
- if (sectionSummary.skipped.length) {
82
- console.log(`Skipped sections (already present): ${sectionSummary.skipped.join(", ")}`);
83
- }
84
- if (npmDependencies.size) {
85
- console.log(`\nInstall dependencies:`);
86
- console.log(`npm install ${[...npmDependencies].join(" ")}`);
181
+ if (sectionsResult.failed.length > 0 || dependenciesResult.failed.length > 0) {
182
+ process.exit(1);
183
+ return;
87
184
  }
88
185
  }
89
186
  catch (error) {
90
- console.error(error.message);
187
+ spinner?.fail("Installation failed");
188
+ logger.error(error.message);
189
+ if (process.env.DEBUG) {
190
+ console.error(error);
191
+ }
91
192
  process.exit(1);
193
+ return;
92
194
  }
93
195
  });
94
196
  //# sourceMappingURL=add-section.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-section.js","sourceRoot":"","sources":["../../src/commands/add-section.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-section.js","sourceRoot":"","sources":["../../src/commands/add-section.ts"],"names":[],"mappings":"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"}
@@ -1,94 +1,196 @@
1
1
  import path from "node:path";
2
+ import chalk from "chalk";
2
3
  import { Command } from "commander";
4
+ import ora from "ora";
3
5
  import { loadConfig } from "../lib/config.js";
4
- import { copyFileSafe, fileExists } from "../lib/fs.js";
5
- import { installRegistryEntries } from "../lib/install.js";
6
+ import { directoryExists } from "../lib/fs.js";
6
7
  import { loadLockfile, saveLockfile } from "../lib/lockfile.js";
7
- import { getTemplatePath } from "../lib/paths.js";
8
+ import { logger } from "../lib/logger.js";
8
9
  import { getRegistryWrappers, loadRegistry } from "../lib/registry.js";
10
+ import { analyzeEntryDependencies, confirmOverwrite, createEmptyResult, displayInstallationPlan, displayResults, getEntryNames, installEntries, normalizeEntryNames, validateEntries } from "./add-collection.js";
11
+ import { ensureProjectFiles } from "./add/project-files.js";
12
+ import { confirmDependencyInstallation, confirmInstallation } from "./add/prompts.js";
13
+ import { displayManualInstallInstructions } from "./add/ui.js";
14
+ import { installNpmDependencies } from "./add/install.js";
15
+ const WRAPPER_LABELS = {
16
+ entrySingular: "wrapper",
17
+ entryPlural: "wrappers"
18
+ };
19
+ function toAddConfig(config) {
20
+ return config;
21
+ }
9
22
  export const addWrapperCommand = new Command("add-wrapper")
10
23
  .description("Add prebuilt wrappers to your project")
11
- .argument("<wrappers...>", "wrapper names")
12
- .option("--force", "overwrite existing files")
24
+ .argument("<wrappers...>", "wrapper names (or 'all' to install everything)")
25
+ .option("-f, --force", "overwrite existing files", false)
26
+ .option("-y, --yes", "skip confirmation prompts", false)
27
+ .option("-s, --silent", "suppress output messages", false)
28
+ .option("-c, --cwd <path>", "working directory to add wrappers")
29
+ .option("--skip-deps", "skip dependency installation", false)
13
30
  .action(async (wrappers, options) => {
31
+ const spinner = options.silent ? null : ora({ color: "blue" });
32
+ const shouldLog = !options.silent;
33
+ const shouldPrompt = !options.yes && !options.silent;
14
34
  try {
15
- const cwd = process.cwd();
16
- const config = await loadConfig(cwd);
35
+ const cwd = path.resolve(options.cwd || process.cwd());
36
+ if (shouldLog) {
37
+ logger.info({ cwd }, "Adding wrappers");
38
+ }
39
+ if (!(await directoryExists(cwd))) {
40
+ logger.error(`Directory does not exist: ${cwd}`);
41
+ process.exit(1);
42
+ }
43
+ spinner?.start("Loading configuration...");
44
+ const config = toAddConfig(await loadConfig(cwd));
45
+ spinner?.succeed("Configuration loaded");
46
+ spinner?.start("Loading registry and lockfile...");
17
47
  const registry = await loadRegistry(config, cwd);
18
48
  const lockfile = await loadLockfile(cwd);
49
+ spinner?.succeed("Registry and lockfile loaded");
19
50
  const availableWrappers = getRegistryWrappers(registry);
20
51
  if (availableWrappers.length === 0) {
21
- throw new Error("No wrappers available in the registry.");
52
+ logger.error("No wrappers available in the registry.");
53
+ process.exit(1);
22
54
  }
23
- const wrapperMap = new Map(availableWrappers.map((wrapper) => [wrapper.name, wrapper]));
24
- const uniqueWrappers = [
25
- ...new Set(wrappers.map((name) => name.trim()))
26
- ].filter(Boolean);
27
- const missing = uniqueWrappers.filter((name) => !wrapperMap.has(name));
28
- if (missing.length) {
29
- throw new Error(`Unknown wrappers: ${missing.join(", ")}`);
55
+ let requestedWrappers = normalizeEntryNames(wrappers);
56
+ if (requestedWrappers.length === 0) {
57
+ logger.error("No wrapper names provided.");
58
+ process.exit(1);
30
59
  }
31
- const utilsPath = path.resolve(cwd, config.paths.utils);
32
- if (!(await fileExists(utilsPath))) {
33
- await copyFileSafe(getTemplatePath("lib/utils.ts"), utilsPath, true);
60
+ if (requestedWrappers.includes("all")) {
61
+ const allWrappers = getEntryNames(availableWrappers);
62
+ if (shouldLog) {
63
+ console.log(chalk.yellow(`\nThis will install ${allWrappers.length} wrappers:`));
64
+ console.log(chalk.gray(allWrappers.join(", ")));
65
+ }
66
+ const shouldContinue = shouldPrompt
67
+ ? await confirmInstallation(`all ${allWrappers.length} wrappers`)
68
+ : true;
69
+ if (!shouldContinue) {
70
+ logger.info("Installation cancelled");
71
+ process.exit(0);
72
+ }
73
+ requestedWrappers = allWrappers;
34
74
  }
35
- const stylesPath = path.resolve(cwd, config.paths.styles);
36
- if (!(await fileExists(stylesPath))) {
37
- await copyFileSafe(getTemplatePath("styles/globals.css"), stylesPath, true);
75
+ spinner?.start("Validating wrappers...");
76
+ const validation = validateEntries(requestedWrappers, availableWrappers);
77
+ spinner?.stop();
78
+ if (validation.invalid.length > 0) {
79
+ logger.error("The following wrappers were not found:");
80
+ validation.invalid.forEach((name) => logger.error(` \u0007 ${name}`));
81
+ if (validation.suggestions.length > 0 && shouldLog) {
82
+ console.log(chalk.yellow("\nDid you mean:"));
83
+ validation.suggestions.forEach((suggestion) => console.log(chalk.gray(` \u0007 ${suggestion}`)));
84
+ }
85
+ process.exit(1);
86
+ return;
38
87
  }
39
- const dependencyNames = new Set();
40
- for (const name of uniqueWrappers) {
41
- const entry = wrapperMap.get(name);
42
- entry?.dependencies?.local?.forEach((dep) => dependencyNames.add(dep));
88
+ spinner?.start("Analyzing dependencies...");
89
+ const analysis = analyzeEntryDependencies(validation.valid, availableWrappers, registry, lockfile, "wrappers");
90
+ spinner?.stop();
91
+ if (shouldLog) {
92
+ displayInstallationPlan(analysis, options, WRAPPER_LABELS);
43
93
  }
44
- const npmDependencies = new Set();
45
- let dependencyInstalled = [];
46
- let dependencySkipped = [];
47
- if (dependencyNames.size) {
48
- const dependencySummary = await installRegistryEntries({
94
+ let forceInstall = Boolean(options.force);
95
+ if (analysis.conflicts.length > 0 && !forceInstall) {
96
+ if (shouldLog) {
97
+ logger.warn("The following wrappers or dependencies already exist:");
98
+ analysis.conflicts.forEach((name) => logger.warn(` \u0007 ${name}`));
99
+ }
100
+ if (options.yes) {
101
+ forceInstall = true;
102
+ }
103
+ else if (shouldPrompt) {
104
+ const shouldOverwrite = await confirmOverwrite(WRAPPER_LABELS.entryPlural);
105
+ if (!shouldOverwrite) {
106
+ logger.info("Installation cancelled");
107
+ process.exit(0);
108
+ return;
109
+ }
110
+ forceInstall = true;
111
+ }
112
+ }
113
+ const installCount = forceInstall
114
+ ? analysis.totalTargets
115
+ : analysis.totalToInstall;
116
+ if (shouldPrompt && installCount > 0) {
117
+ const label = analysis.componentDependencies.length > 0
118
+ ? `${installCount} item${installCount > 1 ? "s" : ""}`
119
+ : `${installCount} ${WRAPPER_LABELS.entrySingular}${installCount > 1 ? "s" : ""}`;
120
+ const shouldInstall = await confirmInstallation(label);
121
+ if (!shouldInstall) {
122
+ logger.info("Installation cancelled");
123
+ process.exit(0);
124
+ return;
125
+ }
126
+ }
127
+ spinner?.start("Verifying project setup...");
128
+ await ensureProjectFiles(cwd, config);
129
+ spinner?.succeed("Project setup verified");
130
+ const dependenciesResult = analysis.componentDependencies.length > 0
131
+ ? await installEntries(registry.components, analysis.componentDependencies, lockfile.components, {
49
132
  cwd,
50
133
  config,
51
- entries: registry.components,
52
- names: [...dependencyNames],
53
- lockEntries: lockfile.components,
54
- force: Boolean(options.force),
55
- itemLabel: "components"
56
- });
57
- dependencyInstalled = dependencySummary.installed;
58
- dependencySkipped = dependencySummary.skipped;
59
- dependencySummary.npmDependencies.forEach((dep) => npmDependencies.add(dep));
60
- }
61
- const wrapperSummary = await installRegistryEntries({
134
+ force: forceInstall,
135
+ spinner,
136
+ itemLabel: "component"
137
+ })
138
+ : createEmptyResult();
139
+ const wrappersResult = await installEntries(availableWrappers, validation.valid, lockfile.wrappers, {
62
140
  cwd,
63
141
  config,
64
- entries: availableWrappers,
65
- names: uniqueWrappers,
66
- lockEntries: lockfile.wrappers,
67
- force: Boolean(options.force),
68
- itemLabel: "wrappers"
142
+ force: forceInstall,
143
+ spinner,
144
+ itemLabel: "wrapper"
69
145
  });
70
- wrapperSummary.npmDependencies.forEach((dep) => npmDependencies.add(dep));
146
+ const npmDependencies = new Set();
147
+ dependenciesResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
148
+ wrappersResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
149
+ spinner?.start("Updating lockfile...");
71
150
  await saveLockfile(cwd, lockfile);
72
- if (dependencyInstalled.length) {
73
- console.log(`Installed component dependencies: ${dependencyInstalled.join(", ")}`);
151
+ spinner?.succeed("Lockfile updated");
152
+ const combinedResult = {
153
+ entries: wrappersResult,
154
+ dependencies: dependenciesResult,
155
+ npmDependencies,
156
+ conflicts: analysis.conflicts
157
+ };
158
+ if (npmDependencies.size > 0 && !options.skipDeps) {
159
+ const shouldInstallDeps = shouldPrompt
160
+ ? await confirmDependencyInstallation(npmDependencies)
161
+ : true;
162
+ if (shouldInstallDeps) {
163
+ await installNpmDependencies({
164
+ cwd,
165
+ dependencies: npmDependencies,
166
+ spinner
167
+ });
168
+ }
169
+ else {
170
+ if (shouldLog) {
171
+ await displayManualInstallInstructions(npmDependencies, cwd);
172
+ }
173
+ }
74
174
  }
75
- if (dependencySkipped.length) {
76
- console.log(`Skipped component dependencies (already present): ${dependencySkipped.join(", ")}`);
175
+ else if (npmDependencies.size > 0 && shouldLog) {
176
+ await displayManualInstallInstructions(npmDependencies, cwd);
77
177
  }
78
- if (wrapperSummary.installed.length) {
79
- console.log(`Installed wrappers: ${wrapperSummary.installed.join(", ")}`);
178
+ if (shouldLog) {
179
+ displayResults(combinedResult, { ...options, force: forceInstall }, WRAPPER_LABELS);
80
180
  }
81
- if (wrapperSummary.skipped.length) {
82
- console.log(`Skipped wrappers (already present): ${wrapperSummary.skipped.join(", ")}`);
83
- }
84
- if (npmDependencies.size) {
85
- console.log(`\nInstall dependencies:`);
86
- console.log(`npm install ${[...npmDependencies].join(" ")}`);
181
+ if (wrappersResult.failed.length > 0 || dependenciesResult.failed.length > 0) {
182
+ process.exit(1);
183
+ return;
87
184
  }
88
185
  }
89
186
  catch (error) {
90
- console.error(error.message);
187
+ spinner?.fail("Installation failed");
188
+ logger.error(error.message);
189
+ if (process.env.DEBUG) {
190
+ console.error(error);
191
+ }
91
192
  process.exit(1);
193
+ return;
92
194
  }
93
195
  });
94
196
  //# sourceMappingURL=add-wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add-wrapper.js","sourceRoot":"","sources":["../../src/commands/add-wrapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-wrapper.js","sourceRoot":"","sources":["../../src/commands/add-wrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { Ora } from "ora";
2
+ import type { Lockfile, LockfileComponent } from "../../lib/lockfile.js";
3
+ import type { RegistryIndex, RegistryItem } from "../../lib/registry.js";
4
+ import type { AddConfig, AddOptions } from "../add/types.js";
5
+ export interface EntryValidation {
6
+ valid: string[];
7
+ invalid: string[];
8
+ suggestions: string[];
9
+ }
10
+ export interface EntryDependencyAnalysis {
11
+ entries: string[];
12
+ componentDependencies: string[];
13
+ npmDependencies: Set<string>;
14
+ conflicts: string[];
15
+ totalTargets: number;
16
+ totalToInstall: number;
17
+ }
18
+ export interface EntryInstallResult {
19
+ installed: string[];
20
+ skipped: string[];
21
+ failed: string[];
22
+ npmDependencies: Set<string>;
23
+ }
24
+ export interface CollectionInstallResult {
25
+ entries: EntryInstallResult;
26
+ dependencies: EntryInstallResult;
27
+ npmDependencies: Set<string>;
28
+ conflicts: string[];
29
+ }
30
+ export interface EntryLabels {
31
+ entrySingular: string;
32
+ entryPlural: string;
33
+ }
34
+ export declare function normalizeEntryNames(names: string[]): string[];
35
+ export declare function getEntryNames(entries: RegistryItem[]): string[];
36
+ export declare function createEntryMap(entries: RegistryItem[]): Map<string, RegistryItem>;
37
+ export declare function validateEntries(names: string[], entries: RegistryItem[]): EntryValidation;
38
+ export declare function analyzeEntryDependencies(names: string[], entries: RegistryItem[], registry: RegistryIndex, lockfile: Lockfile, lockKey: "sections" | "wrappers"): EntryDependencyAnalysis;
39
+ export declare function confirmOverwrite(entryPlural: string): Promise<boolean>;
40
+ export declare function displayInstallationPlan(analysis: EntryDependencyAnalysis, options: AddOptions, labels: EntryLabels): void;
41
+ export declare function displayResults(result: CollectionInstallResult, options: AddOptions, labels: EntryLabels): void;
42
+ export declare function installEntries(entries: RegistryItem[], names: string[], lockEntries: Record<string, LockfileComponent>, options: {
43
+ cwd: string;
44
+ config: AddConfig;
45
+ force: boolean;
46
+ spinner: Ora | null;
47
+ itemLabel: string;
48
+ }): Promise<EntryInstallResult>;
49
+ export declare function createEmptyResult(): EntryInstallResult;
@@ -0,0 +1,210 @@
1
+ import chalk from "chalk";
2
+ import prompts from "prompts";
3
+ import { installRegistryEntries } from "../../lib/install.js";
4
+ import { logger } from "../../lib/logger.js";
5
+ import { analyzeDependencies } from "../add/analysis.js";
6
+ function capitalize(value) {
7
+ if (value.length === 0) {
8
+ return value;
9
+ }
10
+ return value.charAt(0).toUpperCase() + value.slice(1);
11
+ }
12
+ export function normalizeEntryNames(names) {
13
+ const unique = new Set();
14
+ const normalized = [];
15
+ for (const name of names) {
16
+ const trimmed = name.trim();
17
+ if (!trimmed || unique.has(trimmed)) {
18
+ continue;
19
+ }
20
+ unique.add(trimmed);
21
+ normalized.push(trimmed);
22
+ }
23
+ return normalized;
24
+ }
25
+ export function getEntryNames(entries) {
26
+ return entries.map((entry) => entry.name);
27
+ }
28
+ export function createEntryMap(entries) {
29
+ return new Map(entries.map((entry) => [entry.name, entry]));
30
+ }
31
+ export function validateEntries(names, entries) {
32
+ const valid = [];
33
+ const invalid = [];
34
+ const suggestions = [];
35
+ const entryMap = createEntryMap(entries);
36
+ const available = getEntryNames(entries);
37
+ for (const name of names) {
38
+ const trimmed = name.trim();
39
+ if (!trimmed) {
40
+ continue;
41
+ }
42
+ if (entryMap.has(trimmed)) {
43
+ valid.push(trimmed);
44
+ continue;
45
+ }
46
+ invalid.push(trimmed);
47
+ const lower = trimmed.toLowerCase();
48
+ const similar = available.filter((entryName) => {
49
+ const candidate = entryName.toLowerCase();
50
+ return candidate.includes(lower) || lower.includes(candidate);
51
+ });
52
+ suggestions.push(...similar);
53
+ }
54
+ return {
55
+ valid,
56
+ invalid,
57
+ suggestions: [...new Set(suggestions)]
58
+ };
59
+ }
60
+ export function analyzeEntryDependencies(names, entries, registry, lockfile, lockKey) {
61
+ const entryMap = createEntryMap(entries);
62
+ const componentDependencies = new Set();
63
+ const npmDependencies = new Set();
64
+ for (const entryName of names) {
65
+ const entry = entryMap.get(entryName);
66
+ entry?.dependencies?.local?.forEach((dep) => componentDependencies.add(dep));
67
+ entry?.dependencies?.npm?.forEach((dep) => npmDependencies.add(dep));
68
+ }
69
+ const componentDependencyList = Array.from(componentDependencies);
70
+ const componentAnalysis = componentDependencyList.length > 0
71
+ ? analyzeDependencies(componentDependencyList, registry, lockfile)
72
+ : {
73
+ components: [],
74
+ dependencies: new Set(),
75
+ npmDependencies: new Set(),
76
+ conflicts: [],
77
+ totalToInstall: 0
78
+ };
79
+ componentAnalysis.npmDependencies.forEach((dep) => npmDependencies.add(dep));
80
+ const entryConflicts = names.filter((entryName) => lockfile[lockKey][entryName]);
81
+ const componentConflicts = componentAnalysis.conflicts;
82
+ const conflicts = new Set([
83
+ ...entryConflicts,
84
+ ...componentConflicts
85
+ ]);
86
+ const totalTargets = names.length + componentAnalysis.components.length;
87
+ const totalToInstall = Math.max(0, totalTargets - conflicts.size);
88
+ return {
89
+ entries: names,
90
+ componentDependencies: componentAnalysis.components,
91
+ npmDependencies,
92
+ conflicts: Array.from(conflicts),
93
+ totalTargets,
94
+ totalToInstall
95
+ };
96
+ }
97
+ export async function confirmOverwrite(entryPlural) {
98
+ const { overwrite } = await prompts({
99
+ type: "confirm",
100
+ name: "overwrite",
101
+ message: `Overwrite existing ${entryPlural}?`,
102
+ initial: false
103
+ });
104
+ return overwrite;
105
+ }
106
+ export function displayInstallationPlan(analysis, options, labels) {
107
+ const entryLabel = capitalize(labels.entryPlural);
108
+ console.log("\n" + chalk.bold("Installation Plan:"));
109
+ console.log(chalk.gray("\u00c4".repeat(50)));
110
+ console.log(`${chalk.cyan(`${entryLabel} to install:`)} ${chalk.white(analysis.entries.length)}`);
111
+ if (analysis.componentDependencies.length > 0) {
112
+ console.log(`${chalk.cyan("Component dependencies:")} ${chalk.white(analysis.componentDependencies.length)}`);
113
+ console.log(chalk.gray(` ${analysis.componentDependencies.join(", ")}`));
114
+ }
115
+ if (analysis.npmDependencies.size > 0) {
116
+ console.log(`${chalk.cyan("NPM packages required:")} ${chalk.white(analysis.npmDependencies.size)}`);
117
+ console.log(chalk.gray(` ${Array.from(analysis.npmDependencies).join(", ")}`));
118
+ }
119
+ if (analysis.conflicts.length > 0 && !options.force) {
120
+ console.log(`${chalk.yellow("Conflicts detected:")} ${chalk.white(analysis.conflicts.length)}`);
121
+ console.log(chalk.gray(` ${analysis.conflicts.join(", ")}`));
122
+ }
123
+ console.log(chalk.gray("\u00c4".repeat(50)) + "\n");
124
+ }
125
+ export function displayResults(result, options, labels) {
126
+ const { dependencies, entries } = result;
127
+ console.log("\n" + chalk.bold("Installation Results:"));
128
+ console.log(chalk.gray("\u00c4".repeat(50)));
129
+ if (dependencies.installed.length > 0) {
130
+ console.log(chalk.green(`\u00fb Installed component dependencies (${dependencies.installed.length}):`));
131
+ dependencies.installed.forEach((name) => console.log(chalk.gray(` \u0007 ${name}`)));
132
+ }
133
+ if (dependencies.skipped.length > 0 && !options.force) {
134
+ console.log(chalk.yellow(`? Skipped component dependencies (${dependencies.skipped.length}):`));
135
+ dependencies.skipped.forEach((name) => console.log(chalk.gray(` \u0007 ${name} (already exists)`)));
136
+ }
137
+ if (dependencies.failed.length > 0) {
138
+ console.log(chalk.red(`? Failed component dependencies (${dependencies.failed.length}):`));
139
+ dependencies.failed.forEach((name) => console.log(chalk.gray(` \u0007 ${name}`)));
140
+ }
141
+ if (entries.installed.length > 0) {
142
+ console.log(chalk.green(`\u00fb Installed ${labels.entryPlural} (${entries.installed.length}):`));
143
+ entries.installed.forEach((name) => console.log(chalk.gray(` \u0007 ${name}`)));
144
+ }
145
+ if (entries.skipped.length > 0 && !options.force) {
146
+ console.log(chalk.yellow(`? Skipped ${labels.entryPlural} (${entries.skipped.length}):`));
147
+ entries.skipped.forEach((name) => console.log(chalk.gray(` \u0007 ${name} (already exists)`)));
148
+ }
149
+ if (entries.failed.length > 0) {
150
+ console.log(chalk.red(`? Failed ${labels.entryPlural} (${entries.failed.length}):`));
151
+ entries.failed.forEach((name) => console.log(chalk.gray(` \u0007 ${name}`)));
152
+ }
153
+ console.log(chalk.gray("\u00c4".repeat(50)));
154
+ if (entries.installed.length > 0) {
155
+ const label = entries.installed.length === 1 ? labels.entrySingular : labels.entryPlural;
156
+ console.log(chalk.green.bold(`\n\u00fb Successfully installed ${entries.installed.length} ${label}!`));
157
+ }
158
+ console.log();
159
+ }
160
+ export async function installEntries(entries, names, lockEntries, options) {
161
+ const installed = [];
162
+ const skipped = [];
163
+ const failed = [];
164
+ const npmDependencies = new Set();
165
+ let currentIndex = 0;
166
+ const total = names.length;
167
+ for (const name of names) {
168
+ currentIndex += 1;
169
+ try {
170
+ if (options.spinner) {
171
+ options.spinner.text = `Installing ${name} (${currentIndex}/${total})...`;
172
+ }
173
+ const result = await installRegistryEntries({
174
+ cwd: options.cwd,
175
+ config: options.config,
176
+ entries,
177
+ names: [name],
178
+ lockEntries,
179
+ force: options.force,
180
+ itemLabel: options.itemLabel
181
+ });
182
+ if (result.installed.length > 0) {
183
+ installed.push(...result.installed);
184
+ }
185
+ if (result.skipped.length > 0) {
186
+ skipped.push(...result.skipped);
187
+ }
188
+ result.npmDependencies.forEach((dep) => npmDependencies.add(dep));
189
+ }
190
+ catch (error) {
191
+ failed.push(name);
192
+ logger.error(`Failed to install ${options.itemLabel} ${name}: ${error.message}`);
193
+ }
194
+ }
195
+ return {
196
+ installed,
197
+ skipped,
198
+ failed,
199
+ npmDependencies
200
+ };
201
+ }
202
+ export function createEmptyResult() {
203
+ return {
204
+ installed: [],
205
+ skipped: [],
206
+ failed: [],
207
+ npmDependencies: new Set()
208
+ };
209
+ }
210
+ //# sourceMappingURL=add-collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-collection.js","sourceRoot":"","sources":["../../../src/commands/shared/add-collection.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { Command } from "commander";
3
3
  import { createRequire } from "node:module";
4
4
  import { addCommand } from "./commands/add.js";
5
+ import { addSectionCommand } from "./commands/add-section.js";
5
6
  import { initCommand } from "./commands/init.js";
6
7
  const require = createRequire(import.meta.url);
7
8
  const packageJson = require("../package.json");
@@ -13,7 +14,7 @@ const program = new Command()
13
14
  .version(packageJson.version ?? "0.0.0", "-v, --version", "display version");
14
15
  program.addCommand(initCommand);
15
16
  program.addCommand(addCommand);
16
- // program.addCommand(addSectionCommand)
17
+ program.addCommand(addSectionCommand);
17
18
  // program.addCommand(addWrapperCommand)
18
19
  // program.addCommand(buildCommand)
19
20
  // program.addCommand(removeCommand)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAK9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAQhD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAyB,CAAA;AAEtE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE5C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,sBAAsB,CAAC;KACnC,OAAO,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAA;AAE9E,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AAC9B,wCAAwC;AACxC,wCAAwC;AACxC,mCAAmC;AACnC,oCAAoC;AACpC,2CAA2C;AAC3C,2CAA2C;AAC3C,kCAAkC;AAClC,0CAA0C;AAC1C,0CAA0C;AAC1C,oCAAoC;AAEpC,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAI7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAQhD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAyB,CAAA;AAEtE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAE5C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,sBAAsB,CAAC;KACnC,OAAO,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAA;AAE9E,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;AAC9B,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;AACrC,wCAAwC;AACxC,mCAAmC;AACnC,oCAAoC;AACpC,2CAA2C;AAC3C,2CAA2C;AAC3C,kCAAkC;AAClC,0CAA0C;AAC1C,0CAA0C;AAC1C,oCAAoC;AAEpC,OAAO,CAAC,KAAK,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trix-ui",
3
- "version": "0.1.9",
3
+ "version": "0.2.0",
4
4
  "description": "Lite UI CLI, registry tooling, and templates.",
5
5
  "license": "MIT",
6
6
  "type": "module",