trix-ui 0.2.8 → 0.2.10

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 (204) hide show
  1. package/dist/__tests__/contracts/registry.test.d.ts +1 -0
  2. package/dist/__tests__/contracts/registry.test.js +42 -0
  3. package/dist/__tests__/contracts/registry.test.js.map +1 -0
  4. package/dist/__tests__/e2e/cli.test.d.ts +1 -0
  5. package/dist/__tests__/e2e/cli.test.js +67 -0
  6. package/dist/__tests__/e2e/cli.test.js.map +1 -0
  7. package/dist/__tests__/helpers/fs.d.ts +5 -0
  8. package/dist/__tests__/helpers/fs.js +26 -0
  9. package/dist/__tests__/helpers/fs.js.map +1 -0
  10. package/dist/__tests__/integration/commands.integration.test.d.ts +1 -0
  11. package/dist/__tests__/integration/commands.integration.test.js +184 -0
  12. package/dist/__tests__/integration/commands.integration.test.js.map +1 -0
  13. package/dist/commands/__tests__/add-composite.test.d.ts +2 -0
  14. package/dist/commands/__tests__/add-composite.test.js +171 -0
  15. package/dist/commands/__tests__/add-composite.test.js.map +1 -0
  16. package/dist/commands/__tests__/add-entry.mocks.d.ts +23 -0
  17. package/dist/commands/__tests__/add-entry.mocks.js +64 -0
  18. package/dist/commands/__tests__/add-entry.mocks.js.map +1 -0
  19. package/dist/commands/__tests__/add-section.test.d.ts +2 -0
  20. package/dist/commands/__tests__/add-section.test.js +191 -0
  21. package/dist/commands/__tests__/add-section.test.js.map +1 -0
  22. package/dist/commands/__tests__/add-wrapper.test.d.ts +2 -0
  23. package/dist/commands/__tests__/add-wrapper.test.js +171 -0
  24. package/dist/commands/__tests__/add-wrapper.test.js.map +1 -0
  25. package/dist/commands/__tests__/cli-mocks.d.ts +1 -0
  26. package/dist/commands/__tests__/cli-mocks.js +24 -0
  27. package/dist/commands/__tests__/cli-mocks.js.map +1 -0
  28. package/dist/commands/__tests__/doctor.mocks.d.ts +6 -0
  29. package/dist/commands/__tests__/doctor.mocks.js +20 -0
  30. package/dist/commands/__tests__/doctor.mocks.js.map +1 -0
  31. package/dist/commands/__tests__/doctor.test.d.ts +2 -0
  32. package/dist/commands/__tests__/doctor.test.js +80 -0
  33. package/dist/commands/__tests__/doctor.test.js.map +1 -0
  34. package/dist/commands/__tests__/list.mocks.d.ts +8 -0
  35. package/dist/commands/__tests__/list.mocks.js +20 -0
  36. package/dist/commands/__tests__/list.mocks.js.map +1 -0
  37. package/dist/commands/__tests__/list.test.d.ts +2 -0
  38. package/dist/commands/__tests__/list.test.js +60 -0
  39. package/dist/commands/__tests__/list.test.js.map +1 -0
  40. package/dist/commands/__tests__/remove.mocks.d.ts +9 -0
  41. package/dist/commands/__tests__/remove.mocks.js +26 -0
  42. package/dist/commands/__tests__/remove.mocks.js.map +1 -0
  43. package/dist/commands/__tests__/remove.test.d.ts +2 -0
  44. package/dist/commands/__tests__/remove.test.js +116 -0
  45. package/dist/commands/__tests__/remove.test.js.map +1 -0
  46. package/dist/commands/add/__tests__/add.mocks.d.ts +19 -19
  47. package/dist/commands/add/__tests__/add.mocks.js +59 -59
  48. package/dist/commands/add/__tests__/add.test.d.ts +2 -2
  49. package/dist/commands/add/__tests__/add.test.js +140 -140
  50. package/dist/commands/add/analysis.d.ts +4 -4
  51. package/dist/commands/add/analysis.js +56 -56
  52. package/dist/commands/add/command.d.ts +2 -2
  53. package/dist/commands/add/command.js +202 -202
  54. package/dist/commands/add/config.d.ts +2 -2
  55. package/dist/commands/add/config.js +11 -11
  56. package/dist/commands/add/install.d.ts +27 -27
  57. package/dist/commands/add/install.js +80 -80
  58. package/dist/commands/add/package-manager.d.ts +1 -1
  59. package/dist/commands/add/package-manager.js +4 -4
  60. package/dist/commands/add/project-files.d.ts +2 -2
  61. package/dist/commands/add/project-files.js +17 -17
  62. package/dist/commands/add/prompts.d.ts +3 -3
  63. package/dist/commands/add/prompts.js +28 -28
  64. package/dist/commands/add/registry.d.ts +4 -4
  65. package/dist/commands/add/registry.js +6 -6
  66. package/dist/commands/add/types.d.ts +33 -33
  67. package/dist/commands/add/types.js +1 -1
  68. package/dist/commands/add/ui.d.ts +4 -4
  69. package/dist/commands/add/ui.js +55 -55
  70. package/dist/commands/add/validation.d.ts +3 -3
  71. package/dist/commands/add/validation.js +30 -30
  72. package/dist/commands/add-collection.d.ts +1 -1
  73. package/dist/commands/add-collection.js +1 -1
  74. package/dist/commands/add-composite.d.ts +2 -2
  75. package/dist/commands/add-composite.js +201 -201
  76. package/dist/commands/add-section.d.ts +2 -2
  77. package/dist/commands/add-section.js +201 -201
  78. package/dist/commands/add-wrapper.d.ts +2 -2
  79. package/dist/commands/add-wrapper.js +201 -201
  80. package/dist/commands/add.d.ts +1 -1
  81. package/dist/commands/add.js +1 -1
  82. package/dist/commands/build.d.ts +2 -2
  83. package/dist/commands/doctor.d.ts +2 -2
  84. package/dist/commands/doctor.js +67 -67
  85. package/dist/commands/init/__tests__/init.mocks.d.ts +24 -0
  86. package/dist/commands/init/__tests__/init.mocks.js +84 -0
  87. package/dist/commands/init/__tests__/init.mocks.js.map +1 -0
  88. package/dist/commands/init/__tests__/init.test.d.ts +2 -0
  89. package/dist/commands/init/__tests__/init.test.js +283 -0
  90. package/dist/commands/init/__tests__/init.test.js.map +1 -0
  91. package/dist/commands/init/__tests__/tailwind.test.d.ts +1 -0
  92. package/dist/commands/init/__tests__/tailwind.test.js +56 -0
  93. package/dist/commands/init/__tests__/tailwind.test.js.map +1 -0
  94. package/dist/commands/init/__tests__/tsconfig.test.d.ts +1 -0
  95. package/dist/commands/init/__tests__/tsconfig.test.js +108 -0
  96. package/dist/commands/init/__tests__/tsconfig.test.js.map +1 -0
  97. package/dist/commands/init/__tests__/vite.test.d.ts +1 -0
  98. package/dist/commands/init/__tests__/vite.test.js +66 -0
  99. package/dist/commands/init/__tests__/vite.test.js.map +1 -0
  100. package/dist/commands/init/command.d.ts +2 -2
  101. package/dist/commands/init/command.js +114 -114
  102. package/dist/commands/init/config.d.ts +2 -2
  103. package/dist/commands/init/config.js +25 -25
  104. package/dist/commands/init/constants.d.ts +3 -3
  105. package/dist/commands/init/constants.js +105 -105
  106. package/dist/commands/init/dependencies.d.ts +5 -5
  107. package/dist/commands/init/dependencies.js +52 -52
  108. package/dist/commands/init/filesystem.d.ts +1 -1
  109. package/dist/commands/init/filesystem.js +10 -10
  110. package/dist/commands/init/lockfile.d.ts +1 -1
  111. package/dist/commands/init/lockfile.js +1 -1
  112. package/dist/commands/init/package-json.d.ts +6 -6
  113. package/dist/commands/init/package-json.js +18 -18
  114. package/dist/commands/init/project-files.d.ts +8 -0
  115. package/dist/commands/init/project-files.js +37 -0
  116. package/dist/commands/init/project-files.js.map +1 -0
  117. package/dist/commands/init/project.d.ts +3 -3
  118. package/dist/commands/init/project.js +97 -97
  119. package/dist/commands/init/style-imports.d.ts +9 -0
  120. package/dist/commands/init/style-imports.js +218 -0
  121. package/dist/commands/init/style-imports.js.map +1 -0
  122. package/dist/commands/init/tailwind.d.ts +3 -3
  123. package/dist/commands/init/tailwind.js +34 -34
  124. package/dist/commands/init/templates.d.ts +3 -3
  125. package/dist/commands/init/templates.js +15 -15
  126. package/dist/commands/init/tsconfig.d.ts +2 -2
  127. package/dist/commands/init/tsconfig.js +273 -273
  128. package/dist/commands/init/types.d.ts +33 -33
  129. package/dist/commands/init/types.js +1 -1
  130. package/dist/commands/init/ui.d.ts +3 -3
  131. package/dist/commands/init/ui.js +33 -33
  132. package/dist/commands/init/vite.d.ts +23 -0
  133. package/dist/commands/init/vite.js +347 -0
  134. package/dist/commands/init/vite.js.map +1 -0
  135. package/dist/commands/init.d.ts +1 -1
  136. package/dist/commands/init.js +1 -1
  137. package/dist/commands/list.d.ts +2 -2
  138. package/dist/commands/list.js +62 -62
  139. package/dist/commands/remove.d.ts +2 -2
  140. package/dist/commands/remove.js +93 -93
  141. package/dist/commands/shared/add-collection.d.ts +50 -50
  142. package/dist/commands/shared/add-collection.js +206 -206
  143. package/dist/commands/shared/list-entries.d.ts +6 -6
  144. package/dist/commands/shared/list-entries.js +12 -12
  145. package/dist/commands/shared/name-utils.d.ts +1 -1
  146. package/dist/commands/shared/name-utils.js +13 -13
  147. package/dist/commands/shared/remove-entries.d.ts +16 -16
  148. package/dist/commands/shared/remove-entries.js +41 -41
  149. package/dist/icons/index.d.ts +1 -1
  150. package/dist/icons/index.js +1 -1
  151. package/dist/icons/libraries.d.ts +37 -37
  152. package/dist/icons/libraries.js +34 -34
  153. package/dist/index.d.ts +2 -2
  154. package/dist/index.js +30 -30
  155. package/dist/lib/__tests__/config.test.d.ts +1 -0
  156. package/dist/lib/__tests__/config.test.js +49 -0
  157. package/dist/lib/__tests__/config.test.js.map +1 -0
  158. package/dist/lib/__tests__/install.test.d.ts +1 -0
  159. package/dist/lib/__tests__/install.test.js +149 -0
  160. package/dist/lib/__tests__/install.test.js.map +1 -0
  161. package/dist/lib/__tests__/lockfile.test.d.ts +1 -0
  162. package/dist/lib/__tests__/lockfile.test.js +89 -0
  163. package/dist/lib/__tests__/lockfile.test.js.map +1 -0
  164. package/dist/lib/__tests__/paths.test.d.ts +1 -0
  165. package/dist/lib/__tests__/paths.test.js +39 -0
  166. package/dist/lib/__tests__/paths.test.js.map +1 -0
  167. package/dist/lib/__tests__/registry.test.d.ts +1 -0
  168. package/dist/lib/__tests__/registry.test.js +76 -0
  169. package/dist/lib/__tests__/registry.test.js.map +1 -0
  170. package/dist/lib/config.d.ts +45 -45
  171. package/dist/lib/config.js +97 -97
  172. package/dist/lib/fs.d.ts +76 -76
  173. package/dist/lib/fs.js +302 -302
  174. package/dist/lib/highlighter.d.ts +6 -6
  175. package/dist/lib/highlighter.js +7 -7
  176. package/dist/lib/install.d.ts +19 -19
  177. package/dist/lib/install.js +55 -55
  178. package/dist/lib/lockfile.d.ts +63 -63
  179. package/dist/lib/lockfile.js +173 -173
  180. package/dist/lib/logger.d.ts +8 -8
  181. package/dist/lib/logger.js +41 -41
  182. package/dist/lib/paths.d.ts +14 -14
  183. package/dist/lib/paths.js +31 -31
  184. package/dist/lib/registry.d.ts +35 -35
  185. package/dist/lib/registry.js +180 -180
  186. package/dist/schema/index.d.ts +1128 -1128
  187. package/dist/schema/index.js +238 -238
  188. package/dist/styles/create-style-map.d.ts +4 -4
  189. package/dist/styles/create-style-map.js +68 -68
  190. package/dist/styles/transform-style-map.d.ts +3 -3
  191. package/dist/styles/transform-style-map.js +428 -428
  192. package/dist/styles/transform.d.ts +10 -10
  193. package/dist/styles/transform.js +15 -15
  194. package/dist/utils/index.d.ts +6 -6
  195. package/dist/utils/index.js +5 -5
  196. package/dist/utils/transformers/transform-icons.d.ts +2 -2
  197. package/dist/utils/transformers/transform-icons.js +164 -164
  198. package/dist/utils/transformers/transform-menu.d.ts +2 -2
  199. package/dist/utils/transformers/transform-menu.js +39 -39
  200. package/dist/utils/transformers/transform-render.d.ts +2 -2
  201. package/dist/utils/transformers/transform-render.js +97 -97
  202. package/dist/utils/transformers/types.d.ts +14 -14
  203. package/dist/utils/transformers/types.js +1 -1
  204. package/package.json +1 -1
