create-gtkx 1.6.0 → 2.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"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","sourcesContent":["import * as p from \"@clack/prompts\";\nimport { APPLICATION_ID_MAX_LENGTH, isValidApplicationId } from \"@gtkx/config/internal\";\nimport { errorMessage, tryResolveExecutable, upperFirst } from \"@gtkx/utils\";\nimport { execFileSync } from \"node:child_process\";\nimport { mkdirSync, readdirSync, rmSync, type Stats, statSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport { addDependency, detectPackageManager as nypmDetectPackageManager } from \"nypm\";\nimport { x } from \"tinyexec\";\nimport packageManifest from \"../package.json\" with { type: \"json\" };\nimport { writeBuildAllowance } from \"./build-allowance.js\";\nimport { OperationCanceledError, ScaffoldAbortedError } from \"./errors.js\";\nimport { getInstallHint } from \"./install-hints.js\";\nimport { updateManifest } from \"./manifest.js\";\nimport {\n isKnownPackageManager,\n PACKAGE_MANAGER_VALUES,\n PACKAGE_MANAGERS,\n type PackageManager,\n} from \"./package-managers.js\";\nimport { isValidProjectName } from \"./project-name.js\";\nimport { listTemplates, renderFile, type TemplateContext } from \"./templates.js\";\n\ntype CreateOptions = {\n name?: string | undefined;\n applicationId?: string | undefined;\n packageManager?: string | undefined;\n isTypescript?: boolean | undefined;\n shouldIncludeTesting?: boolean | undefined;\n isInteractive?: boolean | undefined;\n shouldOverwrite?: boolean | undefined;\n};\n\ntype ResolvedOptions = {\n target: string;\n root: string;\n isCurrentDirectory: boolean;\n name: string;\n applicationId: string;\n packageManager: PackageManager;\n isTypescript: boolean;\n shouldIncludeTesting: boolean;\n shouldEmptyTarget: boolean;\n};\n\ntype InstallDependenciesOptions = {\n cwd: string;\n packageManager: PackageManager;\n dependencies: string[];\n isDev: boolean;\n};\n\ntype InstallAllOptions = {\n resolved: ResolvedOptions;\n devDependencies: string[];\n};\n\ntype InstallFailureOptions = {\n error: unknown;\n resolved: ResolvedOptions;\n devDependencies: string[];\n};\n\ntype SpinnerStep = {\n pending: string;\n done: string;\n failed: string;\n run: () => Promise<void>;\n explain?: ((error: unknown) => void) | undefined;\n};\n\nconst selfVersion = packageManifest.version;\nconst ICON_TEMPLATE_NAME = \"icon.svg\";\n\nconst GTKX_ENV_MODULE_HEADER = `/**\n * Generated by \\`gtkx codegen\\`, \\`gtkx dev\\`, and \\`gtkx build\\`; do not edit.\n */`;\n\nconst DEPENDENCIES = [\"@gtkx/cairo\", \"@gtkx/css\", \"@gtkx/runtime\", \"@gtkx/react\", \"react\"];\nconst DEV_DEPENDENCIES = [\"@gtkx/cli\", \"@gtkx/config\", \"@gtkx/mcp\", \"vite\"];\nconst TYPESCRIPT_DEV_DEPENDENCIES = [\"@types/node\", \"@types/react\", \"typescript\"];\nconst TESTING_DEV_DEPENDENCIES = [\"@gtkx/testing\", \"vitest\"];\n\nconst DEV_COMMAND: Record<PackageManager, string> = Object.fromEntries(\n PACKAGE_MANAGERS.map((manager) => [manager.value, manager.devCommand]),\n) as Record<PackageManager, string>;\n\nconst ADD_COMMAND: Record<PackageManager, string> = Object.fromEntries(\n PACKAGE_MANAGERS.map((manager) => [manager.value, manager.addCommand]),\n) as Record<PackageManager, string>;\n\nconst INHERITED_SCRIPT_POLICY_VARS = [\"npm_config_allow_scripts\", \"npm_config_allow-scripts\"];\nconst TESTING_TEMPLATES = new Set([\"vitest.config.ts\", \"tests/app.test.tsx\"]);\nconst TYPESCRIPT_TEMPLATES = new Set([\"tsconfig.json\", \"src/gtkx-env.d.ts\"]);\n\nconst HEADLESS_COMPOSITOR_NOTE = `\n\nTo run tests, you need a headless Wayland compositor installed:\n Fedora: sudo dnf install sway\n Ubuntu: sudo apt install sway`;\n\nconst RECOVERY_HEADING = \"Finish the setup by adding the dependencies again, which is safe to repeat:\";\nconst APPLICATION_ID_FORMAT_ERROR = \"Application ID must be reverse domain notation (e.g., com.example.myapp)\";\nconst APPLICATION_ID_PREFIX = \"com.\";\nconst APPLICATION_ID_SUFFIX = \".app\";\n\nconst APPLICATION_ID_SEGMENT_LIMIT = APPLICATION_ID_MAX_LENGTH - APPLICATION_ID_PREFIX.length -\n APPLICATION_ID_SUFFIX.length;\n\nconst pinGtkxDependency = (name: string, version: string): string =>\n name.startsWith(\"@gtkx/\") ? `${name}@^${version}` : name;\n\nconst getDevCommand = (packageManager: PackageManager): string => DEV_COMMAND[packageManager];\nconst getAddCommand = (packageManager: PackageManager): string => ADD_COMMAND[packageManager];\nconst titleFromName = (name: string): string => name.split(\"-\").map((part) => upperFirst(part)).join(\" \");\n\nconst gitConfigValue = (key: string): string | null => {\n const git = tryResolveExecutable(\"git\");\n\n if (git === undefined) {\n return null;\n }\n\n try {\n return execFileSync(git, [\"config\", \"--get\", key], { encoding: \"utf8\" }).trim() || null;\n } catch {\n return null;\n }\n};\n\nconst applicationIdSegment = (name: string): string => {\n const compact = name.replaceAll(\"-\", \"\");\n const segment = /^[A-Za-z_]/.test(compact) ? compact : `_${compact}`;\n\n return segment.slice(0, APPLICATION_ID_SEGMENT_LIMIT);\n};\n\nconst suggestApplicationId = (name: string): string =>\n `${APPLICATION_ID_PREFIX}${applicationIdSegment(name)}${APPLICATION_ID_SUFFIX}`;\n\nconst stripTrailingSlashes = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value[end - 1] === \"/\") {\n end--;\n }\n\n return value.slice(0, end);\n};\n\nconst formatTargetDir = (target: string): string => stripTrailingSlashes(target.trim().replaceAll(/[<>:\"\\\\|?*]/g, \"\"));\nconst deriveProjectName = (target: string): string => basename(resolve(process.cwd(), target));\n\nconst isDirEmpty = (dir: string): boolean => {\n const entries = readdirSync(dir);\n\n return entries.length === 0 || (entries.length === 1 && entries[0] === \".git\");\n};\n\nconst getDevDependencies = ({\n isTypescript,\n shouldIncludeTesting,\n}: Pick<ResolvedOptions, \"isTypescript\" | \"shouldIncludeTesting\">): string[] => {\n const devDeps = [...DEV_DEPENDENCIES];\n\n if (isTypescript) {\n devDeps.push(...TYPESCRIPT_DEV_DEPENDENCIES);\n }\n\n if (shouldIncludeTesting) {\n devDeps.push(...TESTING_DEV_DEPENDENCIES);\n }\n\n return devDeps;\n};\n\nconst guardCancellation = <T>(value: T | symbol): T => {\n if (p.isCancel(value)) {\n p.cancel(\"Operation canceled\");\n throw new OperationCanceledError();\n }\n\n return value;\n};\n\nconst validateProjectName = (value: string | undefined): string | undefined => {\n if (!value) {\n return \"Project name is required\";\n }\n\n if (!isValidProjectName(value)) {\n return \"Project name must be lowercase letters, numbers, and hyphens only\";\n }\n\n return undefined;\n};\n\nconst validateApplicationIdFormat = (value: string): string | undefined =>\n isValidApplicationId(value) ? undefined : APPLICATION_ID_FORMAT_ERROR;\n\nconst validateApplicationIdInput = (value: string | undefined): string | undefined =>\n value ? validateApplicationIdFormat(value) : \"Application ID is required\";\n\nconst validateApplicationIdAnswer = (value: string | undefined): string | undefined =>\n value ? validateApplicationIdFormat(value) : undefined;\n\nconst fail = (message: string): never => {\n p.log.error(message);\n throw new ScaffoldAbortedError(message);\n};\n\nconst requestedPackageManager = (value: string | undefined): PackageManager | undefined => {\n if (value === undefined) {\n return undefined;\n }\n\n if (!isKnownPackageManager(value)) {\n return fail(`Unknown package manager \"${value}\". Expected one of: ${PACKAGE_MANAGER_VALUES.join(\", \")}`);\n }\n\n return value;\n};\n\nconst targetStats = (root: string): Stats | undefined => {\n try {\n return statSync(root, { throwIfNoEntry: false });\n } catch {\n return undefined;\n }\n};\n\nconst validateTargetDir = (target: string): string | undefined => {\n if (!target) {\n return \"Project directory is required\";\n }\n\n return validateProjectName(deriveProjectName(target));\n};\n\nconst validateTargetAnswer = (value: string | undefined): string | undefined =>\n validateTargetDir(formatTargetDir(value ?? \"\"));\n\nconst promptTarget = async (): Promise<string> =>\n formatTargetDir(\n guardCancellation(\n await p.text({\n message: \"Project directory\",\n placeholder: \"my-app\",\n validate: validateTargetAnswer,\n }),\n ),\n );\n\nconst promptApplicationId = async (name: string): Promise<string> => {\n const defaultApplicationId = suggestApplicationId(name);\n\n return guardCancellation(\n await p.text({\n message: \"Application ID\",\n placeholder: defaultApplicationId,\n defaultValue: defaultApplicationId,\n validate: validateApplicationIdAnswer,\n }),\n );\n};\n\nconst detectPackageManager = async (cwd: string): Promise<PackageManager | undefined> => {\n const detected = await nypmDetectPackageManager(cwd, { includeParentDirs: true });\n\n if (!detected) {\n return undefined;\n }\n\n return isKnownPackageManager(detected.name) ? detected.name : undefined;\n};\n\nconst packageManagerHint = (\n manager: (typeof PACKAGE_MANAGERS)[number],\n detected: PackageManager | undefined,\n): string | undefined => {\n if (detected === manager.value) {\n return \"detected\";\n }\n\n if (manager.isRecommended) {\n return \"recommended\";\n }\n\n return undefined;\n};\n\nconst packageManagerOption = (manager: (typeof PACKAGE_MANAGERS)[number], detected: PackageManager | undefined) => {\n const hint = packageManagerHint(manager, detected);\n\n return { value: manager.value, label: manager.label, ...(hint !== undefined && { hint }) };\n};\n\nconst detectedPackageManager = async (): Promise<PackageManager | undefined> => {\n try {\n return await detectPackageManager(process.cwd());\n } catch {\n return undefined;\n }\n};\n\nconst promptPackageManager = async (): Promise<PackageManager> => {\n const detected = await detectedPackageManager();\n const initial: PackageManager = detected ?? \"pnpm\";\n\n return guardCancellation(\n await p.select<PackageManager>({\n message: \"Package manager\",\n options: PACKAGE_MANAGERS.map((manager) => packageManagerOption(manager, detected)),\n initialValue: initial,\n }),\n );\n};\n\nconst shouldUseTypeScript = async (): Promise<boolean> =>\n guardCancellation(\n await p.confirm({\n message: \"Use TypeScript?\",\n initialValue: true,\n }),\n );\n\nconst shouldSetUpTesting = async (): Promise<boolean> =>\n guardCancellation(\n await p.confirm({\n message: \"Include testing setup (Vitest)?\",\n initialValue: true,\n }),\n );\n\nconst emptyDir = (root: string): void => {\n for (const entry of readdirSync(root)) {\n if (entry === \".git\") {\n continue;\n }\n\n rmSync(join(root, entry), { recursive: true, force: true });\n }\n};\n\nconst prepareTargetDirectory = (root: string, shouldEmptyTarget: boolean): void => {\n mkdirSync(root, { recursive: true });\n\n if (shouldEmptyTarget) {\n emptyDir(root);\n }\n};\n\nconst shouldOverwriteDirectory = async (target: string, options: CreateOptions): Promise<boolean> => {\n if (!options.isInteractive) {\n return options.shouldOverwrite === true;\n }\n\n return guardCancellation(\n await p.confirm({\n message: `Directory \"${target}\" is not empty. Overwrite its contents?`,\n initialValue: false,\n }),\n );\n};\n\nconst shouldEmptyTargetDirectory = async (root: string, target: string, options: CreateOptions): Promise<boolean> => {\n const stats = targetStats(root);\n\n if (stats === undefined) {\n return false;\n }\n\n if (!stats.isDirectory()) {\n return fail(`Target \"${target}\" is not a directory`);\n }\n\n if (isDirEmpty(root)) {\n return false;\n }\n\n if (await shouldOverwriteDirectory(target, options)) {\n return true;\n }\n\n return fail(`Directory \"${target}\" is not empty`);\n};\n\nconst resolveTarget = async (options: CreateOptions): Promise<string> => {\n if (options.name === undefined && options.isInteractive) {\n return promptTarget();\n }\n\n const target = formatTargetDir(options.name ?? \"\");\n const error = validateTargetDir(target);\n\n return error === undefined ? target : fail(error);\n};\n\nconst resolveApplicationId = async (options: CreateOptions, name: string): Promise<string> => {\n const applicationId = options.applicationId ??\n (options.isInteractive ? await promptApplicationId(name) : suggestApplicationId(name));\n\n const error = validateApplicationIdInput(applicationId);\n\n return error === undefined ? applicationId : fail(error);\n};\n\nconst resolvePackageManager = async (\n requested: PackageManager | undefined,\n options: CreateOptions,\n): Promise<PackageManager> => {\n if (requested !== undefined) {\n return requested;\n }\n\n if (options.isInteractive) {\n return promptPackageManager();\n }\n\n return (await detectedPackageManager()) ?? \"pnpm\";\n};\n\nconst isTypescriptSelected = async (options: CreateOptions): Promise<boolean> => {\n if (options.isTypescript !== undefined) {\n return options.isTypescript;\n }\n\n return options.isInteractive ? shouldUseTypeScript() : true;\n};\n\nconst isTestingIncluded = async (options: CreateOptions): Promise<boolean> => {\n if (options.shouldIncludeTesting !== undefined) {\n return options.shouldIncludeTesting;\n }\n\n return options.isInteractive ? shouldSetUpTesting() : true;\n};\n\nconst resolveOptions = async (options: CreateOptions): Promise<ResolvedOptions> => {\n const requested = requestedPackageManager(options.packageManager);\n const target = await resolveTarget(options);\n const name = deriveProjectName(target);\n const applicationId = await resolveApplicationId(options, name);\n const root = resolve(process.cwd(), target);\n const isCurrentDirectory = root === process.cwd();\n const shouldEmptyTarget = await shouldEmptyTargetDirectory(root, target, options);\n const packageManager = await resolvePackageManager(requested, options);\n const isTypescript = await isTypescriptSelected(options);\n const shouldIncludeTesting = await isTestingIncluded(options);\n\n return {\n target,\n root,\n isCurrentDirectory,\n name,\n applicationId,\n packageManager,\n isTypescript,\n shouldIncludeTesting,\n shouldEmptyTarget,\n };\n};\n\nconst isTemplateIncluded = (templateRelativePath: string, resolved: ResolvedOptions): boolean => {\n if (TESTING_TEMPLATES.has(templateRelativePath)) {\n return resolved.shouldIncludeTesting;\n }\n\n if (TYPESCRIPT_TEMPLATES.has(templateRelativePath)) {\n return resolved.isTypescript;\n }\n\n return true;\n};\n\nconst toScriptExtension = (templateRelativePath: string, isTypescript: boolean): string =>\n isTypescript ? templateRelativePath : templateRelativePath.replace(/\\.tsx$/, \".jsx\").replace(/\\.ts$/, \".js\");\n\nconst toIconPath = (path: string, applicationId: string): string =>\n path.endsWith(ICON_TEMPLATE_NAME) ? `${path.slice(0, -ICON_TEMPLATE_NAME.length)}${applicationId}.svg` : path;\n\nconst toDestinationPath = (templateRelativePath: string, isTypescript: boolean, applicationId: string): string =>\n toIconPath(toScriptExtension(templateRelativePath, isTypescript), applicationId);\n\nconst addTestScript = (root: string): void => {\n updateManifest(root, (manifest) => {\n (manifest.scripts as Record<string, string>).test = \"vitest run\";\n });\n};\n\nconst templateContext = (resolved: ResolvedOptions): TemplateContext => ({\n name: resolved.name,\n applicationId: resolved.applicationId,\n title: titleFromName(resolved.name),\n shouldIncludeTesting: resolved.shouldIncludeTesting,\n isTypescript: resolved.isTypescript,\n importExtension: resolved.isTypescript ? \".js\" : \".jsx\",\n developerName: gitConfigValue(\"user.name\") ?? titleFromName(resolved.name),\n developerEmail: gitConfigValue(\"user.email\"),\n});\n\nconst scaffoldProject = async (root: string, resolved: ResolvedOptions): Promise<void> => {\n const { applicationId, isTypescript, shouldIncludeTesting } = resolved;\n const context = templateContext(resolved);\n\n for (const template of listTemplates()) {\n if (!isTemplateIncluded(template, resolved)) {\n continue;\n }\n\n const destination = join(root, toDestinationPath(template, isTypescript, applicationId));\n mkdirSync(dirname(destination), { recursive: true });\n writeFileSync(destination, await renderFile(template, context));\n }\n\n if (shouldIncludeTesting) {\n addTestScript(root);\n }\n};\n\nconst withoutInheritedScriptPolicy = async (run: () => Promise<void>): Promise<void> => {\n const saved = INHERITED_SCRIPT_POLICY_VARS.map((key) => [key, process.env[key]] as const);\n\n for (const [key] of saved) {\n Reflect.deleteProperty(process.env, key);\n }\n\n try {\n await run();\n } finally {\n for (const [key, value] of saved) {\n if (value !== undefined) {\n process.env[key] = value;\n }\n }\n }\n};\n\nconst installDependencies = async (options: InstallDependenciesOptions): Promise<void> => {\n const { cwd, packageManager, dependencies, isDev } = options;\n\n await withoutInheritedScriptPolicy(async () => {\n await addDependency(dependencies, { cwd, packageManager, dev: isDev, silent: true });\n });\n};\n\nconst pin = (names: string[]): string[] => names.map((dependency) => pinGtkxDependency(dependency, selfVersion));\n\nconst formatRecovery = ({ resolved, devDependencies }: InstallFailureOptions): string => {\n const add = getAddCommand(resolved.packageManager);\n\n const steps = [\n ...(resolved.isCurrentDirectory ? [] : [`cd ${resolved.target}`]),\n `${add} ${pin(DEPENDENCIES).join(\" \")}`,\n `${add} -D ${pin(devDependencies).join(\" \")}`,\n ];\n\n const indented = steps.map((step) => ` ${step}`).join(\"\\n\");\n\n return `${RECOVERY_HEADING}\\n${indented}`;\n};\n\nconst explainInstallFailure = (options: InstallFailureOptions): void => {\n const hint = getInstallHint(errorMessage(options.error));\n\n if (hint !== undefined) {\n p.log.warn(hint);\n }\n\n p.log.info(formatRecovery(options));\n};\n\nconst runWithSpinner = async (step: SpinnerStep): Promise<void> => {\n const spinner = p.spinner();\n spinner.start(step.pending);\n\n try {\n await step.run();\n spinner.stop(step.done);\n } catch (error) {\n spinner.error(step.failed);\n p.log.error(errorMessage(error));\n step.explain?.(error);\n throw new ScaffoldAbortedError(step.failed);\n }\n};\n\nconst installAllDependencies = async (options: InstallAllOptions): Promise<void> => {\n const { resolved, devDependencies } = options;\n const { root, packageManager } = resolved;\n\n await runWithSpinner({\n pending: \"Installing dependencies...\",\n done: \"Dependencies installed\",\n failed: \"Failed to install dependencies\",\n run: async () => {\n await installDependencies({ cwd: root, packageManager, dependencies: pin(DEPENDENCIES), isDev: false });\n await installDependencies({ cwd: root, packageManager, dependencies: pin(devDependencies), isDev: true });\n },\n explain: (error) => {\n explainInstallFailure({ error, resolved, devDependencies });\n },\n });\n};\n\nconst writeInitialEnvModule = (root: string): void => {\n const storeDir = join(root, \"node_modules\", \".gtkx\");\n mkdirSync(storeDir, { recursive: true });\n writeFileSync(join(storeDir, \"env.d.ts\"), `${GTKX_ENV_MODULE_HEADER}\\n`);\n};\n\nconst initializeGitRepo = async (root: string): Promise<void> => {\n const spinner = p.spinner();\n spinner.start(\"Initializing git repository...\");\n\n try {\n const opts = { nodeOptions: { cwd: root }, throwOnError: true } as const;\n await x(\"git\", [\"init\"], opts);\n await x(\"git\", [\"add\", \"-A\"], opts);\n await x(\"git\", [\"commit\", \"-m\", \"Initial commit\"], opts);\n spinner.stop(\"Git repository initialized\");\n } catch {\n spinner.error(\"Failed to initialize git repository\");\n }\n};\n\nconst printNextSteps = (resolved: ResolvedOptions): void => {\n const devCmd = getDevCommand(resolved.packageManager);\n const cdStep = resolved.isCurrentDirectory ? \"\" : `cd ${resolved.target}\\n`;\n const testingNote = resolved.shouldIncludeTesting ? HEADLESS_COMPOSITOR_NOTE : \"\";\n p.note(`${cdStep}${devCmd}${testingNote}`, \"Next steps\");\n};\n\nconst createProjectStructure = async (root: string, resolved: ResolvedOptions): Promise<void> => {\n await runWithSpinner({\n pending: \"Creating project structure...\",\n done: \"Project structure created\",\n failed: \"Failed to create the project structure\",\n run: async () => {\n prepareTargetDirectory(root, resolved.shouldEmptyTarget);\n await scaffoldProject(root, resolved);\n writeBuildAllowance(root, resolved.packageManager);\n },\n });\n};\n\nconst scaffold = async (options: CreateOptions = {}): Promise<void> => {\n p.intro(\"Create GTKX App\");\n const resolved = await resolveOptions(options);\n const { root } = resolved;\n const devDeps = getDevDependencies(resolved);\n await createProjectStructure(root, resolved);\n await installAllDependencies({ resolved, devDependencies: devDeps });\n\n if (resolved.isTypescript) {\n writeInitialEnvModule(root);\n }\n\n await initializeGitRepo(root);\n printNextSteps(resolved);\n};\n\nexport { scaffold };\n"]}
1
+ {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"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","sourcesContent":["import * as p from \"@clack/prompts\";\nimport { APPLICATION_ID_MAX_LENGTH, isValidApplicationId } from \"@gtkx/config/internal\";\nimport { errorMessage, tryResolveExecutable, upperFirst } from \"@gtkx/utils\";\nimport { execFileSync } from \"node:child_process\";\nimport { lstatSync, mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport { addDependency, detectPackageManager as nypmDetectPackageManager } from \"nypm\";\nimport { x } from \"tinyexec\";\nimport packageManifest from \"../package.json\" with { type: \"json\" };\nimport { writeBuildAllowance } from \"./build-allowance.js\";\nimport { OperationCanceledError, ScaffoldAbortedError } from \"./errors.js\";\nimport { getInstallHint } from \"./install-hints.js\";\nimport { updateManifest } from \"./manifest.js\";\nimport {\n isKnownPackageManager,\n PACKAGE_MANAGER_VALUES,\n PACKAGE_MANAGERS,\n type PackageManager,\n} from \"./package-managers.js\";\nimport { isValidProjectName } from \"./project-name.js\";\nimport { listTemplates, renderFile, type TemplateContext } from \"./templates.js\";\n\ntype CreateOptions = {\n name?: string | undefined;\n applicationId?: string | undefined;\n displayName?: string | undefined;\n packageManager?: string | undefined;\n isTypescript?: boolean | undefined;\n shouldIncludeTesting?: boolean | undefined;\n isInteractive?: boolean | undefined;\n shouldOverwrite?: boolean | undefined;\n shouldInstallDependencies?: boolean | undefined;\n};\n\ntype ResolvedOptions = {\n target: string;\n root: string;\n isCurrentDirectory: boolean;\n name: string;\n displayName: string;\n applicationId: string;\n packageManager: PackageManager;\n isTypescript: boolean;\n shouldIncludeTesting: boolean;\n shouldInitializeGit: boolean;\n shouldInstallDependencies: boolean;\n};\n\ntype ScaffoldFile = { destination: string; contents: string };\n\ntype ScaffoldChanges = string[];\n\ntype ScaffoldPlan = {\n files: ScaffoldFile[];\n replaceDestinations: string[];\n changes: ScaffoldChanges;\n};\n\ntype ScaffoldChange = {\n destination: string;\n relativePath: string;\n};\n\ntype InstallDependenciesOptions = {\n cwd: string;\n packageManager: PackageManager;\n dependencies: string[];\n isDev: boolean;\n};\n\ntype InstallAllOptions = {\n resolved: ResolvedOptions;\n devDependencies: string[];\n};\n\ntype InstallFailureOptions = {\n error: unknown;\n resolved: ResolvedOptions;\n devDependencies: string[];\n};\n\ntype SpinnerStep = {\n pending: string;\n done: string;\n failed: string;\n run: () => Promise<void> | void;\n explain?: ((error: unknown) => void) | undefined;\n};\n\nconst selfVersion = packageManifest.version;\nconst ICON_TEMPLATE_NAME = \"icon.svg\";\nconst TYPESCRIPT_VERSION = \"^6.0.3\";\n\nconst GTKX_ENV_MODULE_HEADER = `/**\n * Generated by \\`gtkx codegen\\`, \\`gtkx dev\\`, and \\`gtkx build\\`; do not edit.\n */`;\n\nconst DEPENDENCIES = [\"@gtkx/cairo\", \"@gtkx/css\", \"@gtkx/runtime\", \"@gtkx/react\", \"react\"];\nconst DEV_DEPENDENCIES = [\"@gtkx/cli\", \"@gtkx/config\", \"@gtkx/mcp\", \"vite\"];\nconst TYPESCRIPT_DEV_DEPENDENCIES = [\"@types/node\", \"@types/react\", \"typescript\"];\nconst TESTING_DEV_DEPENDENCIES = [\"@gtkx/testing\", \"vitest\"];\n\nconst DEV_COMMAND: Record<PackageManager, string> = Object.fromEntries(\n PACKAGE_MANAGERS.map((manager) => [manager.value, manager.devCommand]),\n) as Record<PackageManager, string>;\n\nconst ADD_COMMAND: Record<PackageManager, string> = Object.fromEntries(\n PACKAGE_MANAGERS.map((manager) => [manager.value, manager.addCommand]),\n) as Record<PackageManager, string>;\n\nconst INSTALL_COMMAND: Record<PackageManager, string> = Object.fromEntries(\n PACKAGE_MANAGERS.map((manager) => [manager.value, manager.installCommand]),\n) as Record<PackageManager, string>;\n\nconst INHERITED_SCRIPT_POLICY_VARS = [\"npm_config_allow_scripts\", \"npm_config_allow-scripts\"];\nconst TESTING_TEMPLATES = new Set([\"vitest.config.ts\", \"tests/app.test.tsx\"]);\nconst TYPESCRIPT_TEMPLATES = new Set([\"tsconfig.json\", \"src/gtkx-env.d.ts\"]);\n\nconst HEADLESS_COMPOSITOR_NOTE = `\n\nTo run tests, you need a headless Wayland compositor installed:\n Fedora: sudo dnf install sway\n Ubuntu: sudo apt install sway`;\n\nconst RECOVERY_HEADING = \"Finish the setup by adding the dependencies again, which is safe to repeat:\";\nconst APPLICATION_ID_FORMAT_ERROR = \"Application ID must be reverse domain notation (e.g., com.example.myapp)\";\nconst APPLICATION_ID_PREFIX = \"com.\";\nconst APPLICATION_ID_SUFFIX = \".app\";\n\nconst APPLICATION_ID_SEGMENT_LIMIT = APPLICATION_ID_MAX_LENGTH - APPLICATION_ID_PREFIX.length -\n APPLICATION_ID_SUFFIX.length;\n\nconst displayNameFromProjectName = (name: string): string =>\n name.split(\"-\").map((part) => upperFirst(part)).join(\" \");\n\nconst gitConfigValue = (key: string): string | null => {\n const git = tryResolveExecutable(\"git\");\n\n if (git === undefined) {\n return null;\n }\n\n try {\n return execFileSync(git, [\"config\", \"--get\", key], { encoding: \"utf8\" }).trim() || null;\n } catch {\n return null;\n }\n};\n\nconst applicationIdSegment = (name: string): string => {\n const compact = name.replaceAll(\"-\", \"\");\n const segment = /^[A-Za-z_]/.test(compact) ? compact : `_${compact}`;\n\n return segment.slice(0, APPLICATION_ID_SEGMENT_LIMIT);\n};\n\nconst suggestApplicationId = (name: string): string =>\n `${APPLICATION_ID_PREFIX}${applicationIdSegment(name)}${APPLICATION_ID_SUFFIX}`;\n\nconst stripTrailingSlashes = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value[end - 1] === \"/\") {\n end--;\n }\n\n return value.slice(0, end);\n};\n\nconst formatTargetDir = (target: string): string =>\n stripTrailingSlashes(target.trim().replaceAll(/[<>:\"\\\\|?*]/g, \"\"));\n\nconst deriveProjectName = (target: string): string => basename(resolve(process.cwd(), target));\n\nconst isDirEmpty = (dir: string): boolean => {\n const entries = readdirSync(dir);\n\n return entries.length === 0 || (entries.length === 1 && entries[0] === \".git\");\n};\n\nconst shouldInitializeGit = (root: string): boolean => {\n const entry = lstatSync(root, { throwIfNoEntry: false });\n\n return entry === undefined || (entry.isDirectory() && readdirSync(root).length === 0);\n};\n\nconst getDevDependencies = ({\n isTypescript,\n shouldIncludeTesting,\n}: Pick<ResolvedOptions, \"isTypescript\" | \"shouldIncludeTesting\">): string[] => {\n const devDeps = [...DEV_DEPENDENCIES];\n\n if (isTypescript) {\n devDeps.push(...TYPESCRIPT_DEV_DEPENDENCIES);\n }\n\n if (shouldIncludeTesting) {\n devDeps.push(...TESTING_DEV_DEPENDENCIES);\n }\n\n return devDeps;\n};\n\nconst isCancellation = (value: unknown): value is symbol => p.isCancel(value);\n\nconst guardCancellation = <T>(value: T | symbol): T => {\n if (isCancellation(value)) {\n p.cancel(\"Operation canceled\");\n throw new OperationCanceledError();\n }\n\n return value;\n};\n\nconst validateProjectName = (value: string | undefined): string | undefined => {\n if (!value) {\n return \"Project name is required\";\n }\n\n if (!isValidProjectName(value)) {\n return \"Project name must be lowercase letters, numbers, and hyphens only\";\n }\n\n return undefined;\n};\n\nconst validateApplicationIdFormat = (value: string): string | undefined =>\n isValidApplicationId(value) ? undefined : APPLICATION_ID_FORMAT_ERROR;\n\nconst validateApplicationIdInput = (value: string | undefined): string | undefined =>\n value ? validateApplicationIdFormat(value) : \"Application ID is required\";\n\nconst validateApplicationIdAnswer = (value: string | undefined): string | undefined =>\n value ? validateApplicationIdFormat(value) : undefined;\n\nconst validateDisplayName = (value: string | undefined): string | undefined => {\n if (value === undefined || value.trim().length === 0) {\n return \"Display name is required\";\n }\n\n return value.includes(\"\\n\") || value.includes(\"\\r\") ? \"Display name must be a single line\" : undefined;\n};\n\nconst validateDisplayNameAnswer = (value: string | undefined): string | undefined =>\n value ? validateDisplayName(value) : undefined;\n\nconst fail = (message: string): never => {\n p.log.error(message);\n throw new ScaffoldAbortedError(message);\n};\n\nconst requestedPackageManager = (value: string | undefined): PackageManager | undefined => {\n if (value === undefined) {\n return undefined;\n }\n\n if (!isKnownPackageManager(value)) {\n return fail(`Unknown package manager \"${value}\". Expected one of: ${PACKAGE_MANAGER_VALUES.join(\", \")}`);\n }\n\n return value;\n};\n\nconst validateTargetDir = (target: string): string | undefined => {\n if (!target) {\n return \"Project directory is required\";\n }\n\n return validateProjectName(deriveProjectName(target));\n};\n\nconst validateTargetAnswer = (value: string | undefined): string | undefined =>\n validateTargetDir(formatTargetDir(value ?? \"\"));\n\nconst promptTarget = async (): Promise<string> =>\n formatTargetDir(\n guardCancellation(\n await p.text({\n message: \"Project directory\",\n placeholder: \"my-app\",\n validate: validateTargetAnswer,\n }),\n ),\n );\n\nconst promptApplicationId = async (name: string): Promise<string> => {\n const defaultApplicationId = suggestApplicationId(name);\n\n return guardCancellation(\n await p.text({\n message: \"Application ID\",\n placeholder: defaultApplicationId,\n defaultValue: defaultApplicationId,\n validate: validateApplicationIdAnswer,\n }),\n );\n};\n\nconst promptDisplayName = async (name: string): Promise<string> => {\n const defaultDisplayName = displayNameFromProjectName(name);\n\n return guardCancellation(\n await p.text({\n message: \"Display name\",\n placeholder: defaultDisplayName,\n defaultValue: defaultDisplayName,\n validate: validateDisplayNameAnswer,\n }),\n );\n};\n\nconst packageManagerOption = (manager: (typeof PACKAGE_MANAGERS)[number], detected: PackageManager | undefined) => {\n let hint: string | undefined;\n\n if (detected === manager.value) {\n hint = \"detected\";\n } else if (manager.isRecommended) {\n hint = \"recommended\";\n }\n\n return { value: manager.value, label: manager.label, ...(hint !== undefined && { hint }) };\n};\n\nconst detectedPackageManager = async (): Promise<PackageManager | undefined> => {\n try {\n const detected = await nypmDetectPackageManager(process.cwd(), { includeParentDirs: true });\n\n return detected && isKnownPackageManager(detected.name) ? detected.name : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst promptPackageManager = async (): Promise<PackageManager> => {\n const detected = await detectedPackageManager();\n const initial: PackageManager = detected ?? \"pnpm\";\n\n return guardCancellation(\n await p.select<PackageManager>({\n message: \"Package manager\",\n options: PACKAGE_MANAGERS.map((manager) => packageManagerOption(manager, detected)),\n initialValue: initial,\n }),\n );\n};\n\nconst isOptionEnabled = async (\n value: boolean | undefined,\n isInteractive: boolean | undefined,\n message: string,\n): Promise<boolean> =>\n value ??\n (isInteractive\n ? guardCancellation(await p.confirm({ message, initialValue: true }))\n : true);\n\nconst formatFileList = (heading: string, files: string[]): string => {\n const indentedFiles = files.map((file) => ` ${file}`).join(\"\\n\");\n\n return `${heading}:\\n${indentedFiles}`;\n};\n\nconst reportPlannedChanges = (changes: ScaffoldChanges): void => {\n if (changes.length > 0) {\n p.log.info(formatFileList(\"Scaffold files to replace\", changes));\n }\n};\n\nconst reportCompletedChanges = (changes: ScaffoldChanges): void => {\n if (changes.length > 0) {\n p.log.success(formatFileList(\"Replaced scaffold files\", changes));\n }\n};\n\nconst confirmOverwrite = async (target: string, changes: ScaffoldChanges): Promise<void> => {\n reportPlannedChanges(changes);\n\n const shouldReplace = guardCancellation(\n await p.confirm({\n message: `Directory \"${target}\" is not empty. Replace scaffold files?`,\n initialValue: false,\n }),\n );\n\n if (!shouldReplace) {\n fail(`Directory \"${target}\" is not empty`);\n }\n};\n\nconst refuseNonEmptyDirectory = (target: string, changes: ScaffoldChanges): never => {\n const heading = `Directory \"${target}\" is not empty. Pass --overwrite to`;\n\n return fail(\n changes.length === 0\n ? `${heading} scaffold into it`\n : formatFileList(`${heading} replace these scaffold files`, changes),\n );\n};\n\nconst acceptNonEmptyDirectory = async (\n target: string,\n options: CreateOptions,\n changes: ScaffoldChanges,\n): Promise<void> => {\n if (options.isInteractive) {\n await confirmOverwrite(target, changes);\n\n return;\n }\n\n if (options.shouldOverwrite === true) {\n reportPlannedChanges(changes);\n\n return;\n }\n\n refuseNonEmptyDirectory(target, changes);\n};\n\nconst assertTargetIsDirectory = (root: string, target: string): void => {\n const stats = statSync(root, { throwIfNoEntry: false });\n\n if (stats !== undefined && !stats.isDirectory()) {\n fail(`Target \"${target}\" is not a directory`);\n }\n};\n\nconst validateTargetAvailability = async (\n root: string,\n target: string,\n options: CreateOptions,\n changes: ScaffoldChanges,\n): Promise<void> => {\n const stats = statSync(root, { throwIfNoEntry: false });\n assertTargetIsDirectory(root, target);\n\n if (stats === undefined || isDirEmpty(root)) {\n return;\n }\n\n await acceptNonEmptyDirectory(target, options, changes);\n};\n\nconst resolveTarget = async (options: CreateOptions): Promise<string> => {\n if (options.name === undefined && options.isInteractive) {\n return promptTarget();\n }\n\n const target = formatTargetDir(options.name ?? \"\");\n const error = validateTargetDir(target);\n\n return error === undefined ? target : fail(error);\n};\n\nconst resolveApplicationId = async (options: CreateOptions, name: string): Promise<string> => {\n const applicationId = options.applicationId ??\n (options.isInteractive ? await promptApplicationId(name) : suggestApplicationId(name));\n\n const error = validateApplicationIdInput(applicationId);\n\n return error === undefined ? applicationId : fail(error);\n};\n\nconst resolveDisplayName = async (options: CreateOptions, name: string): Promise<string> => {\n const value = options.displayName ??\n (options.isInteractive ? await promptDisplayName(name) : displayNameFromProjectName(name));\n const error = validateDisplayName(value);\n\n return error === undefined ? value.trim() : fail(error);\n};\n\nconst resolvePackageManager = async (\n requested: PackageManager | undefined,\n options: CreateOptions,\n): Promise<PackageManager> => {\n if (requested !== undefined) {\n return requested;\n }\n\n if (options.isInteractive) {\n return promptPackageManager();\n }\n\n return (await detectedPackageManager()) ?? \"pnpm\";\n};\n\nconst resolveOptions = async (options: CreateOptions): Promise<ResolvedOptions> => {\n const requested = requestedPackageManager(options.packageManager);\n const target = await resolveTarget(options);\n const name = deriveProjectName(target);\n const displayName = await resolveDisplayName(options, name);\n const applicationId = await resolveApplicationId(options, name);\n const root = resolve(process.cwd(), target);\n const isCurrentDirectory = root === process.cwd();\n const shouldInitialize = shouldInitializeGit(root);\n const packageManager = await resolvePackageManager(requested, options);\n const isTypescript = await isOptionEnabled(options.isTypescript, options.isInteractive, \"Use TypeScript?\");\n\n const shouldIncludeTesting = await isOptionEnabled(\n options.shouldIncludeTesting,\n options.isInteractive,\n \"Include testing setup (Vitest)?\",\n );\n\n return {\n target,\n root,\n isCurrentDirectory,\n name,\n displayName,\n applicationId,\n packageManager,\n isTypescript,\n shouldIncludeTesting,\n shouldInitializeGit: shouldInitialize,\n shouldInstallDependencies: options.shouldInstallDependencies !== false,\n };\n};\n\nconst isTemplateIncluded = (templateRelativePath: string, resolved: ResolvedOptions): boolean => {\n if (TESTING_TEMPLATES.has(templateRelativePath)) {\n return resolved.shouldIncludeTesting;\n }\n\n if (TYPESCRIPT_TEMPLATES.has(templateRelativePath)) {\n return resolved.isTypescript;\n }\n\n return true;\n};\n\nconst destinationPath = (template: string, resolved: ResolvedOptions): string => {\n const scriptPath = resolved.isTypescript ? template : template.replace(/\\.tsx$/, \".jsx\").replace(/\\.ts$/, \".js\");\n\n return scriptPath.endsWith(ICON_TEMPLATE_NAME)\n ? `${scriptPath.slice(0, -ICON_TEMPLATE_NAME.length)}${resolved.applicationId}.svg`\n : scriptPath;\n};\n\nconst templateContext = (resolved: ResolvedOptions): TemplateContext => ({\n name: resolved.name,\n applicationId: resolved.applicationId,\n displayName: resolved.displayName,\n shouldIncludeTesting: resolved.shouldIncludeTesting,\n isTypescript: resolved.isTypescript,\n importExtension: resolved.isTypescript ? \".js\" : \".jsx\",\n developerName: gitConfigValue(\"user.name\") ?? resolved.displayName,\n developerEmail: gitConfigValue(\"user.email\"),\n});\n\nconst replaceTemplateDestination = (destination: string): void => {\n const entry = lstatSync(destination, { throwIfNoEntry: false });\n\n if (entry === undefined) {\n return;\n }\n\n if (!entry.isFile() && !entry.isSymbolicLink()) {\n fail(`Cannot replace scaffold file because its destination is not a file: ${destination}`);\n }\n\n rmSync(destination, { force: true });\n};\n\nconst projectRelativeDestination = (root: string, destination: string): string => {\n const relativePath = relative(root, destination);\n const isOutsideProject = relativePath.length === 0 || relativePath.startsWith(`..${sep}`) ||\n isAbsolute(relativePath);\n\n if (isOutsideProject) {\n fail(`Scaffold destination is outside the project: ${destination}`);\n }\n\n return relativePath;\n};\n\nconst assertRootIsNotSymbolicLink = (root: string): void => {\n const rootEntry = lstatSync(root, { throwIfNoEntry: false });\n\n if (rootEntry?.isSymbolicLink()) {\n fail(`Cannot scaffold through a symbolic link: ${root}`);\n }\n};\n\nconst assertSafeAncestor = (ancestor: string): void => {\n const entry = lstatSync(ancestor, { throwIfNoEntry: false });\n\n if (entry?.isSymbolicLink()) {\n fail(`Cannot scaffold through a symbolic link: ${ancestor}`);\n }\n\n if (entry !== undefined && !entry.isDirectory()) {\n fail(`Cannot scaffold through a non-directory path: ${ancestor}`);\n }\n};\n\nconst assertSafeAncestors = (root: string, relativePath: string): void => {\n let ancestor = root;\n const segments = relativePath.split(sep);\n const ancestorSegments = segments.slice(0, -1);\n\n for (const segment of ancestorSegments) {\n ancestor = join(ancestor, segment);\n assertSafeAncestor(ancestor);\n }\n};\n\nconst assertReplaceableDestination = (destination: string): void => {\n const entry = lstatSync(destination, { throwIfNoEntry: false });\n const isReplaceable = entry === undefined || entry.isFile() || entry.isSymbolicLink();\n\n if (!isReplaceable) {\n fail(`Cannot replace scaffold file because its destination is not a file: ${destination}`);\n }\n};\n\nconst assertSafeDestination = (root: string, destination: string): void => {\n const relativePath = projectRelativeDestination(root, destination);\n assertRootIsNotSymbolicLink(root);\n assertSafeAncestors(root, relativePath);\n assertReplaceableDestination(destination);\n};\n\nconst plannedScaffoldFiles = async (root: string, resolved: ResolvedOptions): Promise<ScaffoldFile[]> => {\n const context = templateContext(resolved);\n const files: ScaffoldFile[] = [];\n\n for (const template of listTemplates()) {\n if (isTemplateIncluded(template, resolved)) {\n files.push({\n destination: join(root, destinationPath(template, resolved)),\n contents: await renderFile(template, context),\n });\n }\n }\n\n return files;\n};\n\nconst auxiliaryDestinations = (root: string, resolved: ResolvedOptions): string[] =>\n resolved.packageManager === \"pnpm\" ? [join(root, \"pnpm-workspace.yaml\")] : [];\n\nconst envModulePath = (root: string): string => join(root, \"node_modules\", \".gtkx\", \"env.d.ts\");\n\nconst shouldWriteEnvModule = (resolved: ResolvedOptions): boolean =>\n resolved.isTypescript && resolved.shouldInstallDependencies;\n\nconst generatedDestinations = (root: string, resolved: ResolvedOptions): string[] =>\n shouldWriteEnvModule(resolved) ? [envModulePath(root)] : [];\n\nconst isPresent = (path: string): boolean => lstatSync(path, { throwIfNoEntry: false }) !== undefined;\n\nconst classifyScaffoldChange = (\n root: string,\n destination: string,\n): ScaffoldChange | undefined => {\n const entry = lstatSync(destination, { throwIfNoEntry: false });\n\n if (entry === undefined) {\n return undefined;\n }\n\n return { destination, relativePath: projectRelativeDestination(root, destination) };\n};\n\nconst addScaffoldChange = (plan: ScaffoldPlan, change: ScaffoldChange | undefined): void => {\n if (change === undefined) {\n return;\n }\n\n plan.replaceDestinations.push(change.destination);\n plan.changes.push(change.relativePath);\n};\n\nconst planScaffoldProject = async (root: string, resolved: ResolvedOptions): Promise<ScaffoldPlan> => {\n const files = await plannedScaffoldFiles(root, resolved);\n const reported = [...files.map((file) => file.destination), ...auxiliaryDestinations(root, resolved)];\n const generated = generatedDestinations(root, resolved);\n\n for (const destination of [...reported, ...generated]) {\n assertSafeDestination(root, destination);\n }\n\n const plan: ScaffoldPlan = {\n files,\n replaceDestinations: generated.filter((destination) => isPresent(destination)),\n changes: [],\n };\n\n for (const destination of reported) {\n addScaffoldChange(plan, classifyScaffoldChange(root, destination));\n }\n\n return plan;\n};\n\nconst scaffoldProject = (root: string, resolved: ResolvedOptions, plan: ScaffoldPlan): void => {\n for (const destination of plan.replaceDestinations) {\n replaceTemplateDestination(destination);\n }\n\n for (const file of plan.files) {\n mkdirSync(dirname(file.destination), { recursive: true });\n writeFileSync(file.destination, file.contents);\n }\n\n if (resolved.shouldIncludeTesting) {\n updateManifest(root, (manifest) => {\n (manifest.scripts as Record<string, string>).test = \"vitest run\";\n });\n }\n};\n\nconst withoutInheritedScriptPolicy = async (run: () => Promise<void>): Promise<void> => {\n const saved = INHERITED_SCRIPT_POLICY_VARS.map((key) => [key, process.env[key]] as const);\n\n for (const [key] of saved) {\n Reflect.deleteProperty(process.env, key);\n }\n\n try {\n await run();\n } finally {\n for (const [key, value] of saved) {\n if (value !== undefined) {\n process.env[key] = value;\n }\n }\n }\n};\n\nconst installDependencies = async (options: InstallDependenciesOptions): Promise<void> => {\n const { cwd, packageManager, dependencies, isDev } = options;\n\n await withoutInheritedScriptPolicy(async () => {\n await addDependency(dependencies, { cwd, packageManager, dev: isDev, silent: true });\n });\n};\n\nconst pin = (names: string[]): string[] =>\n names.map((dependency) => {\n if (dependency.startsWith(\"@gtkx/\")) {\n return `${dependency}@^${selfVersion}`;\n }\n\n return dependency === \"typescript\" ? `${dependency}@${TYPESCRIPT_VERSION}` : dependency;\n });\n\nconst dependencyVersions = (names: string[]): Record<string, string> => Object.fromEntries(\n names.map((dependency) => {\n if (dependency.startsWith(\"@gtkx/\")) {\n return [dependency, `^${selfVersion}`];\n }\n\n return [dependency, dependency === \"typescript\" ? TYPESCRIPT_VERSION : \"latest\"];\n }),\n);\n\nconst writeDependencies = (root: string, devDependencies: string[]): void => {\n updateManifest(root, (manifest) => {\n manifest.dependencies = dependencyVersions(DEPENDENCIES);\n manifest.devDependencies = dependencyVersions(devDependencies);\n });\n};\n\nconst formatRecovery = ({ resolved, devDependencies }: InstallFailureOptions): string => {\n const add = ADD_COMMAND[resolved.packageManager];\n\n const steps = [\n ...(resolved.isCurrentDirectory ? [] : [`cd ${resolved.target}`]),\n `${add} ${pin(DEPENDENCIES).join(\" \")}`,\n `${add} -D ${pin(devDependencies).join(\" \")}`,\n ];\n\n const indented = steps.map((step) => ` ${step}`).join(\"\\n\");\n\n return `${RECOVERY_HEADING}\\n${indented}`;\n};\n\nconst explainInstallFailure = (options: InstallFailureOptions): void => {\n const hint = getInstallHint(errorMessage(options.error));\n\n if (hint !== undefined) {\n p.log.warn(hint);\n }\n\n p.log.info(formatRecovery(options));\n};\n\nconst runWithSpinner = async (step: SpinnerStep): Promise<void> => {\n const spinner = p.spinner();\n spinner.start(step.pending);\n\n try {\n await step.run();\n spinner.stop(step.done);\n } catch (error) {\n spinner.error(step.failed);\n p.log.error(errorMessage(error));\n step.explain?.(error);\n throw new ScaffoldAbortedError(step.failed);\n }\n};\n\nconst installAllDependencies = async (options: InstallAllOptions): Promise<void> => {\n const { resolved, devDependencies } = options;\n const { root, packageManager } = resolved;\n\n await runWithSpinner({\n pending: \"Installing dependencies...\",\n done: \"Dependencies installed\",\n failed: \"Failed to install dependencies\",\n run: async () => {\n await installDependencies({ cwd: root, packageManager, dependencies: pin(DEPENDENCIES), isDev: false });\n await installDependencies({ cwd: root, packageManager, dependencies: pin(devDependencies), isDev: true });\n },\n explain: (error) => {\n explainInstallFailure({ error, resolved, devDependencies });\n },\n });\n};\n\nconst writeInitialEnvModule = (root: string): void => {\n const path = envModulePath(root);\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, `${GTKX_ENV_MODULE_HEADER}\\n`);\n};\n\nconst isInsideGitRepository = (root: string): boolean => {\n const git = tryResolveExecutable(\"git\");\n\n if (git === undefined) {\n return false;\n }\n\n try {\n execFileSync(git, [\"-C\", root, \"rev-parse\", \"--show-toplevel\"], { stdio: \"ignore\" });\n\n return true;\n } catch {\n return false;\n }\n};\n\nconst initializeGitRepo = async (root: string, shouldInitialize: boolean): Promise<void> => {\n if (!shouldInitialize || isInsideGitRepository(root)) {\n return;\n }\n\n const spinner = p.spinner();\n spinner.start(\"Initializing git repository...\");\n\n try {\n const opts = { nodeOptions: { cwd: root }, throwOnError: true } as const;\n await x(\"git\", [\"init\"], opts);\n await x(\"git\", [\"add\", \"-A\"], opts);\n await x(\"git\", [\"commit\", \"-m\", \"Initial commit\"], opts);\n spinner.stop(\"Git repository initialized\");\n } catch {\n spinner.error(\"Failed to initialize git repository\");\n }\n};\n\nconst printNextSteps = (resolved: ResolvedOptions): void => {\n const devCmd = DEV_COMMAND[resolved.packageManager];\n const cdStep = resolved.isCurrentDirectory ? \"\" : `cd ${resolved.target}\\n`;\n const installStep = resolved.shouldInstallDependencies ? \"\" : `${INSTALL_COMMAND[resolved.packageManager]}\\n`;\n const testingNote = resolved.shouldIncludeTesting ? HEADLESS_COMPOSITOR_NOTE : \"\";\n p.note(`${cdStep}${installStep}${devCmd}${testingNote}`, \"Next steps\");\n};\n\nconst createProjectStructure = async (\n root: string,\n resolved: ResolvedOptions,\n plan: ScaffoldPlan,\n): Promise<void> => {\n await runWithSpinner({\n pending: \"Creating project structure...\",\n done: \"Project structure created\",\n failed: \"Failed to create the project structure\",\n run: () => {\n mkdirSync(root, { recursive: true });\n scaffoldProject(root, resolved, plan);\n writeBuildAllowance(root, resolved.packageManager);\n\n if (shouldWriteEnvModule(resolved)) {\n writeInitialEnvModule(root);\n }\n },\n });\n};\n\nconst scaffold = async (options: CreateOptions = {}): Promise<void> => {\n p.intro(\"Create GTKX App\");\n const resolved = await resolveOptions(options);\n const { root } = resolved;\n const devDeps = getDevDependencies(resolved);\n assertTargetIsDirectory(root, resolved.target);\n const plan = await planScaffoldProject(root, resolved);\n await validateTargetAvailability(root, resolved.target, options, plan.changes);\n await createProjectStructure(root, resolved, plan);\n reportCompletedChanges(plan.changes);\n\n if (resolved.shouldInstallDependencies) {\n await installAllDependencies({ resolved, devDependencies: devDeps });\n } else {\n writeDependencies(root, devDeps);\n }\n\n await initializeGitRepo(root, resolved.shouldInitializeGit);\n printNextSteps(resolved);\n};\n\nexport { scaffold };\n"]}
@@ -3,21 +3,11 @@ import { defineConfig } from "@gtkx/config";
3
3
  export default defineConfig({
4
4
  applicationId: "<%= applicationId %>",
5
5
  applicationIcon: "data/icons",
6
- future: {
7
- v2ByteArrays: true,
8
- v2ValueReturns: true,
9
- v2FinishResults: true,
10
- v2InoutReturns: true,
11
- v2ResourceImports: true,
12
- v2DefaultLibraries: true,
13
- v2TreeShaking: true,
14
- },
15
6
  deploy: {
16
- name: "<%= title %>",
17
- summary: "A GTK4 application built with GTKX",
7
+ name: <%- sourceStringLiteral(displayName) %>,
8
+ summary: "A GNOME application built with GTKX",
18
9
  description: [
19
- "<%= title %> is a GTK4 and Adwaita application built with GTKX, which renders native GObject "
20
- + "widgets from React. Replace this paragraph with a description of what your application does.",
10
+ <%- sourceStringLiteral(`${displayName} is a GNOME application built with GTKX on Adwaita and GTK4, with native GObject widgets rendered from React. Replace this paragraph with a description of what your application does.`) %>,
21
11
  ],
22
12
  categories: ["Utility"],
23
13
  },
@@ -2,7 +2,7 @@
2
2
  "name": "<%= name %>",
3
3
  "version": "0.0.1",
4
4
  "private": true,
5
- "description": "A GTK4 application built with GTKX",
5
+ "description": "A GNOME application built with GTKX",
6
6
  "license": "MIT",
7
7
  <% if (developerEmail) { -%>
8
8
  "author": <%- sourceStringLiteral(`${developerName} <${developerEmail}>`) %>,
@@ -10,6 +10,9 @@
10
10
  "author": <%- sourceStringLiteral(developerName) %>,
11
11
  <% } -%>
12
12
  "type": "module",
13
+ "engines": {
14
+ "node": ">=26.7.0"
15
+ },
13
16
  "scripts": {
14
17
  "dev": "gtkx dev",
15
18
  "build": "gtkx build",
@@ -1,5 +1,6 @@
1
1
  import * as Gtk from "@gtkx/gi/gtk";
2
- import { GtkApplication, GtkApplicationWindow, GtkBox, GtkButton, GtkLabel } from "@gtkx/jsx/gtk";
2
+ import { AdwApplication, AdwApplicationWindow, AdwHeaderBar, AdwToolbarView } from "@gtkx/jsx/adw";
3
+ import { GtkBox, GtkButton, GtkLabel } from "@gtkx/jsx/gtk";
3
4
  import { quit } from "@gtkx/react";
4
5
  import { useState } from "react";
5
6
 
@@ -7,38 +8,40 @@ const MainWindow = () => {
7
8
  const [count, setCount] = useState(0);
8
9
 
9
10
  return (
10
- <GtkApplicationWindow
11
- title="<%= title %>"
11
+ <AdwApplicationWindow
12
+ title={<%- sourceStringLiteral(displayName) %>}
12
13
  defaultWidth={400}
13
14
  defaultHeight={300}
14
15
  onCloseRequest={quit}
15
16
  >
16
- <GtkBox
17
- orientation={Gtk.Orientation.VERTICAL}
18
- spacing={20}
19
- marginTop={40}
20
- marginBottom={40}
21
- marginStart={40}
22
- marginEnd={40}
23
- valign={Gtk.Align.CENTER}
24
- halign={Gtk.Align.CENTER}
25
- >
26
- <GtkLabel cssClasses={["title-1"]}>Welcome to GTKX!</GtkLabel>
27
- <GtkLabel cssClasses={["title-2"]}>Count: {count}</GtkLabel>
28
- <GtkButton
29
- label="Increment"
30
- onClicked={() => setCount((c) => c + 1)}
31
- cssClasses={["suggested-action", "pill"]}
32
- />
33
- </GtkBox>
34
- </GtkApplicationWindow>
17
+ <AdwToolbarView topBar={<AdwHeaderBar />}>
18
+ <GtkBox
19
+ orientation={Gtk.Orientation.VERTICAL}
20
+ spacing={20}
21
+ marginTop={40}
22
+ marginBottom={40}
23
+ marginStart={40}
24
+ marginEnd={40}
25
+ valign={Gtk.Align.CENTER}
26
+ halign={Gtk.Align.CENTER}
27
+ >
28
+ <GtkLabel cssClasses={["title-1"]}>Welcome to GTKX!</GtkLabel>
29
+ <GtkLabel cssClasses={["title-2"]}>Count: {count}</GtkLabel>
30
+ <GtkButton
31
+ label="Increment"
32
+ onClicked={() => setCount((c) => c + 1)}
33
+ cssClasses={["suggested-action", "pill"]}
34
+ />
35
+ </GtkBox>
36
+ </AdwToolbarView>
37
+ </AdwApplicationWindow>
35
38
  );
36
39
  };
37
40
 
38
41
  export const App = () => (
39
- <GtkApplication>
42
+ <AdwApplication>
40
43
  <MainWindow />
41
- </GtkApplication>
44
+ </AdwApplication>
42
45
  );
43
46
 
44
47
  export default App;
@@ -1,7 +1,7 @@
1
1
  type TemplateContext = {
2
2
  name: string;
3
3
  applicationId: string;
4
- title: string;
4
+ displayName: string;
5
5
  shouldIncludeTesting: boolean;
6
6
  isTypescript: boolean;
7
7
  importExtension: string;
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAKA,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,OAAO,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAMF,QAAA,MAAM,aAAa,QAAO,MAAM,EAO3B,CAAC;AAEN,QAAA,MAAM,UAAU,GAAU,cAAc,MAAM,EAAE,SAAS,eAAe,KAAG,OAAO,CAAC,MAAM,CACc,CAAC;AAExG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAKA,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAIF,QAAA,MAAM,aAAa,QAAO,MAAM,EAO3B,CAAC;AAEN,QAAA,MAAM,UAAU,GAAU,cAAc,MAAM,EAAE,SAAS,eAAe,KAAG,OAAO,CAAC,MAAM,CACU,CAAC;AAEpG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,CAAC"}
package/dist/templates.js CHANGED
@@ -1,15 +1,13 @@
1
- import { sortStrings, sourceStringLiteral } from "@gtkx/utils";
1
+ import { sortStrings, sourceStringLiteral, toPosixPath } from "@gtkx/utils";
2
2
  import ejs from "ejs";
3
3
  import { readdirSync } from "node:fs";
4
4
  import { join } from "node:path";
5
- const getTemplatesDir = () => {
6
- return join(import.meta.dirname, "templates");
7
- };
8
- const listTemplates = () => sortStrings(readdirSync(getTemplatesDir(), { recursive: true, withFileTypes: true })
5
+ const TEMPLATES_DIR = join(import.meta.dirname, "templates");
6
+ const listTemplates = () => sortStrings(readdirSync(TEMPLATES_DIR, { recursive: true, withFileTypes: true })
9
7
  .filter((entry) => entry.isFile())
10
8
  .map((entry) => join(entry.parentPath, entry.name))
11
- .map((absolute) => absolute.slice(getTemplatesDir().length + 1).replaceAll(/[/\\]/g, "/"))
9
+ .map((absolute) => toPosixPath(absolute.slice(TEMPLATES_DIR.length + 1)))
12
10
  .map((relative) => relative.replace(/\.ejs$/, "")));
13
- const renderFile = async (templateName, context) => ejs.renderFile(join(getTemplatesDir(), `${templateName}.ejs`), { ...context, sourceStringLiteral });
11
+ const renderFile = async (templateName, context) => ejs.renderFile(join(TEMPLATES_DIR, `${templateName}.ejs`), { ...context, sourceStringLiteral });
14
12
  export { listTemplates, renderFile };
15
13
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,MAAM,eAAe,GAAG,GAAW,EAAE;IACjC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,GAAa,EAAE,CACjC,WAAW,CACP,WAAW,CAAC,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;KACnE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;KAClD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KACzF,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CACzD,CAAC;AAEN,MAAM,UAAU,GAAG,KAAK,EAAE,YAAoB,EAAE,OAAwB,EAAmB,EAAE,CACzF,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,YAAY,MAAM,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAExG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAwB,CAAC","sourcesContent":["import { sortStrings, sourceStringLiteral } from \"@gtkx/utils\";\nimport ejs from \"ejs\";\nimport { readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\ntype TemplateContext = {\n name: string;\n applicationId: string;\n title: string;\n shouldIncludeTesting: boolean;\n isTypescript: boolean;\n importExtension: string;\n developerName: string;\n developerEmail: string | null;\n};\n\nconst getTemplatesDir = (): string => {\n return join(import.meta.dirname, \"templates\");\n};\n\nconst listTemplates = (): string[] =>\n sortStrings(\n readdirSync(getTemplatesDir(), { recursive: true, withFileTypes: true })\n .filter((entry) => entry.isFile())\n .map((entry) => join(entry.parentPath, entry.name))\n .map((absolute) => absolute.slice(getTemplatesDir().length + 1).replaceAll(/[/\\\\]/g, \"/\"))\n .map((relative) => relative.replace(/\\.ejs$/, \"\")),\n );\n\nconst renderFile = async (templateName: string, context: TemplateContext): Promise<string> =>\n ejs.renderFile(join(getTemplatesDir(), `${templateName}.ejs`), { ...context, sourceStringLiteral });\n\nexport { listTemplates, renderFile, type TemplateContext };\n"]}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAE7D,MAAM,aAAa,GAAG,GAAa,EAAE,CACjC,WAAW,CACP,WAAW,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;KAC/D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;KAClD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;KACxE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CACzD,CAAC;AAEN,MAAM,UAAU,GAAG,KAAK,EAAE,YAAoB,EAAE,OAAwB,EAAmB,EAAE,CACzF,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,YAAY,MAAM,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAEpG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAwB,CAAC","sourcesContent":["import { sortStrings, sourceStringLiteral, toPosixPath } from \"@gtkx/utils\";\nimport ejs from \"ejs\";\nimport { readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\ntype TemplateContext = {\n name: string;\n applicationId: string;\n displayName: string;\n shouldIncludeTesting: boolean;\n isTypescript: boolean;\n importExtension: string;\n developerName: string;\n developerEmail: string | null;\n};\n\nconst TEMPLATES_DIR = join(import.meta.dirname, \"templates\");\n\nconst listTemplates = (): string[] =>\n sortStrings(\n readdirSync(TEMPLATES_DIR, { recursive: true, withFileTypes: true })\n .filter((entry) => entry.isFile())\n .map((entry) => join(entry.parentPath, entry.name))\n .map((absolute) => toPosixPath(absolute.slice(TEMPLATES_DIR.length + 1)))\n .map((relative) => relative.replace(/\\.ejs$/, \"\")),\n );\n\nconst renderFile = async (templateName: string, context: TemplateContext): Promise<string> =>\n ejs.renderFile(join(TEMPLATES_DIR, `${templateName}.ejs`), { ...context, sourceStringLiteral });\n\nexport { listTemplates, renderFile, type TemplateContext };\n"]}
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "create-gtkx",
3
- "version": "1.6.0",
4
- "description": "Create a native GTK4 + React desktop app. Real GTK widgets.",
3
+ "version": "2.0.0-beta.10",
4
+ "description": "Create a native GNOME app with React, Adwaita, and GTK4.",
5
5
  "keywords": [
6
6
  "gtkx",
7
7
  "gtk",
8
8
  "gtk4",
9
+ "adwaita",
10
+ "gnome",
9
11
  "react",
10
12
  "typescript",
11
13
  "native",
@@ -30,6 +32,8 @@
30
32
  "./package.json": "./package.json",
31
33
  ".": {
32
34
  "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js",
36
+ "require": null,
33
37
  "default": "./dist/index.js"
34
38
  }
35
39
  },
@@ -43,22 +47,22 @@
43
47
  "src"
44
48
  ],
