@skillsmith/cli 0.3.0 → 0.3.2

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 (107) hide show
  1. package/README.md +158 -0
  2. package/assets/skillsmith-skill/SKILL.md +235 -0
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/commands/author/index.d.ts +16 -0
  5. package/dist/src/commands/author/index.d.ts.map +1 -0
  6. package/dist/src/commands/author/index.js +18 -0
  7. package/dist/src/commands/author/index.js.map +1 -0
  8. package/dist/src/commands/author/init.d.ts +47 -0
  9. package/dist/src/commands/author/init.d.ts.map +1 -0
  10. package/dist/src/commands/author/init.js +346 -0
  11. package/dist/src/commands/author/init.js.map +1 -0
  12. package/dist/src/commands/author/mcp-init.d.ts +20 -0
  13. package/dist/src/commands/author/mcp-init.d.ts.map +1 -0
  14. package/dist/src/commands/author/mcp-init.js +183 -0
  15. package/dist/src/commands/author/mcp-init.js.map +1 -0
  16. package/dist/src/commands/author/subagent.d.ts +22 -0
  17. package/dist/src/commands/author/subagent.d.ts.map +1 -0
  18. package/dist/src/commands/author/subagent.js +166 -0
  19. package/dist/src/commands/author/subagent.js.map +1 -0
  20. package/dist/src/commands/author/transform.d.ts +22 -0
  21. package/dist/src/commands/author/transform.d.ts.map +1 -0
  22. package/dist/src/commands/author/transform.js +141 -0
  23. package/dist/src/commands/author/transform.js.map +1 -0
  24. package/dist/src/commands/author/utils.d.ts +27 -0
  25. package/dist/src/commands/author/utils.d.ts.map +1 -0
  26. package/dist/src/commands/author/utils.js +118 -0
  27. package/dist/src/commands/author/utils.js.map +1 -0
  28. package/dist/src/commands/index.d.ts +3 -1
  29. package/dist/src/commands/index.d.ts.map +1 -1
  30. package/dist/src/commands/index.js +6 -1
  31. package/dist/src/commands/index.js.map +1 -1
  32. package/dist/src/commands/install-skill.d.ts +13 -0
  33. package/dist/src/commands/install-skill.d.ts.map +1 -0
  34. package/dist/src/commands/install-skill.js +137 -0
  35. package/dist/src/commands/install-skill.js.map +1 -0
  36. package/dist/src/commands/manage.d.ts +4 -1
  37. package/dist/src/commands/manage.d.ts.map +1 -1
  38. package/dist/src/commands/manage.js +56 -10
  39. package/dist/src/commands/manage.js.map +1 -1
  40. package/dist/src/commands/merge.d.ts +17 -0
  41. package/dist/src/commands/merge.d.ts.map +1 -0
  42. package/dist/src/commands/merge.js +160 -0
  43. package/dist/src/commands/merge.js.map +1 -0
  44. package/dist/src/commands/recommend.d.ts +1 -4
  45. package/dist/src/commands/recommend.d.ts.map +1 -1
  46. package/dist/src/commands/recommend.helpers.d.ts +58 -0
  47. package/dist/src/commands/recommend.helpers.d.ts.map +1 -0
  48. package/dist/src/commands/recommend.helpers.js +428 -0
  49. package/dist/src/commands/recommend.helpers.js.map +1 -0
  50. package/dist/src/commands/recommend.js +50 -372
  51. package/dist/src/commands/recommend.js.map +1 -1
  52. package/dist/src/commands/recommend.types.d.ts +66 -0
  53. package/dist/src/commands/recommend.types.d.ts.map +1 -0
  54. package/dist/src/commands/recommend.types.js +14 -0
  55. package/dist/src/commands/recommend.types.js.map +1 -0
  56. package/dist/src/commands/search.d.ts.map +1 -1
  57. package/dist/src/commands/search.js +133 -18
  58. package/dist/src/commands/search.js.map +1 -1
  59. package/dist/src/commands/sync.d.ts.map +1 -1
  60. package/dist/src/commands/sync.js +6 -46
  61. package/dist/src/commands/sync.js.map +1 -1
  62. package/dist/src/config.d.ts +5 -0
  63. package/dist/src/config.d.ts.map +1 -1
  64. package/dist/src/config.js +7 -0
  65. package/dist/src/config.js.map +1 -1
  66. package/dist/src/import.d.ts +1 -0
  67. package/dist/src/import.d.ts.map +1 -1
  68. package/dist/src/import.js +20 -5
  69. package/dist/src/import.js.map +1 -1
  70. package/dist/src/index.d.ts +1 -0
  71. package/dist/src/index.d.ts.map +1 -1
  72. package/dist/src/index.js +11 -1
  73. package/dist/src/index.js.map +1 -1
  74. package/dist/src/utils/formatters.d.ts +39 -0
  75. package/dist/src/utils/formatters.d.ts.map +1 -0
  76. package/dist/src/utils/formatters.js +69 -0
  77. package/dist/src/utils/formatters.js.map +1 -0
  78. package/dist/src/utils/license.test.js +6 -1
  79. package/dist/src/utils/license.test.js.map +1 -1
  80. package/dist/src/utils/node-version.d.ts +41 -0
  81. package/dist/src/utils/node-version.d.ts.map +1 -0
  82. package/dist/src/utils/node-version.js +123 -0
  83. package/dist/src/utils/node-version.js.map +1 -0
  84. package/dist/tests/author.test.js +45 -45
  85. package/dist/tests/author.test.js.map +1 -1
  86. package/dist/tests/e2e/search.e2e.test.js +62 -6
  87. package/dist/tests/e2e/search.e2e.test.js.map +1 -1
  88. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +1 -1
  89. package/dist/tests/e2e/utils/hardcoded-detector.js +44 -3
  90. package/dist/tests/e2e/utils/hardcoded-detector.js.map +1 -1
  91. package/dist/tests/install-skill.test.d.ts +8 -0
  92. package/dist/tests/install-skill.test.d.ts.map +1 -0
  93. package/dist/tests/install-skill.test.js +409 -0
  94. package/dist/tests/install-skill.test.js.map +1 -0
  95. package/dist/tests/manage.test.js +284 -8
  96. package/dist/tests/manage.test.js.map +1 -1
  97. package/dist/tests/node-version.test.d.ts +8 -0
  98. package/dist/tests/node-version.test.d.ts.map +1 -0
  99. package/dist/tests/node-version.test.js +200 -0
  100. package/dist/tests/node-version.test.js.map +1 -0
  101. package/dist/tests/recommend.test.js +94 -0
  102. package/dist/tests/recommend.test.js.map +1 -1
  103. package/package.json +3 -2
  104. package/dist/src/commands/author.d.ts +0 -90
  105. package/dist/src/commands/author.d.ts.map +0 -1
  106. package/dist/src/commands/author.js +0 -902
  107. package/dist/src/commands/author.js.map +0 -1
