UNPKG

neondb

Version:

create a claimable Neon database in seconds!

54 lines (51 loc) 1.62 kB
import { randomUUID } from 'node:crypto'; import { log } from '@clack/prompts'; import { seedDatabase } from './seed-database.js'; import { messages } from './texts.js'; import { createClaimableDatabase } from './utils/create-db.js'; import { getPoolerString } from './utils/format.js'; import { writeToEnv } from './utils/fs.js'; import { LAUNCHPAD_URLS } from './utils/urls.js'; const instantNeon = async ({ dotEnvFile = ".env", dotEnvKey = "DATABASE_URL", referrer = "unknown", seed = void 0 }) => { const dbId = randomUUID(); const claimExpiresAt = new Date(Date.now() + 3 * 24 * 60 * 60 * 1e3); const createDbUrl = new URL( LAUNCHPAD_URLS.CREATE_CLAIMABLE_DATABASE( dbId, `npm:neondb|${referrer}` ) ); const claimUrl = new URL(LAUNCHPAD_URLS.CLAIM_DATABASE(dbId)); log.step(messages.botCheck(createDbUrl.href)); const connString = await createClaimableDatabase(dbId, createDbUrl); const poolerString = getPoolerString(connString); log.step(messages.connectionString(connString)); log.step(messages.poolerString(poolerString)); await writeToEnv( dotEnvFile, dotEnvKey, claimExpiresAt, claimUrl, connString, poolerString ); log.success(messages.envSuccess(dotEnvFile, dotEnvKey)); log.info(messages.databaseGenerated(claimUrl.href)); if (seed) { log.step("Pushing schema to database"); await seedDatabase(seed.path, connString); log.success("Schema pushed to database"); } return { databaseUrl: connString, poolerUrl: poolerString, claimUrl: claimUrl.href, claimExpiresAt }; }; export { instantNeon };