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