gogo-movement-starter
Version:
GOGO Movement Network React Starter Template - Complete React + Vite + Move contracts setup
142 lines (124 loc) • 4.96 kB
JavaScript
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 };