@trikhub/cli 0.3.6 → 0.4.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 +73 -0
- package/dist/cli.js +20 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +195 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +13 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +29 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +85 -21
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +17 -5
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/publish.d.ts +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +19 -65
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/unpublish.d.ts +7 -0
- package/dist/commands/unpublish.d.ts.map +1 -0
- package/dist/commands/unpublish.js +79 -0
- package/dist/commands/unpublish.js.map +1 -0
- package/dist/lib/registry.d.ts +4 -0
- package/dist/lib/registry.d.ts.map +1 -1
- package/dist/lib/registry.js +15 -1
- package/dist/lib/registry.js.map +1 -1
- package/dist/lib/storage.d.ts +15 -0
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +29 -0
- package/dist/lib/storage.js.map +1 -1
- package/dist/lib/validator.d.ts +16 -7
- package/dist/lib/validator.d.ts.map +1 -1
- package/dist/lib/validator.js +15 -6
- package/dist/lib/validator.js.map +1 -1
- package/dist/templates/python.d.ts +25 -0
- package/dist/templates/python.d.ts.map +1 -0
- package/dist/templates/python.js +263 -0
- package/dist/templates/python.js.map +1 -0
- package/dist/templates/typescript.d.ts +25 -0
- package/dist/templates/typescript.d.ts.map +1 -0
- package/dist/templates/typescript.js +271 -0
- package/dist/templates/typescript.js.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -11,6 +11,10 @@ npm install -g @trikhub/cli
|
|
|
11
11
|
## Quick Start
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
+
# Create a new trik
|
|
15
|
+
trik init ts # TypeScript
|
|
16
|
+
trik init py # Python
|
|
17
|
+
|
|
14
18
|
# Search for triks
|
|
15
19
|
trik search article
|
|
16
20
|
|
|
@@ -32,6 +36,75 @@ trik uninstall @acme/article-search
|
|
|
32
36
|
|
|
33
37
|
## Commands
|
|
34
38
|
|
|
39
|
+
### `trik init <language>`
|
|
40
|
+
|
|
41
|
+
Create a new trik project with boilerplate code.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Create a TypeScript trik
|
|
45
|
+
trik init ts
|
|
46
|
+
|
|
47
|
+
# Create a Python trik
|
|
48
|
+
trik init py
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The interactive wizard will prompt for:
|
|
52
|
+
|
|
53
|
+
- **Trik name** - lowercase, alphanumeric + dashes (e.g., `my-trik`)
|
|
54
|
+
- **Display name** - Human-readable name
|
|
55
|
+
- **Description** - Short description
|
|
56
|
+
- **Author name** - Your name (saved for future use)
|
|
57
|
+
- **GitHub username** - Your GitHub handle (saved for future use)
|
|
58
|
+
- **Category** - utilities, productivity, developer, etc.
|
|
59
|
+
- **Storage** - Enable persistent key-value storage
|
|
60
|
+
- **Configuration** - Enable environment variables (API keys, etc.)
|
|
61
|
+
- **Location** - Where to create the project
|
|
62
|
+
|
|
63
|
+
#### Generated Structure
|
|
64
|
+
|
|
65
|
+
**TypeScript:**
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
my-trik/
|
|
69
|
+
├── manifest.json # Trik definition
|
|
70
|
+
├── trikhub.json # Registry metadata
|
|
71
|
+
├── package.json
|
|
72
|
+
├── tsconfig.json
|
|
73
|
+
├── src/
|
|
74
|
+
│ └── index.ts # Main entry point
|
|
75
|
+
├── test.ts # Local test script
|
|
76
|
+
├── README.md
|
|
77
|
+
└── .gitignore
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Python:**
|
|
81
|
+
|
|
82
|
+
```text
|
|
83
|
+
my-trik/
|
|
84
|
+
├── trikhub.json # Registry metadata
|
|
85
|
+
├── pyproject.toml
|
|
86
|
+
├── test.py # Local test script
|
|
87
|
+
├── README.md
|
|
88
|
+
├── .gitignore
|
|
89
|
+
└── my_trik/ # Package directory
|
|
90
|
+
├── __init__.py
|
|
91
|
+
├── manifest.json # Trik definition
|
|
92
|
+
└── graph.py # Main entry point
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### Testing Your Trik
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# TypeScript
|
|
99
|
+
cd my-trik
|
|
100
|
+
npm install
|
|
101
|
+
npm test
|
|
102
|
+
|
|
103
|
+
# Python
|
|
104
|
+
cd my-trik
|
|
105
|
+
python test.py
|
|
106
|
+
```
|
|
107
|
+
|
|
35
108
|
### `trik install <name>`
|
|
36
109
|
|
|
37
110
|
Install a trik from the registry.
|
package/dist/cli.js
CHANGED
|
@@ -13,8 +13,11 @@ import { infoCommand } from './commands/info.js';
|
|
|
13
13
|
import { uninstallCommand } from './commands/uninstall.js';
|
|
14
14
|
import { loginCommand, logoutCommand, whoamiCommand } from './commands/login.js';
|
|
15
15
|
import { publishCommand } from './commands/publish.js';
|
|
16
|
+
import { unpublishCommand } from './commands/unpublish.js';
|
|
16
17
|
import { upgradeCommand, upgradeAllCommand } from './commands/upgrade.js';
|
|
17
18
|
import { syncCommand } from './commands/sync.js';
|
|
19
|
+
import { initCommand } from './commands/init.js';
|
|
20
|
+
import { lintCommand } from './commands/lint.js';
|
|
18
21
|
// Read version from package.json
|
|
19
22
|
const require = createRequire(import.meta.url);
|
|
20
23
|
const pkg = require('../package.json');
|
|
@@ -87,6 +90,11 @@ program
|
|
|
87
90
|
.option('-d, --directory <path>', 'Trik directory to publish', '.')
|
|
88
91
|
.option('-t, --tag <version>', 'Version tag (default: from manifest)')
|
|
89
92
|
.action(publishCommand);
|
|
93
|
+
// Unpublish command
|
|
94
|
+
program
|
|
95
|
+
.command('unpublish <trik>')
|
|
96
|
+
.description('Permanently remove a trik from the registry')
|
|
97
|
+
.action(unpublishCommand);
|
|
90
98
|
// Upgrade command
|
|
91
99
|
program
|
|
92
100
|
.command('upgrade [trik]')
|
|
@@ -108,8 +116,19 @@ program
|
|
|
108
116
|
.option('-n, --dry-run', 'Show what would be synced without modifying config')
|
|
109
117
|
.option('-j, --json', 'Output as JSON')
|
|
110
118
|
.action(syncCommand);
|
|
119
|
+
// Init command
|
|
120
|
+
program
|
|
121
|
+
.command('init <language>')
|
|
122
|
+
.description('Initialize a new trik project (ts or py)')
|
|
123
|
+
.action(initCommand);
|
|
124
|
+
// Lint command
|
|
125
|
+
program
|
|
126
|
+
.command('lint <path>')
|
|
127
|
+
.description('Validate a trik for security and correctness')
|
|
128
|
+
.option('--warnings-as-errors', 'Treat warnings as errors')
|
|
129
|
+
.option('--skip <rule>', 'Skip a specific rule (can be repeated)', (val, prev) => [...prev, val], [])
|
|
130
|
+
.action(lintCommand);
|
|
111
131
|
// TODO: Add more commands
|
|
112
|
-
// program.command('init').description('Initialize a new trik project');
|
|
113
132
|
// program.command('outdated').description('Check for outdated triks');
|
|
114
133
|
program.parse();
|
|
115
134
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,iCAAiC;AACjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,qCAAqC,CAAC;KAClD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,OAAO,EAAE,2CAA2C,CAAC;KAC5D,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;IACtB,+DAA+D;IAC/D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC;IACvC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC;KAC/D,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,oBAAoB;AACpB,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,KAAK,CAAC,IAAI,CAAC;KACX,KAAK,CAAC,QAAQ,CAAC;KACf,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,KAAK,CAAC,GAAG,CAAC;KACV,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,sBAAsB,EAAE,eAAe,EAAE,IAAI,CAAC;KACrD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,EAAE,GAAG,CAAC;KAClE,MAAM,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;KACrE,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,4DAA4D,CAAC;KACzE,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,OAA4B,EAAE,EAAE;IACvE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,0CAA0C;AAC1C,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,eAAe,EAAE,oDAAoD,CAAC;KAC7E,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;KACtC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,0BAA0B;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4DH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4JpE"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* trik init command
|
|
3
|
+
*
|
|
4
|
+
* Scaffolds a new trik project with boilerplate code.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
8
|
+
import { join, resolve } from 'node:path';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import ora from 'ora';
|
|
11
|
+
import { input, select, confirm } from '@inquirer/prompts';
|
|
12
|
+
import { loadDefaults, saveDefaults } from '../lib/storage.js';
|
|
13
|
+
import { generateTypescriptProject } from '../templates/typescript.js';
|
|
14
|
+
import { generatePythonProject } from '../templates/python.js';
|
|
15
|
+
const CATEGORIES = [
|
|
16
|
+
{ value: 'utilities', label: 'Utilities' },
|
|
17
|
+
{ value: 'productivity', label: 'Productivity' },
|
|
18
|
+
{ value: 'developer', label: 'Developer Tools' },
|
|
19
|
+
{ value: 'data', label: 'Data & Analytics' },
|
|
20
|
+
{ value: 'search', label: 'Search' },
|
|
21
|
+
{ value: 'content', label: 'Content' },
|
|
22
|
+
{ value: 'communication', label: 'Communication' },
|
|
23
|
+
{ value: 'finance', label: 'Finance' },
|
|
24
|
+
{ value: 'entertainment', label: 'Entertainment' },
|
|
25
|
+
{ value: 'education', label: 'Education' },
|
|
26
|
+
{ value: 'other', label: 'Other' },
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* Validate trik name
|
|
30
|
+
* - lowercase, 2-50 chars, starts with letter, alphanumeric + dashes only
|
|
31
|
+
*/
|
|
32
|
+
function validateTrikName(name) {
|
|
33
|
+
if (name.length < 2 || name.length > 50) {
|
|
34
|
+
return 'Name must be 2-50 characters';
|
|
35
|
+
}
|
|
36
|
+
if (!/^[a-z]/.test(name)) {
|
|
37
|
+
return 'Name must start with a letter';
|
|
38
|
+
}
|
|
39
|
+
if (!/^[a-z][a-z0-9-]*$/.test(name)) {
|
|
40
|
+
return 'Name must be lowercase, alphanumeric + dashes only';
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse and normalize language argument
|
|
46
|
+
*/
|
|
47
|
+
function parseLanguage(lang) {
|
|
48
|
+
const normalized = lang.toLowerCase();
|
|
49
|
+
if (normalized === 'ts' || normalized === 'typescript') {
|
|
50
|
+
return 'ts';
|
|
51
|
+
}
|
|
52
|
+
if (normalized === 'py' || normalized === 'python') {
|
|
53
|
+
return 'py';
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
export async function initCommand(languageArg) {
|
|
58
|
+
const spinner = ora();
|
|
59
|
+
try {
|
|
60
|
+
// Validate language
|
|
61
|
+
const language = parseLanguage(languageArg);
|
|
62
|
+
if (!language) {
|
|
63
|
+
console.log(chalk.red(`Invalid language: ${languageArg}`));
|
|
64
|
+
console.log(chalk.dim('Supported languages: ts (TypeScript) or py (Python)'));
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
console.log();
|
|
68
|
+
console.log(chalk.bold(' Create a new Trik'));
|
|
69
|
+
console.log();
|
|
70
|
+
// Load saved defaults
|
|
71
|
+
const defaults = loadDefaults();
|
|
72
|
+
// Interactive prompts
|
|
73
|
+
const name = await input({
|
|
74
|
+
message: 'Trik name:',
|
|
75
|
+
default: 'my-trik',
|
|
76
|
+
validate: validateTrikName,
|
|
77
|
+
transformer: (value) => value.toLowerCase(),
|
|
78
|
+
});
|
|
79
|
+
const displayName = await input({
|
|
80
|
+
message: 'Display name:',
|
|
81
|
+
default: name
|
|
82
|
+
.split('-')
|
|
83
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
84
|
+
.join(' '),
|
|
85
|
+
});
|
|
86
|
+
const description = await input({
|
|
87
|
+
message: 'Short description:',
|
|
88
|
+
default: 'A short description',
|
|
89
|
+
});
|
|
90
|
+
const authorName = await input({
|
|
91
|
+
message: 'Author name:',
|
|
92
|
+
default: defaults.authorName || '',
|
|
93
|
+
});
|
|
94
|
+
const authorGithub = await input({
|
|
95
|
+
message: 'GitHub username:',
|
|
96
|
+
default: defaults.authorGithub || '',
|
|
97
|
+
});
|
|
98
|
+
const category = await select({
|
|
99
|
+
message: 'Category:',
|
|
100
|
+
choices: CATEGORIES.map((c) => ({ value: c.value, name: c.label })),
|
|
101
|
+
default: 'utilities',
|
|
102
|
+
});
|
|
103
|
+
const enableStorage = await confirm({
|
|
104
|
+
message: 'Enable persistent storage?',
|
|
105
|
+
default: false,
|
|
106
|
+
});
|
|
107
|
+
const enableConfig = await confirm({
|
|
108
|
+
message: 'Enable configuration (env vars)?',
|
|
109
|
+
default: false,
|
|
110
|
+
});
|
|
111
|
+
// Path selection
|
|
112
|
+
const pathChoice = await select({
|
|
113
|
+
message: 'Where to create the trik?',
|
|
114
|
+
choices: [
|
|
115
|
+
{ value: 'current', name: `Current folder (./${name})` },
|
|
116
|
+
{ value: 'other', name: 'Other location...' },
|
|
117
|
+
],
|
|
118
|
+
});
|
|
119
|
+
let targetDir;
|
|
120
|
+
if (pathChoice === 'current') {
|
|
121
|
+
targetDir = resolve(process.cwd(), name);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
const customPath = await input({
|
|
125
|
+
message: 'Enter path:',
|
|
126
|
+
default: `./${name}`,
|
|
127
|
+
});
|
|
128
|
+
targetDir = resolve(process.cwd(), customPath);
|
|
129
|
+
}
|
|
130
|
+
// Check if directory exists
|
|
131
|
+
if (existsSync(targetDir)) {
|
|
132
|
+
console.log();
|
|
133
|
+
console.log(chalk.red(`Directory already exists: ${targetDir}`));
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
console.log();
|
|
137
|
+
spinner.start('Creating trik...');
|
|
138
|
+
// Generate files
|
|
139
|
+
const config = {
|
|
140
|
+
name,
|
|
141
|
+
displayName,
|
|
142
|
+
description,
|
|
143
|
+
authorName,
|
|
144
|
+
authorGithub,
|
|
145
|
+
category,
|
|
146
|
+
enableStorage,
|
|
147
|
+
enableConfig,
|
|
148
|
+
};
|
|
149
|
+
const files = language === 'ts'
|
|
150
|
+
? generateTypescriptProject(config)
|
|
151
|
+
: generatePythonProject(config);
|
|
152
|
+
// Write files
|
|
153
|
+
for (const file of files) {
|
|
154
|
+
const filePath = join(targetDir, file.path);
|
|
155
|
+
const dir = join(filePath, '..');
|
|
156
|
+
await mkdir(dir, { recursive: true });
|
|
157
|
+
await writeFile(filePath, file.content, 'utf-8');
|
|
158
|
+
}
|
|
159
|
+
// Save author defaults for next time
|
|
160
|
+
if (authorName || authorGithub) {
|
|
161
|
+
saveDefaults({
|
|
162
|
+
authorName: authorName || defaults.authorName,
|
|
163
|
+
authorGithub: authorGithub || defaults.authorGithub,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
spinner.succeed(`Created trik: ${chalk.green(name)}`);
|
|
167
|
+
// Print next steps
|
|
168
|
+
console.log();
|
|
169
|
+
console.log(chalk.bold(' Next steps:'));
|
|
170
|
+
console.log();
|
|
171
|
+
console.log(chalk.dim(` cd ${name}`));
|
|
172
|
+
if (language === 'ts') {
|
|
173
|
+
console.log(chalk.dim(' npm install'));
|
|
174
|
+
console.log(chalk.dim(' npm run build'));
|
|
175
|
+
console.log(chalk.dim(' npm test # Test your trik locally'));
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
console.log(chalk.dim(' python test.py # Test your trik locally'));
|
|
179
|
+
}
|
|
180
|
+
console.log(chalk.dim(' trik publish # When ready to publish'));
|
|
181
|
+
console.log();
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
spinner.fail('Failed to create trik');
|
|
185
|
+
if (error instanceof Error) {
|
|
186
|
+
// Handle user cancellation gracefully
|
|
187
|
+
if (error.message.includes('User force closed')) {
|
|
188
|
+
process.exit(0);
|
|
189
|
+
}
|
|
190
|
+
console.error(chalk.red(error.message));
|
|
191
|
+
}
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* trik lint command
|
|
3
|
+
*
|
|
4
|
+
* Validates a trik's manifest and source files for security and correctness.
|
|
5
|
+
* This is a wrapper around @trikhub/linter.
|
|
6
|
+
*/
|
|
7
|
+
interface LintOptions {
|
|
8
|
+
warningsAsErrors?: boolean;
|
|
9
|
+
skip?: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function lintCommand(trikPath: string, options: LintOptions): Promise<void>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=lint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,UAAU,WAAW;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBvF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* trik lint command
|
|
3
|
+
*
|
|
4
|
+
* Validates a trik's manifest and source files for security and correctness.
|
|
5
|
+
* This is a wrapper around @trikhub/linter.
|
|
6
|
+
*/
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import { TrikLinter } from '@trikhub/linter';
|
|
10
|
+
export async function lintCommand(trikPath, options) {
|
|
11
|
+
const resolvedPath = resolve(trikPath);
|
|
12
|
+
console.log(`Linting trik at: ${resolvedPath}\n`);
|
|
13
|
+
const linter = new TrikLinter({
|
|
14
|
+
warningsAsErrors: options.warningsAsErrors,
|
|
15
|
+
skipRules: options.skip,
|
|
16
|
+
});
|
|
17
|
+
try {
|
|
18
|
+
const results = await linter.lint(resolvedPath);
|
|
19
|
+
console.log(linter.formatResults(results));
|
|
20
|
+
if (linter.hasErrors(results)) {
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : error);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAO7C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,OAAoB;IACtE,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,IAAI,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,SAAS,EAAE,OAAO,CAAC,IAAI;KACxB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAyID,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDrE"}
|
package/dist/commands/list.js
CHANGED
|
@@ -28,6 +28,7 @@ async function readNpmConfig(baseDir) {
|
|
|
28
28
|
const config = JSON.parse(content);
|
|
29
29
|
return {
|
|
30
30
|
triks: Array.isArray(config.triks) ? config.triks : [],
|
|
31
|
+
trikhub: config.trikhub ?? {},
|
|
31
32
|
};
|
|
32
33
|
}
|
|
33
34
|
catch {
|
|
@@ -35,34 +36,89 @@ async function readNpmConfig(baseDir) {
|
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
|
-
* Get info about an installed trik from node_modules
|
|
39
|
+
* Get info about an installed trik from node_modules or .trikhub/triks/
|
|
39
40
|
*/
|
|
40
|
-
async function getTrikInfo(packageName, baseDir) {
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
41
|
+
async function getTrikInfo(packageName, baseDir, config) {
|
|
42
|
+
// First, check node_modules (for JS triks installed via npm)
|
|
43
|
+
const nodeModulesPath = join(baseDir, 'node_modules', ...packageName.split('/'));
|
|
44
|
+
const packageJsonPath = join(nodeModulesPath, 'package.json');
|
|
45
|
+
if (existsSync(nodeModulesPath)) {
|
|
46
|
+
const info = {
|
|
47
|
+
name: packageName,
|
|
48
|
+
version: 'unknown',
|
|
49
|
+
exists: true,
|
|
50
|
+
crossLanguage: false,
|
|
51
|
+
};
|
|
52
|
+
if (existsSync(packageJsonPath)) {
|
|
53
|
+
try {
|
|
54
|
+
const content = await readFile(packageJsonPath, 'utf-8');
|
|
55
|
+
const pkg = JSON.parse(content);
|
|
56
|
+
info.version = pkg.version || 'unknown';
|
|
57
|
+
info.description = pkg.description;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Ignore errors reading package.json
|
|
61
|
+
}
|
|
54
62
|
}
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
return info;
|
|
64
|
+
}
|
|
65
|
+
// Second, check .trikhub/triks/ (for cross-language triks)
|
|
66
|
+
const triksPath = join(baseDir, NPM_CONFIG_DIR, 'triks', ...packageName.split('/'));
|
|
67
|
+
if (existsSync(triksPath)) {
|
|
68
|
+
const info = {
|
|
69
|
+
name: packageName,
|
|
70
|
+
version: config.trikhub?.[packageName] || 'unknown',
|
|
71
|
+
exists: true,
|
|
72
|
+
crossLanguage: true,
|
|
73
|
+
};
|
|
74
|
+
// Try to find manifest.json for description (may be in subdirectory for Python packages)
|
|
75
|
+
const manifestPath = join(triksPath, 'manifest.json');
|
|
76
|
+
if (existsSync(manifestPath)) {
|
|
77
|
+
try {
|
|
78
|
+
const content = await readFile(manifestPath, 'utf-8');
|
|
79
|
+
const manifest = JSON.parse(content);
|
|
80
|
+
info.description = manifest.description;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Ignore errors
|
|
84
|
+
}
|
|
57
85
|
}
|
|
86
|
+
else {
|
|
87
|
+
// For Python packages, manifest may be in a subdirectory (package_name/manifest.json)
|
|
88
|
+
try {
|
|
89
|
+
const { readdir } = await import('node:fs/promises');
|
|
90
|
+
const entries = await readdir(triksPath, { withFileTypes: true });
|
|
91
|
+
for (const entry of entries) {
|
|
92
|
+
if (entry.isDirectory() && !entry.name.startsWith('.')) {
|
|
93
|
+
const subManifest = join(triksPath, entry.name, 'manifest.json');
|
|
94
|
+
if (existsSync(subManifest)) {
|
|
95
|
+
const content = await readFile(subManifest, 'utf-8');
|
|
96
|
+
const manifest = JSON.parse(content);
|
|
97
|
+
info.description = manifest.description;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Ignore errors
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return info;
|
|
58
108
|
}
|
|
59
|
-
|
|
109
|
+
// Trik not found in either location
|
|
110
|
+
return {
|
|
111
|
+
name: packageName,
|
|
112
|
+
version: config.trikhub?.[packageName] || 'unknown',
|
|
113
|
+
exists: false,
|
|
114
|
+
crossLanguage: !!config.trikhub?.[packageName],
|
|
115
|
+
};
|
|
60
116
|
}
|
|
61
117
|
export async function listCommand(options) {
|
|
62
118
|
const baseDir = process.cwd();
|
|
63
119
|
const config = await readNpmConfig(baseDir);
|
|
64
120
|
if (options.json) {
|
|
65
|
-
const triks = await Promise.all(config.triks.map((name) => getTrikInfo(name, baseDir)));
|
|
121
|
+
const triks = await Promise.all(config.triks.map((name) => getTrikInfo(name, baseDir, config)));
|
|
66
122
|
console.log(JSON.stringify({
|
|
67
123
|
configPath: getNpmConfigPath(baseDir),
|
|
68
124
|
triks,
|
|
@@ -77,7 +133,7 @@ export async function listCommand(options) {
|
|
|
77
133
|
}
|
|
78
134
|
console.log(chalk.bold(`\nInstalled triks (${config.triks.length}):\n`));
|
|
79
135
|
for (const trikName of config.triks) {
|
|
80
|
-
const info = await getTrikInfo(trikName, baseDir);
|
|
136
|
+
const info = await getTrikInfo(trikName, baseDir, config);
|
|
81
137
|
const status = info.exists
|
|
82
138
|
? chalk.green('●')
|
|
83
139
|
: chalk.red('○');
|
|
@@ -87,8 +143,16 @@ export async function listCommand(options) {
|
|
|
87
143
|
if (info.description) {
|
|
88
144
|
console.log(chalk.dim(` ${info.description}`));
|
|
89
145
|
}
|
|
146
|
+
if (info.crossLanguage && info.exists) {
|
|
147
|
+
console.log(chalk.dim(` 📦 Cross-language trik (in .trikhub/triks/)`));
|
|
148
|
+
}
|
|
90
149
|
if (!info.exists) {
|
|
91
|
-
|
|
150
|
+
if (info.crossLanguage) {
|
|
151
|
+
console.log(chalk.red(` ⚠ Not in .trikhub/triks/! Run 'trik install ${trikName}'`));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.log(chalk.red(` ⚠ Not in node_modules! Run 'npm install' or 'trik install ${trikName}'`));
|
|
155
|
+
}
|
|
92
156
|
}
|
|
93
157
|
console.log();
|
|
94
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA6FlD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBnD;AAED;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAqCnD"}
|
package/dist/commands/login.js
CHANGED
|
@@ -10,16 +10,28 @@ import { loadConfig, saveConfig } from '../lib/storage.js';
|
|
|
10
10
|
export async function loginCommand() {
|
|
11
11
|
const spinner = ora();
|
|
12
12
|
const config = loadConfig();
|
|
13
|
-
|
|
13
|
+
const registry = new RegistryClient();
|
|
14
|
+
// Check if already logged in and token is still valid
|
|
14
15
|
if (config.authToken && config.authExpiresAt) {
|
|
15
16
|
const expiresAt = new Date(config.authExpiresAt);
|
|
16
17
|
if (expiresAt > new Date()) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
// Verify token actually works with the server
|
|
19
|
+
try {
|
|
20
|
+
const user = await registry.getCurrentUser();
|
|
21
|
+
console.log(chalk.yellow(`Already logged in as ${chalk.cyan('@' + user.username)}`));
|
|
22
|
+
console.log(chalk.dim('Use `trik logout` to sign out first'));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Token invalid server-side, clear it and proceed with login
|
|
27
|
+
console.log(chalk.dim('Previous session expired, starting new login...'));
|
|
28
|
+
delete config.authToken;
|
|
29
|
+
delete config.authExpiresAt;
|
|
30
|
+
delete config.publisherUsername;
|
|
31
|
+
saveConfig(config);
|
|
32
|
+
}
|
|
20
33
|
}
|
|
21
34
|
}
|
|
22
|
-
const registry = new RegistryClient();
|
|
23
35
|
try {
|
|
24
36
|
// Start device flow
|
|
25
37
|
spinner.start('Initializing authentication...');
|