From 15e87a8100c9fe66f6d120423ef0351f4c657e7e Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Mon, 24 Jul 2023 13:33:14 +0300 Subject: [PATCH] feat(create-medusa-app): add stable option + add URI encoding to database string (#4567) * feat(create-medusa-app): added stable option * add new function * changed open url * switch condition * fix open url for stable * add URI encoding * modified db error message --- .changeset/brave-years-grow.md | 5 +++++ .../create-medusa-app/src/commands/create.ts | 13 ++++++++++-- packages/create-medusa-app/src/index.ts | 4 ++++ .../create-medusa-app/src/utils/clone-repo.ts | 21 ++++++++++++++----- .../create-medusa-app/src/utils/create-db.ts | 2 +- .../src/utils/format-connection-string.ts | 8 +++++-- 6 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 .changeset/brave-years-grow.md diff --git a/.changeset/brave-years-grow.md b/.changeset/brave-years-grow.md new file mode 100644 index 0000000000..05cb6bc8d5 --- /dev/null +++ b/.changeset/brave-years-grow.md @@ -0,0 +1,5 @@ +--- +"create-medusa-app": patch +--- + +feat(create-medusa-app): add `stable` option + add URI encoding to database string diff --git a/packages/create-medusa-app/src/commands/create.ts b/packages/create-medusa-app/src/commands/create.ts index 917fbdee9c..368e2d1877 100644 --- a/packages/create-medusa-app/src/commands/create.ts +++ b/packages/create-medusa-app/src/commands/create.ts @@ -30,9 +30,15 @@ export type CreateOptions = { seed?: boolean // commander passed --no-boilerplate as boilerplate boilerplate?: boolean + stable?: boolean } -export default async ({ repoUrl = "", seed, boilerplate }: CreateOptions) => { +export default async ({ + repoUrl = "", + seed, + boilerplate, + stable, +}: CreateOptions) => { track("CREATE_CLI") if (repoUrl) { track("STARTER_SELECTED", { starter: repoUrl }) @@ -111,6 +117,7 @@ export default async ({ repoUrl = "", seed, boilerplate }: CreateOptions) => { repoUrl, abortController, spinner, + stable, }) } catch { return @@ -192,7 +199,9 @@ export default async ({ repoUrl = "", seed, boilerplate }: CreateOptions) => { resources: ["http://localhost:9000/health"], }).then(async () => open( - inviteToken + stable + ? "http://localhost:9000/store/products" + : inviteToken ? `http://localhost:7001/invite?token=${inviteToken}&first_run=true` : "http://localhost:7001" ) diff --git a/packages/create-medusa-app/src/index.ts b/packages/create-medusa-app/src/index.ts index 636de27738..15c2a277ab 100644 --- a/packages/create-medusa-app/src/index.ts +++ b/packages/create-medusa-app/src/index.ts @@ -10,6 +10,10 @@ program "--no-boilerplate", "Install a Medusa project without the boilerplate and demo files." ) + .option( + "--stable", + "Install the latest stable version. This removes all onboarding features" + ) .parse() void create(program.opts()) diff --git a/packages/create-medusa-app/src/utils/clone-repo.ts b/packages/create-medusa-app/src/utils/clone-repo.ts index 07e01f27b4..0e62fc7061 100644 --- a/packages/create-medusa-app/src/utils/clone-repo.ts +++ b/packages/create-medusa-app/src/utils/clone-repo.ts @@ -9,19 +9,23 @@ type CloneRepoOptions = { directoryName?: string repoUrl?: string abortController?: AbortController + stable?: boolean } -const DEFAULT_REPO = - "https://github.com/medusajs/medusa-starter-default -b feat/onboarding" +const DEFAULT_REPO = "https://github.com/medusajs/medusa-starter-default" export default async function cloneRepo({ directoryName = "", repoUrl, abortController, + stable = false, }: CloneRepoOptions) { - await promiseExec(`git clone ${repoUrl || DEFAULT_REPO} ${directoryName}`, { - signal: abortController?.signal, - }) + await promiseExec( + `git clone ${repoUrl || getRepoUrl(stable)} ${directoryName}`, + { + signal: abortController?.signal, + } + ) } export async function runCloneRepo({ @@ -29,17 +33,20 @@ export async function runCloneRepo({ repoUrl, abortController, spinner, + stable = false, }: { projectName: string repoUrl: string abortController: AbortController spinner: Ora + stable?: boolean }) { try { await cloneRepo({ directoryName: projectName, repoUrl, abortController, + stable, }) deleteGitDirectory(projectName) @@ -62,3 +69,7 @@ function deleteGitDirectory(projectDirectory: string) { force: true, }) } + +function getRepoUrl(stable?: boolean) { + return !stable ? `${DEFAULT_REPO} -b feat/onboarding` : DEFAULT_REPO +} diff --git a/packages/create-medusa-app/src/utils/create-db.ts b/packages/create-medusa-app/src/utils/create-db.ts index 3e90810ccc..5cc6a60dc2 100644 --- a/packages/create-medusa-app/src/utils/create-db.ts +++ b/packages/create-medusa-app/src/utils/create-db.ts @@ -82,7 +82,7 @@ export async function getDbClientAndCredentials(dbName: string): Promise<{ }) } catch (e) { logMessage({ - message: `Couldn't connect to PostgreSQL. Make sure you have PostgreSQL installed and the credentials you provided are correct.${EOL}${EOL}You can learn how to install PostgreSQL here: https://docs.medusajs.com/development/backend/prepare-environment?os=${getCurrentOs()}#postgresql`, + message: `Couldn't connect to PostgreSQL. Make sure you have PostgreSQL installed and the credentials you provided are correct.${EOL}${EOL}You can learn how to install PostgreSQL here: https://docs.medusajs.com/development/backend/prepare-environment?os=${getCurrentOs()}#postgresql${EOL}${EOL}If you keep running into this issue despite having PostgreSQL installed, please check out our troubleshooting guidelines: https://docs.medusajs.com/troubleshooting/database-error`, type: "error", }) } diff --git a/packages/create-medusa-app/src/utils/format-connection-string.ts b/packages/create-medusa-app/src/utils/format-connection-string.ts index 5ec497c8eb..af59ec39fd 100644 --- a/packages/create-medusa-app/src/utils/format-connection-string.ts +++ b/packages/create-medusa-app/src/utils/format-connection-string.ts @@ -5,14 +5,18 @@ type ConnectionStringOptions = { db: string } +export function encodeDbValue(value: string): string { + return encodeURIComponent(value) +} + export default ({ user, password, host, db }: ConnectionStringOptions) => { let connection = `postgres://` if (user) { - connection += user + connection += encodeDbValue(user) } if (password) { - connection += `:${password}` + connection += `:${encodeDbValue(password)}` } if (user || password) {