{"version":3,"file":"cli.js","names":["userInput: Partial<Defaults>"],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { intro, isCancel, log, outro, spinner, text } from \"@clack/prompts\";\nimport { cristal } from \"gradient-string\";\nimport { instantNeon } from \"./lib/instant-neon.js\";\nimport { INTRO_ART, messages } from \"./lib/texts.js\";\nimport type { Defaults } from \"./lib/types.js\";\nimport { DEFAULTS, getArgs } from \"./lib/utils/args.js\";\nimport { claim } from \"./lib/utils/claim.js\";\nimport { prepEnv } from \"./lib/utils/fs.js\";\nimport { validateEnvKey, validateEnvPath } from \"./lib/utils/validate.js\";\n\nasync function main() {\n\tconst { command, yes: shouldUseDefaults, ...flags } = getArgs();\n\n\t// Handle claim command\n\tif (command === \"claim\") {\n\t\tconst envPath = flags.env || DEFAULTS.dotEnvKey;\n\t\tconst envPrefix = flags.prefix || DEFAULTS.envPrefix;\n\t\tawait claim(envPath, envPrefix);\n\t\treturn;\n\t}\n\n\tconsole.log(cristal(INTRO_ART));\n\tconst s = spinner();\n\n\tintro(messages.welcome);\n\tlog.info(messages.nonInteractive);\n\tconst userInput: Partial<Defaults> = {};\n\n\tif (shouldUseDefaults) {\n\t\tconst envPath = flags.env || DEFAULTS.dotEnvPath;\n\t\tconst envKey = flags.key || DEFAULTS.dotEnvKey;\n\t\tconst envPrefix = flags.prefix || DEFAULTS.envPrefix;\n\n\t\tprepEnv(envPath, envKey);\n\t\ts.start(messages.generating);\n\n\t\tconst seedConfig = flags.seed\n\t\t\t? { type: \"sql-script\" as const, path: flags.seed }\n\t\t\t: DEFAULTS.seed;\n\n\t\tawait instantNeon({\n\t\t\tdotEnvFile: envPath,\n\t\t\tdotEnvKey: envKey,\n\t\t\treferrer: \"npm:get-db/cli\",\n\t\t\tseed: seedConfig,\n\t\t\tenvPrefix: envPrefix,\n\t\t});\n\t} else {\n\t\t/**\n\t\t * Get Env file path (e.g.: .env)\n\t\t */\n\t\tif (flags.env) {\n\t\t\tconst isEnvPathInvalid = validateEnvPath(flags.env);\n\n\t\t\tif (isEnvPathInvalid) {\n\t\t\t\tlog.error(isEnvPathInvalid.message);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\tlog.step(messages.info.defaultEnvFilePath(flags.env));\n\t\t\tuserInput.dotEnvPath = flags.env;\n\t\t} else {\n\t\t\tuserInput.dotEnvPath = (await text({\n\t\t\t\tmessage: messages.questions.dotEnvFilePath,\n\t\t\t\tvalidate: validateEnvPath,\n\t\t\t})) as Defaults[\"dotEnvPath\"];\n\n\t\t\t// user cancelled with CTRL+C\n\t\t\tif (isCancel(userInput.dotEnvPath)) {\n\t\t\t\toutro(messages.info.userCancelled);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\t// user entered an empty string -- opted for default value.\n\t\t\tif (!userInput.dotEnvPath) {\n\t\t\t\tuserInput.dotEnvPath = DEFAULTS.dotEnvPath;\n\t\t\t\tlog.step(\n\t\t\t\t\tmessages.info.defaultEnvFilePath(userInput.dotEnvPath),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Always set dotEnvKey from flag if present\n\t\tif (flags.key) {\n\t\t\tconst isEnvKeyInvalid = validateEnvKey(flags.key);\n\t\t\tif (isEnvKeyInvalid) {\n\t\t\t\tlog.error(isEnvKeyInvalid.message);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tlog.step(messages.info.defaultEnvKey(flags.key));\n\t\t\tuserInput.dotEnvKey = flags.key;\n\t\t}\n\n\t\t// Prompt for dotEnvKey if not set by flag\n\t\tif (!userInput.dotEnvKey) {\n\t\t\tuserInput.dotEnvKey = (await text({\n\t\t\t\tmessage: messages.questions.dotEnvKey,\n\t\t\t\tvalidate: validateEnvKey,\n\t\t\t})) as Defaults[\"dotEnvKey\"];\n\n\t\t\t// user cancelled with CTRL+C\n\t\t\tif (isCancel(userInput.dotEnvKey)) {\n\t\t\t\toutro(messages.info.userCancelled);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\t// User accepted default value.\n\t\t\tif (!userInput.dotEnvKey) {\n\t\t\t\tuserInput.dotEnvKey = DEFAULTS.dotEnvKey;\n\t\t\t\tlog.step(messages.info.defaultEnvKey(userInput.dotEnvKey));\n\t\t\t}\n\t\t}\n\n\t\tif (!flags.seed) {\n\t\t\tuserInput.seed = {\n\t\t\t\ttype: \"sql-script\",\n\t\t\t\tpath: await text({\n\t\t\t\t\tmessage: messages.questions.seedPath,\n\t\t\t\t}),\n\t\t\t} as Defaults[\"seed\"];\n\n\t\t\tif (!userInput.seed?.path) {\n\t\t\t\tuserInput.seed = DEFAULTS.seed;\n\t\t\t}\n\t\t} else {\n\t\t\tuserInput.seed = {\n\t\t\t\ttype: \"sql-script\",\n\t\t\t\tpath: flags.seed,\n\t\t\t};\n\t\t}\n\n\t\t// Always set envPrefix from flag if present\n\t\tif (flags.prefix) {\n\t\t\tlog.step(messages.info.defaultPrefix(flags.prefix));\n\t\t\tuserInput.envPrefix = flags.prefix;\n\t\t}\n\n\t\t// Prompt for envPrefix if not set by flag\n\t\tif (!userInput.envPrefix) {\n\t\t\tuserInput.envPrefix = (await text({\n\t\t\t\tmessage: messages.questions.prefix,\n\t\t\t})) as Defaults[\"envPrefix\"];\n\n\t\t\t// user cancelled with CTRL+C\n\t\t\tif (isCancel(userInput.envPrefix)) {\n\t\t\t\toutro(messages.info.userCancelled);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\t// User accepted default value.\n\t\t\tif (!userInput.envPrefix) {\n\t\t\t\tuserInput.envPrefix = DEFAULTS.envPrefix;\n\t\t\t\tlog.step(messages.info.defaultPrefix(userInput.envPrefix));\n\t\t\t}\n\t\t}\n\n\t\tprepEnv(userInput.dotEnvPath, userInput.dotEnvKey);\n\n\t\ts.start(messages.generating);\n\n\t\tawait instantNeon({\n\t\t\tdotEnvFile: userInput.dotEnvPath,\n\t\t\tdotEnvKey: userInput.dotEnvKey,\n\t\t\treferrer: \"npm:get-db/cli\",\n\t\t\tseed: userInput.seed,\n\t\t\tenvPrefix: userInput.envPrefix,\n\t\t});\n\t}\n\ts.stop(\"Database generated!\");\n\n\toutro(messages.happyCoding);\n}\n\nawait main();\n\nexport default main;\n"],"mappings":"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"} {"version":3,"file":"cli.js","names":["userInput: Partial<Defaults>"],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { intro, isCancel, log, outro, spinner, text } from \"@clack/prompts\";\nimport { cristal } from \"gradient-string\";\nimport { claim } from \"./lib/claim-command.js\";\nimport { instantNeon } from \"./lib/instant-neon.js\";\nimport { INTRO_ART, messages } from \"./lib/texts.js\";\nimport type { Defaults } from \"./lib/types.js\";\nimport { DEFAULTS, getArgs } from \"./lib/utils/args.js\";\nimport { prepEnv } from \"./lib/utils/fs.js\";\nimport { validateEnvKey, validateEnvPath } from \"./lib/utils/validate.js\";\n\nasync function main() {\n\tconst { command, yes: shouldUseDefaults, ...flags } = getArgs();\n\n\t// Handle claim command\n\tif (command === \"claim\") {\n\t\tconst envPath = flags.env || DEFAULTS.dotEnvPath;\n\t\tawait claim(envPath, flags.prefix);\n\t\treturn;\n\t}\n\n\tconsole.log(cristal(INTRO_ART));\n\tconst s = spinner();\n\n\tintro(messages.welcome);\n\tlog.info(messages.nonInteractive);\n\tconst userInput: Partial<Defaults> = {};\n\n\tif (shouldUseDefaults) {\n\t\tconst envPath = flags.env || DEFAULTS.dotEnvPath;\n\t\tconst envKey = flags.key || DEFAULTS.dotEnvKey;\n\t\tconst envPrefix = flags.prefix || DEFAULTS.envPrefix;\n\n\t\tprepEnv(envPath, envKey);\n\t\ts.start(messages.generating);\n\n\t\tconst seedConfig = flags.seed\n\t\t\t? { type: \"sql-script\" as const, path: flags.seed }\n\t\t\t: DEFAULTS.seed;\n\n\t\tawait instantNeon({\n\t\t\tdotEnvFile: envPath,\n\t\t\tdotEnvKey: envKey,\n\t\t\treferrer: \"npm:get-db/cli\",\n\t\t\tseed: seedConfig,\n\t\t\tenvPrefix: envPrefix,\n\t\t});\n\t} else {\n\t\t/**\n\t\t * Get Env file path (e.g.: .env)\n\t\t */\n\t\tif (flags.env) {\n\t\t\tconst isEnvPathInvalid = validateEnvPath(flags.env);\n\n\t\t\tif (isEnvPathInvalid) {\n\t\t\t\tlog.error(isEnvPathInvalid.message);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\tlog.step(messages.info.defaultEnvFilePath(flags.env));\n\t\t\tuserInput.dotEnvPath = flags.env;\n\t\t} else {\n\t\t\tuserInput.dotEnvPath = (await text({\n\t\t\t\tmessage: messages.questions.dotEnvFilePath,\n\t\t\t\tvalidate: validateEnvPath,\n\t\t\t})) as Defaults[\"dotEnvPath\"];\n\n\t\t\t// user cancelled with CTRL+C\n\t\t\tif (isCancel(userInput.dotEnvPath)) {\n\t\t\t\toutro(messages.info.userCancelled);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\t// user entered an empty string -- opted for default value.\n\t\t\tif (!userInput.dotEnvPath) {\n\t\t\t\tuserInput.dotEnvPath = DEFAULTS.dotEnvPath;\n\t\t\t\tlog.step(\n\t\t\t\t\tmessages.info.defaultEnvFilePath(userInput.dotEnvPath),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Always set dotEnvKey from flag if present\n\t\tif (flags.key) {\n\t\t\tconst isEnvKeyInvalid = validateEnvKey(flags.key);\n\t\t\tif (isEnvKeyInvalid) {\n\t\t\t\tlog.error(isEnvKeyInvalid.message);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tlog.step(messages.info.defaultEnvKey(flags.key));\n\t\t\tuserInput.dotEnvKey = flags.key;\n\t\t}\n\n\t\t// Prompt for dotEnvKey if not set by flag\n\t\tif (!userInput.dotEnvKey) {\n\t\t\tuserInput.dotEnvKey = (await text({\n\t\t\t\tmessage: messages.questions.dotEnvKey,\n\t\t\t\tvalidate: validateEnvKey,\n\t\t\t})) as Defaults[\"dotEnvKey\"];\n\n\t\t\t// user cancelled with CTRL+C\n\t\t\tif (isCancel(userInput.dotEnvKey)) {\n\t\t\t\toutro(messages.info.userCancelled);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\t// User accepted default value.\n\t\t\tif (!userInput.dotEnvKey) {\n\t\t\t\tuserInput.dotEnvKey = DEFAULTS.dotEnvKey;\n\t\t\t\tlog.step(messages.info.defaultEnvKey(userInput.dotEnvKey));\n\t\t\t}\n\t\t}\n\n\t\tif (!flags.seed) {\n\t\t\tuserInput.seed = {\n\t\t\t\ttype: \"sql-script\",\n\t\t\t\tpath: await text({\n\t\t\t\t\tmessage: messages.questions.seedPath,\n\t\t\t\t}),\n\t\t\t} as Defaults[\"seed\"];\n\n\t\t\tif (!userInput.seed?.path) {\n\t\t\t\tuserInput.seed = DEFAULTS.seed;\n\t\t\t}\n\t\t} else {\n\t\t\tuserInput.seed = {\n\t\t\t\ttype: \"sql-script\",\n\t\t\t\tpath: flags.seed,\n\t\t\t};\n\t\t}\n\n\t\t// Always set envPrefix from flag if present\n\t\tif (flags.prefix) {\n\t\t\tlog.step(messages.info.defaultPrefix(flags.prefix));\n\t\t\tuserInput.envPrefix = flags.prefix;\n\t\t}\n\n\t\t// Prompt for envPrefix if not set by flag\n\t\tif (!userInput.envPrefix) {\n\t\t\tuserInput.envPrefix = (await text({\n\t\t\t\tmessage: messages.questions.prefix,\n\t\t\t})) as Defaults[\"envPrefix\"];\n\n\t\t\t// user cancelled with CTRL+C\n\t\t\tif (isCancel(userInput.envPrefix)) {\n\t\t\t\toutro(messages.info.userCancelled);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\t// User accepted default value.\n\t\t\tif (!userInput.envPrefix) {\n\t\t\t\tuserInput.envPrefix = DEFAULTS.envPrefix;\n\t\t\t\tlog.step(messages.info.defaultPrefix(userInput.envPrefix));\n\t\t\t}\n\t\t}\n\n\t\tprepEnv(userInput.dotEnvPath, userInput.dotEnvKey);\n\n\t\ts.start(messages.generating);\n\n\t\tawait instantNeon({\n\t\t\tdotEnvFile: userInput.dotEnvPath,\n\t\t\tdotEnvKey: userInput.dotEnvKey,\n\t\t\treferrer: \"npm:get-db/cli\",\n\t\t\tseed: userInput.seed,\n\t\t\tenvPrefix: userInput.envPrefix,\n\t\t});\n\t}\n\ts.stop(\"Database generated!\");\n\n\toutro(messages.happyCoding);\n}\n\nawait main();\n\nexport default main;\n"],"mappings":"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"}