UNPKG

neondb

Version:

create a claimable Neon database in seconds!

109 lines (106 loc) 3.25 kB
#!/usr/bin/env node import { spinner, intro, log, text, isCancel, outro } from '@clack/prompts'; import { cristal } from 'gradient-string'; import { instantNeon } from './lib/instant-neon.js'; import { INTRO_ART, messages } from './lib/texts.js'; import { getArgs, DEFAULTS } from './lib/utils/args.js'; import { prepEnv } from './lib/utils/fs.js'; import { validateEnvPath, validateEnvKey } from './lib/utils/validate.js'; async function main() { const { env: flagEnvPath, key: flagEnvKey, seed: flagSeedPath, yes: shouldUseDefaults } = getArgs(); console.log(cristal(INTRO_ART)); const s = spinner(); intro(messages.welcome); const userInput = {}; if (shouldUseDefaults) { prepEnv(DEFAULTS.dotEnvPath, DEFAULTS.dotEnvKey); s.start(messages.generating); await instantNeon({ dotEnvFile: DEFAULTS.dotEnvPath, dotEnvKey: DEFAULTS.dotEnvKey }); } else { if (flagEnvPath) { const isEnvPathInvalid = validateEnvPath(flagEnvPath); if (isEnvPathInvalid) { log.error(isEnvPathInvalid.message); process.exit(1); } log.step(messages.info.defaultEnvFilePath(flagEnvPath)); userInput.dotEnvPath = flagEnvPath; } else { userInput.dotEnvPath = await text({ message: messages.questions.dotEnvFilePath, validate: validateEnvPath }); if (isCancel(userInput.dotEnvPath)) { outro(messages.info.userCancelled); process.exit(1); } if (!userInput.dotEnvPath) { userInput.dotEnvPath = DEFAULTS.dotEnvPath; log.step( messages.info.defaultEnvFilePath(userInput.dotEnvPath) ); } } if (flagEnvKey) { const isEnvKeyInvalid = validateEnvKey(flagEnvKey); if (isEnvKeyInvalid) { log.error(isEnvKeyInvalid.message); process.exit(1); } log.step(messages.info.defaultEnvKey(flagEnvKey)); userInput.dotEnvKey = flagEnvKey; } if (!userInput.dotEnvKey) { userInput.dotEnvKey = await text({ message: messages.questions.dotEnvKey, validate: validateEnvKey }); if (isCancel(userInput.dotEnvKey)) { outro(messages.info.userCancelled); process.exit(1); } if (!userInput.dotEnvKey) { userInput.dotEnvKey = DEFAULTS.dotEnvKey; log.step(messages.info.defaultEnvKey(userInput.dotEnvKey)); log.step(`using ${userInput.dotEnvKey} as the .env key`); } } if (!flagSeedPath) { userInput.seed = { type: "sql-script", path: await text({ message: messages.questions.seedPath }) }; if (!userInput.seed?.path) { userInput.seed = DEFAULTS.seed; } } else { userInput.seed = { type: "sql-script", path: flagSeedPath }; } prepEnv(userInput.dotEnvPath, userInput.dotEnvKey); s.start(messages.generating); await instantNeon({ dotEnvFile: userInput.dotEnvPath, dotEnvKey: userInput.dotEnvKey, referrer: "npm:neondb/cli", seed: userInput.seed }); } s.stop("Database generated!"); outro(messages.happyCoding); } await main(); var cli_default = main; export { cli_default as default };