diff --git a/.changeset/rude-clowns-retire.md b/.changeset/rude-clowns-retire.md new file mode 100644 index 0000000000..9f3841136e --- /dev/null +++ b/.changeset/rude-clowns-retire.md @@ -0,0 +1,5 @@ +--- +"shadcn": patch +--- + +validate app name on create diff --git a/packages/shadcn/src/commands/create.ts b/packages/shadcn/src/commands/create.ts index 647097918b..18852f02fa 100644 --- a/packages/shadcn/src/commands/create.ts +++ b/packages/shadcn/src/commands/create.ts @@ -1,4 +1,3 @@ -import { basename, resolve } from "node:path" import path from "path" import { getPreset, getPresets, getRegistryItems } from "@/src/registry/api" import { configWithDefaults } from "@/src/registry/config" @@ -15,8 +14,8 @@ import { Command } from "commander" import dedent from "dedent" import open from "open" import prompts from "prompts" +import validateProjectName from "validate-npm-package-name" -import { validateNpmName } from "../utils/validate-pkg" import { initOptionsSchema, runInit } from "./init" const SHADCN_URL = "https://ui.shadcn.com" @@ -91,11 +90,13 @@ export const create = new Command() initial: opts.template ? `${opts.template}-app` : "my-app", format: (value: string) => value.trim(), validate: (name) => { - const validation = validateNpmName(basename(resolve(name))) - if (validation.valid) { + const validation = validateProjectName( + path.basename(path.resolve(name)) + ) + if (validation.validForNewPackages) { return true } - return "Invalid project name: " + validation.problems[0] + return "Invalid project name. Name should be lowercase, URL-friendly, and not start with a period or underscore." }, }) diff --git a/packages/shadcn/src/utils/validate-pkg.ts b/packages/shadcn/src/utils/validate-pkg.ts deleted file mode 100644 index 1f278f981f..0000000000 --- a/packages/shadcn/src/utils/validate-pkg.ts +++ /dev/null @@ -1,25 +0,0 @@ -import validateProjectName from "validate-npm-package-name" - -type ValidateNpmNameResult = - | { - valid: true - } - | { - valid: false - problems: string[] - } - -export function validateNpmName(name: string): ValidateNpmNameResult { - const nameValidation = validateProjectName(name) - if (nameValidation.validForNewPackages) { - return { valid: true } - } - - return { - valid: false, - problems: [ - ...(nameValidation.errors || []), - ...(nameValidation.warnings || []), - ], - } -}