UNPKG

@t1mmen/srtd

Version:

Supabase Repeatable Template Definitions (srtd): 🪄 Live-reloading SQL templates for Supabase DX. Make your database changes reviewable and migrations maintainable! 🚀

85 lines • 3.79 kB
import fs from 'node:fs/promises'; import path from 'node:path'; import chalk from 'chalk'; import { useApp } from 'ink'; import React from 'react'; import { CONFIG_FILE } from '../constants.js'; import { getConfig, saveConfig } from '../utils/config.js'; import { createEmptyBuildLog } from '../utils/createEmptyBuildLog.js'; import { ensureDirectories } from '../utils/ensureDirectories.js'; import { fileExists } from '../utils/fileExists.js'; import { logger } from '../utils/logger.js'; export default function Init() { const { exit } = useApp(); React.useEffect(() => { async function doInit() { console.log(`${chalk.green('\n✨ Initializing srtd\n')}`); try { const baseDir = process.cwd(); const config = await getConfig(baseDir); const configPath = path.join(baseDir, CONFIG_FILE); if (await fileExists(configPath)) { logger.skip(`${CONFIG_FILE} already exists`); } else { await saveConfig(baseDir, {}); logger.success(`Created ${CONFIG_FILE} with default configuration`); } const dirs = await ensureDirectories(baseDir); if (dirs.templateDir) { logger.success(`Created template directory ${config.templateDir}`); } else { logger.skip(`Template directory ${config.templateDir} already exists`); } if (dirs.migrationDir) { logger.success(`Created migration directory ${config.migrationDir}`); } else { logger.skip(`Migration directory ${config.migrationDir} already exists`); } const buildLogCreated = await createEmptyBuildLog(path.join(baseDir, config.buildLog)); const localBuildLogCreated = await createEmptyBuildLog(path.join(baseDir, config.localBuildLog)); if (buildLogCreated) { logger.success(`Created build log at ${config.buildLog}`); } else { logger.skip(`Build log already exists at ${config.buildLog}`); } if (localBuildLogCreated) { logger.success(`Created local build log at ${config.localBuildLog}`); } else { logger.skip(`Local build log already exists at ${config.localBuildLog}`); } const gitignorePath = path.join(baseDir, '.gitignore'); const ignoreEntry = path.basename(config.localBuildLog); let content = ''; try { content = await fs.readFile(gitignorePath, 'utf-8'); } catch { // Ignore } if (!content.includes(ignoreEntry)) { content = `${content.trim()}\n\n# srtd's local logs should not be committed, as they're per-environment specific\n${ignoreEntry}\n`; await fs.writeFile(gitignorePath, content); logger.success(`Added ${ignoreEntry} to .gitignore`); } else { logger.skip(`.gitignore already contains ${ignoreEntry}`); } exit(); } catch (error) { logger.error(`Failed to initialize: ${JSON.stringify(error)}`); if (error instanceof Error) { exit(error); } } } doInit(); }, [exit]); return null; } //# sourceMappingURL=init.js.map