trix-ui 0.2.7 → 0.2.9

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 (206) 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 +68 -68
  205. package/templates/lib/utils.js +7 -0
  206. package/templates/styles/globals.css +85 -67
@@ -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 { getRegistryComposites, 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
- const COMPOSITE_LABELS = {
16
- entrySingular: "composite",
17
- entryPlural: "composites"
18
- };
19
- function toAddConfig(config) {
20
- return config;
21
- }
22
- export const addCompositeCommand = new Command("add-composite")
23
- .description("Add prebuilt composites to your project")
24
- .argument("<composites...>", "composite 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 composites")
29
- .option("--skip-deps", "skip dependency installation", false)
30
- .action(async (composites, 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 composites");
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 availableComposites = getRegistryComposites(registry);
51
- if (availableComposites.length === 0) {
52
- logger.error("No composites available in the registry.");
53
- process.exit(1);
54
- }
55
- let requestedComposites = normalizeEntryNames(composites);
56
- if (requestedComposites.length === 0) {
57
- logger.error("No composite names provided.");
58
- process.exit(1);
59
- }
60
- if (requestedComposites.includes("all")) {
61
- const allComposites = getEntryNames(availableComposites);
62
- if (shouldLog) {
63
- console.log(chalk.yellow(`\nThis will install ${allComposites.length} composites:`));
64
- console.log(chalk.gray(allComposites.join(", ")));
65
- }
66
- const shouldContinue = shouldPrompt
67
- ? await confirmInstallation(`all ${allComposites.length} composites`)
68
- : true;
69
- if (!shouldContinue) {
70
- logger.info("Installation cancelled");
71
- process.exit(0);
72
- }
73
- requestedComposites = allComposites;
74
- }
75
- spinner?.start("Validating composites...");
76
- const validation = validateEntries(requestedComposites, availableComposites);
77
- spinner?.stop();
78
- if (validation.invalid.length > 0) {
79
- logger.error("The following composites 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, availableComposites, registry, lockfile, "composites");
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, COMPOSITE_LABELS);
99
- }
100
- let forceInstall = Boolean(options.force);
101
- if (analysis.conflicts.length > 0 && !forceInstall) {
102
- if (shouldLog) {
103
- logger.warn("The following composites 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(COMPOSITE_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} ${COMPOSITE_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 compositesResult = await installEntries(availableComposites, validation.valid, lockfile.composites, {
146
- cwd,
147
- config,
148
- force: forceInstall,
149
- spinner,
150
- itemLabel: "composite"
151
- });
152
- const npmDependencies = new Set();
153
- dependenciesResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
154
- compositesResult.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: compositesResult,
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 }, COMPOSITE_LABELS);
186
- }
187
- if (compositesResult.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 { getRegistryComposites, 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
+ const COMPOSITE_LABELS = {
16
+ entrySingular: "composite",
17
+ entryPlural: "composites"
18
+ };
19
+ function toAddConfig(config) {
20
+ return config;
21
+ }
22
+ export const addCompositeCommand = new Command("add-composite")
23
+ .description("Add prebuilt composites to your project")
24
+ .argument("<composites...>", "composite 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 composites")
29
+ .option("--skip-deps", "skip dependency installation", false)
30
+ .action(async (composites, 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 composites");
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 availableComposites = getRegistryComposites(registry);
51
+ if (availableComposites.length === 0) {
52
+ logger.error("No composites available in the registry.");
53
+ process.exit(1);
54
+ }
55
+ let requestedComposites = normalizeEntryNames(composites);
56
+ if (requestedComposites.length === 0) {
57
+ logger.error("No composite names provided.");
58
+ process.exit(1);
59
+ }
60
+ if (requestedComposites.includes("all")) {
61
+ const allComposites = getEntryNames(availableComposites);
62
+ if (shouldLog) {
63
+ console.log(chalk.yellow(`\nThis will install ${allComposites.length} composites:`));
64
+ console.log(chalk.gray(allComposites.join(", ")));
65
+ }
66
+ const shouldContinue = shouldPrompt
67
+ ? await confirmInstallation(`all ${allComposites.length} composites`)
68
+ : true;
69
+ if (!shouldContinue) {
70
+ logger.info("Installation cancelled");
71
+ process.exit(0);
72
+ }
73
+ requestedComposites = allComposites;
74
+ }
75
+ spinner?.start("Validating composites...");
76
+ const validation = validateEntries(requestedComposites, availableComposites);
77
+ spinner?.stop();
78
+ if (validation.invalid.length > 0) {
79
+ logger.error("The following composites 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, availableComposites, registry, lockfile, "composites");
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, COMPOSITE_LABELS);
99
+ }
100
+ let forceInstall = Boolean(options.force);
101
+ if (analysis.conflicts.length > 0 && !forceInstall) {
102
+ if (shouldLog) {
103
+ logger.warn("The following composites 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(COMPOSITE_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} ${COMPOSITE_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 compositesResult = await installEntries(availableComposites, validation.valid, lockfile.composites, {
146
+ cwd,
147
+ config,
148
+ force: forceInstall,
149
+ spinner,
150
+ itemLabel: "composite"
151
+ });
152
+ const npmDependencies = new Set();
153
+ dependenciesResult.npmDependencies.forEach((dep) => npmDependencies.add(dep));
154
+ compositesResult.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: compositesResult,
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 }, COMPOSITE_LABELS);
186
+ }
187
+ if (compositesResult.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-composite.js.map
@@ -1,2 +1,2 @@
1
- import { Command } from "commander";
2
- export declare const addSectionCommand: Command;
1
+ import { Command } from "commander";
2
+ export declare const addSectionCommand: Command;