Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

get-db

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

get-db - npm Package Compare versions

Comparing version
0.9.1
to
0.9.2
+5
dist/lib/claim-command.d.ts
//#region src/lib/claim-command.d.ts
declare function claim(dotEnvPath: string, envPrefix?: string): Promise<void>;
//#endregion
export { claim };
//# sourceMappingURL=claim-command.d.ts.map
{"version":3,"file":"claim-command.d.ts","names":[],"sources":["../../src/lib/claim-command.ts"],"sourcesContent":[],"mappings":";iBAmBsB,KAAA,0CAGnB"}
import { detectClaimUrl } from "./utils/detect-claim-url.js";
import { getDotEnvContent } from "./utils/fs.js";
import { log, outro } from "@clack/prompts";
import open from "open";
//#region src/lib/claim-command.ts
async function openClaimUrl(claimUrl) {
try {
log.success(`URL located. Opening your default browser.`);
await open(claimUrl);
outro(`You can also manually open: ${claimUrl}.`);
process.exit(0);
} catch (error) {
log.error(error instanceof Error ? error.message : "Failed to open claim URL");
process.exit(1);
}
}
async function claim(dotEnvPath, envPrefix) {
const dotEnvContent = getDotEnvContent(dotEnvPath);
let claimUrl;
if (envPrefix) {
const claimUrlKey = `${envPrefix}NEON_LAUNCHPAD_CLAIM_URL`;
claimUrl = dotEnvContent[claimUrlKey];
if (!claimUrl) {
log.error(`${claimUrlKey} not found in ${dotEnvPath}.`);
outro(`Use \`get-db claim -p <prefix>\` to override URL auto-detection.`);
process.exit(1);
} else {
await openClaimUrl(claimUrl);
return;
}
} else {
claimUrl = detectClaimUrl(dotEnvContent, dotEnvPath);
await openClaimUrl(claimUrl);
return;
}
}
//#endregion
export { claim };
//# sourceMappingURL=claim-command.js.map
{"version":3,"file":"claim-command.js","names":["claimUrl: string | undefined"],"sources":["../../src/lib/claim-command.ts"],"sourcesContent":["import { log, outro } from \"@clack/prompts\";\nimport open from \"open\";\nimport { detectClaimUrl } from \"./utils/detect-claim-url.js\";\nimport { getDotEnvContent } from \"./utils/fs.js\";\n\nasync function openClaimUrl(claimUrl: string): Promise<void> {\n\ttry {\n\t\tlog.success(`URL located. Opening your default browser.`);\n\t\tawait open(claimUrl);\n\t\toutro(`You can also manually open: ${claimUrl}.`);\n\t\tprocess.exit(0);\n\t} catch (error) {\n\t\tlog.error(\n\t\t\terror instanceof Error ? error.message : \"Failed to open claim URL\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n}\n\nexport async function claim(\n\tdotEnvPath: string,\n\tenvPrefix?: string,\n): Promise<void> {\n\tconst dotEnvContent = getDotEnvContent(dotEnvPath);\n\tlet claimUrl: string | undefined;\n\n\tif (envPrefix) {\n\t\tconst claimUrlKey = `${envPrefix}NEON_LAUNCHPAD_CLAIM_URL`;\n\t\tclaimUrl = dotEnvContent[claimUrlKey];\n\n\t\tif (!claimUrl) {\n\t\t\tlog.error(`${claimUrlKey} not found in ${dotEnvPath}.`);\n\t\t\toutro(\n\t\t\t\t`Use \\`get-db claim -p <prefix>\\` to override URL auto-detection.`,\n\t\t\t);\n\t\t\tprocess.exit(1);\n\t\t} else {\n\t\t\tawait openClaimUrl(claimUrl);\n\t\t\treturn;\n\t\t}\n\t} else {\n\t\tclaimUrl = detectClaimUrl(dotEnvContent, dotEnvPath);\n\t\tawait openClaimUrl(claimUrl);\n\t\treturn;\n\t}\n}\n"],"mappings":";;;;;;AAKA,eAAe,aAAa,UAAiC;AAC5D,KAAI;AACH,MAAI,QAAQ,6CAA6C;AACzD,QAAM,KAAK,SAAS;AACpB,QAAM,+BAA+B,SAAS,GAAG;AACjD,UAAQ,KAAK,EAAE;UACP,OAAO;AACf,MAAI,MACH,iBAAiB,QAAQ,MAAM,UAAU,2BACzC;AACD,UAAQ,KAAK,EAAE;;;AAIjB,eAAsB,MACrB,YACA,WACgB;CAChB,MAAM,gBAAgB,iBAAiB,WAAW;CAClD,IAAIA;AAEJ,KAAI,WAAW;EACd,MAAM,cAAc,GAAG,UAAU;AACjC,aAAW,cAAc;AAEzB,MAAI,CAAC,UAAU;AACd,OAAI,MAAM,GAAG,YAAY,gBAAgB,WAAW,GAAG;AACvD,SACC,mEACA;AACD,WAAQ,KAAK,EAAE;SACT;AACN,SAAM,aAAa,SAAS;AAC5B;;QAEK;AACN,aAAW,eAAe,eAAe,WAAW;AACpD,QAAM,aAAa,SAAS;AAC5B"}
//#region src/lib/utils/detect-claim-url.d.ts
declare function detectClaimUrl(dotEnvContent: Record<string, string>, dotEnvPath: string): string;
//#endregion
export { detectClaimUrl };
//# sourceMappingURL=detect-claim-url.d.ts.map
{"version":3,"file":"detect-claim-url.d.ts","names":[],"sources":["../../../src/lib/utils/detect-claim-url.ts"],"sourcesContent":[],"mappings":";iBAEgB,cAAA,gBACA"}
import { log, outro } from "@clack/prompts";
//#region src/lib/utils/detect-claim-url.ts
function detectClaimUrl(dotEnvContent, dotEnvPath) {
const claimUrlKey = Object.keys(dotEnvContent).find((key) => key.endsWith("NEON_LAUNCHPAD_CLAIM_URL"));
if (!claimUrlKey) {
log.error(`Claim URL not found in ${dotEnvPath}.`);
log.info("Looking for any key ending with NEON_LAUNCHPAD_CLAIM_URL");
outro("No claim URL found. Have you created a database yet?");
process.exit(1);
}
const claimUrl = dotEnvContent[claimUrlKey];
if (!claimUrl) {
log.error(`${claimUrlKey} found but empty.`);
outro("Use `get-db claim -p <prefix>` to override URL auto-detection. For example, use `get-db claim -p PROD_` if your key is `PROD_NEON_LAUNCHPAD_CLAIM_URL`.");
process.exit(1);
}
return claimUrl;
}
//#endregion
export { detectClaimUrl };
//# sourceMappingURL=detect-claim-url.js.map
{"version":3,"file":"detect-claim-url.js","names":[],"sources":["../../../src/lib/utils/detect-claim-url.ts"],"sourcesContent":["import { log, outro } from \"@clack/prompts\";\n\nexport function detectClaimUrl(\n\tdotEnvContent: Record<string, string>,\n\tdotEnvPath: string,\n) {\n\tconst claimUrlKey = Object.keys(dotEnvContent).find((key) =>\n\t\tkey.endsWith(\"NEON_LAUNCHPAD_CLAIM_URL\"),\n\t);\n\n\tif (!claimUrlKey) {\n\t\tlog.error(`Claim URL not found in ${dotEnvPath}.`);\n\t\tlog.info(\"Looking for any key ending with NEON_LAUNCHPAD_CLAIM_URL\");\n\t\toutro(\"No claim URL found. Have you created a database yet?\");\n\t\tprocess.exit(1);\n\t}\n\n\tconst claimUrl = dotEnvContent[claimUrlKey];\n\n\tif (!claimUrl) {\n\t\tlog.error(`${claimUrlKey} found but empty.`);\n\t\toutro(\n\t\t\t\"Use `get-db claim -p <prefix>` to override URL auto-detection. For example, use `get-db claim -p PROD_` if your key is `PROD_NEON_LAUNCHPAD_CLAIM_URL`.\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n\n\treturn claimUrl;\n}\n"],"mappings":";;;AAEA,SAAgB,eACf,eACA,YACC;CACD,MAAM,cAAc,OAAO,KAAK,cAAc,CAAC,MAAM,QACpD,IAAI,SAAS,2BAA2B,CACxC;AAED,KAAI,CAAC,aAAa;AACjB,MAAI,MAAM,0BAA0B,WAAW,GAAG;AAClD,MAAI,KAAK,2DAA2D;AACpE,QAAM,uDAAuD;AAC7D,UAAQ,KAAK,EAAE;;CAGhB,MAAM,WAAW,cAAc;AAE/B,KAAI,CAAC,UAAU;AACd,MAAI,MAAM,GAAG,YAAY,mBAAmB;AAC5C,QACC,0JACA;AACD,UAAQ,KAAK,EAAE;;AAGhB,QAAO"}
+2
-2

