@sembix/cli 0.1.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +135 -18
  2. package/dist/__tests__/config-schema.test.d.ts +2 -0
  3. package/dist/__tests__/config-schema.test.d.ts.map +1 -0
  4. package/dist/__tests__/config-schema.test.js +471 -0
  5. package/dist/__tests__/config-schema.test.js.map +1 -0
  6. package/dist/__tests__/integration/fixtures/configs.d.ts +477 -0
  7. package/dist/__tests__/integration/fixtures/configs.d.ts.map +1 -0
  8. package/dist/__tests__/integration/fixtures/configs.js +175 -0
  9. package/dist/__tests__/integration/fixtures/configs.js.map +1 -0
  10. package/dist/__tests__/integration/helpers/cli-runner.d.ts +63 -0
  11. package/dist/__tests__/integration/helpers/cli-runner.d.ts.map +1 -0
  12. package/dist/__tests__/integration/helpers/cli-runner.js +152 -0
  13. package/dist/__tests__/integration/helpers/cli-runner.js.map +1 -0
  14. package/dist/__tests__/integration/helpers/command-runner.d.ts +53 -0
  15. package/dist/__tests__/integration/helpers/command-runner.d.ts.map +1 -0
  16. package/dist/__tests__/integration/helpers/command-runner.js +117 -0
  17. package/dist/__tests__/integration/helpers/command-runner.js.map +1 -0
  18. package/dist/__tests__/integration/studio-create.test.d.ts +2 -0
  19. package/dist/__tests__/integration/studio-create.test.d.ts.map +1 -0
  20. package/dist/__tests__/integration/studio-create.test.js +209 -0
  21. package/dist/__tests__/integration/studio-create.test.js.map +1 -0
  22. package/dist/__tests__/integration/studio-update.test.d.ts +2 -0
  23. package/dist/__tests__/integration/studio-update.test.d.ts.map +1 -0
  24. package/dist/__tests__/integration/studio-update.test.js +166 -0
  25. package/dist/__tests__/integration/studio-update.test.js.map +1 -0
  26. package/dist/index.js +8 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/prompts/__tests__/prompt-helpers.test.d.ts +2 -0
  29. package/dist/prompts/__tests__/prompt-helpers.test.d.ts.map +1 -0
  30. package/dist/prompts/__tests__/prompt-helpers.test.js +235 -0
  31. package/dist/prompts/__tests__/prompt-helpers.test.js.map +1 -0
  32. package/dist/sembix-cli-1.1.0.tgz +0 -0
  33. package/dist/utils/__tests__/config-loader.test.d.ts +2 -0
  34. package/dist/utils/__tests__/config-loader.test.d.ts.map +1 -0
  35. package/dist/utils/__tests__/config-loader.test.js +325 -0
  36. package/dist/utils/__tests__/config-loader.test.js.map +1 -0
  37. package/dist/utils/__tests__/github.test.d.ts +2 -0
  38. package/dist/utils/__tests__/github.test.d.ts.map +1 -0
  39. package/dist/utils/__tests__/github.test.js +282 -0
  40. package/dist/utils/__tests__/github.test.js.map +1 -0
  41. package/dist/utils/__tests__/ui.test.d.ts +2 -0
  42. package/dist/utils/__tests__/ui.test.d.ts.map +1 -0
  43. package/dist/utils/__tests__/ui.test.js +256 -0
  44. package/dist/utils/__tests__/ui.test.js.map +1 -0
  45. package/package.json +20 -9
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ui.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/ui.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,256 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import * as ui from '../ui.js';
3
+ // Mock chalk to return plain text for easier testing
4
+ vi.mock('chalk', () => ({
5
+ default: {
6
+ cyan: {
7
+ bold: (text) => text,
8
+ underline: (text) => text,
9
+ },
10
+ white: Object.assign((text) => text, {
11
+ bold: (text) => text,
12
+ }),
13
+ green: (text) => text,
14
+ red: (text) => text,
15
+ yellow: (text) => text,
16
+ blue: (text) => text,
17
+ dim: (text) => text,
18
+ },
19
+ }));
20
+ // Mock ora for spinner tests
21
+ vi.mock('ora', () => ({
22
+ default: vi.fn((options) => ({
23
+ start: vi.fn().mockReturnThis(),
24
+ stop: vi.fn().mockReturnThis(),
25
+ succeed: vi.fn().mockReturnThis(),
26
+ fail: vi.fn().mockReturnThis(),
27
+ text: options?.text,
28
+ color: options?.color,
29
+ })),
30
+ }));
31
+ describe('ui utilities', () => {
32
+ let consoleSpy;
33
+ beforeEach(() => {
34
+ consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
35
+ });
36
+ afterEach(() => {
37
+ consoleSpy.mockRestore();
38
+ });
39
+ describe('banner', () => {
40
+ it('should display CLI banner', () => {
41
+ ui.banner();
42
+ expect(consoleSpy).toHaveBeenCalled();
43
+ const calls = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
44
+ expect(calls).toContain('Sembix Studio CLI');
45
+ });
46
+ it('should print banner with borders', () => {
47
+ ui.banner();
48
+ const calls = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
49
+ expect(calls).toContain('┌');
50
+ expect(calls).toContain('└');
51
+ expect(calls).toContain('│');
52
+ });
53
+ });
54
+ describe('section', () => {
55
+ it('should display section header', () => {
56
+ ui.section('Test Section');
57
+ expect(consoleSpy).toHaveBeenCalled();
58
+ const calls = consoleSpy.mock.calls.map((call) => call[0]).join('');
59
+ expect(calls).toContain('Test Section');
60
+ expect(calls).toContain('━━━');
61
+ });
62
+ it('should add blank lines around section', () => {
63
+ ui.section('Test');
64
+ // Should call console.log at least 3 times (blank line, title, blank line)
65
+ expect(consoleSpy).toHaveBeenCalledTimes(3);
66
+ });
67
+ });
68
+ describe('success', () => {
69
+ it('should display success message with checkmark', () => {
70
+ ui.success('Operation completed');
71
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('✓'));
72
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Operation completed'));
73
+ });
74
+ });
75
+ describe('error', () => {
76
+ it('should display error message with X mark', () => {
77
+ ui.error('Operation failed');
78
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('✗'));
79
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Operation failed'));
80
+ });
81
+ });
82
+ describe('warning', () => {
83
+ it('should display warning message with warning symbol', () => {
84
+ ui.warning('Be careful');
85
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('⚠'));
86
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Be careful'));
87
+ });
88
+ });
89
+ describe('info', () => {
90
+ it('should display info message with info symbol', () => {
91
+ ui.info('For your information');
92
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('ℹ'));
93
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('For your information'));
94
+ });
95
+ });
96
+ describe('spinner', () => {
97
+ it('should create spinner with text and color', () => {
98
+ const spinner = ui.spinner('Loading...');
99
+ expect(spinner.text).toBe('Loading...');
100
+ expect(spinner.color).toBe('cyan');
101
+ });
102
+ it('should return spinner object with start method', () => {
103
+ const spinner = ui.spinner('Processing...');
104
+ expect(spinner.start).toBeDefined();
105
+ expect(typeof spinner.start).toBe('function');
106
+ });
107
+ });
108
+ describe('table', () => {
109
+ it('should display key-value pairs as table', () => {
110
+ const data = {
111
+ Name: 'John Doe',
112
+ Email: 'john@example.com',
113
+ Role: 'Developer',
114
+ };
115
+ ui.table(data);
116
+ expect(consoleSpy).toHaveBeenCalled();
117
+ const output = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
118
+ expect(output).toContain('Name');
119
+ expect(output).toContain('John Doe');
120
+ expect(output).toContain('Email');
121
+ expect(output).toContain('john@example.com');
122
+ expect(output).toContain('Role');
123
+ expect(output).toContain('Developer');
124
+ });
125
+ it('should align keys with padding', () => {
126
+ const data = {
127
+ Name: 'John',
128
+ LongKeyName: 'Value',
129
+ };
130
+ ui.table(data);
131
+ const output = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
132
+ // Both entries should have consistent formatting
133
+ expect(output).toContain(':');
134
+ });
135
+ it('should handle empty object', () => {
136
+ ui.table({});
137
+ // Should print blank lines but no content
138
+ expect(consoleSpy).toHaveBeenCalledTimes(2); // Two blank lines
139
+ });
140
+ });
141
+ describe('separator', () => {
142
+ it('should display horizontal line', () => {
143
+ ui.separator();
144
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('─'));
145
+ });
146
+ it('should display line with correct length', () => {
147
+ ui.separator();
148
+ const line = consoleSpy.mock.calls[0][0];
149
+ expect(line).toHaveLength(50);
150
+ });
151
+ });
152
+ describe('link', () => {
153
+ it('should format link with URL', () => {
154
+ const result = ui.link('https://example.com');
155
+ expect(result).toContain('https://example.com');
156
+ });
157
+ it('should format link with custom label', () => {
158
+ const result = ui.link('https://example.com', 'Example Site');
159
+ expect(result).toContain('Example Site');
160
+ expect(result).toContain('https://example.com');
161
+ });
162
+ it('should include URL in parentheses when label provided', () => {
163
+ const result = ui.link('https://example.com', 'Click here');
164
+ expect(result).toContain('(https://example.com)');
165
+ });
166
+ });
167
+ describe('highlight', () => {
168
+ it('should return highlighted text', () => {
169
+ const result = ui.highlight('Important');
170
+ expect(result).toBe('Important');
171
+ });
172
+ it('should handle empty string', () => {
173
+ const result = ui.highlight('');
174
+ expect(result).toBe('');
175
+ });
176
+ });
177
+ describe('dim', () => {
178
+ it('should return dimmed text', () => {
179
+ const result = ui.dim('Secondary text');
180
+ expect(result).toBe('Secondary text');
181
+ });
182
+ it('should handle empty string', () => {
183
+ const result = ui.dim('');
184
+ expect(result).toBe('');
185
+ });
186
+ });
187
+ describe('code', () => {
188
+ it('should format text as code with backticks', () => {
189
+ const result = ui.code('npm install');
190
+ expect(result).toContain('npm install');
191
+ expect(result).toContain('`');
192
+ });
193
+ it('should wrap text in backticks', () => {
194
+ const result = ui.code('test');
195
+ expect(result).toMatch(/`.*`/);
196
+ });
197
+ it('should handle empty string', () => {
198
+ const result = ui.code('');
199
+ expect(result).toBe('``');
200
+ });
201
+ });
202
+ describe('integration - combined output', () => {
203
+ it('should work together for complete UI flow', () => {
204
+ ui.banner();
205
+ ui.section('Configuration');
206
+ ui.info('Setting up environment');
207
+ ui.success('Environment created');
208
+ ui.table({
209
+ Environment: 'production',
210
+ Region: 'us-east-1',
211
+ });
212
+ ui.separator();
213
+ expect(consoleSpy).toHaveBeenCalled();
214
+ const output = consoleSpy.mock.calls.map((call) => call[0]).join('\n');
215
+ expect(output).toContain('Sembix Studio CLI');
216
+ expect(output).toContain('Configuration');
217
+ expect(output).toContain('Setting up environment');
218
+ expect(output).toContain('Environment created');
219
+ expect(output).toContain('production');
220
+ expect(output).toContain('─');
221
+ });
222
+ });
223
+ describe('message formatting consistency', () => {
224
+ it('should prefix all status messages with symbols', () => {
225
+ consoleSpy.mockClear();
226
+ ui.success('Success message');
227
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringMatching(/^./)); // Starts with symbol
228
+ consoleSpy.mockClear();
229
+ ui.error('Error message');
230
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringMatching(/^./));
231
+ consoleSpy.mockClear();
232
+ ui.warning('Warning message');
233
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringMatching(/^./));
234
+ consoleSpy.mockClear();
235
+ ui.info('Info message');
236
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringMatching(/^./));
237
+ });
238
+ it('should handle special characters in messages', () => {
239
+ const specialMessage = 'Test with "quotes" and \'apostrophes\' & symbols!';
240
+ ui.success(specialMessage);
241
+ ui.error(specialMessage);
242
+ ui.warning(specialMessage);
243
+ ui.info(specialMessage);
244
+ expect(consoleSpy).toHaveBeenCalledTimes(4);
245
+ });
246
+ it('should handle multiline content in table', () => {
247
+ const data = {
248
+ Key1: 'Line 1\nLine 2',
249
+ Key2: 'Single line',
250
+ };
251
+ ui.table(data);
252
+ expect(consoleSpy).toHaveBeenCalled();
253
+ });
254
+ });
255
+ });
256
+ //# sourceMappingURL=ui.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/ui.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sembix/cli",
3
- "version": "0.1.0",
3
+ "version": "1.1.0",
4
4
  "description": "CLI tool for managing Sembix products",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,7 +14,13 @@
