UNPKG

gogo-movement-starter

Version:

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

177 lines (145 loc) 5.47 kB
#!/usr/bin/env node import readline from 'readline'; import fs from 'fs'; import path from 'path'; console.log('🚀 Adding Move Contracts to GOGO Template'); console.log('==========================================='); console.log(''); // Simple setup guide async function setupGuide() { const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); const question = (query) => new Promise((resolve) => rl.question(query, resolve)); // Store original working directory const originalCwd = process.cwd(); try { console.log(''); console.log('📁 Create Contract Project'); console.log('==========================='); console.log(''); // Use existing template console.log('✅ GOGO React template ready...'); const templateDir = process.cwd(); // Use current directory const projectName = await question('Enter your project name (default: MyFirstContract): ') || 'MyFirstContract'; console.log(''); console.log(`🚀 Creating Move project: ${projectName}`); console.log(''); // Create contract folder structure manually const contractDir = path.join(templateDir, 'contracts'); const sourcesDir = path.join(contractDir, 'sources'); const testsDir = path.join(contractDir, 'tests'); // Create directories if (!fs.existsSync(contractDir)) { fs.mkdirSync(contractDir, { recursive: true }); } if (!fs.existsSync(sourcesDir)) { fs.mkdirSync(sourcesDir, { recursive: true }); } if (!fs.existsSync(testsDir)) { fs.mkdirSync(testsDir, { recursive: true }); } // Create Move.toml const moveTomlContent = `[package] name = "${projectName}" version = "1.0.0" authors = [] [addresses] ${projectName} = "_" [dev-addresses] [dependencies.AptosFramework] git = "https://github.com/aptos-labs/aptos-core.git" rev = "mainnet" subdir = "aptos-move/framework/aptos-framework" [dev-dependencies] `; fs.writeFileSync(path.join(contractDir, 'Move.toml'), moveTomlContent); console.log('✅ Move.toml created'); // Create config.yaml for Movement Network const configYamlContent = `--- profiles: default: network: Custom private_key: "0x0000000000000000000000000000000000000000000000000000000000000000" public_key: "0x0000000000000000000000000000000000000000000000000000000000000000" account: "0x0000000000000000000000000000000000000000000000000000000000000000" rest_url: "https://full.testnet.movementinfra.xyz/v1" faucet_url: "https://faucet.testnet.movementinfra.xyz/" `; fs.writeFileSync(path.join(contractDir, 'config.yaml'), configYamlContent); console.log('✅ config.yaml created with Movement Network settings'); // Create demo Move file const demoMoveContent = `module ${projectName}::demo { use std::debug; public entry fun hello() { debug::print(&b"Hello from Movement Network!"); } public entry fun greet(name: vector<u8>) { debug::print(&b"Hello, "); debug::print(&name); debug::print(&b"! Welcome to Movement Network!"); } #[test] public fun test_hello() { hello(); } }`; fs.writeFileSync(path.join(sourcesDir, 'demo.move'), demoMoveContent); console.log('✅ sources/demo.move created with sample functions'); // Create a test file const testMoveContent = `#[test_only] module ${projectName}::demo_tests { use ${projectName}::demo; #[test] public fun test_greet() { demo::greet(b"Movement Developer"); } }`; fs.writeFileSync(path.join(testsDir, 'demo_tests.move'), testMoveContent); console.log('✅ tests/demo_tests.move created'); console.log(`✅ Complete Move project "${projectName}" created successfully!`); console.log(''); console.log('🎉 Setup Complete!'); console.log(''); console.log('📋 What was added to your GOGO template:'); console.log(`• contracts/ folder with "${projectName}" Move project`); console.log('• contracts/Move.toml with project configuration'); console.log('• contracts/config.yaml with Movement Network settings'); console.log('• contracts/sources/demo.move with sample functions'); console.log('• contracts/tests/demo_tests.move with test examples'); console.log(''); console.log('🚀 Your GOGO template now includes Move contracts!'); console.log(''); console.log('Next Steps:'); console.log('1. npm run dev (start your GOGO React app)'); console.log('2. cd contracts (work with Move contracts)'); console.log('3. aptos move compile (compile your contracts)'); console.log('4. aptos move test (run contract tests)'); console.log('5. aptos move publish (deploy to Movement Network)'); console.log('6. Use GOGO components to interact with your contracts!'); console.log(''); rl.close(); return true; } catch (error) { rl.close(); console.error('❌ Setup failed:', error.message); return false; } } // Export the setup function export { setupGuide }; // Only run setup if this file is executed directly if (import.meta.url === `file://${process.argv[1]}`) { setupGuide().then(success => { if (success) { console.log('✅ Ready to create your Movement Network project!'); } else { console.log('❌ Setup failed.'); process.exit(1); } }).catch(error => { console.error('❌ Setup failed:', error.message); process.exit(1); }); }