@@ -5,4 +5,4 @@ #!/usr/bin/env node

import { prepEnv } from "./lib/utils/fs.js";
import { claim } from "./lib/claim-command.js";
import { instantNeon } from "./lib/instant-neon.js";
import { claim } from "./lib/utils/claim.js";
import { validateEnvKey, validateEnvPath } from "./lib/utils/validate.js";

@@ -16,3 +16,3 @@ import { intro, isCancel, log, outro, spinner, text } from "@clack/prompts";

if (command === "claim") {
await claim(flags.env || DEFAULTS.dotEnvKey, flags.prefix || DEFAULTS.envPrefix);
await claim(flags.env || DEFAULTS.dotEnvPath, flags.prefix);
return;

@@ -19,0 +19,0 @@ }

@@ -1,1 +0,1 @@

{"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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"}
{
"name": "get-db",
"version": "0.9.1",
"version": "0.9.2",
"description": "create a claimable Neon database in seconds!",

@@ -5,0 +5,0 @@ "keywords": [

//#region src/lib/utils/claim.d.ts
declare function claim(dotEnvPath: string, envPrefix: string): Promise<void>;
//#endregion
export { claim };
//# sourceMappingURL=claim.d.ts.map
{"version":3,"file":"claim.d.ts","names":[],"sources":["../../../src/lib/utils/claim.ts"],"sourcesContent":[],"mappings":";iBAIsB,KAAA,yCAGnB"}
import { getDotEnvContent } from "./fs.js";
import { log, outro } from "@clack/prompts";
import open from "open";
//#region src/lib/utils/claim.ts
async function claim(dotEnvPath, envPrefix) {
try {
const dotEnvContent = getDotEnvContent(dotEnvPath);
const claimUrlKey = `${envPrefix}NEON_LAUNCHPAD_CLAIM_URL`;
const claimUrl = dotEnvContent[claimUrlKey];
if (!claimUrl) {
log.error(`Claim URL not found in ${dotEnvPath}. Looking for key: ${claimUrlKey}`);
outro("No claim URL found. Have you created a database yet?");
process.exit(1);
}
log.success(`Opening claim URL: ${claimUrl}`);
await open(claimUrl);
outro("Claim URL opened in your browser!");
} catch (error) {
log.error(error instanceof Error ? error.message : "Failed to open claim URL");
process.exit(1);
}
}
//#endregion
export { claim };
//# sourceMappingURL=claim.js.map
{"version":3,"file":"claim.js","names":[],"sources":["../../../src/lib/utils/claim.ts"],"sourcesContent":["import { log, outro } from \"@clack/prompts\";\nimport open from \"open\";\nimport { getDotEnvContent } from \"./fs.js\";\n\nexport async function claim(\n\tdotEnvPath: string,\n\tenvPrefix: string,\n): Promise<void> {\n\ttry {\n\t\tconst dotEnvContent = getDotEnvContent(dotEnvPath);\n\t\tconst claimUrlKey = `${envPrefix}NEON_LAUNCHPAD_CLAIM_URL`;\n\t\tconst claimUrl = dotEnvContent[claimUrlKey];\n\n\t\tif (!claimUrl) {\n\t\t\tlog.error(\n\t\t\t\t`Claim URL not found in ${dotEnvPath}. Looking for key: ${claimUrlKey}`,\n\t\t\t);\n\t\t\toutro(\"No claim URL found. Have you created a database yet?\");\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\tlog.success(`Opening claim URL: ${claimUrl}`);\n\t\tawait open(claimUrl);\n\t\toutro(\"Claim URL opened in your browser!\");\n\t} catch (error) {\n\t\tlog.error(\n\t\t\terror instanceof Error ? error.message : \"Failed to open claim URL\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n}\n"],"mappings":";;;;;AAIA,eAAsB,MACrB,YACA,WACgB;AAChB,KAAI;EACH,MAAM,gBAAgB,iBAAiB,WAAW;EAClD,MAAM,cAAc,GAAG,UAAU;EACjC,MAAM,WAAW,cAAc;AAE/B,MAAI,CAAC,UAAU;AACd,OAAI,MACH,0BAA0B,WAAW,qBAAqB,cAC1D;AACD,SAAM,uDAAuD;AAC7D,WAAQ,KAAK,EAAE;;AAGhB,MAAI,QAAQ,sBAAsB,WAAW;AAC7C,QAAM,KAAK,SAAS;AACpB,QAAM,oCAAoC;UAClC,OAAO;AACf,MAAI,MACH,iBAAiB,QAAQ,MAAM,UAAU,2BACzC;AACD,UAAQ,KAAK,EAAE"}