113 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env node
 | |
| 
 | |
| /**
 | |
|  * This script is used to reset the project to a blank state.
 | |
|  * 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.
 | |
|  * You can remove the `reset-project` script from package.json and safely delete this file after running it.
 | |
|  */
 | |
| 
 | |
| const fs = require("fs");
 | |
| const path = require("path");
 | |
| const readline = require("readline");
 | |
| 
 | |
| const root = process.cwd();
 | |
| const oldDirs = ["app", "components", "hooks", "constants", "scripts"];
 | |
| const exampleDir = "app-example";
 | |
| const newAppDir = "app";
 | |
| const exampleDirPath = path.join(root, exampleDir);
 | |
| 
 | |
| const indexContent = `import { Text, View } from "react-native";
 | |
| 
 | |
| export default function Index() {
 | |
|   return (
 | |
|     <View
 | |
|       style={{
 | |
|         flex: 1,
 | |
|         justifyContent: "center",
 | |
|         alignItems: "center",
 | |
|       }}
 | |
|     >
 | |
|       <Text>Edit app/index.tsx to edit this screen.</Text>
 | |
|     </View>
 | |
|   );
 | |
| }
 | |
| `;
 | |
| 
 | |
| const layoutContent = `import { Stack } from "expo-router";
 | |
| 
 | |
| export default function RootLayout() {
 | |
|   return <Stack />;
 | |
| }
 | |
| `;
 | |
| 
 | |
| const rl = readline.createInterface({
 | |
|   input: process.stdin,
 | |
|   output: process.stdout,
 | |
| });
 | |
| 
 | |
| const moveDirectories = async (userInput) => {
 | |
|   try {
 | |
|     if (userInput === "y") {
 | |
|       // Create the app-example directory
 | |
|       await fs.promises.mkdir(exampleDirPath, { recursive: true });
 | |
|       console.log(`📁 /${exampleDir} directory created.`);
 | |
|     }
 | |
| 
 | |
|     // Move old directories to new app-example directory or delete them
 | |
|     for (const dir of oldDirs) {
 | |
|       const oldDirPath = path.join(root, dir);
 | |
|       if (fs.existsSync(oldDirPath)) {
 | |
|         if (userInput === "y") {
 | |
|           const newDirPath = path.join(root, exampleDir, dir);
 | |
|           await fs.promises.rename(oldDirPath, newDirPath);
 | |
|           console.log(`➡️ /${dir} moved to /${exampleDir}/${dir}.`);
 | |
|         } else {
 | |
|           await fs.promises.rm(oldDirPath, { recursive: true, force: true });
 | |
|           console.log(`❌ /${dir} deleted.`);
 | |
|         }
 | |
|       } else {
 | |
|         console.log(`➡️ /${dir} does not exist, skipping.`);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     // Create new /app directory
 | |
|     const newAppDirPath = path.join(root, newAppDir);
 | |
|     await fs.promises.mkdir(newAppDirPath, { recursive: true });
 | |
|     console.log("\n📁 New /app directory created.");
 | |
| 
 | |
|     // Create index.tsx
 | |
|     const indexPath = path.join(newAppDirPath, "index.tsx");
 | |
|     await fs.promises.writeFile(indexPath, indexContent);
 | |
|     console.log("📄 app/index.tsx created.");
 | |
| 
 | |
|     // Create _layout.tsx
 | |
|     const layoutPath = path.join(newAppDirPath, "_layout.tsx");
 | |
|     await fs.promises.writeFile(layoutPath, layoutContent);
 | |
|     console.log("📄 app/_layout.tsx created.");
 | |
| 
 | |
|     console.log("\n✅ Project reset complete. Next steps:");
 | |
|     console.log(
 | |
|       `1. Run \`npx expo start\` to start a development server.\n2. Edit app/index.tsx to edit the main screen.${
 | |
|         userInput === "y"
 | |
|           ? `\n3. Delete the /${exampleDir} directory when you're done referencing it.`
 | |
|           : ""
 | |
|       }`
 | |
|     );
 | |
|   } catch (error) {
 | |
|     console.error(`❌ Error during script execution: ${error.message}`);
 | |
|   }
 | |
| };
 | |
| 
 | |
| rl.question(
 | |
|   "Do you want to move existing files to /app-example instead of deleting them? (Y/n): ",
 | |
|   (answer) => {
 | |
|     const userInput = answer.trim().toLowerCase() || "y";
 | |
|     if (userInput === "y" || userInput === "n") {
 | |
|       moveDirectories(userInput).finally(() => rl.close());
 | |
|     } else {
 | |
|       console.log("❌ Invalid input. Please enter 'Y' or 'N'.");
 | |
|       rl.close();
 | |
|     }
 | |
|   }
 | |
| );
 |