@@ -26,18 +26,22 @@ vi.mock('ora', () => ({
26
26
  text: '',
27
27
  })),
28
28
  }));
29
- // Mock core
29
+ // Mock core - use class implementations to avoid vitest warning
30
30
  vi.mock('@skillsmith/core', () => ({
31
31
  createDatabase: vi.fn(() => ({
32
32
  close: vi.fn(),
33
33
  })),
34
- SkillRepository: vi.fn(() => ({
35
- findAll: vi.fn(() => ({ items: [], total: 0, limit: 1000, offset: 0, hasMore: false })),
36
- })),
37
- SkillParser: vi.fn(() => ({
38
- parse: vi.fn(),
39
- inferTrustTier: vi.fn(() => 'unknown'),
40
- })),
34
+ SkillRepository: vi.fn().mockImplementation(function () {
35
+ return {
36
+ findAll: vi.fn(() => ({ items: [], total: 0, limit: 1000, offset: 0, hasMore: false })),
37
+ };
38
+ }),
39
+ SkillParser: vi.fn().mockImplementation(function () {
40
+ return {
41
+ parse: vi.fn(),
42
+ inferTrustTier: vi.fn(() => 'unknown'),
43
+ };
44
+ }),
41
45
  }));
42
46
  describe('SMI-745: Skill Management Commands', () => {
43
47
  const EXPECTED_SKILLS_DIR = join(homedir(), '.claude', 'skills');
@@ -125,6 +129,278 @@ describe('SMI-745: Skill Management Commands', () => {
125
129
  expect(typeof module.getInstalledSkills).toBe('function');
126
130
  });
127
131
  });