45
49
  "engines": {
46
- "node": ">=24"
50
+ "node": ">=26.7.0"
47
51
  },
48
52
  "dependencies": {
49
- "@clack/prompts": "^1.7.0",
53
+ "@clack/prompts": "^1.8.0",
54
+ "@gtkx/config": "2.0.0-beta.10",
55
+ "@gtkx/utils": "2.0.0-beta.10",
50
56
  "ejs": "^6.0.1",
51
57
  "citty": "^0.2.2",
52
58
  "nypm": "^0.6.9",
53
- "tinyexec": "^1.3.0",
54
- "@gtkx/config": "1.6.0",
55
- "@gtkx/utils": "1.6.0"
59
+ "tinyexec": "^1.3.1"
56
60
  },
57
61
  "devDependencies": {
58
62
  "@types/ejs": "^3.1.5",
59
- "@types/node": "^26.2.0",
63
+ "@types/node": "^26.5.0",
60
64
  "typescript": "^6.0.3",
61
- "vitest": "^4.1.11"
65
+ "vitest": "^5.0.0"
62
66
  },
63
67
  "nx": {
64
68
  "targets": {
package/src/cli.ts CHANGED
@@ -9,7 +9,7 @@ const main = defineCommand({
9
9
  meta: {
10
10
  name: "create-gtkx",
11
11
  version,
12
- description: "Scaffold a new GTKX application",
12
+ description: "Scaffold a new Adwaita-first GNOME application with GTKX",
13
13
  },
14
14
  });
15
15
 
package/src/command.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import * as p from "@clack/prompts";
2
+ import { assertSupportedNodeVersion } from "@gtkx/config/internal";
2
3
  import { errorMessage } from "@gtkx/utils";
3
4
  import { defineCommand } from "citty";
5
+ import { parseArgs, type ParseArgsOptionsConfig } from "node:util";
4
6
  import { OperationCanceledError, ScaffoldAbortedError } from "./errors.js";
5
7
  import { PACKAGE_MANAGER_FLAG_DESCRIPTION } from "./package-managers.js";
6
8
  import { scaffold } from "./scaffolder.js";
@@ -8,18 +10,88 @@ import { scaffold } from "./scaffolder.js";
8
10
  type CreateCommandArgs = {
9
11
  name?: string | undefined;
10
12
  "application-id"?: string | undefined;
13
+ "display-name"?: string | undefined;
11
14
  "package-manager"?: string | undefined;
12
15
  typescript?: boolean | undefined;
13
16
  vitest?: boolean | undefined;
14
17
  yes?: boolean | undefined;
15
18
  "no-interactive"?: boolean | undefined;
16
19
  overwrite?: boolean | undefined;
20
+ "skip-install"?: boolean | undefined;
21
+ };
22
+
23
+ const STRICT_OPTIONS: ParseArgsOptionsConfig = {
24
+ "application-id": { type: "string" },
25
+ applicationId: { type: "string" },
26
+ "display-name": { type: "string" },
27
+ displayName: { type: "string" },
28
+ "package-manager": { type: "string", short: "p" },
29
+ packageManager: { type: "string" },
30
+ typescript: { type: "boolean" },
31
+ vitest: { type: "boolean" },
32
+ yes: { type: "boolean", short: "y" },
33
+ "no-interactive": { type: "boolean" },
34
+ noInteractive: { type: "boolean" },
35
+ overwrite: { type: "boolean", short: "f" },
36
+ "skip-install": { type: "boolean" },
37
+ skipInstall: { type: "boolean" },
38
+ };
39
+
40
+ const BOOLEAN_OPTIONS: ReadonlySet<string> = new Set([
41
+ "--typescript",
42
+ "--vitest",
43
+ "--yes",
44
+ "--overwrite",
45
+ "--skip-install",
46
+ "--skipInstall",
47
+ ]);
48
+
49
+ const normalizeBooleanArgument = (argument: string): string => {
50
+ const [option, value, ...rest] = argument.split("=");
51
+
52
+ if (option === undefined || rest.length > 0 || !BOOLEAN_OPTIONS.has(option)) {
53
+ return argument;
54
+ }
55
+
56
+ if (value === "true") {
57
+ return option;
58
+ }
59
+
60
+ return value === "false" ? `--no-${option.slice(2)}` : argument;
61
+ };
62
+
63
+ const isKnownOption = (name: string, rawName: string): boolean =>
64
+ Object.hasOwn(STRICT_OPTIONS, name) || Object.hasOwn(STRICT_OPTIONS, rawName.replace(/^--/, ""));
65
+
66
+ const unknownOptions = (args: string[]): string[] => {
67
+ const { tokens } = parseArgs({
68
+ args,
69
+ options: STRICT_OPTIONS,
70
+ allowPositionals: true,
71
+ allowNegative: true,
72
+ strict: false,
73
+ tokens: true,
74
+ });
75
+
76
+ return tokens.flatMap((token) =>
77
+ token.kind === "option" && !isKnownOption(token.name, token.rawName) ? [token.rawName] : []);
78
+ };
79
+
80
+ const assertKnownArguments = (rawArgs: string[]): void => {
81
+ const args = rawArgs.map((argument) => normalizeBooleanArgument(argument));
82
+ const [unknown] = unknownOptions(args);
83
+
84
+ if (unknown !== undefined) {
85
+ throw new Error(`Unknown option "${unknown}". Pass --help to list the supported options`);
86
+ }
87
+
88
+ parseArgs({ args, options: STRICT_OPTIONS, allowPositionals: true, allowNegative: true, strict: true });
17
89
  };
18
90
 
19
91
  const scaffoldCommand = defineCommand({
20
92
  meta: {
21
93
  name: "create",
22
- description: "Create a new GTKX application",
94
+ description: "Create a new Adwaita-first GNOME application with GTKX",
23
95
  },
24
96
  args: {
25
97
  name: {
@@ -31,6 +103,10 @@ const scaffoldCommand = defineCommand({
31
103
  type: "string",
32
104
  description: "Application ID (e.g., com.example.myapp)",
33
105
  },
106
+ "display-name": {
107
+ type: "string",
108
+ description: "Application display name (e.g., My App)",
109
+ },
34
110
  "package-manager": {
35
111
  type: "string",
36
112
  alias: "p",
@@ -59,10 +135,14 @@ const scaffoldCommand = defineCommand({
59
135
  overwrite: {
60
136
  type: "boolean",
61
137
  alias: "f",
62
- description: "Overwrite the contents of a non-empty target directory when running without prompts",
138
+ description: "Replace scaffold files in a non-empty target directory when running without prompts",
139
+ },
140
+ "skip-install": {
141
+ type: "boolean",
142
+ description: "Create the project without installing dependencies",
63
143
  },
64
144
  },
65
- run: ({ args }) => runCreate(args),
145
+ run: ({ args, rawArgs }) => runCreate(args, rawArgs),
66
146
  });
67
147
 
68
148
  const settleScaffoldFailure = (error: unknown): void => {
@@ -77,18 +157,22 @@ const settleScaffoldFailure = (error: unknown): void => {
77
157
  process.exitCode = 1;
78
158
  };
79
159
 
80
- const runCreate = async (args: CreateCommandArgs): Promise<void> => {
160
+ const runCreate = async (args: CreateCommandArgs, rawArgs: string[]): Promise<void> => {
81
161
  const isInteractive = args["no-interactive"] || args.yes ? false : process.stdin.isTTY;
82
162
 
83
163
  try {
164
+ assertKnownArguments(rawArgs);
165
+ assertSupportedNodeVersion();
84
166
  await scaffold({
85
167
  name: args.name,
86
168
  applicationId: args["application-id"],
169
+ displayName: args["display-name"],
87
170
  packageManager: args["package-manager"],
88
171
  isTypescript: args.typescript,
89
172
  shouldIncludeTesting: args.vitest,
90
173
  isInteractive,
91
174
  shouldOverwrite: args.overwrite,
175
+ shouldInstallDependencies: args["skip-install"] !== true,
92
176
  });
93
177
  } catch (error) {
94
178
  settleScaffoldFailure(error);