From e1f3831b9bc28017f66e482737f04c174808dab5 Mon Sep 17 00:00:00 2001 From: Aleksander Katan <56294622+aleksanderkatan@users.noreply.github.com> Date: Tue, 26 May 2026 18:21:57 +0200 Subject: [PATCH] Update project name query --- packages/typegpu-cli/src/create.ts | 12 ++++++------ packages/typegpu-cli/src/utils/inputs.ts | 21 ++++++++++----------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/packages/typegpu-cli/src/create.ts b/packages/typegpu-cli/src/create.ts index 305ceb4227..832619b698 100644 --- a/packages/typegpu-cli/src/create.ts +++ b/packages/typegpu-cli/src/create.ts @@ -4,7 +4,7 @@ import * as p from '@clack/prompts'; import { pmFromUserAgent, pmInstall } from './utils/pm.ts'; import { cancelExit, confirmStep, rgbText } from './utils/prompts.ts'; import { scaffoldProject, prepareDirectory } from './utils/files.ts'; -import { getPackageName, getProjectDirectory } from './utils/inputs.ts'; +import { getProjectName, isValidPackageName, getPackageName } from './utils/inputs.ts'; import { detect, resolveCommand } from 'package-manager-detector'; const DEFAULT_PROJECT_DIR = 'tgpu-project'; @@ -19,11 +19,11 @@ const PROJECT_TEMPLATES = [ export async function createProject(cwd: string) { p.intro('Creating a new TypeGPU project.'); - const projectDir = await getProjectDirectory(DEFAULT_PROJECT_DIR); + const projectName = await getProjectName(DEFAULT_PROJECT_DIR); // also directory name - const root = await prepareDirectory(cwd, projectDir); + const root = await prepareDirectory(cwd, projectName); - const packageName = await getPackageName(projectDir); + const packageName = isValidPackageName(projectName) ? projectName : await getPackageName(); const projectTemplate = await p.select({ message: 'Select a template:', @@ -33,7 +33,7 @@ export async function createProject(cwd: string) { cancelExit(); } - p.log.step(`Scaffolding project in ${projectDir}...`); + p.log.step(`Scaffolding project in ${projectName}...`); const templateDir = path.resolve( import.meta.dirname, @@ -42,7 +42,7 @@ export async function createProject(cwd: string) { ); await scaffoldProject(templateDir, root, packageName); - p.log.success(`Scaffolded project at ${projectDir}.`); + p.log.success(`Scaffolded project at ${projectName}.`); const detected = await detect({ cwd }); const pm = detected?.agent ?? pmFromUserAgent(process.env.npm_config_user_agent); diff --git a/packages/typegpu-cli/src/utils/inputs.ts b/packages/typegpu-cli/src/utils/inputs.ts index cea14ece6c..722779e347 100644 --- a/packages/typegpu-cli/src/utils/inputs.ts +++ b/packages/typegpu-cli/src/utils/inputs.ts @@ -7,33 +7,32 @@ function isValidProjectDirectory(projectDir: string) { return !/[<>:"\\|?*\s]|\/+$/.test(projectDir.trim()); } -function isValidPackageName(packageName: string) { +export function isValidPackageName(packageName: string) { return /^(?:@[a-z\d][a-z\d\-._]*\/)?[a-z\d][a-z\d\-._]*$/.test(packageName.trim()); } -export async function getProjectDirectory(initialValue: string) { - let projectDir = await p.text({ - message: 'Project directory:', +export async function getProjectName(initialValue: string) { + let projectName = await p.text({ + message: 'Project name:', placeholder: initialValue, initialValue, validate: (value) => { - return value && !isValidProjectDirectory(value) ? 'Invalid project directory.' : undefined; + return value && !isValidProjectDirectory(value) ? 'Invalid project name.' : undefined; }, }); - if (p.isCancel(projectDir)) { + if (p.isCancel(projectName)) { cancelExit(); } - projectDir ??= '.'; - return projectDir.trim(); + projectName ??= '.'; + return projectName.trim(); } -export async function getPackageName(initialValue: string) { +export async function getPackageName() { const packageName = await p.text({ message: 'Package name:', - placeholder: initialValue, - initialValue, + initialValue: '', validate: (value) => { return !value || !isValidPackageName(value) ? 'Invalid package name.' : undefined; },