132
+ /**
133
+ * SMI-1630: Search both global and local skill directories
134
+ *
135
+ * The CLI should search both:
136
+ * - Global: ~/.claude/skills/
137
+ * - Local: ${process.cwd()}/.claude/skills/
138
+ *
139
+ * Local skills should take precedence over global skills with the same name.
140
+ */
141
+ describe('SMI-1630: Search both global and local skill directories', () => {
142
+ const GLOBAL_SKILLS_DIR = join(homedir(), '.claude', 'skills');
143
+ const LOCAL_SKILLS_DIR = join(process.cwd(), '.claude', 'skills');
144
+ const mockSkillMd = (name, version) => `---
145
+ name: ${name}
146
+ version: ${version}
147
+ ---
148
+ # ${name}
149
+
150
+ A test skill.
151
+ `;
152
+ beforeEach(async () => {
153
+ vi.clearAllMocks();
154
+ // Reset module cache to ensure fresh imports with mocked fs
155
+ vi.resetModules();
156
+ });
157
+ it('should search both global and local skill directories', async () => {
158
+ const { readdir, readFile, stat } = await import('fs/promises');
159
+ const readdirMock = vi.mocked(readdir);
160
+ const readFileMock = vi.mocked(readFile);
161
+ const statMock = vi.mocked(stat);
162
+ // Mock global directory with one skill
163
+ readdirMock.mockImplementation(async (dirPath) => {
164
+ if (dirPath === GLOBAL_SKILLS_DIR) {
165
+ return [{ name: 'global-skill', isDirectory: () => true }];
166
+ }
167
+ if (dirPath === LOCAL_SKILLS_DIR) {
168
+ return [{ name: 'local-skill', isDirectory: () => true }];
169
+ }
170
+ throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
171
+ });
172
+ statMock.mockResolvedValue({
173
+ mtime: new Date('2024-01-15'),
174
+ });
175
+ readFileMock.mockImplementation(async (filePath) => {
176
+ if (String(filePath).includes('global-skill')) {
177
+ return mockSkillMd('global-skill', '1.0.0');
178
+ }
179
+ if (String(filePath).includes('local-skill')) {
180
+ return mockSkillMd('local-skill', '2.0.0');
181
+ }
182
+ throw new Error('File not found');
183
+ });
184
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
185
+ const skills = await getInstalledSkills();
186
+ // Should have searched both directories
187
+ expect(readdirMock).toHaveBeenCalledWith(GLOBAL_SKILLS_DIR, { withFileTypes: true });
188
+ expect(readdirMock).toHaveBeenCalledWith(LOCAL_SKILLS_DIR, { withFileTypes: true });
189
+ // Should return skills from both directories
190
+ const skillNames = skills.map((s) => s.name);
191
+ expect(skillNames).toContain('global-skill');
192
+ expect(skillNames).toContain('local-skill');
193
+ expect(skills).toHaveLength(2);
194
+ });
195
+ it('should merge skills from both directories', async () => {
196
+ const { readdir, readFile, stat } = await import('fs/promises');
197
+ const readdirMock = vi.mocked(readdir);
198
+ const readFileMock = vi.mocked(readFile);
199
+ const statMock = vi.mocked(stat);
200
+ // Both directories have different skills
201
+ readdirMock.mockImplementation(async (dirPath) => {
202
+ if (dirPath === GLOBAL_SKILLS_DIR) {
203
+ return [
204
+ { name: 'skill-a', isDirectory: () => true },
205
+ { name: 'skill-b', isDirectory: () => true },
206
+ ];
207
+ }
208
+ if (dirPath === LOCAL_SKILLS_DIR) {
209
+ return [
210
+ { name: 'skill-c', isDirectory: () => true },
211
+ { name: 'skill-d', isDirectory: () => true },
212
+ ];
213
+ }
214
+ throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
215
+ });
216
+ statMock.mockResolvedValue({
217
+ mtime: new Date('2024-01-15'),
218
+ });
219
+ readFileMock.mockImplementation(async (filePath) => {
220
+ const path = String(filePath);
221
+ if (path.includes('skill-a'))
222
+ return mockSkillMd('skill-a', '1.0.0');
223
+ if (path.includes('skill-b'))
224
+ return mockSkillMd('skill-b', '1.0.0');
225
+ if (path.includes('skill-c'))
226
+ return mockSkillMd('skill-c', '1.0.0');
227
+ if (path.includes('skill-d'))
228
+ return mockSkillMd('skill-d', '1.0.0');
229
+ throw new Error('File not found');
230
+ });
231
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
232
+ const skills = await getInstalledSkills();
233
+ // Should have all 4 skills merged
234
+ expect(skills).toHaveLength(4);
235
+ const skillNames = skills.map((s) => s.name);
236
+ expect(skillNames).toContain('skill-a');
237
+ expect(skillNames).toContain('skill-b');
238
+ expect(skillNames).toContain('skill-c');
239
+ expect(skillNames).toContain('skill-d');
240
+ });
241
+ it('should give local skills precedence over global skills with the same name', async () => {
242
+ const { readdir, readFile, stat } = await import('fs/promises');
243
+ const readdirMock = vi.mocked(readdir);
244
+ const readFileMock = vi.mocked(readFile);
245
+ const statMock = vi.mocked(stat);
246
+ // Both directories have a skill with the same name
247
+ readdirMock.mockImplementation(async (dirPath) => {
248
+ if (dirPath === GLOBAL_SKILLS_DIR) {
249
+ return [{ name: 'shared-skill', isDirectory: () => true }];
250
+ }
251
+ if (dirPath === LOCAL_SKILLS_DIR) {
252
+ return [{ name: 'shared-skill', isDirectory: () => true }];
253
+ }
254
+ throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
255
+ });
256
+ statMock.mockResolvedValue({
257
+ mtime: new Date('2024-01-15'),
258
+ });
259
+ readFileMock.mockImplementation(async (filePath) => {
260
+ const path = String(filePath);
261
+ if (path.includes('shared-skill')) {
262
+ return mockSkillMd('shared-skill', '1.0.0');
263
+ }
264
+ throw new Error('File not found');
265
+ });
266
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
267
+ const skills = await getInstalledSkills();
268
+ // Should only have one skill (deduplicated)
269
+ expect(skills).toHaveLength(1);
270
+ // The local skill should take precedence (verified by path)
271
+ const sharedSkill = skills.find((s) => s.name === 'shared-skill');
272
+ expect(sharedSkill).toBeDefined();
273
+ // Key assertion: local path takes precedence over global
274
+ expect(sharedSkill?.path).toContain(LOCAL_SKILLS_DIR);
275
+ expect(sharedSkill?.path).not.toContain(GLOBAL_SKILLS_DIR);
276
+ });
277
+ it('should handle missing local skills directory gracefully', async () => {
278
+ const { readdir, readFile, stat } = await import('fs/promises');
279
+ const readdirMock = vi.mocked(readdir);
280
+ const readFileMock = vi.mocked(readFile);
281
+ const statMock = vi.mocked(stat);
282
+ // Global exists, local does not
283
+ readdirMock.mockImplementation(async (dirPath) => {
284
+ if (dirPath === GLOBAL_SKILLS_DIR) {
285
+ return [{ name: 'global-only', isDirectory: () => true }];
286
+ }
287
+ // Local directory doesn't exist
288
+ throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
289
+ });
290
+ statMock.mockResolvedValue({
291
+ mtime: new Date('2024-01-15'),
292
+ });
293
+ readFileMock.mockImplementation(async (filePath) => {
294
+ if (String(filePath).includes('global-only')) {
295
+ return mockSkillMd('global-only', '1.0.0');
296
+ }
297
+ throw new Error('File not found');
298
+ });
299
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
300
+ const skills = await getInstalledSkills();
301
+ // Should still return skills from global directory
302
+ expect(skills).toHaveLength(1);
303
+ expect(skills[0]?.name).toBe('global-only');
304
+ });
305
+ it('should handle missing global skills directory gracefully', async () => {
306
+ const { readdir, readFile, stat } = await import('fs/promises');
307
+ const readdirMock = vi.mocked(readdir);
308
+ const readFileMock = vi.mocked(readFile);
309
+ const statMock = vi.mocked(stat);
310
+ // Local exists, global does not
311
+ readdirMock.mockImplementation(async (dirPath) => {
312
+ if (dirPath === LOCAL_SKILLS_DIR) {
313
+ return [{ name: 'local-only', isDirectory: () => true }];
314
+ }
315
+ // Global directory doesn't exist
316
+ throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
317
+ });
318
+ statMock.mockResolvedValue({
319
+ mtime: new Date('2024-01-15'),
320
+ });
321
+ readFileMock.mockImplementation(async (filePath) => {
322
+ if (String(filePath).includes('local-only')) {
323
+ return mockSkillMd('local-only', '1.0.0');
324
+ }
325
+ throw new Error('File not found');
326
+ });
327
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
328
+ const skills = await getInstalledSkills();
329
+ // Should return skills from local directory only
330
+ expect(skills).toHaveLength(1);
331
+ expect(skills[0]?.name).toBe('local-only');
332
+ });
333
+ it('should include source location indicator for each skill', async () => {
334
+ const { readdir, readFile, stat } = await import('fs/promises');
335
+ const readdirMock = vi.mocked(readdir);
336
+ const readFileMock = vi.mocked(readFile);
337
+ const statMock = vi.mocked(stat);
338
+ readdirMock.mockImplementation(async (dirPath) => {
339
+ if (dirPath === GLOBAL_SKILLS_DIR) {
340
+ return [{ name: 'global-skill', isDirectory: () => true }];
341
+ }
342
+ if (dirPath === LOCAL_SKILLS_DIR) {
343
+ return [{ name: 'local-skill', isDirectory: () => true }];
344
+ }
345
+ throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
346
+ });
347
+ statMock.mockResolvedValue({
348
+ mtime: new Date('2024-01-15'),
349
+ });
350
+ readFileMock.mockImplementation(async (filePath) => {
351
+ const path = String(filePath);
352
+ if (path.includes('global-skill'))
353
+ return mockSkillMd('global-skill', '1.0.0');
354
+ if (path.includes('local-skill'))
355
+ return mockSkillMd('local-skill', '1.0.0');
356
+ throw new Error('File not found');
357
+ });
358
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
359
+ const skills = await getInstalledSkills();
360
+ // Skills should indicate their source (global vs local)
361
+ const globalSkill = skills.find((s) => s.name === 'global-skill');
362
+ const localSkill = skills.find((s) => s.name === 'local-skill');
363
+ expect(globalSkill?.path).toContain(GLOBAL_SKILLS_DIR);
364
+ expect(localSkill?.path).toContain(LOCAL_SKILLS_DIR);
365
+ });
366
+ it('should return empty array when both directories are missing', async () => {
367
+ const { readdir } = await import('fs/promises');
368
+ const readdirMock = vi.mocked(readdir);
369
+ // Neither directory exists
370
+ readdirMock.mockRejectedValue(Object.assign(new Error('ENOENT'), { code: 'ENOENT' }));
371
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
372
+ const skills = await getInstalledSkills();
373
+ expect(skills).toEqual([]);
374
+ });
375
+ it('should throw permission errors instead of silently ignoring them', async () => {
376
+ const { readdir } = await import('fs/promises');
377
+ const readdirMock = vi.mocked(readdir);
378
+ // Simulate permission denied error
379
+ readdirMock.mockRejectedValue(Object.assign(new Error('Permission denied'), { code: 'EACCES' }));
380
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
381
+ await expect(getInstalledSkills()).rejects.toThrow('Permission denied');
382
+ });
383
+ it('should throw when SKILL.md has permission error', async () => {
384
+ const { readdir, readFile, stat } = await import('fs/promises');
385
+ const readdirMock = vi.mocked(readdir);
386
+ const readFileMock = vi.mocked(readFile);
387
+ const statMock = vi.mocked(stat);
388
+ readdirMock.mockImplementation(async (dirPath) => {
389
+ if (dirPath === GLOBAL_SKILLS_DIR) {
390
+ return [{ name: 'protected-skill', isDirectory: () => true }];
391
+ }
392
+ throw Object.assign(new Error('ENOENT'), { code: 'ENOENT' });
393
+ });
394
+ // stat succeeds for SKILL.md path
395
+ statMock.mockResolvedValue({
396
+ mtime: new Date('2024-01-15'),
397
+ });
398
+ // But reading the file fails with permission error
399
+ readFileMock.mockRejectedValue(Object.assign(new Error('Permission denied'), { code: 'EACCES' }));
400
+ const { getInstalledSkills } = await import('../src/commands/manage.js');
401
+ await expect(getInstalledSkills()).rejects.toThrow('Permission denied');
402
+ });
403
+ });
128
404
  describe('displaySkillsTable', () => {
129
405
  it('is exported from module', async () => {
130
406
  const module = await import('../src/commands/manage.js');
@@ -1 +1 @@
1
- {"version":3,"file":"manage.test.js","sourceRoot":"","sources":["../../tests/manage.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manage.test.js","sourceRoot":"","sources":["../../tests/manage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * SMI-1629: Node version detection with helpful errors
3
+ *
4
+ * Tests for the node-version utility that validates the runtime
5
+ * Node.js version against the minimum required version.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=node-version.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-version.test.d.ts","sourceRoot":"","sources":["../../tests/node-version.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * SMI-1629: Node version detection with helpful errors
3
+ *
4
+ * Tests for the node-version utility that validates the runtime
5
+ * Node.js version against the minimum required version.
6
+ */
7
+ import { describe, it, expect, vi, afterEach } from 'vitest';
8
+ describe('SMI-1629: Node version detection', () => {
9
+ // Store original process.version
10
+ const originalVersion = process.version;
11
+ afterEach(() => {
12
+ // Restore original version after each test
13
+ vi.restoreAllMocks();
14
+ Object.defineProperty(process, 'version', {
15
+ value: originalVersion,
16
+ writable: true,
17
+ configurable: true,
18
+ });
19
+ });
20
+ describe('getMinNodeVersion', () => {
21
+ it('returns 22.0.0 as minimum version', async () => {
22
+ const { getMinNodeVersion } = await import('../src/utils/node-version.js');
23
+ expect(getMinNodeVersion()).toBe('22.0.0');
24
+ });
25
+ });
26
+ describe('getCurrentNodeVersion', () => {
27
+ it('returns the current Node.js version without v prefix', async () => {
28
+ Object.defineProperty(process, 'version', {
29
+ value: 'v22.5.0',
30
+ writable: true,
31
+ configurable: true,
32
+ });
33
+ // Re-import to get fresh module
34
+ vi.resetModules();
35
+ const { getCurrentNodeVersion } = await import('../src/utils/node-version.js');
36
+ expect(getCurrentNodeVersion()).toBe('22.5.0');
37
+ });
38
+ it('handles versions with multiple digits', async () => {
39
+ Object.defineProperty(process, 'version', {
40
+ value: 'v18.19.1',
41
+ writable: true,
42
+ configurable: true,
43
+ });
44
+ vi.resetModules();
45
+ const { getCurrentNodeVersion } = await import('../src/utils/node-version.js');
46
+ expect(getCurrentNodeVersion()).toBe('18.19.1');
47
+ });
48
+ });
49
+ describe('checkNodeVersion', () => {
50
+ it('returns null when version meets requirement', async () => {
51
+ Object.defineProperty(process, 'version', {
52
+ value: 'v22.0.0',
53
+ writable: true,
54
+ configurable: true,
55
+ });
56
+ vi.resetModules();
57
+ const { checkNodeVersion } = await import('../src/utils/node-version.js');
58
+ const result = checkNodeVersion();
59
+ expect(result).toBeNull();
60
+ });
61
+ it('returns null when version exceeds requirement', async () => {
62
+ Object.defineProperty(process, 'version', {
63
+ value: 'v22.5.1',
64
+ writable: true,
65
+ configurable: true,
66
+ });
67
+ vi.resetModules();
68
+ const { checkNodeVersion } = await import('../src/utils/node-version.js');
69
+ const result = checkNodeVersion();
70
+ expect(result).toBeNull();
71
+ });
72
+ it('returns null for Node 23+', async () => {
73
+ Object.defineProperty(process, 'version', {
74
+ value: 'v23.0.0',
75
+ writable: true,
76
+ configurable: true,
77
+ });
78
+ vi.resetModules();
79
+ const { checkNodeVersion } = await import('../src/utils/node-version.js');
80
+ const result = checkNodeVersion();
81
+ expect(result).toBeNull();
82
+ });
83
+ it('returns error message when version is too low', async () => {
84
+ Object.defineProperty(process, 'version', {
85
+ value: 'v18.19.0',
86
+ writable: true,
87
+ configurable: true,
88
+ });
89
+ vi.resetModules();
90
+ const { checkNodeVersion } = await import('../src/utils/node-version.js');
91
+ const result = checkNodeVersion();
92
+ expect(result).not.toBeNull();
93
+ expect(typeof result).toBe('string');
94
+ });
95
+ it('includes current version in error message', async () => {
96
+ Object.defineProperty(process, 'version', {
97
+ value: 'v20.10.0',
98
+ writable: true,
99
+ configurable: true,
100
+ });
101
+ vi.resetModules();
102
+ const { checkNodeVersion } = await import('../src/utils/node-version.js');
103
+ const result = checkNodeVersion();
104
+ expect(result).toContain('20.10.0');
105
+ });
106
+ it('includes required version in error message', async () => {
107
+ Object.defineProperty(process, 'version', {
108
+ value: 'v18.0.0',
109
+ writable: true,
110
+ configurable: true,
111
+ });
112
+ vi.resetModules();
113
+ const { checkNodeVersion } = await import('../src/utils/node-version.js');
114
+ const result = checkNodeVersion();
115
+ expect(result).toContain('22.0.0');
116
+ });
117
+ it('includes upgrade instructions in error message', async () => {
118
+ Object.defineProperty(process, 'version', {
119
+ value: 'v18.0.0',
120
+ writable: true,
121
+ configurable: true,
122
+ });
123
+ vi.resetModules();
124
+ const { checkNodeVersion } = await import('../src/utils/node-version.js');
125
+ const result = checkNodeVersion();
126
+ expect(result).toMatch(/upgrade|install|nvm|download/i);
127
+ });
128
+ it('handles Node 21 as incompatible', async () => {
129
+ Object.defineProperty(process, 'version', {
130
+ value: 'v21.7.3',
131
+ writable: true,
132
+ configurable: true,
133
+ });
134
+ vi.resetModules();
135
+ const { checkNodeVersion } = await import('../src/utils/node-version.js');
136
+ const result = checkNodeVersion();
137
+ expect(result).not.toBeNull();
138
+ expect(result).toContain('21.7.3');
139
+ });
140
+ });
141
+ describe('compareVersions', () => {
142
+ it('returns 0 for equal versions', async () => {
143
+ const { compareVersions } = await import('../src/utils/node-version.js');
144
+ expect(compareVersions('22.0.0', '22.0.0')).toBe(0);
145
+ });
146
+ it('returns positive when first version is greater (major)', async () => {
147
+ const { compareVersions } = await import('../src/utils/node-version.js');
148
+ expect(compareVersions('23.0.0', '22.0.0')).toBeGreaterThan(0);
149
+ });
150
+ it('returns negative when first version is lesser (major)', async () => {
151
+ const { compareVersions } = await import('../src/utils/node-version.js');
152
+ expect(compareVersions('21.0.0', '22.0.0')).toBeLessThan(0);
153
+ });
154
+ it('returns positive when first version is greater (minor)', async () => {
155
+ const { compareVersions } = await import('../src/utils/node-version.js');
156
+ expect(compareVersions('22.5.0', '22.0.0')).toBeGreaterThan(0);
157
+ });
158
+ it('returns negative when first version is lesser (minor)', async () => {
159
+ const { compareVersions } = await import('../src/utils/node-version.js');
160
+ expect(compareVersions('22.0.0', '22.5.0')).toBeLessThan(0);
161
+ });
162
+ it('returns positive when first version is greater (patch)', async () => {
163
+ const { compareVersions } = await import('../src/utils/node-version.js');
164
+ expect(compareVersions('22.0.1', '22.0.0')).toBeGreaterThan(0);
165
+ });
166
+ it('returns negative when first version is lesser (patch)', async () => {
167
+ const { compareVersions } = await import('../src/utils/node-version.js');
168
+ expect(compareVersions('22.0.0', '22.0.1')).toBeLessThan(0);
169
+ });
170
+ it('handles versions with different segment counts', async () => {
171
+ const { compareVersions } = await import('../src/utils/node-version.js');
172
+ // 22 should be treated as 22.0.0
173
+ expect(compareVersions('22', '22.0.0')).toBe(0);
174
+ });
175
+ it('handles pre-release version tags', async () => {
176
+ const { compareVersions } = await import('../src/utils/node-version.js');
177
+ // Pre-release suffix should be stripped, treating 22.0.0-beta.1 as 22.0.0
178
+ expect(compareVersions('22.0.0-beta.1', '22.0.0')).toBe(0);
179
+ expect(compareVersions('22.0.0-nightly', '21.0.0')).toBeGreaterThan(0);
180
+ expect(compareVersions('22.0.0-alpha', '23.0.0')).toBeLessThan(0);
181
+ });
182
+ });
183
+ describe('formatVersionError', () => {
184
+ it('produces a well-formatted error message', async () => {
185
+ const { formatVersionError } = await import('../src/utils/node-version.js');
186
+ const error = formatVersionError('18.0.0', '22.0.0');
187
+ // Should have clear structure
188
+ expect(error).toContain('18.0.0');
189
+ expect(error).toContain('22.0.0');
190
+ expect(error.length).toBeGreaterThan(50); // Should be reasonably detailed
191
+ });
192
+ it('includes node version manager suggestions', async () => {
193
+ const { formatVersionError } = await import('../src/utils/node-version.js');
194
+ const error = formatVersionError('18.0.0', '22.0.0');
195
+ // Should mention at least one version manager or download option
196
+ expect(error).toMatch(/nvm|fnm|volta|nodejs\.org/i);
197
+ });
198
+ });
199
+ });
200
+ //# sourceMappingURL=node-version.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-version.test.js","sourceRoot":"","sources":["../../tests/node-version.test.ts"],"names":[],"mappings":"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"}