@trikhub/cli 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/dist/cli.d.ts +8 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +105 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/info.d.ts +11 -0
  8. package/dist/commands/info.d.ts.map +1 -0
  9. package/dist/commands/info.js +101 -0
  10. package/dist/commands/info.js.map +1 -0
  11. package/dist/commands/install.d.ts +17 -0
  12. package/dist/commands/install.d.ts.map +1 -0
  13. package/dist/commands/install.js +358 -0
  14. package/dist/commands/install.js.map +1 -0
  15. package/dist/commands/list.d.ts +11 -0
  16. package/dist/commands/list.d.ts.map +1 -0
  17. package/dist/commands/list.js +96 -0
  18. package/dist/commands/list.js.map +1 -0
  19. package/dist/commands/login.d.ts +19 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +154 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/publish.d.ts +13 -0
  24. package/dist/commands/publish.d.ts.map +1 -0
  25. package/dist/commands/publish.js +285 -0
  26. package/dist/commands/publish.js.map +1 -0
  27. package/dist/commands/search.d.ts +12 -0
  28. package/dist/commands/search.d.ts.map +1 -0
  29. package/dist/commands/search.js +60 -0
  30. package/dist/commands/search.js.map +1 -0
  31. package/dist/commands/sync.d.ts +19 -0
  32. package/dist/commands/sync.d.ts.map +1 -0
  33. package/dist/commands/sync.js +193 -0
  34. package/dist/commands/sync.js.map +1 -0
  35. package/dist/commands/uninstall.d.ts +11 -0
  36. package/dist/commands/uninstall.d.ts.map +1 -0
  37. package/dist/commands/uninstall.js +153 -0
  38. package/dist/commands/uninstall.js.map +1 -0
  39. package/dist/commands/upgrade.d.ts +15 -0
  40. package/dist/commands/upgrade.d.ts.map +1 -0
  41. package/dist/commands/upgrade.js +144 -0
  42. package/dist/commands/upgrade.js.map +1 -0
  43. package/dist/index.d.ts +10 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +14 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib/config.d.ts +79 -0
  48. package/dist/lib/config.d.ts.map +1 -0
  49. package/dist/lib/config.js +202 -0
  50. package/dist/lib/config.js.map +1 -0
  51. package/dist/lib/registry.d.ts +90 -0
  52. package/dist/lib/registry.d.ts.map +1 -0
  53. package/dist/lib/registry.js +294 -0
  54. package/dist/lib/registry.js.map +1 -0
  55. package/dist/lib/storage.d.ts +82 -0
  56. package/dist/lib/storage.d.ts.map +1 -0
  57. package/dist/lib/storage.js +177 -0
  58. package/dist/lib/storage.js.map +1 -0
  59. package/dist/lib/validator.d.ts +24 -0
  60. package/dist/lib/validator.d.ts.map +1 -0
  61. package/dist/lib/validator.js +181 -0
  62. package/dist/lib/validator.js.map +1 -0
  63. package/dist/types.d.ts +187 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +36 -0
  66. package/dist/types.js.map +1 -0
  67. package/package.json +66 -0
