#!/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 ( Edit app/index.tsx to edit this screen. ); } `; const layoutContent = `import { Stack } from "expo-router"; export default function RootLayout() { return ; } `; 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 }); } // 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); } else { await fs.promises.rm(oldDirPath, { recursive: true, force: true }); } } } // Create new /app directory const newAppDirPath = path.join(root, newAppDir); await fs.promises.mkdir(newAppDirPath, { recursive: true }); // Create index.tsx const indexPath = path.join(newAppDirPath, "index.tsx"); await fs.promises.writeFile(indexPath, indexContent); // Create _layout.tsx const layoutPath = path.join(newAppDirPath, "_layout.tsx"); await fs.promises.writeFile(layoutPath, layoutContent); } catch (error) { // Error during script execution } }; 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 { rl.close(); } } );