@skillsmith/cli 0.2.7 → 0.3.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.
- package/README.md +3 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/author.d.ts +16 -2
- package/dist/src/commands/author.d.ts.map +1 -1
- package/dist/src/commands/author.js +96 -51
- package/dist/src/commands/author.js.map +1 -1
- package/dist/src/commands/index.d.ts +1 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/sync.d.ts +21 -0
- package/dist/src/commands/sync.d.ts.map +1 -0
- package/dist/src/commands/sync.js +413 -0
- package/dist/src/commands/sync.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -2
- package/dist/src/index.js.map +1 -1
- package/dist/tests/author.test.js +85 -0
- package/dist/tests/author.test.js.map +1 -1
- package/dist/tests/e2e/author.e2e.test.js +341 -21
- package/dist/tests/e2e/author.e2e.test.js.map +1 -1
- package/dist/tests/e2e/utils/index.d.ts +4 -0
- package/dist/tests/e2e/utils/index.d.ts.map +1 -1
- package/dist/tests/e2e/utils/index.js +4 -0
- package/dist/tests/e2e/utils/index.js.map +1 -1
- package/dist/tests/e2e/utils/mock-github.d.ts +23 -0
- package/dist/tests/e2e/utils/mock-github.d.ts.map +1 -0
- package/dist/tests/e2e/utils/mock-github.js +60 -0
- package/dist/tests/e2e/utils/mock-github.js.map +1 -0
- package/dist/tests/e2e/utils/mock-prompts.d.ts +19 -0
- package/dist/tests/e2e/utils/mock-prompts.d.ts.map +1 -0
- package/dist/tests/e2e/utils/mock-prompts.js +48 -0
- package/dist/tests/e2e/utils/mock-prompts.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../tests/e2e/utils/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../tests/e2e/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* E2E Test Utilities Index
|
|
3
|
+
*
|
|
4
|
+
* SMI-1475: Added mock utilities for E2E tests
|
|
3
5
|
*/
|
|
4
6
|
export * from './hardcoded-detector.js';
|
|
5
7
|
export * from './linear-reporter.js';
|
|
6
8
|
export * from './baseline-collector.js';
|
|
9
|
+
export * from './mock-prompts.js';
|
|
10
|
+
export * from './mock-github.js';
|
|
7
11
|
export * from '../test-config.js';
|
|
8
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tests/e2e/utils/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tests/e2e/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1474: GitHub API mock utilities for E2E tests
|
|
3
|
+
*
|
|
4
|
+
* Provides mock responses for GitHub API calls without real API access.
|
|
5
|
+
*/
|
|
6
|
+
export interface MockGitHubSkill {
|
|
7
|
+
name: string;
|
|
8
|
+
full_name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
html_url: string;
|
|
11
|
+
topics: string[];
|
|
12
|
+
stargazers_count: number;
|
|
13
|
+
}
|
|
14
|
+
export declare const MOCK_SKILLS: MockGitHubSkill[];
|
|
15
|
+
/**
|
|
16
|
+
* Setup mock GitHub API responses
|
|
17
|
+
*/
|
|
18
|
+
export declare function setupMockGitHub(customSkills?: MockGitHubSkill[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* Clear GitHub API mocks
|
|
21
|
+
*/
|
|
22
|
+
export declare function clearMockGitHub(): void;
|
|
23
|
+
//# sourceMappingURL=mock-github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-github.d.ts","sourceRoot":"","sources":["../../../../tests/e2e/utils/mock-github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,WAAW,EAAE,eAAe,EAiBxC,CAAA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,QA0B/D;AAED;;GAEG;AACH,wBAAgB,eAAe,SAE9B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1474: GitHub API mock utilities for E2E tests
|
|
3
|
+
*
|
|
4
|
+
* Provides mock responses for GitHub API calls without real API access.
|
|
5
|
+
*/
|
|
6
|
+
import { vi } from 'vitest';
|
|
7
|
+
export const MOCK_SKILLS = [
|
|
8
|
+
{
|
|
9
|
+
name: 'commit-skill',
|
|
10
|
+
full_name: 'anthropics/commit-skill',
|
|
11
|
+
description: 'A skill for git commits',
|
|
12
|
+
html_url: 'https://github.com/anthropics/commit-skill',
|
|
13
|
+
topics: ['claude-skill', 'git', 'commit'],
|
|
14
|
+
stargazers_count: 100,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'test-helper',
|
|
18
|
+
full_name: 'community/test-helper',
|
|
19
|
+
description: 'Testing utilities skill',
|
|
20
|
+
html_url: 'https://github.com/community/test-helper',
|
|
21
|
+
topics: ['claude-skill', 'testing'],
|
|
22
|
+
stargazers_count: 50,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Setup mock GitHub API responses
|
|
27
|
+
*/
|
|
28
|
+
export function setupMockGitHub(customSkills) {
|
|
29
|
+
const skills = customSkills || MOCK_SKILLS;
|
|
30
|
+
// Mock global fetch for GitHub API calls
|
|
31
|
+
const originalFetch = global.fetch;
|
|
32
|
+
global.fetch = vi.fn().mockImplementation(async (url) => {
|
|
33
|
+
if (url.includes('api.github.com/search/repositories')) {
|
|
34
|
+
return {
|
|
35
|
+
ok: true,
|
|
36
|
+
json: async () => ({
|
|
37
|
+
total_count: skills.length,
|
|
38
|
+
items: skills,
|
|
39
|
+
}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (url.includes('api.github.com/repos/')) {
|
|
43
|
+
const repoName = url.split('/repos/')[1]?.split('/')[1];
|
|
44
|
+
const skill = skills.find((s) => s.name === repoName);
|
|
45
|
+
return {
|
|
46
|
+
ok: !!skill,
|
|
47
|
+
json: async () => skill || { message: 'Not Found' },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Fall back to original fetch for non-GitHub URLs
|
|
51
|
+
return originalFetch(url);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Clear GitHub API mocks
|
|
56
|
+
*/
|
|
57
|
+
export function clearMockGitHub() {
|
|
58
|
+
vi.restoreAllMocks();
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=mock-github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-github.js","sourceRoot":"","sources":["../../../../tests/e2e/utils/mock-github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAW3B,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C;QACE,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,yBAAyB;QACpC,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,4CAA4C;QACtD,MAAM,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,CAAC;QACzC,gBAAgB,EAAE,GAAG;KACtB;IACD;QACE,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,uBAAuB;QAClC,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,0CAA0C;QACpD,MAAM,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC;QACnC,gBAAgB,EAAE,EAAE;KACrB;CACF,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,YAAgC;IAC9D,MAAM,MAAM,GAAG,YAAY,IAAI,WAAW,CAAA;IAE1C,yCAAyC;IACzC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAA;IAClC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC9D,IAAI,GAAG,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EAAE,CAAC;YACvD,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;oBACjB,WAAW,EAAE,MAAM,CAAC,MAAM;oBAC1B,KAAK,EAAE,MAAM;iBACd,CAAC;aACH,CAAA;QACH,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;YACrD,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,KAAK;gBACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE;aACpD,CAAA;QACH,CAAC;QACD,kDAAkD;QAClD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,EAAE,CAAC,eAAe,EAAE,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1473: Mock prompt utilities for E2E tests
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities to mock @inquirer/prompts for non-interactive testing.
|
|
5
|
+
*/
|
|
6
|
+
export interface MockPromptResponses {
|
|
7
|
+
input?: Record<string, string>;
|
|
8
|
+
confirm?: Record<string, boolean>;
|
|
9
|
+
select?: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Setup mock responses for inquirer prompts
|
|
13
|
+
*/
|
|
14
|
+
export declare function setupMockPrompts(responses: MockPromptResponses): void;
|
|
15
|
+
/**
|
|
16
|
+
* Clear all mock prompts
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearMockPrompts(): void;
|
|
19
|
+
//# sourceMappingURL=mock-prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-prompts.d.ts","sourceRoot":"","sources":["../../../../tests/e2e/utils/mock-prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,QA+B9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,SAE/B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-1473: Mock prompt utilities for E2E tests
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities to mock @inquirer/prompts for non-interactive testing.
|
|
5
|
+
*/
|
|
6
|
+
import { vi } from 'vitest';
|
|
7
|
+
/**
|
|
8
|
+
* Setup mock responses for inquirer prompts
|
|
9
|
+
*/
|
|
10
|
+
export function setupMockPrompts(responses) {
|
|
11
|
+
// Mock the @inquirer/prompts module
|
|
12
|
+
vi.mock('@inquirer/prompts', () => ({
|
|
13
|
+
input: vi.fn().mockImplementation(async (opts) => {
|
|
14
|
+
const key = opts.message.toLowerCase();
|
|
15
|
+
for (const [pattern, value] of Object.entries(responses.input || {})) {
|
|
16
|
+
if (key.includes(pattern.toLowerCase())) {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return 'test-value';
|
|
21
|
+
}),
|
|
22
|
+
confirm: vi.fn().mockImplementation(async (opts) => {
|
|
23
|
+
const key = opts.message.toLowerCase();
|
|
24
|
+
for (const [pattern, value] of Object.entries(responses.confirm || {})) {
|
|
25
|
+
if (key.includes(pattern.toLowerCase())) {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}),
|
|
31
|
+
select: vi.fn().mockImplementation(async (opts) => {
|
|
32
|
+
const key = opts.message.toLowerCase();
|
|
33
|
+
for (const [pattern, value] of Object.entries(responses.select || {})) {
|
|
34
|
+
if (key.includes(pattern.toLowerCase())) {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return 'development';
|
|
39
|
+
}),
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Clear all mock prompts
|
|
44
|
+
*/
|
|
45
|
+
export function clearMockPrompts() {
|
|
46
|
+
vi.clearAllMocks();
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=mock-prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-prompts.js","sourceRoot":"","sources":["../../../../tests/e2e/utils/mock-prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAQ3B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA8B;IAC7D,oCAAoC;IACpC,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAyB,EAAE,EAAE;YACpE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;YACtC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;gBACrE,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACxC,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YACD,OAAO,YAAY,CAAA;QACrB,CAAC,CAAC;QACF,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAyB,EAAE,EAAE;YACtE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;YACtC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;gBACvE,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACxC,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC;QACF,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAyB,EAAE,EAAE;YACrE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;YACtC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gBACtE,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACxC,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAA;QACtB,CAAC,CAAC;KACH,CAAC,CAAC,CAAA;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,EAAE,CAAC,aAAa,EAAE,CAAA;AACpB,CAAC"}
|