From de5fa730bf2f45e72edc504d0ba9356dbffae74a Mon Sep 17 00:00:00 2001 From: Thomas Beer <71586988+Tommypop2@users.noreply.github.com> Date: Thu, 23 Jan 2025 20:00:31 +0000 Subject: [PATCH] refactor: move `cancelable` and `spinnerify` into `@solid-cli/utils` feat: add interactive prompt for `route` subcommand --- packages/create/src/index.ts | 2 +- packages/full-solid/src/start/index.ts | 6 ++++++ packages/utils/package.json | 5 +++++ packages/utils/src/ui/cancelable.ts | 14 ++++++++++++++ packages/utils/src/ui/index.ts | 3 +++ .../utils/ui.ts => utils/src/ui/spinnerify.ts} | 18 ++---------------- 6 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 packages/utils/src/ui/cancelable.ts create mode 100644 packages/utils/src/ui/index.ts rename packages/{create/src/utils/ui.ts => utils/src/ui/spinnerify.ts} (66%) diff --git a/packages/create/src/index.ts b/packages/create/src/index.ts index f426c88..3b16d01 100644 --- a/packages/create/src/index.ts +++ b/packages/create/src/index.ts @@ -1,7 +1,7 @@ import { defineCommand } from "citty"; import { createVanilla } from "./create-vanilla"; import * as p from "@clack/prompts"; -import { cancelable, spinnerify } from "./utils/ui"; +import { cancelable, spinnerify } from "@solid-cli/utils/ui"; import { createStart } from "./create-start"; import { getTemplatesList, StartTemplate, VanillaTemplate } from "./utils/constants"; import { detectPackageManager } from "@solid-cli/utils/package-manager"; diff --git a/packages/full-solid/src/start/index.ts b/packages/full-solid/src/start/index.ts index d3be639..b56c1d8 100644 --- a/packages/full-solid/src/start/index.ts +++ b/packages/full-solid/src/start/index.ts @@ -2,6 +2,7 @@ import { createRoute } from "@solid-cli/utils"; import { defineCommand } from "citty"; import * as p from "@clack/prompts"; import { green } from "picocolors"; +import { cancelable } from "@solid-cli/utils/ui" export const startCommands = defineCommand({ meta: { description: "Start-specific commands" }, subCommands: { route: defineCommand({ @@ -13,6 +14,11 @@ export const startCommands = defineCommand({ }, }, async run({ args: { path } }) { + path ||= await cancelable(p.text({ + message: "Route name", validate(value) { + if (value.length === 0) return "A route name is required" + }, + })) await createRoute(path as string); p.log.success(`Route ${green(path as string)} successfully created!`) }, diff --git a/packages/utils/package.json b/packages/utils/package.json index cc62f8f..4d1b4b0 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -55,6 +55,11 @@ "types": "./types/package-manager/index.d.ts", "import": "./dist/package-manager/index.mjs", "require": "./dist/package-manager/index.mjs" + }, + "./ui": { + "types": "./types/ui/index.d.ts", + "import": "./dist/ui/index.mjs", + "require": "./dist/ui/index.mjs" } }, "scripts": { diff --git a/packages/utils/src/ui/cancelable.ts b/packages/utils/src/ui/cancelable.ts new file mode 100644 index 0000000..35f0255 --- /dev/null +++ b/packages/utils/src/ui/cancelable.ts @@ -0,0 +1,14 @@ +import { log } from "@clack/prompts"; +export const cancelable = async ( + prompt: Promise, + cancelMessage: string = "Canceled", +): Promise => { + const value = await prompt; + + if (typeof value === "symbol") { + log.warn(cancelMessage); + process.exit(0); + } + + return value; +}; diff --git a/packages/utils/src/ui/index.ts b/packages/utils/src/ui/index.ts new file mode 100644 index 0000000..be0fed0 --- /dev/null +++ b/packages/utils/src/ui/index.ts @@ -0,0 +1,3 @@ +import { cancelable } from "./cancelable"; +import { spinnerify } from "./spinnerify"; +export { cancelable, spinnerify } \ No newline at end of file diff --git a/packages/create/src/utils/ui.ts b/packages/utils/src/ui/spinnerify.ts similarity index 66% rename from packages/create/src/utils/ui.ts rename to packages/utils/src/ui/spinnerify.ts index baf8b4b..baa53b4 100644 --- a/packages/create/src/utils/ui.ts +++ b/packages/utils/src/ui/spinnerify.ts @@ -1,4 +1,4 @@ -import { log, spinner } from "@clack/prompts"; +import { spinner } from "@clack/prompts"; type SpinnerItem = { startText: string; finishText: string; @@ -16,18 +16,4 @@ export async function spinnerify(spinners: SpinnerItem[] | SpinnerItem( - prompt: Promise, - cancelMessage: string = "Canceled", -): Promise => { - const value = await prompt; - - if (typeof value === "symbol") { - log.warn(cancelMessage); - process.exit(0); - } - - return value; -}; +} \ No newline at end of file