14
14
  "type-check": "tsc --noEmit",
15
15
  "lint": "eslint src --ext .ts",
16
16
  "lint:fix": "eslint src --ext .ts --fix",
17
- "test": "echo \"No tests yet\" && exit 0",
17
+ "test": "vitest run",
18
+ "test:watch": "vitest",
19
+ "test:ui": "vitest --ui",
20
+ "test:coverage": "vitest run --coverage",
21
+ "test:unit": "vitest run --exclude 'src/__tests__/integration/**'",
22
+ "test:integration": "npm run build && vitest run integration",
23
+ "test:integration:watch": "vitest integration",
18
24
  "prepublishOnly": "npm run build"
19
25
  },
20
26
  "files": [
@@ -58,21 +64,26 @@
58
64
  "zod": "^3.23.8"
59
65
  },
60
66
  "devDependencies": {
67
+ "@semantic-release/changelog": "^6.0.3",
68
+ "@semantic-release/commit-analyzer": "^13.0.0",
69
+ "@semantic-release/git": "^10.0.1",
70
+ "@semantic-release/github": "^11.0.0",
71
+ "@semantic-release/npm": "^12.0.0",
72
+ "@semantic-release/release-notes-generator": "^14.0.0",
61
73
  "@types/js-yaml": "^4.0.9",
74
+ "conventional-changelog-conventionalcommits": "^8.0.0",
62
75
  "@types/libsodium-wrappers": "^0.7.14",
63
76
  "@types/node": "^20.17.10",
64
77
  "@typescript-eslint/eslint-plugin": "^8.0.0",
65
78
  "@typescript-eslint/parser": "^8.0.0",
79
+ "@vitest/coverage-v8": "^4.0.12",
80
+ "@vitest/ui": "^4.0.12",
66
81
  "eslint": "^9.0.0",
82
+ "happy-dom": "^20.0.10",
67
83
  "semantic-release": "^24.0.0",
68
- "@semantic-release/changelog": "^6.0.3",
69
- "@semantic-release/commit-analyzer": "^13.0.0",
70
- "@semantic-release/git": "^10.0.1",
71
- "@semantic-release/github": "^11.0.0",
72
- "@semantic-release/npm": "^12.0.0",
73
- "@semantic-release/release-notes-generator": "^14.0.0",
74
84
  "tsx": "^4.19.2",
75
- "typescript": "^5.8.0"
85
+ "typescript": "^5.8.0",
86
+ "vitest": "^4.0.12"
76
87
  },
77
88
  "engines": {
78
89
  "node": ">=20.0.0"