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
@@ -0,0 +1,84 @@
1
+ import { vi } from "vitest";
2
+ // Config and filesystem helpers.
3
+ export const getConfigPath = vi.fn();
4
+ export const writeConfig = vi.fn();
5
+ export const fileExists = vi.fn();
6
+ // Lockfile helpers.
7
+ export const lockfileExists = vi.fn();
8
+ export const saveLockfile = vi.fn();
9
+ export const createEmptyLockfile = vi.fn();
10
+ // Init composition and dependency helpers.
11
+ export const createConfig = vi.fn();
12
+ export const checkDependencies = vi.fn();
13
+ export const confirmInstallation = vi.fn();
14
+ export const installDependencies = vi.fn();
15
+ // Project detection and validation.
16
+ export const directoryExists = vi.fn();
17
+ export const detectProject = vi.fn();
18
+ export const validateProject = vi.fn();
19
+ // Tailwind/TS setup.
20
+ export const setupGlobalStyles = vi.fn();
21
+ export const setupTailwind = vi.fn();
22
+ export const setupTypeScriptPaths = vi.fn();
23
+ export const setupJavaScriptPaths = vi.fn();
24
+ export const ensureGlobalStyleImport = vi.fn();
25
+ export const validateViteAliasSupport = vi.fn();
26
+ export const ensureInitProjectFiles = vi.fn();
27
+ // UI messaging.
28
+ export const displayProjectInfo = vi.fn();
29
+ export const displaySuccessMessage = vi.fn();
30
+ // Prompt handling.
31
+ export const promptsMock = vi.fn();
32
+ // Wire mocks to modules used by init command.
33
+ vi.mock("../../../lib/config.js", () => ({
34
+ getConfigPath,
35
+ writeConfig
36
+ }));
37
+ vi.mock("../../../lib/fs.js", () => ({
38
+ fileExists
39
+ }));
40
+ vi.mock("../../../lib/lockfile.js", () => ({
41
+ lockfileExists,
42
+ saveLockfile,
43
+ createEmptyLockfile
44
+ }));
45
+ vi.mock("../config.js", () => ({
46
+ createConfig
47
+ }));
48
+ vi.mock("../dependencies.js", () => ({
49
+ checkDependencies,
50
+ confirmInstallation,
51
+ installDependencies
52
+ }));
53
+ vi.mock("../filesystem.js", () => ({
54
+ directoryExists
55
+ }));
56
+ vi.mock("../project.js", () => ({
57
+ detectProject,
58
+ validateProject
59
+ }));
60
+ vi.mock("../tailwind.js", () => ({
61
+ setupGlobalStyles,
62
+ setupTailwind
63
+ }));
64
+ vi.mock("../tsconfig.js", () => ({
65
+ setupTypeScriptPaths,
66
+ setupJavaScriptPaths
67
+ }));
68
+ vi.mock("../style-imports.js", () => ({
69
+ ensureGlobalStyleImport
70
+ }));
71
+ vi.mock("../vite.js", () => ({
72
+ validateViteAliasSupport
73
+ }));
74
+ vi.mock("../project-files.js", () => ({
75
+ ensureInitProjectFiles
76
+ }));
77
+ vi.mock("../ui.js", () => ({
78
+ displayProjectInfo,
79
+ displaySuccessMessage
80
+ }));
81
+ vi.mock("prompts", () => ({
82
+ default: promptsMock
83
+ }));
84
+ //# sourceMappingURL=init.mocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.mocks.js","sourceRoot":"","sources":["../../../../src/commands/init/__tests__/init.mocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "../../__tests__/cli-mocks.js";
2
+ import "./init.mocks.js";
@@ -0,0 +1,283 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ // Load shared CLI mocks first so process.exit and logger are stubbed.
3
+ import "../../__tests__/cli-mocks.js";
4
+ // Register module mocks before importing the command under test.
5
+ import "./init.mocks.js";
6
+ import { checkDependencies, createEmptyLockfile, confirmInstallation, createConfig, detectProject, directoryExists, displayProjectInfo, displaySuccessMessage, ensureInitProjectFiles, ensureGlobalStyleImport, fileExists, getConfigPath, installDependencies, lockfileExists, promptsMock, saveLockfile, setupGlobalStyles, setupJavaScriptPaths, setupTailwind, setupTypeScriptPaths, validateViteAliasSupport, validateProject, writeConfig } from "./init.mocks.js";
7
+ // Init command reference populated per test to ensure clean module state.
8
+ let initCommand;
9
+ // Base project info used in multiple test cases.
10
+ const baseProjectInfo = {
11
+ framework: "react",
12
+ typescript: true,
13
+ tailwind: true,
14
+ packageManager: "npm",
15
+ srcDir: false,
16
+ appDir: false,
17
+ pagesDir: false,
18
+ hasComponents: false
19
+ };
20
+ // Base config used for expectation comparisons.
21
+ const baseConfig = {
22
+ typescript: true,
23
+ tailwind: true,
24
+ framework: "react",
25
+ barrel: false,
26
+ registry: { type: "bundled" },
27
+ paths: {
28
+ components: "components/ui",
29
+ sections: "components/sections",
30
+ wrappers: "components/wrappers",
31
+ composites: "components/composites",
32
+ utils: "lib/utils.ts",
33
+ styles: "globals.css"
34
+ }
35
+ };
36
+ describe("init command", () => {
37
+ beforeEach(async () => {
38
+ // Reset module cache so mocked imports are applied to a fresh command instance.
39
+ vi.resetModules();
40
+ // Reset all mocks to keep test cases isolated.
41
+ vi.resetAllMocks();
42
+ // Re-stub process.exit because restoreMocks resets spies between tests.
43
+ vi.spyOn(process, "exit").mockImplementation(() => undefined);
44
+ lockfileExists.mockResolvedValue(false);
45
+ createEmptyLockfile.mockReturnValue({
46
+ version: 1,
47
+ components: {},
48
+ sections: {},
49
+ wrappers: {},
50
+ composites: {},
51
+ updatedAt: ""
52
+ });
53
+ // Import the command after mocks are registered.
54
+ const mod = await import("../../init.js");
55
+ initCommand = mod.initCommand;
56
+ });
57
+ it("exits if directory does not exist", async () => {
58
+ // Arrange: simulate missing working directory.
59
+ directoryExists.mockResolvedValue(false);
60
+ // Act: run init command.
61
+ await initCommand.parseAsync(["node", "cli"]);
62
+ // Assert: process exits with failure.
63
+ expect(process.exit).toHaveBeenCalledWith(1);
64
+ });
65
+ it("exits when project validation fails", async () => {
66
+ // Arrange: project detected but validation fails.
67
+ directoryExists.mockResolvedValue(true);
68
+ detectProject.mockResolvedValue(baseProjectInfo);
69
+ validateProject.mockResolvedValue({
70
+ valid: false,
71
+ errors: ["missing package.json"],
72
+ warnings: []
73
+ });
74
+ // Act: run init command.
75
+ await initCommand.parseAsync(["node", "cli"]);
76
+ // Assert: exit with failure and no config written.
77
+ expect(process.exit).toHaveBeenCalledWith(1);
78
+ expect(writeConfig).not.toHaveBeenCalled();
79
+ });
80
+ it("cancels when config exists and user declines overwrite", async () => {
81
+ // Arrange: config exists and user rejects overwrite.
82
+ directoryExists.mockResolvedValue(true);
83
+ detectProject.mockResolvedValue(baseProjectInfo);
84
+ validateProject.mockResolvedValue({
85
+ valid: true,
86
+ errors: [],
87
+ warnings: []
88
+ });
89
+ getConfigPath.mockReturnValue("C:\\project\\trix-ui.json");
90
+ fileExists.mockResolvedValue(true);
91
+ promptsMock.mockResolvedValue({ overwrite: false });
92
+ // Act: run init command.
93
+ await initCommand.parseAsync(["node", "cli"]);
94
+ // Assert: exit success (cancel) and no writes.
95
+ expect(process.exit).toHaveBeenCalledWith(0);
96
+ expect(writeConfig).not.toHaveBeenCalled();
97
+ expect(saveLockfile).not.toHaveBeenCalled();
98
+ });
99
+ it("overwrites config when --yes is provided", async () => {
100
+ directoryExists.mockResolvedValue(true);
101
+ detectProject.mockResolvedValue(baseProjectInfo);
102
+ validateProject.mockResolvedValue({
103
+ valid: true,
104
+ errors: [],
105
+ warnings: []
106
+ });
107
+ getConfigPath.mockReturnValue("C:\\project\\trix-ui.json");
108
+ fileExists.mockResolvedValue(true);
109
+ checkDependencies.mockResolvedValue({
110
+ required: [],
111
+ devDependencies: [],
112
+ missing: []
113
+ });
114
+ createConfig.mockReturnValue(baseConfig);
115
+ await initCommand.parseAsync([
116
+ "node",
117
+ "cli",
118
+ "--cwd",
119
+ "C:\\project",
120
+ "--yes"
121
+ ]);
122
+ expect(promptsMock).not.toHaveBeenCalled();
123
+ expect(writeConfig).toHaveBeenCalledWith("C:\\project", baseConfig, true);
124
+ });
125
+ it("fails silently when config exists and --silent is used without --force or --yes", async () => {
126
+ directoryExists.mockResolvedValue(true);
127
+ detectProject.mockResolvedValue(baseProjectInfo);
128
+ validateProject.mockResolvedValue({
129
+ valid: true,
130
+ errors: [],
131
+ warnings: []
132
+ });
133
+ getConfigPath.mockReturnValue("C:\\project\\trix-ui.json");
134
+ fileExists.mockResolvedValue(true);
135
+ await initCommand.parseAsync([
136
+ "node",
137
+ "cli",
138
+ "--cwd",
139
+ "C:\\project",
140
+ "--silent"
141
+ ]);
142
+ expect(promptsMock).not.toHaveBeenCalled();
143
+ expect(writeConfig).not.toHaveBeenCalled();
144
+ expect(process.exit).toHaveBeenCalledWith(1);
145
+ });
146
+ it("runs init flow with dependencies and typescript setup", async () => {
147
+ // Arrange: tailwind missing to trigger dependency install flow.
148
+ const projectInfo = {
149
+ ...baseProjectInfo,
150
+ tailwind: false
151
+ };
152
+ directoryExists.mockResolvedValue(true);
153
+ detectProject.mockResolvedValue(projectInfo);
154
+ validateProject.mockResolvedValue({
155
+ valid: true,
156
+ errors: [],
157
+ warnings: []
158
+ });
159
+ getConfigPath.mockReturnValue("C:\\project\\trix-ui.json");
160
+ fileExists.mockResolvedValue(false);
161
+ checkDependencies.mockResolvedValue({
162
+ required: [],
163
+ devDependencies: ["tailwindcss"],
164
+ missing: ["tailwindcss"]
165
+ });
166
+ confirmInstallation.mockResolvedValue(true);
167
+ createConfig.mockReturnValue(baseConfig);
168
+ // Act: run init command with explicit cwd.
169
+ await initCommand.parseAsync(["node", "cli", "--cwd", "C:\\project"]);
170
+ // Assert: setup steps and writes executed.
171
+ expect(setupTailwind).toHaveBeenCalled();
172
+ expect(createConfig).toHaveBeenCalledWith(projectInfo, expect.objectContaining({ cwd: "C:\\project" }));
173
+ expect(writeConfig).toHaveBeenCalledWith("C:\\project", baseConfig, false);
174
+ expect(ensureInitProjectFiles).toHaveBeenCalledWith("C:\\project", baseConfig, projectInfo, expect.objectContaining({ cwd: "C:\\project" }));
175
+ expect(setupGlobalStyles).toHaveBeenCalledWith("C:\\project", baseConfig, expect.objectContaining({ cwd: "C:\\project" }));
176
+ expect(ensureGlobalStyleImport).toHaveBeenCalled();
177
+ expect(installDependencies).toHaveBeenCalled();
178
+ expect(setupTypeScriptPaths).toHaveBeenCalledWith("C:\\project", projectInfo);
179
+ // Assert: user-facing output displayed.
180
+ expect(displayProjectInfo).toHaveBeenCalled();
181
+ expect(displaySuccessMessage).toHaveBeenCalled();
182
+ expect(saveLockfile).toHaveBeenCalled();
183
+ });
184
+ it("forces config overwrite when --force is passed", async () => {
185
+ directoryExists.mockResolvedValue(true);
186
+ detectProject.mockResolvedValue(baseProjectInfo);
187
+ validateProject.mockResolvedValue({
188
+ valid: true,
189
+ errors: [],
190
+ warnings: []
191
+ });
192
+ getConfigPath.mockReturnValue("C:\\project\\trix-ui.json");
193
+ fileExists.mockResolvedValue(true);
194
+ checkDependencies.mockResolvedValue({
195
+ required: [],
196
+ devDependencies: [],
197
+ missing: []
198
+ });
199
+ createConfig.mockReturnValue(baseConfig);
200
+ await initCommand.parseAsync([
201
+ "node",
202
+ "cli",
203
+ "--cwd",
204
+ "C:\\project",
205
+ "--force"
206
+ ]);
207
+ expect(promptsMock).not.toHaveBeenCalled();
208
+ expect(writeConfig).toHaveBeenCalledWith("C:\\project", baseConfig, true);
209
+ });
210
+ it("continues when dependency installation is declined", async () => {
211
+ const projectInfo = {
212
+ ...baseProjectInfo,
213
+ tailwind: false
214
+ };
215
+ directoryExists.mockResolvedValue(true);
216
+ detectProject.mockResolvedValue(projectInfo);
217
+ validateProject.mockResolvedValue({
218
+ valid: true,
219
+ errors: [],
220
+ warnings: []
221
+ });
222
+ getConfigPath.mockReturnValue("C:\\project\\trix-ui.json");
223
+ fileExists.mockResolvedValue(false);
224
+ checkDependencies.mockResolvedValue({
225
+ required: [],
226
+ devDependencies: ["tailwindcss"],
227
+ missing: ["tailwindcss"]
228
+ });
229
+ confirmInstallation.mockResolvedValue(false);
230
+ createConfig.mockReturnValue(baseConfig);
231
+ await initCommand.parseAsync(["node", "cli", "--cwd", "C:\\project"]);
232
+ expect(installDependencies).not.toHaveBeenCalled();
233
+ expect(writeConfig).toHaveBeenCalled();
234
+ });
235
+ it("skips tailwind and tsconfig setup when not needed", async () => {
236
+ const projectInfo = {
237
+ ...baseProjectInfo,
238
+ tailwind: true,
239
+ typescript: false
240
+ };
241
+ directoryExists.mockResolvedValue(true);
242
+ detectProject.mockResolvedValue(projectInfo);
243
+ validateProject.mockResolvedValue({
244
+ valid: true,
245
+ errors: [],
246
+ warnings: []
247
+ });
248
+ getConfigPath.mockReturnValue("C:\\project\\trix-ui.json");
249
+ fileExists.mockResolvedValue(false);
250
+ checkDependencies.mockResolvedValue({
251
+ required: [],
252
+ devDependencies: [],
253
+ missing: []
254
+ });
255
+ createConfig.mockReturnValue(baseConfig);
256
+ await initCommand.parseAsync(["node", "cli", "--cwd", "C:\\project"]);
257
+ expect(setupTailwind).not.toHaveBeenCalled();
258
+ expect(setupTypeScriptPaths).not.toHaveBeenCalled();
259
+ expect(setupJavaScriptPaths).toHaveBeenCalledWith("C:\\project", projectInfo);
260
+ });
261
+ it("exits when Vite alias validation fails", async () => {
262
+ const projectInfo = {
263
+ ...baseProjectInfo,
264
+ framework: "vite"
265
+ };
266
+ directoryExists.mockResolvedValue(true);
267
+ detectProject.mockResolvedValue(projectInfo);
268
+ validateProject.mockResolvedValue({
269
+ valid: true,
270
+ errors: [],
271
+ warnings: []
272
+ });
273
+ getConfigPath.mockReturnValue("C:\\project\\trix-ui.json");
274
+ fileExists.mockResolvedValue(false);
275
+ setupTypeScriptPaths.mockResolvedValue(undefined);
276
+ validateViteAliasSupport.mockRejectedValue(new Error("missing vite alias"));
277
+ await initCommand.parseAsync(["node", "cli", "--cwd", "C:\\project"]);
278
+ expect(validateViteAliasSupport).toHaveBeenCalledWith("C:\\project", projectInfo);
279
+ expect(writeConfig).not.toHaveBeenCalled();
280
+ expect(process.exit).toHaveBeenCalledWith(1);
281
+ });
282
+ });
283
+ //# sourceMappingURL=init.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../../src/commands/init/__tests__/init.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,56 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { describe, expect, it } from "vitest";
4
+ import { createTempDir, pathExists, removeDir, writeFile } from "../../../__tests__/helpers/fs.js";
5
+ import { setupGlobalStyles, setupTailwind } from "../tailwind.js";
6
+ const baseConfig = {
7
+ typescript: true,
8
+ tailwind: true,
9
+ framework: "react",
10
+ barrel: false,
11
+ registry: { type: "bundled" },
12
+ paths: {
13
+ components: "components/ui",
14
+ sections: "components/sections",
15
+ wrappers: "components/wrappers",
16
+ composites: "components/composites",
17
+ utils: "lib/utils.ts",
18
+ styles: "globals.css"
19
+ }
20
+ };
21
+ describe("tailwind setup", () => {
22
+ it("writes postcss config when setting up tailwind", async () => {
23
+ const cwd = await createTempDir("trix-ui-tailwind-");
24
+ try {
25
+ const projectInfo = {
26
+ framework: "react",
27
+ typescript: true,
28
+ tailwind: false,
29
+ packageManager: "npm",
30
+ srcDir: false,
31
+ appDir: false,
32
+ pagesDir: false,
33
+ hasComponents: false
34
+ };
35
+ await setupTailwind(cwd, projectInfo, { force: false });
36
+ expect(await pathExists(path.join(cwd, "postcss.config.js"))).toBe(true);
37
+ }
38
+ finally {
39
+ await removeDir(cwd);
40
+ }
41
+ });
42
+ it("preserves existing styles when variables already exist and not forced", async () => {
43
+ const cwd = await createTempDir("trix-ui-tailwind-");
44
+ try {
45
+ const stylesPath = path.join(cwd, baseConfig.paths.styles);
46
+ await writeFile(stylesPath, ":root { --background: #fff; }");
47
+ await setupGlobalStyles(cwd, baseConfig, { force: false });
48
+ const content = await fs.readFile(stylesPath, "utf-8");
49
+ expect(content).toContain("--background");
50
+ }
51
+ finally {
52
+ await removeDir(cwd);
53
+ }
54
+ });
55
+ });
56
+ //# sourceMappingURL=tailwind.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind.test.js","sourceRoot":"","sources":["../../../../src/commands/init/__tests__/tailwind.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,SAAS,EACV,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGjE,MAAM,UAAU,GAAe;IAC7B,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IAC7B,KAAK,EAAE;QACL,UAAU,EAAE,eAAe;QAC3B,QAAQ,EAAE,qBAAqB;QAC/B,QAAQ,EAAE,qBAAqB;QAC/B,UAAU,EAAE,uBAAuB;QACnC,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,aAAa;KACtB;CACF,CAAA;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,mBAAmB,CAAC,CAAA;QACpD,IAAI,CAAC;YACH,MAAM,WAAW,GAAgB;gBAC/B,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,KAAK;gBACf,cAAc,EAAE,KAAK;gBACrB,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,KAAK;gBACf,aAAa,EAAE,KAAK;aACrB,CAAA;YAED,MAAM,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YAEvD,MAAM,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1E,CAAC;gBAAS,CAAC;YACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,mBAAmB,CAAC,CAAA;QACpD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC1D,MAAM,SAAS,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAA;YAE5D,MAAM,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YAE1D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YAEtD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;QAC3C,CAAC;gBAAS,CAAC;YACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,108 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { describe, expect, it } from "vitest";
4
+ import { createTempDir, removeDir, writeFile } from "../../../__tests__/helpers/fs.js";
5
+ import { setupTypeScriptPaths } from "../tsconfig.js";
6
+ describe("tsconfig setup", () => {
7
+ it("throws with guidance when alias is missing", async () => {
8
+ const cwd = await createTempDir("trix-ui-tsconfig-");
9
+ try {
10
+ const tsconfigPath = path.join(cwd, "tsconfig.json");
11
+ const original = `{
12
+ // comment
13
+ "compilerOptions": {
14
+ "baseUrl": ".",
15
+ "paths": {
16
+ // trailing comment
17
+ },
18
+ },
19
+ }`;
20
+ await writeFile(tsconfigPath, original);
21
+ const projectInfo = {
22
+ framework: "next",
23
+ typescript: true,
24
+ tailwind: true,
25
+ packageManager: "npm",
26
+ srcDir: false,
27
+ appDir: false,
28
+ pagesDir: false,
29
+ hasComponents: false
30
+ };
31
+ await expect(setupTypeScriptPaths(cwd, projectInfo)).rejects.toThrow("nextjs.org/docs");
32
+ const content = await fs.readFile(tsconfigPath, "utf-8");
33
+ expect(content).toContain("// comment");
34
+ expect(content).toBe(original);
35
+ }
36
+ finally {
37
+ await removeDir(cwd);
38
+ }
39
+ });
40
+ it("passes when alias exists", async () => {
41
+ const cwd = await createTempDir("trix-ui-tsconfig-");
42
+ try {
43
+ const tsconfigPath = path.join(cwd, "tsconfig.json");
44
+ const original = `{
45
+ "compilerOptions": {
46
+ "baseUrl": ".",
47
+ "paths": {
48
+ "@/*": ["./*"]
49
+ }
50
+ }
51
+ }`;
52
+ await writeFile(tsconfigPath, original);
53
+ const projectInfo = {
54
+ framework: "react",
55
+ typescript: true,
56
+ tailwind: true,
57
+ packageManager: "npm",
58
+ srcDir: false,
59
+ appDir: false,
60
+ pagesDir: false,
61
+ hasComponents: false
62
+ };
63
+ await expect(setupTypeScriptPaths(cwd, projectInfo)).resolves.toBeUndefined();
64
+ const content = await fs.readFile(tsconfigPath, "utf-8");
65
+ expect(content).toBe(original);
66
+ }
67
+ finally {
68
+ await removeDir(cwd);
69
+ }
70
+ });
71
+ it("requires Vite root tsconfig alias when tsconfig.app.json is present", async () => {
72
+ const cwd = await createTempDir("trix-ui-tsconfig-");
73
+ try {
74
+ const rootPath = path.join(cwd, "tsconfig.json");
75
+ const appPath = path.join(cwd, "tsconfig.app.json");
76
+ await writeFile(rootPath, `{
77
+ "compilerOptions": {
78
+ "baseUrl": ".",
79
+ "paths": {}
80
+ }
81
+ }`);
82
+ await writeFile(appPath, `{
83
+ "compilerOptions": {
84
+ "baseUrl": ".",
85
+ "paths": {
86
+ "@/*": ["./src/*"]
87
+ }
88
+ }
89
+ }`);
90
+ const projectInfo = {
91
+ framework: "vite",
92
+ typescript: true,
93
+ tailwind: true,
94
+ packageManager: "npm",
95
+ srcDir: true,
96
+ appDir: false,
97
+ pagesDir: false,
98
+ hasComponents: false
99
+ };
100
+ await expect(setupTypeScriptPaths(cwd, projectInfo)).rejects.toThrow("ui.shadcn.com/docs/installation/vite");
101
+ await expect(setupTypeScriptPaths(cwd, projectInfo)).rejects.toThrow("tsconfig.json");
102
+ }
103
+ finally {
104
+ await removeDir(cwd);
105
+ }
106
+ });
107
+ });
108
+ //# sourceMappingURL=tsconfig.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig.test.js","sourceRoot":"","sources":["../../../../src/commands/init/__tests__/tsconfig.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,66 @@
1
+ import path from "node:path";
2
+ import { describe, expect, it } from "vitest";
3
+ import { createTempDir, removeDir, writeFile } from "../../../__tests__/helpers/fs.js";
4
+ import { validateViteAliasSupport } from "../vite.js";
5
+ const viteProjectInfo = {
6
+ framework: "vite",
7
+ typescript: true,
8
+ tailwind: true,
9
+ packageManager: "npm",
10
+ srcDir: true,
11
+ appDir: false,
12
+ pagesDir: false,
13
+ hasComponents: false
14
+ };
15
+ describe("vite alias validation", () => {
16
+ it("throws with guidance when Vite config is missing", async () => {
17
+ const cwd = await createTempDir("trix-ui-vite-");
18
+ try {
19
+ await expect(validateViteAliasSupport(cwd, viteProjectInfo)).rejects.toThrow("ui.shadcn.com/docs/installation/vite");
20
+ }
21
+ finally {
22
+ await removeDir(cwd);
23
+ }
24
+ });
25
+ it("throws when Vite config exists but @ alias is missing", async () => {
26
+ const cwd = await createTempDir("trix-ui-vite-");
27
+ try {
28
+ await writeFile(path.join(cwd, "vite.config.ts"), "export default {}");
29
+ await expect(validateViteAliasSupport(cwd, viteProjectInfo)).rejects.toThrow("Missing Vite alias");
30
+ }
31
+ finally {
32
+ await removeDir(cwd);
33
+ }
34
+ });
35
+ it("passes when Vite config defines an @ alias", async () => {
36
+ const cwd = await createTempDir("trix-ui-vite-");
37
+ try {
38
+ await writeFile(path.join(cwd, "vite.config.ts"), `export default {
39
+ resolve: {
40
+ alias: {
41
+ "@": "/src"
42
+ }
43
+ }
44
+ }`);
45
+ await expect(validateViteAliasSupport(cwd, viteProjectInfo)).resolves.toBeUndefined();
46
+ }
47
+ finally {
48
+ await removeDir(cwd);
49
+ }
50
+ });
51
+ it("passes when Vite config enables vite-tsconfig-paths", async () => {
52
+ const cwd = await createTempDir("trix-ui-vite-");
53
+ try {
54
+ await writeFile(path.join(cwd, "vite.config.ts"), `import tsconfigPaths from "vite-tsconfig-paths"
55
+
56
+ export default {
57
+ plugins: [tsconfigPaths()]
58
+ }`);
59
+ await expect(validateViteAliasSupport(cwd, viteProjectInfo)).resolves.toBeUndefined();
60
+ }
61
+ finally {
62
+ await removeDir(cwd);
63
+ }
64
+ });
65
+ });
66
+ //# sourceMappingURL=vite.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.test.js","sourceRoot":"","sources":["../../../../src/commands/init/__tests__/vite.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAGrD,MAAM,eAAe,GAAgB;IACnC,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,cAAc,EAAE,KAAK;IACrB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,KAAK;IACf,aAAa,EAAE,KAAK;CACrB,CAAA;AAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,CAAA;QAChD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC1E,sCAAsC,CACvC,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,CAAA;QAChD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,mBAAmB,CAAC,CAAA;YAEtE,MAAM,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC1E,oBAAoB,CACrB,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,CAAA;QAChD,IAAI,CAAC;YACH,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAChC;;;;;;EAMN,CACK,CAAA;YAED,MAAM,MAAM,CACV,wBAAwB,CAAC,GAAG,EAAE,eAAe,CAAC,CAC/C,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QAC5B,CAAC;gBAAS,CAAC;YACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,CAAA;QAChD,IAAI,CAAC;YACH,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAChC;;;;EAIN,CACK,CAAA;YAED,MAAM,MAAM,CACV,wBAAwB,CAAC,GAAG,EAAE,eAAe,CAAC,CAC/C,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;QAC5B,CAAC;gBAAS,CAAC;YACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +1,2 @@
1
- import { Command } from "commander";
2
- export declare const initCommand: Command;
1
+ import { Command } from "commander";
2
+ export declare const initCommand: Command;