UNPKG

@farcaster/create-mini-app

Version:

Create Farcaster Mini Apps with one command

97 lines 3.37 kB
import { resolve } from 'node:path'; import { intro, log, outro, select, text } from '@clack/prompts'; import { init as initNeynar } from '@neynar/create-farcaster-mini-app'; import { default as fs } from 'fs-extra'; import pc from 'picocolors'; export async function init(params) { intro('Welcome to Farcaster Mini Apps!'); const projectType = await select({ message: 'Select a template:', options: [ { value: 'basic', label: 'Basic static site (Vite + TS + React + Wagmi)', }, { value: 'neynar', label: 'Fully featured with Neynar integration (Next)', }, ], }); if (projectType === 'neynar') { await initNeynar(); return; } const templateDir = resolve(import.meta.dirname, '../templates/default'); const displayName = params.name || (await text({ message: 'Enter the name of your project', validate(value) { if (!value) return 'Please enter a name.'; return; }, })); const name = kebabcase(displayName); const destDir = resolve(process.cwd(), name); // Copy contents fs.copySync(templateDir, destDir); // Replace dotfiles for (const file of fs.readdirSync(destDir)) { if (!file.startsWith('_')) continue; fs.renameSync(resolve(destDir, file), resolve(destDir, `.${file.slice(1)}`)); } // Replace package.json properties const pkgJson = fs.readJsonSync(resolve(destDir, 'package.json')); pkgJson.name = name; fs.writeJsonSync(resolve(destDir, 'package.json'), pkgJson, { spaces: 2 }); // Wrap up log.success(`Project successfully scaffolded in ${pc.blue(destDir)}!`); const pkgManager = detectPackageManager(); log.message('Next steps:'); log.step(`1. ${pc.blue(`cd ./${name}`)} - Navigate to project`); log.step(`2. ${pc.blue(pkgManagerInstallCommand(pkgManager))} - Install dependencies`); log.step(`3. ${pc.blue(pkgManagerRunCommand(pkgManager, 'dev'))} - Start dev server`); log.step(`4. Head to ${pc.blue('http://localhost:5173')}`); outro('Happy Mini App building!'); } function detectPackageManager() { const userAgent = process.env.npm_config_user_agent; if (!userAgent) return 'npm'; if (userAgent.includes('bun')) return 'bun'; if (userAgent.includes('yarn')) return 'yarn'; if (userAgent.includes('pnpm')) return 'pnpm'; if (userAgent.includes('npm')) return 'npm'; return 'npm'; } function pkgManagerInstallCommand(pkgManager) { if (pkgManager === 'bun') return 'bun install'; if (pkgManager === 'yarn') return 'yarn'; if (pkgManager === 'pnpm') return 'pnpm install'; return 'npm install'; } function pkgManagerRunCommand(pkgManager, command) { if (pkgManager === 'bun') return `bun run ${command}`; if (pkgManager === 'yarn') return `yarn ${command}`; if (pkgManager === 'pnpm') return `pnpm ${command}`; return `npm run ${command}`; } function kebabcase(str) { return str .replace(/([a-z])([A-Z])/g, '$1-$2') .replace(/[\s_]+/g, '-') .toLowerCase(); } //# sourceMappingURL=init.js.map