UNPKG

gogo-movement-starter

Version:

GOGO Movement Network React Starter Template - Complete React + Vite + Move contracts setup

142 lines (124 loc) 4.96 kB
#!/usr/bin/env node import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; import { execSync } from 'child_process'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); function copyRecursive(src, dest) { if (fs.statSync(src).isDirectory()) { if (!fs.existsSync(dest)) { fs.mkdirSync(dest, { recursive: true }); } const files = fs.readdirSync(src); for (const file of files) { const srcPath = path.join(src, file); const destPath = path.join(dest, file); copyRecursive(srcPath, destPath); } } else { fs.copyFileSync(src, dest); } } function showBanner() { console.log(` ╔══════════════════════════════════════════════════════════════╗ ║ ║ ║ 🚀 GOGO Movement Network React Starter Template ║ ║ ║ ║ Welcome to the future of Movement Network development! ║ ║ ║ ╚══════════════════════════════════════════════════════════════╝ `); } async function createGogoApp() { try { showBanner(); const currentDir = process.cwd(); const templateDir = path.join(__dirname, '..'); console.log('📦 Installing GOGO Movement starter template...'); console.log(''); // Files to copy from template const filesToCopy = [ 'src', 'public', 'scripts', 'package.json', 'vite.config.ts', 'tsconfig.json', 'tsconfig.app.json', 'tsconfig.node.json', 'eslint.config.js', 'index.html', '.gitignore', 'README.md' ]; // Copy template files for (const file of filesToCopy) { const srcPath = path.join(templateDir, file); const destPath = path.join(currentDir, file); if (fs.existsSync(srcPath)) { console.log(`📁 Copying ${file}...`); copyRecursive(srcPath, destPath); } } console.log('✅ Template files copied successfully!'); console.log(''); // Install dependencies console.log('📦 Installing dependencies...'); try { execSync('npm install', { stdio: 'inherit' }); console.log('✅ Dependencies installed!'); console.log(''); } catch (error) { console.error('❌ npm install failed:', error.message); console.log('You can run "npm install" manually later.'); console.log(''); } // Run Movement setup console.log('🔧 Setting up Movement Network integration...'); console.log(''); try { const { setupMovementEnvironment } = await import('./postinstall-setup.js'); const setupSuccess = await setupMovementEnvironment(); if (setupSuccess) { console.log(''); console.log('🎉 GOGO Movement starter template is ready!'); console.log(''); console.log('✅ What you now have:'); console.log('• Complete React + Vite template'); console.log('• Movement Network integration'); console.log('• Move smart contracts ready'); console.log('• Interactive setup complete'); console.log(''); console.log('🚀 Next steps:'); console.log('1. npm run dev (start development server)'); console.log('2. Open http://localhost:5173 in your browser'); console.log('3. cd contracts (work with Move contracts)'); console.log('4. aptos move compile (compile contracts)'); console.log('5. aptos move publish (deploy to Movement Network)'); console.log(''); console.log('🎯 Your GOGO Movement dApp is ready!'); console.log(''); } } catch (error) { console.error('❌ Movement setup failed:', error.message); console.log(''); console.log('📋 You can still run manual setup later:'); console.log(' npm run setup-movement'); console.log(''); } } catch (error) { console.error('❌ Error creating GOGO app:', error.message); process.exit(1); } } // Run if called directly (works for both local and global npm installs) if (import.meta.url.startsWith('file:')) { const modulePath = fileURLToPath(import.meta.url); const scriptPath = process.argv[1]; if (modulePath === scriptPath || scriptPath.endsWith('create-gogo-app') || scriptPath.endsWith('create-gogo-app.js')) { createGogoApp(); } } export { createGogoApp };