@@ -1,202 +1,202 @@
1
- import path from "node:path";
2
- import chalk from "chalk";
3
- import { Command } from "commander";
4
- import ora from "ora";
5
- import { loadConfig } from "../lib/config.js";
6
- import { directoryExists } from "../lib/fs.js";
7
- import { loadLockfile, saveLockfile } from "../lib/lockfile.js";
8
- import { logger } from "../lib/logger.js";
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
- };
22
- export const addSectionCommand = new Command("add-section")
23
- .description("Add prebuilt sections to your project")
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)
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;
34
- try {
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...");
47
- const registry = await loadRegistry(config, cwd);
48
- const lockfile = await loadLockfile(cwd);
49
- spinner?.succeed("Registry and lockfile loaded");
50
- const availableSections = getRegistrySections(registry);
51
- if (availableSections.length === 0) {
52
- logger.error("No sections available in the registry.");
53
- process.exit(1);
54
- }
55
- let requestedSections = normalizeEntryNames(sections);
56
- if (requestedSections.length === 0) {
57
- logger.error("No section names provided.");
58
- process.exit(1);
59
- }
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;
74
- }
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;
87
- }
88
- spinner?.start("Analyzing dependencies...");
89
- const analysis = analyzeEntryDependencies(validation.valid, availableSections, registry, lockfile, "sections");
90
- spinner?.stop();
91
- if (analysis.missingDependencies.length > 0) {
92
- logger.error("Registry is missing required component dependencies:");
93
- analysis.missingDependencies.forEach((name) => logger.error(` \u0007 ${name}`));
94
- process.exit(1);
95
- return;
96
- }
97
- if (shouldLog) {
98
- displayInstallationPlan(analysis, options, SECTION_LABELS);
99
- }
100
- let forceInstall = Boolean(options.force);
101
- if (analysis.conflicts.length > 0 && !forceInstall) {
102
- if (shouldLog) {
103
- logger.warn("The following sections or dependencies already exist:");
104
- analysis.conflicts.forEach((name) => logger.warn(` \u0007 ${name}`));
105
- }
106
- if (options.yes) {
107
- forceInstall = true;
108
- }
109
- else if (shouldPrompt) {
110
- const shouldOverwrite = await confirmOverwrite(SECTION_LABELS.entryPlural);
111
- if (!shouldOverwrite) {
112
- logger.info("Installation cancelled");
113
- process.exit(0);
114
- return;
115
- }
116
- forceInstall = true;
117
- }
118
- }
119
- const installCount = forceInstall
120
- ? analysis.totalTargets
121
- : analysis.totalToInstall;
122
- if (shouldPrompt && installCount > 0) {
123
- const label = analysis.componentDependencies.length > 0
124
- ? `${installCount} item${installCount > 1 ? "s" : ""}`
125
- : `${installCount} ${SECTION_LABELS.entrySingular}${installCount > 1 ? "s" : ""}`;
126
- const shouldInstall = await confirmInstallation(label);
127
- if (!shouldInstall) {
128
- logger.info("Installation cancelled");
129
- process.exit(0);
130
- return;
131
- }
132
- }
133
- spinner?.start("Verifying project setup...");
134
- await ensureProjectFiles(cwd, config);
135
- spinner?.succeed("Project setup verified");
136
- const dependenciesResult = analysis.componentDependencies.length > 0
137
- ? await installEntries(registry.components, analysis.componentDependencies, lockfile.components, {
138
- cwd,
139
- config,
140
- force: forceInstall,
141
- spinner,
142
- itemLabel: "component"
143
- })
144
- : createEmptyResult();
145
- const sectionsResult = await installEntries(availableSections, validation.valid, lockfile.sections, {
146
- cwd,
147
- config,
148
- force: forceInstall,
149
- spinner,
150
- itemLabel: "section"
151
- });
152
- const npmDependencies = new Set();
153
- dependenciesResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
154
- sectionsResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
155
- spinner?.start("Updating lockfile...");
156
- await saveLockfile(cwd, lockfile);
157
- spinner?.succeed("Lockfile updated");
158
- const combinedResult = {
159
- entries: sectionsResult,
160
- dependencies: dependenciesResult,
161
- npmDependencies,
162
- conflicts: analysis.conflicts
163
- };
164
- if (npmDependencies.size > 0 && !options.skipDeps) {
165
- const shouldInstallDeps = shouldPrompt
166
- ? await confirmDependencyInstallation(npmDependencies)
167
- : true;
168
- if (shouldInstallDeps) {
169
- await installNpmDependencies({
170
- cwd,
171
- dependencies: npmDependencies,
172
- spinner
173
- });
174
- }
175
- else {
176
- if (shouldLog) {
177
- await displayManualInstallInstructions(npmDependencies, cwd);
178
- }
179
- }
180
- }
181
- else if (npmDependencies.size > 0 && shouldLog) {
182
- await displayManualInstallInstructions(npmDependencies, cwd);
183
- }
184
- if (shouldLog) {
185
- displayResults(combinedResult, { ...options, force: forceInstall }, SECTION_LABELS);
186
- }
187
- if (sectionsResult.failed.length > 0 || dependenciesResult.failed.length > 0) {
188
- process.exit(1);
189
- return;
190
- }
191
- }
192
- catch (error) {
193
- spinner?.fail("Installation failed");
194
- logger.error(error.message);
195
- if (process.env.DEBUG) {
196
- console.error(error);
197
- }
198
- process.exit(1);
199
- return;
200
- }
201
- });
1
+ import path from "node:path";
2
+ import chalk from "chalk";
3
+ import { Command } from "commander";
4
+ import ora from "ora";
5
+ import { loadConfig } from "../lib/config.js";
6
+ import { directoryExists } from "../lib/fs.js";
7
+ import { loadLockfile, saveLockfile } from "../lib/lockfile.js";
8
+ import { logger } from "../lib/logger.js";
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
+ };
22
+ export const addSectionCommand = new Command("add-section")
23
+ .description("Add prebuilt sections to your project")
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)
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;
34
+ try {
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...");
47
+ const registry = await loadRegistry(config, cwd);
48
+ const lockfile = await loadLockfile(cwd);
49
+ spinner?.succeed("Registry and lockfile loaded");
50
+ const availableSections = getRegistrySections(registry);
51
+ if (availableSections.length === 0) {
52
+ logger.error("No sections available in the registry.");
53
+ process.exit(1);
54
+ }
55
+ let requestedSections = normalizeEntryNames(sections);
56
+ if (requestedSections.length === 0) {
57
+ logger.error("No section names provided.");
58
+ process.exit(1);
59
+ }
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;
74
+ }
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;
87
+ }
88
+ spinner?.start("Analyzing dependencies...");
89
+ const analysis = analyzeEntryDependencies(validation.valid, availableSections, registry, lockfile, "sections");
90
+ spinner?.stop();
91
+ if (analysis.missingDependencies.length > 0) {
92
+ logger.error("Registry is missing required component dependencies:");
93
+ analysis.missingDependencies.forEach((name) => logger.error(` \u0007 ${name}`));
94
+ process.exit(1);
95
+ return;
96
+ }
97
+ if (shouldLog) {
98
+ displayInstallationPlan(analysis, options, SECTION_LABELS);
99
+ }
100
+ let forceInstall = Boolean(options.force);
101
+ if (analysis.conflicts.length > 0 && !forceInstall) {
102
+ if (shouldLog) {
103
+ logger.warn("The following sections or dependencies already exist:");
104
+ analysis.conflicts.forEach((name) => logger.warn(` \u0007 ${name}`));
105
+ }
106
+ if (options.yes) {
107
+ forceInstall = true;
108
+ }
109
+ else if (shouldPrompt) {
110
+ const shouldOverwrite = await confirmOverwrite(SECTION_LABELS.entryPlural);
111
+ if (!shouldOverwrite) {
112
+ logger.info("Installation cancelled");
113
+ process.exit(0);
114
+ return;
115
+ }
116
+ forceInstall = true;
117
+ }
118
+ }
119
+ const installCount = forceInstall
120
+ ? analysis.totalTargets
121
+ : analysis.totalToInstall;
122
+ if (shouldPrompt && installCount > 0) {
123
+ const label = analysis.componentDependencies.length > 0
124
+ ? `${installCount} item${installCount > 1 ? "s" : ""}`
125
+ : `${installCount} ${SECTION_LABELS.entrySingular}${installCount > 1 ? "s" : ""}`;
126
+ const shouldInstall = await confirmInstallation(label);
127
+ if (!shouldInstall) {
128
+ logger.info("Installation cancelled");
129
+ process.exit(0);
130
+ return;
131
+ }
132
+ }
133
+ spinner?.start("Verifying project setup...");
134
+ await ensureProjectFiles(cwd, config);
135
+ spinner?.succeed("Project setup verified");
136
+ const dependenciesResult = analysis.componentDependencies.length > 0
137
+ ? await installEntries(registry.components, analysis.componentDependencies, lockfile.components, {
138
+ cwd,
139
+ config,
140
+ force: forceInstall,
141
+ spinner,
142
+ itemLabel: "component"
143
+ })
144
+ : createEmptyResult();
145
+ const sectionsResult = await installEntries(availableSections, validation.valid, lockfile.sections, {
146
+ cwd,
147
+ config,
148
+ force: forceInstall,
149
+ spinner,
150
+ itemLabel: "section"
151
+ });
152
+ const npmDependencies = new Set();
153
+ dependenciesResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
154
+ sectionsResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
155
+ spinner?.start("Updating lockfile...");
156
+ await saveLockfile(cwd, lockfile);
157
+ spinner?.succeed("Lockfile updated");
158
+ const combinedResult = {
159
+ entries: sectionsResult,
160
+ dependencies: dependenciesResult,
161
+ npmDependencies,
162
+ conflicts: analysis.conflicts
163
+ };
164
+ if (npmDependencies.size > 0 && !options.skipDeps) {
165
+ const shouldInstallDeps = shouldPrompt
166
+ ? await confirmDependencyInstallation(npmDependencies)
167
+ : true;
168
+ if (shouldInstallDeps) {
169
+ await installNpmDependencies({
170
+ cwd,
171
+ dependencies: npmDependencies,
172
+ spinner
173
+ });
174
+ }
175
+ else {
176
+ if (shouldLog) {
177
+ await displayManualInstallInstructions(npmDependencies, cwd);
178
+ }
179
+ }
180
+ }
181
+ else if (npmDependencies.size > 0 && shouldLog) {
182
+ await displayManualInstallInstructions(npmDependencies, cwd);
183
+ }
184
+ if (shouldLog) {
185
+ displayResults(combinedResult, { ...options, force: forceInstall }, SECTION_LABELS);
186
+ }
187
+ if (sectionsResult.failed.length > 0 || dependenciesResult.failed.length > 0) {
188
+ process.exit(1);
189
+ return;
190
+ }
191
+ }
192
+ catch (error) {
193
+ spinner?.fail("Installation failed");
194
+ logger.error(error.message);
195
+ if (process.env.DEBUG) {
196
+ console.error(error);
197
+ }
198
+ process.exit(1);
199
+ return;
200
+ }
201
+ });
202
202
  //# sourceMappingURL=add-section.js.map
@@ -1,2 +1,2 @@
1
- import { Command } from "commander";
2
- export declare const addWrapperCommand: Command;
1
+ import { Command } from "commander";
2
+ export declare const addWrapperCommand: Command;