uixskills 0.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.
- package/README.md +71 -0
- package/dist/add.d.ts +10 -0
- package/dist/add.d.ts.map +1 -0
- package/dist/add.js +83 -0
- package/dist/add.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/list.d.ts +10 -0
- package/dist/list.d.ts.map +1 -0
- package/dist/list.js +46 -0
- package/dist/list.js.map +1 -0
- package/dist/search.d.ts +9 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +50 -0
- package/dist/search.js.map +1 -0
- package/dist/utils.d.ts +47 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +163 -0
- package/dist/utils.js.map +1 -0
- package/package.json +47 -0
package/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# UIXskills CLI
|
|
2
|
+
|
|
3
|
+
Install UI/UX skills from the [UIXskills Gallery](https://uixskills.com/skills) with a single command.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Using npx (no installation required)
|
|
9
|
+
npx uixskills add <owner/repo>
|
|
10
|
+
|
|
11
|
+
# Or install globally
|
|
12
|
+
npm install -g uixskills
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Commands
|
|
16
|
+
|
|
17
|
+
### Add a skill
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Install a skill from GitHub
|
|
21
|
+
npx uixskills add hooosberg/react-glassmorphism
|
|
22
|
+
|
|
23
|
+
# Install to a custom directory
|
|
24
|
+
npx uixskills add hooosberg/react-glassmorphism --dir ./my-skills
|
|
25
|
+
|
|
26
|
+
# Force overwrite existing files
|
|
27
|
+
npx uixskills add hooosberg/react-glassmorphism --force
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### List top skills
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Show top 10 skills (all time)
|
|
34
|
+
npx uixskills list
|
|
35
|
+
|
|
36
|
+
# Show top 20 trending skills
|
|
37
|
+
npx uixskills list -n 20 --trending
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Search for skills
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Search for glassmorphism skills
|
|
44
|
+
npx uixskills search glassmorphism
|
|
45
|
+
|
|
46
|
+
# Search with more results
|
|
47
|
+
npx uixskills search button -n 20
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Creating a Skill
|
|
51
|
+
|
|
52
|
+
To make your GitHub repository installable via UIXskills, add a `uixskill.json` file:
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"name": "my-awesome-skill",
|
|
57
|
+
"version": "1.0.0",
|
|
58
|
+
"description": "A beautiful UI component skill",
|
|
59
|
+
"files": [
|
|
60
|
+
"components/",
|
|
61
|
+
"styles/",
|
|
62
|
+
"README.md"
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Then submit your skill at [uixskills.com/skills/submit](https://uixskills.com/skills/submit).
|
|
68
|
+
|
|
69
|
+
## License
|
|
70
|
+
|
|
71
|
+
MIT
|
package/dist/add.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../src/add.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,UAAU,UAAU;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2E/E"}
|
package/dist/add.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Add command - Install a skill from GitHub
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.addSkill = addSkill;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const ora_1 = __importDefault(require("ora"));
|
|
12
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const utils_js_1 = require("./utils.js");
|
|
15
|
+
async function addSkill(repo, options) {
|
|
16
|
+
// Validate repo format
|
|
17
|
+
const repoPattern = /^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+$/;
|
|
18
|
+
if (!repoPattern.test(repo)) {
|
|
19
|
+
console.error(chalk_1.default.red('Error: Invalid repository format. Use: owner/repo'));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
const [owner, repoName] = repo.split('/');
|
|
23
|
+
const spinner = (0, ora_1.default)(`Fetching skill from ${chalk_1.default.cyan(repo)}...`).start();
|
|
24
|
+
try {
|
|
25
|
+
// 1. Fetch skill manifest
|
|
26
|
+
spinner.text = 'Fetching skill manifest...';
|
|
27
|
+
const manifest = await (0, utils_js_1.fetchSkillManifest)(owner, repoName);
|
|
28
|
+
if (!manifest) {
|
|
29
|
+
spinner.fail(chalk_1.default.red('No skill manifest found (uixskill.json or skill.json)'));
|
|
30
|
+
console.log(chalk_1.default.yellow('\nTo create a valid skill, add a uixskill.json file to your repo:'));
|
|
31
|
+
console.log(chalk_1.default.gray(`
|
|
32
|
+
{
|
|
33
|
+
"name": "my-skill",
|
|
34
|
+
"version": "1.0.0",
|
|
35
|
+
"description": "A great UI/UX skill",
|
|
36
|
+
"files": ["components/", "styles/"]
|
|
37
|
+
}
|
|
38
|
+
`));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
// 2. Create target directory
|
|
42
|
+
const targetDir = path_1.default.resolve(options.dir, manifest.name || repoName);
|
|
43
|
+
try {
|
|
44
|
+
await promises_1.default.access(targetDir);
|
|
45
|
+
if (!options.force) {
|
|
46
|
+
spinner.fail(chalk_1.default.red(`Directory already exists: ${targetDir}`));
|
|
47
|
+
console.log(chalk_1.default.yellow('Use --force to overwrite existing files'));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Directory doesn't exist, create it
|
|
53
|
+
await promises_1.default.mkdir(targetDir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
// 3. Download skill files
|
|
56
|
+
spinner.text = 'Downloading skill files...';
|
|
57
|
+
const files = await (0, utils_js_1.downloadSkillFiles)(owner, repoName, manifest.files || ['']);
|
|
58
|
+
// 4. Write files to target directory
|
|
59
|
+
spinner.text = 'Installing skill...';
|
|
60
|
+
for (const file of files) {
|
|
61
|
+
const filePath = path_1.default.join(targetDir, file.path);
|
|
62
|
+
await promises_1.default.mkdir(path_1.default.dirname(filePath), { recursive: true });
|
|
63
|
+
await promises_1.default.writeFile(filePath, file.content);
|
|
64
|
+
}
|
|
65
|
+
// 5. Record installation (for stats)
|
|
66
|
+
await (0, utils_js_1.recordInstall)(owner, repoName);
|
|
67
|
+
spinner.succeed(chalk_1.default.green(`Skill installed successfully!`));
|
|
68
|
+
console.log(`
|
|
69
|
+
${chalk_1.default.bold('Installed:')} ${chalk_1.default.cyan(manifest.name || repoName)}
|
|
70
|
+
${chalk_1.default.bold('Location:')} ${chalk_1.default.gray(targetDir)}
|
|
71
|
+
${chalk_1.default.bold('Files:')} ${files.length} files
|
|
72
|
+
|
|
73
|
+
${chalk_1.default.dim('To use this skill, import from:')}
|
|
74
|
+
${chalk_1.default.yellow(`import { ... } from '${options.dir}/${manifest.name || repoName}'`)}
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
spinner.fail(chalk_1.default.red('Failed to install skill'));
|
|
79
|
+
console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=add.js.map
|
package/dist/add.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../src/add.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* UIXskills CLI
|
|
4
|
+
* Install UI/UX skills from the UIXskills gallery
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx uixskills add <owner/repo>
|
|
8
|
+
* npx uixskills list
|
|
9
|
+
* npx uixskills search <query>
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* UIXskills CLI
|
|
5
|
+
* Install UI/UX skills from the UIXskills gallery
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx uixskills add <owner/repo>
|
|
9
|
+
* npx uixskills list
|
|
10
|
+
* npx uixskills search <query>
|
|
11
|
+
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const commander_1 = require("commander");
|
|
17
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
18
|
+
const add_js_1 = require("./add.js");
|
|
19
|
+
const list_js_1 = require("./list.js");
|
|
20
|
+
const search_js_1 = require("./search.js");
|
|
21
|
+
const program = new commander_1.Command();
|
|
22
|
+
// ASCII Logo
|
|
23
|
+
const logo = `
|
|
24
|
+
${chalk_1.default.blue('╔═══════════════════════════════════════╗')}
|
|
25
|
+
${chalk_1.default.blue('║')} ${chalk_1.default.bold.white('UIXSKILLS')} - UI/UX Skills Directory ${chalk_1.default.blue('║')}
|
|
26
|
+
${chalk_1.default.blue('╚═══════════════════════════════════════╝')}
|
|
27
|
+
`;
|
|
28
|
+
program
|
|
29
|
+
.name('uixskills')
|
|
30
|
+
.description('CLI tool for installing UI/UX skills from the UIXskills gallery')
|
|
31
|
+
.version('0.1.0')
|
|
32
|
+
.addHelpText('beforeAll', logo);
|
|
33
|
+
// Add command
|
|
34
|
+
program
|
|
35
|
+
.command('add <repo>')
|
|
36
|
+
.description('Install a skill from a GitHub repository (format: owner/repo)')
|
|
37
|
+
.option('-d, --dir <directory>', 'Target directory for installation', './.uixskills')
|
|
38
|
+
.option('-f, --force', 'Overwrite existing files', false)
|
|
39
|
+
.action(async (repo, options) => {
|
|
40
|
+
await (0, add_js_1.addSkill)(repo, options);
|
|
41
|
+
});
|
|
42
|
+
// List command
|
|
43
|
+
program
|
|
44
|
+
.command('list')
|
|
45
|
+
.description('List top skills from the UIXskills gallery')
|
|
46
|
+
.option('-n, --number <count>', 'Number of skills to show', '10')
|
|
47
|
+
.option('-t, --trending', 'Show trending skills (24h)', false)
|
|
48
|
+
.action(async (options) => {
|
|
49
|
+
await (0, list_js_1.listSkills)(options);
|
|
50
|
+
});
|
|
51
|
+
// Search command
|
|
52
|
+
program
|
|
53
|
+
.command('search <query>')
|
|
54
|
+
.description('Search for skills in the gallery')
|
|
55
|
+
.option('-n, --number <count>', 'Number of results to show', '10')
|
|
56
|
+
.action(async (query, options) => {
|
|
57
|
+
await (0, search_js_1.searchSkills)(query, options);
|
|
58
|
+
});
|
|
59
|
+
// Parse arguments
|
|
60
|
+
program.parse();
|
|
61
|
+
// Show help if no command provided
|
|
62
|
+
if (!process.argv.slice(2).length) {
|
|
63
|
+
console.log(logo);
|
|
64
|
+
program.outputHelp();
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;GAQG;;;;;AAEH,yCAAoC;AACpC,kDAA0B;AAC1B,qCAAoC;AACpC,uCAAuC;AACvC,2CAA2C;AAE3C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,aAAa;AACb,MAAM,IAAI,GAAG;EACX,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC;EACvD,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC;EAC/F,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC;CACxD,CAAC;AAEF,OAAO;KACF,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAEpC,cAAc;AACd,OAAO;KACF,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,uBAAuB,EAAE,mCAAmC,EAAE,cAAc,CAAC;KACpF,MAAM,CAAC,aAAa,EAAE,0BAA0B,EAAE,KAAK,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAwC,EAAE,EAAE;IACrE,MAAM,IAAA,iBAAQ,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEP,eAAe;AACf,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,EAAE,IAAI,CAAC;KAChE,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,KAAK,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,OAA8C,EAAE,EAAE;IAC7D,MAAM,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEP,iBAAiB;AACjB,OAAO;KACF,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,IAAI,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA2B,EAAE,EAAE;IACzD,MAAM,IAAA,wBAAY,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEP,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,UAAU,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/list.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,UAAU,WAAW;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCpE"}
|
package/dist/list.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* List command - Show top skills from the gallery
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.listSkills = listSkills;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const ora_1 = __importDefault(require("ora"));
|
|
12
|
+
const utils_js_1 = require("./utils.js");
|
|
13
|
+
async function listSkills(options) {
|
|
14
|
+
const spinner = (0, ora_1.default)('Fetching skills...').start();
|
|
15
|
+
try {
|
|
16
|
+
const limit = parseInt(options.number, 10) || 10;
|
|
17
|
+
const skills = await (0, utils_js_1.fetchLeaderboard)(limit, options.trending);
|
|
18
|
+
spinner.stop();
|
|
19
|
+
console.log(`
|
|
20
|
+
${chalk_1.default.bold.white('SKILLS LEADERBOARD')} ${options.trending ? chalk_1.default.yellow('(Trending 24h)') : chalk_1.default.gray('(All Time)')}
|
|
21
|
+
${'─'.repeat(60)}
|
|
22
|
+
`);
|
|
23
|
+
// Header
|
|
24
|
+
console.log(chalk_1.default.gray('#'.padEnd(4)) +
|
|
25
|
+
chalk_1.default.gray('SKILL'.padEnd(35)) +
|
|
26
|
+
chalk_1.default.gray('INSTALLS'.padStart(10)));
|
|
27
|
+
console.log(chalk_1.default.gray('─'.repeat(60)));
|
|
28
|
+
// Skills list
|
|
29
|
+
skills.forEach((skill, index) => {
|
|
30
|
+
const rank = chalk_1.default.gray(`${index + 1}`.padEnd(4));
|
|
31
|
+
const name = chalk_1.default.white(skill.title.toLowerCase().padEnd(20));
|
|
32
|
+
const repo = chalk_1.default.gray(skill.github_full_path?.padEnd(15) || '');
|
|
33
|
+
const installs = chalk_1.default.cyan((0, utils_js_1.formatInstalls)(skill.install_count).padStart(10));
|
|
34
|
+
console.log(`${rank}${name}${repo}${installs}`);
|
|
35
|
+
});
|
|
36
|
+
console.log(`
|
|
37
|
+
${chalk_1.default.dim('Install a skill:')} ${chalk_1.default.cyan('npx uixskills add <owner/repo>')}
|
|
38
|
+
`);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
spinner.fail(chalk_1.default.red('Failed to fetch skills'));
|
|
42
|
+
console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=list.js.map
|
package/dist/list.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAWH,gCAyCC;AAlDD,kDAA0B;AAC1B,8CAAsB;AACtB,yCAA8D;AAOvD,KAAK,UAAU,UAAU,CAAC,OAAoB;IACjD,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAgB,EAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE/D,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO,CAAC,GAAG,CAAC;EAClB,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC;EACtH,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;CACf,CAAC,CAAC;QAEK,SAAS;QACT,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CACtC,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,cAAc;QACd,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,eAAK,CAAC,IAAI,CAAC,IAAA,yBAAc,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC;EAClB,eAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;KAC1E,CAAC,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
|
package/dist/search.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,UAAU,aAAa;IACnB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvF"}
|
package/dist/search.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Search command - Search for skills in the gallery
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.searchSkills = searchSkills;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const ora_1 = __importDefault(require("ora"));
|
|
12
|
+
const utils_js_1 = require("./utils.js");
|
|
13
|
+
async function searchSkills(query, options) {
|
|
14
|
+
const spinner = (0, ora_1.default)(`Searching for "${query}"...`).start();
|
|
15
|
+
try {
|
|
16
|
+
const limit = parseInt(options.number, 10) || 10;
|
|
17
|
+
const skills = await (0, utils_js_1.searchSkillsApi)(query, limit);
|
|
18
|
+
spinner.stop();
|
|
19
|
+
if (skills.length === 0) {
|
|
20
|
+
console.log(chalk_1.default.yellow(`No skills found for "${query}"`));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
console.log(`
|
|
24
|
+
${chalk_1.default.bold.white('SEARCH RESULTS')} for "${chalk_1.default.cyan(query)}"
|
|
25
|
+
${'─'.repeat(60)}
|
|
26
|
+
`);
|
|
27
|
+
// Header
|
|
28
|
+
console.log(chalk_1.default.gray('#'.padEnd(4)) +
|
|
29
|
+
chalk_1.default.gray('SKILL'.padEnd(35)) +
|
|
30
|
+
chalk_1.default.gray('INSTALLS'.padStart(10)));
|
|
31
|
+
console.log(chalk_1.default.gray('─'.repeat(60)));
|
|
32
|
+
// Skills list
|
|
33
|
+
skills.forEach((skill, index) => {
|
|
34
|
+
const rank = chalk_1.default.gray(`${index + 1}`.padEnd(4));
|
|
35
|
+
const name = chalk_1.default.white(skill.title.toLowerCase().padEnd(20));
|
|
36
|
+
const repo = chalk_1.default.gray((skill.github_full_path || '').padEnd(15));
|
|
37
|
+
const installs = chalk_1.default.cyan((0, utils_js_1.formatInstalls)(skill.install_count).padStart(10));
|
|
38
|
+
console.log(`${rank}${name}${repo}${installs}`);
|
|
39
|
+
});
|
|
40
|
+
console.log(`
|
|
41
|
+
${chalk_1.default.dim('Install a skill:')} ${chalk_1.default.cyan('npx uixskills add <owner/repo>')}
|
|
42
|
+
`);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
spinner.fail(chalk_1.default.red('Failed to search skills'));
|
|
46
|
+
console.error(chalk_1.default.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAUH,oCA8CC;AAtDD,kDAA0B;AAC1B,8CAAsB;AACtB,yCAA6D;AAMtD,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,OAAsB;IACpE,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,kBAAkB,KAAK,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IAE3D,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAe,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEnD,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,wBAAwB,KAAK,GAAG,CAAC,CAAC,CAAC;YAC5D,OAAO;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC;EAClB,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC;EAC5D,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;CACf,CAAC,CAAC;QAEK,SAAS;QACT,OAAO,CAAC,GAAG,CACP,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CACtC,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,cAAc;QACd,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,eAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACnE,MAAM,QAAQ,GAAG,eAAK,CAAC,IAAI,CAAC,IAAA,yBAAc,EAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC;EAClB,eAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;KAC1E,CAAC,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for the UIXskills CLI
|
|
3
|
+
*/
|
|
4
|
+
export interface SkillManifest {
|
|
5
|
+
name: string;
|
|
6
|
+
version?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
files?: string[];
|
|
9
|
+
dependencies?: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
export interface Skill {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
github_owner?: string;
|
|
15
|
+
github_repo?: string;
|
|
16
|
+
github_full_path?: string;
|
|
17
|
+
install_count: number;
|
|
18
|
+
}
|
|
19
|
+
export interface DownloadedFile {
|
|
20
|
+
path: string;
|
|
21
|
+
content: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Format install count (e.g., 1234 -> "1.2K")
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatInstalls(count: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* Fetch skill manifest from GitHub repo
|
|
29
|
+
*/
|
|
30
|
+
export declare function fetchSkillManifest(owner: string, repo: string): Promise<SkillManifest | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Download skill files from GitHub
|
|
33
|
+
*/
|
|
34
|
+
export declare function downloadSkillFiles(owner: string, repo: string, files: string[]): Promise<DownloadedFile[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Record skill installation for stats
|
|
37
|
+
*/
|
|
38
|
+
export declare function recordInstall(owner: string, repo: string): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Fetch skills leaderboard
|
|
41
|
+
*/
|
|
42
|
+
export declare function fetchLeaderboard(limit?: number, trending?: boolean): Promise<Skill[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Search for skills
|
|
45
|
+
*/
|
|
46
|
+
export declare function searchSkillsApi(query: string, limit?: number): Promise<Skill[]>;
|
|
47
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,KAAK;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsC/B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,cAAc,EAAE,CAAC,CAgE3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,KAAK,GAAE,MAAW,EAClB,QAAQ,GAAE,OAAe,GAC1B,OAAO,CAAC,KAAK,EAAE,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACnB,OAAO,CAAC,KAAK,EAAE,CAAC,CAUlB"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utility functions for the UIXskills CLI
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.formatInstalls = formatInstalls;
|
|
7
|
+
exports.fetchSkillManifest = fetchSkillManifest;
|
|
8
|
+
exports.downloadSkillFiles = downloadSkillFiles;
|
|
9
|
+
exports.recordInstall = recordInstall;
|
|
10
|
+
exports.fetchLeaderboard = fetchLeaderboard;
|
|
11
|
+
exports.searchSkillsApi = searchSkillsApi;
|
|
12
|
+
const API_BASE = 'https://uixskills.com/api';
|
|
13
|
+
const GITHUB_RAW_BASE = 'https://raw.githubusercontent.com';
|
|
14
|
+
/**
|
|
15
|
+
* Format install count (e.g., 1234 -> "1.2K")
|
|
16
|
+
*/
|
|
17
|
+
function formatInstalls(count) {
|
|
18
|
+
if (!count || count === 0)
|
|
19
|
+
return '0';
|
|
20
|
+
if (count >= 1000) {
|
|
21
|
+
return (count / 1000).toFixed(1).replace(/\.0$/, '') + 'K';
|
|
22
|
+
}
|
|
23
|
+
return count.toString();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Fetch skill manifest from GitHub repo
|
|
27
|
+
*/
|
|
28
|
+
async function fetchSkillManifest(owner, repo) {
|
|
29
|
+
// Try uixskill.json first
|
|
30
|
+
try {
|
|
31
|
+
const response = await fetch(`${GITHUB_RAW_BASE}/${owner}/${repo}/main/uixskill.json`);
|
|
32
|
+
if (response.ok) {
|
|
33
|
+
return await response.json();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Ignore and try fallback
|
|
38
|
+
}
|
|
39
|
+
// Try skill.json
|
|
40
|
+
try {
|
|
41
|
+
const response = await fetch(`${GITHUB_RAW_BASE}/${owner}/${repo}/main/skill.json`);
|
|
42
|
+
if (response.ok) {
|
|
43
|
+
return await response.json();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Ignore
|
|
48
|
+
}
|
|
49
|
+
// Try master branch
|
|
50
|
+
try {
|
|
51
|
+
const response = await fetch(`${GITHUB_RAW_BASE}/${owner}/${repo}/master/uixskill.json`);
|
|
52
|
+
if (response.ok) {
|
|
53
|
+
return await response.json();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Ignore
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Download skill files from GitHub
|
|
63
|
+
*/
|
|
64
|
+
async function downloadSkillFiles(owner, repo, files) {
|
|
65
|
+
const downloadedFiles = [];
|
|
66
|
+
for (const filePath of files) {
|
|
67
|
+
try {
|
|
68
|
+
// If it's a directory pattern, we need to use GitHub API to list files
|
|
69
|
+
if (filePath.endsWith('/')) {
|
|
70
|
+
const apiUrl = `https://api.github.com/repos/${owner}/${repo}/contents/${filePath}`;
|
|
71
|
+
const response = await fetch(apiUrl);
|
|
72
|
+
if (response.ok) {
|
|
73
|
+
const contents = await response.json();
|
|
74
|
+
for (const item of contents) {
|
|
75
|
+
if (item.type === 'file' && item.download_url) {
|
|
76
|
+
const fileResponse = await fetch(item.download_url);
|
|
77
|
+
if (fileResponse.ok) {
|
|
78
|
+
downloadedFiles.push({
|
|
79
|
+
path: item.path,
|
|
80
|
+
content: await fileResponse.text(),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Single file
|
|
89
|
+
const url = `${GITHUB_RAW_BASE}/${owner}/${repo}/main/${filePath}`;
|
|
90
|
+
const response = await fetch(url);
|
|
91
|
+
if (response.ok) {
|
|
92
|
+
downloadedFiles.push({
|
|
93
|
+
path: filePath,
|
|
94
|
+
content: await response.text(),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.warn(`Warning: Could not download ${filePath}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// If no specific files, download common patterns
|
|
104
|
+
if (downloadedFiles.length === 0) {
|
|
105
|
+
const commonFiles = ['README.md', 'index.ts', 'index.tsx', 'index.js', 'styles.css'];
|
|
106
|
+
for (const file of commonFiles) {
|
|
107
|
+
try {
|
|
108
|
+
const url = `${GITHUB_RAW_BASE}/${owner}/${repo}/main/${file}`;
|
|
109
|
+
const response = await fetch(url);
|
|
110
|
+
if (response.ok) {
|
|
111
|
+
downloadedFiles.push({
|
|
112
|
+
path: file,
|
|
113
|
+
content: await response.text(),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Ignore
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return downloadedFiles;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Record skill installation for stats
|
|
126
|
+
*/
|
|
127
|
+
async function recordInstall(owner, repo) {
|
|
128
|
+
try {
|
|
129
|
+
await fetch(`${API_BASE}/skills/install`, {
|
|
130
|
+
method: 'POST',
|
|
131
|
+
headers: { 'Content-Type': 'application/json' },
|
|
132
|
+
body: JSON.stringify({
|
|
133
|
+
github_owner: owner,
|
|
134
|
+
github_repo: repo,
|
|
135
|
+
cli_version: '0.1.0',
|
|
136
|
+
}),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Silently fail - stats recording is not critical
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Fetch skills leaderboard
|
|
145
|
+
*/
|
|
146
|
+
async function fetchLeaderboard(limit = 10, trending = false) {
|
|
147
|
+
const response = await fetch(`${API_BASE}/skills/leaderboard?limit=${limit}&trending=${trending}`);
|
|
148
|
+
if (!response.ok) {
|
|
149
|
+
throw new Error('Failed to fetch leaderboard');
|
|
150
|
+
}
|
|
151
|
+
return await response.json();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Search for skills
|
|
155
|
+
*/
|
|
156
|
+
async function searchSkillsApi(query, limit = 10) {
|
|
157
|
+
const response = await fetch(`${API_BASE}/skills/search?q=${encodeURIComponent(query)}&limit=${limit}`);
|
|
158
|
+
if (!response.ok) {
|
|
159
|
+
throw new Error('Failed to search skills');
|
|
160
|
+
}
|
|
161
|
+
return await response.json();
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "uixskills",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI tool for installing UI/UX skills from the UIXskills gallery",
|
|
5
|
+
"author": "UIXskills",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/hooosberg/UIXskills"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"uixskills",
|
|
13
|
+
"ui",
|
|
14
|
+
"ux",
|
|
15
|
+
"skills",
|
|
16
|
+
"cli",
|
|
17
|
+
"design",
|
|
18
|
+
"components"
|
|
19
|
+
],
|
|
20
|
+
"bin": {
|
|
21
|
+
"uixskills": "dist/index.js"
|
|
22
|
+
},
|
|
23
|
+
"main": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc",
|
|
30
|
+
"dev": "tsc --watch",
|
|
31
|
+
"prepublishOnly": "npm run build",
|
|
32
|
+
"test": "node dist/index.js --help"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"chalk": "^5.3.0",
|
|
36
|
+
"commander": "^12.0.0",
|
|
37
|
+
"node-fetch": "^3.3.2",
|
|
38
|
+
"ora": "^8.0.1"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^20.11.0",
|
|
42
|
+
"typescript": "^5.3.3"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
}
|
|
47
|
+
}
|