#!/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 }) 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() } })