vibefast-cli 0.3.0 → 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/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +287 -40
- package/dist/commands/init.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/init.ts +334 -44
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,WAAW,SAmpBpB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -25,31 +25,88 @@ export const initCommand = new Command('init')
|
|
|
25
25
|
log.info('This directory already contains a VibeFast project.');
|
|
26
26
|
process.exit(1);
|
|
27
27
|
}
|
|
28
|
-
// Step 1: Choose
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
// Step 1: Choose starter type
|
|
29
|
+
let starterType = 'clean';
|
|
30
|
+
let selectedFeatures = [];
|
|
31
|
+
if (!options.yes) {
|
|
32
|
+
starterType = await promptSelect('How would you like to start?', [
|
|
33
|
+
{
|
|
34
|
+
name: 'Clean',
|
|
35
|
+
value: 'clean',
|
|
36
|
+
description: 'Minimal setup - add features later with vf add',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Custom',
|
|
40
|
+
value: 'custom',
|
|
41
|
+
description: 'Choose features now - one-shot setup',
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
44
|
+
log.info(`Selected: ${starterType === 'clean' ? 'Clean starter' : 'Custom setup'}`);
|
|
45
|
+
log.plain('');
|
|
46
|
+
// If custom, let them choose features
|
|
47
|
+
if (starterType === 'custom') {
|
|
48
|
+
const { promptMultiSelectAsync } = await import('../core/prompt.js');
|
|
49
|
+
const { RECIPES, getRecipesByCategory } = await import('../core/recipes.js');
|
|
50
|
+
log.info('📦 Select features to include:');
|
|
51
|
+
log.plain('');
|
|
52
|
+
// Get native features
|
|
53
|
+
const nativeFeatures = getRecipesByCategory('feature').map(r => ({
|
|
54
|
+
value: r.name,
|
|
55
|
+
label: `${r.icon} ${r.name}`,
|
|
56
|
+
description: r.description,
|
|
57
|
+
}));
|
|
58
|
+
selectedFeatures = await promptMultiSelectAsync('Select features (use space to toggle, enter to confirm):', nativeFeatures);
|
|
59
|
+
if (selectedFeatures.length > 0) {
|
|
60
|
+
log.info(`Selected ${selectedFeatures.length} feature(s): ${selectedFeatures.join(', ')}`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
log.info('No features selected - starting with clean setup');
|
|
64
|
+
}
|
|
65
|
+
log.plain('');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
log.info('Using default: Clean starter');
|
|
70
|
+
log.plain('');
|
|
71
|
+
}
|
|
72
|
+
// Always use clean branch for cloning
|
|
73
|
+
const branch = 'clean';
|
|
74
|
+
// Step 1.5: Choose platforms
|
|
75
|
+
let platforms = ['native', 'web'];
|
|
76
|
+
if (!options.yes) {
|
|
77
|
+
const platformChoice = await promptSelect('Which platforms do you want to include?', [
|
|
78
|
+
{
|
|
79
|
+
name: 'Both (Native + Web)',
|
|
80
|
+
value: 'both',
|
|
81
|
+
description: 'Full monorepo with mobile and web app',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'Native Only (Expo)',
|
|
85
|
+
value: 'native',
|
|
86
|
+
description: 'Mobile app only (iOS & Android)',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'Web Only (Next.js)',
|
|
90
|
+
value: 'web',
|
|
91
|
+
description: 'Web app only',
|
|
92
|
+
},
|
|
93
|
+
]);
|
|
94
|
+
if (platformChoice === 'native') {
|
|
95
|
+
platforms = ['native'];
|
|
96
|
+
log.info('Selected: Native (Expo) only');
|
|
97
|
+
}
|
|
98
|
+
else if (platformChoice === 'web') {
|
|
99
|
+
platforms = ['web'];
|
|
100
|
+
log.info('Selected: Web (Next.js) only');
|
|
35
101
|
}
|
|
36
102
|
else {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
{
|
|
40
|
-
name: 'Full',
|
|
41
|
-
value: 'main',
|
|
42
|
-
description: 'All features included - ready to customize',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
name: 'Clean',
|
|
46
|
-
value: 'clean',
|
|
47
|
-
description: 'Minimal setup - add features as you need them',
|
|
48
|
-
},
|
|
49
|
-
]);
|
|
103
|
+
platforms = ['native', 'web'];
|
|
104
|
+
log.info('Selected: Both platforms');
|
|
50
105
|
}
|
|
51
106
|
}
|
|
52
|
-
|
|
107
|
+
else {
|
|
108
|
+
log.info('Using default: Both platforms');
|
|
109
|
+
}
|
|
53
110
|
log.plain('');
|
|
54
111
|
// Step 2: Get project name
|
|
55
112
|
const defaultName = 'vibefast-app';
|
|
@@ -71,13 +128,11 @@ export const initCommand = new Command('init')
|
|
|
71
128
|
// 2. GitHub CLI (gh auth)
|
|
72
129
|
// 3. Personal access token in URL
|
|
73
130
|
const repoUrl = 'https://github.com/mzafarr/vibefast-pro.git';
|
|
74
|
-
await withSpinner(`Cloning VibeFast monorepo (
|
|
131
|
+
await withSpinner(`Cloning VibeFast monorepo (clean starter)...`, async () => {
|
|
75
132
|
const git = simpleGit();
|
|
76
133
|
const cloneOptions = ['--depth', '1'];
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
cloneOptions.unshift('--branch', branch, '--single-branch');
|
|
80
|
-
}
|
|
134
|
+
// Always use clean branch
|
|
135
|
+
cloneOptions.unshift('--branch', 'clean', '--single-branch');
|
|
81
136
|
try {
|
|
82
137
|
await git.clone(repoUrl, projectName, cloneOptions);
|
|
83
138
|
}
|
|
@@ -105,8 +160,75 @@ export const initCommand = new Command('init')
|
|
|
105
160
|
successText: `✓ Repository cloned successfully`,
|
|
106
161
|
});
|
|
107
162
|
log.plain('');
|
|
108
|
-
// Step
|
|
163
|
+
// Step 3.5: Remove unwanted platforms
|
|
109
164
|
const projectPath = join(process.cwd(), projectName);
|
|
165
|
+
if (platforms.length < 2) {
|
|
166
|
+
await withSpinner('Cleaning up unwanted platforms...', async () => {
|
|
167
|
+
const { rmSync } = await import('fs');
|
|
168
|
+
const { join } = await import('path');
|
|
169
|
+
if (!platforms.includes('native')) {
|
|
170
|
+
// Remove native app
|
|
171
|
+
const nativePath = join(projectPath, 'apps/native');
|
|
172
|
+
if (existsSync(nativePath)) {
|
|
173
|
+
rmSync(nativePath, { recursive: true, force: true });
|
|
174
|
+
}
|
|
175
|
+
log.info(' ✓ Removed native app');
|
|
176
|
+
}
|
|
177
|
+
if (!platforms.includes('web')) {
|
|
178
|
+
// Remove web app
|
|
179
|
+
const webPath = join(projectPath, 'apps/web');
|
|
180
|
+
if (existsSync(webPath)) {
|
|
181
|
+
rmSync(webPath, { recursive: true, force: true });
|
|
182
|
+
}
|
|
183
|
+
log.info(' ✓ Removed web app');
|
|
184
|
+
}
|
|
185
|
+
// Update package.json workspaces
|
|
186
|
+
const rootPackageJsonPath = join(projectPath, 'package.json');
|
|
187
|
+
if (existsSync(rootPackageJsonPath)) {
|
|
188
|
+
const { readFileSync, writeFileSync } = await import('fs');
|
|
189
|
+
const packageJson = JSON.parse(readFileSync(rootPackageJsonPath, 'utf-8'));
|
|
190
|
+
if (packageJson.workspaces) {
|
|
191
|
+
const workspaces = packageJson.workspaces.filter((ws) => {
|
|
192
|
+
if (!platforms.includes('native') && ws.includes('apps/native'))
|
|
193
|
+
return false;
|
|
194
|
+
if (!platforms.includes('web') && ws.includes('apps/web'))
|
|
195
|
+
return false;
|
|
196
|
+
return true;
|
|
197
|
+
});
|
|
198
|
+
packageJson.workspaces = workspaces;
|
|
199
|
+
writeFileSync(rootPackageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
200
|
+
log.info(' ✓ Updated workspace configuration');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Update turbo.json
|
|
204
|
+
const turboJsonPath = join(projectPath, 'turbo.json');
|
|
205
|
+
if (existsSync(turboJsonPath)) {
|
|
206
|
+
const { readFileSync, writeFileSync } = await import('fs');
|
|
207
|
+
const turboJson = JSON.parse(readFileSync(turboJsonPath, 'utf-8'));
|
|
208
|
+
if (turboJson.pipeline) {
|
|
209
|
+
// Remove platform-specific tasks
|
|
210
|
+
const tasksToRemove = [];
|
|
211
|
+
if (!platforms.includes('native')) {
|
|
212
|
+
tasksToRemove.push('native:*', 'dev:native', 'build:native');
|
|
213
|
+
}
|
|
214
|
+
if (!platforms.includes('web')) {
|
|
215
|
+
tasksToRemove.push('web:*', 'dev:web', 'build:web');
|
|
216
|
+
}
|
|
217
|
+
tasksToRemove.forEach(task => {
|
|
218
|
+
if (turboJson.pipeline[task]) {
|
|
219
|
+
delete turboJson.pipeline[task];
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
writeFileSync(turboJsonPath, JSON.stringify(turboJson, null, 2));
|
|
223
|
+
log.info(' ✓ Updated Turbo configuration');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}, {
|
|
227
|
+
successText: '✓ Platform cleanup complete',
|
|
228
|
+
});
|
|
229
|
+
log.plain('');
|
|
230
|
+
}
|
|
231
|
+
// Step 4: Check for pnpm and install dependencies
|
|
110
232
|
if (!options.skipInstall) {
|
|
111
233
|
// Check if pnpm is installed
|
|
112
234
|
log.info('Checking for pnpm...');
|
|
@@ -217,6 +339,105 @@ export const initCommand = new Command('init')
|
|
|
217
339
|
}
|
|
218
340
|
log.plain('');
|
|
219
341
|
}
|
|
342
|
+
// Step 6.5: Install selected features (if custom setup)
|
|
343
|
+
if (starterType === 'custom' && selectedFeatures.length > 0) {
|
|
344
|
+
log.plain('');
|
|
345
|
+
log.info('📦 Installing selected features...');
|
|
346
|
+
log.plain('');
|
|
347
|
+
// We need to be in the project directory for feature installation
|
|
348
|
+
process.chdir(projectPath);
|
|
349
|
+
for (const featureName of selectedFeatures) {
|
|
350
|
+
try {
|
|
351
|
+
log.plain('');
|
|
352
|
+
log.plain('━'.repeat(60));
|
|
353
|
+
log.info(`Installing ${featureName}...`);
|
|
354
|
+
log.plain('');
|
|
355
|
+
// Import and use the add command logic
|
|
356
|
+
const { getToken } = await import('../core/auth.js');
|
|
357
|
+
const { fetchRecipe, downloadZip } = await import('../core/http.js');
|
|
358
|
+
const { extractZipSafe } = await import('../core/archive.js');
|
|
359
|
+
const { copyTree, readFileContent } = await import('../core/fsx.js');
|
|
360
|
+
const { addEntry } = await import('../core/journal.js');
|
|
361
|
+
const { hashFiles } = await import('../core/hash.js');
|
|
362
|
+
const { insertNavLinkNative } = await import('../core/codemod.js');
|
|
363
|
+
const { getDeviceInfo } = await import('../core/auth.js');
|
|
364
|
+
const { validateSignature } = await import('../core/validate.js');
|
|
365
|
+
const { getPaths } = await import('../core/paths.js');
|
|
366
|
+
const paths = getPaths();
|
|
367
|
+
const token = await getToken();
|
|
368
|
+
const device = await getDeviceInfo();
|
|
369
|
+
const config = await validateSignature(paths.signatureFile);
|
|
370
|
+
// Fetch recipe
|
|
371
|
+
const response = await fetchRecipe({
|
|
372
|
+
token: token,
|
|
373
|
+
device,
|
|
374
|
+
feature: featureName,
|
|
375
|
+
target: 'native',
|
|
376
|
+
starter: { name: config.name, version: config.version },
|
|
377
|
+
});
|
|
378
|
+
if (!response.ok || (!response.signedUrl && !response.zipData)) {
|
|
379
|
+
log.warn(`⚠ Could not fetch ${featureName}: ${response.error || 'Unknown error'}`);
|
|
380
|
+
log.info(`You can install it later with: vf add ${featureName}`);
|
|
381
|
+
continue;
|
|
382
|
+
}
|
|
383
|
+
// Download and extract
|
|
384
|
+
const zipPath = response.zipData
|
|
385
|
+
? await downloadZip(response.zipData, true)
|
|
386
|
+
: await downloadZip(response.signedUrl);
|
|
387
|
+
const extractDir = zipPath.replace('.zip', '');
|
|
388
|
+
await extractZipSafe(zipPath, extractDir);
|
|
389
|
+
// Read manifest
|
|
390
|
+
const manifestPath = join(extractDir, 'recipe.json');
|
|
391
|
+
const manifestContent = await readFileContent(manifestPath);
|
|
392
|
+
const manifest = JSON.parse(manifestContent);
|
|
393
|
+
// Copy files
|
|
394
|
+
const copiedFiles = [];
|
|
395
|
+
const { resolve: resolvePath } = await import('path');
|
|
396
|
+
for (const copySpec of manifest.copy) {
|
|
397
|
+
const srcPath = resolvePath(extractDir, copySpec.from);
|
|
398
|
+
const destPath = resolvePath(projectPath, copySpec.to);
|
|
399
|
+
const result = await copyTree(srcPath, destPath, { force: true });
|
|
400
|
+
copiedFiles.push(...result.files);
|
|
401
|
+
}
|
|
402
|
+
// Add navigation
|
|
403
|
+
let navInserted = false;
|
|
404
|
+
if (manifest.nav) {
|
|
405
|
+
navInserted = await insertNavLinkNative(paths.nativeNavFile, manifest.nav, {});
|
|
406
|
+
}
|
|
407
|
+
// Hash and journal
|
|
408
|
+
const fileHashes = await hashFiles(copiedFiles);
|
|
409
|
+
const fileEntries = Array.from(fileHashes.entries()).map(([path, hash]) => ({
|
|
410
|
+
path,
|
|
411
|
+
hash,
|
|
412
|
+
}));
|
|
413
|
+
await addEntry(paths.journalFile, {
|
|
414
|
+
feature: manifest.name,
|
|
415
|
+
target: manifest.target,
|
|
416
|
+
files: fileEntries,
|
|
417
|
+
insertedNav: navInserted,
|
|
418
|
+
navHref: manifest.nav?.href,
|
|
419
|
+
navLabel: manifest.nav?.label,
|
|
420
|
+
ts: Date.now(),
|
|
421
|
+
manifest: {
|
|
422
|
+
version: manifest.version,
|
|
423
|
+
manualSteps: manifest.manualSteps,
|
|
424
|
+
env: manifest.env,
|
|
425
|
+
},
|
|
426
|
+
});
|
|
427
|
+
log.success(`✓ ${featureName} installed successfully!`);
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
log.warn(`⚠ Failed to install ${featureName}: ${error.message}`);
|
|
431
|
+
log.info(`You can install it later with: vf add ${featureName}`);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
// Go back to original directory
|
|
435
|
+
process.chdir('..');
|
|
436
|
+
log.plain('');
|
|
437
|
+
log.plain('━'.repeat(60));
|
|
438
|
+
log.success(`✓ Installed ${selectedFeatures.length} feature(s)`);
|
|
439
|
+
log.plain('');
|
|
440
|
+
}
|
|
220
441
|
// Step 7: Login with license key (REQUIRED)
|
|
221
442
|
let licenseKey = options.license;
|
|
222
443
|
// Check if user already has a license key saved
|
|
@@ -259,29 +480,55 @@ export const initCommand = new Command('init')
|
|
|
259
480
|
log.plain('');
|
|
260
481
|
log.success('🎉 Project initialized successfully!');
|
|
261
482
|
log.plain('');
|
|
483
|
+
log.info(`Setup: ${starterType === 'clean' ? 'Clean' : 'Custom'}`);
|
|
484
|
+
log.info(`Platforms: ${platforms.join(' + ')}`);
|
|
485
|
+
if (starterType === 'custom' && selectedFeatures.length > 0) {
|
|
486
|
+
log.info(`Features: ${selectedFeatures.join(', ')}`);
|
|
487
|
+
}
|
|
488
|
+
log.plain('');
|
|
262
489
|
log.info('Next steps:');
|
|
263
490
|
log.plain(` 1. cd ${projectName}`);
|
|
264
|
-
// Check if setup script exists
|
|
265
|
-
const setupScriptExists =
|
|
491
|
+
// Check if setup script exists (only for native)
|
|
492
|
+
const setupScriptExists = platforms.includes('native') &&
|
|
493
|
+
existsSync(join(projectPath, 'apps/native/scripts/starter-setup.mjs'));
|
|
266
494
|
if (setupScriptExists && !options.skipInstall) {
|
|
267
495
|
log.plain(' 2. Start developing:');
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
496
|
+
if (platforms.includes('native')) {
|
|
497
|
+
log.plain(' • pnpm dev:native (start native dev server)');
|
|
498
|
+
log.plain(' • pnpm native:ios (run on iOS)');
|
|
499
|
+
log.plain(' • pnpm native:android (run on Android)');
|
|
500
|
+
}
|
|
501
|
+
if (platforms.includes('web')) {
|
|
502
|
+
log.plain(' • pnpm dev:web (start web dev server)');
|
|
503
|
+
log.plain(' • pnpm web:build (build for production)');
|
|
504
|
+
}
|
|
271
505
|
}
|
|
272
506
|
else {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
log.plain('
|
|
279
|
-
|
|
507
|
+
if (setupScriptExists) {
|
|
508
|
+
log.plain(' 2. Run starter setup (if not done):');
|
|
509
|
+
log.plain(` cd ${projectName}/apps/native`);
|
|
510
|
+
log.plain(' node scripts/starter-setup.mjs');
|
|
511
|
+
}
|
|
512
|
+
log.plain(` ${setupScriptExists ? '3' : '2'}. Start developing:`);
|
|
513
|
+
if (platforms.includes('native')) {
|
|
514
|
+
log.plain(' • pnpm dev:native (start native dev server)');
|
|
515
|
+
log.plain(' • pnpm native:ios (run on iOS)');
|
|
516
|
+
log.plain(' • pnpm native:android (run on Android)');
|
|
517
|
+
}
|
|
518
|
+
if (platforms.includes('web')) {
|
|
519
|
+
log.plain(' • pnpm dev:web (start web dev server)');
|
|
520
|
+
log.plain(' • pnpm web:build (build for production)');
|
|
521
|
+
}
|
|
280
522
|
}
|
|
281
523
|
log.plain('');
|
|
282
524
|
log.info('Add features:');
|
|
283
525
|
log.plain(' • vf list # See available features');
|
|
284
|
-
|
|
526
|
+
if (platforms.includes('native')) {
|
|
527
|
+
log.plain(' • vf add chatbot # Add native feature');
|
|
528
|
+
}
|
|
529
|
+
if (platforms.includes('web')) {
|
|
530
|
+
log.plain(' • vf add quiz --target web # Add web feature');
|
|
531
|
+
}
|
|
285
532
|
log.plain('');
|
|
286
533
|
log.info('📚 Documentation: https://vibefast.pro/docs');
|
|
287
534
|
log.info('💬 Support: support@vibefast.pro');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/commands/init.ts
CHANGED
|
@@ -37,35 +37,104 @@ export const initCommand = new Command('init')
|
|
|
37
37
|
process.exit(1);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
// Step 1: Choose
|
|
41
|
-
let
|
|
40
|
+
// Step 1: Choose starter type
|
|
41
|
+
let starterType: 'clean' | 'custom' = 'clean';
|
|
42
|
+
let selectedFeatures: string[] = [];
|
|
42
43
|
|
|
43
|
-
if (!options.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
44
|
+
if (!options.yes) {
|
|
45
|
+
starterType = await promptSelect(
|
|
46
|
+
'How would you like to start?',
|
|
47
|
+
[
|
|
48
|
+
{
|
|
49
|
+
name: 'Clean',
|
|
50
|
+
value: 'clean',
|
|
51
|
+
description: 'Minimal setup - add features later with vf add',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'Custom',
|
|
55
|
+
value: 'custom',
|
|
56
|
+
description: 'Choose features now - one-shot setup',
|
|
57
|
+
},
|
|
58
|
+
]
|
|
59
|
+
) as 'clean' | 'custom';
|
|
60
|
+
|
|
61
|
+
log.info(`Selected: ${starterType === 'clean' ? 'Clean starter' : 'Custom setup'}`);
|
|
62
|
+
log.plain('');
|
|
63
|
+
|
|
64
|
+
// If custom, let them choose features
|
|
65
|
+
if (starterType === 'custom') {
|
|
66
|
+
const { promptMultiSelectAsync } = await import('../core/prompt.js');
|
|
67
|
+
const { RECIPES, getRecipesByCategory } = await import('../core/recipes.js');
|
|
68
|
+
|
|
69
|
+
log.info('📦 Select features to include:');
|
|
70
|
+
log.plain('');
|
|
71
|
+
|
|
72
|
+
// Get native features
|
|
73
|
+
const nativeFeatures = getRecipesByCategory('feature').map(r => ({
|
|
74
|
+
value: r.name,
|
|
75
|
+
label: `${r.icon} ${r.name}`,
|
|
76
|
+
description: r.description,
|
|
77
|
+
}));
|
|
78
|
+
|
|
79
|
+
selectedFeatures = await promptMultiSelectAsync(
|
|
80
|
+
'Select features (use space to toggle, enter to confirm):',
|
|
81
|
+
nativeFeatures
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
if (selectedFeatures.length > 0) {
|
|
85
|
+
log.info(`Selected ${selectedFeatures.length} feature(s): ${selectedFeatures.join(', ')}`);
|
|
86
|
+
} else {
|
|
87
|
+
log.info('No features selected - starting with clean setup');
|
|
88
|
+
}
|
|
89
|
+
log.plain('');
|
|
65
90
|
}
|
|
91
|
+
} else {
|
|
92
|
+
log.info('Using default: Clean starter');
|
|
93
|
+
log.plain('');
|
|
66
94
|
}
|
|
95
|
+
|
|
96
|
+
// Always use clean branch for cloning
|
|
97
|
+
const branch = 'clean';
|
|
98
|
+
|
|
99
|
+
// Step 1.5: Choose platforms
|
|
100
|
+
let platforms: string[] = ['native', 'web'];
|
|
101
|
+
|
|
102
|
+
if (!options.yes) {
|
|
103
|
+
const platformChoice = await promptSelect(
|
|
104
|
+
'Which platforms do you want to include?',
|
|
105
|
+
[
|
|
106
|
+
{
|
|
107
|
+
name: 'Both (Native + Web)',
|
|
108
|
+
value: 'both',
|
|
109
|
+
description: 'Full monorepo with mobile and web app',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'Native Only (Expo)',
|
|
113
|
+
value: 'native',
|
|
114
|
+
description: 'Mobile app only (iOS & Android)',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'Web Only (Next.js)',
|
|
118
|
+
value: 'web',
|
|
119
|
+
description: 'Web app only',
|
|
120
|
+
},
|
|
121
|
+
]
|
|
122
|
+
) as string;
|
|
67
123
|
|
|
68
|
-
|
|
124
|
+
if (platformChoice === 'native') {
|
|
125
|
+
platforms = ['native'];
|
|
126
|
+
log.info('Selected: Native (Expo) only');
|
|
127
|
+
} else if (platformChoice === 'web') {
|
|
128
|
+
platforms = ['web'];
|
|
129
|
+
log.info('Selected: Web (Next.js) only');
|
|
130
|
+
} else {
|
|
131
|
+
platforms = ['native', 'web'];
|
|
132
|
+
log.info('Selected: Both platforms');
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
log.info('Using default: Both platforms');
|
|
136
|
+
}
|
|
137
|
+
|
|
69
138
|
log.plain('');
|
|
70
139
|
|
|
71
140
|
// Step 2: Get project name
|
|
@@ -97,15 +166,13 @@ export const initCommand = new Command('init')
|
|
|
97
166
|
const repoUrl = 'https://github.com/mzafarr/vibefast-pro.git';
|
|
98
167
|
|
|
99
168
|
await withSpinner(
|
|
100
|
-
`Cloning VibeFast monorepo (
|
|
169
|
+
`Cloning VibeFast monorepo (clean starter)...`,
|
|
101
170
|
async () => {
|
|
102
171
|
const git = simpleGit();
|
|
103
172
|
const cloneOptions = ['--depth', '1'];
|
|
104
173
|
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
cloneOptions.unshift('--branch', branch, '--single-branch');
|
|
108
|
-
}
|
|
174
|
+
// Always use clean branch
|
|
175
|
+
cloneOptions.unshift('--branch', 'clean', '--single-branch');
|
|
109
176
|
|
|
110
177
|
try {
|
|
111
178
|
await git.clone(repoUrl, projectName, cloneOptions);
|
|
@@ -139,9 +206,90 @@ export const initCommand = new Command('init')
|
|
|
139
206
|
|
|
140
207
|
log.plain('');
|
|
141
208
|
|
|
142
|
-
// Step
|
|
209
|
+
// Step 3.5: Remove unwanted platforms
|
|
143
210
|
const projectPath = join(process.cwd(), projectName);
|
|
144
211
|
|
|
212
|
+
if (platforms.length < 2) {
|
|
213
|
+
await withSpinner(
|
|
214
|
+
'Cleaning up unwanted platforms...',
|
|
215
|
+
async () => {
|
|
216
|
+
const { rmSync } = await import('fs');
|
|
217
|
+
const { join } = await import('path');
|
|
218
|
+
|
|
219
|
+
if (!platforms.includes('native')) {
|
|
220
|
+
// Remove native app
|
|
221
|
+
const nativePath = join(projectPath, 'apps/native');
|
|
222
|
+
if (existsSync(nativePath)) {
|
|
223
|
+
rmSync(nativePath, { recursive: true, force: true });
|
|
224
|
+
}
|
|
225
|
+
log.info(' ✓ Removed native app');
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if (!platforms.includes('web')) {
|
|
229
|
+
// Remove web app
|
|
230
|
+
const webPath = join(projectPath, 'apps/web');
|
|
231
|
+
if (existsSync(webPath)) {
|
|
232
|
+
rmSync(webPath, { recursive: true, force: true });
|
|
233
|
+
}
|
|
234
|
+
log.info(' ✓ Removed web app');
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Update package.json workspaces
|
|
238
|
+
const rootPackageJsonPath = join(projectPath, 'package.json');
|
|
239
|
+
if (existsSync(rootPackageJsonPath)) {
|
|
240
|
+
const { readFileSync, writeFileSync } = await import('fs');
|
|
241
|
+
const packageJson = JSON.parse(readFileSync(rootPackageJsonPath, 'utf-8'));
|
|
242
|
+
|
|
243
|
+
if (packageJson.workspaces) {
|
|
244
|
+
const workspaces = packageJson.workspaces.filter((ws: string) => {
|
|
245
|
+
if (!platforms.includes('native') && ws.includes('apps/native')) return false;
|
|
246
|
+
if (!platforms.includes('web') && ws.includes('apps/web')) return false;
|
|
247
|
+
return true;
|
|
248
|
+
});
|
|
249
|
+
packageJson.workspaces = workspaces;
|
|
250
|
+
writeFileSync(rootPackageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
251
|
+
log.info(' ✓ Updated workspace configuration');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Update turbo.json
|
|
256
|
+
const turboJsonPath = join(projectPath, 'turbo.json');
|
|
257
|
+
if (existsSync(turboJsonPath)) {
|
|
258
|
+
const { readFileSync, writeFileSync } = await import('fs');
|
|
259
|
+
const turboJson = JSON.parse(readFileSync(turboJsonPath, 'utf-8'));
|
|
260
|
+
|
|
261
|
+
if (turboJson.pipeline) {
|
|
262
|
+
// Remove platform-specific tasks
|
|
263
|
+
const tasksToRemove: string[] = [];
|
|
264
|
+
|
|
265
|
+
if (!platforms.includes('native')) {
|
|
266
|
+
tasksToRemove.push('native:*', 'dev:native', 'build:native');
|
|
267
|
+
}
|
|
268
|
+
if (!platforms.includes('web')) {
|
|
269
|
+
tasksToRemove.push('web:*', 'dev:web', 'build:web');
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
tasksToRemove.forEach(task => {
|
|
273
|
+
if (turboJson.pipeline[task]) {
|
|
274
|
+
delete turboJson.pipeline[task];
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
writeFileSync(turboJsonPath, JSON.stringify(turboJson, null, 2));
|
|
279
|
+
log.info(' ✓ Updated Turbo configuration');
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
successText: '✓ Platform cleanup complete',
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
log.plain('');
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Step 4: Check for pnpm and install dependencies
|
|
292
|
+
|
|
145
293
|
if (!options.skipInstall) {
|
|
146
294
|
// Check if pnpm is installed
|
|
147
295
|
log.info('Checking for pnpm...');
|
|
@@ -276,6 +424,122 @@ export const initCommand = new Command('init')
|
|
|
276
424
|
log.plain('');
|
|
277
425
|
}
|
|
278
426
|
|
|
427
|
+
// Step 6.5: Install selected features (if custom setup)
|
|
428
|
+
if (starterType === 'custom' && selectedFeatures.length > 0) {
|
|
429
|
+
log.plain('');
|
|
430
|
+
log.info('📦 Installing selected features...');
|
|
431
|
+
log.plain('');
|
|
432
|
+
|
|
433
|
+
// We need to be in the project directory for feature installation
|
|
434
|
+
process.chdir(projectPath);
|
|
435
|
+
|
|
436
|
+
for (const featureName of selectedFeatures) {
|
|
437
|
+
try {
|
|
438
|
+
log.plain('');
|
|
439
|
+
log.plain('━'.repeat(60));
|
|
440
|
+
log.info(`Installing ${featureName}...`);
|
|
441
|
+
log.plain('');
|
|
442
|
+
|
|
443
|
+
// Import and use the add command logic
|
|
444
|
+
const { getToken } = await import('../core/auth.js');
|
|
445
|
+
const { fetchRecipe, downloadZip } = await import('../core/http.js');
|
|
446
|
+
const { extractZipSafe } = await import('../core/archive.js');
|
|
447
|
+
const { copyTree, readFileContent } = await import('../core/fsx.js');
|
|
448
|
+
const { addEntry } = await import('../core/journal.js');
|
|
449
|
+
const { hashFiles } = await import('../core/hash.js');
|
|
450
|
+
const { insertNavLinkNative } = await import('../core/codemod.js');
|
|
451
|
+
const { getDeviceInfo } = await import('../core/auth.js');
|
|
452
|
+
const { validateSignature } = await import('../core/validate.js');
|
|
453
|
+
const { getPaths } = await import('../core/paths.js');
|
|
454
|
+
|
|
455
|
+
const paths = getPaths();
|
|
456
|
+
const token = await getToken();
|
|
457
|
+
const device = await getDeviceInfo();
|
|
458
|
+
const config = await validateSignature(paths.signatureFile);
|
|
459
|
+
|
|
460
|
+
// Fetch recipe
|
|
461
|
+
const response = await fetchRecipe({
|
|
462
|
+
token: token!,
|
|
463
|
+
device,
|
|
464
|
+
feature: featureName,
|
|
465
|
+
target: 'native',
|
|
466
|
+
starter: { name: config.name, version: config.version },
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
if (!response.ok || (!response.signedUrl && !response.zipData)) {
|
|
470
|
+
log.warn(`⚠ Could not fetch ${featureName}: ${response.error || 'Unknown error'}`);
|
|
471
|
+
log.info(`You can install it later with: vf add ${featureName}`);
|
|
472
|
+
continue;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// Download and extract
|
|
476
|
+
const zipPath = response.zipData
|
|
477
|
+
? await downloadZip(response.zipData, true)
|
|
478
|
+
: await downloadZip(response.signedUrl!);
|
|
479
|
+
|
|
480
|
+
const extractDir = zipPath.replace('.zip', '');
|
|
481
|
+
await extractZipSafe(zipPath, extractDir);
|
|
482
|
+
|
|
483
|
+
// Read manifest
|
|
484
|
+
const manifestPath = join(extractDir, 'recipe.json');
|
|
485
|
+
const manifestContent = await readFileContent(manifestPath);
|
|
486
|
+
const manifest = JSON.parse(manifestContent);
|
|
487
|
+
|
|
488
|
+
// Copy files
|
|
489
|
+
const copiedFiles: string[] = [];
|
|
490
|
+
const { resolve: resolvePath } = await import('path');
|
|
491
|
+
for (const copySpec of manifest.copy) {
|
|
492
|
+
const srcPath = resolvePath(extractDir, copySpec.from);
|
|
493
|
+
const destPath = resolvePath(projectPath, copySpec.to);
|
|
494
|
+
const result = await copyTree(srcPath, destPath, { force: true });
|
|
495
|
+
copiedFiles.push(...result.files);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
// Add navigation
|
|
499
|
+
let navInserted = false;
|
|
500
|
+
if (manifest.nav) {
|
|
501
|
+
navInserted = await insertNavLinkNative(paths.nativeNavFile, manifest.nav, {});
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
// Hash and journal
|
|
505
|
+
const fileHashes = await hashFiles(copiedFiles);
|
|
506
|
+
const fileEntries = Array.from(fileHashes.entries()).map(([path, hash]) => ({
|
|
507
|
+
path,
|
|
508
|
+
hash,
|
|
509
|
+
}));
|
|
510
|
+
|
|
511
|
+
await addEntry(paths.journalFile, {
|
|
512
|
+
feature: manifest.name,
|
|
513
|
+
target: manifest.target,
|
|
514
|
+
files: fileEntries,
|
|
515
|
+
insertedNav: navInserted,
|
|
516
|
+
navHref: manifest.nav?.href,
|
|
517
|
+
navLabel: manifest.nav?.label,
|
|
518
|
+
ts: Date.now(),
|
|
519
|
+
manifest: {
|
|
520
|
+
version: manifest.version,
|
|
521
|
+
manualSteps: manifest.manualSteps,
|
|
522
|
+
env: manifest.env,
|
|
523
|
+
},
|
|
524
|
+
});
|
|
525
|
+
|
|
526
|
+
log.success(`✓ ${featureName} installed successfully!`);
|
|
527
|
+
|
|
528
|
+
} catch (error: any) {
|
|
529
|
+
log.warn(`⚠ Failed to install ${featureName}: ${error.message}`);
|
|
530
|
+
log.info(`You can install it later with: vf add ${featureName}`);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// Go back to original directory
|
|
535
|
+
process.chdir('..');
|
|
536
|
+
|
|
537
|
+
log.plain('');
|
|
538
|
+
log.plain('━'.repeat(60));
|
|
539
|
+
log.success(`✓ Installed ${selectedFeatures.length} feature(s)`);
|
|
540
|
+
log.plain('');
|
|
541
|
+
}
|
|
542
|
+
|
|
279
543
|
// Step 7: Login with license key (REQUIRED)
|
|
280
544
|
let licenseKey = options.license;
|
|
281
545
|
|
|
@@ -334,31 +598,57 @@ export const initCommand = new Command('init')
|
|
|
334
598
|
log.plain('');
|
|
335
599
|
log.success('🎉 Project initialized successfully!');
|
|
336
600
|
log.plain('');
|
|
601
|
+
log.info(`Setup: ${starterType === 'clean' ? 'Clean' : 'Custom'}`);
|
|
602
|
+
log.info(`Platforms: ${platforms.join(' + ')}`);
|
|
603
|
+
if (starterType === 'custom' && selectedFeatures.length > 0) {
|
|
604
|
+
log.info(`Features: ${selectedFeatures.join(', ')}`);
|
|
605
|
+
}
|
|
606
|
+
log.plain('');
|
|
337
607
|
log.info('Next steps:');
|
|
338
608
|
log.plain(` 1. cd ${projectName}`);
|
|
339
609
|
|
|
340
|
-
// Check if setup script exists
|
|
341
|
-
const setupScriptExists =
|
|
610
|
+
// Check if setup script exists (only for native)
|
|
611
|
+
const setupScriptExists = platforms.includes('native') &&
|
|
612
|
+
existsSync(join(projectPath, 'apps/native/scripts/starter-setup.mjs'));
|
|
342
613
|
|
|
343
614
|
if (setupScriptExists && !options.skipInstall) {
|
|
344
615
|
log.plain(' 2. Start developing:');
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
616
|
+
if (platforms.includes('native')) {
|
|
617
|
+
log.plain(' • pnpm dev:native (start native dev server)');
|
|
618
|
+
log.plain(' • pnpm native:ios (run on iOS)');
|
|
619
|
+
log.plain(' • pnpm native:android (run on Android)');
|
|
620
|
+
}
|
|
621
|
+
if (platforms.includes('web')) {
|
|
622
|
+
log.plain(' • pnpm dev:web (start web dev server)');
|
|
623
|
+
log.plain(' • pnpm web:build (build for production)');
|
|
624
|
+
}
|
|
348
625
|
} else {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
log.plain('
|
|
355
|
-
|
|
626
|
+
if (setupScriptExists) {
|
|
627
|
+
log.plain(' 2. Run starter setup (if not done):');
|
|
628
|
+
log.plain(` cd ${projectName}/apps/native`);
|
|
629
|
+
log.plain(' node scripts/starter-setup.mjs');
|
|
630
|
+
}
|
|
631
|
+
log.plain(` ${setupScriptExists ? '3' : '2'}. Start developing:`);
|
|
632
|
+
if (platforms.includes('native')) {
|
|
633
|
+
log.plain(' • pnpm dev:native (start native dev server)');
|
|
634
|
+
log.plain(' • pnpm native:ios (run on iOS)');
|
|
635
|
+
log.plain(' • pnpm native:android (run on Android)');
|
|
636
|
+
}
|
|
637
|
+
if (platforms.includes('web')) {
|
|
638
|
+
log.plain(' • pnpm dev:web (start web dev server)');
|
|
639
|
+
log.plain(' • pnpm web:build (build for production)');
|
|
640
|
+
}
|
|
356
641
|
}
|
|
357
642
|
|
|
358
643
|
log.plain('');
|
|
359
644
|
log.info('Add features:');
|
|
360
645
|
log.plain(' • vf list # See available features');
|
|
361
|
-
|
|
646
|
+
if (platforms.includes('native')) {
|
|
647
|
+
log.plain(' • vf add chatbot # Add native feature');
|
|
648
|
+
}
|
|
649
|
+
if (platforms.includes('web')) {
|
|
650
|
+
log.plain(' • vf add quiz --target web # Add web feature');
|
|
651
|
+
}
|
|
362
652
|
|
|
363
653
|
log.plain('');
|
|
364
654
|
log.info('📚 Documentation: https://vibefast.pro/docs');
|