@@ -0,0 +1,193 @@
1
+ /**
2
+ * trik sync command
3
+ *
4
+ * Discovers trik packages in node_modules and adds them to the config.
5
+ * This enables npm-based trik installation:
6
+ * 1. Add trik to package.json dependencies
7
+ * 2. Run npm install
8
+ * 3. Run trik sync to register the trik
9
+ */
10
+ import { readdir, readFile, writeFile, mkdir } from 'node:fs/promises';
11
+ import { existsSync } from 'node:fs';
12
+ import { join, dirname } from 'node:path';
13
+ import chalk from 'chalk';
14
+ import ora from 'ora';
15
+ import { validateManifest } from '@trikhub/manifest';
16
+ const NPM_CONFIG_DIR = '.trikhub';
17
+ const NPM_CONFIG_FILE = 'config.json';
18
+ /**
19
+ * Get the path to the npm-based config file
20
+ */
21
+ function getNpmConfigPath(baseDir = process.cwd()) {
22
+ return join(baseDir, NPM_CONFIG_DIR, NPM_CONFIG_FILE);
23
+ }
24
+ /**
25
+ * Read the npm-based trik config
26
+ */
27
+ async function readNpmConfig(baseDir = process.cwd()) {
28
+ const configPath = getNpmConfigPath(baseDir);
29
+ if (!existsSync(configPath)) {
30
+ return { triks: [] };
31
+ }
32
+ try {
33
+ const content = await readFile(configPath, 'utf-8');
34
+ const config = JSON.parse(content);
35
+ return {
36
+ triks: Array.isArray(config.triks) ? config.triks : [],
37
+ };
38
+ }
39
+ catch {
40
+ return { triks: [] };
41
+ }
42
+ }
43
+ /**
44
+ * Write the npm-based trik config
45
+ */
46
+ async function writeNpmConfig(config, baseDir = process.cwd()) {
47
+ const configPath = getNpmConfigPath(baseDir);
48
+ const configDir = dirname(configPath);
49
+ if (!existsSync(configDir)) {
50
+ await mkdir(configDir, { recursive: true });
51
+ }
52
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
53
+ }
54
+ /**
55
+ * Check if a package directory contains a valid trik manifest
56
+ */
57
+ async function isTrikPackage(packagePath) {
58
+ const manifestPath = join(packagePath, 'manifest.json');
59
+ if (!existsSync(manifestPath)) {
60
+ return false;
61
+ }
62
+ try {
63
+ const content = await readFile(manifestPath, 'utf-8');
64
+ const manifest = JSON.parse(content);
65
+ // Use the manifest validator from @trikhub/manifest
66
+ const validation = validateManifest(manifest);
67
+ return validation.valid;
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ }
73
+ /**
74
+ * Scan node_modules for packages that are triks
75
+ */
76
+ async function discoverTriksInNodeModules(nodeModulesPath) {
77
+ const triks = [];
78
+ if (!existsSync(nodeModulesPath)) {
79
+ return triks;
80
+ }
81
+ try {
82
+ const entries = await readdir(nodeModulesPath, { withFileTypes: true });
83
+ for (const entry of entries) {
84
+ if (!entry.isDirectory())
85
+ continue;
86
+ if (entry.name === '.bin' || entry.name === '.cache')
87
+ continue;
88
+ const entryPath = join(nodeModulesPath, entry.name);
89
+ // Handle scoped packages (@scope/package)
90
+ if (entry.name.startsWith('@')) {
91
+ try {
92
+ const scopedEntries = await readdir(entryPath, { withFileTypes: true });
93
+ for (const scopedEntry of scopedEntries) {
94
+ if (!scopedEntry.isDirectory())
95
+ continue;
96
+ const packageName = `${entry.name}/${scopedEntry.name}`;
97
+ const packagePath = join(entryPath, scopedEntry.name);
98
+ if (await isTrikPackage(packagePath)) {
99
+ triks.push(packageName);
100
+ }
101
+ }
102
+ }
103
+ catch {
104
+ // Skip unreadable scope directories
105
+ }
106
+ }
107
+ else {
108
+ // Regular package
109
+ if (await isTrikPackage(entryPath)) {
110
+ triks.push(entry.name);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ catch {
116
+ // node_modules doesn't exist or isn't readable
117
+ }
118
+ return triks;
119
+ }
120
+ /**
121
+ * Sync command implementation
122
+ */
123
+ export async function syncCommand(options) {
124
+ const spinner = ora();
125
+ const baseDir = process.cwd();
126
+ const nodeModulesPath = join(baseDir, 'node_modules');
127
+ try {
128
+ spinner.start('Scanning node_modules for triks...');
129
+ // Discover triks in node_modules
130
+ const discoveredTriks = await discoverTriksInNodeModules(nodeModulesPath);
131
+ if (discoveredTriks.length === 0) {
132
+ spinner.info('No triks found in node_modules.');
133
+ console.log(chalk.dim('\nTriks are npm packages with a manifest.json file.'));
134
+ console.log(chalk.dim('Install a trik package and run sync again.'));
135
+ return;
136
+ }
137
+ spinner.succeed(`Found ${discoveredTriks.length} trik(s) in node_modules`);
138
+ // Read current config
139
+ const config = await readNpmConfig(baseDir);
140
+ const currentTriks = new Set(config.triks);
141
+ const result = {
142
+ added: [],
143
+ alreadyConfigured: [],
144
+ total: discoveredTriks.length,
145
+ };
146
+ for (const trik of discoveredTriks) {
147
+ if (currentTriks.has(trik)) {
148
+ result.alreadyConfigured.push(trik);
149
+ }
150
+ else {
151
+ result.added.push(trik);
152
+ }
153
+ }
154
+ if (options.json) {
155
+ console.log(JSON.stringify(result, null, 2));
156
+ return;
157
+ }
158
+ if (result.added.length === 0) {
159
+ console.log(chalk.green('\n✓ All discovered triks are already configured.'));
160
+ return;
161
+ }
162
+ if (options.dryRun) {
163
+ console.log(chalk.yellow('\nDry run - would add the following triks to config:\n'));
164
+ for (const trik of result.added) {
165
+ console.log(chalk.cyan(` + ${trik}`));
166
+ }
167
+ }
168
+ else {
169
+ // Update config
170
+ config.triks = [...config.triks, ...result.added].sort();
171
+ await writeNpmConfig(config, baseDir);
172
+ console.log(chalk.green('\nAdded to .trikhub/config.json:\n'));
173
+ for (const trik of result.added) {
174
+ console.log(chalk.cyan(` + ${trik}`));
175
+ }
176
+ }
177
+ if (result.alreadyConfigured.length > 0) {
178
+ console.log(chalk.dim('\nAlready configured:'));
179
+ for (const trik of result.alreadyConfigured) {
180
+ console.log(chalk.dim(` = ${trik}`));
181
+ }
182
+ }
183
+ console.log(chalk.dim(`\nTotal: ${result.total} trik(s), ${result.added.length} added`));
184
+ }
185
+ catch (error) {
186
+ spinner.fail('Sync failed');
187
+ if (error instanceof Error) {
188
+ console.error(chalk.red(error.message));
189
+ }
190
+ process.exit(1);
191
+ }
192
+ }
193
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAkBrD,MAAM,cAAc,GAAG,UAAU,CAAC;AAClC,MAAM,eAAe,GAAG,aAAa,CAAC;AAEtC;;GAEG;AACH,SAAS,gBAAgB,CAAC,UAAkB,OAAO,CAAC,GAAG,EAAE;IACvD,OAAO,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,UAAkB,OAAO,CAAC,GAAG,EAAE;IAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QACrD,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;SACvD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,MAAsB,EAAE,UAAkB,OAAO,CAAC,GAAG,EAAE;IACnF,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,WAAmB;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAExD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAErC,oDAAoD;QACpD,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,0BAA0B,CAAC,eAAuB;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAE/D,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEpD,0CAA0C;YAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oBAExE,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE,CAAC;wBACxC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;4BAAE,SAAS;wBAEzC,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;wBACxD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;wBAEtD,IAAI,MAAM,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;4BACrC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC1B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,oCAAoC;gBACtC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,IAAI,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAEpD,iCAAiC;QACjC,MAAM,eAAe,GAAG,MAAM,0BAA0B,CAAC,eAAe,CAAC,CAAC;QAE1E,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,SAAS,eAAe,CAAC,MAAM,0BAA0B,CAAC,CAAC;QAE3E,sBAAsB;QACtB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAe;YACzB,KAAK,EAAE,EAAE;YACT,iBAAiB,EAAE,EAAE;YACrB,KAAK,EAAE,eAAe,CAAC,MAAM;SAC9B,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wDAAwD,CAAC,CAAC,CAAC;YACpF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gBAAgB;YAChB,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACzD,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC/D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC;IAE3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * trik uninstall command
3
+ *
4
+ * Removes a trik from both package.json and .trikhub/config.json.
5
+ *
6
+ * Workflow:
7
+ * 1. Remove from .trikhub/config.json
8
+ * 2. Run npm/pnpm/yarn uninstall
9
+ */
10
+ export declare function uninstallCommand(trikInput: string): Promise<void>;
11
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2GH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEvE"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * trik uninstall command
3
+ *
4
+ * Removes a trik from both package.json and .trikhub/config.json.
5
+ *
6
+ * Workflow:
7
+ * 1. Remove from .trikhub/config.json
8
+ * 2. Run npm/pnpm/yarn uninstall
9
+ */
10
+ import { existsSync } from 'node:fs';
11
+ import { readFile, writeFile } from 'node:fs/promises';
12
+ import { join } from 'node:path';
13
+ import { spawn } from 'node:child_process';
14
+ import chalk from 'chalk';
15
+ import ora from 'ora';
16
+ const NPM_CONFIG_DIR = '.trikhub';
17
+ const NPM_CONFIG_FILE = 'config.json';
18
+ /**
19
+ * Detect which package manager is being used in the project
20
+ */
21
+ function detectPackageManager(baseDir) {
22
+ if (existsSync(join(baseDir, 'pnpm-lock.yaml'))) {
23
+ return 'pnpm';
24
+ }
25
+ if (existsSync(join(baseDir, 'yarn.lock'))) {
26
+ return 'yarn';
27
+ }
28
+ return 'npm';
29
+ }
30
+ /**
31
+ * Run a command and return a promise
32
+ */
33
+ function runCommand(command, args, cwd) {
34
+ return new Promise((resolve, reject) => {
35
+ const proc = spawn(command, args, {
36
+ cwd,
37
+ stdio: 'inherit',
38
+ shell: true,
39
+ });
40
+ proc.on('close', (code) => {
41
+ if (code === 0) {
42
+ resolve();
43
+ }
44
+ else {
45
+ reject(new Error(`Command failed with exit code ${code}`));
46
+ }
47
+ });
48
+ proc.on('error', (err) => {
49
+ reject(err);
50
+ });
51
+ });
52
+ }
53
+ /**
54
+ * Get the path to the npm-based config file
55
+ */
56
+ function getNpmConfigPath(baseDir) {
57
+ return join(baseDir, NPM_CONFIG_DIR, NPM_CONFIG_FILE);
58
+ }
59
+ /**
60
+ * Read the npm-based trik config
61
+ */
62
+ async function readNpmConfig(baseDir) {
63
+ const configPath = getNpmConfigPath(baseDir);
64
+ if (!existsSync(configPath)) {
65
+ return { triks: [] };
66
+ }
67
+ try {
68
+ const content = await readFile(configPath, 'utf-8');
69
+ const config = JSON.parse(content);
70
+ return {
71
+ triks: Array.isArray(config.triks) ? config.triks : [],
72
+ };
73
+ }
74
+ catch {
75
+ return { triks: [] };
76
+ }
77
+ }
78
+ /**
79
+ * Write the npm-based trik config
80
+ */
81
+ async function writeNpmConfig(config, baseDir) {
82
+ const configPath = getNpmConfigPath(baseDir);
83
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
84
+ }
85
+ /**
86
+ * Remove a trik from the config
87
+ */
88
+ async function removeTrikFromConfig(packageName, baseDir) {
89
+ const config = await readNpmConfig(baseDir);
90
+ if (!config.triks.includes(packageName)) {
91
+ return false;
92
+ }
93
+ config.triks = config.triks.filter((t) => t !== packageName);
94
+ await writeNpmConfig(config, baseDir);
95
+ return true;
96
+ }
97
+ export async function uninstallCommand(trikInput) {
98
+ const spinner = ora();
99
+ const baseDir = process.cwd();
100
+ try {
101
+ // Parse package name (remove @ version suffix if present)
102
+ let packageName = trikInput;
103
+ const atIndex = trikInput.lastIndexOf('@');
104
+ if (atIndex > 0) {
105
+ packageName = trikInput.substring(0, atIndex);
106
+ }
107
+ // Check if package.json exists
108
+ const packageJsonPath = join(baseDir, 'package.json');
109
+ if (!existsSync(packageJsonPath)) {
110
+ console.log(chalk.red('No package.json found in current directory.'));
111
+ process.exit(1);
112
+ }
113
+ // Remove from config first
114
+ spinner.start(`Removing ${chalk.cyan(packageName)} from config...`);
115
+ const wasInConfig = await removeTrikFromConfig(packageName, baseDir);
116
+ if (!wasInConfig) {
117
+ spinner.info(`${chalk.yellow(packageName)} was not in .trikhub/config.json`);
118
+ }
119
+ else {
120
+ spinner.succeed(`Removed ${chalk.green(packageName)} from .trikhub/config.json`);
121
+ }
122
+ // Detect package manager
123
+ const pm = detectPackageManager(baseDir);
124
+ // Build uninstall command
125
+ const uninstallArgs = [];
126
+ switch (pm) {
127
+ case 'pnpm':
128
+ uninstallArgs.push('remove', packageName);
129
+ break;
130
+ case 'yarn':
131
+ uninstallArgs.push('remove', packageName);
132
+ break;
133
+ case 'npm':
134
+ default:
135
+ uninstallArgs.push('uninstall', packageName);
136
+ break;
137
+ }
138
+ // Run package manager uninstall
139
+ spinner.start(`Uninstalling ${chalk.cyan(packageName)}...`);
140
+ spinner.stopAndPersist({ symbol: '📦', text: `Uninstalling ${chalk.cyan(packageName)}...` });
141
+ await runCommand(pm, uninstallArgs, baseDir);
142
+ console.log();
143
+ console.log(chalk.green(`✓ Uninstalled ${packageName}`));
144
+ }
145
+ catch (error) {
146
+ spinner.fail('Uninstall failed');
147
+ if (error instanceof Error) {
148
+ console.error(chalk.red(error.message));
149
+ }
150
+ process.exit(1);
151
+ }
152
+ }
153
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * trik upgrade command
3
+ *
4
+ * Upgrades an installed trik to the latest version.
5
+ */
6
+ interface UpgradeOptions {
7
+ force?: boolean;
8
+ }
9
+ export declare function upgradeCommand(trikInput: string, options: UpgradeOptions): Promise<void>;
10
+ /**
11
+ * Upgrade all installed triks
12
+ */
13
+ export declare function upgradeAllCommand(options: UpgradeOptions): Promise<void>;
14
+ export {};
15
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAsEf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF9E"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * trik upgrade command
3
+ *
4
+ * Upgrades an installed trik to the latest version.
5
+ */
6
+ import { rmSync } from 'node:fs';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import * as semver from 'semver';
10
+ import { parseTrikName } from '../types.js';
11
+ import { registry } from '../lib/registry.js';
12
+ import { getConfigContext } from '../lib/config.js';
13
+ import { getInstalledTrik, getInstalledTriks, isTrikInstalled, removeFromLockfile, getTrikPath, } from '../lib/storage.js';
14
+ import { installCommand } from './install.js';
15
+ export async function upgradeCommand(trikInput, options) {
16
+ const spinner = ora();
17
+ try {
18
+ // Get the current config context (local if available, otherwise global)
19
+ const ctx = getConfigContext();
20
+ // Parse the trik name
21
+ const { fullName } = parseTrikName(trikInput);
22
+ // Check if installed in this scope
23
+ if (!isTrikInstalled(fullName, ctx)) {
24
+ console.log(chalk.red(`${fullName} is not installed`));
25
+ if (ctx.scope === 'local') {
26
+ console.log(chalk.dim(` (checked in ${ctx.trikhubDir})`));
27
+ }
28
+ console.log(chalk.dim(`Use 'trik install ${fullName}' to install it`));
29
+ process.exit(1);
30
+ }
31
+ const installed = getInstalledTrik(fullName, ctx);
32
+ if (!installed) {
33
+ console.log(chalk.red(`Could not find installation info for ${fullName}`));
34
+ process.exit(1);
35
+ }
36
+ // Fetch latest version from registry
37
+ spinner.start(`Checking for updates to ${chalk.cyan(fullName)}...`);
38
+ const trikInfo = await registry.getTrik(fullName);
39
+ if (!trikInfo) {
40
+ spinner.fail(`Trik ${chalk.red(fullName)} not found in registry`);
41
+ process.exit(1);
42
+ }
43
+ const currentVersion = installed.version;
44
+ const latestVersion = trikInfo.latestVersion;
45
+ // Compare versions
46
+ if (!options.force && semver.gte(currentVersion, latestVersion)) {
47
+ spinner.succeed(`${chalk.green(fullName)} is already up to date (v${currentVersion})`);
48
+ return;
49
+ }
50
+ spinner.text = `Upgrading ${chalk.cyan(fullName)} from v${currentVersion} to v${latestVersion}...`;
51
+ // Remove current installation
52
+ const installPath = getTrikPath(fullName, ctx);
53
+ rmSync(installPath, { recursive: true, force: true });
54
+ removeFromLockfile(fullName, ctx);
55
+ spinner.stop();
56
+ // Reinstall with latest version
57
+ // Note: installCommand will resolve config and should find the same context
58
+ await installCommand(fullName, { version: latestVersion });
59
+ console.log();
60
+ console.log(chalk.green(`✓ Upgraded ${fullName} from v${currentVersion} → v${latestVersion}`));
61
+ }
62
+ catch (error) {
63
+ spinner.fail('Upgrade failed');
64
+ if (error instanceof Error) {
65
+ console.error(chalk.red(error.message));
66
+ }
67
+ process.exit(1);
68
+ }
69
+ }
70
+ /**
71
+ * Upgrade all installed triks
72
+ */
73
+ export async function upgradeAllCommand(options) {
74
+ const spinner = ora();
75
+ try {
76
+ // Get the current config context (local if available, otherwise global)
77
+ const ctx = getConfigContext();
78
+ // Get all installed triks in this scope
79
+ const installedTriks = getInstalledTriks(ctx);
80
+ if (installedTriks.length === 0) {
81
+ console.log(chalk.yellow('No triks installed'));
82
+ if (ctx.scope === 'local') {
83
+ console.log(chalk.dim(` (in ${ctx.trikhubDir})`));
84
+ }
85
+ return;
86
+ }
87
+ const scopeLabel = ctx.scope === 'local'
88
+ ? ` (local: ${ctx.trikhubDir})`
89
+ : '';
90
+ console.log(chalk.cyan(`Checking ${installedTriks.length} installed trik(s) for updates...${scopeLabel}\n`));
91
+ let upgraded = 0;
92
+ let upToDate = 0;
93
+ let failed = 0;
94
+ for (const installed of installedTriks) {
95
+ spinner.start(`Checking ${chalk.cyan(installed.fullName)}...`);
96
+ try {
97
+ const trikInfo = await registry.getTrik(installed.fullName);
98
+ if (!trikInfo) {
99
+ spinner.warn(`${installed.fullName} not found in registry`);
100
+ failed++;
101
+ continue;
102
+ }
103
+ const currentVersion = installed.version;
104
+ const latestVersion = trikInfo.latestVersion;
105
+ if (!options.force && semver.gte(currentVersion, latestVersion)) {
106
+ spinner.succeed(`${installed.fullName} is up to date (v${currentVersion})`);
107
+ upToDate++;
108
+ continue;
109
+ }
110
+ spinner.text = `Upgrading ${installed.fullName} v${currentVersion} → v${latestVersion}...`;
111
+ // Remove and reinstall
112
+ const installPath = getTrikPath(installed.fullName, ctx);
113
+ rmSync(installPath, { recursive: true, force: true });
114
+ removeFromLockfile(installed.fullName, ctx);
115
+ spinner.stop();
116
+ await installCommand(installed.fullName, { version: latestVersion });
117
+ upgraded++;
118
+ }
119
+ catch (error) {
120
+ spinner.fail(`Failed to upgrade ${installed.fullName}`);
121
+ if (error instanceof Error) {
122
+ console.error(chalk.dim(` ${error.message}`));
123
+ }
124
+ failed++;
125
+ }
126
+ }
127
+ console.log();
128
+ console.log(chalk.bold('Summary:'));
129
+ if (upgraded > 0)
130
+ console.log(chalk.green(` ${upgraded} upgraded`));
131
+ if (upToDate > 0)
132
+ console.log(chalk.dim(` ${upToDate} up to date`));
133
+ if (failed > 0)
134
+ console.log(chalk.red(` ${failed} failed`));
135
+ }
136
+ catch (error) {
137
+ spinner.fail('Upgrade failed');
138
+ if (error instanceof Error) {
139
+ console.error(chalk.red(error.message));
140
+ }
141
+ process.exit(1);
142
+ }
143
+ }
144
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * TrikHub CLI Library Exports
3
+ *
4
+ * These exports can be used programmatically.
5
+ */
6
+ export * from './types.js';
7
+ export { loadConfig, saveConfig, loadLockfile, saveLockfile, getInstalledTriks, getInstalledTrik, isTrikInstalled, getTrikPath, TRIKHUB_DIR, TRIKS_DIR, CONFIG_PATH, LOCKFILE_PATH, } from './lib/storage.js';
8
+ export { RegistryClient, registry } from './lib/registry.js';
9
+ export { syncCommand } from './commands/sync.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * TrikHub CLI Library Exports
3
+ *
4
+ * These exports can be used programmatically.
5
+ */
6
+ // Types
7
+ export * from './types.js';
8
+ // Storage utilities
9
+ export { loadConfig, saveConfig, loadLockfile, saveLockfile, getInstalledTriks, getInstalledTrik, isTrikInstalled, getTrikPath, TRIKHUB_DIR, TRIKS_DIR, CONFIG_PATH, LOCKFILE_PATH, } from './lib/storage.js';
10
+ // Registry client
11
+ export { RegistryClient, registry } from './lib/registry.js';
12
+ // Commands (for programmatic use)
13
+ export { syncCommand } from './commands/sync.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,oBAAoB;AACpB,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,WAAW,EACX,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7D,kCAAkC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}