magicpath-ai 1.4.1 → 1.5.0-beta.1
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/dist/cli.js +137 -52
- package/package.json +6 -7
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js.map +0 -1
- package/dist/commands/add.d.ts +0 -48
- package/dist/commands/add.js +0 -451
- package/dist/commands/add.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -7
- package/dist/commands/auth.js +0 -189
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/clone.d.ts +0 -2
- package/dist/commands/clone.js +0 -241
- package/dist/commands/clone.js.map +0 -1
- package/dist/commands/get-theme.d.ts +0 -2
- package/dist/commands/get-theme.js +0 -132
- package/dist/commands/get-theme.js.map +0 -1
- package/dist/commands/info.d.ts +0 -2
- package/dist/commands/info.js +0 -134
- package/dist/commands/info.js.map +0 -1
- package/dist/commands/inspect.d.ts +0 -53
- package/dist/commands/inspect.js +0 -122
- package/dist/commands/inspect.js.map +0 -1
- package/dist/commands/list-installed.d.ts +0 -2
- package/dist/commands/list-installed.js +0 -112
- package/dist/commands/list-installed.js.map +0 -1
- package/dist/commands/list-themes.d.ts +0 -2
- package/dist/commands/list-themes.js +0 -94
- package/dist/commands/list-themes.js.map +0 -1
- package/dist/commands/list.d.ts +0 -2
- package/dist/commands/list.js +0 -216
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/schema.d.ts +0 -2
- package/dist/commands/schema.js +0 -292
- package/dist/commands/schema.js.map +0 -1
- package/dist/commands/search.d.ts +0 -2
- package/dist/commands/search.js +0 -124
- package/dist/commands/search.js.map +0 -1
- package/dist/commands/selection.d.ts +0 -2
- package/dist/commands/selection.js +0 -157
- package/dist/commands/selection.js.map +0 -1
- package/dist/commands/setup-skills.d.ts +0 -2
- package/dist/commands/setup-skills.js +0 -13
- package/dist/commands/setup-skills.js.map +0 -1
- package/dist/commands/view.d.ts +0 -2
- package/dist/commands/view.js +0 -27
- package/dist/commands/view.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -2
- package/dist/commands/whoami.js +0 -66
- package/dist/commands/whoami.js.map +0 -1
- package/dist/util/api.d.ts +0 -17
- package/dist/util/api.js +0 -49
- package/dist/util/api.js.map +0 -1
- package/dist/util/auth.d.ts +0 -26
- package/dist/util/auth.js +0 -113
- package/dist/util/auth.js.map +0 -1
- package/dist/util/authError.d.ts +0 -4
- package/dist/util/authError.js +0 -7
- package/dist/util/authError.js.map +0 -1
- package/dist/util/banner.d.ts +0 -1
- package/dist/util/banner.js +0 -79
- package/dist/util/banner.js.map +0 -1
- package/dist/util/component.d.ts +0 -186
- package/dist/util/component.js +0 -349
- package/dist/util/component.js.map +0 -1
- package/dist/util/dependencies.d.ts +0 -12
- package/dist/util/dependencies.js +0 -93
- package/dist/util/dependencies.js.map +0 -1
- package/dist/util/error.d.ts +0 -9
- package/dist/util/error.js +0 -10
- package/dist/util/error.js.map +0 -1
- package/dist/util/ide.d.ts +0 -3
- package/dist/util/ide.js +0 -145
- package/dist/util/ide.js.map +0 -1
- package/dist/util/liveblocks.d.ts +0 -24
- package/dist/util/liveblocks.js +0 -112
- package/dist/util/liveblocks.js.map +0 -1
- package/dist/util/logger.d.ts +0 -7
- package/dist/util/logger.js +0 -21
- package/dist/util/logger.js.map +0 -1
- package/dist/util/output.d.ts +0 -15
- package/dist/util/output.js +0 -36
- package/dist/util/output.js.map +0 -1
- package/dist/util/project.d.ts +0 -3
- package/dist/util/project.js +0 -64
- package/dist/util/project.js.map +0 -1
- package/dist/util/ui.d.ts +0 -11
- package/dist/util/ui.js +0 -30
- package/dist/util/ui.js.map +0 -1
package/dist/util/component.js
DELETED
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { z } from 'zod';
|
|
5
|
-
import { makeRegistryUrl } from './api.js';
|
|
6
|
-
import { MagicPathError } from './error.js';
|
|
7
|
-
import { AuthRequiredError } from './authError.js';
|
|
8
|
-
import { logger } from './logger.js';
|
|
9
|
-
import { getAuthHeaders } from './auth.js';
|
|
10
|
-
// Schema for the registry API response
|
|
11
|
-
const componentFileSchema = z.object({
|
|
12
|
-
name: z.string(),
|
|
13
|
-
path: z.string(),
|
|
14
|
-
content: z.string(),
|
|
15
|
-
});
|
|
16
|
-
const registryResponseSchema = z.object({
|
|
17
|
-
data: z.object({
|
|
18
|
-
name: z.string(),
|
|
19
|
-
generatedName: z.string(),
|
|
20
|
-
files: z.array(componentFileSchema),
|
|
21
|
-
utils: z.object({
|
|
22
|
-
content: z.string(),
|
|
23
|
-
}),
|
|
24
|
-
dependencies: z.array(z.string()),
|
|
25
|
-
}),
|
|
26
|
-
});
|
|
27
|
-
/**
|
|
28
|
-
* Extract export information from a component's source code
|
|
29
|
-
* Parses the TSX/TS content to find exported components and their props
|
|
30
|
-
*/
|
|
31
|
-
export function extractComponentExports(content) {
|
|
32
|
-
// Try to find default export patterns
|
|
33
|
-
// Pattern: export default function ComponentName
|
|
34
|
-
const defaultFuncMatch = content.match(/export\s+default\s+function\s+([A-Z][a-zA-Z0-9]*)/);
|
|
35
|
-
// Pattern: export default ComponentName (at end or with semicolon)
|
|
36
|
-
const defaultVarMatch = content.match(/export\s+default\s+([A-Z][a-zA-Z0-9]*)\s*[;\n]/);
|
|
37
|
-
// Try to find named export patterns
|
|
38
|
-
// Pattern: export function ComponentName
|
|
39
|
-
const namedFuncMatch = content.match(/export\s+function\s+([A-Z][a-zA-Z0-9]*)/);
|
|
40
|
-
// Pattern: export const ComponentName
|
|
41
|
-
const namedConstMatch = content.match(/export\s+const\s+([A-Z][a-zA-Z0-9]*)\s*[=:]/);
|
|
42
|
-
let componentName = null;
|
|
43
|
-
let isDefault = false;
|
|
44
|
-
if (defaultFuncMatch) {
|
|
45
|
-
componentName = defaultFuncMatch[1];
|
|
46
|
-
isDefault = true;
|
|
47
|
-
}
|
|
48
|
-
else if (defaultVarMatch) {
|
|
49
|
-
componentName = defaultVarMatch[1];
|
|
50
|
-
isDefault = true;
|
|
51
|
-
}
|
|
52
|
-
else if (namedFuncMatch) {
|
|
53
|
-
componentName = namedFuncMatch[1];
|
|
54
|
-
}
|
|
55
|
-
else if (namedConstMatch) {
|
|
56
|
-
componentName = namedConstMatch[1];
|
|
57
|
-
}
|
|
58
|
-
if (!componentName) {
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
// Try to find props interface/type
|
|
62
|
-
// Pattern: interface ComponentNameProps { ... } or type ComponentNameProps = { ... }
|
|
63
|
-
const propsTypeName = `${componentName}Props`;
|
|
64
|
-
const propsInterfaceRegex = new RegExp(`(?:interface|type)\\s+${propsTypeName}\\s*(?:=\\s*)?\\{([^}]*)\\}`, 's');
|
|
65
|
-
const propsMatch = content.match(propsInterfaceRegex);
|
|
66
|
-
const requiredProps = [];
|
|
67
|
-
const optionalProps = [];
|
|
68
|
-
if (propsMatch) {
|
|
69
|
-
const propsBody = propsMatch[1];
|
|
70
|
-
// Parse individual props - look for patterns like:
|
|
71
|
-
// propName: type (required)
|
|
72
|
-
// propName?: type (optional)
|
|
73
|
-
const propLines = propsBody.split(/[;\n]/).filter((line) => line.trim());
|
|
74
|
-
for (const line of propLines) {
|
|
75
|
-
// Skip comments and empty lines
|
|
76
|
-
const trimmed = line.trim();
|
|
77
|
-
if (!trimmed || trimmed.startsWith('//') || trimmed.startsWith('/*')) {
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
// Match prop patterns: name?: type or name: type
|
|
81
|
-
const propMatch = trimmed.match(/^(\w+)(\?)?:/);
|
|
82
|
-
if (propMatch) {
|
|
83
|
-
const propName = propMatch[1];
|
|
84
|
-
const isOptional = !!propMatch[2];
|
|
85
|
-
// Skip children prop as it's typically implicit
|
|
86
|
-
if (propName === 'children')
|
|
87
|
-
continue;
|
|
88
|
-
if (isOptional) {
|
|
89
|
-
optionalProps.push(propName);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
requiredProps.push(propName);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return {
|
|
98
|
-
name: componentName,
|
|
99
|
-
isDefault,
|
|
100
|
-
propsType: propsMatch ? propsTypeName : undefined,
|
|
101
|
-
requiredProps,
|
|
102
|
-
optionalProps,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Generate an import statement for a component
|
|
107
|
-
*/
|
|
108
|
-
export function generateImportStatement(exportInfo, importPath) {
|
|
109
|
-
if (exportInfo.isDefault) {
|
|
110
|
-
return `import ${exportInfo.name} from '${importPath}';`;
|
|
111
|
-
}
|
|
112
|
-
return `import { ${exportInfo.name} } from '${importPath}';`;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Generate a usage example for a component
|
|
116
|
-
*/
|
|
117
|
-
export function generateUsageExample(exportInfo) {
|
|
118
|
-
const { name, requiredProps, optionalProps } = exportInfo;
|
|
119
|
-
if (requiredProps.length === 0 && optionalProps.length === 0) {
|
|
120
|
-
return `<${name} />`;
|
|
121
|
-
}
|
|
122
|
-
// Build props string with placeholders for required props
|
|
123
|
-
const propsStr = requiredProps
|
|
124
|
-
.map((prop) => `${prop}={/* TODO */}`)
|
|
125
|
-
.join(' ');
|
|
126
|
-
if (propsStr) {
|
|
127
|
-
return `<${name} ${propsStr} />`;
|
|
128
|
-
}
|
|
129
|
-
// If only optional props, show a simple example
|
|
130
|
-
return `<${name} />`;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Generate a usage.md file content for a component
|
|
134
|
-
*/
|
|
135
|
-
export function generateUsageMarkdown(options) {
|
|
136
|
-
const { componentName, importPath, exportInfo, fileName } = options;
|
|
137
|
-
const lines = [`# ${componentName}`, '', '## Import', '', '```tsx'];
|
|
138
|
-
if (exportInfo) {
|
|
139
|
-
lines.push(generateImportStatement(exportInfo, importPath));
|
|
140
|
-
lines.push('```');
|
|
141
|
-
lines.push('');
|
|
142
|
-
lines.push('## Usage');
|
|
143
|
-
lines.push('');
|
|
144
|
-
lines.push('```tsx');
|
|
145
|
-
lines.push(generateUsageExample(exportInfo));
|
|
146
|
-
lines.push('```');
|
|
147
|
-
if (exportInfo.requiredProps.length > 0) {
|
|
148
|
-
lines.push('');
|
|
149
|
-
lines.push('## Required Props');
|
|
150
|
-
lines.push('');
|
|
151
|
-
for (const prop of exportInfo.requiredProps) {
|
|
152
|
-
lines.push(`- \`${prop}\``);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
if (exportInfo.optionalProps.length > 0) {
|
|
156
|
-
lines.push('');
|
|
157
|
-
lines.push('## Optional Props');
|
|
158
|
-
lines.push('');
|
|
159
|
-
for (const prop of exportInfo.optionalProps) {
|
|
160
|
-
lines.push(`- \`${prop}\``);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
// Fallback
|
|
166
|
-
lines.push(`import { ${fileName} } from '${importPath}';`);
|
|
167
|
-
lines.push('```');
|
|
168
|
-
}
|
|
169
|
-
lines.push('');
|
|
170
|
-
return lines.join('\n');
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Write the usage.md file to the component directory
|
|
174
|
-
*/
|
|
175
|
-
export function writeUsageFile(targetDir, options) {
|
|
176
|
-
const content = generateUsageMarkdown(options);
|
|
177
|
-
const usagePath = path.join(targetDir, 'usage.md');
|
|
178
|
-
fs.writeFileSync(usagePath, content, 'utf8');
|
|
179
|
-
logger.debug({ message: 'Wrote usage file', usagePath });
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Fetch component data from the MagicPath registry
|
|
183
|
-
*/
|
|
184
|
-
export async function fetchComponent(generatedName) {
|
|
185
|
-
const url = makeRegistryUrl(generatedName);
|
|
186
|
-
logger.debug({ message: 'Fetching component from registry', url });
|
|
187
|
-
let headers;
|
|
188
|
-
try {
|
|
189
|
-
headers = getAuthHeaders();
|
|
190
|
-
}
|
|
191
|
-
catch {
|
|
192
|
-
throw new AuthRequiredError();
|
|
193
|
-
}
|
|
194
|
-
try {
|
|
195
|
-
const response = await axios.get(url, { headers });
|
|
196
|
-
const parsed = registryResponseSchema.parse(response.data);
|
|
197
|
-
return parsed.data;
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
if (axios.isAxiosError(error)) {
|
|
201
|
-
if (error.response?.status === 401) {
|
|
202
|
-
throw new AuthRequiredError();
|
|
203
|
-
}
|
|
204
|
-
if (error.response?.status === 403) {
|
|
205
|
-
throw new MagicPathError('A Pro subscription is required to install components. Visit https://www.magicpath.ai/documentation/help/plans to see the plans available.', {
|
|
206
|
-
code: 'FORBIDDEN',
|
|
207
|
-
suggestion: 'Upgrade to a Pro subscription at https://www.magicpath.ai/documentation/help/plans',
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
if (error.response?.status === 404) {
|
|
211
|
-
throw new MagicPathError(`Component "${generatedName}" not found. Please check the name and try again.`, {
|
|
212
|
-
code: 'NOT_FOUND',
|
|
213
|
-
suggestion: 'Run `magicpath-ai search <query>` to find available components.',
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
throw new MagicPathError(`Failed to fetch component: ${error.message}`);
|
|
217
|
-
}
|
|
218
|
-
throw new MagicPathError('Failed to fetch component. Please check your internet connection and try again.');
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Check which files already exist in the target directory
|
|
223
|
-
*/
|
|
224
|
-
export function checkExistingFiles(files, targetDir) {
|
|
225
|
-
const existing = [];
|
|
226
|
-
for (const file of files) {
|
|
227
|
-
const filePath = path.join(targetDir, file.path);
|
|
228
|
-
if (fs.existsSync(filePath)) {
|
|
229
|
-
existing.push(file.path);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
return existing;
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Adjust relative import paths in component content to account for extra directory depth.
|
|
236
|
-
* When placing components in a subfolder, relative imports need an extra "../" prefix.
|
|
237
|
-
*
|
|
238
|
-
* @param content - The file content with imports to adjust
|
|
239
|
-
* @param extraDepth - Number of extra directory levels to account for (default: 1)
|
|
240
|
-
*/
|
|
241
|
-
export function adjustRelativeImports(content, extraDepth = 1) {
|
|
242
|
-
const prefix = '../'.repeat(extraDepth);
|
|
243
|
-
let result = content;
|
|
244
|
-
// 1. Handle static imports/exports with relative paths starting with ../
|
|
245
|
-
// Covers: import { x } from '../path', import type { x } from '../path',
|
|
246
|
-
// export { x } from '../path', import x from "../path"
|
|
247
|
-
result = result.replace(/((?:import|export)(?:\s+type)?\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)(?:\s*,\s*(?:\{[^}]*\}|\*\s+as\s+\w+|\w+))*\s+from\s+)?['"])(\.\.\/)([^'"]+['"])/g, (match, before, dotDot, after) => {
|
|
248
|
-
return `${before}${prefix}${dotDot}${after}`;
|
|
249
|
-
});
|
|
250
|
-
// 2. Handle dynamic imports: import('../path') or import("../path")
|
|
251
|
-
result = result.replace(/(import\s*\(\s*['"])(\.\.\/)([^'"]+['"]\s*\))/g, (match, before, dotDot, after) => {
|
|
252
|
-
return `${before}${prefix}${dotDot}${after}`;
|
|
253
|
-
});
|
|
254
|
-
// 3. Handle require statements: require('../path') or require("../path")
|
|
255
|
-
result = result.replace(/(require\s*\(\s*['"])(\.\.\/)([^'"]+['"]\s*\))/g, (match, before, dotDot, after) => {
|
|
256
|
-
return `${before}${prefix}${dotDot}${after}`;
|
|
257
|
-
});
|
|
258
|
-
return result;
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Write component files to the target directory
|
|
262
|
-
*
|
|
263
|
-
* @param files - Array of component files to write
|
|
264
|
-
* @param targetDir - Target directory to write files to
|
|
265
|
-
* @param adjustImports - Whether to adjust relative imports for subfolder placement (default: false)
|
|
266
|
-
*/
|
|
267
|
-
export function writeComponentFiles(files, targetDir, adjustImports = false) {
|
|
268
|
-
// Ensure target directory exists
|
|
269
|
-
fs.ensureDirSync(targetDir);
|
|
270
|
-
for (const file of files) {
|
|
271
|
-
const filePath = path.join(targetDir, file.path);
|
|
272
|
-
const fileDir = path.dirname(filePath);
|
|
273
|
-
// Ensure subdirectory exists
|
|
274
|
-
fs.ensureDirSync(fileDir);
|
|
275
|
-
// Adjust imports if needed, then write the file
|
|
276
|
-
const content = adjustImports
|
|
277
|
-
? adjustRelativeImports(file.content)
|
|
278
|
-
: file.content;
|
|
279
|
-
fs.writeFileSync(filePath, content, 'utf8');
|
|
280
|
-
logger.debug({ message: 'Wrote file', filePath });
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Check if utils.ts already exists and has the cn function
|
|
285
|
-
*/
|
|
286
|
-
export function checkUtilsExists(utilsDir) {
|
|
287
|
-
const utilsPath = path.join(utilsDir, 'utils.ts');
|
|
288
|
-
if (!fs.existsSync(utilsPath)) {
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
|
-
// Check if it contains the cn function
|
|
292
|
-
try {
|
|
293
|
-
const content = fs.readFileSync(utilsPath, 'utf8');
|
|
294
|
-
return content.includes('export function cn');
|
|
295
|
-
}
|
|
296
|
-
catch {
|
|
297
|
-
return false;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Write the utils.ts file
|
|
302
|
-
*/
|
|
303
|
-
export function writeUtilsFile(utilsContent, utilsDir) {
|
|
304
|
-
fs.ensureDirSync(utilsDir);
|
|
305
|
-
const utilsPath = path.join(utilsDir, 'utils.ts');
|
|
306
|
-
fs.writeFileSync(utilsPath, utilsContent, 'utf8');
|
|
307
|
-
logger.debug({ message: 'Wrote utils file', utilsPath });
|
|
308
|
-
}
|
|
309
|
-
// Default paths
|
|
310
|
-
export const DEFAULT_COMPONENTS_PATH = 'src/components/magicpath';
|
|
311
|
-
export const DEFAULT_UTILS_PATH = 'src/lib';
|
|
312
|
-
/**
|
|
313
|
-
* Sanitize a component name for use as a folder name
|
|
314
|
-
* - Converts to lowercase kebab-case
|
|
315
|
-
* - Removes special characters
|
|
316
|
-
* - Replaces spaces with hyphens
|
|
317
|
-
* - Falls back to 'component' if the result would be empty
|
|
318
|
-
*/
|
|
319
|
-
export function sanitizeComponentFolderName(name) {
|
|
320
|
-
const sanitized = name
|
|
321
|
-
.trim()
|
|
322
|
-
// Convert camelCase/PascalCase to kebab-case
|
|
323
|
-
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
324
|
-
.toLowerCase()
|
|
325
|
-
// Replace spaces and underscores with hyphens
|
|
326
|
-
.replace(/[\s_]+/g, '-')
|
|
327
|
-
// Remove any characters that aren't alphanumeric or hyphens
|
|
328
|
-
.replace(/[^a-z0-9-]/g, '')
|
|
329
|
-
// Replace multiple consecutive hyphens with a single one
|
|
330
|
-
.replace(/-+/g, '-')
|
|
331
|
-
// Remove leading/trailing hyphens
|
|
332
|
-
.replace(/^-+|-+$/g, '');
|
|
333
|
-
// Fallback to 'component' if sanitization resulted in empty string
|
|
334
|
-
return sanitized || 'component';
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Resolve the components path (with optional override)
|
|
338
|
-
*/
|
|
339
|
-
export function resolveComponentsPath(overridePath, cwd = process.cwd()) {
|
|
340
|
-
const relativePath = overridePath || DEFAULT_COMPONENTS_PATH;
|
|
341
|
-
return path.join(cwd, relativePath);
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Resolve the utils path
|
|
345
|
-
*/
|
|
346
|
-
export function resolveUtilsPath(cwd = process.cwd()) {
|
|
347
|
-
return path.join(cwd, DEFAULT_UTILS_PATH);
|
|
348
|
-
}
|
|
349
|
-
//# sourceMappingURL=component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/util/component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export declare function installDependencies(projectDir: string): void;
|
|
2
|
-
/**
|
|
3
|
-
* Get currently installed dependencies from package.json
|
|
4
|
-
*/
|
|
5
|
-
export declare function getInstalledDependencies(projectDir: string): Set<string>;
|
|
6
|
-
/**
|
|
7
|
-
* Install specific packages that are missing
|
|
8
|
-
*/
|
|
9
|
-
export declare function installPackages(packages: string[], projectDir: string): {
|
|
10
|
-
installed: string[];
|
|
11
|
-
skipped: string[];
|
|
12
|
-
};
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'child_process';
|
|
2
|
-
import ora from 'ora';
|
|
3
|
-
import fs from 'fs-extra';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import { MagicPathError } from './error.js';
|
|
6
|
-
import { logger } from './logger.js';
|
|
7
|
-
/**
|
|
8
|
-
* Detect which package manager is available (prefers yarn)
|
|
9
|
-
*/
|
|
10
|
-
function detectPackageManager() {
|
|
11
|
-
try {
|
|
12
|
-
execSync('yarn --version', { stdio: 'ignore' });
|
|
13
|
-
return 'yarn';
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
return 'npm';
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export function installDependencies(projectDir) {
|
|
20
|
-
const packageManager = detectPackageManager();
|
|
21
|
-
const installSpinner = ora(`📦 Installing dependencies using ${packageManager}...`).start();
|
|
22
|
-
try {
|
|
23
|
-
const command = packageManager === 'yarn' ? 'yarn install' : 'npm install';
|
|
24
|
-
execSync(command, {
|
|
25
|
-
cwd: projectDir,
|
|
26
|
-
stdio: 'ignore', // Changed to ignore to avoid conflicts with spinner
|
|
27
|
-
});
|
|
28
|
-
installSpinner.succeed('Dependencies installed successfully!');
|
|
29
|
-
}
|
|
30
|
-
catch (err) {
|
|
31
|
-
installSpinner.fail('Failed to install dependencies');
|
|
32
|
-
throw new MagicPathError('Failed to install dependencies. Please check your internet connection and try again.');
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Get currently installed dependencies from package.json
|
|
37
|
-
*/
|
|
38
|
-
export function getInstalledDependencies(projectDir) {
|
|
39
|
-
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
40
|
-
if (!fs.existsSync(packageJsonPath)) {
|
|
41
|
-
return new Set();
|
|
42
|
-
}
|
|
43
|
-
try {
|
|
44
|
-
const packageJson = fs.readJsonSync(packageJsonPath);
|
|
45
|
-
const deps = new Set();
|
|
46
|
-
if (packageJson.dependencies) {
|
|
47
|
-
Object.keys(packageJson.dependencies).forEach((dep) => deps.add(dep));
|
|
48
|
-
}
|
|
49
|
-
if (packageJson.devDependencies) {
|
|
50
|
-
Object.keys(packageJson.devDependencies).forEach((dep) => deps.add(dep));
|
|
51
|
-
}
|
|
52
|
-
return deps;
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
return new Set();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Install specific packages that are missing
|
|
60
|
-
*/
|
|
61
|
-
export function installPackages(packages, projectDir) {
|
|
62
|
-
if (packages.length === 0) {
|
|
63
|
-
return { installed: [], skipped: [] };
|
|
64
|
-
}
|
|
65
|
-
// Check which packages are already installed
|
|
66
|
-
const installed = getInstalledDependencies(projectDir);
|
|
67
|
-
const toInstall = packages.filter((pkg) => !installed.has(pkg));
|
|
68
|
-
const skipped = packages.filter((pkg) => installed.has(pkg));
|
|
69
|
-
if (toInstall.length === 0) {
|
|
70
|
-
logger.debug('All dependencies already installed');
|
|
71
|
-
return { installed: [], skipped };
|
|
72
|
-
}
|
|
73
|
-
const packageManager = detectPackageManager();
|
|
74
|
-
const installSpinner = ora(`📦 Installing ${toInstall.length} package${toInstall.length > 1 ? 's' : ''} using ${packageManager}...`).start();
|
|
75
|
-
try {
|
|
76
|
-
const packagesStr = toInstall.join(' ');
|
|
77
|
-
const command = packageManager === 'yarn'
|
|
78
|
-
? `yarn add ${packagesStr}`
|
|
79
|
-
: `npm install ${packagesStr}`;
|
|
80
|
-
logger.debug({ command });
|
|
81
|
-
execSync(command, {
|
|
82
|
-
cwd: projectDir,
|
|
83
|
-
stdio: 'ignore',
|
|
84
|
-
});
|
|
85
|
-
installSpinner.succeed(`Installed ${toInstall.length} package${toInstall.length > 1 ? 's' : ''}`);
|
|
86
|
-
return { installed: toInstall, skipped };
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
installSpinner.fail('Failed to install packages');
|
|
90
|
-
throw new MagicPathError(`Failed to install packages: ${toInstall.join(', ')}. Please install them manually.`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/util/dependencies.ts"],"names":[],"mappings":"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"}
|
package/dist/util/error.d.ts
DELETED
package/dist/util/error.js
DELETED
package/dist/util/error.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/util/error.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,IAAI,CAAU;IACd,UAAU,CAAU;IAEpB,YAAY,OAAe,EAAE,OAA+B;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACxC,CAAC;CACF"}
|
package/dist/util/ide.d.ts
DELETED
package/dist/util/ide.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'child_process';
|
|
2
|
-
import ora from 'ora';
|
|
3
|
-
import { MagicPathError } from './error.js';
|
|
4
|
-
export function openInIDE(projectDir, ide) {
|
|
5
|
-
const ideNames = {
|
|
6
|
-
cursor: 'Cursor',
|
|
7
|
-
antigravity: 'Antigravity',
|
|
8
|
-
vscode: 'VS Code',
|
|
9
|
-
webstorm: 'WebStorm',
|
|
10
|
-
};
|
|
11
|
-
const ideCommands = {
|
|
12
|
-
cursor: ['cursor', 'code'],
|
|
13
|
-
antigravity: ['agy', 'antigravity'],
|
|
14
|
-
vscode: ['code'],
|
|
15
|
-
webstorm: ['webstorm', 'web'],
|
|
16
|
-
};
|
|
17
|
-
const openSpinner = ora(`🚀 Opening project in ${ideNames[ide]}...`).start();
|
|
18
|
-
let didOpen = false;
|
|
19
|
-
try {
|
|
20
|
-
for (const command of ideCommands[ide]) {
|
|
21
|
-
if (didOpen)
|
|
22
|
-
break;
|
|
23
|
-
try {
|
|
24
|
-
execSync(`${command} .`, {
|
|
25
|
-
cwd: projectDir,
|
|
26
|
-
stdio: 'ignore',
|
|
27
|
-
});
|
|
28
|
-
didOpen = true;
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
didOpen = false;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
if (!didOpen)
|
|
35
|
-
throw new Error('Failed to open with command.');
|
|
36
|
-
openSpinner.succeed(`Project opened in ${ideNames[ide]}!`);
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
openSpinner.fail(`Failed to open ${ideNames[ide]}`);
|
|
40
|
-
// Provide specific installation instructions for each IDE
|
|
41
|
-
const installationInstructions = {
|
|
42
|
-
cursor: `❌ Cursor command not found!
|
|
43
|
-
|
|
44
|
-
🔧 To fix this, you need to install the Cursor command line tools:
|
|
45
|
-
|
|
46
|
-
📋 Instructions:
|
|
47
|
-
1. Open Cursor
|
|
48
|
-
2. Press Cmd+Shift+P (Mac) or Ctrl+Shift+P (Windows/Linux)
|
|
49
|
-
3. Type "Shell Command: Install 'cursor' command in PATH"
|
|
50
|
-
4. Select it and press Enter
|
|
51
|
-
5. Restart your terminal
|
|
52
|
-
|
|
53
|
-
💡 Alternative: If the above doesn't work, try:
|
|
54
|
-
- macOS: Add this to your ~/.zshrc or ~/.bash_profile:
|
|
55
|
-
export PATH="/Applications/Cursor.app/Contents/Resources/app/bin:$PATH"
|
|
56
|
-
- Or create a symlink: ln -s "/Applications/Cursor.app/Contents/Resources/app/bin/cursor" /usr/local/bin/cursor
|
|
57
|
-
|
|
58
|
-
🎯 Note: Cursor also responds to the 'code' command, so installing VS Code CLI tools may also work!`,
|
|
59
|
-
antigravity: `❌ Google Antigravity command not found!
|
|
60
|
-
|
|
61
|
-
🔧 To fix this, you need to install the Google Antigravity command line tools:
|
|
62
|
-
|
|
63
|
-
📋 Instructions:
|
|
64
|
-
1. Open Google Antigravity
|
|
65
|
-
2. Press Cmd+Shift+P (Mac) or Ctrl+Shift+P (Windows/Linux)
|
|
66
|
-
3. Type "Shell Command: Install 'agy' command in PATH"
|
|
67
|
-
4. Select it and press Enter
|
|
68
|
-
5. Restart your terminal
|
|
69
|
-
|
|
70
|
-
💡 Alternative: If the above doesn't work, try:
|
|
71
|
-
- macOS: Add this to your ~/.zshrc or ~/.bash_profile:
|
|
72
|
-
export PATH="/Applications/Antigravity.app/Contents/Resources/app/bin:$PATH"
|
|
73
|
-
- Or create a symlink: ln -s "/Applications/Antigravity.app/Contents/Resources/app/bin/antigravity" /usr/local/bin/antigravity
|
|
74
|
-
|
|
75
|
-
🎯 Note: Google Antigravity responds to both 'agy' and 'antigravity' commands!`,
|
|
76
|
-
vscode: `❌ VS Code command not found!
|
|
77
|
-
|
|
78
|
-
🔧 To fix this, you need to install the VS Code command line tools:
|
|
79
|
-
|
|
80
|
-
📋 Instructions:
|
|
81
|
-
1. Open VS Code
|
|
82
|
-
2. Press Cmd+Shift+P (Mac) or Ctrl+Shift+P (Windows/Linux)
|
|
83
|
-
3. Type "Shell Command: Install 'code' command in PATH"
|
|
84
|
-
4. Select it and press Enter
|
|
85
|
-
5. Restart your terminal
|
|
86
|
-
|
|
87
|
-
💡 Alternative: Add VS Code to your PATH manually
|
|
88
|
-
- macOS: Add this to your ~/.zshrc or ~/.bash_profile:
|
|
89
|
-
export PATH="/Applications/Visual Studio Code.app/Contents/Resources/app/bin:$PATH"
|
|
90
|
-
|
|
91
|
-
📖 More help: https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line`,
|
|
92
|
-
webstorm: `❌ WebStorm command not found!
|
|
93
|
-
|
|
94
|
-
🔧 To fix this, you need to enable WebStorm command line tools:
|
|
95
|
-
|
|
96
|
-
📋 Instructions:
|
|
97
|
-
1. Open WebStorm
|
|
98
|
-
2. Go to Tools → Create Command-line Launcher...
|
|
99
|
-
3. Choose the installation path (default is usually fine)
|
|
100
|
-
4. Click OK
|
|
101
|
-
5. Restart your terminal
|
|
102
|
-
|
|
103
|
-
💡 Alternative methods:
|
|
104
|
-
- macOS: Add this to your ~/.zshrc or ~/.bash_profile:
|
|
105
|
-
export PATH="/Applications/WebStorm.app/Contents/MacOS:$PATH"
|
|
106
|
-
- Or create an alias: alias webstorm="open -na 'WebStorm.app'"
|
|
107
|
-
|
|
108
|
-
📖 More help: https://www.jetbrains.com/help/webstorm/working-with-the-ide-features-from-command-line.html`,
|
|
109
|
-
};
|
|
110
|
-
throw new MagicPathError(installationInstructions[ide]);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
export function openInFileManager(projectDir) {
|
|
114
|
-
const platform = process.platform;
|
|
115
|
-
let command;
|
|
116
|
-
switch (platform) {
|
|
117
|
-
case 'darwin': // macOS
|
|
118
|
-
command = 'open';
|
|
119
|
-
break;
|
|
120
|
-
case 'win32': // Windows
|
|
121
|
-
command = 'explorer';
|
|
122
|
-
break;
|
|
123
|
-
default: // Linux and others
|
|
124
|
-
command = 'xdg-open';
|
|
125
|
-
break;
|
|
126
|
-
}
|
|
127
|
-
const fileManagerNames = {
|
|
128
|
-
darwin: 'Finder',
|
|
129
|
-
win32: 'File Explorer',
|
|
130
|
-
linux: 'File Manager',
|
|
131
|
-
};
|
|
132
|
-
const fileManagerName = fileManagerNames[platform] || 'File Manager';
|
|
133
|
-
const openSpinner = ora(`📁 Opening project in ${fileManagerName}...`).start();
|
|
134
|
-
try {
|
|
135
|
-
execSync(`${command} "${projectDir}"`, {
|
|
136
|
-
stdio: 'ignore',
|
|
137
|
-
});
|
|
138
|
-
openSpinner.succeed(`Project opened in ${fileManagerName}!`);
|
|
139
|
-
}
|
|
140
|
-
catch (err) {
|
|
141
|
-
openSpinner.fail(`Failed to open ${fileManagerName}`);
|
|
142
|
-
throw new MagicPathError(`Failed to open project in ${fileManagerName}. The file manager may not be available.`);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=ide.js.map
|
package/dist/util/ide.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ide.js","sourceRoot":"","sources":["../../src/util/ide.ts"],"names":[],"mappings":"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"}
|