create-gtkx 2.0.0-beta.5 → 2.0.0-beta.6
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.
- package/dist/scaffolder.d.ts.map +1 -1
- package/dist/scaffolder.js +13 -2
- package/dist/scaffolder.js.map +1 -1
- package/package.json +3 -3
- package/src/scaffolder.ts +15 -2
package/dist/scaffolder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"AAsBA,KAAK,aAAa,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3C,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,yBAAyB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnD,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"AAsBA,KAAK,aAAa,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,oBAAoB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3C,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,yBAAyB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnD,CAAC;AA01BF,QAAA,MAAM,QAAQ,GAAU,UAAS,aAAkB,KAAG,OAAO,CAAC,IAAI,CAmBjE,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/scaffolder.js
CHANGED
|
@@ -16,6 +16,7 @@ import { isValidProjectName } from "./project-name.js";
|
|
|
16
16
|
import { listTemplates, renderFile } from "./templates.js";
|
|
17
17
|
const selfVersion = packageManifest.version;
|
|
18
18
|
const ICON_TEMPLATE_NAME = "icon.svg";
|
|
19
|
+
const TYPESCRIPT_VERSION = "^6.0.3";
|
|
19
20
|
const GTKX_ENV_MODULE_HEADER = `/**
|
|
20
21
|
* Generated by \`gtkx codegen\`, \`gtkx dev\`, and \`gtkx build\`; do not edit.
|
|
21
22
|
*/`;
|
|
@@ -463,8 +464,18 @@ const installDependencies = async (options) => {
|
|
|
463
464
|
await addDependency(dependencies, { cwd, packageManager, dev: isDev, silent: true });
|
|
464
465
|
});
|
|
465
466
|
};
|
|
466
|
-
const pin = (names) => names.map((dependency) =>
|
|
467
|
-
|
|
467
|
+
const pin = (names) => names.map((dependency) => {
|
|
468
|
+
if (dependency.startsWith("@gtkx/")) {
|
|
469
|
+
return `${dependency}@^${selfVersion}`;
|
|
470
|
+
}
|
|
471
|
+
return dependency === "typescript" ? `${dependency}@${TYPESCRIPT_VERSION}` : dependency;
|
|
472
|
+
});
|
|
473
|
+
const dependencyVersions = (names) => Object.fromEntries(names.map((dependency) => {
|
|
474
|
+
if (dependency.startsWith("@gtkx/")) {
|
|
475
|
+
return [dependency, `^${selfVersion}`];
|
|
476
|
+
}
|
|
477
|
+
return [dependency, dependency === "typescript" ? TYPESCRIPT_VERSION : "latest"];
|
|
478
|
+
}));
|
|
468
479
|
const writeDependencies = (root, devDependencies) => {
|
|
469
480
|
updateManifest(root, (manifest) => {
|
|
470
481
|
manifest.dependencies = dependencyVersions(DEPENDENCIES);
|
package/dist/scaffolder.js.map
CHANGED
|
@@ -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 { 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\";\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 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 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) => dependency.startsWith(\"@gtkx/\") ? `${dependency}@^${selfVersion}` : dependency);\n\nconst dependencyVersions = (names: string[]): Record<string, string> => Object.fromEntries(\n names.map((dependency) => [dependency, dependency.startsWith(\"@gtkx/\") ? `^${selfVersion}` : \"latest\"]),\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"]}
|
|
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 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 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-gtkx",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.6",
|
|
4
4
|
"description": "Create a native GTK4 + React desktop app. Real GTK widgets.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gtkx",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@clack/prompts": "^1.7.0",
|
|
52
|
-
"@gtkx/config": "2.0.0-beta.
|
|
53
|
-
"@gtkx/utils": "2.0.0-beta.
|
|
52
|
+
"@gtkx/config": "2.0.0-beta.6",
|
|
53
|
+
"@gtkx/utils": "2.0.0-beta.6",
|
|
54
54
|
"ejs": "^6.0.1",
|
|
55
55
|
"citty": "^0.2.2",
|
|
56
56
|
"nypm": "^0.6.9",
|
package/src/scaffolder.ts
CHANGED
|
@@ -89,6 +89,7 @@ type SpinnerStep = {
|
|
|
89
89
|
|
|
90
90
|
const selfVersion = packageManifest.version;
|
|
91
91
|
const ICON_TEMPLATE_NAME = "icon.svg";
|
|
92
|
+
const TYPESCRIPT_VERSION = "^6.0.3";
|
|
92
93
|
|
|
93
94
|
const GTKX_ENV_MODULE_HEADER = `/**
|
|
94
95
|
* Generated by \`gtkx codegen\`, \`gtkx dev\`, and \`gtkx build\`; do not edit.
|
|
@@ -735,10 +736,22 @@ const installDependencies = async (options: InstallDependenciesOptions): Promise
|
|
|
735
736
|
};
|
|
736
737
|
|
|
737
738
|
const pin = (names: string[]): string[] =>
|
|
738
|
-
names.map((dependency) =>
|
|
739
|
+
names.map((dependency) => {
|
|
740
|
+
if (dependency.startsWith("@gtkx/")) {
|
|
741
|
+
return `${dependency}@^${selfVersion}`;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
return dependency === "typescript" ? `${dependency}@${TYPESCRIPT_VERSION}` : dependency;
|
|
745
|
+
});
|
|
739
746
|
|
|
740
747
|
const dependencyVersions = (names: string[]): Record<string, string> => Object.fromEntries(
|
|
741
|
-
names.map((dependency) =>
|
|
748
|
+
names.map((dependency) => {
|
|
749
|
+
if (dependency.startsWith("@gtkx/")) {
|
|
750
|
+
return [dependency, `^${selfVersion}`];
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
return [dependency, dependency === "typescript" ? TYPESCRIPT_VERSION : "latest"];
|
|
754
|
+
}),
|
|
742
755
|
);
|
|
743
756
|
|
|
744
757
|
const writeDependencies = (root: string, devDependencies: string[]): void => {
|