@@ -22,3 +22,3 @@ import { detectClaimUrl } from "./utils/detect-claim-url.js"; | ||
| if (envPrefix) { | ||
| const claimUrlKey = `${envPrefix}NEON_LAUNCHPAD_CLAIM_URL`; | ||
| const claimUrlKey = `${envPrefix}INSTAGRES_CLAIM_URL`; | ||
| claimUrl = dotEnvContent[claimUrlKey]; | ||
@@ -25,0 +25,0 @@ if (!claimUrl) { |
@@ -1,1 +0,1 @@ | ||
| {"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"} | ||
| {"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}INSTAGRES_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"} |
| import { messages } from "./texts.js"; | ||
| import { writeToEnv } from "./utils/fs.js"; | ||
| import { seedDatabase } from "./seed-database.js"; | ||
| import { LAUNCHPAD_URLS } from "./utils/urls.js"; | ||
| import { INSTAGRES_URLS } from "./utils/urls.js"; | ||
| import { createClaimableDatabase } from "./utils/create-db.js"; | ||
@@ -20,3 +20,3 @@ import { getPoolerString } from "./utils/format.js"; | ||
| const claimExpiresAt = new Date(Date.now() + 4320 * 60 * 1e3); | ||
| const claimUrl = new URL(LAUNCHPAD_URLS.CLAIM_DATABASE(dbId)); | ||
| const claimUrl = new URL(INSTAGRES_URLS.CLAIM_DATABASE(dbId)); | ||
| const connString = await createClaimableDatabase(dbId, `npm:get-db|${referrer}`); | ||
@@ -23,0 +23,0 @@ const poolerString = getPoolerString(connString); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"instant-postgres.js","names":[],"sources":["../../src/lib/instant-postgres.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { log } from \"@clack/prompts\";\nimport { seedDatabase } from \"./seed-database.js\";\nimport { messages } from \"./texts.js\";\nimport type { InstantPostgresParams } from \"./types.js\";\nimport { createClaimableDatabase } from \"./utils/create-db.js\";\nimport { getPoolerString } from \"./utils/format.js\";\nimport { writeToEnv } from \"./utils/fs.js\";\nimport { LAUNCHPAD_URLS } from \"./utils/urls.js\";\n\n/**\n * Creates an instant Postgres connection string from Instagres by Neon\n * if not already set in the specified .env file.\n * Prompts the user to optionally generate a connection string,\n * saves it to the .env file, and returns the connection string.\n */\nexport const instantPostgres = async ({\n\tdotEnvFile = \".env\",\n\tdotEnvKey = \"DATABASE_URL\",\n\treferrer = \"unknown\",\n\tseed = undefined,\n\tenvPrefix = \"PUBLIC_\",\n}: InstantPostgresParams = {}): Promise<{\n\tdatabaseUrl: string;\n\tpoolerUrl: string;\n\tclaimUrl: string;\n\tclaimExpiresAt: Date;\n}> => {\n\tconst dbId = randomUUID();\n\tconst claimExpiresAt = new Date(Date.now() + 3 * 24 * 60 * 60 * 1000);\n\tconst claimUrl = new URL(LAUNCHPAD_URLS.CLAIM_DATABASE(dbId));\n\n\tconst connString = await createClaimableDatabase(\n\t\tdbId,\n\t\t`npm:get-db|${referrer}`,\n\t);\n\tconst poolerString = getPoolerString(connString);\n\n\tlog.step(messages.connectionString(connString));\n\tlog.step(messages.poolerString(poolerString));\n\n\tawait writeToEnv(\n\t\tdotEnvFile,\n\t\tdotEnvKey,\n\t\tclaimExpiresAt,\n\t\tclaimUrl,\n\t\tconnString,\n\t\tpoolerString,\n\t\tenvPrefix,\n\t);\n\n\tlog.success(messages.envSuccess(dotEnvFile, dotEnvKey));\n\tlog.info(messages.databaseGenerated(claimUrl.href));\n\n\tif (seed) {\n\t\tlog.step(\"Pushing schema to database\");\n\t\tawait seedDatabase(seed.path, connString);\n\t\tlog.success(\"Schema pushed to database\");\n\t}\n\n\treturn {\n\t\tdatabaseUrl: connString,\n\t\tpoolerUrl: poolerString,\n\t\tclaimUrl: claimUrl.href,\n\t\tclaimExpiresAt,\n\t} as const;\n};\n\n/**\n * @deprecated Use `instantPostgres` instead\n */\nexport const instantNeon = instantPostgres;\n\nexport type { InstantPostgresParams };\n\n/**\n * @deprecated Use `InstantPostgresParams` instead\n */\nexport type InstantNeonParams = InstantPostgresParams;\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAa,kBAAkB,OAAO,EACrC,aAAa,QACb,YAAY,gBACZ,WAAW,WACX,OAAO,QACP,YAAY,cACc,EAAE,KAKvB;CACL,MAAM,OAAO,YAAY;CACzB,MAAM,iBAAiB,IAAI,KAAK,KAAK,KAAK,GAAG,OAAc,KAAK,IAAK;CACrE,MAAM,WAAW,IAAI,IAAI,eAAe,eAAe,KAAK,CAAC;CAE7D,MAAM,aAAa,MAAM,wBACxB,MACA,cAAc,WACd;CACD,MAAM,eAAe,gBAAgB,WAAW;AAEhD,KAAI,KAAK,SAAS,iBAAiB,WAAW,CAAC;AAC/C,KAAI,KAAK,SAAS,aAAa,aAAa,CAAC;AAE7C,OAAM,WACL,YACA,WACA,gBACA,UACA,YACA,cACA,UACA;AAED,KAAI,QAAQ,SAAS,WAAW,YAAY,UAAU,CAAC;AACvD,KAAI,KAAK,SAAS,kBAAkB,SAAS,KAAK,CAAC;AAEnD,KAAI,MAAM;AACT,MAAI,KAAK,6BAA6B;AACtC,QAAM,aAAa,KAAK,MAAM,WAAW;AACzC,MAAI,QAAQ,4BAA4B;;AAGzC,QAAO;EACN,aAAa;EACb,WAAW;EACX,UAAU,SAAS;EACnB;EACA;;;;;AAMF,MAAa,cAAc"} | ||
| {"version":3,"file":"instant-postgres.js","names":[],"sources":["../../src/lib/instant-postgres.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { log } from \"@clack/prompts\";\nimport { seedDatabase } from \"./seed-database.js\";\nimport { messages } from \"./texts.js\";\nimport type { InstantPostgresParams } from \"./types.js\";\nimport { createClaimableDatabase } from \"./utils/create-db.js\";\nimport { getPoolerString } from \"./utils/format.js\";\nimport { writeToEnv } from \"./utils/fs.js\";\nimport { INSTAGRES_URLS } from \"./utils/urls.js\";\n\n/**\n * Creates an instant Postgres connection string from Instagres by Neon\n * if not already set in the specified .env file.\n * Prompts the user to optionally generate a connection string,\n * saves it to the .env file, and returns the connection string.\n */\nexport const instantPostgres = async ({\n\tdotEnvFile = \".env\",\n\tdotEnvKey = \"DATABASE_URL\",\n\treferrer = \"unknown\",\n\tseed = undefined,\n\tenvPrefix = \"PUBLIC_\",\n}: InstantPostgresParams = {}): Promise<{\n\tdatabaseUrl: string;\n\tpoolerUrl: string;\n\tclaimUrl: string;\n\tclaimExpiresAt: Date;\n}> => {\n\tconst dbId = randomUUID();\n\tconst claimExpiresAt = new Date(Date.now() + 3 * 24 * 60 * 60 * 1000);\n\tconst claimUrl = new URL(INSTAGRES_URLS.CLAIM_DATABASE(dbId));\n\n\tconst connString = await createClaimableDatabase(\n\t\tdbId,\n\t\t`npm:get-db|${referrer}`,\n\t);\n\tconst poolerString = getPoolerString(connString);\n\n\tlog.step(messages.connectionString(connString));\n\tlog.step(messages.poolerString(poolerString));\n\n\tawait writeToEnv(\n\t\tdotEnvFile,\n\t\tdotEnvKey,\n\t\tclaimExpiresAt,\n\t\tclaimUrl,\n\t\tconnString,\n\t\tpoolerString,\n\t\tenvPrefix,\n\t);\n\n\tlog.success(messages.envSuccess(dotEnvFile, dotEnvKey));\n\tlog.info(messages.databaseGenerated(claimUrl.href));\n\n\tif (seed) {\n\t\tlog.step(\"Pushing schema to database\");\n\t\tawait seedDatabase(seed.path, connString);\n\t\tlog.success(\"Schema pushed to database\");\n\t}\n\n\treturn {\n\t\tdatabaseUrl: connString,\n\t\tpoolerUrl: poolerString,\n\t\tclaimUrl: claimUrl.href,\n\t\tclaimExpiresAt,\n\t} as const;\n};\n\n/**\n * @deprecated Use `instantPostgres` instead\n */\nexport const instantNeon = instantPostgres;\n\nexport type { InstantPostgresParams };\n\n/**\n * @deprecated Use `InstantPostgresParams` instead\n */\nexport type InstantNeonParams = InstantPostgresParams;\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAa,kBAAkB,OAAO,EACrC,aAAa,QACb,YAAY,gBACZ,WAAW,WACX,OAAO,QACP,YAAY,cACc,EAAE,KAKvB;CACL,MAAM,OAAO,YAAY;CACzB,MAAM,iBAAiB,IAAI,KAAK,KAAK,KAAK,GAAG,OAAc,KAAK,IAAK;CACrE,MAAM,WAAW,IAAI,IAAI,eAAe,eAAe,KAAK,CAAC;CAE7D,MAAM,aAAa,MAAM,wBACxB,MACA,cAAc,WACd;CACD,MAAM,eAAe,gBAAgB,WAAW;AAEhD,KAAI,KAAK,SAAS,iBAAiB,WAAW,CAAC;AAC/C,KAAI,KAAK,SAAS,aAAa,aAAa,CAAC;AAE7C,OAAM,WACL,YACA,WACA,gBACA,UACA,YACA,cACA,UACA;AAED,KAAI,QAAQ,SAAS,WAAW,YAAY,UAAU,CAAC;AACvD,KAAI,KAAK,SAAS,kBAAkB,SAAS,KAAK,CAAC;AAEnD,KAAI,MAAM;AACT,MAAI,KAAK,6BAA6B;AACtC,QAAM,aAAa,KAAK,MAAM,WAAW;AACzC,MAAI,QAAQ,4BAA4B;;AAGzC,QAAO;EACN,aAAa;EACb,WAAW;EACX,UAAU,SAAS;EACnB;EACA;;;;;AAMF,MAAa,cAAc"} |
@@ -1,10 +0,10 @@ | ||
| import { LAUNCHPAD_URLS } from "./urls.js"; | ||
| import { INSTAGRES_URLS } from "./urls.js"; | ||
| //#region src/lib/utils/create-db.ts | ||
| async function createClaimableDatabase(dbId, referrer) { | ||
| if (!(await fetch(LAUNCHPAD_URLS.CREATE_DATABASE_POST(dbId, referrer), { | ||
| if (!(await fetch(INSTAGRES_URLS.CREATE_DATABASE_POST(dbId, referrer), { | ||
| method: "POST", | ||
| headers: { "Content-Type": "application/json" } | ||
| })).ok) throw new Error("Failed to create database"); | ||
| return (await fetch(LAUNCHPAD_URLS.GET_DATABASE_DATA(dbId), { | ||
| return (await fetch(INSTAGRES_URLS.GET_DATABASE_DATA(dbId), { | ||
| method: "GET", | ||
@@ -11,0 +11,0 @@ headers: { "Content-Type": "application/json" } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"create-db.js","names":[],"sources":["../../../src/lib/utils/create-db.ts"],"sourcesContent":["import { LAUNCHPAD_URLS } from \"./urls.js\";\n\nexport async function createClaimableDatabase(dbId: string, referrer: string) {\n\tconst dbCreation = await fetch(\n\t\tLAUNCHPAD_URLS.CREATE_DATABASE_POST(dbId, referrer),\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t},\n\t);\n\n\tif (!dbCreation.ok) {\n\t\tthrow new Error(\"Failed to create database\");\n\t}\n\n\tconst dbInfo: { connection_string: string } = await fetch(\n\t\tLAUNCHPAD_URLS.GET_DATABASE_DATA(dbId),\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t},\n\t).then((res) => res.json());\n\n\treturn dbInfo.connection_string;\n}\n"],"mappings":";;;AAEA,eAAsB,wBAAwB,MAAc,UAAkB;AAW7E,KAAI,EAVe,MAAM,MACxB,eAAe,qBAAqB,MAAM,SAAS,EACnD;EACC,QAAQ;EACR,SAAS,EACR,gBAAgB,oBAChB;EACD,CACD,EAEe,GACf,OAAM,IAAI,MAAM,4BAA4B;AAa7C,SAV8C,MAAM,MACnD,eAAe,kBAAkB,KAAK,EACtC;EACC,QAAQ;EACR,SAAS,EACR,gBAAgB,oBAChB;EACD,CACD,CAAC,MAAM,QAAQ,IAAI,MAAM,CAAC,EAEb"} | ||
| {"version":3,"file":"create-db.js","names":[],"sources":["../../../src/lib/utils/create-db.ts"],"sourcesContent":["import { INSTAGRES_URLS } from \"./urls.js\";\n\nexport async function createClaimableDatabase(dbId: string, referrer: string) {\n\tconst dbCreation = await fetch(\n\t\tINSTAGRES_URLS.CREATE_DATABASE_POST(dbId, referrer),\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t},\n\t);\n\n\tif (!dbCreation.ok) {\n\t\tthrow new Error(\"Failed to create database\");\n\t}\n\n\tconst dbInfo: { connection_string: string } = await fetch(\n\t\tINSTAGRES_URLS.GET_DATABASE_DATA(dbId),\n\t\t{\n\t\t\tmethod: \"GET\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t},\n\t).then((res) => res.json());\n\n\treturn dbInfo.connection_string;\n}\n"],"mappings":";;;AAEA,eAAsB,wBAAwB,MAAc,UAAkB;AAW7E,KAAI,EAVe,MAAM,MACxB,eAAe,qBAAqB,MAAM,SAAS,EACnD;EACC,QAAQ;EACR,SAAS,EACR,gBAAgB,oBAChB;EACD,CACD,EAEe,GACf,OAAM,IAAI,MAAM,4BAA4B;AAa7C,SAV8C,MAAM,MACnD,eAAe,kBAAkB,KAAK,EACtC;EACC,QAAQ;EACR,SAAS,EACR,gBAAgB,oBAChB;EACD,CACD,CAAC,MAAM,QAAQ,IAAI,MAAM,CAAC,EAEb"} |
@@ -5,6 +5,6 @@ import { log, outro } from "@clack/prompts"; | ||
| function detectClaimUrl(dotEnvContent, dotEnvPath) { | ||
| const claimUrlKey = Object.keys(dotEnvContent).find((key) => key.endsWith("NEON_LAUNCHPAD_CLAIM_URL")); | ||
| const claimUrlKey = Object.keys(dotEnvContent).find((key) => key.endsWith("INSTAGRES_CLAIM_URL")); | ||
| if (!claimUrlKey) { | ||
| log.error(`Claim URL not found in ${dotEnvPath}.`); | ||
| log.info("Looking for any key ending with NEON_LAUNCHPAD_CLAIM_URL"); | ||
| log.info("Looking for any key ending with INSTAGRES_CLAIM_URL"); | ||
| outro("No claim URL found. Have you created a database yet?"); | ||
@@ -16,3 +16,3 @@ process.exit(1); | ||
| 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`."); | ||
| 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_INSTAGRES_CLAIM_URL`."); | ||
| process.exit(1); | ||
@@ -19,0 +19,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"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"} | ||
| {"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(\"INSTAGRES_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 INSTAGRES_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_INSTAGRES_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,sBAAsB,CACnC;AAED,KAAI,CAAC,aAAa;AACjB,MAAI,MAAM,0BAA0B,WAAW,GAAG;AAClD,MAAI,KAAK,sDAAsD;AAC/D,QAAM,uDAAuD;AAC7D,UAAQ,KAAK,EAAE;;CAGhB,MAAM,WAAW,cAAc;AAE/B,KAAI,CAAC,UAAU;AACd,MAAI,MAAM,GAAG,YAAY,mBAAmB;AAC5C,QACC,qJACA;AACD,UAAQ,KAAK,EAAE;;AAGhB,QAAO"} |
@@ -57,3 +57,3 @@ import { messages } from "../texts.js"; | ||
| ${dotEnvKey}_POOLER=${poolerString} | ||
| ${envPrefix}NEON_LAUNCHPAD_CLAIM_URL=${claimUrl.href} | ||
| ${envPrefix}INSTAGRES_CLAIM_URL=${claimUrl.href} | ||
| `); | ||
@@ -60,0 +60,0 @@ closeSync(openedFile); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"fs.js","names":[],"sources":["../../../src/lib/utils/fs.ts"],"sourcesContent":["import {\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\twriteSync,\n} from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { log, outro } from \"@clack/prompts\";\nimport { parse } from \"dotenv\";\nimport { messages } from \"../texts.js\";\n\nfunction splitCommands(schema: string) {\n\treturn schema\n\t\t.split(\";\")\n\t\t.map((cmd) => cmd.trim())\n\t\t.filter(Boolean);\n}\n\nfunction validateSql(sql: string) {\n\tconst openParens = (sql.match(/\\(/g) || []).length;\n\tconst closeParens = (sql.match(/\\)/g) || []).length;\n\tif (openParens !== closeParens) {\n\t\tthrow new Error(\"SQL has unbalanced parentheses\");\n\t}\n\n\treturn sql;\n}\n\nexport function getSqlCommands(path: string) {\n\ttry {\n\t\tconst sql = validateSql(readFileSync(path, \"utf8\"));\n\t\treturn splitCommands(sql);\n\t} catch (error) {\n\t\tlog.error(\n\t\t\terror instanceof Error ? error.message : \"Failed to read SQL file.\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n}\n\nexport function getDotEnvContent(dotEnvFile: string): Record<string, string> {\n\tif (!existsSync(dotEnvFile)) {\n\t\tlog.info(messages.info.dotEnvFileNotFound);\n\t\treturn {};\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(dotEnvFile);\n\t\treturn parse(content);\n\t} catch {\n\t\tthrow new Error(messages.errors.failedToParseEnvFile);\n\t}\n}\n\nexport function prepEnv(dotEnvFile: string, dotEnvKey: string) {\n\ttry {\n\t\tconst dotEnvContent = getDotEnvContent(dotEnvFile);\n\n\t\tif (dotEnvContent[dotEnvKey]) {\n\t\t\tlog.warn(messages.errors.envKeyExists(dotEnvKey, dotEnvFile));\n\t\t\toutro(messages.envKeyExistsExit);\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\treturn;\n\t} catch (error) {\n\t\t// getDotEnvContent will create empty file if it doesn't exist\n\t\t// or throw if parsing fails\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message === messages.errors.failedToParseEnvFile\n\t\t) {\n\t\t\tconsole.error(error);\n\t\t\tlog.error(messages.errors.invalidEnvFile);\n\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n}\n\nexport async function writeToEnv(\n\tdotEnvFile: string,\n\tdotEnvKey: string,\n\tclaimExpiresAt: Date,\n\tclaimUrl: URL,\n\tconnString: string,\n\tpoolerString: string,\n\tenvPrefix: string = \"PUBLIC_\",\n) {\n\tif (!existsSync(dirname(dotEnvFile))) {\n\t\tmkdirSync(dirname(dotEnvFile), { recursive: true });\n\t}\n\n\tconst openedFile = openSync(dotEnvFile, \"a\");\n\twriteSync(\n\t\topenedFile,\n\t\t`# Claimable DB expires at: ${claimExpiresAt.toUTCString()}\n# Claim it now to your account: ${claimUrl.href}\n${dotEnvKey}=${connString}\n${dotEnvKey}_POOLER=${poolerString}\n${envPrefix}NEON_LAUNCHPAD_CLAIM_URL=${claimUrl.href}\n`,\n\t);\n\tcloseSync(openedFile);\n}\n"],"mappings":";;;;;;;AAaA,SAAS,cAAc,QAAgB;AACtC,QAAO,OACL,MAAM,IAAI,CACV,KAAK,QAAQ,IAAI,MAAM,CAAC,CACxB,OAAO,QAAQ;;AAGlB,SAAS,YAAY,KAAa;AAGjC,MAFoB,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,YACvB,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,OAE5C,OAAM,IAAI,MAAM,iCAAiC;AAGlD,QAAO;;AAGR,SAAgB,eAAe,MAAc;AAC5C,KAAI;AAEH,SAAO,cADK,YAAY,aAAa,MAAM,OAAO,CAAC,CAC1B;UACjB,OAAO;AACf,MAAI,MACH,iBAAiB,QAAQ,MAAM,UAAU,2BACzC;AACD,UAAQ,KAAK,EAAE;;;AAIjB,SAAgB,iBAAiB,YAA4C;AAC5E,KAAI,CAAC,WAAW,WAAW,EAAE;AAC5B,MAAI,KAAK,SAAS,KAAK,mBAAmB;AAC1C,SAAO,EAAE;;AAGV,KAAI;AAEH,SAAO,MADS,aAAa,WAAW,CACnB;SACd;AACP,QAAM,IAAI,MAAM,SAAS,OAAO,qBAAqB;;;AAIvD,SAAgB,QAAQ,YAAoB,WAAmB;AAC9D,KAAI;AAGH,MAFsB,iBAAiB,WAAW,CAEhC,YAAY;AAC7B,OAAI,KAAK,SAAS,OAAO,aAAa,WAAW,WAAW,CAAC;AAC7D,SAAM,SAAS,iBAAiB;AAChC,WAAQ,KAAK,EAAE;;AAGhB;UACQ,OAAO;AAGf,MACC,iBAAiB,SACjB,MAAM,YAAY,SAAS,OAAO,sBACjC;AACD,WAAQ,MAAM,MAAM;AACpB,OAAI,MAAM,SAAS,OAAO,eAAe;AAEzC,WAAQ,KAAK,EAAE;;;;AAKlB,eAAsB,WACrB,YACA,WACA,gBACA,UACA,YACA,cACA,YAAoB,WACnB;AACD,KAAI,CAAC,WAAW,QAAQ,WAAW,CAAC,CACnC,WAAU,QAAQ,WAAW,EAAE,EAAE,WAAW,MAAM,CAAC;CAGpD,MAAM,aAAa,SAAS,YAAY,IAAI;AAC5C,WACC,YACA,8BAA8B,eAAe,aAAa,CAAC;kCAC3B,SAAS,KAAK;EAC9C,UAAU,GAAG,WAAW;EACxB,UAAU,UAAU,aAAa;EACjC,UAAU,2BAA2B,SAAS,KAAK;EAEnD;AACD,WAAU,WAAW"} | ||
| {"version":3,"file":"fs.js","names":[],"sources":["../../../src/lib/utils/fs.ts"],"sourcesContent":["import {\n\tcloseSync,\n\texistsSync,\n\tmkdirSync,\n\topenSync,\n\treadFileSync,\n\twriteSync,\n} from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { log, outro } from \"@clack/prompts\";\nimport { parse } from \"dotenv\";\nimport { messages } from \"../texts.js\";\n\nfunction splitCommands(schema: string) {\n\treturn schema\n\t\t.split(\";\")\n\t\t.map((cmd) => cmd.trim())\n\t\t.filter(Boolean);\n}\n\nfunction validateSql(sql: string) {\n\tconst openParens = (sql.match(/\\(/g) || []).length;\n\tconst closeParens = (sql.match(/\\)/g) || []).length;\n\tif (openParens !== closeParens) {\n\t\tthrow new Error(\"SQL has unbalanced parentheses\");\n\t}\n\n\treturn sql;\n}\n\nexport function getSqlCommands(path: string) {\n\ttry {\n\t\tconst sql = validateSql(readFileSync(path, \"utf8\"));\n\t\treturn splitCommands(sql);\n\t} catch (error) {\n\t\tlog.error(\n\t\t\terror instanceof Error ? error.message : \"Failed to read SQL file.\",\n\t\t);\n\t\tprocess.exit(1);\n\t}\n}\n\nexport function getDotEnvContent(dotEnvFile: string): Record<string, string> {\n\tif (!existsSync(dotEnvFile)) {\n\t\tlog.info(messages.info.dotEnvFileNotFound);\n\t\treturn {};\n\t}\n\n\ttry {\n\t\tconst content = readFileSync(dotEnvFile);\n\t\treturn parse(content);\n\t} catch {\n\t\tthrow new Error(messages.errors.failedToParseEnvFile);\n\t}\n}\n\nexport function prepEnv(dotEnvFile: string, dotEnvKey: string) {\n\ttry {\n\t\tconst dotEnvContent = getDotEnvContent(dotEnvFile);\n\n\t\tif (dotEnvContent[dotEnvKey]) {\n\t\t\tlog.warn(messages.errors.envKeyExists(dotEnvKey, dotEnvFile));\n\t\t\toutro(messages.envKeyExistsExit);\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\treturn;\n\t} catch (error) {\n\t\t// getDotEnvContent will create empty file if it doesn't exist\n\t\t// or throw if parsing fails\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message === messages.errors.failedToParseEnvFile\n\t\t) {\n\t\t\tconsole.error(error);\n\t\t\tlog.error(messages.errors.invalidEnvFile);\n\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n}\n\nexport async function writeToEnv(\n\tdotEnvFile: string,\n\tdotEnvKey: string,\n\tclaimExpiresAt: Date,\n\tclaimUrl: URL,\n\tconnString: string,\n\tpoolerString: string,\n\tenvPrefix: string = \"PUBLIC_\",\n) {\n\tif (!existsSync(dirname(dotEnvFile))) {\n\t\tmkdirSync(dirname(dotEnvFile), { recursive: true });\n\t}\n\n\tconst openedFile = openSync(dotEnvFile, \"a\");\n\twriteSync(\n\t\topenedFile,\n\t\t`# Claimable DB expires at: ${claimExpiresAt.toUTCString()}\n# Claim it now to your account: ${claimUrl.href}\n${dotEnvKey}=${connString}\n${dotEnvKey}_POOLER=${poolerString}\n${envPrefix}INSTAGRES_CLAIM_URL=${claimUrl.href}\n`,\n\t);\n\tcloseSync(openedFile);\n}\n"],"mappings":";;;;;;;AAaA,SAAS,cAAc,QAAgB;AACtC,QAAO,OACL,MAAM,IAAI,CACV,KAAK,QAAQ,IAAI,MAAM,CAAC,CACxB,OAAO,QAAQ;;AAGlB,SAAS,YAAY,KAAa;AAGjC,MAFoB,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,YACvB,IAAI,MAAM,MAAM,IAAI,EAAE,EAAE,OAE5C,OAAM,IAAI,MAAM,iCAAiC;AAGlD,QAAO;;AAGR,SAAgB,eAAe,MAAc;AAC5C,KAAI;AAEH,SAAO,cADK,YAAY,aAAa,MAAM,OAAO,CAAC,CAC1B;UACjB,OAAO;AACf,MAAI,MACH,iBAAiB,QAAQ,MAAM,UAAU,2BACzC;AACD,UAAQ,KAAK,EAAE;;;AAIjB,SAAgB,iBAAiB,YAA4C;AAC5E,KAAI,CAAC,WAAW,WAAW,EAAE;AAC5B,MAAI,KAAK,SAAS,KAAK,mBAAmB;AAC1C,SAAO,EAAE;;AAGV,KAAI;AAEH,SAAO,MADS,aAAa,WAAW,CACnB;SACd;AACP,QAAM,IAAI,MAAM,SAAS,OAAO,qBAAqB;;;AAIvD,SAAgB,QAAQ,YAAoB,WAAmB;AAC9D,KAAI;AAGH,MAFsB,iBAAiB,WAAW,CAEhC,YAAY;AAC7B,OAAI,KAAK,SAAS,OAAO,aAAa,WAAW,WAAW,CAAC;AAC7D,SAAM,SAAS,iBAAiB;AAChC,WAAQ,KAAK,EAAE;;AAGhB;UACQ,OAAO;AAGf,MACC,iBAAiB,SACjB,MAAM,YAAY,SAAS,OAAO,sBACjC;AACD,WAAQ,MAAM,MAAM;AACpB,OAAI,MAAM,SAAS,OAAO,eAAe;AAEzC,WAAQ,KAAK,EAAE;;;;AAKlB,eAAsB,WACrB,YACA,WACA,gBACA,UACA,YACA,cACA,YAAoB,WACnB;AACD,KAAI,CAAC,WAAW,QAAQ,WAAW,CAAC,CACnC,WAAU,QAAQ,WAAW,EAAE,EAAE,WAAW,MAAM,CAAC;CAGpD,MAAM,aAAa,SAAS,YAAY,IAAI;AAC5C,WACC,YACA,8BAA8B,eAAe,aAAa,CAAC;kCAC3B,SAAS,KAAK;EAC9C,UAAU,GAAG,WAAW;EACxB,UAAU,UAAU,aAAa;EACjC,UAAU,sBAAsB,SAAS,KAAK;EAE9C;AACD,WAAU,WAAW"} |
| //#region src/lib/utils/urls.d.ts | ||
| declare const LAUNCHPAD_URLS: { | ||
| declare const INSTAGRES_URLS: { | ||
| GET_DATABASE_DATA: (dbId: string) => string; | ||
@@ -9,3 +9,3 @@ CREATE_CLAIMABLE_DATABASE: (dbId: string, referrer?: string) => string; | ||
| //#endregion | ||
| export { LAUNCHPAD_URLS }; | ||
| export { INSTAGRES_URLS }; | ||
| //# sourceMappingURL=urls.d.ts.map |
| //#region src/lib/utils/urls.ts | ||
| const HOST = "https://neon.new"; | ||
| const LAUNCHPAD_URLS = { | ||
| const INSTAGRES_URLS = { | ||
| GET_DATABASE_DATA: (dbId) => `${HOST}/api/v1/database/${dbId}`, | ||
@@ -11,3 +11,3 @@ CREATE_CLAIMABLE_DATABASE: (dbId, referrer) => `${HOST}/db?uuid=${dbId}${referrer ? `&ref=${referrer}` : ""}`, | ||
| //#endregion | ||
| export { LAUNCHPAD_URLS }; | ||
| export { INSTAGRES_URLS }; | ||
| //# sourceMappingURL=urls.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"urls.js","names":[],"sources":["../../../src/lib/utils/urls.ts"],"sourcesContent":["const HOST = \"https://neon.new\";\n\nexport const LAUNCHPAD_URLS = {\n\tGET_DATABASE_DATA: (dbId: string) => `${HOST}/api/v1/database/${dbId}`,\n\tCREATE_CLAIMABLE_DATABASE: (dbId: string, referrer?: string) =>\n\t\t`${HOST}/db?uuid=${dbId}${referrer ? `&ref=${referrer}` : \"\"}`,\n\tCLAIM_DATABASE: (dbId: string) => `${HOST}/database/${dbId}`,\n\tCREATE_DATABASE_POST: (dbId: string, referrer?: string) =>\n\t\t`${HOST}/api/v1/database/${dbId}${\n\t\t\treferrer ? `?referrer=${referrer}` : \"\"\n\t\t}`,\n};\n"],"mappings":";AAAA,MAAM,OAAO;AAEb,MAAa,iBAAiB;CAC7B,oBAAoB,SAAiB,GAAG,KAAK,mBAAmB;CAChE,4BAA4B,MAAc,aACzC,GAAG,KAAK,WAAW,OAAO,WAAW,QAAQ,aAAa;CAC3D,iBAAiB,SAAiB,GAAG,KAAK,YAAY;CACtD,uBAAuB,MAAc,aACpC,GAAG,KAAK,mBAAmB,OAC1B,WAAW,aAAa,aAAa;CAEvC"} | ||
| {"version":3,"file":"urls.js","names":[],"sources":["../../../src/lib/utils/urls.ts"],"sourcesContent":["const HOST = \"https://neon.new\";\n\nexport const INSTAGRES_URLS = {\n\tGET_DATABASE_DATA: (dbId: string) => `${HOST}/api/v1/database/${dbId}`,\n\tCREATE_CLAIMABLE_DATABASE: (dbId: string, referrer?: string) =>\n\t\t`${HOST}/db?uuid=${dbId}${referrer ? `&ref=${referrer}` : \"\"}`,\n\tCLAIM_DATABASE: (dbId: string) => `${HOST}/database/${dbId}`,\n\tCREATE_DATABASE_POST: (dbId: string, referrer?: string) =>\n\t\t`${HOST}/api/v1/database/${dbId}${\n\t\t\treferrer ? `?referrer=${referrer}` : \"\"\n\t\t}`,\n};\n"],"mappings":";AAAA,MAAM,OAAO;AAEb,MAAa,iBAAiB;CAC7B,oBAAoB,SAAiB,GAAG,KAAK,mBAAmB;CAChE,4BAA4B,MAAc,aACzC,GAAG,KAAK,WAAW,OAAO,WAAW,QAAQ,aAAa;CAC3D,iBAAiB,SAAiB,GAAG,KAAK,YAAY;CACtD,uBAAuB,MAAc,aACpC,GAAG,KAAK,mBAAmB,OAC1B,WAAW,aAAa,aAAa;CAEvC"} |
+1
-1
| { | ||
| "name": "get-db", | ||
| "version": "0.9.3", | ||
| "version": "0.9.4", | ||
| "description": "create a claimable Neon database in seconds!", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
71189
-0.07%