neondb
Version:
create a claimable Neon database in seconds!
54 lines (51 loc) • 1.62 kB
JavaScript
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 };