this repo has no description
at main 3.6 kB view raw
1#!/usr/bin/env node 2 3/** 4 * This script is used to reset the project to a blank state. 5 * It deletes or moves the /app, /components, /hooks, /scripts, and /constants directories to /app-example based on user input and creates a new /app directory with an index.tsx and _layout.tsx file. 6 * You can remove the `reset-project` script from package.json and safely delete this file after running it. 7 */ 8 9const fs = require("fs"); 10const path = require("path"); 11const readline = require("readline"); 12 13const root = process.cwd(); 14const oldDirs = ["app", "components", "hooks", "constants", "scripts"]; 15const exampleDir = "app-example"; 16const newAppDir = "app"; 17const exampleDirPath = path.join(root, exampleDir); 18 19const indexContent = `import { Text, View } from "react-native"; 20 21export default function Index() { 22 return ( 23 <View 24 style={{ 25 flex: 1, 26 justifyContent: "center", 27 alignItems: "center", 28 }} 29 > 30 <Text>Edit app/index.tsx to edit this screen.</Text> 31 </View> 32 ); 33} 34`; 35 36const layoutContent = `import { Stack } from "expo-router"; 37 38export default function RootLayout() { 39 return <Stack />; 40} 41`; 42 43const rl = readline.createInterface({ 44 input: process.stdin, 45 output: process.stdout, 46}); 47 48const moveDirectories = async (userInput) => { 49 try { 50 if (userInput === "y") { 51 // Create the app-example directory 52 await fs.promises.mkdir(exampleDirPath, { recursive: true }); 53 console.log(`📁 /${exampleDir} directory created.`); 54 } 55 56 // Move old directories to new app-example directory or delete them 57 for (const dir of oldDirs) { 58 const oldDirPath = path.join(root, dir); 59 if (fs.existsSync(oldDirPath)) { 60 if (userInput === "y") { 61 const newDirPath = path.join(root, exampleDir, dir); 62 await fs.promises.rename(oldDirPath, newDirPath); 63 console.log(`➡️ /${dir} moved to /${exampleDir}/${dir}.`); 64 } else { 65 await fs.promises.rm(oldDirPath, { recursive: true, force: true }); 66 console.log(`❌ /${dir} deleted.`); 67 } 68 } else { 69 console.log(`➡️ /${dir} does not exist, skipping.`); 70 } 71 } 72 73 // Create new /app directory 74 const newAppDirPath = path.join(root, newAppDir); 75 await fs.promises.mkdir(newAppDirPath, { recursive: true }); 76 console.log("\n📁 New /app directory created."); 77 78 // Create index.tsx 79 const indexPath = path.join(newAppDirPath, "index.tsx"); 80 await fs.promises.writeFile(indexPath, indexContent); 81 console.log("📄 app/index.tsx created."); 82 83 // Create _layout.tsx 84 const layoutPath = path.join(newAppDirPath, "_layout.tsx"); 85 await fs.promises.writeFile(layoutPath, layoutContent); 86 console.log("📄 app/_layout.tsx created."); 87 88 console.log("\n✅ Project reset complete. Next steps:"); 89 console.log( 90 `1. Run \`npx expo start\` to start a development server.\n2. Edit app/index.tsx to edit the main screen.${ 91 userInput === "y" 92 ? `\n3. Delete the /${exampleDir} directory when you're done referencing it.` 93 : "" 94 }` 95 ); 96 } catch (error) { 97 console.error(`❌ Error during script execution: ${error.message}`); 98 } 99}; 100 101rl.question( 102 "Do you want to move existing files to /app-example instead of deleting them? (Y/n): ", 103 (answer) => { 104 const userInput = answer.trim().toLowerCase() || "y"; 105 if (userInput === "y" || userInput === "n") { 106 moveDirectories(userInput).finally(() => rl.close()); 107 } else { 108 console.log("❌ Invalid input. Please enter 'Y' or 'N'."); 109 rl.close(); 110 } 111 } 112);