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