@solid-stack/mason 1.0.15 → 1.0.16

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/bin.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/fileOperations.ts","../src/utils/formatting.ts","../src/utils/config.ts","../src/utils/project.ts","../src/templates/engine.ts","../src/templates/domain.template.ts","../src/templates/interface.template.ts","../src/templates/useCase.template.ts","../src/templates/infra.template.ts","../src/templates/httpHandler.template.ts","../src/templates/injectable.template.ts","../src/templates/provider.template.ts","../src/templates/expressIndex.template.ts","../src/core/domainGenerator.ts","../src/core/interfaceGenerator.ts","../src/core/infraGenerator.ts","../src/core/useCaseGenerator.ts","../src/core/httpHandlerGenerator.ts","../src/core/providerManager.ts","../src/core/featureGenerator.ts","../src/utils/prompts.ts","../src/commands/feature.ts","../src/core/sharedGenerator.ts","../src/commands/shared.ts","../src/commands/usecase.ts","../src/commands/domain.ts","../src/commands/infrastructure.ts","../src/commands/interface.ts","../src/commands/httpHandler.ts","../src/core/injectableGenerator.ts","../src/commands/injectable.ts","../src/commands/menu.ts","../src/commands/create.ts","../src/utils/registry.ts","../src/utils/integrity.ts","../src/commands/import.ts","../src/cli.ts","../src/bin.ts"],"names":["path","fs","p","pc","Handlebars","fileURLToPath","p2","p3","s","p4","p5","p6","p7","p8","p9","p10","generateInterface","p11","p12","p13","execSync","createHash","p14","folder","cac","p15","choice"],"mappings":"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","file":"bin.cjs","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { GeneratedFile } from \"../types/index.js\";\n\nexport function writeFileSafely(\n absolutePath: string,\n content: string,\n options: {\n projectRoot?: string | undefined;\n overwrite?: boolean | undefined;\n dryRun?: boolean | undefined;\n } = {}\n): GeneratedFile {\n const projectRoot = options.projectRoot || process.cwd();\n const relPath = path.relative(projectRoot, absolutePath).replace(/\\\\/g, \"/\");\n const existedBefore = fs.existsSync(absolutePath);\n\n if (options.dryRun) {\n return {\n relativePath: relPath,\n absolutePath,\n content,\n action: \"preview\",\n existedBefore,\n };\n }\n\n if (existedBefore && !options.overwrite) {\n return {\n relativePath: relPath,\n absolutePath,\n content,\n action: \"skipped\",\n existedBefore: true,\n };\n }\n\n const dir = path.dirname(absolutePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(absolutePath, content, \"utf-8\");\n\n return {\n relativePath: relPath,\n absolutePath,\n content,\n action: existedBefore ? \"overwritten\" : \"created\",\n existedBefore,\n };\n}\n\nexport function printGeneratedFiles(files: GeneratedFile[], isDryRun: boolean = false): void {\n console.log(\"\");\n if (isDryRun) {\n p.log.warn(pc.yellow(pc.bold(\"[DRY RUN PREVIEW] No files were written to disk.\")));\n }\n\n for (const f of files) {\n if (f.action === \"created\") {\n p.log.success(`${pc.bold(f.relativePath)} ${pc.dim(\"(created)\")}`);\n } else if (f.action === \"overwritten\") {\n p.log.warn(`${pc.bold(f.relativePath)} ${pc.dim(\"(overwritten)\")}`);\n } else if (f.action === \"skipped\") {\n p.log.info(`${pc.dim(f.relativePath)} ${pc.dim(\"(skipped - already exists, pass -o to overwrite)\")}`);\n } else {\n p.log.info(`${pc.bold(f.relativePath)} ${pc.dim(\"(preview)\")}`);\n }\n }\n}\n","/**\n * Convert string to PascalCase\n * e.g. \"users\" -> \"Users\", \"user-profile\" -> \"UserProfile\", \"user_service\" -> \"UserService\"\n */\nexport function toPascalCase(str: string): string {\n if (!str) return \"\";\n return str\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : \"\"))\n .replace(/^[a-z]/, (c) => c.toUpperCase());\n}\n\n/**\n * Convert string to camelCase\n * e.g. \"UserProfile\" -> \"userProfile\", \"IUserRepository\" -> \"userRepository\"\n */\nexport function toCamelCase(str: string): string {\n if (!str) return \"\";\n let s = str;\n // If starts with 'I' followed by uppercase letter, strip 'I' (e.g. IUserRepository -> UserRepository -> userRepository)\n if (/^I[A-Z]/.test(s)) {\n s = s.slice(1);\n }\n const pascal = toPascalCase(s);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Convert string to kebab-case\n * e.g. \"UserProfile\" -> \"user-profile\", \"user_profile\" -> \"user-profile\"\n */\nexport function toKebabCase(str: string): string {\n if (!str) return \"\";\n return str\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/[-_\\s]+/g, \"-\")\n .toLowerCase();\n}\n\n/**\n * Naive singularization for common developer nouns\n */\nexport function toSingular(str: string): string {\n if (!str) return \"\";\n const lower = str.toLowerCase();\n if (lower.endsWith(\"ies\")) {\n return str.slice(0, -3) + (str.endsWith(\"IES\") ? \"Y\" : \"y\");\n }\n if (lower.endsWith(\"ses\") && !lower.endsWith(\"sses\")) {\n return str.slice(0, -2);\n }\n if (lower.endsWith(\"s\") && !lower.endsWith(\"ss\")) {\n return str.slice(0, -1);\n }\n return str;\n}\n\n/**\n * Naive pluralization for common developer nouns\n */\nexport function toPlural(str: string): string {\n if (!str) return \"\";\n const lower = str.toLowerCase();\n if (lower.endsWith(\"y\") && !/[aeiou]y$/i.test(lower)) {\n return str.slice(0, -1) + (str.endsWith(\"Y\") ? \"IES\" : \"ies\");\n }\n if (lower.endsWith(\"s\") || lower.endsWith(\"x\") || lower.endsWith(\"z\") || lower.endsWith(\"ch\") || lower.endsWith(\"sh\")) {\n return str + (str === str.toUpperCase() ? \"ES\" : \"es\");\n }\n return str + (str === str.toUpperCase() ? \"S\" : \"s\");\n}\n\n/**\n * Ensure interface starts with 'I'\n * e.g. \"UserRepository\" -> \"IUserRepository\", \"IUserRepository\" -> \"IUserRepository\"\n */\nexport function ensureInterfacePrefix(name: string): string {\n const pascal = toPascalCase(name);\n if (/^I[A-Z]/.test(pascal)) {\n return pascal;\n }\n return `I${pascal}`;\n}\n\n/**\n * Remove interface 'I' prefix\n * e.g. \"IUserRepository\" -> \"UserRepository\", \"UserRepository\" -> \"UserRepository\"\n */\nexport function removeInterfacePrefix(name: string): string {\n if (/^I[A-Z]/.test(name)) {\n return name.slice(1);\n }\n return name;\n}\n\n/**\n * Generate stub class name for an interface\n * e.g. \"IUserRepository\" -> \"StubUserRepository\", \"UserRepository\" -> \"StubUserRepository\"\n */\nexport function toStubName(ifaceName: string): string {\n const base = removeInterfacePrefix(ifaceName);\n if (base.startsWith(\"Stub\")) {\n return base;\n }\n return `Stub${base}`;\n}\n\n/**\n * Validate non-empty valid JS identifier\n */\nexport function isValidIdentifier(str: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(str);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport interface MasonConfig {\n mode?: \"app\" | \"registry\";\n registry?: string;\n paths?: {\n features?: string;\n shared?: string;\n };\n}\n\n/**\n * Searches upward for mason.config.json starting from startDir\n */\nexport function loadMasonConfig(startDir: string = process.cwd()): MasonConfig | null {\n let current = path.resolve(startDir);\n while (true) {\n const configPath = path.join(current, \"mason.config.json\");\n if (fs.existsSync(configPath)) {\n try {\n return JSON.parse(fs.readFileSync(configPath, \"utf-8\")) as MasonConfig;\n } catch {\n return null;\n }\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return null;\n}\n\n/**\n * Determine effective mode: \"app\" or \"registry\"\n */\nexport function getEffectiveMode(\n projectRoot: string,\n flags?: { registry?: boolean }\n): \"app\" | \"registry\" {\n if (flags?.registry) return \"registry\";\n\n const config = loadMasonConfig(projectRoot);\n if (config?.mode) return config.mode;\n\n // Auto-detection: if project has index.json and (features/ or shared/) and no src/\n if (\n fs.existsSync(path.join(projectRoot, \"index.json\")) &&\n (fs.existsSync(path.join(projectRoot, \"features\")) || fs.existsSync(path.join(projectRoot, \"shared\"))) &&\n !fs.existsSync(path.join(projectRoot, \"src\"))\n ) {\n return \"registry\";\n }\n\n return \"app\";\n}\n\n/**\n * Resolve configured features directory path\n */\nexport function getConfiguredFeaturesDir(\n projectRoot: string,\n flags?: { target?: string; dest?: string; registry?: boolean }\n): string {\n if (flags?.target) return path.resolve(projectRoot, flags.target);\n if (flags?.dest) return path.resolve(projectRoot, flags.dest);\n\n const config = loadMasonConfig(projectRoot);\n if (config?.paths?.features) {\n return path.resolve(projectRoot, config.paths.features);\n }\n\n const mode = getEffectiveMode(projectRoot, flags);\n if (mode === \"registry\") {\n return path.join(projectRoot, \"features\");\n }\n\n if (fs.existsSync(path.join(projectRoot, \"src/features\"))) {\n return path.join(projectRoot, \"src/features\");\n }\n\n return path.join(projectRoot, \"features\");\n}\n\n/**\n * Resolve configured shared directory path\n */\nexport function getConfiguredSharedDir(\n projectRoot: string,\n flags?: { target?: string; dest?: string; registry?: boolean }\n): string {\n if (flags?.target) return path.resolve(projectRoot, flags.target);\n if (flags?.dest) return path.resolve(projectRoot, flags.dest);\n\n const config = loadMasonConfig(projectRoot);\n if (config?.paths?.shared) {\n return path.resolve(projectRoot, config.paths.shared);\n }\n\n const mode = getEffectiveMode(projectRoot, flags);\n if (mode === \"registry\") {\n return path.join(projectRoot, \"shared\");\n }\n\n if (fs.existsSync(path.join(projectRoot, \"src/shared\"))) {\n return path.join(projectRoot, \"src/shared\");\n }\n\n return path.join(projectRoot, \"shared\");\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getConfiguredFeaturesDir, getConfiguredSharedDir } from \"./config.js\";\n\n/**\n * Locate project root by finding the nearest package.json\n */\nexport function findProjectRoot(startDir: string = process.cwd()): string {\n let current = path.resolve(startDir);\n while (true) {\n if (fs.existsSync(path.join(current, \"package.json\"))) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return path.resolve(startDir);\n }\n current = parent;\n }\n}\n\n/**\n * Resolve features directory (respects mason.config.json and mode)\n */\nexport function resolveFeaturesDir(\n projectRoot: string,\n flags?: { target?: string; dest?: string; registry?: boolean }\n): string {\n return getConfiguredFeaturesDir(projectRoot, flags);\n}\n\n/**\n * Resolve shared directory (respects mason.config.json and mode)\n */\nexport function resolveSharedDir(\n projectRoot: string,\n flags?: { target?: string; dest?: string; registry?: boolean }\n): string {\n return getConfiguredSharedDir(projectRoot, flags);\n}\n\n/**\n * List existing shared module names in project\n */\nexport function listExistingShared(projectRoot: string): string[] {\n const sharedDir = resolveSharedDir(projectRoot);\n if (!fs.existsSync(sharedDir)) return [];\n\n try {\n const entries = fs.readdirSync(sharedDir, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory() && !e.name.startsWith(\".\"))\n .map((e) => e.name)\n .sort();\n } catch {\n return [];\n }\n}\n\n/**\n * List existing feature names in project\n */\nexport function listExistingFeatures(projectRoot: string): string[] {\n const featuresDir = resolveFeaturesDir(projectRoot);\n if (!fs.existsSync(featuresDir)) return [];\n\n try {\n const entries = fs.readdirSync(featuresDir, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort();\n } catch {\n return [];\n }\n}\n\n/**\n * List domain interfaces in a feature (or all features)\n */\nexport function listDomainInterfaces(\n projectRoot: string,\n featureName?: string\n): Array<{ name: string; fullPath: string; feature: string }> {\n const results: Array<{ name: string; fullPath: string; feature: string }> = [];\n const features = featureName ? [featureName] : listExistingFeatures(projectRoot);\n\n for (const feat of features) {\n const domainDir = path.join(resolveFeaturesDir(projectRoot), feat, \"domain\");\n if (!fs.existsSync(domainDir)) continue;\n\n try {\n const files = fs.readdirSync(domainDir);\n for (const file of files) {\n if (file.endsWith(\".ts\") && !file.endsWith(\".test.ts\") && !file.endsWith(\".d.ts\")) {\n const name = file.replace(/\\.ts$/, \"\");\n const fullPath = path.join(domainDir, file);\n if (/^I[A-Z]/.test(name)) {\n results.push({\n name,\n fullPath,\n feature: feat,\n });\n } else {\n try {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n if (/export\\s+(?:abstract\\s+class|interface)\\s+(\\w+)/.test(content)) {\n results.push({\n name,\n fullPath,\n feature: feat,\n });\n }\n } catch {\n // ignore\n }\n }\n }\n }\n } catch {\n // ignore\n }\n }\n\n return results;\n}\n\n/**\n * List domain entities in a feature (or all features)\n */\nexport function listDomainEntities(\n projectRoot: string,\n featureName?: string\n): Array<{ name: string; fullPath: string; feature: string }> {\n const results: Array<{ name: string; fullPath: string; feature: string }> = [];\n const features = featureName ? [featureName] : listExistingFeatures(projectRoot);\n\n for (const feat of features) {\n const domainDir = path.join(resolveFeaturesDir(projectRoot), feat, \"domain\");\n if (!fs.existsSync(domainDir)) continue;\n\n try {\n const files = fs.readdirSync(domainDir);\n for (const file of files) {\n if (file.endsWith(\".ts\") && !file.endsWith(\".test.ts\") && !file.endsWith(\".d.ts\")) {\n const name = file.replace(/\\.ts$/, \"\");\n if (!/^I[A-Z]/.test(name)) {\n results.push({\n name,\n fullPath: path.join(domainDir, file),\n feature: feat,\n });\n }\n }\n }\n } catch {\n // ignore\n }\n }\n\n return results;\n}\n\n/**\n * List use cases in a feature (or all features)\n */\nexport function listUseCases(\n projectRoot: string,\n featureName?: string\n): Array<{ name: string; fullPath: string; feature: string }> {\n const results: Array<{ name: string; fullPath: string; feature: string }> = [];\n const features = featureName ? [featureName] : listExistingFeatures(projectRoot);\n\n for (const feat of features) {\n const useCasesDir = path.join(resolveFeaturesDir(projectRoot), feat, \"useCases\");\n if (!fs.existsSync(useCasesDir)) continue;\n\n try {\n const files = fs.readdirSync(useCasesDir);\n for (const file of files) {\n if (file.endsWith(\".ts\") && !file.endsWith(\".test.ts\") && !file.endsWith(\".d.ts\")) {\n const name = file.replace(/\\.ts$/, \"\");\n results.push({\n name,\n fullPath: path.join(useCasesDir, file),\n feature: feat,\n });\n }\n }\n } catch {\n // ignore\n }\n }\n\n return results;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport Handlebars from \"handlebars\";\nimport { toCamelCase, toKebabCase, toPascalCase } from \"../utils/formatting.js\";\n\n// Create isolated Handlebars instance to avoid polluting global state\nexport const hbs = Handlebars.create();\n\n// Register standard helpers useful for TypeScript code generation\nhbs.registerHelper(\"eq\", (a: unknown, b: unknown) => a === b);\nhbs.registerHelper(\"ne\", (a: unknown, b: unknown) => a !== b);\nhbs.registerHelper(\"not\", (a: unknown) => !a);\nhbs.registerHelper(\"and\", (...args: unknown[]) => args.slice(0, -1).every(Boolean));\nhbs.registerHelper(\"or\", (...args: unknown[]) => args.slice(0, -1).some(Boolean));\nhbs.registerHelper(\"pascalCase\", (str: string) => toPascalCase(str));\nhbs.registerHelper(\"camelCase\", (str: string) => toCamelCase(str));\nhbs.registerHelper(\"kebabCase\", (str: string) => toKebabCase(str));\nhbs.registerHelper(\"join\", (arr: unknown[], sep: unknown) => {\n if (!Array.isArray(arr)) return \"\";\n const delimiter = typeof sep === \"string\" ? sep : \", \";\n return arr.join(delimiter);\n});\n\nlet cachedTemplatesDir: string | null = null;\n\n/**\n * Resolves the absolute path to the templates directory across development and production builds.\n */\nexport function getTemplatesDir(): string {\n if (cachedTemplatesDir && fs.existsSync(cachedTemplatesDir)) {\n return cachedTemplatesDir;\n }\n\n const currentDir = typeof __dirname !== \"undefined\"\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\n // 1. From src/templates/ -> ../../templates\n const cand1 = path.resolve(currentDir, \"../../templates\");\n if (fs.existsSync(cand1)) {\n cachedTemplatesDir = cand1;\n return cand1;\n }\n\n // 2. From dist/ -> ../templates\n const cand2 = path.resolve(currentDir, \"../templates\");\n if (fs.existsSync(cand2)) {\n cachedTemplatesDir = cand2;\n return cand2;\n }\n\n // 3. Direct subdirectory (dist/templates)\n const cand3 = path.resolve(currentDir, \"templates\");\n if (fs.existsSync(cand3)) {\n cachedTemplatesDir = cand3;\n return cand3;\n }\n\n // 4. Walk up to locate templates directory\n let curr = currentDir;\n while (true) {\n const candTemplates = path.join(curr, \"templates\");\n if (fs.existsSync(candTemplates)) {\n cachedTemplatesDir = candTemplates;\n return candTemplates;\n }\n const parent = path.dirname(curr);\n if (parent === curr) break;\n curr = parent;\n }\n\n throw new Error(\"Could not locate templates directory for @solid-stack/create\");\n}\n\nconst templateCache = new Map<string, Handlebars.TemplateDelegate>();\n\n/**\n * Reads a .hbs template file from the templates directory.\n */\nexport function loadTemplate(relativePath: string): string {\n const fullPath = path.isAbsolute(relativePath)\n ? relativePath\n : path.join(getTemplatesDir(), relativePath);\n return fs.readFileSync(fullPath, \"utf-8\");\n}\n\n/**\n * Compiles and renders a Handlebars .hbs template file from disk with caching and noEscape.\n */\nexport function renderTemplateFile<T extends object>(relativePath: string, context: T): string {\n let compiled = templateCache.get(relativePath);\n if (!compiled) {\n const source = loadTemplate(relativePath);\n compiled = hbs.compile(source.trim(), { noEscape: true });\n templateCache.set(relativePath, compiled);\n }\n const result = compiled(context);\n return result.endsWith(\"\\n\") ? result : result + \"\\n\";\n}\n\n/**\n * Compiles and renders a Handlebars template string or .hbs file path with HTML escaping disabled.\n * Caches compiled templates for maximum performance.\n */\nexport function renderTemplate<T extends object>(sourceOrPath: string, context: T): string {\n if (sourceOrPath.endsWith(\".hbs\")) {\n return renderTemplateFile(sourceOrPath, context);\n }\n\n let compiled = templateCache.get(sourceOrPath);\n if (!compiled) {\n compiled = hbs.compile(sourceOrPath.trim(), { noEscape: true });\n templateCache.set(sourceOrPath, compiled);\n }\n const result = compiled(context);\n return result.endsWith(\"\\n\") ? result : result + \"\\n\";\n}\n","import { loadTemplate } from \"./engine.js\";\n\nexport const domainInterfaceTemplate = loadTemplate(\"domain/interface.hbs\");\nexport const domainClassTemplate = loadTemplate(\"domain/class.hbs\");\nexport const domainValueObjectTemplate = loadTemplate(\"domain/valueObject.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const interfaceTemplate = loadTemplate(\"interface/interface.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const useCaseTemplate = loadTemplate(\"useCase/useCase.hbs\");\nexport const useCaseTestTemplate = loadTemplate(\"useCase/useCaseTest.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const concreteInfraTemplate = loadTemplate(\"infra/concrete.hbs\");\nexport const stubInfraTemplate = loadTemplate(\"infra/stub.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const httpHandlerTemplate = loadTemplate(\"httpHandler/handler.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const injectableTemplate = loadTemplate(\"injectable/injectable.hbs\");\nexport const injectableInterfaceTemplate = loadTemplate(\"injectable/interface.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const diProviderTemplate = loadTemplate(\"provider/provider.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const expressIndexTemplate = loadTemplate(\"express/index.hbs\");\n","import path from \"node:path\";\nimport type { DomainOptions, GeneratedFile, PropertyDef } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport {\n domainClassTemplate,\n domainInterfaceTemplate,\n domainValueObjectTemplate,\n renderTemplate,\n} from \"../templates/index.js\";\n\nexport function generateDomainEntityCode(\n name: string,\n kind: \"interface\" | \"class\" | \"valueObject\" = \"interface\",\n properties: PropertyDef[] = []\n): string {\n const entityName = toPascalCase(name);\n\n const defaultProps: PropertyDef[] = [\n { name: \"id\", type: \"string\" },\n { name: \"createdAt\", type: \"Date\" },\n { name: \"updatedAt\", type: \"Date\" },\n ];\n\n const effectiveProps = properties.length > 0 ? properties : defaultProps;\n\n if (kind === \"interface\") {\n return renderTemplate(domainInterfaceTemplate, {\n name: entityName,\n properties: effectiveProps,\n });\n }\n\n if (kind === \"class\") {\n return renderTemplate(domainClassTemplate, {\n name: entityName,\n properties: effectiveProps,\n });\n }\n\n if (kind === \"valueObject\") {\n const valueProp = effectiveProps[0] || { name: \"value\", type: \"string\" };\n return renderTemplate(domainValueObjectTemplate, {\n name: entityName,\n valueProp,\n });\n }\n\n return \"\";\n}\n\nexport function generateDomain(options: DomainOptions): GeneratedFile {\n const projectRoot = options.projectRoot || findProjectRoot();\n const entityName = toPascalCase(options.name);\n const targetDir = options.targetDir || path.join(resolveFeaturesDir(projectRoot), options.feature, \"domain\");\n const filePath = path.join(targetDir, `${entityName}.ts`);\n\n const code = generateDomainEntityCode(\n entityName,\n options.kind || \"interface\",\n options.properties || []\n );\n\n return writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n}\n","import path from \"node:path\";\nimport type { GeneratedFile, InterfaceOptions, MethodDef } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { ensureInterfacePrefix, removeInterfacePrefix, toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport { interfaceTemplate, renderTemplate } from \"../templates/index.js\";\n\nexport function generateInterfaceCode(\n ifaceName: string,\n kind: \"abstractClass\" | \"interface\" = \"abstractClass\",\n entityName?: string,\n methodsPreset: \"crud\" | \"custom\" | \"empty\" = \"crud\",\n customMethods: MethodDef[] = []\n): string {\n const validIfaceName = ensureInterfacePrefix(ifaceName);\n const baseEntity = entityName\n ? toPascalCase(entityName)\n : toPascalCase(removeInterfacePrefix(validIfaceName).replace(/Repository$|Service$|Client$/, \"\"));\n\n const isCrud = methodsPreset === \"crud\" && Boolean(baseEntity);\n const isCustom = methodsPreset === \"custom\" && customMethods.length > 0;\n const isAbstractClass = kind === \"abstractClass\";\n const methodPrefix = isAbstractClass ? \"abstract \" : \"\";\n\n const domainImport = isCrud ? baseEntity : undefined;\n const entityKey = baseEntity ? baseEntity.charAt(0).toLowerCase() + baseEntity.slice(1) : \"\";\n const idKey = `${entityKey}Id`;\n const listKey = `${entityKey}s`;\n\n const formattedCustomMethods = customMethods.map((m) => {\n const params = m.params && m.params.length > 0\n ? m.params.map((p) => `${p.name}: ${p.type}`).join(\"; \")\n : \"\";\n const returnType = m.returnType ? `Promise<${m.returnType}>` : \"Promise<void>\";\n return {\n name: m.name,\n params,\n returnType,\n };\n });\n\n return renderTemplate(interfaceTemplate, {\n ifaceName: validIfaceName,\n isAbstractClass,\n domainImport,\n isCrud,\n baseEntity,\n idKey,\n entityKey,\n listKey,\n methodPrefix,\n isCustom,\n customMethods: formattedCustomMethods,\n });\n}\n\nexport function generateInterface(options: InterfaceOptions): GeneratedFile {\n const projectRoot = options.projectRoot || findProjectRoot();\n const ifaceName = ensureInterfacePrefix(options.name);\n const targetDir = options.targetDir || path.join(resolveFeaturesDir(projectRoot), options.feature, \"domain\");\n const filePath = path.join(targetDir, `${ifaceName}.ts`);\n\n const code = generateInterfaceCode(\n ifaceName,\n options.kind || \"abstractClass\",\n options.entityName,\n options.methodsPreset || \"crud\",\n options.customMethods || []\n );\n\n return writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { GeneratedFile, InfrastructureOptions } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { ensureInterfacePrefix, removeInterfacePrefix, toPascalCase, toStubName } from \"../utils/formatting.js\";\nimport { findProjectRoot, listExistingFeatures, resolveFeaturesDir } from \"../utils/project.js\";\nimport {\n concreteInfraTemplate,\n renderTemplate,\n stubInfraTemplate,\n} from \"../templates/index.js\";\n\nexport interface InterfaceMethodDef {\n name: string;\n typeParams?: string | undefined;\n params: string;\n returnType: string;\n isAsync: boolean;\n}\n\nexport interface InterfaceImportDef {\n specifier: string;\n items: Array<{ name: string; isTypeOnly?: boolean | undefined }>;\n isTypeOnly: boolean;\n}\n\nexport interface ParsedInterfaceResult {\n className: string;\n methods: InterfaceMethodDef[];\n imports: InterfaceImportDef[];\n extendsClass?: string | undefined;\n}\n\n/**\n * Parses interface or abstract class declarations from TypeScript file content.\n * Extracts methods, parameters, return types, and referenced imports.\n */\nexport function parseInterfaceMethodsAndImports(\n content: string,\n targetIfaceName?: string\n): ParsedInterfaceResult {\n const imports: InterfaceImportDef[] = [];\n const methods: InterfaceMethodDef[] = [];\n let extendsClass: string | undefined;\n\n // 1. Extract imports\n const importRegex = /import\\s+(type\\s+)?(?:(\\w+)|\\{([^}]+)\\}|\\*\\s+as\\s+(\\w+))\\s+from\\s+[\"']([^\"']+)[\"'];?/g;\n let impMatch: RegExpExecArray | null;\n while ((impMatch = importRegex.exec(content)) !== null) {\n const isGlobalType = Boolean(impMatch[1]);\n const defaultImport = impMatch[2];\n const namedImports = impMatch[3];\n const namespaceImport = impMatch[4];\n const specifier = impMatch[5]!;\n\n const items: Array<{ name: string; isTypeOnly?: boolean | undefined }> = [];\n\n if (defaultImport) {\n items.push({ name: defaultImport, isTypeOnly: isGlobalType ? true : undefined });\n } else if (namespaceImport) {\n items.push({ name: namespaceImport, isTypeOnly: isGlobalType ? true : undefined });\n } else if (namedImports) {\n const parts = namedImports.split(\",\");\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n const typeMatch = trimmed.match(/^type\\s+(\\w+)(?:\\s+as\\s+\\w+)?$/);\n const normalMatch = trimmed.match(/^(\\w+)(?:\\s+as\\s+\\w+)?$/);\n if (typeMatch) {\n items.push({ name: typeMatch[1]!, isTypeOnly: true });\n } else if (normalMatch) {\n items.push({ name: normalMatch[1]!, isTypeOnly: isGlobalType ? true : undefined });\n }\n }\n }\n\n if (items.length > 0) {\n imports.push({\n specifier,\n items,\n isTypeOnly: isGlobalType,\n });\n }\n }\n\n // 2. Find the target abstract class or interface declaration\n let classRegex: RegExp;\n if (targetIfaceName) {\n classRegex = new RegExp(\n `(?:export\\\\s+)?(?:abstract\\\\s+class|interface)\\\\s+(${targetIfaceName})\\\\b([^{]*)\\\\{`,\n \"g\"\n );\n } else {\n classRegex = /(?:export\\\\s+)?(?:abstract\\\\s+class|interface)\\\\s+([A-Za-z0-9_$]+)\\b([^{]*)\\{/g;\n }\n\n const declMatch = classRegex.exec(content);\n if (!declMatch) {\n return {\n className: targetIfaceName || \"\",\n methods: [],\n imports,\n };\n }\n\n const className = declMatch[1]!;\n const headerRemainder = declMatch[2] || \"\";\n const headerEnd = declMatch.index + declMatch[0].length;\n\n // Check extends\n const extMatch = headerRemainder.match(/\\bextends\\s+([A-Za-z0-9_$]+)\\b/);\n if (extMatch) {\n extendsClass = extMatch[1];\n }\n\n // 3. Extract class body with balanced braces\n let depth = 1;\n let bodyEnd = -1;\n for (let i = headerEnd; i < content.length; i++) {\n const ch = content[i];\n if (ch === \"/\" && content[i + 1] === \"/\") {\n const nl = content.indexOf(\"\\n\", i);\n i = nl === -1 ? content.length : nl;\n continue;\n }\n if (ch === \"/\" && content[i + 1] === \"*\") {\n const closeComment = content.indexOf(\"*/\", i + 2);\n i = closeComment === -1 ? content.length : closeComment + 1;\n continue;\n }\n if (ch === '\"' || ch === \"'\" || ch === \"`\") {\n const quote = ch;\n i++;\n while (i < content.length && content[i] !== quote) {\n if (content[i] === \"\\\\\") i++;\n i++;\n }\n continue;\n }\n\n if (ch === \"{\") {\n depth++;\n } else if (ch === \"}\") {\n depth--;\n if (depth === 0) {\n bodyEnd = i;\n break;\n }\n }\n }\n\n if (bodyEnd === -1) {\n bodyEnd = content.length;\n }\n\n const body = content.slice(headerEnd, bodyEnd);\n\n // 4. Split body into statements ending with ';' at depth 0\n const statements: string[] = [];\n let currentStmt = \"\";\n let pDepth = 0; // ()\n let bDepth = 0; // {}\n let sDepth = 0; // []\n let aDepth = 0; // <>\n\n for (let i = 0; i < body.length; i++) {\n const ch = body[i];\n if (ch === \"/\" && body[i + 1] === \"/\") {\n const nl = body.indexOf(\"\\n\", i);\n i = nl === -1 ? body.length : nl;\n continue;\n }\n if (ch === \"/\" && body[i + 1] === \"*\") {\n const closeComment = body.indexOf(\"*/\", i + 2);\n i = closeComment === -1 ? body.length : closeComment + 1;\n continue;\n }\n if (ch === '\"' || ch === \"'\" || ch === \"`\") {\n const quote = ch;\n currentStmt += ch;\n i++;\n while (i < body.length && body[i] !== quote) {\n if (body[i] === \"\\\\\") {\n currentStmt += body[i];\n i++;\n }\n if (i < body.length) currentStmt += body[i];\n i++;\n }\n if (i < body.length) currentStmt += body[i];\n continue;\n }\n\n if (ch === \"(\") pDepth++;\n else if (ch === \")\") pDepth = Math.max(0, pDepth - 1);\n else if (ch === \"{\") bDepth++;\n else if (ch === \"}\") bDepth = Math.max(0, bDepth - 1);\n else if (ch === \"[\") sDepth++;\n else if (ch === \"]\") sDepth = Math.max(0, sDepth - 1);\n else if (ch === \"<\") aDepth++;\n else if (ch === \">\") aDepth = Math.max(0, aDepth - 1);\n\n if (ch === \";\" && pDepth === 0 && bDepth === 0 && sDepth === 0 && aDepth === 0) {\n if (currentStmt.trim()) {\n statements.push(currentStmt.trim());\n }\n currentStmt = \"\";\n } else {\n currentStmt += ch;\n }\n }\n if (currentStmt.trim()) {\n statements.push(currentStmt.trim());\n }\n\n // 5. Parse each statement into a method declaration\n for (let stmt of statements) {\n stmt = stmt.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\").trim();\n stmt = stmt.replace(/^(?:public\\s+|protected\\s+|private\\s+)?(?:abstract\\s+)?(?:readonly\\s+)?/, \"\").trim();\n\n const firstParen = stmt.indexOf(\"(\");\n if (firstParen === -1) continue;\n\n let methodName = \"\";\n let typeParams: string | undefined;\n\n const firstAngle = stmt.indexOf(\"<\");\n if (firstAngle !== -1 && firstAngle < firstParen) {\n methodName = stmt.slice(0, firstAngle).trim().replace(/^(?:async\\s+)/, \"\");\n let angDepth = 0;\n let angClose = -1;\n for (let j = firstAngle; j < firstParen; j++) {\n if (stmt[j] === \"<\") angDepth++;\n else if (stmt[j] === \">\") {\n angDepth--;\n if (angDepth === 0) {\n angClose = j;\n break;\n }\n }\n }\n if (angClose !== -1) {\n typeParams = stmt.slice(firstAngle, angClose + 1).trim();\n }\n } else {\n methodName = stmt.slice(0, firstParen).trim().replace(/^(?:async\\s+)/, \"\");\n }\n\n if (!methodName || !/^[A-Za-z0-9_$]+$/.test(methodName)) {\n continue;\n }\n\n // Find matching ')'\n let parenDepth = 0;\n let parenClose = -1;\n for (let j = firstParen; j < stmt.length; j++) {\n if (stmt[j] === \"(\") parenDepth++;\n else if (stmt[j] === \")\") {\n parenDepth--;\n if (parenDepth === 0) {\n parenClose = j;\n break;\n }\n }\n }\n if (parenClose === -1) continue;\n\n const rawParams = stmt.slice(firstParen + 1, parenClose).trim();\n const params = rawParams.replace(/\\s+/g, \" \");\n\n const afterParen = stmt.slice(parenClose + 1).trim();\n let returnType = \"void\";\n if (afterParen.startsWith(\":\")) {\n returnType = afterParen.slice(1).trim().replace(/\\s+/g, \" \");\n }\n\n const isAsync = returnType.startsWith(\"Promise<\") || returnType === \"Promise\";\n\n methods.push({\n name: methodName,\n typeParams,\n params,\n returnType,\n isAsync,\n });\n }\n\n return {\n className,\n methods,\n imports,\n extendsClass,\n };\n}\n\n/**\n * Searches for an interface or abstract class file across features or project root.\n */\nexport function findInterfaceFile(\n projectRoot: string,\n ifaceName: string,\n featureName?: string,\n customPath?: string\n): { filePath: string; ifaceName: string; feature?: string } | null {\n if (customPath && fs.existsSync(customPath)) {\n return { filePath: customPath, ifaceName };\n }\n\n const candidateNames = [\n ifaceName,\n ensureInterfacePrefix(ifaceName),\n removeInterfacePrefix(ifaceName),\n ];\n\n const features = featureName\n ? [featureName, ...listExistingFeatures(projectRoot).filter((f) => f !== featureName)]\n : listExistingFeatures(projectRoot);\n\n for (const feat of features) {\n const domainDir = path.join(resolveFeaturesDir(projectRoot), feat, \"domain\");\n if (!fs.existsSync(domainDir)) continue;\n\n for (const cand of candidateNames) {\n const p1 = path.join(domainDir, `${cand}.ts`);\n if (fs.existsSync(p1)) {\n return { filePath: p1, ifaceName: cand, feature: feat };\n }\n }\n }\n\n for (const cand of candidateNames) {\n const p1 = path.join(projectRoot, \"domain\", `${cand}.ts`);\n if (fs.existsSync(p1)) return { filePath: p1, ifaceName: cand };\n const p2 = path.join(projectRoot, \"src\", \"domain\", `${cand}.ts`);\n if (fs.existsSync(p2)) return { filePath: p2, ifaceName: cand };\n const p3 = path.join(projectRoot, \"interfaces\", `${cand}.ts`);\n if (fs.existsSync(p3)) return { filePath: p3, ifaceName: cand };\n }\n\n return null;\n}\n\n/**\n * Loads an interface or abstract class including methods and imports from any extended base classes.\n */\nexport function loadInterfaceHierarchy(\n projectRoot: string,\n initialIfaceName: string,\n featureName?: string,\n customPath?: string\n): {\n resolvedIfaceName: string;\n ifaceFilePath?: string | undefined;\n methods: InterfaceMethodDef[];\n imports: InterfaceImportDef[];\n} {\n const found = findInterfaceFile(projectRoot, initialIfaceName, featureName, customPath);\n if (!found) {\n return {\n resolvedIfaceName: initialIfaceName,\n methods: [],\n imports: [],\n };\n }\n\n const visited = new Set<string>();\n const allMethods: InterfaceMethodDef[] = [];\n const allImports: InterfaceImportDef[] = [];\n let currentFile: string | undefined = found.filePath;\n let currentName = found.ifaceName;\n const primaryResolvedName = found.ifaceName;\n const primaryFilePath = found.filePath;\n\n while (currentFile && !visited.has(currentFile)) {\n visited.add(currentFile);\n try {\n const content = fs.readFileSync(currentFile, \"utf-8\");\n const parsed = parseInterfaceMethodsAndImports(content, currentName);\n\n for (const m of parsed.methods) {\n if (!allMethods.some((existing) => existing.name === m.name)) {\n allMethods.push(m);\n }\n }\n\n for (const imp of parsed.imports) {\n allImports.push(imp);\n }\n\n if (parsed.extendsClass) {\n const nextFound = findInterfaceFile(projectRoot, parsed.extendsClass, featureName);\n if (nextFound) {\n currentFile = nextFound.filePath;\n currentName = nextFound.ifaceName;\n } else {\n currentFile = undefined;\n }\n } else {\n currentFile = undefined;\n }\n } catch {\n break;\n }\n }\n\n return {\n resolvedIfaceName: primaryResolvedName,\n ifaceFilePath: primaryFilePath,\n methods: allMethods,\n imports: allImports,\n };\n}\n\n/**\n * Synthesizes standard CRUD methods for a repository interface when not present on disk.\n */\nexport function synthesizeCrudMethods(entityName: string): InterfaceMethodDef[] {\n const baseEntity = toPascalCase(entityName);\n const entityVar = baseEntity.charAt(0).toLowerCase() + baseEntity.slice(1);\n const entitiesVar = `${entityVar}s`;\n const idKey = `${entityVar}Id`;\n\n return [\n {\n name: `Get${baseEntity}ById`,\n params: `input: { ${idKey}: string }`,\n returnType: `Promise<{ ${entityVar}: ${baseEntity} }>`,\n isAsync: true,\n },\n {\n name: `List${baseEntity}s`,\n params: `input?: { page?: number | undefined; limit?: number | undefined }`,\n returnType: `Promise<{ ${entitiesVar}: ${baseEntity}[]; total?: number | undefined; page?: number | undefined; limit?: number | undefined }>`,\n isAsync: true,\n },\n {\n name: `Create${baseEntity}`,\n params: `input: { ${entityVar}: ${baseEntity} }`,\n returnType: `Promise<{ ${entityVar}: ${baseEntity} }>`,\n isAsync: true,\n },\n {\n name: `Update${baseEntity}`,\n params: `input: { ${entityVar}: ${baseEntity} }`,\n returnType: `Promise<{ ${entityVar}: ${baseEntity} }>`,\n isAsync: true,\n },\n {\n name: `Delete${baseEntity}`,\n params: `input: { ${idKey}: string }`,\n returnType: `Promise<{ success: boolean }>`,\n isAsync: true,\n },\n ];\n}\n\nexport function generateStubCode(\n stubClassName: string,\n ifaceName: string,\n entityName?: string,\n featureName?: string,\n methods: InterfaceMethodDef[] = [],\n domainImports: Array<{ name: string; from: string; isTypeOnly?: boolean | undefined }> = [],\n ifaceImportPath?: string\n): string {\n const baseEntity = entityName\n ? toPascalCase(entityName)\n : toPascalCase(removeInterfacePrefix(ifaceName).replace(/Repository$|Service$|Client$/, \"\"));\n const entityVar = baseEntity ? baseEntity.charAt(0).toLowerCase() + baseEntity.slice(1) : \"\";\n const entitiesVar = `${entityVar}s`;\n const idKey = `${entityVar}Id`;\n\n const impPath = ifaceImportPath || `../domain/${ifaceName}.js`;\n const entityImportPath = ifaceImportPath\n ? `${path.dirname(ifaceImportPath)}/${baseEntity}.js`\n : `../domain/${baseEntity}.js`;\n\n // Group additional domain imports\n const importsByFrom = new Map<string, { typeOnly: boolean; names: Set<string> }>();\n for (const imp of domainImports) {\n if (imp.name === ifaceName || imp.name === baseEntity) continue;\n if (!importsByFrom.has(imp.from)) {\n importsByFrom.set(imp.from, { typeOnly: imp.isTypeOnly ?? true, names: new Set() });\n }\n const group = importsByFrom.get(imp.from)!;\n group.names.add(imp.name);\n if (imp.isTypeOnly === false) {\n group.typeOnly = false;\n }\n }\n\n const formattedDomainImports = Array.from(importsByFrom.entries()).map(([from, group]) => ({\n from,\n names: Array.from(group.names).sort().join(\", \"),\n isTypeOnly: group.typeOnly,\n }));\n\n const standardNames = new Set([\n `Get${baseEntity}ById`,\n `List${baseEntity}s`,\n `Create${baseEntity}`,\n `Update${baseEntity}`,\n `Delete${baseEntity}`,\n ]);\n const extraMethods = methods.filter((m) => !standardNames.has(m.name));\n\n return renderTemplate(stubInfraTemplate, {\n stubClassName,\n ifaceName,\n ifaceImportPath: impPath,\n baseEntity: baseEntity || undefined,\n entityImportPath,\n domainImports: formattedDomainImports,\n entitiesVar,\n entityVar,\n idKey,\n extraMethods,\n hasMethods: methods.length > 0,\n methods,\n });\n}\n\nexport function generateConcreteInfraCode(\n className: string,\n ifaceName?: string,\n dependencies: string[] = [],\n methods: InterfaceMethodDef[] = [],\n domainImports: Array<{ name: string; from: string; isTypeOnly?: boolean | undefined }> = [],\n ifaceImportPath?: string\n): string {\n let finalMethods = [...methods];\n const finalDomainImports = [...domainImports];\n\n if (finalMethods.length === 0 && ifaceName) {\n const baseEntity = toPascalCase(removeInterfacePrefix(ifaceName).replace(/Repository$|Service$|Client$/, \"\"));\n if (baseEntity) {\n finalMethods = synthesizeCrudMethods(baseEntity);\n if (!finalDomainImports.some((imp) => imp.name === baseEntity)) {\n const importPath = ifaceImportPath\n ? `${path.dirname(ifaceImportPath)}/${baseEntity}.js`\n : `../domain/${baseEntity}.js`;\n finalDomainImports.push({\n name: baseEntity,\n from: importPath,\n isTypeOnly: true,\n });\n }\n }\n }\n\n const impPath = ifaceName ? (ifaceImportPath || `../domain/${ifaceName}.js`) : \"\";\n\n // Group domainImports by from\n const importsByFrom = new Map<string, { typeOnly: boolean; names: Set<string> }>();\n for (const imp of finalDomainImports) {\n if (imp.name === ifaceName) continue;\n if (!importsByFrom.has(imp.from)) {\n importsByFrom.set(imp.from, { typeOnly: imp.isTypeOnly ?? true, names: new Set() });\n }\n const group = importsByFrom.get(imp.from)!;\n group.names.add(imp.name);\n if (imp.isTypeOnly === false) {\n group.typeOnly = false;\n }\n }\n\n const formattedDomainImports = Array.from(importsByFrom.entries()).map(([from, group]) => ({\n from,\n names: Array.from(group.names).sort().join(\", \"),\n isTypeOnly: group.typeOnly,\n }));\n\n const formattedDeps = dependencies.map((dep) => ({\n key: dep.charAt(0).toLowerCase() + dep.slice(1),\n name: dep,\n }));\n\n return renderTemplate(concreteInfraTemplate, {\n className,\n ifaceName,\n ifaceImportPath: impPath,\n domainImports: formattedDomainImports,\n dependencies: formattedDeps,\n hasMethods: finalMethods.length > 0,\n methods: finalMethods,\n });\n}\n\nexport function generateInfrastructure(options: InfrastructureOptions): GeneratedFile {\n const projectRoot = options.projectRoot || findProjectRoot();\n const className = toPascalCase(options.name);\n const isFeatureScope = options.scope !== \"global\" && Boolean(options.feature);\n\n const targetDir = options.targetDir || (isFeatureScope\n ? path.join(resolveFeaturesDir(projectRoot), options.feature!, \"infrastructure\")\n : path.join(projectRoot, \"infrastructure\"));\n\n const filePath = path.join(targetDir, `${className}.ts`);\n\n let code: string;\n if (options.implementsInterface) {\n const rawIfaceName = options.implementsInterface;\n const hierarchy = loadInterfaceHierarchy(\n projectRoot,\n rawIfaceName,\n options.feature,\n options.interfacePath\n );\n\n const ifaceName = hierarchy.resolvedIfaceName;\n const ifaceFilePath = hierarchy.ifaceFilePath;\n\n let ifaceImportPath: string | undefined;\n if (ifaceFilePath) {\n let rel = path.relative(targetDir, ifaceFilePath).replace(/\\\\/g, \"/\").replace(/\\.ts$/, \".js\");\n if (!rel.startsWith(\".\")) rel = \"./\" + rel;\n ifaceImportPath = rel;\n } else if (isFeatureScope) {\n ifaceImportPath = `../domain/${ifaceName}.js`;\n }\n\n // Determine domain types to import from hierarchy.imports\n const allSignatures = hierarchy.methods\n .map((m) => `${m.params} ${m.returnType}`)\n .join(\" \");\n\n const domainImports: Array<{ name: string; from: string; isTypeOnly?: boolean | undefined }> = [];\n\n for (const imp of hierarchy.imports) {\n for (const item of imp.items) {\n if (new RegExp(`\\\\b${item.name}\\\\b`).test(allSignatures)) {\n let fromPath: string;\n if (imp.specifier.startsWith(\".\") && ifaceFilePath) {\n const absTarget = path.resolve(path.dirname(ifaceFilePath), imp.specifier);\n let rel = path.relative(targetDir, absTarget).replace(/\\\\/g, \"/\");\n if (!rel.startsWith(\".\")) rel = \"./\" + rel;\n fromPath = rel;\n } else {\n fromPath = imp.specifier;\n }\n\n domainImports.push({\n name: item.name,\n from: fromPath,\n isTypeOnly: item.isTypeOnly ?? imp.isTypeOnly ?? true,\n });\n }\n }\n }\n\n if (options.kind === \"stub\") {\n code = generateStubCode(\n className,\n ifaceName,\n options.entityName,\n options.feature,\n hierarchy.methods,\n domainImports,\n ifaceImportPath\n );\n } else {\n code = generateConcreteInfraCode(\n className,\n ifaceName,\n options.dependencies || [],\n hierarchy.methods,\n domainImports,\n ifaceImportPath\n );\n }\n } else {\n code = generateConcreteInfraCode(\n className,\n undefined,\n options.dependencies || []\n );\n }\n\n return writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n}\n","import path from \"node:path\";\nimport type { GeneratedFile, PropertyDef, UseCaseOptions } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toPascalCase, toSingular, toStubName } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport { renderTemplate, useCaseTemplate, useCaseTestTemplate } from \"../templates/index.js\";\n\nconst primitiveTypes = new Set([\n \"string\",\n \"number\",\n \"boolean\",\n \"bigint\",\n \"symbol\",\n \"undefined\",\n \"null\",\n \"any\",\n \"unknown\",\n \"never\",\n \"void\",\n \"Date\",\n \"Record<string, any>\",\n \"Record<string, unknown>\",\n \"Record<string, never>\",\n]);\n\nexport function generateUseCaseCode(\n useCaseName: string,\n dependencies: string[] = [],\n inputProps: PropertyDef[] = [],\n outputProps: PropertyDef[] = [],\n domainImports: string[] = []\n): string {\n const ucName = toPascalCase(useCaseName);\n const inputTypeName = `${ucName}Input`;\n const outputTypeName = `${ucName}Output`;\n\n // Dependency imports\n const dependencyImports = dependencies.map((dep) => ({\n name: dep,\n from: /^I[A-Z]/.test(dep) ? `../domain/${dep}.js` : `./${dep}.js`,\n }));\n\n // Domain imports\n const domainTypesToImport = new Set<string>(domainImports);\n for (const p of [...inputProps, ...outputProps]) {\n const rawType = p.type.trim();\n const baseType = rawType.replace(/\\[\\]$/, \"\").trim();\n if (\n !primitiveTypes.has(baseType) &&\n /^[A-Z][A-Za-z0-9_]*$/.test(baseType) &&\n !dependencies.includes(baseType)\n ) {\n domainTypesToImport.add(baseType);\n }\n }\n\n const formattedInputProps = inputProps.map((p) => ({\n name: p.name,\n optional: p.optional,\n type: p.optional && !p.type.includes(\"undefined\") ? `${p.type} | undefined` : p.type,\n }));\n\n const formattedOutputProps = outputProps.map((p) => ({\n name: p.name,\n optional: p.optional,\n type: p.optional && !p.type.includes(\"undefined\") ? `${p.type} | undefined` : p.type,\n }));\n\n const formattedDeps = dependencies.map((dep) => ({\n key: toCamelCase(dep),\n name: dep,\n }));\n\n // Auto-connect standard CRUD use cases to I<Entity>Repository\n const getMatch = ucName.match(/^Get([A-Z][A-Za-z0-9]*)$/);\n const listMatch = ucName.match(/^List([A-Z][A-Za-z0-9]*)$/);\n const createMatch = ucName.match(/^Create([A-Z][A-Za-z0-9]*)$/);\n const updateMatch = ucName.match(/^Update([A-Z][A-Za-z0-9]*)$/);\n const deleteMatch = ucName.match(/^Delete([A-Z][A-Za-z0-9]*)$/);\n\n let callWired: string | null = null;\n\n if (getMatch && getMatch[1]) {\n const entity = getMatch[1];\n const matchingRepo = dependencies.find((d) => d === `I${entity}Repository`);\n if (matchingRepo && inputProps.length === 1 && outputProps.length === 1) {\n const repoKey = toCamelCase(matchingRepo);\n const idKey = inputProps[0]!.name;\n callWired = ` return await this.deps.${repoKey}.Get${entity}ById({\\n ${idKey}: props.${idKey},\\n });`;\n }\n } else if (listMatch && listMatch[1]) {\n const pluralEntity = listMatch[1];\n const singularEntity = toSingular(pluralEntity);\n const matchingRepo = dependencies.find(\n (d) => d === `I${singularEntity}Repository` || d === `I${pluralEntity}Repository`\n );\n if (matchingRepo) {\n const repoKey = toCamelCase(matchingRepo);\n const passProps = inputProps.length > 0 ? \"props\" : \"\";\n callWired = ` return await this.deps.${repoKey}.List${pluralEntity}(${passProps});`;\n }\n } else if (createMatch && createMatch[1]) {\n const entity = createMatch[1];\n const matchingRepo = dependencies.find((d) => d === `I${entity}Repository`);\n if (matchingRepo && inputProps.length === 1 && outputProps.length === 1) {\n const repoKey = toCamelCase(matchingRepo);\n const entityKey = inputProps[0]!.name;\n callWired = ` return await this.deps.${repoKey}.Create${entity}({\\n ${entityKey}: props.${entityKey},\\n });`;\n }\n } else if (updateMatch && updateMatch[1]) {\n const entity = updateMatch[1];\n const matchingRepo = dependencies.find((d) => d === `I${entity}Repository`);\n if (matchingRepo && inputProps.length === 1 && outputProps.length === 1) {\n const repoKey = toCamelCase(matchingRepo);\n const entityKey = inputProps[0]!.name;\n callWired = ` return await this.deps.${repoKey}.Update${entity}({\\n ${entityKey}: props.${entityKey},\\n });`;\n }\n } else if (deleteMatch && deleteMatch[1]) {\n const entity = deleteMatch[1];\n const matchingRepo = dependencies.find((d) => d === `I${entity}Repository`);\n if (matchingRepo && inputProps.length === 1) {\n const repoKey = toCamelCase(matchingRepo);\n const idKey = inputProps[0]!.name;\n callWired = ` return await this.deps.${repoKey}.Delete${entity}({\\n ${idKey}: props.${idKey},\\n });`;\n }\n }\n\n const paramStr = inputProps.length > 0 ? `props: ${inputTypeName}` : `_props?: ${inputTypeName}`;\n\n return renderTemplate(useCaseTemplate, {\n ucName,\n inputTypeName,\n outputTypeName,\n dependencyImports,\n domainImports: Array.from(domainTypesToImport),\n hasInputProps: inputProps.length > 0,\n inputProperties: formattedInputProps,\n hasOutputProps: outputProps.length > 0,\n outputProperties: formattedOutputProps,\n dependencies: formattedDeps,\n hasDependencies: dependencies.length > 0,\n paramStr,\n callWired,\n });\n}\n\nexport function generateUseCaseTestCode(\n useCaseName: string,\n dependencies: string[] = []\n): string {\n const ucName = toPascalCase(useCaseName);\n const stubBindings: Array<{ iface: string; stub: string }> = [];\n\n for (const dep of dependencies) {\n if (/^I[A-Z]/.test(dep)) {\n const stub = toStubName(dep);\n stubBindings.push({ iface: dep, stub });\n }\n }\n\n return renderTemplate(useCaseTestTemplate, {\n ucName,\n stubBindings,\n });\n}\n\nexport function generateUseCase(options: UseCaseOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const ucName = toPascalCase(options.name);\n const targetDir = options.targetDir || path.join(resolveFeaturesDir(projectRoot), options.feature, \"useCases\");\n const filePath = path.join(targetDir, `${ucName}.ts`);\n\n const code = generateUseCaseCode(\n ucName,\n options.dependencies || [],\n options.inputProperties || [],\n options.outputProperties || [],\n options.domainImports || []\n );\n\n files.push(\n writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n\n if (options.includeTest) {\n const testPath = path.join(targetDir, `${ucName}.test.ts`);\n const testCode = generateUseCaseTestCode(ucName, options.dependencies || []);\n files.push(\n writeFileSafely(testPath, testCode, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n }\n\n return files;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { GeneratedFile, HttpHandlerOptions, PropertyDef } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport {\n expressIndexTemplate,\n httpHandlerTemplate,\n renderTemplate,\n} from \"../templates/index.js\";\n\n/**\n * Derives a human-friendly success message for the HTTP presentation layer.\n */\nexport function deriveSuccessMessage(\n handlerName: string,\n useCaseName?: string,\n method: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = \"get\"\n): string {\n const baseName = useCaseName\n ? toPascalCase(useCaseName)\n : toPascalCase(handlerName).replace(/Http$/, \"\");\n\n const createMatch = baseName.match(/^Create([A-Z].*)$/);\n if (createMatch) return `${createMatch[1]} created successfully`;\n\n const getMatch = baseName.match(/^(?:Get|Find)([A-Z].*)$/);\n if (getMatch) return `${getMatch[1]} retrieved successfully`;\n\n const listMatch = baseName.match(/^List([A-Z].*)$/);\n if (listMatch) return `${listMatch[1]} retrieved successfully`;\n\n const updateMatch = baseName.match(/^(?:Update|Modify|Patch)([A-Z].*)$/);\n if (updateMatch) return `${updateMatch[1]} updated successfully`;\n\n const deleteMatch = baseName.match(/^(?:Delete|Remove)([A-Z].*)$/);\n if (deleteMatch) return `${deleteMatch[1]} deleted successfully`;\n\n if (method === \"post\") return `${baseName} created successfully`;\n if (method === \"delete\") return `${baseName} deleted successfully`;\n\n return `${baseName} executed successfully`;\n}\n\nexport function generateHttpHandlerCode(\n handlerName: string,\n method: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = \"get\",\n routeSubPath: string = \"/\",\n useCaseName?: string,\n includeValidation: boolean = false,\n validationSource: \"body\" | \"query\" | \"params\" = \"body\",\n validationFields: PropertyDef[] = [],\n customSuccessMessage?: string\n): string {\n const className = toPascalCase(handlerName);\n const ucName = useCaseName ? toPascalCase(useCaseName) : undefined;\n const ucDepKey = ucName ? toCamelCase(ucName) : undefined;\n const schemaName = `${toCamelCase(className)}Schema`;\n\n const formattedFields = validationFields.map((f) => {\n let zodType = \"z.string()\";\n if (f.type === \"number\") zodType = validationSource === \"query\" ? \"z.coerce.number()\" : \"z.number()\";\n else if (f.type === \"boolean\") zodType = validationSource === \"query\" ? \"z.coerce.boolean()\" : \"z.boolean()\";\n else if (f.type === \"Date\") zodType = \"z.coerce.date()\";\n else if (f.type === \"any\") zodType = \"z.any()\";\n else if (f.type === \"unknown\") zodType = \"z.unknown()\";\n else if (f.type.endsWith(\"[]\")) zodType = \"z.array(z.any())\";\n else if (/^[A-Z]/.test(f.type)) zodType = \"z.record(z.any()) as any\";\n if (f.optional) zodType += \".optional()\";\n return { name: f.name, zodType };\n });\n\n const callArg = includeValidation ? \"parsed.data\" : \"{}\";\n const statusCode = method === \"post\" ? 201 : 200;\n const successMessage = customSuccessMessage || deriveSuccessMessage(className, ucName, method);\n\n return renderTemplate(httpHandlerTemplate, {\n className,\n ucName,\n ucDepKey,\n includeValidation,\n schemaName,\n hasValidationFields: formattedFields.length > 0,\n validationFields: formattedFields,\n method,\n routeSubPath,\n validationSource,\n callArg,\n statusCode,\n successMessage,\n });\n}\n\nexport function generateHttpHandler(options: HttpHandlerOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const className = toPascalCase(options.name);\n const pxDir = path.join(resolveFeaturesDir(projectRoot), options.feature, \"pxExpress\");\n const handlersDir = path.join(pxDir, \"handlers\");\n\n // 1. Ensure pxExpress/index.ts exists\n const pxIndexPath = path.join(pxDir, \"index.ts\");\n if (!fs.existsSync(pxIndexPath)) {\n const featurePath = options.routePrefix || `/${options.feature.toLowerCase()}`;\n const pxIndexContent = renderTemplate(expressIndexTemplate, {\n routePath: featurePath,\n });\n files.push(\n writeFileSafely(pxIndexPath, pxIndexContent, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: false,\n })\n );\n }\n\n // 2. Generate route handler file\n const handlerFilePath = path.join(handlersDir, `${className}.ts`);\n const code = generateHttpHandlerCode(\n className,\n options.method || \"get\",\n options.path || \"/\",\n options.useCaseName,\n Boolean(options.includeValidation),\n options.validationSource || \"body\",\n options.validationFields || [],\n options.successMessage\n );\n\n files.push(\n writeFileSafely(handlerFilePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n\n return files;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { GeneratedFile } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toPascalCase } from \"../utils/formatting.js\";\nimport { diProviderTemplate, renderTemplate } from \"../templates/index.js\";\n\nexport interface ProviderBinding {\n ifaceName: string;\n implName: string;\n ifaceImportPath?: string | undefined;\n implImportPath?: string | undefined;\n}\n\n/**\n * Ensures or updates feature diProvider.ts\n */\nexport function updateOrGenerateDiProvider(\n featureDir: string,\n featureName: string,\n bindings: ProviderBinding[] = [],\n options: {\n projectRoot?: string | undefined;\n overwrite?: boolean | undefined;\n dryRun?: boolean | undefined;\n } = {}\n): GeneratedFile {\n const providerPath = path.join(featureDir, \"diProvider.ts\");\n const pascalFeature = toPascalCase(featureName);\n const providerModuleName = `${pascalFeature}Provider`;\n\n if (fs.existsSync(providerPath) && !options.overwrite) {\n let content = fs.readFileSync(providerPath, \"utf-8\");\n // Strip any legacy ScaffoldProvider export\n content = content.replace(/\\n*export\\s+const\\s+ScaffoldProvider\\s*=[^;]+;?/g, \"\");\n\n for (const b of bindings) {\n const ifaceImp = b.ifaceImportPath || `./domain/${b.ifaceName}.js`;\n const implImp = b.implImportPath || `./infrastructure/${b.implName}.js`;\n\n // Check if import already exists\n if (!content.includes(b.ifaceName)) {\n content = `import { ${b.ifaceName} } from \"${ifaceImp}\";\\n` + content;\n }\n if (!content.includes(b.implName)) {\n content = `import { ${b.implName} } from \"${implImp}\";\\n` + content;\n }\n\n // Check if c.provide is already present\n const provideCall = `c.provide(${b.ifaceName}, ${b.implName});`;\n if (!content.includes(b.ifaceName) || !content.includes(b.implName) || !content.includes(`c.provide(${b.ifaceName}`)) {\n // Find inside provider function\n const match = content.match(/(const\\s+\\w+Provider\\s*:\\s*DIModule\\s*=\\s*\\((?:c|container)[^)]*\\)\\s*=>\\s*\\{)([\\s\\S]*?)(\\}\\;?)/);\n if (match) {\n const prefix = match[1];\n const body = match[2];\n const suffix = match[3];\n const updatedBody = `${body}\\n ${provideCall}\\n`;\n content = content.replace(match[0], `${prefix}${updatedBody}${suffix}`);\n } else {\n // If couldn't match pattern, append provide call before export\n content = content.replace(\n /export default/g,\n `// Register ${b.ifaceName}\\n// c.provide(${b.ifaceName}, ${b.implName});\\n\\nexport default`\n );\n }\n }\n }\n\n return writeFileSafely(providerPath, content, {\n ...options,\n overwrite: true,\n });\n }\n\n // Generate new diProvider.ts using Handlebars template\n const formattedBindings = bindings.map((b) => ({\n ifaceName: b.ifaceName,\n implName: b.implName,\n ifaceImportPath: b.ifaceImportPath || `./domain/${b.ifaceName}.js`,\n implImportPath: b.implImportPath || `./infrastructure/${b.implName}.js`,\n }));\n\n const code = renderTemplate(diProviderTemplate, {\n providerModuleName,\n bindings: formattedBindings,\n });\n\n return writeFileSafely(providerPath, code, options);\n}\n","import path from \"node:path\";\nimport type { CrudOperation, FeatureOptions, GeneratedFile } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toKebabCase, toPascalCase, toPlural, toSingular } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport { generateDomain } from \"./domainGenerator.js\";\nimport { generateInterface } from \"./interfaceGenerator.js\";\nimport { generateInfrastructure } from \"./infraGenerator.js\";\nimport { generateUseCase } from \"./useCaseGenerator.js\";\nimport { generateHttpHandler } from \"./httpHandlerGenerator.js\";\nimport { updateOrGenerateDiProvider } from \"./providerManager.js\";\nimport { expressIndexTemplate, renderTemplate } from \"../templates/index.js\";\n\nexport function generateFeature(options: FeatureOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const rawName = options.name.trim();\n const featureName = toCamelCase(rawName);\n const targetDir = options.targetDir || path.join(resolveFeaturesDir(projectRoot), featureName);\n const routePath = options.routePath || `/${featureName}`;\n\n // Resolve domain entities\n const rawEntities: string[] = [];\n if (options.entityNames && options.entityNames.length > 0) {\n rawEntities.push(...options.entityNames);\n } else if (options.entityName) {\n rawEntities.push(options.entityName);\n } else {\n rawEntities.push(toSingular(rawName));\n }\n\n const entities = Array.from(\n new Set(rawEntities.map((e) => toPascalCase(e.trim())).filter(Boolean))\n );\n if (entities.length === 0) {\n entities.push(toPascalCase(toSingular(rawName)));\n }\n\n // 1. Domain Entities\n if (options.includeDomain !== false) {\n for (const ent of entities) {\n const domainFile = generateDomain({\n name: ent,\n feature: featureName,\n targetDir: path.join(targetDir, \"domain\"),\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n kind: \"interface\",\n properties: [\n { name: \"id\", type: \"string\" },\n { name: \"createdAt\", type: \"Date\" },\n { name: \"updatedAt\", type: \"Date\" },\n ],\n });\n files.push(domainFile);\n }\n }\n\n // 2. Domain Interfaces\n if (options.includeInterface !== false) {\n for (const ent of entities) {\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${ent}Repository`;\n\n const ifaceFile = generateInterface({\n name: ifaceName,\n feature: featureName,\n targetDir: path.join(targetDir, \"domain\"),\n entityName: ent,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n methodsPreset: \"crud\",\n });\n files.push(ifaceFile);\n }\n }\n\n // 3. Infrastructure Stubs\n if (options.includeInfra !== false && options.includeInterface !== false) {\n for (const ent of entities) {\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${ent}Repository`;\n const stubName =\n options.stubName && entities.length === 1\n ? toPascalCase(options.stubName)\n : `Stub${ent}Repository`;\n\n const stubFile = generateInfrastructure({\n name: stubName,\n feature: featureName,\n targetDir: path.join(targetDir, \"infrastructure\"),\n kind: \"stub\",\n implementsInterface: ifaceName,\n entityName: ent,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(stubFile);\n }\n }\n\n // 4. DI Provider\n if (options.includeDiProvider !== false && options.includeInterface !== false && options.includeInfra !== false) {\n const bindings = entities.map((ent) => {\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${ent}Repository`;\n const stubName =\n options.stubName && entities.length === 1\n ? toPascalCase(options.stubName)\n : `Stub${ent}Repository`;\n return { ifaceName, implName: stubName };\n });\n\n const providerFile = updateOrGenerateDiProvider(targetDir, featureName, bindings, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(providerFile);\n }\n\n // 5. Use Cases & Express Presentation\n if (options.includeUseCase !== false) {\n let ops: CrudOperation[] = [];\n if (options.crudOperations) {\n ops = options.crudOperations;\n } else if (options.useCaseName) {\n // Legacy single use case mode\n ops = [];\n } else {\n // Default: full standard CRUD\n ops = [\"create\", \"read\", \"list\", \"update\", \"delete\"];\n }\n\n // Handle legacy single useCaseName if explicitly specified without crudOperations\n if (options.useCaseName && ops.length === 0) {\n const primaryEntity = entities[0]!;\n const entVar = primaryEntity.charAt(0).toLowerCase() + primaryEntity.slice(1);\n const idParam = `${entVar}Id`;\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${primaryEntity}Repository`;\n const ucName = toPascalCase(options.useCaseName);\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: options.includeInterface !== false ? [ifaceName] : [],\n inputProperties: [{ name: idParam, type: \"string\" }],\n outputProperties: [{ name: entVar, type: primaryEntity }],\n domainImports: options.includeDomain !== false ? [primaryEntity] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpName = options.httpHandlerName\n ? toPascalCase(options.httpHandlerName)\n : `${ucName}Http`;\n const httpFiles = generateHttpHandler({\n name: httpName,\n feature: featureName,\n routePrefix: routePath,\n method: \"get\",\n path: `/:${idParam}`,\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"params\",\n validationFields: [{ name: idParam, type: \"string\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n }\n\n // Generate standard CRUD use cases for each entity\n for (let i = 0; i < entities.length; i++) {\n const ent = entities[i]!;\n const entVar = ent.charAt(0).toLowerCase() + ent.slice(1);\n const idParam = `${entVar}Id`;\n const listVar = toPlural(entVar);\n const pluralEntity = toPlural(ent);\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${ent}Repository`;\n const deps = options.includeInterface !== false ? [ifaceName] : [];\n\n // Sub-route for secondary entities: primary uses root, secondary uses '/<entity-plural>'\n const entitySubRoute = i === 0 ? \"\" : `/${toKebabCase(listVar)}`;\n\n for (const op of ops) {\n if (op === \"create\") {\n const ucName = `Create${ent}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [{ name: entVar, type: ent }],\n outputProperties: [{ name: entVar, type: ent }],\n domainImports: options.includeDomain !== false ? [ent] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"post\",\n path: entitySubRoute || \"/\",\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"body\",\n validationFields: [{ name: entVar, type: \"any\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n } else if (op === \"read\") {\n const ucName = `Get${ent}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [{ name: idParam, type: \"string\" }],\n outputProperties: [{ name: entVar, type: ent }],\n domainImports: options.includeDomain !== false ? [ent] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"get\",\n path: entitySubRoute ? `${entitySubRoute}/:${idParam}` : `/:${idParam}`,\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"params\",\n validationFields: [{ name: idParam, type: \"string\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n } else if (op === \"list\") {\n const ucName = `List${pluralEntity}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [\n { name: \"page\", type: \"number\", optional: true },\n { name: \"limit\", type: \"number\", optional: true },\n ],\n outputProperties: [\n { name: listVar, type: `${ent}[]` },\n { name: \"total\", type: \"number\", optional: true },\n { name: \"page\", type: \"number\", optional: true },\n { name: \"limit\", type: \"number\", optional: true },\n ],\n domainImports: options.includeDomain !== false ? [ent] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"get\",\n path: entitySubRoute || \"/\",\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"query\",\n validationFields: [\n { name: \"page\", type: \"number\", optional: true },\n { name: \"limit\", type: \"number\", optional: true },\n ],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n } else if (op === \"update\") {\n const ucName = `Update${ent}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [{ name: entVar, type: ent }],\n outputProperties: [{ name: entVar, type: ent }],\n domainImports: options.includeDomain !== false ? [ent] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"put\",\n path: entitySubRoute ? `${entitySubRoute}/:${idParam}` : `/:${idParam}`,\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"body\",\n validationFields: [{ name: entVar, type: \"any\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n } else if (op === \"delete\") {\n const ucName = `Delete${ent}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [{ name: idParam, type: \"string\" }],\n outputProperties: [{ name: \"success\", type: \"boolean\" }],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"delete\",\n path: entitySubRoute ? `${entitySubRoute}/:${idParam}` : `/:${idParam}`,\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"params\",\n validationFields: [{ name: idParam, type: \"string\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n }\n }\n }\n }\n\n // 6. Custom Use Cases\n if (options.customUseCases && options.customUseCases.length > 0) {\n for (const customUc of options.customUseCases) {\n const ucName = toPascalCase(customUc.name);\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: customUc.dependencies || [],\n inputProperties: customUc.inputProperties || [],\n outputProperties: customUc.outputProperties || [],\n domainImports: customUc.domainImports || [],\n includeTest: customUc.includeTest !== false && options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false && customUc.createHttpHandler) {\n const handlerName = `${ucName}Http`;\n const httpFiles = generateHttpHandler({\n name: handlerName,\n feature: featureName,\n routePrefix: routePath,\n method: customUc.httpMethod || \"post\",\n path: customUc.httpPath || `/${toKebabCase(ucName)}`,\n useCaseName: ucName,\n includeValidation: (customUc.inputProperties && customUc.inputProperties.length > 0) || false,\n validationSource:\n customUc.validationSource || (customUc.httpMethod === \"get\" ? \"query\" : \"body\"),\n validationFields: customUc.validationFields || customUc.inputProperties || [],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n }\n }\n\n // 7. Ensure pxExpress/index.ts is generated if Express presentation is included\n if (options.includeExpress !== false) {\n const pxDir = path.join(targetDir, \"pxExpress\");\n const pxIndexPath = path.join(pxDir, \"index.ts\");\n if (!files.some((f) => f.absolutePath === pxIndexPath)) {\n const pxIndexContent = renderTemplate(expressIndexTemplate, { routePath });\n files.push(\n writeFileSafely(pxIndexPath, pxIndexContent, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: false,\n })\n );\n }\n }\n\n // Deduplicate files by absolutePath\n const uniqueFiles: GeneratedFile[] = [];\n const seen = new Set<string>();\n for (const f of files) {\n if (!seen.has(f.absolutePath)) {\n seen.add(f.absolutePath);\n uniqueFiles.push(f);\n }\n }\n\n return uniqueFiles;\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { PropertyDef } from \"../types/index.js\";\n\nexport class PromptCancelledError extends Error {\n constructor(message = \"Operation cancelled.\") {\n super(message);\n this.name = \"PromptCancelledError\";\n }\n}\n\nexport function handleCancel<T>(result: T): Exclude<T, symbol> {\n if (p.isCancel(result)) {\n p.cancel(\"Operation cancelled.\");\n throw new PromptCancelledError();\n }\n return result as Exclude<T, symbol>;\n}\n\nexport function printBanner(): void {\n console.log(\"\");\n p.intro(pc.bgCyan(pc.black(\" @solid-stack/mason \")));\n}\n\n/**\n * Interactive prompt to collect properties (name & type)\n */\nexport async function promptProperties(\n options: {\n message?: string | undefined;\n defaults?: PropertyDef[] | undefined;\n } = {}\n): Promise<PropertyDef[]> {\n const properties: PropertyDef[] = options.defaults ? [...options.defaults] : [];\n\n if (properties.length > 0) {\n const summary = properties.map((p) => `${p.name}: ${p.type}${p.optional ? \"?\" : \"\"}`).join(\", \");\n p.log.info(pc.dim(`Pre-configured fields: ${summary}`));\n\n const addMore = handleCancel(\n await p.confirm({\n message: \"Would you like to add custom fields/properties?\",\n initialValue: false,\n })\n );\n if (!addMore) {\n return properties;\n }\n }\n\n p.log.info(pc.cyan(\"Enter properties (leave name blank when finished):\"));\n\n while (true) {\n const name = handleCancel(\n await p.text({\n message: \"Property name (or press Enter to finish):\",\n placeholder: \"e.g. title, email, status\",\n })\n );\n\n if (!name || !name.trim()) {\n break;\n }\n\n const type = handleCancel(\n await p.select({\n message: `Type for property \"${name.trim()}\":`,\n options: [\n { value: \"string\", label: \"string\" },\n { value: \"number\", label: \"number\" },\n { value: \"boolean\", label: \"boolean\" },\n { value: \"Date\", label: \"Date\" },\n { value: \"string[]\", label: \"string[]\" },\n { value: \"Record<string, unknown>\", label: \"Record<string, unknown>\" },\n { value: \"custom\", label: \"Custom type...\" },\n ],\n initialValue: \"string\",\n })\n );\n\n let finalType = type;\n if (type === \"custom\") {\n finalType = handleCancel(\n await p.text({\n message: `Enter custom type for \"${name.trim()}\":`,\n placeholder: \"e.g. UserRole, string | null\",\n validate: (val) => (val && val.trim() ? undefined : \"Type cannot be empty\"),\n })\n );\n }\n\n const optional = handleCancel(\n await p.confirm({\n message: `Is \"${name.trim()}\" optional?`,\n initialValue: false,\n })\n );\n\n properties.push({\n name: name.trim(),\n type: finalType.trim(),\n optional,\n });\n\n p.log.success(\n pc.green(`Added: ${name.trim()}${optional ? \"?\" : \"\"}: ${finalType.trim()}`)\n );\n }\n\n return properties;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { CrudOperation, CustomUseCaseConfig, FeatureOptions, PropertyDef } from \"../types/index.js\";\nimport { generateFeature } from \"../core/featureGenerator.js\";\nimport { handleCancel, promptProperties } from \"../utils/prompts.js\";\nimport { printGeneratedFiles, writeFileSafely } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport { getEffectiveMode } from \"../utils/config.js\";\nimport { toCamelCase, toKebabCase, toPascalCase, toSingular } from \"../utils/formatting.js\";\n\nexport async function runFeatureCommand(\n featureNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const isRegistry = getEffectiveMode(projectRoot, flags) === \"registry\";\n\n let name = featureNameArg?.trim();\n if (!name && flags.yes) {\n name = \"feature\";\n }\n\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"What is the feature name?\",\n placeholder: \"e.g. users, auth, orders, billing\",\n validate: (val) => {\n if (!val || !val.trim()) return \"Feature name cannot be empty.\";\n return undefined;\n },\n })\n ).trim();\n }\n\n const normalizedName = toCamelCase(name);\n const baseFeaturesDir = resolveFeaturesDir(projectRoot, flags);\n const defaultDir = path.relative(projectRoot, path.join(baseFeaturesDir, normalizedName));\n\n let targetDirRel = defaultDir;\n if (!flags.yes && !flags.target && !flags.dest) {\n targetDirRel = handleCancel(\n await p.text({\n message: \"Target directory for the feature:\",\n initialValue: defaultDir,\n defaultValue: defaultDir,\n })\n ).trim();\n }\n\n const targetDir = flags.dest\n ? path.resolve(projectRoot, flags.dest)\n : flags.target\n ? path.resolve(projectRoot, flags.target)\n : path.resolve(projectRoot, targetDirRel);\n\n let includeExpress = flags.express !== undefined ? Boolean(flags.express) : true;\n let routePath = `/${normalizedName}`;\n let includeDomain = true;\n let includeInterface = true;\n let includeInfra = true;\n let includeUseCase = true;\n let includeTests = true;\n let includeDiProvider = true;\n\n const defaultEntity = toPascalCase(toSingular(normalizedName));\n let entityNames: string[] = [defaultEntity];\n let crudOperations: CrudOperation[] = [\"create\", \"read\", \"list\", \"update\", \"delete\"];\n const customUseCases: CustomUseCaseConfig[] = [];\n\n if (!flags.yes) {\n includeExpress = handleCancel(\n await p.confirm({\n message: \"Include Express Presentation layer (pxExpress routes & handlers)?\",\n initialValue: true,\n })\n );\n\n if (includeExpress) {\n routePath = handleCancel(\n await p.text({\n message: \"Express route prefix:\",\n initialValue: `/${normalizedName}`,\n defaultValue: `/${normalizedName}`,\n })\n ).trim();\n }\n\n includeDomain = handleCancel(\n await p.confirm({\n message: \"Include Domain Entity/Entities?\",\n initialValue: true,\n })\n );\n\n if (includeDomain) {\n const domainInput = handleCancel(\n await p.text({\n message: \"Domain entity name(s) (comma-separated):\",\n initialValue: defaultEntity,\n defaultValue: defaultEntity,\n placeholder: `e.g. ${defaultEntity}, ${defaultEntity}Item`,\n validate: (val) => {\n if (!val || !val.trim()) return \"Please enter at least one domain entity name.\";\n return undefined;\n },\n })\n ).trim();\n\n entityNames = domainInput\n .split(\",\")\n .map((s) => toPascalCase(s.trim()))\n .filter(Boolean);\n\n if (entityNames.length === 0) {\n entityNames = [defaultEntity];\n }\n } else {\n entityNames = [defaultEntity];\n }\n\n includeInterface = handleCancel(\n await p.confirm({\n message: `Include Domain Repository interface(s) for ${entityNames.join(\", \")}?`,\n initialValue: true,\n })\n );\n\n if (includeInterface) {\n includeInfra = handleCancel(\n await p.confirm({\n message: `Include Infrastructure Stub implementation(s) for ${entityNames.join(\", \")}?`,\n initialValue: true,\n })\n );\n }\n\n includeUseCase = handleCancel(\n await p.confirm({\n message: \"Include Domain Use Cases?\",\n initialValue: true,\n })\n );\n\n if (includeUseCase) {\n const crudChoices = [\n { value: \"create\", label: \"Create (Create<Entity>)\", hint: \"POST\" },\n { value: \"read\", label: \"Read One (Get<Entity>)\", hint: \"GET /:id\" },\n { value: \"list\", label: \"List with Pagination (List<Entity>s)\", hint: \"GET / (query: page, limit)\" },\n { value: \"update\", label: \"Update (Update<Entity>)\", hint: \"PUT /:id\" },\n { value: \"delete\", label: \"Delete (Delete<Entity>)\", hint: \"DELETE /:id\" },\n ];\n\n crudOperations = handleCancel(\n await p.multiselect({\n message: \"Select standard CRUD use cases to generate:\",\n options: crudChoices,\n initialValues: [\"create\", \"read\", \"list\", \"update\", \"delete\"],\n required: false,\n })\n ) as CrudOperation[];\n\n includeTests = handleCancel(\n await p.confirm({\n message: \"Generate Vitest unit tests for use cases?\",\n initialValue: true,\n })\n );\n\n const wantCustom = handleCancel(\n await p.confirm({\n message: \"Do you want to add any custom use cases to this feature?\",\n initialValue: false,\n })\n );\n\n if (wantCustom) {\n let addMore = true;\n const availableIfaces = entityNames.map((e) => `I${e}Repository`);\n\n while (addMore) {\n const customName = handleCancel(\n await p.text({\n message: \"Custom Use Case name:\",\n placeholder: \"e.g. ResetPassword, VerifyEmail, AssignRole\",\n validate: (v) => (v && v.trim() ? undefined : \"Use Case name cannot be empty\"),\n })\n ).trim();\n\n const customUcName = toPascalCase(customName);\n\n let selectedDeps: string[] = [];\n if (availableIfaces.length > 0) {\n selectedDeps = handleCancel(\n await p.multiselect({\n message: `Select domain interfaces to inject into ${customUcName}:`,\n options: availableIfaces.map((i) => ({ value: i, label: i })),\n required: false,\n })\n ) as string[];\n }\n\n let customInputProps: PropertyDef[] = [];\n const hasInput = handleCancel(\n await p.confirm({\n message: `Does ${customUcName} accept input arguments?`,\n initialValue: true,\n })\n );\n if (hasInput) {\n customInputProps = await promptProperties({\n message: `Add input properties for ${customUcName}:`,\n });\n }\n\n let customOutputProps: PropertyDef[] = [];\n const hasCustomOutput = handleCancel(\n await p.confirm({\n message: `Does ${customUcName} return custom output data?`,\n initialValue: false,\n })\n );\n if (hasCustomOutput) {\n customOutputProps = await promptProperties({\n message: `Add output properties for ${customUcName}:`,\n });\n }\n\n const customIncludeTest = handleCancel(\n await p.confirm({\n message: `Generate Vitest unit test for ${customUcName}?`,\n initialValue: true,\n })\n );\n\n let customCreateHttp = false;\n let customHttpMethod: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = \"post\";\n let customHttpPath = `/${toKebabCase(customUcName)}`;\n\n if (includeExpress) {\n customCreateHttp = handleCancel(\n await p.confirm({\n message: `Generate a matching ExpressRoute HTTP handler for ${customUcName}?`,\n initialValue: true,\n })\n );\n\n if (customCreateHttp) {\n customHttpMethod = handleCancel(\n await p.select({\n message: \"HTTP method for route:\",\n options: [\n { value: \"post\", label: \"POST\" },\n { value: \"get\", label: \"GET\" },\n { value: \"put\", label: \"PUT\" },\n { value: \"patch\", label: \"PATCH\" },\n { value: \"delete\", label: \"DELETE\" },\n ],\n initialValue: \"post\",\n })\n ) as any;\n\n customHttpPath = handleCancel(\n await p.text({\n message: \"Route subpath (relative to feature prefix):\",\n initialValue: `/${toKebabCase(customUcName)}`,\n defaultValue: `/${toKebabCase(customUcName)}`,\n })\n ).trim();\n }\n }\n\n customUseCases.push({\n name: customUcName,\n dependencies: selectedDeps,\n inputProperties: customInputProps,\n outputProperties: customOutputProps,\n includeTest: customIncludeTest,\n createHttpHandler: customCreateHttp,\n httpMethod: customHttpMethod,\n httpPath: customHttpPath,\n validationSource: customHttpMethod === \"get\" ? \"query\" : \"body\",\n validationFields: customInputProps,\n });\n\n addMore = handleCancel(\n await p.confirm({\n message: \"Add another custom use case?\",\n initialValue: false,\n })\n );\n }\n }\n }\n\n includeDiProvider = handleCancel(\n await p.confirm({\n message: \"Generate / update feature DI provider (diProvider.ts)?\",\n initialValue: true,\n })\n );\n } else {\n if (flags.domainNames) {\n entityNames = String(flags.domainNames)\n .split(\",\")\n .map((s) => toPascalCase(s.trim()))\n .filter(Boolean);\n } else {\n entityNames = [defaultEntity];\n }\n }\n\n const s = p.spinner();\n s.start(`Generating feature '${pc.cyan(normalizedName)}'...`);\n\n const options: FeatureOptions = {\n name: normalizedName,\n projectRoot,\n targetDir,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n includeExpress,\n routePath,\n includeDomain,\n entityNames,\n includeInterface,\n includeInfra,\n includeUseCase,\n crudOperations,\n customUseCases,\n includeTests,\n includeDiProvider,\n };\n\n const files = generateFeature(options);\n\n if (isRegistry) {\n const registryPath = path.join(targetDir, \"registry.json\");\n if (!fs.existsSync(registryPath)) {\n const manifest = {\n name: toKebabCase(normalizedName),\n type: \"feature\",\n description: flags.description || `${normalizedName} feature module`,\n version: \"1.0.0\",\n dependencies: {\n npm: includeExpress ? [\"@solid-stack/agnos-express\", \"express\"] : [],\n shared: [],\n features: [],\n },\n files: [],\n };\n const content = JSON.stringify(manifest, null, 2) + \"\\n\";\n const genFile = writeFileSafely(registryPath, content, {\n projectRoot,\n overwrite: options.overwrite,\n dryRun: options.dryRun,\n });\n files.push(genFile);\n }\n }\n\n s.stop(\"Feature scaffolded successfully!\");\n\n printGeneratedFiles(files, options.dryRun);\n\n p.outro(\n pc.green(\n `✓ Feature '${normalizedName}' initialized in ${path.relative(projectRoot, targetDir)} (uncommitted, unregistered)`\n )\n );\n}\n","import path from \"node:path\";\nimport type { GeneratedFile } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toKebabCase, toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveSharedDir } from \"../utils/project.js\";\n\nexport interface SharedOptions {\n name: string;\n description?: string;\n projectRoot?: string;\n targetDir?: string;\n dryRun?: boolean;\n overwrite?: boolean;\n includeStub?: boolean;\n isRegistry?: boolean;\n}\n\nexport function generateShared(options: SharedOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const rawName = options.name.trim();\n const pascalName = toPascalCase(rawName);\n const camelName = toCamelCase(rawName);\n const kebabName = toKebabCase(rawName);\n\n const targetDir = options.targetDir || path.join(resolveSharedDir(projectRoot), kebabName);\n const fileDefs: Array<{ absolutePath: string; content: string }> = [];\n\n // 1. Root Injectable facade: <PascalName>.ts\n const facadeContent = `import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport { I${pascalName}Engine } from \"./ports/I${pascalName}Engine.js\";\n\n@MakeInjectable\nexport class ${pascalName} {\n public static deps = { ${camelName}Engine: I${pascalName}Engine };\n constructor(public readonly deps: DepsType<typeof ${pascalName}.deps>) {}\n}\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, `${pascalName}.ts`),\n content: facadeContent,\n });\n\n // 2. Port Interface: ports/I<PascalName>Engine.ts\n const portContent = `export abstract class I${pascalName}Engine {\n // Define abstract port contracts for ${pascalName} here\n}\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, \"ports\", `I${pascalName}Engine.ts`),\n content: portContent,\n });\n\n // 3. Concrete Infrastructure: infrastructure/Default<PascalName>Engine.ts\n const concreteContent = `import { MakeInjectable } from \"@solid-stack/di\";\nimport { I${pascalName}Engine } from \"../ports/I${pascalName}Engine.js\";\n\n@MakeInjectable\nexport class Default${pascalName}Engine implements I${pascalName}Engine {\n // Default concrete implementation for production\n}\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, \"infrastructure\", `Default${pascalName}Engine.ts`),\n content: concreteContent,\n });\n\n // 4. Stub Infrastructure (if requested or by default): infrastructure/Stub<PascalName>Engine.ts\n if (options.includeStub !== false) {\n const stubContent = `import { MakeInjectable } from \"@solid-stack/di\";\nimport { I${pascalName}Engine } from \"../ports/I${pascalName}Engine.js\";\n\n@MakeInjectable\nexport class Stub${pascalName}Engine implements I${pascalName}Engine {\n // In-memory or stub implementation for testing\n}\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, \"infrastructure\", `Stub${pascalName}Engine.ts`),\n content: stubContent,\n });\n }\n\n // 5. DI Provider: diProvider.ts\n const providerContent = `import type { Container } from \"@solid-stack/di\";\nimport { I${pascalName}Engine } from \"./ports/I${pascalName}Engine.js\";\nimport { Default${pascalName}Engine } from \"./infrastructure/Default${pascalName}Engine.js\";\n\nexport const diProvider = (c: Container): void => {\n c.provide(I${pascalName}Engine, Default${pascalName}Engine);\n};\n\nexport default diProvider;\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, \"diProvider.ts\"),\n content: providerContent,\n });\n\n // 6. If registry mode, stamp base registry.json\n if (options.isRegistry) {\n const registryManifest = {\n name: kebabName,\n type: \"shared\",\n description: options.description || `${kebabName} shared module`,\n version: \"1.0.0\",\n dependencies: {\n npm: [],\n shared: [],\n features: [],\n },\n files: [],\n };\n fileDefs.push({\n absolutePath: path.join(targetDir, \"registry.json\"),\n content: JSON.stringify(registryManifest, null, 2) + \"\\n\",\n });\n }\n\n // Generate files using writeFileSafely\n for (const def of fileDefs) {\n const genFile = writeFileSafely(def.absolutePath, def.content, {\n projectRoot,\n overwrite: options.overwrite,\n dryRun: options.dryRun,\n });\n files.push(genFile);\n }\n\n return files;\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { generateShared } from \"../core/sharedGenerator.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, resolveSharedDir } from \"../utils/project.js\";\nimport { getEffectiveMode } from \"../utils/config.js\";\nimport { toKebabCase } from \"../utils/formatting.js\";\n\nexport async function runSharedCommand(\n sharedNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const isRegistry = getEffectiveMode(projectRoot, flags) === \"registry\";\n\n let name = sharedNameArg?.trim();\n if (!name && flags.yes) {\n name = \"shared\";\n }\n\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"What is the shared module name?\",\n placeholder: \"e.g. hasher, time, uuid, cache, logger\",\n validate: (val) => {\n if (!val || !val.trim()) return \"Shared module name cannot be empty.\";\n return undefined;\n },\n })\n ).trim();\n }\n\n const normalizedName = toKebabCase(name);\n const baseSharedDir = resolveSharedDir(projectRoot, flags);\n const defaultDir = path.relative(projectRoot, path.join(baseSharedDir, normalizedName));\n\n let targetDirRel = defaultDir;\n if (!flags.yes && !flags.target && !flags.dest) {\n targetDirRel = handleCancel(\n await p.text({\n message: \"Target directory for the shared module:\",\n initialValue: defaultDir,\n defaultValue: defaultDir,\n })\n ).trim();\n }\n\n const targetDir = flags.dest\n ? path.resolve(projectRoot, flags.dest)\n : flags.target\n ? path.resolve(projectRoot, flags.target)\n : path.resolve(projectRoot, targetDirRel);\n\n let description = flags.description || \"\";\n let includeStub = true;\n\n if (!flags.yes) {\n description = handleCancel(\n await p.text({\n message: \"Module description (optional):\",\n placeholder: \"e.g. In-memory caching and Redis port abstraction\",\n initialValue: \"\",\n })\n ).trim();\n\n includeStub = handleCancel(\n await p.confirm({\n message: \"Include stub implementation in infrastructure/?\",\n initialValue: true,\n })\n );\n }\n\n const s = p.spinner();\n s.start(`Generating shared module '${pc.cyan(normalizedName)}'...`);\n\n const files = generateShared({\n name: normalizedName,\n description,\n projectRoot,\n targetDir,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n includeStub,\n isRegistry,\n });\n\n s.stop(\"Shared module generated successfully!\");\n printGeneratedFiles(files, Boolean(flags.dryRun));\n\n p.outro(\n pc.green(\n `✓ Shared module '${normalizedName}' initialized in ${path.relative(projectRoot, targetDir)} (uncommitted, unregistered)`\n )\n );\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { PropertyDef, UseCaseOptions } from \"../types/index.js\";\nimport { generateUseCase } from \"../core/useCaseGenerator.js\";\nimport { generateHttpHandler } from \"../core/httpHandlerGenerator.js\";\nimport { handleCancel, promptProperties } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listDomainInterfaces, listExistingFeatures } from \"../utils/project.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\n\nexport async function runUseCaseCommand(\n useCaseNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let feature = flags.feature?.trim();\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n feature = toCamelCase(feature);\n\n let name = useCaseNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Use Case name:\",\n placeholder: \"e.g. CreateUser, GetUser, CancelOrder\",\n validate: (v) => (v && v.trim() ? undefined : \"Use Case name cannot be empty\"),\n })\n ).trim();\n }\n\n const ucName = toPascalCase(name);\n\n // Discover feature domain interfaces\n const availableInterfaces = listDomainInterfaces(projectRoot, feature);\n let selectedDeps: string[] = [];\n\n if (!flags.yes && availableInterfaces.length > 0) {\n const multiOptions = availableInterfaces.map((i) => ({\n value: i.name,\n label: i.name,\n }));\n\n selectedDeps = handleCancel(\n await p.multiselect({\n message: \"Select domain interfaces to inject into use case:\",\n options: multiOptions,\n required: false,\n })\n ) as string[];\n }\n\n let inputProps: PropertyDef[] = [];\n let outputProps: PropertyDef[] = [];\n let includeTest = true;\n let createHttp = false;\n let httpMethod: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = \"post\";\n let httpPath = \"/\";\n\n if (!flags.yes) {\n const hasInput = handleCancel(\n await p.confirm({\n message: \"Does this use case accept input arguments?\",\n initialValue: true,\n })\n );\n\n if (hasInput) {\n inputProps = await promptProperties({\n message: \"Add input properties for this use case:\",\n });\n }\n\n const hasCustomOutput = handleCancel(\n await p.confirm({\n message: \"Does this use case return custom output data?\",\n initialValue: false,\n })\n );\n\n if (hasCustomOutput) {\n outputProps = await promptProperties({\n message: \"Add output properties for this use case:\",\n });\n }\n\n includeTest = handleCancel(\n await p.confirm({\n message: \"Generate Vitest unit test skeleton (.test.ts)?\",\n initialValue: true,\n })\n );\n\n createHttp = handleCancel(\n await p.confirm({\n message: \"Generate a matching ExpressRoute HTTP handler?\",\n initialValue: false,\n })\n );\n\n if (createHttp) {\n httpMethod = handleCancel(\n await p.select({\n message: \"HTTP method for route:\",\n options: [\n { value: \"post\", label: \"POST\" },\n { value: \"get\", label: \"GET\" },\n { value: \"put\", label: \"PUT\" },\n { value: \"patch\", label: \"PATCH\" },\n { value: \"delete\", label: \"DELETE\" },\n ],\n initialValue: \"post\",\n })\n ) as any;\n\n httpPath = handleCancel(\n await p.text({\n message: \"Route subpath (relative to feature prefix):\",\n initialValue: \"/\",\n defaultValue: \"/\",\n })\n ).trim();\n }\n }\n\n const s = p.spinner();\n s.start(`Generating use case '${pc.cyan(ucName)}'...`);\n\n const options: UseCaseOptions = {\n name: ucName,\n feature,\n dependencies: selectedDeps,\n inputProperties: inputProps,\n outputProperties: outputProps,\n includeTest,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const files = generateUseCase(options);\n\n if (createHttp) {\n const handlerName = `${ucName}Http`;\n const httpFiles = generateHttpHandler({\n name: handlerName,\n feature,\n method: httpMethod,\n path: httpPath,\n useCaseName: ucName,\n includeValidation: inputProps.length > 0,\n validationSource: httpMethod === \"get\" ? \"query\" : \"body\",\n validationFields: inputProps,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n });\n files.push(...httpFiles);\n }\n\n s.stop(\"Use case generated successfully!\");\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`Use case '${ucName}' created in feature '${feature}'!`));\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { DomainOptions, PropertyDef } from \"../types/index.js\";\nimport { generateDomain } from \"../core/domainGenerator.js\";\nimport { handleCancel, promptProperties } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listExistingFeatures } from \"../utils/project.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\n\nexport async function runDomainCommand(\n domainNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let feature = flags.feature?.trim();\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n feature = toCamelCase(feature);\n\n let name = domainNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Domain model / entity name:\",\n placeholder: \"e.g. User, Order, Product, Address\",\n validate: (v) => (v && v.trim() ? undefined : \"Domain name cannot be empty\"),\n })\n ).trim();\n }\n\n const entityName = toPascalCase(name);\n\n let kind: \"interface\" | \"class\" | \"valueObject\" = \"interface\";\n let properties: PropertyDef[] = [];\n\n if (!flags.yes) {\n kind = handleCancel(\n await p.select({\n message: \"Select domain model type:\",\n options: [\n { value: \"interface\", label: \"TypeScript Interface (pure data structure)\" },\n { value: \"class\", label: \"Entity Class (with constructor & properties)\" },\n { value: \"valueObject\", label: \"Value Object (immutable domain object with equals)\" },\n ],\n initialValue: \"interface\",\n })\n ) as any;\n\n const defaultProps: PropertyDef[] = [\n { name: \"id\", type: \"string\" },\n { name: \"createdAt\", type: \"Date\" },\n { name: \"updatedAt\", type: \"Date\" },\n ];\n\n properties = await promptProperties({\n defaults: kind === \"valueObject\" ? [{ name: \"value\", type: \"string\" }] : defaultProps,\n });\n }\n\n const s = p.spinner();\n s.start(`Generating domain model '${pc.cyan(entityName)}'...`);\n\n const options: DomainOptions = {\n name: entityName,\n feature,\n kind,\n properties,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const file = generateDomain(options);\n s.stop(\"Domain model generated successfully!\");\n\n printGeneratedFiles([file], options.dryRun);\n p.outro(pc.green(`Domain model '${entityName}' created in feature '${feature}'!`));\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { GeneratedFile, InfrastructureOptions } from \"../types/index.js\";\nimport { generateInfrastructure } from \"../core/infraGenerator.js\";\nimport { updateOrGenerateDiProvider } from \"../core/providerManager.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listDomainEntities, listDomainInterfaces, listExistingFeatures, resolveFeaturesDir } from \"../utils/project.js\";\nimport { ensureInterfacePrefix, removeInterfacePrefix, toCamelCase, toPascalCase, toStubName } from \"../utils/formatting.js\";\n\nexport async function runInfrastructureCommand(\n classNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let scope: \"feature\" | \"global\" = flags.global ? \"global\" : \"feature\";\n let feature = flags.feature?.trim();\n\n if (!flags.yes && !flags.global && !flags.feature) {\n scope = handleCancel(\n await p.select({\n message: \"Where should this infrastructure implementation be placed?\",\n options: [\n { value: \"feature\", label: \"Feature-level (features/<feature>/infrastructure)\" },\n { value: \"global\", label: \"Global / Core (infrastructure/)\" },\n ],\n initialValue: \"feature\",\n })\n ) as any;\n }\n\n if (scope === \"feature\" && !feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n if (feature) {\n feature = toCamelCase(feature);\n }\n\n let name = classNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Infrastructure class name:\",\n placeholder: \"e.g. StubUserRepository, PostgresUserRepository, S3FileStorage\",\n validate: (v) => (v && v.trim() ? undefined : \"Class name cannot be empty\"),\n })\n ).trim();\n }\n\n const className = toPascalCase(name);\n\n let kind: \"stub\" | \"concrete\" = flags.kind\n ? (flags.kind === \"stub\" ? \"stub\" : \"concrete\")\n : (className.startsWith(\"Stub\") ? \"stub\" : \"concrete\");\n let implementsInterface: string | undefined = flags.interface?.trim() || undefined;\n let registerInProvider = false;\n\n if (scope === \"feature\" && feature && !implementsInterface) {\n const interfaces = listDomainInterfaces(projectRoot, feature);\n if (!flags.yes) {\n if (interfaces.length > 0) {\n const match = interfaces.find((i) =>\n className.toLowerCase().includes(removeInterfacePrefix(i.name).toLowerCase())\n );\n const ifaceChoice = handleCancel(\n await p.select({\n message: \"Does this class implement a domain interface or abstract class?\",\n options: [\n ...interfaces.map((i) => ({ value: i.name, label: i.name })),\n { value: \"__custom__\", label: \"✏️ Enter custom interface or abstract class...\" },\n { value: \"__none__\", label: \"None / Standalone\" },\n ],\n initialValue: match?.name || interfaces[0]?.name,\n })\n );\n\n if (ifaceChoice === \"__custom__\") {\n implementsInterface = handleCancel(\n await p.text({\n message: \"Enter interface or abstract class name:\",\n placeholder: \"e.g. IUserRepository, BaseStorageAdapter\",\n validate: (v) => (v && v.trim() ? undefined : \"Name cannot be empty\"),\n })\n ).trim();\n } else if (ifaceChoice !== \"__none__\") {\n implementsInterface = ifaceChoice;\n }\n } else {\n const wantImpl = handleCancel(\n await p.confirm({\n message: \"Does this class implement a domain interface or abstract class?\",\n initialValue: false,\n })\n );\n if (wantImpl) {\n implementsInterface = handleCancel(\n await p.text({\n message: \"Enter interface or abstract class name:\",\n placeholder: \"e.g. IUserRepository, BaseStorageAdapter\",\n validate: (v) => (v && v.trim() ? undefined : \"Name cannot be empty\"),\n })\n ).trim();\n }\n }\n } else if (flags.yes && interfaces.length > 0) {\n const match = interfaces.find((i) =>\n className.toLowerCase().includes(removeInterfacePrefix(i.name).toLowerCase())\n );\n if (match) {\n implementsInterface = match.name;\n }\n }\n } else if (scope === \"global\" && !implementsInterface && !flags.yes) {\n const allInterfaces = listDomainInterfaces(projectRoot);\n if (allInterfaces.length > 0) {\n const ifaceChoice = handleCancel(\n await p.select({\n message: \"Does this class implement an interface or abstract class?\",\n options: [\n ...allInterfaces.map((i) => ({ value: i.name, label: `${i.name} (${i.feature})` })),\n { value: \"__custom__\", label: \"✏️ Enter custom interface or abstract class...\" },\n { value: \"__none__\", label: \"None / Standalone\" },\n ],\n initialValue: \"__none__\",\n })\n );\n\n if (ifaceChoice === \"__custom__\") {\n implementsInterface = handleCancel(\n await p.text({\n message: \"Enter interface or abstract class name:\",\n placeholder: \"e.g. IAuthRepository\",\n validate: (v) => (v && v.trim() ? undefined : \"Name cannot be empty\"),\n })\n ).trim();\n } else if (ifaceChoice !== \"__none__\") {\n implementsInterface = ifaceChoice;\n }\n }\n }\n\n if (!flags.yes && !flags.kind) {\n kind = handleCancel(\n await p.select({\n message: \"Select implementation kind:\",\n options: [\n { value: \"stub\", label: \"In-Memory Stub (with in-memory store and test helper methods)\" },\n { value: \"concrete\", label: \"Concrete Adapter / Service Skeleton (@MakeInjectable)\" },\n ],\n initialValue: kind,\n })\n ) as any;\n\n if (scope === \"feature\" && feature && implementsInterface) {\n registerInProvider = handleCancel(\n await p.confirm({\n message: \"Register this implementation in feature diProvider.ts?\",\n initialValue: true,\n })\n );\n }\n } else if (flags.yes && scope === \"feature\" && feature && implementsInterface) {\n registerInProvider = !flags.noProvider;\n }\n\n const s = p.spinner();\n s.start(`Generating infrastructure class '${pc.cyan(className)}'...`);\n\n const files: GeneratedFile[] = [];\n\n const options: InfrastructureOptions = {\n name: className,\n feature,\n scope,\n kind,\n implementsInterface,\n registerInProvider,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const infraFile = generateInfrastructure(options);\n files.push(infraFile);\n\n if (registerInProvider && scope === \"feature\" && feature && implementsInterface) {\n const featureDir = path.join(resolveFeaturesDir(projectRoot), feature);\n const providerFile = updateOrGenerateDiProvider(\n featureDir,\n feature,\n [\n {\n ifaceName: implementsInterface,\n implName: className,\n },\n ],\n {\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n }\n );\n files.push(providerFile);\n }\n\n s.stop(\"Infrastructure class generated successfully!\");\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`Infrastructure class '${className}' created!`));\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { GeneratedFile, InterfaceOptions } from \"../types/index.js\";\nimport { generateInterface } from \"../core/interfaceGenerator.js\";\nimport { generateInfrastructure } from \"../core/infraGenerator.js\";\nimport { updateOrGenerateDiProvider } from \"../core/providerManager.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listDomainEntities, listExistingFeatures, resolveFeaturesDir } from \"../utils/project.js\";\nimport { ensureInterfacePrefix, removeInterfacePrefix, toCamelCase, toPascalCase, toStubName } from \"../utils/formatting.js\";\n\nexport async function runInterfaceCommand(\n interfaceNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let feature = flags.feature?.trim();\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n feature = toCamelCase(feature);\n\n let name = interfaceNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Domain interface name:\",\n placeholder: \"e.g. IUserRepository, IPaymentService\",\n validate: (v) => (v && v.trim() ? undefined : \"Interface name cannot be empty\"),\n })\n ).trim();\n }\n\n const ifaceName = ensureInterfacePrefix(name);\n\n // Discover existing entities in domain\n const existingEntities = listDomainEntities(projectRoot, feature);\n const fallbackEntity = existingEntities.length > 0\n ? (existingEntities.find((e) => ifaceName.toLowerCase().includes(e.name.toLowerCase()))?.name || existingEntities[0]?.name)\n : removeInterfacePrefix(ifaceName).replace(/Repository$|Service$/, \"\");\n\n let entityName: string | undefined = flags.entity || fallbackEntity;\n\n let kind: \"abstractClass\" | \"interface\" = \"abstractClass\";\n let methodsPreset: \"crud\" | \"custom\" | \"empty\" = \"crud\";\n let generateStub = true;\n let registerInProvider = true;\n\n if (!flags.yes) {\n if (existingEntities.length > 0) {\n const selectedEntity = handleCancel(\n await p.select({\n message: \"Select domain entity associated with this interface:\",\n options: [\n ...existingEntities.map((e) => ({ value: e.name, label: e.name })),\n { value: \"__custom__\", label: \"✏️ Enter custom entity name...\" },\n ],\n initialValue: fallbackEntity,\n })\n );\n\n if (selectedEntity === \"__custom__\") {\n entityName = handleCancel(\n await p.text({\n message: \"Enter entity name:\",\n defaultValue: removeInterfacePrefix(ifaceName).replace(/Repository$|Service$/, \"\"),\n })\n ).trim();\n } else {\n entityName = selectedEntity;\n }\n }\n kind = handleCancel(\n await p.select({\n message: \"Interface definition style:\",\n options: [\n { value: \"abstractClass\", label: \"Abstract Class (Recommended - acts as DI token & type)\" },\n { value: \"interface\", label: \"TypeScript Interface (type-only)\" },\n ],\n initialValue: \"abstractClass\",\n })\n ) as any;\n\n methodsPreset = handleCancel(\n await p.select({\n message: \"Method signature preset:\",\n options: [\n { value: \"crud\", label: \"Standard CRUD (GetById, List, Create, Update, Delete)\" },\n { value: \"empty\", label: \"Empty / Minimal skeleton\" },\n ],\n initialValue: \"crud\",\n })\n ) as any;\n\n generateStub = handleCancel(\n await p.confirm({\n message: \"Auto-generate Infrastructure Stub implementation?\",\n initialValue: true,\n })\n );\n\n if (generateStub) {\n registerInProvider = handleCancel(\n await p.confirm({\n message: \"Auto-register interface & stub in feature diProvider.ts?\",\n initialValue: true,\n })\n );\n }\n }\n\n const s = p.spinner();\n s.start(`Generating interface '${pc.cyan(ifaceName)}'...`);\n\n const files: GeneratedFile[] = [];\n\n const options: InterfaceOptions = {\n name: ifaceName,\n feature,\n kind,\n entityName,\n methodsPreset,\n generateStub,\n registerInProvider,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const ifaceFile = generateInterface(options);\n files.push(ifaceFile);\n\n const stubClassName = toStubName(ifaceName);\n\n if (generateStub) {\n const stubFile = generateInfrastructure({\n name: stubClassName,\n feature,\n kind: \"stub\",\n implementsInterface: ifaceName,\n entityName,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n });\n files.push(stubFile);\n }\n\n if (registerInProvider && generateStub) {\n const featureDir = path.join(resolveFeaturesDir(projectRoot), feature);\n const providerFile = updateOrGenerateDiProvider(\n featureDir,\n feature,\n [\n {\n ifaceName,\n implName: stubClassName,\n },\n ],\n {\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n }\n );\n files.push(providerFile);\n }\n\n s.stop(\"Interface generated successfully!\");\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`Interface '${ifaceName}' created in feature '${feature}'!`));\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { HttpHandlerOptions, PropertyDef } from \"../types/index.js\";\nimport { generateHttpHandler } from \"../core/httpHandlerGenerator.js\";\nimport { handleCancel, promptProperties } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listExistingFeatures, listUseCases } from \"../utils/project.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\n\nexport async function runHttpHandlerCommand(\n handlerNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let feature = flags.feature?.trim();\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n feature = toCamelCase(feature);\n\n let name = handlerNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"HTTP Route Handler class name:\",\n placeholder: \"e.g. CreateUserHttp, GetUserHttp, HealthHttp\",\n validate: (v) => (v && v.trim() ? undefined : \"Handler name cannot be empty\"),\n })\n ).trim();\n }\n\n let className = toPascalCase(name);\n if (!className.endsWith(\"Http\") && !className.endsWith(\"Route\")) {\n className = `${className}Http`;\n }\n\n let method: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = flags.method || \"get\";\n let subPath = flags.path || \"/\";\n let useCaseName: string | undefined = flags.usecase;\n let includeValidation = true;\n let validationSource: \"body\" | \"query\" | \"params\" = \"body\";\n let validationFields: PropertyDef[] = [];\n\n if (!flags.yes) {\n method = handleCancel(\n await p.select({\n message: \"HTTP Method:\",\n options: [\n { value: \"get\", label: \"GET\" },\n { value: \"post\", label: \"POST\" },\n { value: \"put\", label: \"PUT\" },\n { value: \"patch\", label: \"PATCH\" },\n { value: \"delete\", label: \"DELETE\" },\n ],\n initialValue: method,\n })\n ) as any;\n\n const defaultPath = method === \"get\" ? \"/\" : \"/\";\n subPath = handleCancel(\n await p.text({\n message: \"Route subpath (relative to feature prefix):\",\n initialValue: defaultPath,\n defaultValue: defaultPath,\n })\n ).trim();\n\n // Scan existing use cases in the feature\n const useCases = listUseCases(projectRoot, feature);\n if (useCases.length > 0) {\n const ucOptions = useCases.map((u) => ({ value: u.name, label: u.name }));\n ucOptions.push({ value: \"__none__\", label: \"None / Standalone Handler\" });\n\n const chosenUc = handleCancel(\n await p.select({\n message: \"Connect this handler to a domain Use Case?\",\n options: ucOptions,\n initialValue: ucOptions[0]?.value,\n })\n );\n\n if (chosenUc !== \"__none__\") {\n useCaseName = chosenUc;\n }\n }\n\n includeValidation = handleCancel(\n await p.confirm({\n message: \"Include Zod inbound request validation?\",\n initialValue: method !== \"delete\",\n })\n );\n\n if (includeValidation) {\n const defaultSource = method === \"get\" ? \"query\" : \"body\";\n validationSource = handleCancel(\n await p.select({\n message: \"Validation data source:\",\n options: [\n { value: \"body\", label: \"req.body (for POST / PUT / PATCH payloads)\" },\n { value: \"query\", label: \"req.query (for GET search/filter queries)\" },\n { value: \"params\", label: \"req.params (for route parameters e.g. :id)\" },\n ],\n initialValue: defaultSource,\n })\n ) as any;\n\n validationFields = await promptProperties({\n message: \"Add schema fields for validation:\",\n });\n }\n }\n\n const s = p.spinner();\n s.start(`Generating HTTP handler '${pc.cyan(className)}'...`);\n\n const options: HttpHandlerOptions = {\n name: className,\n feature,\n method,\n path: subPath,\n useCaseName,\n includeValidation,\n validationSource,\n validationFields,\n successMessage: flags.message,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const files = generateHttpHandler(options);\n s.stop(\"HTTP handler generated successfully!\");\n\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`HTTP handler '${className}' created in feature '${feature}'!`));\n}\n","import path from \"node:path\";\nimport type { GeneratedFile, InjectableOptions, MethodDef } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport {\n injectableInterfaceTemplate,\n injectableTemplate,\n renderTemplate,\n} from \"../templates/index.js\";\n\nexport function generateInjectableCode(\n className: string,\n dependencies: string[] = [],\n methods: MethodDef[] = [],\n implementsInterface?: string\n): string {\n const formattedDeps = dependencies.map((dep) => ({\n key: toCamelCase(dep),\n name: dep,\n }));\n\n const formattedMethods = methods.map((m) => {\n const isAsync = m.async !== false;\n const retType = m.returnType\n ? (isAsync ? `Promise<${m.returnType}>` : m.returnType)\n : (isAsync ? \"Promise<void>\" : \"void\");\n const params = m.params && m.params.length > 0\n ? m.params.map((p) => `${p.name}: ${p.type}`).join(\", \")\n : \"\";\n return {\n name: m.name,\n isAsync,\n params,\n returnType: retType,\n };\n });\n\n return renderTemplate(injectableTemplate, {\n className,\n implementsInterface,\n dependencies: formattedDeps,\n hasDependencies: dependencies.length > 0,\n hasMethods: formattedMethods.length > 0,\n methods: formattedMethods,\n });\n}\n\nexport function generateInjectable(options: InjectableOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const className = toPascalCase(options.name);\n\n let targetDir = \"\";\n if (options.customPath) {\n targetDir = path.isAbsolute(options.customPath)\n ? options.customPath\n : path.join(projectRoot, options.customPath);\n } else if (options.location === \"feature-service\" && options.feature) {\n targetDir = path.join(resolveFeaturesDir(projectRoot), options.feature, \"services\");\n } else if (options.location === \"feature-transformer\" && options.feature) {\n targetDir = path.join(resolveFeaturesDir(projectRoot), options.feature, \"pxExpress\", \"transformers\");\n } else if (options.location === \"module\") {\n targetDir = path.join(projectRoot, \"modules\", className);\n } else {\n targetDir = options.feature\n ? path.join(resolveFeaturesDir(projectRoot), options.feature, \"services\")\n : path.join(projectRoot, \"shared\", className.toLowerCase());\n }\n\n const filePath = path.join(targetDir, `${className}.ts`);\n\n let ifaceName: string | undefined;\n if (options.generateInterface) {\n ifaceName = `I${className}`;\n const ifacePath = path.join(targetDir, `${ifaceName}.ts`);\n const ifaceContent = renderTemplate(injectableInterfaceTemplate, { ifaceName });\n files.push(\n writeFileSafely(ifacePath, ifaceContent, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n }\n\n const code = generateInjectableCode(\n className,\n options.dependencies || [],\n options.methods || [],\n ifaceName\n );\n\n files.push(\n writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n\n return files;\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { InjectableOptions } from \"../types/index.js\";\nimport { generateInjectable } from \"../core/injectableGenerator.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listExistingFeatures } from \"../utils/project.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\n\nexport async function runInjectableCommand(\n classNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let name = classNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Injectable class name:\",\n placeholder: \"e.g. PasswordHasher, TokenService, UserTransformer\",\n validate: (v) => (v && v.trim() ? undefined : \"Class name cannot be empty\"),\n })\n ).trim();\n }\n\n const className = toPascalCase(name);\n\n let location: \"feature-service\" | \"feature-transformer\" | \"shared\" | \"module\" | \"custom\" = \"feature-service\";\n let feature = flags.feature?.trim();\n let customPath: string | undefined;\n\n if (!flags.yes) {\n location = handleCancel(\n await p.select({\n message: \"Select target architectural location:\",\n options: [\n { value: \"feature-service\", label: \"Feature Service (features/<feature>/services/)\" },\n { value: \"feature-transformer\", label: \"Feature Transformer (features/<feature>/pxExpress/transformers/)\" },\n { value: \"shared\", label: \"Shared Module (shared/<name>/)\" },\n { value: \"module\", label: \"Core Module (modules/<Name>/)\" },\n { value: \"custom\", label: \"Custom directory path...\" },\n ],\n initialValue: \"feature-service\",\n })\n ) as any;\n\n if (location === \"feature-service\" || location === \"feature-transformer\") {\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n feature = toCamelCase(feature);\n } else if (location === \"custom\") {\n customPath = handleCancel(\n await p.text({\n message: \"Enter destination directory path:\",\n placeholder: \"e.g. src/services or lib/utils\",\n validate: (v) => (v && v.trim() ? undefined : \"Path cannot be empty\"),\n })\n ).trim();\n }\n }\n\n let generateInterface = false;\n if (!flags.yes) {\n generateInterface = handleCancel(\n await p.confirm({\n message: `Generate abstract class interface (I${className}) as runtime DI token?`,\n initialValue: false,\n })\n );\n }\n\n const s = p.spinner();\n s.start(`Generating injectable '${pc.cyan(className)}'...`);\n\n const options: InjectableOptions = {\n name: className,\n feature,\n location,\n customPath,\n generateInterface,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const files = generateInjectable(options);\n s.stop(\"Injectable class generated successfully!\");\n\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`Injectable '${className}' created successfully!`));\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { handleCancel, printBanner } from \"../utils/prompts.js\";\nimport { runFeatureCommand } from \"./feature.js\";\nimport { runSharedCommand } from \"./shared.js\";\nimport { runUseCaseCommand } from \"./usecase.js\";\nimport { runDomainCommand } from \"./domain.js\";\nimport { runInfrastructureCommand } from \"./infrastructure.js\";\nimport { runInterfaceCommand } from \"./interface.js\";\nimport { runHttpHandlerCommand } from \"./httpHandler.js\";\nimport { runInjectableCommand } from \"./injectable.js\";\n\nexport async function runInteractiveMenu(flags: Record<string, any> = {}): Promise<void> {\n printBanner();\n\n const choice = handleCancel(\n await p.select({\n message: \"What would you like to create in your architecture?\",\n options: [\n {\n value: \"feature\",\n label: \"Feature\",\n hint: \"Complete vertical slice (domain, infra, usecase, pxExpress, diProvider)\",\n },\n {\n value: \"shared\",\n label: \"Shared Module\",\n hint: \"Foundational utility or port with ports, infrastructure & diProvider\",\n },\n {\n value: \"usecase\",\n label: \"Use Case\",\n hint: \"Domain usecase with @MakeInjectable, DTOs & Vitest tests\",\n },\n {\n value: \"domain\",\n label: \"Domain Entity / Model\",\n hint: \"Zero-dependency pure TypeScript interface, class, or value object\",\n },\n {\n value: \"interface\",\n label: \"Domain Interface\",\n hint: \"Abstract class repository/service interface serving as DI token\",\n },\n {\n value: \"infrastructure\",\n label: \"Infrastructure\",\n hint: \"In-memory stub or concrete repository/client adapter\",\n },\n {\n value: \"httpHandler\",\n label: \"HTTP Handler\",\n hint: \"ExpressRoute endpoint with @MakeInjectable & Zod validation\",\n },\n {\n value: \"injectable\",\n label: \"Injectable Service\",\n hint: \"Generic @MakeInjectable class for services, transformers, or modules\",\n },\n ],\n })\n );\n\n switch (choice) {\n case \"feature\":\n await runFeatureCommand(undefined, flags);\n break;\n case \"shared\":\n await runSharedCommand(undefined, flags);\n break;\n case \"usecase\":\n await runUseCaseCommand(undefined, flags);\n break;\n case \"domain\":\n await runDomainCommand(undefined, flags);\n break;\n case \"interface\":\n await runInterfaceCommand(undefined, flags);\n break;\n case \"infrastructure\":\n await runInfrastructureCommand(undefined, flags);\n break;\n case \"httpHandler\":\n await runHttpHandlerCommand(undefined, flags);\n break;\n case \"injectable\":\n await runInjectableCommand(undefined, flags);\n break;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { runFeatureCommand } from \"./feature.js\";\nimport { runSharedCommand } from \"./shared.js\";\nimport { runUseCaseCommand } from \"./usecase.js\";\nimport { runDomainCommand } from \"./domain.js\";\nimport { runInfrastructureCommand } from \"./infrastructure.js\";\nimport { runInterfaceCommand } from \"./interface.js\";\nimport { runHttpHandlerCommand } from \"./httpHandler.js\";\nimport { runInjectableCommand } from \"./injectable.js\";\nimport { runInteractiveMenu } from \"./menu.js\";\n\nexport async function handleCreate(\n type?: string,\n name?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n if (!type) {\n await runInteractiveMenu(flags);\n return;\n }\n\n const normalizedType = type.trim();\n\n switch (normalizedType) {\n case \"feature\":\n await runFeatureCommand(name, flags);\n break;\n case \"shared\":\n await runSharedCommand(name, flags);\n break;\n case \"usecase\":\n await runUseCaseCommand(name, flags);\n break;\n case \"domain\":\n await runDomainCommand(name, flags);\n break;\n case \"infrastructure\":\n await runInfrastructureCommand(name, flags);\n break;\n case \"interface\":\n await runInterfaceCommand(name, flags);\n break;\n case \"httpHandler\":\n case \"httphandler\":\n await runHttpHandlerCommand(name, flags);\n break;\n case \"injectable\":\n await runInjectableCommand(name, flags);\n break;\n default:\n p.log.error(\n pc.red(\n `Unknown component type: \"${type}\". Allowed types: feature, shared, usecase, domain, infrastructure, interface, httpHandler, injectable.`\n )\n );\n process.exit(1);\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { execSync } from \"node:child_process\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nexport interface RegistryIndexEntry {\n name: string;\n description: string;\n version?: string;\n integrity?: string;\n [key: string]: any;\n}\n\nexport interface RegistryIndex {\n shared: RegistryIndexEntry[];\n features: RegistryIndexEntry[];\n}\n\nexport interface ModuleManifest {\n name: string;\n type: \"shared\" | \"feature\";\n description: string;\n version: string;\n integrity?: string;\n dependencies: {\n npm?: string[];\n shared?: string[];\n features?: string[];\n };\n files: string[];\n [key: string]: any;\n}\n\nexport const DEFAULT_REGISTRY_BASE =\n \"https://raw.githubusercontent.com/solid-stack-digital/mason-registry/main\";\n\n/**\n * Normalizes a registry URL or path:\n * - Converts GitHub web URLs (e.g. https://github.com/org/repo) to raw content URLs\n * - Converts Git SSH URLs (e.g. git@github.com:org/repo.git) to raw content URLs\n * - Resolves relative filesystem paths against baseDir\n */\nexport function normalizeRegistryUrl(urlOrPath: string, baseDir?: string): string {\n let trimmed = urlOrPath.trim();\n\n // 1. Git SSH URL: git@github.com:owner/repo.git\n const gitSshRegex = /^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/;\n const sshMatch = trimmed.match(gitSshRegex);\n if (sshMatch && sshMatch[1] && sshMatch[2]) {\n return `https://raw.githubusercontent.com/${sshMatch[1]}/${sshMatch[2]}/main`;\n }\n\n // 2. GitHub Web URL: https://github.com/owner/repo or https://github.com/owner/repo/tree/branch\n const githubWebRegex = /^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/tree\\/([^/]+))?\\/?$/;\n const webMatch = trimmed.match(githubWebRegex);\n if (webMatch && webMatch[1] && webMatch[2]) {\n const owner = webMatch[1];\n const repo = webMatch[2];\n const branch = webMatch[3] || \"main\";\n return `https://raw.githubusercontent.com/${owner}/${repo}/${branch}`;\n }\n\n // 3. Local relative path\n if (baseDir && (trimmed.startsWith(\"./\") || trimmed.startsWith(\"../\") || trimmed === \".\" || trimmed === \"..\")) {\n return path.resolve(baseDir, trimmed);\n }\n\n return trimmed;\n}\n\n/**\n * Searches upwards from startDir to locate a local mason-registry directory containing index.json.\n */\nexport function findLocalRegistry(startDir: string = process.cwd()): string | null {\n let current = path.resolve(startDir);\n while (true) {\n const candidate = path.join(current, \"mason-registry\");\n if (fs.existsSync(candidate) && fs.existsSync(path.join(candidate, \"index.json\"))) {\n return candidate;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return null;\n}\n\n/**\n * Resolves the active registry base URL or local directory path.\n * Checks:\n * 1. CLI override flag (--registry)\n * 2. Environment variable (MASON_REGISTRY_URL)\n * 3. Local mason.config.json\n * 4. Local package.json (\"mason\": { \"registry\": \"...\" })\n * 5. Upward directory search for local mason-registry\n * 6. Default official GitHub raw URL\n */\nexport function getRegistryBase(projectRoot?: string, override?: string): string {\n const rootDir = projectRoot ? path.resolve(projectRoot) : process.cwd();\n\n if (override && override.trim()) {\n return normalizeRegistryUrl(override.trim(), rootDir);\n }\n\n if (process.env.MASON_REGISTRY_URL && process.env.MASON_REGISTRY_URL.trim()) {\n return normalizeRegistryUrl(process.env.MASON_REGISTRY_URL.trim(), rootDir);\n }\n\n // Check mason.config.json in project root or current working directory\n const configLocations = [\n path.join(rootDir, \"mason.config.json\"),\n path.join(process.cwd(), \"mason.config.json\"),\n ];\n\n for (const configPath of configLocations) {\n if (fs.existsSync(configPath)) {\n try {\n const config = JSON.parse(fs.readFileSync(configPath, \"utf-8\"));\n if (config.registry && typeof config.registry === \"string\") {\n return normalizeRegistryUrl(config.registry.trim(), path.dirname(configPath));\n }\n } catch {\n // ignore JSON parse error in user config\n }\n }\n }\n\n // Check package.json \"mason\" field\n const pkgLocations = [\n path.join(rootDir, \"package.json\"),\n path.join(process.cwd(), \"package.json\"),\n ];\n\n for (const pkgPath of pkgLocations) {\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n if (pkg.mason?.registry && typeof pkg.mason.registry === \"string\") {\n return normalizeRegistryUrl(pkg.mason.registry.trim(), path.dirname(pkgPath));\n }\n } catch {\n // ignore\n }\n }\n }\n\n // Automatic discovery: search upward for local mason-registry workspace\n const localRegistry = findLocalRegistry(rootDir);\n if (localRegistry) {\n return localRegistry;\n }\n\n return DEFAULT_REGISTRY_BASE;\n}\n\n/**\n * Fetch raw file contents from a remote URL or local file directory.\n */\nexport async function fetchRegistryFile(registryBase: string, relPath: string): Promise<string> {\n const cleanRelPath = relPath.replace(/^\\/+/, \"\");\n\n if (registryBase.startsWith(\"http://\") || registryBase.startsWith(\"https://\")) {\n const url = `${registryBase.replace(/\\/+$/, \"\")}/${cleanRelPath}`;\n const headers: Record<string, string> = {};\n const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n const res = await fetch(url, { headers });\n if (!res.ok) {\n let extraHint = \"\";\n if (res.status === 404) {\n extraHint = `\\n Possible reasons:\\n • If using a private GitHub repository, ensure GITHUB_TOKEN is set in your environment.\\n • If your registry has not yet been pushed to GitHub, point to your local directory:\\n - CLI flag: mason import ... --registry /path/to/mason-registry\\n - Environment: export MASON_REGISTRY_URL=/path/to/mason-registry\\n - Config file: Create mason.config.json with { \"registry\": \"/path/to/mason-registry\" }`;\n }\n throw new Error(`Failed to fetch ${cleanRelPath} from ${url} (HTTP ${res.status}: ${res.statusText})${extraHint}`);\n }\n return await res.text();\n }\n\n // Local filesystem path or file:// URI\n let baseDir = registryBase;\n if (baseDir.startsWith(\"file://\")) {\n baseDir = fileURLToPath(baseDir);\n }\n\n const filePath = path.resolve(baseDir, cleanRelPath);\n if (!fs.existsSync(filePath)) {\n throw new Error(`Registry file not found at ${filePath}`);\n }\n\n return fs.promises.readFile(filePath, \"utf-8\");\n}\n\n/**\n * Fetches and parses master index.json from the registry.\n */\nexport async function fetchRegistryIndex(registryBase: string): Promise<RegistryIndex> {\n const content = await fetchRegistryFile(registryBase, \"index.json\");\n return JSON.parse(content) as RegistryIndex;\n}\n\n/**\n * Fetches the registry.json manifest for a given shared or feature module.\n */\nexport async function fetchModuleManifest(\n registryBase: string,\n type: \"shared\" | \"feature\",\n name: string\n): Promise<ModuleManifest> {\n const folder = type === \"shared\" ? \"shared\" : \"features\";\n const manifestPath = `${folder}/${name}/registry.json`;\n const content = await fetchRegistryFile(registryBase, manifestPath);\n return JSON.parse(content) as ModuleManifest;\n}\n\n/**\n * Computes Levenshtein distance between two strings.\n */\nexport function levenshteinDistance(a: string, b: string): number {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));\n\n for (let i = 0; i <= m; i++) {\n dp[i]![0] = i;\n }\n for (let j = 0; j <= n; j++) {\n dp[0]![j] = j;\n }\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i]![j] = dp[i - 1]![j - 1]!;\n } else {\n dp[i]![j] = Math.min(\n dp[i - 1]![j]! + 1, // deletion\n dp[i]![j - 1]! + 1, // insertion\n dp[i - 1]![j - 1]! + 1 // substitution\n );\n }\n }\n }\n\n return dp[m]![n]!;\n}\n\n/**\n * Finds closest matching candidate string for typo correction suggestions.\n */\nexport function findClosestMatch(target: string, candidates: string[]): string | null {\n if (candidates.length === 0) return null;\n const lower = target.toLowerCase();\n\n let closest: string | null = null;\n let minDistance = Infinity;\n\n for (const candidate of candidates) {\n const candLower = candidate.toLowerCase();\n // Substring or prefix match gets top priority\n if (candLower.includes(lower) || lower.includes(candLower)) {\n return candidate;\n }\n\n const dist = levenshteinDistance(lower, candLower);\n if (dist < minDistance) {\n minDistance = dist;\n closest = candidate;\n }\n }\n\n // Only suggest if distance is reasonable (<= 3)\n if (minDistance <= 3) {\n return closest;\n }\n\n return null;\n}\n\n/**\n * Detects the package manager used in the target project.\n */\nexport function detectPackageManager(projectRoot: string): \"pnpm\" | \"yarn\" | \"bun\" | \"npm\" {\n if (fs.existsSync(path.join(projectRoot, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (fs.existsSync(path.join(projectRoot, \"yarn.lock\"))) return \"yarn\";\n if (fs.existsSync(path.join(projectRoot, \"bun.lockb\")) || fs.existsSync(path.join(projectRoot, \"bun.lock\"))) return \"bun\";\n return \"npm\";\n}\n\n/**\n * Checks which npm packages from the requested list are missing in package.json.\n */\nexport function getMissingNpmPackages(projectRoot: string, requiredPackages: string[]): string[] {\n if (!requiredPackages || requiredPackages.length === 0) return [];\n\n const pkgJsonPath = path.join(projectRoot, \"package.json\");\n if (!fs.existsSync(pkgJsonPath)) {\n return requiredPackages;\n }\n\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf-8\"));\n const installed = new Set([\n ...Object.keys(pkg.dependencies || {}),\n ...Object.keys(pkg.devDependencies || {}),\n ...Object.keys(pkg.peerDependencies || {}),\n ]);\n\n return requiredPackages.filter((p) => {\n // Handle packages with version specifier e.g. \"bcrypt@^5.0.0\"\n const nameOnly = p.startsWith(\"@\")\n ? `@${p.slice(1).split(\"@\")[0] || \"\"}`\n : p.split(\"@\")[0] || p;\n return !installed.has(nameOnly);\n });\n } catch {\n return requiredPackages;\n }\n}\n\n/**\n * Installs missing npm packages using the detected package manager.\n */\nexport function installNpmPackages(\n projectRoot: string,\n packages: string[],\n pm?: \"pnpm\" | \"yarn\" | \"bun\" | \"npm\"\n): void {\n if (!packages || packages.length === 0) return;\n\n const manager = pm || detectPackageManager(projectRoot);\n let installCmd: string;\n\n switch (manager) {\n case \"pnpm\":\n installCmd = `pnpm add ${packages.join(\" \")}`;\n break;\n case \"yarn\":\n installCmd = `yarn add ${packages.join(\" \")}`;\n break;\n case \"bun\":\n installCmd = `bun add ${packages.join(\" \")}`;\n break;\n default:\n installCmd = `npm install ${packages.join(\" \")}`;\n break;\n }\n\n p.log.info(`Installing missing dependencies with ${manager}: ${pc.cyan(packages.join(\", \"))}`);\n execSync(installCmd, {\n cwd: projectRoot,\n stdio: \"inherit\",\n });\n}\n","import { createHash } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Recursively collect all relevant source files in a directory,\n * ignoring hidden files/folders, registry.json, and test files.\n */\nexport function getAllFiles(dir: string, baseDir: string = dir): string[] {\n if (!fs.existsSync(dir)) return [];\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n const files: string[] = [];\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relPath = path.relative(baseDir, fullPath).replace(/\\\\/g, \"/\");\n\n if (entry.isDirectory()) {\n if (entry.name === \"__tests__\" || entry.name.startsWith(\".\")) {\n continue;\n }\n files.push(...getAllFiles(fullPath, baseDir));\n } else if (entry.isFile()) {\n if (\n entry.name === \"registry.json\" ||\n entry.name.endsWith(\".test.ts\") ||\n entry.name.endsWith(\".spec.ts\") ||\n entry.name.startsWith(\".\")\n ) {\n continue;\n }\n files.push(relPath);\n }\n }\n\n return files.sort();\n}\n\n/**\n * Computes a deterministic composite SHA-256 integrity hash for a directory.\n * Line endings are normalized to LF (\\n) to prevent cross-platform mismatches.\n */\nexport function computeDirectoryHash(dirPath: string, files?: string[]): string {\n if (!fs.existsSync(dirPath)) return \"\";\n\n const hash = createHash(\"sha256\");\n const fileList = (files ?? getAllFiles(dirPath)).sort();\n\n for (const relativePath of fileList) {\n const absolutePath = path.join(dirPath, relativePath);\n if (!fs.existsSync(absolutePath)) continue;\n const content = fs.readFileSync(absolutePath, \"utf8\");\n\n // Normalize CRLF to LF to prevent cross-platform false mismatches\n const normalizedContent = content.replace(/\\r\\n/g, \"\\n\");\n\n // Update running hash with relative path and normalized content\n hash.update(relativePath);\n hash.update(normalizedContent);\n }\n\n return `sha256-${hash.digest(\"hex\")}`;\n}\n","import path from \"node:path\";\nimport fs from \"node:fs\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n fetchModuleManifest,\n fetchRegistryFile,\n fetchRegistryIndex,\n findClosestMatch,\n getMissingNpmPackages,\n getRegistryBase,\n installNpmPackages,\n type ModuleManifest,\n type RegistryIndex,\n} from \"../utils/registry.js\";\nimport { findProjectRoot } from \"../utils/project.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { computeDirectoryHash } from \"../utils/integrity.js\";\n\nexport interface ImportFlags {\n overwrite?: boolean;\n dryRun?: boolean;\n yes?: boolean;\n registry?: string;\n skipInstall?: boolean;\n alias?: Record<string, string>;\n [key: string]: any;\n}\n\nexport const importPrompts = {\n select: p.select,\n text: p.text,\n};\n\n/**\n * Rewrite import strings across file content based on an alias mapping.\n * E.g. \"@/shared/hasher/\" -> \"@/shared/auth-hasher/\"\n */\nexport function rewriteImports(content: string, aliasMap: Map<string, string>): string {\n if (aliasMap.size === 0) return content;\n\n let rewritten = content;\n for (const [oldImport, newImport] of aliasMap.entries()) {\n // Strip trailing slashes to build regex that safely matches with or without trailing slash\n const rawOld = oldImport.endsWith(\"/\") ? oldImport.slice(0, -1) : oldImport;\n const rawNew = newImport.endsWith(\"/\") ? newImport.slice(0, -1) : newImport;\n\n const escaped = rawOld.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n // Match oldImport followed by a slash, quote, or end of specifier\n const regex = new RegExp(`${escaped}(?=[\\\\/'\"\\`]|$)`, \"g\");\n rewritten = rewritten.replace(regex, rawNew);\n }\n return rewritten;\n}\n\n/**\n * Determine the destination directory for a module type ('src/shared' or 'src/features')\n */\nexport function getModuleBaseDir(projectRoot: string, modType: \"shared\" | \"feature\"): string {\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n return path.join(projectRoot, \"src\", folder);\n}\n\n/**\n * Resolves the existing directory path for a module in the project, checking both src/<folder>/<name> and <folder>/<name>.\n */\nexport function getExistingModuleDir(\n projectRoot: string,\n modType: \"shared\" | \"feature\",\n modName: string\n): string | null {\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n const inSrc = path.join(projectRoot, \"src\", folder, modName);\n if (fs.existsSync(inSrc)) return inSrc;\n const inRoot = path.join(projectRoot, folder, modName);\n if (fs.existsSync(inRoot)) return inRoot;\n return null;\n}\n\n/**\n * Check whether a module already exists in the project (checking both src/<folder>/<name> and <folder>/<name>)\n */\nexport function checkModuleExists(\n projectRoot: string,\n modType: \"shared\" | \"feature\",\n modName: string\n): boolean {\n return getExistingModuleDir(projectRoot, modType, modName) !== null;\n}\n\n/**\n * Interactive / programmatic dependency resolver with integrity checking, collision detection, and aliasing.\n */\nasync function resolveDependency(\n depType: \"shared\" | \"feature\",\n depName: string,\n aliasMap: Map<string, string>,\n projectRoot: string,\n flags: ImportFlags,\n importModuleRecursive: (\n type: \"shared\" | \"feature\",\n registryName: string,\n targetName: string,\n options?: { overwrite?: boolean }\n ) => Promise<void>,\n importedModules: Set<string>,\n registryBase: string,\n index?: RegistryIndex\n): Promise<void> {\n const folder = depType === \"shared\" ? \"shared\" : \"features\";\n const isAlreadyImportedThisRun = importedModules.has(`${depType}:${depName}`);\n if (isAlreadyImportedThisRun) return;\n\n // Check if programmatic alias was provided via flags\n const programmaticAlias =\n flags.alias?.[depName] || flags.alias?.[`${depType}/${depName}`];\n\n if (programmaticAlias) {\n aliasMap.set(`@/${folder}/${depName}/`, `@/${folder}/${programmaticAlias}/`);\n const baseDir = getModuleBaseDir(projectRoot, depType);\n const displayDest = path.relative(\n projectRoot,\n path.join(baseDir, programmaticAlias)\n );\n p.log.step(`Importing '${depName}' into '${displayDest}'...`);\n await importModuleRecursive(depType, depName, programmaticAlias);\n return;\n }\n\n const existingDir = getExistingModuleDir(projectRoot, depType, depName);\n\n // 1. Directory does NOT exist locally -> Download directly (no prompt)\n if (!existingDir) {\n p.log.info(` ↳ Resolving required ${depType} dependency: ${pc.cyan(depName)}`);\n await importModuleRecursive(depType, depName, depName);\n return;\n }\n\n // 2. Directory DOES exist locally -> Check integrity hash\n // Fetch remote integrity from index or registry.json manifest\n const entry = (depType === \"shared\" ? index?.shared : index?.features)?.find(\n (item) => item.name === depName\n );\n let remoteIntegrity = entry?.integrity;\n\n if (!remoteIntegrity) {\n try {\n const depManifest = await fetchModuleManifest(registryBase, depType, depName);\n remoteIntegrity = depManifest.integrity;\n } catch {\n // If fetching manifest fails, remoteIntegrity remains undefined\n }\n }\n\n const localHash = computeDirectoryHash(existingDir);\n\n // If localHash === remoteManifest.integrity -> reuse existing silently / with step log\n if (remoteIntegrity && localHash === remoteIntegrity) {\n p.log.step(`✓ ${depType}/${depName} is up to date (reusing existing)`);\n importedModules.add(`${depType}:${depName}`);\n return;\n }\n\n // 3. localHash !== remoteManifest.integrity (Drift detected!)\n if (flags.overwrite) {\n p.log.step(`Overwriting '${depType}/${depName}' with registry version (--overwrite)...`);\n const baseDir = getModuleBaseDir(projectRoot, depType);\n const targetDir = path.join(baseDir, depName);\n if (!flags.dryRun) {\n if (existingDir !== targetDir) {\n fs.rmSync(existingDir, { recursive: true, force: true });\n }\n fs.rmSync(targetDir, { recursive: true, force: true });\n }\n await importModuleRecursive(depType, depName, depName, { overwrite: true });\n return;\n }\n\n if (flags.yes) {\n p.log.info(`Using existing '${depType}/${depName}'`);\n importedModules.add(`${depType}:${depName}`);\n return;\n }\n\n // Prompt the user with 3 explicit choices\n const choice = handleCancel(\n await importPrompts.select({\n message: `Local '${depType}/${depName}' differs from the registry version.`,\n options: [\n {\n value: \"keep_existing\",\n label: `Keep existing local version (Recommended)`,\n },\n {\n value: \"rename\",\n label: \"Import fresh copy under a new name (alias)\",\n },\n {\n value: \"overwrite\",\n label: \"Overwrite local version with registry version\",\n },\n ],\n })\n );\n\n if (choice === \"keep_existing\" || (choice as string) === \"use_existing\") {\n p.log.step(`Skipping '${depType}/${depName}' (keeping existing)`);\n importedModules.add(`${depType}:${depName}`);\n return;\n }\n\n if (choice === \"rename\") {\n const newName = handleCancel(\n await importPrompts.text({\n message: \"What should we name the new copy?\",\n placeholder: `${depName}-copy`,\n validate(val) {\n const v = val?.trim();\n if (!v) return \"Name cannot be empty\";\n if (v === depName) return `Name must be different from '${depName}'`;\n if (!/^[a-zA-Z0-9_-]+$/.test(v)) {\n return \"Name can only contain alphanumeric characters, dashes, and underscores\";\n }\n if (checkModuleExists(projectRoot, depType, v)) {\n return `'${v}' already exists in ${folder}, please choose another name`;\n }\n },\n })\n ).trim();\n\n aliasMap.set(`@/${folder}/${depName}/`, `@/${folder}/${newName}/`);\n\n const baseDir = getModuleBaseDir(projectRoot, depType);\n const displayDest = path.relative(projectRoot, path.join(baseDir, newName));\n p.log.step(`Importing '${depName}' into '${displayDest}'...`);\n\n await importModuleRecursive(depType, depName, newName);\n return;\n }\n\n if (choice === \"overwrite\") {\n p.log.step(`Overwriting '${depType}/${depName}' with registry version...`);\n const baseDir = getModuleBaseDir(projectRoot, depType);\n const targetDir = path.join(baseDir, depName);\n if (!flags.dryRun) {\n if (existingDir !== targetDir) {\n fs.rmSync(existingDir, { recursive: true, force: true });\n }\n fs.rmSync(targetDir, { recursive: true, force: true });\n }\n await importModuleRecursive(depType, depName, depName, { overwrite: true });\n return;\n }\n}\n\nexport async function handleImport(\n typeArg?: string,\n nameArg?: string,\n flags: ImportFlags = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n\n // 1. Resolve and validate type\n let type = typeArg?.trim().toLowerCase();\n if (type === \"features\") type = \"feature\";\n\n if (!type) {\n type = handleCancel(\n await importPrompts.select({\n message: \"What kind of module would you like to import?\",\n options: [\n {\n value: \"shared\",\n label: \"Shared Module\",\n hint: \"Foundational utility or port placed in src/shared\",\n },\n {\n value: \"feature\",\n label: \"Feature\",\n hint: \"Complete Clean Architecture vertical slice placed in src/features\",\n },\n ],\n })\n );\n }\n\n if (type !== \"shared\" && type !== \"feature\") {\n p.log.error(pc.red(`Invalid module type: \"${typeArg}\". Must be \"shared\" or \"feature\".`));\n process.exit(1);\n }\n\n const registryBase = getRegistryBase(projectRoot, flags.registry);\n const s = p.spinner();\n s.start(`Connecting to registry at ${pc.dim(registryBase)}...`);\n\n let index: RegistryIndex;\n try {\n index = await fetchRegistryIndex(registryBase);\n s.stop(\"Registry index loaded.\");\n } catch (err: any) {\n s.stop(pc.red(\"Failed to load registry index.\"));\n p.log.error(pc.red(err.message || String(err)));\n process.exit(1);\n }\n\n const availableList = type === \"shared\" ? index.shared : index.features;\n const candidateNames = availableList.map((m) => m.name);\n\n // 2. Resolve and validate module name\n let name = nameArg?.trim();\n\n if (!name) {\n if (availableList.length === 0) {\n p.log.warn(`No ${type} modules available in the registry.`);\n return;\n }\n\n name = handleCancel(\n await importPrompts.select({\n message: `Select a ${type} to import:`,\n options: availableList.map((item) => ({\n value: item.name,\n label: item.name,\n hint: item.description,\n })),\n })\n );\n }\n\n if (!candidateNames.includes(name)) {\n const closest = findClosestMatch(name, candidateNames);\n p.log.error(pc.red(`❌ Module '${name}' not found in the ${type} registry.`));\n if (closest) {\n p.log.info(pc.yellow(`Did you mean '${pc.cyan(closest)}'?`));\n }\n process.exit(1);\n }\n\n // 3. Recursive import engine\n const importedModules = new Set<string>();\n const totalWrittenFiles: string[] = [];\n const requiredNpmPackages = new Set<string>();\n\n async function importModuleRecursive(\n modType: \"shared\" | \"feature\",\n registryName: string,\n targetName: string = registryName,\n options?: { overwrite?: boolean }\n ): Promise<void> {\n const modKey = `${modType}:${targetName}`;\n if (importedModules.has(modKey)) return;\n\n p.log.step(\n `Importing ${modType}: ${pc.cyan(targetName)}${targetName !== registryName ? pc.dim(` (from ${registryName})`) : \"\"}...`\n );\n\n let manifest: ModuleManifest;\n try {\n manifest = await fetchModuleManifest(registryBase, modType, registryName);\n } catch (err: any) {\n p.log.error(pc.red(`Failed to fetch manifest for ${modType} '${registryName}': ${err.message}`));\n process.exit(1);\n }\n\n // 2. The Dependency Resolution Logic\n // Keep track of any renamed dependencies so we can rewrite this module's imports later\n const aliasMap = new Map<string, string>();\n\n // If this module itself was renamed, also alias its self-references\n if (targetName !== registryName) {\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n aliasMap.set(`@/${folder}/${registryName}/`, `@/${folder}/${targetName}/`);\n }\n\n // Step 3a: Resolve Shared Dependencies First (foundational)\n const sharedDeps = manifest.dependencies?.shared || [];\n for (const dep of sharedDeps) {\n await resolveDependency(\n \"shared\",\n dep,\n aliasMap,\n projectRoot,\n flags,\n importModuleRecursive,\n importedModules,\n registryBase,\n index\n );\n }\n\n // Step 3b: Resolve Feature Dependencies (secondary)\n const featureDeps = manifest.dependencies?.features || [];\n for (const dep of featureDeps) {\n await resolveDependency(\n \"feature\",\n dep,\n aliasMap,\n projectRoot,\n flags,\n importModuleRecursive,\n importedModules,\n registryBase,\n index\n );\n }\n\n // Step 3c: Collect NPM dependencies\n for (const pkg of manifest.dependencies?.npm || []) {\n requiredNpmPackages.add(pkg);\n }\n\n // Step 3d: Download and write files with import path rewriting\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n const targetDir = path.join(getModuleBaseDir(projectRoot, modType), targetName);\n const isOverwrite = Boolean(flags.overwrite || options?.overwrite);\n\n for (const file of manifest.files || []) {\n if (file === \"registry.json\") continue;\n\n const remoteFilePath = `${folder}/${registryName}/${file}`;\n const localFilePath = path.join(targetDir, file);\n\n if (fs.existsSync(localFilePath) && !isOverwrite) {\n p.log.warn(\n ` ↳ Skipping existing file: ${pc.dim(path.relative(projectRoot, localFilePath))} (use --overwrite to replace)`\n );\n continue;\n }\n\n let content = await fetchRegistryFile(registryBase, remoteFilePath);\n\n // 3. The Import Path Rewriter (The Magic Step)\n content = rewriteImports(content, aliasMap);\n\n if (!flags.dryRun) {\n fs.mkdirSync(path.dirname(localFilePath), { recursive: true });\n fs.writeFileSync(localFilePath, content, \"utf-8\");\n }\n\n const displayPath = path.relative(projectRoot, localFilePath);\n totalWrittenFiles.push(displayPath);\n p.log.message(` ${pc.green(\"+\")} ${displayPath}`);\n }\n\n importedModules.add(modKey);\n }\n\n // Run root module import\n await importModuleRecursive(type as \"shared\" | \"feature\", name, name);\n\n // 4. Resolve and install NPM packages\n const missingNpm = getMissingNpmPackages(projectRoot, Array.from(requiredNpmPackages));\n\n if (missingNpm.length > 0) {\n if (flags.skipInstall || flags.dryRun) {\n p.log.info(`Required npm dependencies to install: ${pc.cyan(missingNpm.join(\", \"))}`);\n } else {\n try {\n installNpmPackages(projectRoot, missingNpm);\n } catch (err: any) {\n p.log.warn(`Could not automatically install packages (${err.message}). Please run: npm install ${missingNpm.join(\" \")}`);\n }\n }\n }\n\n if (flags.dryRun) {\n p.log.info(pc.yellow(\"Dry run complete: No files were written to disk.\"));\n } else {\n const baseDir = getModuleBaseDir(projectRoot, type as \"shared\" | \"feature\");\n const displayTarget = path.relative(projectRoot, path.join(baseDir, name));\n p.log.success(\n pc.green(\n `Successfully imported ${type} '${name}' (${totalWrittenFiles.length} file${totalWrittenFiles.length === 1 ? \"\" : \"s\"} placed in ${displayTarget})`\n )\n );\n }\n}\n","import { cac } from \"cac\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { handleCreate } from \"./commands/create.js\";\nimport { handleImport } from \"./commands/import.js\";\nimport { findProjectRoot } from \"./utils/project.js\";\nimport { getEffectiveMode } from \"./utils/config.js\";\nimport { PromptCancelledError, handleCancel } from \"./utils/prompts.js\";\n\nexport function createCli() {\n const cli = cac(\"mason\");\n\n // Default command: interactive selection wizard\n cli\n .command(\"[...args]\", \"Interactive scaffolding and import wizard\")\n .option(\"-d, --dry-run\", \"Preview changes without writing to disk\")\n .option(\"-o, --overwrite\", \"Overwrite existing files\")\n .option(\"-y, --yes\", \"Accept defaults and skip interactive prompts\")\n .option(\"--registry\", \"Run in registry mode\")\n .action(async (args: string[], flags: Record<string, any>) => {\n if (args && args.length > 0) {\n p.log.error(\n pc.red(\n `Unknown command: \"${args.join(\" \")}\". Use --help to list available commands.`\n )\n );\n process.exit(1);\n }\n try {\n const projectRoot = findProjectRoot();\n const mode = getEffectiveMode(projectRoot, flags);\n\n if (mode === \"registry\") {\n const choice = handleCancel(\n await p.select({\n message: \"🏛️ Mason (Registry Mode): What would you like to scaffold?\",\n options: [\n {\n value: \"create_feature\",\n label: \"Initialize New Feature\",\n hint: \"Scaffold a new feature slice under features/\",\n },\n {\n value: \"create_shared\",\n label: \"Initialize New Shared Module\",\n hint: \"Scaffold a new shared utility/port under shared/\",\n },\n {\n value: \"create_usecase\",\n label: \"Create New Use Case\",\n hint: \"Add a new use case to an existing feature\",\n },\n {\n value: \"import\",\n label: \"Import from Remote Registry\",\n hint: \"Download a module from upstream\",\n },\n ],\n })\n );\n\n switch (choice) {\n case \"create_feature\":\n await handleCreate(\"feature\", undefined, flags);\n break;\n case \"create_shared\":\n await handleCreate(\"shared\", undefined, flags);\n break;\n case \"create_usecase\":\n await handleCreate(\"usecase\", undefined, flags);\n break;\n case \"import\":\n await handleImport(undefined, undefined, flags);\n break;\n }\n return;\n }\n\n const choice = handleCancel(\n await p.select({\n message: \"🧱 Mason: What would you like to do?\",\n options: [\n {\n value: \"create\",\n label: \"Create component\",\n hint: \"Scaffold a new feature, shared module, use case, domain entity, etc.\",\n },\n {\n value: \"import\",\n label: \"Import from registry\",\n hint: \"Download and link pre-built shared modules or features from the registry\",\n },\n ],\n })\n );\n\n if (choice === \"create\") {\n await handleCreate(undefined, undefined, flags);\n } else {\n await handleImport(undefined, undefined, flags);\n }\n } catch (err) {\n handleCliError(err);\n }\n });\n\n // 1. The LOCAL Scaffolding Namespace\n cli\n .command(\n \"create [type] [name]\",\n \"Scaffold local Clean Architecture components (feature, shared, usecase, domain, etc.)\"\n )\n .option(\"-d, --dry-run\", \"Preview changes without writing to disk\")\n .option(\"-o, --overwrite\", \"Overwrite existing files\")\n .option(\"-y, --yes\", \"Accept defaults and skip interactive prompts\")\n .option(\"-f, --feature <feature>\", \"Target feature name\")\n .option(\"-t, --target <dir>\", \"Override target directory\")\n .option(\"--dest <dir>\", \"Override target directory (alias for --target)\")\n .option(\"--registry\", \"Scaffold in registry mode (stamps registry.json)\")\n .option(\"--express\", \"Include Express presentation layer (pxExpress)\")\n .option(\"--no-express\", \"Skip Express presentation layer\")\n .option(\"-i, --interface <interface>\", \"Interface or abstract class to implement\")\n .option(\"-k, --kind <kind>\", \"Implementation kind ('stub' or 'concrete')\")\n .option(\"-g, --global\", \"Place in global infrastructure/ instead of feature\")\n .option(\"-m, --method <method>\", \"HTTP method (get, post, put, patch, delete)\")\n .option(\"-p, --path <path>\", \"Route subpath (e.g. /:id)\")\n .option(\"-u, --usecase <usecase>\", \"Connected use case name\")\n .option(\"--message <message>\", \"Custom success message\")\n .option(\"--domainNames <names>\", \"Comma-separated domain entity names\")\n .example(\"mason create\")\n .example(\"mason create feature users\")\n .example(\"mason create usecase PlaceOrder -f orders\")\n .example(\"mason create domain User -f users\")\n .example(\"mason create infrastructure PostgresUserRepository -f users -i IUserRepository\")\n .example(\"mason create interface IUserRepository -f users\")\n .example(\"mason create httpHandler GetUserHttp -f users -m get -p /:id\")\n .example(\"mason create injectable PasswordHasher\")\n .action(async (type?: string, name?: string, flags: Record<string, any> = {}) => {\n try {\n await handleCreate(type, name, flags);\n } catch (err) {\n handleCliError(err);\n }\n });\n\n // 2. The REMOTE Registry Namespace\n cli\n .command(\n \"import [type] [name]\",\n \"Import pre-built shared modules or features from the Solid Stack Registry\"\n )\n .option(\"-o, --overwrite\", \"Overwrite existing files\")\n .option(\"-d, --dry-run\", \"Preview changes without writing to disk\")\n .option(\"-y, --yes\", \"Accept defaults and skip interactive prompts\")\n .option(\"--registry <url>\", \"Registry base URL or local directory\")\n .option(\"--skip-install\", \"Skip automatic package manager dependency installation\")\n .example(\"mason import shared hasher\")\n .example(\"mason import feature authn\")\n .example(\"mason import shared\")\n .example(\"mason import feature\")\n .action(async (type?: string, name?: string, flags: Record<string, any> = {}) => {\n try {\n await handleImport(type, name, flags);\n } catch (err) {\n handleCliError(err);\n }\n });\n\n\n\n // Backwards compatibility shortcuts for flat commands\n const createSubtypes = [\n \"feature\",\n \"shared\",\n \"usecase\",\n \"domain\",\n \"infrastructure\",\n \"interface\",\n \"httpHandler\",\n \"injectable\",\n ];\n\n for (const subtype of createSubtypes) {\n cli\n .command(\n `${subtype} [name]`,\n `Shorthand for 'mason create ${subtype} [name]'`\n )\n .allowUnknownOptions()\n .action(async (name?: string, flags: Record<string, any> = {}) => {\n try {\n await handleCreate(subtype, name, flags);\n } catch (err) {\n handleCliError(err);\n }\n });\n }\n\n cli.help();\n cli.version(\"1.0.14\");\n\n return cli;\n}\n\nfunction handleCliError(err: unknown): void {\n if (err instanceof PromptCancelledError) {\n process.exit(0);\n }\n const message = err instanceof Error ? err.message : String(err);\n p.log.error(pc.red(`Error: ${message}`));\n process.exit(1);\n}\n\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n const cli = createCli();\n cli.parse(argv, { run: true });\n}\n","#!/usr/bin/env node\nimport { runCli } from \"./cli.js\";\n\nrunCli().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n"]}
1
+ {"version":3,"sources":["../src/utils/fileOperations.ts","../src/utils/formatting.ts","../src/utils/config.ts","../src/utils/project.ts","../src/templates/engine.ts","../src/templates/domain.template.ts","../src/templates/interface.template.ts","../src/templates/useCase.template.ts","../src/templates/infra.template.ts","../src/templates/httpHandler.template.ts","../src/templates/injectable.template.ts","../src/templates/provider.template.ts","../src/templates/expressIndex.template.ts","../src/core/domainGenerator.ts","../src/core/interfaceGenerator.ts","../src/core/infraGenerator.ts","../src/core/useCaseGenerator.ts","../src/core/httpHandlerGenerator.ts","../src/core/providerManager.ts","../src/core/featureGenerator.ts","../src/utils/prompts.ts","../src/commands/feature.ts","../src/core/sharedGenerator.ts","../src/commands/shared.ts","../src/commands/usecase.ts","../src/commands/domain.ts","../src/commands/infrastructure.ts","../src/commands/interface.ts","../src/commands/httpHandler.ts","../src/core/injectableGenerator.ts","../src/commands/injectable.ts","../src/commands/menu.ts","../src/commands/create.ts","../src/utils/registry.ts","../src/utils/integrity.ts","../src/commands/import.ts","../src/cli.ts","../src/bin.ts"],"names":["path","fs","p","pc","Handlebars","fileURLToPath","p2","p3","s","p4","p5","p6","p7","p8","p9","p10","generateInterface","p11","p12","p13","execSync","createHash","p14","programmaticAlias","cac","p15","choice"],"mappings":"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","file":"bin.cjs","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { GeneratedFile } from \"../types/index.js\";\n\nexport function writeFileSafely(\n absolutePath: string,\n content: string,\n options: {\n projectRoot?: string | undefined;\n overwrite?: boolean | undefined;\n dryRun?: boolean | undefined;\n } = {}\n): GeneratedFile {\n const projectRoot = options.projectRoot || process.cwd();\n const relPath = path.relative(projectRoot, absolutePath).replace(/\\\\/g, \"/\");\n const existedBefore = fs.existsSync(absolutePath);\n\n if (options.dryRun) {\n return {\n relativePath: relPath,\n absolutePath,\n content,\n action: \"preview\",\n existedBefore,\n };\n }\n\n if (existedBefore && !options.overwrite) {\n return {\n relativePath: relPath,\n absolutePath,\n content,\n action: \"skipped\",\n existedBefore: true,\n };\n }\n\n const dir = path.dirname(absolutePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(absolutePath, content, \"utf-8\");\n\n return {\n relativePath: relPath,\n absolutePath,\n content,\n action: existedBefore ? \"overwritten\" : \"created\",\n existedBefore,\n };\n}\n\nexport function printGeneratedFiles(files: GeneratedFile[], isDryRun: boolean = false): void {\n console.log(\"\");\n if (isDryRun) {\n p.log.warn(pc.yellow(pc.bold(\"[DRY RUN PREVIEW] No files were written to disk.\")));\n }\n\n for (const f of files) {\n if (f.action === \"created\") {\n p.log.success(`${pc.bold(f.relativePath)} ${pc.dim(\"(created)\")}`);\n } else if (f.action === \"overwritten\") {\n p.log.warn(`${pc.bold(f.relativePath)} ${pc.dim(\"(overwritten)\")}`);\n } else if (f.action === \"skipped\") {\n p.log.info(`${pc.dim(f.relativePath)} ${pc.dim(\"(skipped - already exists, pass -o to overwrite)\")}`);\n } else {\n p.log.info(`${pc.bold(f.relativePath)} ${pc.dim(\"(preview)\")}`);\n }\n }\n}\n","/**\n * Convert string to PascalCase\n * e.g. \"users\" -> \"Users\", \"user-profile\" -> \"UserProfile\", \"user_service\" -> \"UserService\"\n */\nexport function toPascalCase(str: string): string {\n if (!str) return \"\";\n return str\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : \"\"))\n .replace(/^[a-z]/, (c) => c.toUpperCase());\n}\n\n/**\n * Convert string to camelCase\n * e.g. \"UserProfile\" -> \"userProfile\", \"IUserRepository\" -> \"userRepository\"\n */\nexport function toCamelCase(str: string): string {\n if (!str) return \"\";\n let s = str;\n // If starts with 'I' followed by uppercase letter, strip 'I' (e.g. IUserRepository -> UserRepository -> userRepository)\n if (/^I[A-Z]/.test(s)) {\n s = s.slice(1);\n }\n const pascal = toPascalCase(s);\n return pascal.charAt(0).toLowerCase() + pascal.slice(1);\n}\n\n/**\n * Convert string to kebab-case\n * e.g. \"UserProfile\" -> \"user-profile\", \"user_profile\" -> \"user-profile\"\n */\nexport function toKebabCase(str: string): string {\n if (!str) return \"\";\n return str\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/[-_\\s]+/g, \"-\")\n .toLowerCase();\n}\n\n/**\n * Naive singularization for common developer nouns\n */\nexport function toSingular(str: string): string {\n if (!str) return \"\";\n const lower = str.toLowerCase();\n if (lower.endsWith(\"ies\")) {\n return str.slice(0, -3) + (str.endsWith(\"IES\") ? \"Y\" : \"y\");\n }\n if (lower.endsWith(\"ses\") && !lower.endsWith(\"sses\")) {\n return str.slice(0, -2);\n }\n if (lower.endsWith(\"s\") && !lower.endsWith(\"ss\")) {\n return str.slice(0, -1);\n }\n return str;\n}\n\n/**\n * Naive pluralization for common developer nouns\n */\nexport function toPlural(str: string): string {\n if (!str) return \"\";\n const lower = str.toLowerCase();\n if (lower.endsWith(\"y\") && !/[aeiou]y$/i.test(lower)) {\n return str.slice(0, -1) + (str.endsWith(\"Y\") ? \"IES\" : \"ies\");\n }\n if (lower.endsWith(\"s\") || lower.endsWith(\"x\") || lower.endsWith(\"z\") || lower.endsWith(\"ch\") || lower.endsWith(\"sh\")) {\n return str + (str === str.toUpperCase() ? \"ES\" : \"es\");\n }\n return str + (str === str.toUpperCase() ? \"S\" : \"s\");\n}\n\n/**\n * Ensure interface starts with 'I'\n * e.g. \"UserRepository\" -> \"IUserRepository\", \"IUserRepository\" -> \"IUserRepository\"\n */\nexport function ensureInterfacePrefix(name: string): string {\n const pascal = toPascalCase(name);\n if (/^I[A-Z]/.test(pascal)) {\n return pascal;\n }\n return `I${pascal}`;\n}\n\n/**\n * Remove interface 'I' prefix\n * e.g. \"IUserRepository\" -> \"UserRepository\", \"UserRepository\" -> \"UserRepository\"\n */\nexport function removeInterfacePrefix(name: string): string {\n if (/^I[A-Z]/.test(name)) {\n return name.slice(1);\n }\n return name;\n}\n\n/**\n * Generate stub class name for an interface\n * e.g. \"IUserRepository\" -> \"StubUserRepository\", \"UserRepository\" -> \"StubUserRepository\"\n */\nexport function toStubName(ifaceName: string): string {\n const base = removeInterfacePrefix(ifaceName);\n if (base.startsWith(\"Stub\")) {\n return base;\n }\n return `Stub${base}`;\n}\n\n/**\n * Validate non-empty valid JS identifier\n */\nexport function isValidIdentifier(str: string): boolean {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(str);\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport interface MasonConfig {\n mode?: \"app\" | \"registry\";\n registry?: string;\n paths?: {\n features?: string;\n shared?: string;\n };\n}\n\n/**\n * Searches upward for mason.config.json starting from startDir\n */\nexport function loadMasonConfig(startDir: string = process.cwd()): MasonConfig | null {\n let current = path.resolve(startDir);\n while (true) {\n const configPath = path.join(current, \"mason.config.json\");\n if (fs.existsSync(configPath)) {\n try {\n return JSON.parse(fs.readFileSync(configPath, \"utf-8\")) as MasonConfig;\n } catch {\n return null;\n }\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return null;\n}\n\n/**\n * Determine effective mode: \"app\" or \"registry\"\n */\nexport function getEffectiveMode(\n projectRoot: string,\n flags?: { registry?: boolean }\n): \"app\" | \"registry\" {\n if (flags?.registry) return \"registry\";\n\n const config = loadMasonConfig(projectRoot);\n if (config?.mode) return config.mode;\n\n // Auto-detection: if project has index.json and (features/ or shared/) and no src/\n if (\n fs.existsSync(path.join(projectRoot, \"index.json\")) &&\n (fs.existsSync(path.join(projectRoot, \"features\")) || fs.existsSync(path.join(projectRoot, \"shared\"))) &&\n !fs.existsSync(path.join(projectRoot, \"src\"))\n ) {\n return \"registry\";\n }\n\n return \"app\";\n}\n\n/**\n * Resolve configured features directory path\n */\nexport function getConfiguredFeaturesDir(\n projectRoot: string,\n flags?: { target?: string; dest?: string; registry?: boolean }\n): string {\n if (flags?.target) return path.resolve(projectRoot, flags.target);\n if (flags?.dest) return path.resolve(projectRoot, flags.dest);\n\n const config = loadMasonConfig(projectRoot);\n if (config?.paths?.features) {\n return path.resolve(projectRoot, config.paths.features);\n }\n\n const mode = getEffectiveMode(projectRoot, flags);\n if (mode === \"registry\") {\n return path.join(projectRoot, \"features\");\n }\n\n if (fs.existsSync(path.join(projectRoot, \"src/features\"))) {\n return path.join(projectRoot, \"src/features\");\n }\n\n return path.join(projectRoot, \"features\");\n}\n\n/**\n * Resolve configured shared directory path\n */\nexport function getConfiguredSharedDir(\n projectRoot: string,\n flags?: { target?: string; dest?: string; registry?: boolean }\n): string {\n if (flags?.target) return path.resolve(projectRoot, flags.target);\n if (flags?.dest) return path.resolve(projectRoot, flags.dest);\n\n const config = loadMasonConfig(projectRoot);\n if (config?.paths?.shared) {\n return path.resolve(projectRoot, config.paths.shared);\n }\n\n const mode = getEffectiveMode(projectRoot, flags);\n if (mode === \"registry\") {\n return path.join(projectRoot, \"shared\");\n }\n\n if (fs.existsSync(path.join(projectRoot, \"src/shared\"))) {\n return path.join(projectRoot, \"src/shared\");\n }\n\n return path.join(projectRoot, \"shared\");\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getConfiguredFeaturesDir, getConfiguredSharedDir } from \"./config.js\";\n\n/**\n * Locate project root by finding the nearest package.json\n */\nexport function findProjectRoot(startDir: string = process.cwd()): string {\n let current = path.resolve(startDir);\n while (true) {\n if (fs.existsSync(path.join(current, \"package.json\"))) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return path.resolve(startDir);\n }\n current = parent;\n }\n}\n\n/**\n * Resolve features directory (respects mason.config.json and mode)\n */\nexport function resolveFeaturesDir(\n projectRoot: string,\n flags?: { target?: string; dest?: string; registry?: boolean }\n): string {\n return getConfiguredFeaturesDir(projectRoot, flags);\n}\n\n/**\n * Resolve shared directory (respects mason.config.json and mode)\n */\nexport function resolveSharedDir(\n projectRoot: string,\n flags?: { target?: string; dest?: string; registry?: boolean }\n): string {\n return getConfiguredSharedDir(projectRoot, flags);\n}\n\n/**\n * List existing shared module names in project\n */\nexport function listExistingShared(projectRoot: string): string[] {\n const sharedDir = resolveSharedDir(projectRoot);\n if (!fs.existsSync(sharedDir)) return [];\n\n try {\n const entries = fs.readdirSync(sharedDir, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory() && !e.name.startsWith(\".\"))\n .map((e) => e.name)\n .sort();\n } catch {\n return [];\n }\n}\n\n/**\n * List existing feature names in project\n */\nexport function listExistingFeatures(projectRoot: string): string[] {\n const featuresDir = resolveFeaturesDir(projectRoot);\n if (!fs.existsSync(featuresDir)) return [];\n\n try {\n const entries = fs.readdirSync(featuresDir, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort();\n } catch {\n return [];\n }\n}\n\n/**\n * List domain interfaces in a feature (or all features)\n */\nexport function listDomainInterfaces(\n projectRoot: string,\n featureName?: string\n): Array<{ name: string; fullPath: string; feature: string }> {\n const results: Array<{ name: string; fullPath: string; feature: string }> = [];\n const features = featureName ? [featureName] : listExistingFeatures(projectRoot);\n\n for (const feat of features) {\n const domainDir = path.join(resolveFeaturesDir(projectRoot), feat, \"domain\");\n if (!fs.existsSync(domainDir)) continue;\n\n try {\n const files = fs.readdirSync(domainDir);\n for (const file of files) {\n if (file.endsWith(\".ts\") && !file.endsWith(\".test.ts\") && !file.endsWith(\".d.ts\")) {\n const name = file.replace(/\\.ts$/, \"\");\n const fullPath = path.join(domainDir, file);\n if (/^I[A-Z]/.test(name)) {\n results.push({\n name,\n fullPath,\n feature: feat,\n });\n } else {\n try {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n if (/export\\s+(?:abstract\\s+class|interface)\\s+(\\w+)/.test(content)) {\n results.push({\n name,\n fullPath,\n feature: feat,\n });\n }\n } catch {\n // ignore\n }\n }\n }\n }\n } catch {\n // ignore\n }\n }\n\n return results;\n}\n\n/**\n * List domain entities in a feature (or all features)\n */\nexport function listDomainEntities(\n projectRoot: string,\n featureName?: string\n): Array<{ name: string; fullPath: string; feature: string }> {\n const results: Array<{ name: string; fullPath: string; feature: string }> = [];\n const features = featureName ? [featureName] : listExistingFeatures(projectRoot);\n\n for (const feat of features) {\n const domainDir = path.join(resolveFeaturesDir(projectRoot), feat, \"domain\");\n if (!fs.existsSync(domainDir)) continue;\n\n try {\n const files = fs.readdirSync(domainDir);\n for (const file of files) {\n if (file.endsWith(\".ts\") && !file.endsWith(\".test.ts\") && !file.endsWith(\".d.ts\")) {\n const name = file.replace(/\\.ts$/, \"\");\n if (!/^I[A-Z]/.test(name)) {\n results.push({\n name,\n fullPath: path.join(domainDir, file),\n feature: feat,\n });\n }\n }\n }\n } catch {\n // ignore\n }\n }\n\n return results;\n}\n\n/**\n * List use cases in a feature (or all features)\n */\nexport function listUseCases(\n projectRoot: string,\n featureName?: string\n): Array<{ name: string; fullPath: string; feature: string }> {\n const results: Array<{ name: string; fullPath: string; feature: string }> = [];\n const features = featureName ? [featureName] : listExistingFeatures(projectRoot);\n\n for (const feat of features) {\n const useCasesDir = path.join(resolveFeaturesDir(projectRoot), feat, \"useCases\");\n if (!fs.existsSync(useCasesDir)) continue;\n\n try {\n const files = fs.readdirSync(useCasesDir);\n for (const file of files) {\n if (file.endsWith(\".ts\") && !file.endsWith(\".test.ts\") && !file.endsWith(\".d.ts\")) {\n const name = file.replace(/\\.ts$/, \"\");\n results.push({\n name,\n fullPath: path.join(useCasesDir, file),\n feature: feat,\n });\n }\n }\n } catch {\n // ignore\n }\n }\n\n return results;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport Handlebars from \"handlebars\";\nimport { toCamelCase, toKebabCase, toPascalCase } from \"../utils/formatting.js\";\n\n// Create isolated Handlebars instance to avoid polluting global state\nexport const hbs = Handlebars.create();\n\n// Register standard helpers useful for TypeScript code generation\nhbs.registerHelper(\"eq\", (a: unknown, b: unknown) => a === b);\nhbs.registerHelper(\"ne\", (a: unknown, b: unknown) => a !== b);\nhbs.registerHelper(\"not\", (a: unknown) => !a);\nhbs.registerHelper(\"and\", (...args: unknown[]) => args.slice(0, -1).every(Boolean));\nhbs.registerHelper(\"or\", (...args: unknown[]) => args.slice(0, -1).some(Boolean));\nhbs.registerHelper(\"pascalCase\", (str: string) => toPascalCase(str));\nhbs.registerHelper(\"camelCase\", (str: string) => toCamelCase(str));\nhbs.registerHelper(\"kebabCase\", (str: string) => toKebabCase(str));\nhbs.registerHelper(\"join\", (arr: unknown[], sep: unknown) => {\n if (!Array.isArray(arr)) return \"\";\n const delimiter = typeof sep === \"string\" ? sep : \", \";\n return arr.join(delimiter);\n});\n\nlet cachedTemplatesDir: string | null = null;\n\n/**\n * Resolves the absolute path to the templates directory across development and production builds.\n */\nexport function getTemplatesDir(): string {\n if (cachedTemplatesDir && fs.existsSync(cachedTemplatesDir)) {\n return cachedTemplatesDir;\n }\n\n const currentDir = typeof __dirname !== \"undefined\"\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\n // 1. From src/templates/ -> ../../templates\n const cand1 = path.resolve(currentDir, \"../../templates\");\n if (fs.existsSync(cand1)) {\n cachedTemplatesDir = cand1;\n return cand1;\n }\n\n // 2. From dist/ -> ../templates\n const cand2 = path.resolve(currentDir, \"../templates\");\n if (fs.existsSync(cand2)) {\n cachedTemplatesDir = cand2;\n return cand2;\n }\n\n // 3. Direct subdirectory (dist/templates)\n const cand3 = path.resolve(currentDir, \"templates\");\n if (fs.existsSync(cand3)) {\n cachedTemplatesDir = cand3;\n return cand3;\n }\n\n // 4. Walk up to locate templates directory\n let curr = currentDir;\n while (true) {\n const candTemplates = path.join(curr, \"templates\");\n if (fs.existsSync(candTemplates)) {\n cachedTemplatesDir = candTemplates;\n return candTemplates;\n }\n const parent = path.dirname(curr);\n if (parent === curr) break;\n curr = parent;\n }\n\n throw new Error(\"Could not locate templates directory for @solid-stack/create\");\n}\n\nconst templateCache = new Map<string, Handlebars.TemplateDelegate>();\n\n/**\n * Reads a .hbs template file from the templates directory.\n */\nexport function loadTemplate(relativePath: string): string {\n const fullPath = path.isAbsolute(relativePath)\n ? relativePath\n : path.join(getTemplatesDir(), relativePath);\n return fs.readFileSync(fullPath, \"utf-8\");\n}\n\n/**\n * Compiles and renders a Handlebars .hbs template file from disk with caching and noEscape.\n */\nexport function renderTemplateFile<T extends object>(relativePath: string, context: T): string {\n let compiled = templateCache.get(relativePath);\n if (!compiled) {\n const source = loadTemplate(relativePath);\n compiled = hbs.compile(source.trim(), { noEscape: true });\n templateCache.set(relativePath, compiled);\n }\n const result = compiled(context);\n return result.endsWith(\"\\n\") ? result : result + \"\\n\";\n}\n\n/**\n * Compiles and renders a Handlebars template string or .hbs file path with HTML escaping disabled.\n * Caches compiled templates for maximum performance.\n */\nexport function renderTemplate<T extends object>(sourceOrPath: string, context: T): string {\n if (sourceOrPath.endsWith(\".hbs\")) {\n return renderTemplateFile(sourceOrPath, context);\n }\n\n let compiled = templateCache.get(sourceOrPath);\n if (!compiled) {\n compiled = hbs.compile(sourceOrPath.trim(), { noEscape: true });\n templateCache.set(sourceOrPath, compiled);\n }\n const result = compiled(context);\n return result.endsWith(\"\\n\") ? result : result + \"\\n\";\n}\n","import { loadTemplate } from \"./engine.js\";\n\nexport const domainInterfaceTemplate = loadTemplate(\"domain/interface.hbs\");\nexport const domainClassTemplate = loadTemplate(\"domain/class.hbs\");\nexport const domainValueObjectTemplate = loadTemplate(\"domain/valueObject.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const interfaceTemplate = loadTemplate(\"interface/interface.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const useCaseTemplate = loadTemplate(\"useCase/useCase.hbs\");\nexport const useCaseTestTemplate = loadTemplate(\"useCase/useCaseTest.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const concreteInfraTemplate = loadTemplate(\"infra/concrete.hbs\");\nexport const stubInfraTemplate = loadTemplate(\"infra/stub.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const httpHandlerTemplate = loadTemplate(\"httpHandler/handler.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const injectableTemplate = loadTemplate(\"injectable/injectable.hbs\");\nexport const injectableInterfaceTemplate = loadTemplate(\"injectable/interface.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const diProviderTemplate = loadTemplate(\"provider/provider.hbs\");\n","import { loadTemplate } from \"./engine.js\";\n\nexport const expressIndexTemplate = loadTemplate(\"express/index.hbs\");\n","import path from \"node:path\";\nimport type { DomainOptions, GeneratedFile, PropertyDef } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport {\n domainClassTemplate,\n domainInterfaceTemplate,\n domainValueObjectTemplate,\n renderTemplate,\n} from \"../templates/index.js\";\n\nexport function generateDomainEntityCode(\n name: string,\n kind: \"interface\" | \"class\" | \"valueObject\" = \"interface\",\n properties: PropertyDef[] = []\n): string {\n const entityName = toPascalCase(name);\n\n const defaultProps: PropertyDef[] = [\n { name: \"id\", type: \"string\" },\n { name: \"createdAt\", type: \"Date\" },\n { name: \"updatedAt\", type: \"Date\" },\n ];\n\n const effectiveProps = properties.length > 0 ? properties : defaultProps;\n\n if (kind === \"interface\") {\n return renderTemplate(domainInterfaceTemplate, {\n name: entityName,\n properties: effectiveProps,\n });\n }\n\n if (kind === \"class\") {\n return renderTemplate(domainClassTemplate, {\n name: entityName,\n properties: effectiveProps,\n });\n }\n\n if (kind === \"valueObject\") {\n const valueProp = effectiveProps[0] || { name: \"value\", type: \"string\" };\n return renderTemplate(domainValueObjectTemplate, {\n name: entityName,\n valueProp,\n });\n }\n\n return \"\";\n}\n\nexport function generateDomain(options: DomainOptions): GeneratedFile {\n const projectRoot = options.projectRoot || findProjectRoot();\n const entityName = toPascalCase(options.name);\n const targetDir = options.targetDir || path.join(resolveFeaturesDir(projectRoot), options.feature, \"domain\");\n const filePath = path.join(targetDir, `${entityName}.ts`);\n\n const code = generateDomainEntityCode(\n entityName,\n options.kind || \"interface\",\n options.properties || []\n );\n\n return writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n}\n","import path from \"node:path\";\nimport type { GeneratedFile, InterfaceOptions, MethodDef } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { ensureInterfacePrefix, removeInterfacePrefix, toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport { interfaceTemplate, renderTemplate } from \"../templates/index.js\";\n\nexport function generateInterfaceCode(\n ifaceName: string,\n kind: \"abstractClass\" | \"interface\" = \"abstractClass\",\n entityName?: string,\n methodsPreset: \"crud\" | \"custom\" | \"empty\" = \"crud\",\n customMethods: MethodDef[] = []\n): string {\n const validIfaceName = ensureInterfacePrefix(ifaceName);\n const baseEntity = entityName\n ? toPascalCase(entityName)\n : toPascalCase(removeInterfacePrefix(validIfaceName).replace(/Repository$|Service$|Client$/, \"\"));\n\n const isCrud = methodsPreset === \"crud\" && Boolean(baseEntity);\n const isCustom = methodsPreset === \"custom\" && customMethods.length > 0;\n const isAbstractClass = kind === \"abstractClass\";\n const methodPrefix = isAbstractClass ? \"abstract \" : \"\";\n\n const domainImport = isCrud ? baseEntity : undefined;\n const entityKey = baseEntity ? baseEntity.charAt(0).toLowerCase() + baseEntity.slice(1) : \"\";\n const idKey = `${entityKey}Id`;\n const listKey = `${entityKey}s`;\n\n const formattedCustomMethods = customMethods.map((m) => {\n const params = m.params && m.params.length > 0\n ? m.params.map((p) => `${p.name}: ${p.type}`).join(\"; \")\n : \"\";\n const returnType = m.returnType ? `Promise<${m.returnType}>` : \"Promise<void>\";\n return {\n name: m.name,\n params,\n returnType,\n };\n });\n\n return renderTemplate(interfaceTemplate, {\n ifaceName: validIfaceName,\n isAbstractClass,\n domainImport,\n isCrud,\n baseEntity,\n idKey,\n entityKey,\n listKey,\n methodPrefix,\n isCustom,\n customMethods: formattedCustomMethods,\n });\n}\n\nexport function generateInterface(options: InterfaceOptions): GeneratedFile {\n const projectRoot = options.projectRoot || findProjectRoot();\n const ifaceName = ensureInterfacePrefix(options.name);\n const targetDir = options.targetDir || path.join(resolveFeaturesDir(projectRoot), options.feature, \"domain\");\n const filePath = path.join(targetDir, `${ifaceName}.ts`);\n\n const code = generateInterfaceCode(\n ifaceName,\n options.kind || \"abstractClass\",\n options.entityName,\n options.methodsPreset || \"crud\",\n options.customMethods || []\n );\n\n return writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { GeneratedFile, InfrastructureOptions } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { ensureInterfacePrefix, removeInterfacePrefix, toPascalCase, toStubName } from \"../utils/formatting.js\";\nimport { findProjectRoot, listExistingFeatures, resolveFeaturesDir } from \"../utils/project.js\";\nimport {\n concreteInfraTemplate,\n renderTemplate,\n stubInfraTemplate,\n} from \"../templates/index.js\";\n\nexport interface InterfaceMethodDef {\n name: string;\n typeParams?: string | undefined;\n params: string;\n returnType: string;\n isAsync: boolean;\n}\n\nexport interface InterfaceImportDef {\n specifier: string;\n items: Array<{ name: string; isTypeOnly?: boolean | undefined }>;\n isTypeOnly: boolean;\n}\n\nexport interface ParsedInterfaceResult {\n className: string;\n methods: InterfaceMethodDef[];\n imports: InterfaceImportDef[];\n extendsClass?: string | undefined;\n}\n\n/**\n * Parses interface or abstract class declarations from TypeScript file content.\n * Extracts methods, parameters, return types, and referenced imports.\n */\nexport function parseInterfaceMethodsAndImports(\n content: string,\n targetIfaceName?: string\n): ParsedInterfaceResult {\n const imports: InterfaceImportDef[] = [];\n const methods: InterfaceMethodDef[] = [];\n let extendsClass: string | undefined;\n\n // 1. Extract imports\n const importRegex = /import\\s+(type\\s+)?(?:(\\w+)|\\{([^}]+)\\}|\\*\\s+as\\s+(\\w+))\\s+from\\s+[\"']([^\"']+)[\"'];?/g;\n let impMatch: RegExpExecArray | null;\n while ((impMatch = importRegex.exec(content)) !== null) {\n const isGlobalType = Boolean(impMatch[1]);\n const defaultImport = impMatch[2];\n const namedImports = impMatch[3];\n const namespaceImport = impMatch[4];\n const specifier = impMatch[5]!;\n\n const items: Array<{ name: string; isTypeOnly?: boolean | undefined }> = [];\n\n if (defaultImport) {\n items.push({ name: defaultImport, isTypeOnly: isGlobalType ? true : undefined });\n } else if (namespaceImport) {\n items.push({ name: namespaceImport, isTypeOnly: isGlobalType ? true : undefined });\n } else if (namedImports) {\n const parts = namedImports.split(\",\");\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n const typeMatch = trimmed.match(/^type\\s+(\\w+)(?:\\s+as\\s+\\w+)?$/);\n const normalMatch = trimmed.match(/^(\\w+)(?:\\s+as\\s+\\w+)?$/);\n if (typeMatch) {\n items.push({ name: typeMatch[1]!, isTypeOnly: true });\n } else if (normalMatch) {\n items.push({ name: normalMatch[1]!, isTypeOnly: isGlobalType ? true : undefined });\n }\n }\n }\n\n if (items.length > 0) {\n imports.push({\n specifier,\n items,\n isTypeOnly: isGlobalType,\n });\n }\n }\n\n // 2. Find the target abstract class or interface declaration\n let classRegex: RegExp;\n if (targetIfaceName) {\n classRegex = new RegExp(\n `(?:export\\\\s+)?(?:abstract\\\\s+class|interface)\\\\s+(${targetIfaceName})\\\\b([^{]*)\\\\{`,\n \"g\"\n );\n } else {\n classRegex = /(?:export\\\\s+)?(?:abstract\\\\s+class|interface)\\\\s+([A-Za-z0-9_$]+)\\b([^{]*)\\{/g;\n }\n\n const declMatch = classRegex.exec(content);\n if (!declMatch) {\n return {\n className: targetIfaceName || \"\",\n methods: [],\n imports,\n };\n }\n\n const className = declMatch[1]!;\n const headerRemainder = declMatch[2] || \"\";\n const headerEnd = declMatch.index + declMatch[0].length;\n\n // Check extends\n const extMatch = headerRemainder.match(/\\bextends\\s+([A-Za-z0-9_$]+)\\b/);\n if (extMatch) {\n extendsClass = extMatch[1];\n }\n\n // 3. Extract class body with balanced braces\n let depth = 1;\n let bodyEnd = -1;\n for (let i = headerEnd; i < content.length; i++) {\n const ch = content[i];\n if (ch === \"/\" && content[i + 1] === \"/\") {\n const nl = content.indexOf(\"\\n\", i);\n i = nl === -1 ? content.length : nl;\n continue;\n }\n if (ch === \"/\" && content[i + 1] === \"*\") {\n const closeComment = content.indexOf(\"*/\", i + 2);\n i = closeComment === -1 ? content.length : closeComment + 1;\n continue;\n }\n if (ch === '\"' || ch === \"'\" || ch === \"`\") {\n const quote = ch;\n i++;\n while (i < content.length && content[i] !== quote) {\n if (content[i] === \"\\\\\") i++;\n i++;\n }\n continue;\n }\n\n if (ch === \"{\") {\n depth++;\n } else if (ch === \"}\") {\n depth--;\n if (depth === 0) {\n bodyEnd = i;\n break;\n }\n }\n }\n\n if (bodyEnd === -1) {\n bodyEnd = content.length;\n }\n\n const body = content.slice(headerEnd, bodyEnd);\n\n // 4. Split body into statements ending with ';' at depth 0\n const statements: string[] = [];\n let currentStmt = \"\";\n let pDepth = 0; // ()\n let bDepth = 0; // {}\n let sDepth = 0; // []\n let aDepth = 0; // <>\n\n for (let i = 0; i < body.length; i++) {\n const ch = body[i];\n if (ch === \"/\" && body[i + 1] === \"/\") {\n const nl = body.indexOf(\"\\n\", i);\n i = nl === -1 ? body.length : nl;\n continue;\n }\n if (ch === \"/\" && body[i + 1] === \"*\") {\n const closeComment = body.indexOf(\"*/\", i + 2);\n i = closeComment === -1 ? body.length : closeComment + 1;\n continue;\n }\n if (ch === '\"' || ch === \"'\" || ch === \"`\") {\n const quote = ch;\n currentStmt += ch;\n i++;\n while (i < body.length && body[i] !== quote) {\n if (body[i] === \"\\\\\") {\n currentStmt += body[i];\n i++;\n }\n if (i < body.length) currentStmt += body[i];\n i++;\n }\n if (i < body.length) currentStmt += body[i];\n continue;\n }\n\n if (ch === \"(\") pDepth++;\n else if (ch === \")\") pDepth = Math.max(0, pDepth - 1);\n else if (ch === \"{\") bDepth++;\n else if (ch === \"}\") bDepth = Math.max(0, bDepth - 1);\n else if (ch === \"[\") sDepth++;\n else if (ch === \"]\") sDepth = Math.max(0, sDepth - 1);\n else if (ch === \"<\") aDepth++;\n else if (ch === \">\") aDepth = Math.max(0, aDepth - 1);\n\n if (ch === \";\" && pDepth === 0 && bDepth === 0 && sDepth === 0 && aDepth === 0) {\n if (currentStmt.trim()) {\n statements.push(currentStmt.trim());\n }\n currentStmt = \"\";\n } else {\n currentStmt += ch;\n }\n }\n if (currentStmt.trim()) {\n statements.push(currentStmt.trim());\n }\n\n // 5. Parse each statement into a method declaration\n for (let stmt of statements) {\n stmt = stmt.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\").trim();\n stmt = stmt.replace(/^(?:public\\s+|protected\\s+|private\\s+)?(?:abstract\\s+)?(?:readonly\\s+)?/, \"\").trim();\n\n const firstParen = stmt.indexOf(\"(\");\n if (firstParen === -1) continue;\n\n let methodName = \"\";\n let typeParams: string | undefined;\n\n const firstAngle = stmt.indexOf(\"<\");\n if (firstAngle !== -1 && firstAngle < firstParen) {\n methodName = stmt.slice(0, firstAngle).trim().replace(/^(?:async\\s+)/, \"\");\n let angDepth = 0;\n let angClose = -1;\n for (let j = firstAngle; j < firstParen; j++) {\n if (stmt[j] === \"<\") angDepth++;\n else if (stmt[j] === \">\") {\n angDepth--;\n if (angDepth === 0) {\n angClose = j;\n break;\n }\n }\n }\n if (angClose !== -1) {\n typeParams = stmt.slice(firstAngle, angClose + 1).trim();\n }\n } else {\n methodName = stmt.slice(0, firstParen).trim().replace(/^(?:async\\s+)/, \"\");\n }\n\n if (!methodName || !/^[A-Za-z0-9_$]+$/.test(methodName)) {\n continue;\n }\n\n // Find matching ')'\n let parenDepth = 0;\n let parenClose = -1;\n for (let j = firstParen; j < stmt.length; j++) {\n if (stmt[j] === \"(\") parenDepth++;\n else if (stmt[j] === \")\") {\n parenDepth--;\n if (parenDepth === 0) {\n parenClose = j;\n break;\n }\n }\n }\n if (parenClose === -1) continue;\n\n const rawParams = stmt.slice(firstParen + 1, parenClose).trim();\n const params = rawParams.replace(/\\s+/g, \" \");\n\n const afterParen = stmt.slice(parenClose + 1).trim();\n let returnType = \"void\";\n if (afterParen.startsWith(\":\")) {\n returnType = afterParen.slice(1).trim().replace(/\\s+/g, \" \");\n }\n\n const isAsync = returnType.startsWith(\"Promise<\") || returnType === \"Promise\";\n\n methods.push({\n name: methodName,\n typeParams,\n params,\n returnType,\n isAsync,\n });\n }\n\n return {\n className,\n methods,\n imports,\n extendsClass,\n };\n}\n\n/**\n * Searches for an interface or abstract class file across features or project root.\n */\nexport function findInterfaceFile(\n projectRoot: string,\n ifaceName: string,\n featureName?: string,\n customPath?: string\n): { filePath: string; ifaceName: string; feature?: string } | null {\n if (customPath && fs.existsSync(customPath)) {\n return { filePath: customPath, ifaceName };\n }\n\n const candidateNames = [\n ifaceName,\n ensureInterfacePrefix(ifaceName),\n removeInterfacePrefix(ifaceName),\n ];\n\n const features = featureName\n ? [featureName, ...listExistingFeatures(projectRoot).filter((f) => f !== featureName)]\n : listExistingFeatures(projectRoot);\n\n for (const feat of features) {\n const domainDir = path.join(resolveFeaturesDir(projectRoot), feat, \"domain\");\n if (!fs.existsSync(domainDir)) continue;\n\n for (const cand of candidateNames) {\n const p1 = path.join(domainDir, `${cand}.ts`);\n if (fs.existsSync(p1)) {\n return { filePath: p1, ifaceName: cand, feature: feat };\n }\n }\n }\n\n for (const cand of candidateNames) {\n const p1 = path.join(projectRoot, \"domain\", `${cand}.ts`);\n if (fs.existsSync(p1)) return { filePath: p1, ifaceName: cand };\n const p2 = path.join(projectRoot, \"src\", \"domain\", `${cand}.ts`);\n if (fs.existsSync(p2)) return { filePath: p2, ifaceName: cand };\n const p3 = path.join(projectRoot, \"interfaces\", `${cand}.ts`);\n if (fs.existsSync(p3)) return { filePath: p3, ifaceName: cand };\n }\n\n return null;\n}\n\n/**\n * Loads an interface or abstract class including methods and imports from any extended base classes.\n */\nexport function loadInterfaceHierarchy(\n projectRoot: string,\n initialIfaceName: string,\n featureName?: string,\n customPath?: string\n): {\n resolvedIfaceName: string;\n ifaceFilePath?: string | undefined;\n methods: InterfaceMethodDef[];\n imports: InterfaceImportDef[];\n} {\n const found = findInterfaceFile(projectRoot, initialIfaceName, featureName, customPath);\n if (!found) {\n return {\n resolvedIfaceName: initialIfaceName,\n methods: [],\n imports: [],\n };\n }\n\n const visited = new Set<string>();\n const allMethods: InterfaceMethodDef[] = [];\n const allImports: InterfaceImportDef[] = [];\n let currentFile: string | undefined = found.filePath;\n let currentName = found.ifaceName;\n const primaryResolvedName = found.ifaceName;\n const primaryFilePath = found.filePath;\n\n while (currentFile && !visited.has(currentFile)) {\n visited.add(currentFile);\n try {\n const content = fs.readFileSync(currentFile, \"utf-8\");\n const parsed = parseInterfaceMethodsAndImports(content, currentName);\n\n for (const m of parsed.methods) {\n if (!allMethods.some((existing) => existing.name === m.name)) {\n allMethods.push(m);\n }\n }\n\n for (const imp of parsed.imports) {\n allImports.push(imp);\n }\n\n if (parsed.extendsClass) {\n const nextFound = findInterfaceFile(projectRoot, parsed.extendsClass, featureName);\n if (nextFound) {\n currentFile = nextFound.filePath;\n currentName = nextFound.ifaceName;\n } else {\n currentFile = undefined;\n }\n } else {\n currentFile = undefined;\n }\n } catch {\n break;\n }\n }\n\n return {\n resolvedIfaceName: primaryResolvedName,\n ifaceFilePath: primaryFilePath,\n methods: allMethods,\n imports: allImports,\n };\n}\n\n/**\n * Synthesizes standard CRUD methods for a repository interface when not present on disk.\n */\nexport function synthesizeCrudMethods(entityName: string): InterfaceMethodDef[] {\n const baseEntity = toPascalCase(entityName);\n const entityVar = baseEntity.charAt(0).toLowerCase() + baseEntity.slice(1);\n const entitiesVar = `${entityVar}s`;\n const idKey = `${entityVar}Id`;\n\n return [\n {\n name: `Get${baseEntity}ById`,\n params: `input: { ${idKey}: string }`,\n returnType: `Promise<{ ${entityVar}: ${baseEntity} }>`,\n isAsync: true,\n },\n {\n name: `List${baseEntity}s`,\n params: `input?: { page?: number | undefined; limit?: number | undefined }`,\n returnType: `Promise<{ ${entitiesVar}: ${baseEntity}[]; total?: number | undefined; page?: number | undefined; limit?: number | undefined }>`,\n isAsync: true,\n },\n {\n name: `Create${baseEntity}`,\n params: `input: { ${entityVar}: ${baseEntity} }`,\n returnType: `Promise<{ ${entityVar}: ${baseEntity} }>`,\n isAsync: true,\n },\n {\n name: `Update${baseEntity}`,\n params: `input: { ${entityVar}: ${baseEntity} }`,\n returnType: `Promise<{ ${entityVar}: ${baseEntity} }>`,\n isAsync: true,\n },\n {\n name: `Delete${baseEntity}`,\n params: `input: { ${idKey}: string }`,\n returnType: `Promise<{ success: boolean }>`,\n isAsync: true,\n },\n ];\n}\n\nexport function generateStubCode(\n stubClassName: string,\n ifaceName: string,\n entityName?: string,\n featureName?: string,\n methods: InterfaceMethodDef[] = [],\n domainImports: Array<{ name: string; from: string; isTypeOnly?: boolean | undefined }> = [],\n ifaceImportPath?: string\n): string {\n const baseEntity = entityName\n ? toPascalCase(entityName)\n : toPascalCase(removeInterfacePrefix(ifaceName).replace(/Repository$|Service$|Client$/, \"\"));\n const entityVar = baseEntity ? baseEntity.charAt(0).toLowerCase() + baseEntity.slice(1) : \"\";\n const entitiesVar = `${entityVar}s`;\n const idKey = `${entityVar}Id`;\n\n const impPath = ifaceImportPath || `../domain/${ifaceName}.js`;\n const entityImportPath = ifaceImportPath\n ? `${path.dirname(ifaceImportPath)}/${baseEntity}.js`\n : `../domain/${baseEntity}.js`;\n\n // Group additional domain imports\n const importsByFrom = new Map<string, { typeOnly: boolean; names: Set<string> }>();\n for (const imp of domainImports) {\n if (imp.name === ifaceName || imp.name === baseEntity) continue;\n if (!importsByFrom.has(imp.from)) {\n importsByFrom.set(imp.from, { typeOnly: imp.isTypeOnly ?? true, names: new Set() });\n }\n const group = importsByFrom.get(imp.from)!;\n group.names.add(imp.name);\n if (imp.isTypeOnly === false) {\n group.typeOnly = false;\n }\n }\n\n const formattedDomainImports = Array.from(importsByFrom.entries()).map(([from, group]) => ({\n from,\n names: Array.from(group.names).sort().join(\", \"),\n isTypeOnly: group.typeOnly,\n }));\n\n const standardNames = new Set([\n `Get${baseEntity}ById`,\n `List${baseEntity}s`,\n `Create${baseEntity}`,\n `Update${baseEntity}`,\n `Delete${baseEntity}`,\n ]);\n const extraMethods = methods.filter((m) => !standardNames.has(m.name));\n\n return renderTemplate(stubInfraTemplate, {\n stubClassName,\n ifaceName,\n ifaceImportPath: impPath,\n baseEntity: baseEntity || undefined,\n entityImportPath,\n domainImports: formattedDomainImports,\n entitiesVar,\n entityVar,\n idKey,\n extraMethods,\n hasMethods: methods.length > 0,\n methods,\n });\n}\n\nexport function generateConcreteInfraCode(\n className: string,\n ifaceName?: string,\n dependencies: string[] = [],\n methods: InterfaceMethodDef[] = [],\n domainImports: Array<{ name: string; from: string; isTypeOnly?: boolean | undefined }> = [],\n ifaceImportPath?: string\n): string {\n let finalMethods = [...methods];\n const finalDomainImports = [...domainImports];\n\n if (finalMethods.length === 0 && ifaceName) {\n const baseEntity = toPascalCase(removeInterfacePrefix(ifaceName).replace(/Repository$|Service$|Client$/, \"\"));\n if (baseEntity) {\n finalMethods = synthesizeCrudMethods(baseEntity);\n if (!finalDomainImports.some((imp) => imp.name === baseEntity)) {\n const importPath = ifaceImportPath\n ? `${path.dirname(ifaceImportPath)}/${baseEntity}.js`\n : `../domain/${baseEntity}.js`;\n finalDomainImports.push({\n name: baseEntity,\n from: importPath,\n isTypeOnly: true,\n });\n }\n }\n }\n\n const impPath = ifaceName ? (ifaceImportPath || `../domain/${ifaceName}.js`) : \"\";\n\n // Group domainImports by from\n const importsByFrom = new Map<string, { typeOnly: boolean; names: Set<string> }>();\n for (const imp of finalDomainImports) {\n if (imp.name === ifaceName) continue;\n if (!importsByFrom.has(imp.from)) {\n importsByFrom.set(imp.from, { typeOnly: imp.isTypeOnly ?? true, names: new Set() });\n }\n const group = importsByFrom.get(imp.from)!;\n group.names.add(imp.name);\n if (imp.isTypeOnly === false) {\n group.typeOnly = false;\n }\n }\n\n const formattedDomainImports = Array.from(importsByFrom.entries()).map(([from, group]) => ({\n from,\n names: Array.from(group.names).sort().join(\", \"),\n isTypeOnly: group.typeOnly,\n }));\n\n const formattedDeps = dependencies.map((dep) => ({\n key: dep.charAt(0).toLowerCase() + dep.slice(1),\n name: dep,\n }));\n\n return renderTemplate(concreteInfraTemplate, {\n className,\n ifaceName,\n ifaceImportPath: impPath,\n domainImports: formattedDomainImports,\n dependencies: formattedDeps,\n hasMethods: finalMethods.length > 0,\n methods: finalMethods,\n });\n}\n\nexport function generateInfrastructure(options: InfrastructureOptions): GeneratedFile {\n const projectRoot = options.projectRoot || findProjectRoot();\n const className = toPascalCase(options.name);\n const isFeatureScope = options.scope !== \"global\" && Boolean(options.feature);\n\n const targetDir = options.targetDir || (isFeatureScope\n ? path.join(resolveFeaturesDir(projectRoot), options.feature!, \"infrastructure\")\n : path.join(projectRoot, \"infrastructure\"));\n\n const filePath = path.join(targetDir, `${className}.ts`);\n\n let code: string;\n if (options.implementsInterface) {\n const rawIfaceName = options.implementsInterface;\n const hierarchy = loadInterfaceHierarchy(\n projectRoot,\n rawIfaceName,\n options.feature,\n options.interfacePath\n );\n\n const ifaceName = hierarchy.resolvedIfaceName;\n const ifaceFilePath = hierarchy.ifaceFilePath;\n\n let ifaceImportPath: string | undefined;\n if (ifaceFilePath) {\n let rel = path.relative(targetDir, ifaceFilePath).replace(/\\\\/g, \"/\").replace(/\\.ts$/, \".js\");\n if (!rel.startsWith(\".\")) rel = \"./\" + rel;\n ifaceImportPath = rel;\n } else if (isFeatureScope) {\n ifaceImportPath = `../domain/${ifaceName}.js`;\n }\n\n // Determine domain types to import from hierarchy.imports\n const allSignatures = hierarchy.methods\n .map((m) => `${m.params} ${m.returnType}`)\n .join(\" \");\n\n const domainImports: Array<{ name: string; from: string; isTypeOnly?: boolean | undefined }> = [];\n\n for (const imp of hierarchy.imports) {\n for (const item of imp.items) {\n if (new RegExp(`\\\\b${item.name}\\\\b`).test(allSignatures)) {\n let fromPath: string;\n if (imp.specifier.startsWith(\".\") && ifaceFilePath) {\n const absTarget = path.resolve(path.dirname(ifaceFilePath), imp.specifier);\n let rel = path.relative(targetDir, absTarget).replace(/\\\\/g, \"/\");\n if (!rel.startsWith(\".\")) rel = \"./\" + rel;\n fromPath = rel;\n } else {\n fromPath = imp.specifier;\n }\n\n domainImports.push({\n name: item.name,\n from: fromPath,\n isTypeOnly: item.isTypeOnly ?? imp.isTypeOnly ?? true,\n });\n }\n }\n }\n\n if (options.kind === \"stub\") {\n code = generateStubCode(\n className,\n ifaceName,\n options.entityName,\n options.feature,\n hierarchy.methods,\n domainImports,\n ifaceImportPath\n );\n } else {\n code = generateConcreteInfraCode(\n className,\n ifaceName,\n options.dependencies || [],\n hierarchy.methods,\n domainImports,\n ifaceImportPath\n );\n }\n } else {\n code = generateConcreteInfraCode(\n className,\n undefined,\n options.dependencies || []\n );\n }\n\n return writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n}\n","import path from \"node:path\";\nimport type { GeneratedFile, PropertyDef, UseCaseOptions } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toPascalCase, toSingular, toStubName } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport { renderTemplate, useCaseTemplate, useCaseTestTemplate } from \"../templates/index.js\";\n\nconst primitiveTypes = new Set([\n \"string\",\n \"number\",\n \"boolean\",\n \"bigint\",\n \"symbol\",\n \"undefined\",\n \"null\",\n \"any\",\n \"unknown\",\n \"never\",\n \"void\",\n \"Date\",\n \"Record<string, any>\",\n \"Record<string, unknown>\",\n \"Record<string, never>\",\n]);\n\nexport function generateUseCaseCode(\n useCaseName: string,\n dependencies: string[] = [],\n inputProps: PropertyDef[] = [],\n outputProps: PropertyDef[] = [],\n domainImports: string[] = []\n): string {\n const ucName = toPascalCase(useCaseName);\n const inputTypeName = `${ucName}Input`;\n const outputTypeName = `${ucName}Output`;\n\n // Dependency imports\n const dependencyImports = dependencies.map((dep) => ({\n name: dep,\n from: /^I[A-Z]/.test(dep) ? `../domain/${dep}.js` : `./${dep}.js`,\n }));\n\n // Domain imports\n const domainTypesToImport = new Set<string>(domainImports);\n for (const p of [...inputProps, ...outputProps]) {\n const rawType = p.type.trim();\n const baseType = rawType.replace(/\\[\\]$/, \"\").trim();\n if (\n !primitiveTypes.has(baseType) &&\n /^[A-Z][A-Za-z0-9_]*$/.test(baseType) &&\n !dependencies.includes(baseType)\n ) {\n domainTypesToImport.add(baseType);\n }\n }\n\n const formattedInputProps = inputProps.map((p) => ({\n name: p.name,\n optional: p.optional,\n type: p.optional && !p.type.includes(\"undefined\") ? `${p.type} | undefined` : p.type,\n }));\n\n const formattedOutputProps = outputProps.map((p) => ({\n name: p.name,\n optional: p.optional,\n type: p.optional && !p.type.includes(\"undefined\") ? `${p.type} | undefined` : p.type,\n }));\n\n const formattedDeps = dependencies.map((dep) => ({\n key: toCamelCase(dep),\n name: dep,\n }));\n\n // Auto-connect standard CRUD use cases to I<Entity>Repository\n const getMatch = ucName.match(/^Get([A-Z][A-Za-z0-9]*)$/);\n const listMatch = ucName.match(/^List([A-Z][A-Za-z0-9]*)$/);\n const createMatch = ucName.match(/^Create([A-Z][A-Za-z0-9]*)$/);\n const updateMatch = ucName.match(/^Update([A-Z][A-Za-z0-9]*)$/);\n const deleteMatch = ucName.match(/^Delete([A-Z][A-Za-z0-9]*)$/);\n\n let callWired: string | null = null;\n\n if (getMatch && getMatch[1]) {\n const entity = getMatch[1];\n const matchingRepo = dependencies.find((d) => d === `I${entity}Repository`);\n if (matchingRepo && inputProps.length === 1 && outputProps.length === 1) {\n const repoKey = toCamelCase(matchingRepo);\n const idKey = inputProps[0]!.name;\n callWired = ` return await this.deps.${repoKey}.Get${entity}ById({\\n ${idKey}: props.${idKey},\\n });`;\n }\n } else if (listMatch && listMatch[1]) {\n const pluralEntity = listMatch[1];\n const singularEntity = toSingular(pluralEntity);\n const matchingRepo = dependencies.find(\n (d) => d === `I${singularEntity}Repository` || d === `I${pluralEntity}Repository`\n );\n if (matchingRepo) {\n const repoKey = toCamelCase(matchingRepo);\n const passProps = inputProps.length > 0 ? \"props\" : \"\";\n callWired = ` return await this.deps.${repoKey}.List${pluralEntity}(${passProps});`;\n }\n } else if (createMatch && createMatch[1]) {\n const entity = createMatch[1];\n const matchingRepo = dependencies.find((d) => d === `I${entity}Repository`);\n if (matchingRepo && inputProps.length === 1 && outputProps.length === 1) {\n const repoKey = toCamelCase(matchingRepo);\n const entityKey = inputProps[0]!.name;\n callWired = ` return await this.deps.${repoKey}.Create${entity}({\\n ${entityKey}: props.${entityKey},\\n });`;\n }\n } else if (updateMatch && updateMatch[1]) {\n const entity = updateMatch[1];\n const matchingRepo = dependencies.find((d) => d === `I${entity}Repository`);\n if (matchingRepo && inputProps.length === 1 && outputProps.length === 1) {\n const repoKey = toCamelCase(matchingRepo);\n const entityKey = inputProps[0]!.name;\n callWired = ` return await this.deps.${repoKey}.Update${entity}({\\n ${entityKey}: props.${entityKey},\\n });`;\n }\n } else if (deleteMatch && deleteMatch[1]) {\n const entity = deleteMatch[1];\n const matchingRepo = dependencies.find((d) => d === `I${entity}Repository`);\n if (matchingRepo && inputProps.length === 1) {\n const repoKey = toCamelCase(matchingRepo);\n const idKey = inputProps[0]!.name;\n callWired = ` return await this.deps.${repoKey}.Delete${entity}({\\n ${idKey}: props.${idKey},\\n });`;\n }\n }\n\n const paramStr = inputProps.length > 0 ? `props: ${inputTypeName}` : `_props?: ${inputTypeName}`;\n\n return renderTemplate(useCaseTemplate, {\n ucName,\n inputTypeName,\n outputTypeName,\n dependencyImports,\n domainImports: Array.from(domainTypesToImport),\n hasInputProps: inputProps.length > 0,\n inputProperties: formattedInputProps,\n hasOutputProps: outputProps.length > 0,\n outputProperties: formattedOutputProps,\n dependencies: formattedDeps,\n hasDependencies: dependencies.length > 0,\n paramStr,\n callWired,\n });\n}\n\nexport function generateUseCaseTestCode(\n useCaseName: string,\n dependencies: string[] = []\n): string {\n const ucName = toPascalCase(useCaseName);\n const stubBindings: Array<{ iface: string; stub: string }> = [];\n\n for (const dep of dependencies) {\n if (/^I[A-Z]/.test(dep)) {\n const stub = toStubName(dep);\n stubBindings.push({ iface: dep, stub });\n }\n }\n\n return renderTemplate(useCaseTestTemplate, {\n ucName,\n stubBindings,\n });\n}\n\nexport function generateUseCase(options: UseCaseOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const ucName = toPascalCase(options.name);\n const targetDir = options.targetDir || path.join(resolveFeaturesDir(projectRoot), options.feature, \"useCases\");\n const filePath = path.join(targetDir, `${ucName}.ts`);\n\n const code = generateUseCaseCode(\n ucName,\n options.dependencies || [],\n options.inputProperties || [],\n options.outputProperties || [],\n options.domainImports || []\n );\n\n files.push(\n writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n\n if (options.includeTest) {\n const testPath = path.join(targetDir, `${ucName}.test.ts`);\n const testCode = generateUseCaseTestCode(ucName, options.dependencies || []);\n files.push(\n writeFileSafely(testPath, testCode, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n }\n\n return files;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { GeneratedFile, HttpHandlerOptions, PropertyDef } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport {\n expressIndexTemplate,\n httpHandlerTemplate,\n renderTemplate,\n} from \"../templates/index.js\";\n\n/**\n * Derives a human-friendly success message for the HTTP presentation layer.\n */\nexport function deriveSuccessMessage(\n handlerName: string,\n useCaseName?: string,\n method: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = \"get\"\n): string {\n const baseName = useCaseName\n ? toPascalCase(useCaseName)\n : toPascalCase(handlerName).replace(/Http$/, \"\");\n\n const createMatch = baseName.match(/^Create([A-Z].*)$/);\n if (createMatch) return `${createMatch[1]} created successfully`;\n\n const getMatch = baseName.match(/^(?:Get|Find)([A-Z].*)$/);\n if (getMatch) return `${getMatch[1]} retrieved successfully`;\n\n const listMatch = baseName.match(/^List([A-Z].*)$/);\n if (listMatch) return `${listMatch[1]} retrieved successfully`;\n\n const updateMatch = baseName.match(/^(?:Update|Modify|Patch)([A-Z].*)$/);\n if (updateMatch) return `${updateMatch[1]} updated successfully`;\n\n const deleteMatch = baseName.match(/^(?:Delete|Remove)([A-Z].*)$/);\n if (deleteMatch) return `${deleteMatch[1]} deleted successfully`;\n\n if (method === \"post\") return `${baseName} created successfully`;\n if (method === \"delete\") return `${baseName} deleted successfully`;\n\n return `${baseName} executed successfully`;\n}\n\nexport function generateHttpHandlerCode(\n handlerName: string,\n method: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = \"get\",\n routeSubPath: string = \"/\",\n useCaseName?: string,\n includeValidation: boolean = false,\n validationSource: \"body\" | \"query\" | \"params\" = \"body\",\n validationFields: PropertyDef[] = [],\n customSuccessMessage?: string\n): string {\n const className = toPascalCase(handlerName);\n const ucName = useCaseName ? toPascalCase(useCaseName) : undefined;\n const ucDepKey = ucName ? toCamelCase(ucName) : undefined;\n const schemaName = `${toCamelCase(className)}Schema`;\n\n const formattedFields = validationFields.map((f) => {\n let zodType = \"z.string()\";\n if (f.type === \"number\") zodType = validationSource === \"query\" ? \"z.coerce.number()\" : \"z.number()\";\n else if (f.type === \"boolean\") zodType = validationSource === \"query\" ? \"z.coerce.boolean()\" : \"z.boolean()\";\n else if (f.type === \"Date\") zodType = \"z.coerce.date()\";\n else if (f.type === \"any\") zodType = \"z.any()\";\n else if (f.type === \"unknown\") zodType = \"z.unknown()\";\n else if (f.type.endsWith(\"[]\")) zodType = \"z.array(z.any())\";\n else if (/^[A-Z]/.test(f.type)) zodType = \"z.record(z.any()) as any\";\n if (f.optional) zodType += \".optional()\";\n return { name: f.name, zodType };\n });\n\n const callArg = includeValidation ? \"parsed.data\" : \"{}\";\n const statusCode = method === \"post\" ? 201 : 200;\n const successMessage = customSuccessMessage || deriveSuccessMessage(className, ucName, method);\n\n return renderTemplate(httpHandlerTemplate, {\n className,\n ucName,\n ucDepKey,\n includeValidation,\n schemaName,\n hasValidationFields: formattedFields.length > 0,\n validationFields: formattedFields,\n method,\n routeSubPath,\n validationSource,\n callArg,\n statusCode,\n successMessage,\n });\n}\n\nexport function generateHttpHandler(options: HttpHandlerOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const className = toPascalCase(options.name);\n const pxDir = path.join(resolveFeaturesDir(projectRoot), options.feature, \"pxExpress\");\n const handlersDir = path.join(pxDir, \"handlers\");\n\n // 1. Ensure pxExpress/index.ts exists\n const pxIndexPath = path.join(pxDir, \"index.ts\");\n if (!fs.existsSync(pxIndexPath)) {\n const featurePath = options.routePrefix || `/${options.feature.toLowerCase()}`;\n const pxIndexContent = renderTemplate(expressIndexTemplate, {\n routePath: featurePath,\n });\n files.push(\n writeFileSafely(pxIndexPath, pxIndexContent, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: false,\n })\n );\n }\n\n // 2. Generate route handler file\n const handlerFilePath = path.join(handlersDir, `${className}.ts`);\n const code = generateHttpHandlerCode(\n className,\n options.method || \"get\",\n options.path || \"/\",\n options.useCaseName,\n Boolean(options.includeValidation),\n options.validationSource || \"body\",\n options.validationFields || [],\n options.successMessage\n );\n\n files.push(\n writeFileSafely(handlerFilePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n\n return files;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { GeneratedFile } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toPascalCase } from \"../utils/formatting.js\";\nimport { diProviderTemplate, renderTemplate } from \"../templates/index.js\";\n\nexport interface ProviderBinding {\n ifaceName: string;\n implName: string;\n ifaceImportPath?: string | undefined;\n implImportPath?: string | undefined;\n}\n\n/**\n * Ensures or updates feature diProvider.ts\n */\nexport function updateOrGenerateDiProvider(\n featureDir: string,\n featureName: string,\n bindings: ProviderBinding[] = [],\n options: {\n projectRoot?: string | undefined;\n overwrite?: boolean | undefined;\n dryRun?: boolean | undefined;\n } = {}\n): GeneratedFile {\n const providerPath = path.join(featureDir, \"diProvider.ts\");\n const pascalFeature = toPascalCase(featureName);\n const providerModuleName = `${pascalFeature}Provider`;\n\n if (fs.existsSync(providerPath) && !options.overwrite) {\n let content = fs.readFileSync(providerPath, \"utf-8\");\n // Strip any legacy ScaffoldProvider export\n content = content.replace(/\\n*export\\s+const\\s+ScaffoldProvider\\s*=[^;]+;?/g, \"\");\n\n for (const b of bindings) {\n const ifaceImp = b.ifaceImportPath || `./domain/${b.ifaceName}.js`;\n const implImp = b.implImportPath || `./infrastructure/${b.implName}.js`;\n\n // Check if import already exists\n if (!content.includes(b.ifaceName)) {\n content = `import { ${b.ifaceName} } from \"${ifaceImp}\";\\n` + content;\n }\n if (!content.includes(b.implName)) {\n content = `import { ${b.implName} } from \"${implImp}\";\\n` + content;\n }\n\n // Check if c.provide is already present\n const provideCall = `c.provide(${b.ifaceName}, ${b.implName});`;\n if (!content.includes(b.ifaceName) || !content.includes(b.implName) || !content.includes(`c.provide(${b.ifaceName}`)) {\n // Find inside provider function\n const match = content.match(/(const\\s+\\w+Provider\\s*:\\s*DIModule\\s*=\\s*\\((?:c|container)[^)]*\\)\\s*=>\\s*\\{)([\\s\\S]*?)(\\}\\;?)/);\n if (match) {\n const prefix = match[1];\n const body = match[2];\n const suffix = match[3];\n const updatedBody = `${body}\\n ${provideCall}\\n`;\n content = content.replace(match[0], `${prefix}${updatedBody}${suffix}`);\n } else {\n // If couldn't match pattern, append provide call before export\n content = content.replace(\n /export default/g,\n `// Register ${b.ifaceName}\\n// c.provide(${b.ifaceName}, ${b.implName});\\n\\nexport default`\n );\n }\n }\n }\n\n return writeFileSafely(providerPath, content, {\n ...options,\n overwrite: true,\n });\n }\n\n // Generate new diProvider.ts using Handlebars template\n const formattedBindings = bindings.map((b) => ({\n ifaceName: b.ifaceName,\n implName: b.implName,\n ifaceImportPath: b.ifaceImportPath || `./domain/${b.ifaceName}.js`,\n implImportPath: b.implImportPath || `./infrastructure/${b.implName}.js`,\n }));\n\n const code = renderTemplate(diProviderTemplate, {\n providerModuleName,\n bindings: formattedBindings,\n });\n\n return writeFileSafely(providerPath, code, options);\n}\n","import path from \"node:path\";\nimport type { CrudOperation, FeatureOptions, GeneratedFile } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toKebabCase, toPascalCase, toPlural, toSingular } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport { generateDomain } from \"./domainGenerator.js\";\nimport { generateInterface } from \"./interfaceGenerator.js\";\nimport { generateInfrastructure } from \"./infraGenerator.js\";\nimport { generateUseCase } from \"./useCaseGenerator.js\";\nimport { generateHttpHandler } from \"./httpHandlerGenerator.js\";\nimport { updateOrGenerateDiProvider } from \"./providerManager.js\";\nimport { expressIndexTemplate, renderTemplate } from \"../templates/index.js\";\n\nexport function generateFeature(options: FeatureOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const rawName = options.name.trim();\n const featureName = toCamelCase(rawName);\n const targetDir = options.targetDir || path.join(resolveFeaturesDir(projectRoot), featureName);\n const routePath = options.routePath || `/${featureName}`;\n\n // Resolve domain entities\n const rawEntities: string[] = [];\n if (options.entityNames && options.entityNames.length > 0) {\n rawEntities.push(...options.entityNames);\n } else if (options.entityName) {\n rawEntities.push(options.entityName);\n } else {\n rawEntities.push(toSingular(rawName));\n }\n\n const entities = Array.from(\n new Set(rawEntities.map((e) => toPascalCase(e.trim())).filter(Boolean))\n );\n if (entities.length === 0) {\n entities.push(toPascalCase(toSingular(rawName)));\n }\n\n // 1. Domain Entities\n if (options.includeDomain !== false) {\n for (const ent of entities) {\n const domainFile = generateDomain({\n name: ent,\n feature: featureName,\n targetDir: path.join(targetDir, \"domain\"),\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n kind: \"interface\",\n properties: [\n { name: \"id\", type: \"string\" },\n { name: \"createdAt\", type: \"Date\" },\n { name: \"updatedAt\", type: \"Date\" },\n ],\n });\n files.push(domainFile);\n }\n }\n\n // 2. Domain Interfaces\n if (options.includeInterface !== false) {\n for (const ent of entities) {\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${ent}Repository`;\n\n const ifaceFile = generateInterface({\n name: ifaceName,\n feature: featureName,\n targetDir: path.join(targetDir, \"domain\"),\n entityName: ent,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n methodsPreset: \"crud\",\n });\n files.push(ifaceFile);\n }\n }\n\n // 3. Infrastructure Stubs\n if (options.includeInfra !== false && options.includeInterface !== false) {\n for (const ent of entities) {\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${ent}Repository`;\n const stubName =\n options.stubName && entities.length === 1\n ? toPascalCase(options.stubName)\n : `Stub${ent}Repository`;\n\n const stubFile = generateInfrastructure({\n name: stubName,\n feature: featureName,\n targetDir: path.join(targetDir, \"infrastructure\"),\n kind: \"stub\",\n implementsInterface: ifaceName,\n entityName: ent,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(stubFile);\n }\n }\n\n // 4. DI Provider\n if (options.includeDiProvider !== false && options.includeInterface !== false && options.includeInfra !== false) {\n const bindings = entities.map((ent) => {\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${ent}Repository`;\n const stubName =\n options.stubName && entities.length === 1\n ? toPascalCase(options.stubName)\n : `Stub${ent}Repository`;\n return { ifaceName, implName: stubName };\n });\n\n const providerFile = updateOrGenerateDiProvider(targetDir, featureName, bindings, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(providerFile);\n }\n\n // 5. Use Cases & Express Presentation\n if (options.includeUseCase !== false) {\n let ops: CrudOperation[] = [];\n if (options.crudOperations) {\n ops = options.crudOperations;\n } else if (options.useCaseName) {\n // Legacy single use case mode\n ops = [];\n } else {\n // Default: full standard CRUD\n ops = [\"create\", \"read\", \"list\", \"update\", \"delete\"];\n }\n\n // Handle legacy single useCaseName if explicitly specified without crudOperations\n if (options.useCaseName && ops.length === 0) {\n const primaryEntity = entities[0]!;\n const entVar = primaryEntity.charAt(0).toLowerCase() + primaryEntity.slice(1);\n const idParam = `${entVar}Id`;\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${primaryEntity}Repository`;\n const ucName = toPascalCase(options.useCaseName);\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: options.includeInterface !== false ? [ifaceName] : [],\n inputProperties: [{ name: idParam, type: \"string\" }],\n outputProperties: [{ name: entVar, type: primaryEntity }],\n domainImports: options.includeDomain !== false ? [primaryEntity] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpName = options.httpHandlerName\n ? toPascalCase(options.httpHandlerName)\n : `${ucName}Http`;\n const httpFiles = generateHttpHandler({\n name: httpName,\n feature: featureName,\n routePrefix: routePath,\n method: \"get\",\n path: `/:${idParam}`,\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"params\",\n validationFields: [{ name: idParam, type: \"string\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n }\n\n // Generate standard CRUD use cases for each entity\n for (let i = 0; i < entities.length; i++) {\n const ent = entities[i]!;\n const entVar = ent.charAt(0).toLowerCase() + ent.slice(1);\n const idParam = `${entVar}Id`;\n const listVar = toPlural(entVar);\n const pluralEntity = toPlural(ent);\n const ifaceName =\n options.interfaceName && entities.length === 1\n ? toPascalCase(options.interfaceName)\n : `I${ent}Repository`;\n const deps = options.includeInterface !== false ? [ifaceName] : [];\n\n // Sub-route for secondary entities: primary uses root, secondary uses '/<entity-plural>'\n const entitySubRoute = i === 0 ? \"\" : `/${toKebabCase(listVar)}`;\n\n for (const op of ops) {\n if (op === \"create\") {\n const ucName = `Create${ent}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [{ name: entVar, type: ent }],\n outputProperties: [{ name: entVar, type: ent }],\n domainImports: options.includeDomain !== false ? [ent] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"post\",\n path: entitySubRoute || \"/\",\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"body\",\n validationFields: [{ name: entVar, type: \"any\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n } else if (op === \"read\") {\n const ucName = `Get${ent}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [{ name: idParam, type: \"string\" }],\n outputProperties: [{ name: entVar, type: ent }],\n domainImports: options.includeDomain !== false ? [ent] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"get\",\n path: entitySubRoute ? `${entitySubRoute}/:${idParam}` : `/:${idParam}`,\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"params\",\n validationFields: [{ name: idParam, type: \"string\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n } else if (op === \"list\") {\n const ucName = `List${pluralEntity}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [\n { name: \"page\", type: \"number\", optional: true },\n { name: \"limit\", type: \"number\", optional: true },\n ],\n outputProperties: [\n { name: listVar, type: `${ent}[]` },\n { name: \"total\", type: \"number\", optional: true },\n { name: \"page\", type: \"number\", optional: true },\n { name: \"limit\", type: \"number\", optional: true },\n ],\n domainImports: options.includeDomain !== false ? [ent] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"get\",\n path: entitySubRoute || \"/\",\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"query\",\n validationFields: [\n { name: \"page\", type: \"number\", optional: true },\n { name: \"limit\", type: \"number\", optional: true },\n ],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n } else if (op === \"update\") {\n const ucName = `Update${ent}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [{ name: entVar, type: ent }],\n outputProperties: [{ name: entVar, type: ent }],\n domainImports: options.includeDomain !== false ? [ent] : [],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"put\",\n path: entitySubRoute ? `${entitySubRoute}/:${idParam}` : `/:${idParam}`,\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"body\",\n validationFields: [{ name: entVar, type: \"any\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n } else if (op === \"delete\") {\n const ucName = `Delete${ent}`;\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: deps,\n inputProperties: [{ name: idParam, type: \"string\" }],\n outputProperties: [{ name: \"success\", type: \"boolean\" }],\n includeTest: options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false) {\n const httpFiles = generateHttpHandler({\n name: `${ucName}Http`,\n feature: featureName,\n routePrefix: routePath,\n method: \"delete\",\n path: entitySubRoute ? `${entitySubRoute}/:${idParam}` : `/:${idParam}`,\n useCaseName: ucName,\n includeValidation: true,\n validationSource: \"params\",\n validationFields: [{ name: idParam, type: \"string\" }],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n }\n }\n }\n }\n\n // 6. Custom Use Cases\n if (options.customUseCases && options.customUseCases.length > 0) {\n for (const customUc of options.customUseCases) {\n const ucName = toPascalCase(customUc.name);\n const ucFiles = generateUseCase({\n name: ucName,\n feature: featureName,\n targetDir: path.join(targetDir, \"useCases\"),\n dependencies: customUc.dependencies || [],\n inputProperties: customUc.inputProperties || [],\n outputProperties: customUc.outputProperties || [],\n domainImports: customUc.domainImports || [],\n includeTest: customUc.includeTest !== false && options.includeTests !== false,\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...ucFiles);\n\n if (options.includeExpress !== false && customUc.createHttpHandler) {\n const handlerName = `${ucName}Http`;\n const httpFiles = generateHttpHandler({\n name: handlerName,\n feature: featureName,\n routePrefix: routePath,\n method: customUc.httpMethod || \"post\",\n path: customUc.httpPath || `/${toKebabCase(ucName)}`,\n useCaseName: ucName,\n includeValidation: (customUc.inputProperties && customUc.inputProperties.length > 0) || false,\n validationSource:\n customUc.validationSource || (customUc.httpMethod === \"get\" ? \"query\" : \"body\"),\n validationFields: customUc.validationFields || customUc.inputProperties || [],\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n });\n files.push(...httpFiles);\n }\n }\n }\n\n // 7. Ensure pxExpress/index.ts is generated if Express presentation is included\n if (options.includeExpress !== false) {\n const pxDir = path.join(targetDir, \"pxExpress\");\n const pxIndexPath = path.join(pxDir, \"index.ts\");\n if (!files.some((f) => f.absolutePath === pxIndexPath)) {\n const pxIndexContent = renderTemplate(expressIndexTemplate, { routePath });\n files.push(\n writeFileSafely(pxIndexPath, pxIndexContent, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: false,\n })\n );\n }\n }\n\n // Deduplicate files by absolutePath\n const uniqueFiles: GeneratedFile[] = [];\n const seen = new Set<string>();\n for (const f of files) {\n if (!seen.has(f.absolutePath)) {\n seen.add(f.absolutePath);\n uniqueFiles.push(f);\n }\n }\n\n return uniqueFiles;\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { PropertyDef } from \"../types/index.js\";\n\nexport class PromptCancelledError extends Error {\n constructor(message = \"Operation cancelled.\") {\n super(message);\n this.name = \"PromptCancelledError\";\n }\n}\n\nexport function handleCancel<T>(result: T): Exclude<T, symbol> {\n if (p.isCancel(result)) {\n p.cancel(\"Operation cancelled.\");\n throw new PromptCancelledError();\n }\n return result as Exclude<T, symbol>;\n}\n\nexport function printBanner(): void {\n console.log(\"\");\n p.intro(pc.bgCyan(pc.black(\" @solid-stack/mason \")));\n}\n\n/**\n * Interactive prompt to collect properties (name & type)\n */\nexport async function promptProperties(\n options: {\n message?: string | undefined;\n defaults?: PropertyDef[] | undefined;\n } = {}\n): Promise<PropertyDef[]> {\n const properties: PropertyDef[] = options.defaults ? [...options.defaults] : [];\n\n if (properties.length > 0) {\n const summary = properties.map((p) => `${p.name}: ${p.type}${p.optional ? \"?\" : \"\"}`).join(\", \");\n p.log.info(pc.dim(`Pre-configured fields: ${summary}`));\n\n const addMore = handleCancel(\n await p.confirm({\n message: \"Would you like to add custom fields/properties?\",\n initialValue: false,\n })\n );\n if (!addMore) {\n return properties;\n }\n }\n\n p.log.info(pc.cyan(\"Enter properties (leave name blank when finished):\"));\n\n while (true) {\n const name = handleCancel(\n await p.text({\n message: \"Property name (or press Enter to finish):\",\n placeholder: \"e.g. title, email, status\",\n })\n );\n\n if (!name || !name.trim()) {\n break;\n }\n\n const type = handleCancel(\n await p.select({\n message: `Type for property \"${name.trim()}\":`,\n options: [\n { value: \"string\", label: \"string\" },\n { value: \"number\", label: \"number\" },\n { value: \"boolean\", label: \"boolean\" },\n { value: \"Date\", label: \"Date\" },\n { value: \"string[]\", label: \"string[]\" },\n { value: \"Record<string, unknown>\", label: \"Record<string, unknown>\" },\n { value: \"custom\", label: \"Custom type...\" },\n ],\n initialValue: \"string\",\n })\n );\n\n let finalType = type;\n if (type === \"custom\") {\n finalType = handleCancel(\n await p.text({\n message: `Enter custom type for \"${name.trim()}\":`,\n placeholder: \"e.g. UserRole, string | null\",\n validate: (val) => (val && val.trim() ? undefined : \"Type cannot be empty\"),\n })\n );\n }\n\n const optional = handleCancel(\n await p.confirm({\n message: `Is \"${name.trim()}\" optional?`,\n initialValue: false,\n })\n );\n\n properties.push({\n name: name.trim(),\n type: finalType.trim(),\n optional,\n });\n\n p.log.success(\n pc.green(`Added: ${name.trim()}${optional ? \"?\" : \"\"}: ${finalType.trim()}`)\n );\n }\n\n return properties;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { CrudOperation, CustomUseCaseConfig, FeatureOptions, PropertyDef } from \"../types/index.js\";\nimport { generateFeature } from \"../core/featureGenerator.js\";\nimport { handleCancel, promptProperties } from \"../utils/prompts.js\";\nimport { printGeneratedFiles, writeFileSafely } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport { getEffectiveMode } from \"../utils/config.js\";\nimport { toCamelCase, toKebabCase, toPascalCase, toSingular } from \"../utils/formatting.js\";\n\nexport async function runFeatureCommand(\n featureNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const isRegistry = getEffectiveMode(projectRoot, flags) === \"registry\";\n\n let name = featureNameArg?.trim();\n if (!name && flags.yes) {\n name = \"feature\";\n }\n\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"What is the feature name?\",\n placeholder: \"e.g. users, auth, orders, billing\",\n validate: (val) => {\n if (!val || !val.trim()) return \"Feature name cannot be empty.\";\n return undefined;\n },\n })\n ).trim();\n }\n\n const normalizedName = toCamelCase(name);\n const baseFeaturesDir = resolveFeaturesDir(projectRoot, flags);\n const defaultDir = path.relative(projectRoot, path.join(baseFeaturesDir, normalizedName));\n\n let targetDirRel = defaultDir;\n if (!flags.yes && !flags.target && !flags.dest) {\n targetDirRel = handleCancel(\n await p.text({\n message: \"Target directory for the feature:\",\n initialValue: defaultDir,\n defaultValue: defaultDir,\n })\n ).trim();\n }\n\n const targetDir = flags.dest\n ? path.resolve(projectRoot, flags.dest)\n : flags.target\n ? path.resolve(projectRoot, flags.target)\n : path.resolve(projectRoot, targetDirRel);\n\n let includeExpress = flags.express !== undefined ? Boolean(flags.express) : true;\n let routePath = `/${normalizedName}`;\n let includeDomain = true;\n let includeInterface = true;\n let includeInfra = true;\n let includeUseCase = true;\n let includeTests = true;\n let includeDiProvider = true;\n\n const defaultEntity = toPascalCase(toSingular(normalizedName));\n let entityNames: string[] = [defaultEntity];\n let crudOperations: CrudOperation[] = [\"create\", \"read\", \"list\", \"update\", \"delete\"];\n const customUseCases: CustomUseCaseConfig[] = [];\n\n if (!flags.yes) {\n includeExpress = handleCancel(\n await p.confirm({\n message: \"Include Express Presentation layer (pxExpress routes & handlers)?\",\n initialValue: true,\n })\n );\n\n if (includeExpress) {\n routePath = handleCancel(\n await p.text({\n message: \"Express route prefix:\",\n initialValue: `/${normalizedName}`,\n defaultValue: `/${normalizedName}`,\n })\n ).trim();\n }\n\n includeDomain = handleCancel(\n await p.confirm({\n message: \"Include Domain Entity/Entities?\",\n initialValue: true,\n })\n );\n\n if (includeDomain) {\n const domainInput = handleCancel(\n await p.text({\n message: \"Domain entity name(s) (comma-separated):\",\n initialValue: defaultEntity,\n defaultValue: defaultEntity,\n placeholder: `e.g. ${defaultEntity}, ${defaultEntity}Item`,\n validate: (val) => {\n if (!val || !val.trim()) return \"Please enter at least one domain entity name.\";\n return undefined;\n },\n })\n ).trim();\n\n entityNames = domainInput\n .split(\",\")\n .map((s) => toPascalCase(s.trim()))\n .filter(Boolean);\n\n if (entityNames.length === 0) {\n entityNames = [defaultEntity];\n }\n } else {\n entityNames = [defaultEntity];\n }\n\n includeInterface = handleCancel(\n await p.confirm({\n message: `Include Domain Repository interface(s) for ${entityNames.join(\", \")}?`,\n initialValue: true,\n })\n );\n\n if (includeInterface) {\n includeInfra = handleCancel(\n await p.confirm({\n message: `Include Infrastructure Stub implementation(s) for ${entityNames.join(\", \")}?`,\n initialValue: true,\n })\n );\n }\n\n includeUseCase = handleCancel(\n await p.confirm({\n message: \"Include Domain Use Cases?\",\n initialValue: true,\n })\n );\n\n if (includeUseCase) {\n const crudChoices = [\n { value: \"create\", label: \"Create (Create<Entity>)\", hint: \"POST\" },\n { value: \"read\", label: \"Read One (Get<Entity>)\", hint: \"GET /:id\" },\n { value: \"list\", label: \"List with Pagination (List<Entity>s)\", hint: \"GET / (query: page, limit)\" },\n { value: \"update\", label: \"Update (Update<Entity>)\", hint: \"PUT /:id\" },\n { value: \"delete\", label: \"Delete (Delete<Entity>)\", hint: \"DELETE /:id\" },\n ];\n\n crudOperations = handleCancel(\n await p.multiselect({\n message: \"Select standard CRUD use cases to generate:\",\n options: crudChoices,\n initialValues: [\"create\", \"read\", \"list\", \"update\", \"delete\"],\n required: false,\n })\n ) as CrudOperation[];\n\n includeTests = handleCancel(\n await p.confirm({\n message: \"Generate Vitest unit tests for use cases?\",\n initialValue: true,\n })\n );\n\n const wantCustom = handleCancel(\n await p.confirm({\n message: \"Do you want to add any custom use cases to this feature?\",\n initialValue: false,\n })\n );\n\n if (wantCustom) {\n let addMore = true;\n const availableIfaces = entityNames.map((e) => `I${e}Repository`);\n\n while (addMore) {\n const customName = handleCancel(\n await p.text({\n message: \"Custom Use Case name:\",\n placeholder: \"e.g. ResetPassword, VerifyEmail, AssignRole\",\n validate: (v) => (v && v.trim() ? undefined : \"Use Case name cannot be empty\"),\n })\n ).trim();\n\n const customUcName = toPascalCase(customName);\n\n let selectedDeps: string[] = [];\n if (availableIfaces.length > 0) {\n selectedDeps = handleCancel(\n await p.multiselect({\n message: `Select domain interfaces to inject into ${customUcName}:`,\n options: availableIfaces.map((i) => ({ value: i, label: i })),\n required: false,\n })\n ) as string[];\n }\n\n let customInputProps: PropertyDef[] = [];\n const hasInput = handleCancel(\n await p.confirm({\n message: `Does ${customUcName} accept input arguments?`,\n initialValue: true,\n })\n );\n if (hasInput) {\n customInputProps = await promptProperties({\n message: `Add input properties for ${customUcName}:`,\n });\n }\n\n let customOutputProps: PropertyDef[] = [];\n const hasCustomOutput = handleCancel(\n await p.confirm({\n message: `Does ${customUcName} return custom output data?`,\n initialValue: false,\n })\n );\n if (hasCustomOutput) {\n customOutputProps = await promptProperties({\n message: `Add output properties for ${customUcName}:`,\n });\n }\n\n const customIncludeTest = handleCancel(\n await p.confirm({\n message: `Generate Vitest unit test for ${customUcName}?`,\n initialValue: true,\n })\n );\n\n let customCreateHttp = false;\n let customHttpMethod: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = \"post\";\n let customHttpPath = `/${toKebabCase(customUcName)}`;\n\n if (includeExpress) {\n customCreateHttp = handleCancel(\n await p.confirm({\n message: `Generate a matching ExpressRoute HTTP handler for ${customUcName}?`,\n initialValue: true,\n })\n );\n\n if (customCreateHttp) {\n customHttpMethod = handleCancel(\n await p.select({\n message: \"HTTP method for route:\",\n options: [\n { value: \"post\", label: \"POST\" },\n { value: \"get\", label: \"GET\" },\n { value: \"put\", label: \"PUT\" },\n { value: \"patch\", label: \"PATCH\" },\n { value: \"delete\", label: \"DELETE\" },\n ],\n initialValue: \"post\",\n })\n ) as any;\n\n customHttpPath = handleCancel(\n await p.text({\n message: \"Route subpath (relative to feature prefix):\",\n initialValue: `/${toKebabCase(customUcName)}`,\n defaultValue: `/${toKebabCase(customUcName)}`,\n })\n ).trim();\n }\n }\n\n customUseCases.push({\n name: customUcName,\n dependencies: selectedDeps,\n inputProperties: customInputProps,\n outputProperties: customOutputProps,\n includeTest: customIncludeTest,\n createHttpHandler: customCreateHttp,\n httpMethod: customHttpMethod,\n httpPath: customHttpPath,\n validationSource: customHttpMethod === \"get\" ? \"query\" : \"body\",\n validationFields: customInputProps,\n });\n\n addMore = handleCancel(\n await p.confirm({\n message: \"Add another custom use case?\",\n initialValue: false,\n })\n );\n }\n }\n }\n\n includeDiProvider = handleCancel(\n await p.confirm({\n message: \"Generate / update feature DI provider (diProvider.ts)?\",\n initialValue: true,\n })\n );\n } else {\n if (flags.domainNames) {\n entityNames = String(flags.domainNames)\n .split(\",\")\n .map((s) => toPascalCase(s.trim()))\n .filter(Boolean);\n } else {\n entityNames = [defaultEntity];\n }\n }\n\n const s = p.spinner();\n s.start(`Generating feature '${pc.cyan(normalizedName)}'...`);\n\n const options: FeatureOptions = {\n name: normalizedName,\n projectRoot,\n targetDir,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n includeExpress,\n routePath,\n includeDomain,\n entityNames,\n includeInterface,\n includeInfra,\n includeUseCase,\n crudOperations,\n customUseCases,\n includeTests,\n includeDiProvider,\n };\n\n const files = generateFeature(options);\n\n if (isRegistry) {\n const registryPath = path.join(targetDir, \"registry.json\");\n if (!fs.existsSync(registryPath)) {\n const manifest = {\n name: toKebabCase(normalizedName),\n type: \"feature\",\n description: flags.description || `${normalizedName} feature module`,\n version: \"1.0.0\",\n dependencies: {\n npm: includeExpress ? [\"@solid-stack/agnos-express\", \"express\"] : [],\n shared: [],\n features: [],\n },\n files: [],\n };\n const content = JSON.stringify(manifest, null, 2) + \"\\n\";\n const genFile = writeFileSafely(registryPath, content, {\n projectRoot,\n overwrite: options.overwrite,\n dryRun: options.dryRun,\n });\n files.push(genFile);\n }\n }\n\n s.stop(\"Feature scaffolded successfully!\");\n\n printGeneratedFiles(files, options.dryRun);\n\n p.outro(\n pc.green(\n `✓ Feature '${normalizedName}' initialized in ${path.relative(projectRoot, targetDir)} (uncommitted, unregistered)`\n )\n );\n}\n","import path from \"node:path\";\nimport type { GeneratedFile } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toKebabCase, toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveSharedDir } from \"../utils/project.js\";\n\nexport interface SharedOptions {\n name: string;\n description?: string;\n projectRoot?: string;\n targetDir?: string;\n dryRun?: boolean;\n overwrite?: boolean;\n includeStub?: boolean;\n isRegistry?: boolean;\n}\n\nexport function generateShared(options: SharedOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const rawName = options.name.trim();\n const pascalName = toPascalCase(rawName);\n const camelName = toCamelCase(rawName);\n const kebabName = toKebabCase(rawName);\n\n const targetDir = options.targetDir || path.join(resolveSharedDir(projectRoot), kebabName);\n const fileDefs: Array<{ absolutePath: string; content: string }> = [];\n\n // 1. Root Injectable facade: <PascalName>.ts\n const facadeContent = `import { MakeInjectable, type DepsType } from \"@solid-stack/di\";\nimport { I${pascalName}Engine } from \"./ports/I${pascalName}Engine.js\";\n\n@MakeInjectable\nexport class ${pascalName} {\n public static deps = { ${camelName}Engine: I${pascalName}Engine };\n constructor(public readonly deps: DepsType<typeof ${pascalName}.deps>) {}\n}\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, `${pascalName}.ts`),\n content: facadeContent,\n });\n\n // 2. Port Interface: ports/I<PascalName>Engine.ts\n const portContent = `export abstract class I${pascalName}Engine {\n // Define abstract port contracts for ${pascalName} here\n}\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, \"ports\", `I${pascalName}Engine.ts`),\n content: portContent,\n });\n\n // 3. Concrete Infrastructure: infrastructure/Default<PascalName>Engine.ts\n const concreteContent = `import { MakeInjectable } from \"@solid-stack/di\";\nimport { I${pascalName}Engine } from \"../ports/I${pascalName}Engine.js\";\n\n@MakeInjectable\nexport class Default${pascalName}Engine implements I${pascalName}Engine {\n // Default concrete implementation for production\n}\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, \"infrastructure\", `Default${pascalName}Engine.ts`),\n content: concreteContent,\n });\n\n // 4. Stub Infrastructure (if requested or by default): infrastructure/Stub<PascalName>Engine.ts\n if (options.includeStub !== false) {\n const stubContent = `import { MakeInjectable } from \"@solid-stack/di\";\nimport { I${pascalName}Engine } from \"../ports/I${pascalName}Engine.js\";\n\n@MakeInjectable\nexport class Stub${pascalName}Engine implements I${pascalName}Engine {\n // In-memory or stub implementation for testing\n}\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, \"infrastructure\", `Stub${pascalName}Engine.ts`),\n content: stubContent,\n });\n }\n\n // 5. DI Provider: diProvider.ts\n const providerContent = `import type { Container } from \"@solid-stack/di\";\nimport { I${pascalName}Engine } from \"./ports/I${pascalName}Engine.js\";\nimport { Default${pascalName}Engine } from \"./infrastructure/Default${pascalName}Engine.js\";\n\nexport const diProvider = (c: Container): void => {\n c.provide(I${pascalName}Engine, Default${pascalName}Engine);\n};\n\nexport default diProvider;\n`;\n fileDefs.push({\n absolutePath: path.join(targetDir, \"diProvider.ts\"),\n content: providerContent,\n });\n\n // 6. If registry mode, stamp base registry.json\n if (options.isRegistry) {\n const registryManifest = {\n name: kebabName,\n type: \"shared\",\n description: options.description || `${kebabName} shared module`,\n version: \"1.0.0\",\n dependencies: {\n npm: [],\n shared: [],\n features: [],\n },\n files: [],\n };\n fileDefs.push({\n absolutePath: path.join(targetDir, \"registry.json\"),\n content: JSON.stringify(registryManifest, null, 2) + \"\\n\",\n });\n }\n\n // Generate files using writeFileSafely\n for (const def of fileDefs) {\n const genFile = writeFileSafely(def.absolutePath, def.content, {\n projectRoot,\n overwrite: options.overwrite,\n dryRun: options.dryRun,\n });\n files.push(genFile);\n }\n\n return files;\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { generateShared } from \"../core/sharedGenerator.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, resolveSharedDir } from \"../utils/project.js\";\nimport { getEffectiveMode } from \"../utils/config.js\";\nimport { toKebabCase } from \"../utils/formatting.js\";\n\nexport async function runSharedCommand(\n sharedNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const isRegistry = getEffectiveMode(projectRoot, flags) === \"registry\";\n\n let name = sharedNameArg?.trim();\n if (!name && flags.yes) {\n name = \"shared\";\n }\n\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"What is the shared module name?\",\n placeholder: \"e.g. hasher, time, uuid, cache, logger\",\n validate: (val) => {\n if (!val || !val.trim()) return \"Shared module name cannot be empty.\";\n return undefined;\n },\n })\n ).trim();\n }\n\n const normalizedName = toKebabCase(name);\n const baseSharedDir = resolveSharedDir(projectRoot, flags);\n const defaultDir = path.relative(projectRoot, path.join(baseSharedDir, normalizedName));\n\n let targetDirRel = defaultDir;\n if (!flags.yes && !flags.target && !flags.dest) {\n targetDirRel = handleCancel(\n await p.text({\n message: \"Target directory for the shared module:\",\n initialValue: defaultDir,\n defaultValue: defaultDir,\n })\n ).trim();\n }\n\n const targetDir = flags.dest\n ? path.resolve(projectRoot, flags.dest)\n : flags.target\n ? path.resolve(projectRoot, flags.target)\n : path.resolve(projectRoot, targetDirRel);\n\n let description = flags.description || \"\";\n let includeStub = true;\n\n if (!flags.yes) {\n description = handleCancel(\n await p.text({\n message: \"Module description (optional):\",\n placeholder: \"e.g. In-memory caching and Redis port abstraction\",\n initialValue: \"\",\n })\n ).trim();\n\n includeStub = handleCancel(\n await p.confirm({\n message: \"Include stub implementation in infrastructure/?\",\n initialValue: true,\n })\n );\n }\n\n const s = p.spinner();\n s.start(`Generating shared module '${pc.cyan(normalizedName)}'...`);\n\n const files = generateShared({\n name: normalizedName,\n description,\n projectRoot,\n targetDir,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n includeStub,\n isRegistry,\n });\n\n s.stop(\"Shared module generated successfully!\");\n printGeneratedFiles(files, Boolean(flags.dryRun));\n\n p.outro(\n pc.green(\n `✓ Shared module '${normalizedName}' initialized in ${path.relative(projectRoot, targetDir)} (uncommitted, unregistered)`\n )\n );\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { PropertyDef, UseCaseOptions } from \"../types/index.js\";\nimport { generateUseCase } from \"../core/useCaseGenerator.js\";\nimport { generateHttpHandler } from \"../core/httpHandlerGenerator.js\";\nimport { handleCancel, promptProperties } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listDomainInterfaces, listExistingFeatures } from \"../utils/project.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\n\nexport async function runUseCaseCommand(\n useCaseNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let feature = flags.feature?.trim();\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n feature = toCamelCase(feature);\n\n let name = useCaseNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Use Case name:\",\n placeholder: \"e.g. CreateUser, GetUser, CancelOrder\",\n validate: (v) => (v && v.trim() ? undefined : \"Use Case name cannot be empty\"),\n })\n ).trim();\n }\n\n const ucName = toPascalCase(name);\n\n // Discover feature domain interfaces\n const availableInterfaces = listDomainInterfaces(projectRoot, feature);\n let selectedDeps: string[] = [];\n\n if (!flags.yes && availableInterfaces.length > 0) {\n const multiOptions = availableInterfaces.map((i) => ({\n value: i.name,\n label: i.name,\n }));\n\n selectedDeps = handleCancel(\n await p.multiselect({\n message: \"Select domain interfaces to inject into use case:\",\n options: multiOptions,\n required: false,\n })\n ) as string[];\n }\n\n let inputProps: PropertyDef[] = [];\n let outputProps: PropertyDef[] = [];\n let includeTest = true;\n let createHttp = false;\n let httpMethod: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = \"post\";\n let httpPath = \"/\";\n\n if (!flags.yes) {\n const hasInput = handleCancel(\n await p.confirm({\n message: \"Does this use case accept input arguments?\",\n initialValue: true,\n })\n );\n\n if (hasInput) {\n inputProps = await promptProperties({\n message: \"Add input properties for this use case:\",\n });\n }\n\n const hasCustomOutput = handleCancel(\n await p.confirm({\n message: \"Does this use case return custom output data?\",\n initialValue: false,\n })\n );\n\n if (hasCustomOutput) {\n outputProps = await promptProperties({\n message: \"Add output properties for this use case:\",\n });\n }\n\n includeTest = handleCancel(\n await p.confirm({\n message: \"Generate Vitest unit test skeleton (.test.ts)?\",\n initialValue: true,\n })\n );\n\n createHttp = handleCancel(\n await p.confirm({\n message: \"Generate a matching ExpressRoute HTTP handler?\",\n initialValue: false,\n })\n );\n\n if (createHttp) {\n httpMethod = handleCancel(\n await p.select({\n message: \"HTTP method for route:\",\n options: [\n { value: \"post\", label: \"POST\" },\n { value: \"get\", label: \"GET\" },\n { value: \"put\", label: \"PUT\" },\n { value: \"patch\", label: \"PATCH\" },\n { value: \"delete\", label: \"DELETE\" },\n ],\n initialValue: \"post\",\n })\n ) as any;\n\n httpPath = handleCancel(\n await p.text({\n message: \"Route subpath (relative to feature prefix):\",\n initialValue: \"/\",\n defaultValue: \"/\",\n })\n ).trim();\n }\n }\n\n const s = p.spinner();\n s.start(`Generating use case '${pc.cyan(ucName)}'...`);\n\n const options: UseCaseOptions = {\n name: ucName,\n feature,\n dependencies: selectedDeps,\n inputProperties: inputProps,\n outputProperties: outputProps,\n includeTest,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const files = generateUseCase(options);\n\n if (createHttp) {\n const handlerName = `${ucName}Http`;\n const httpFiles = generateHttpHandler({\n name: handlerName,\n feature,\n method: httpMethod,\n path: httpPath,\n useCaseName: ucName,\n includeValidation: inputProps.length > 0,\n validationSource: httpMethod === \"get\" ? \"query\" : \"body\",\n validationFields: inputProps,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n });\n files.push(...httpFiles);\n }\n\n s.stop(\"Use case generated successfully!\");\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`Use case '${ucName}' created in feature '${feature}'!`));\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { DomainOptions, PropertyDef } from \"../types/index.js\";\nimport { generateDomain } from \"../core/domainGenerator.js\";\nimport { handleCancel, promptProperties } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listExistingFeatures } from \"../utils/project.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\n\nexport async function runDomainCommand(\n domainNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let feature = flags.feature?.trim();\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n feature = toCamelCase(feature);\n\n let name = domainNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Domain model / entity name:\",\n placeholder: \"e.g. User, Order, Product, Address\",\n validate: (v) => (v && v.trim() ? undefined : \"Domain name cannot be empty\"),\n })\n ).trim();\n }\n\n const entityName = toPascalCase(name);\n\n let kind: \"interface\" | \"class\" | \"valueObject\" = \"interface\";\n let properties: PropertyDef[] = [];\n\n if (!flags.yes) {\n kind = handleCancel(\n await p.select({\n message: \"Select domain model type:\",\n options: [\n { value: \"interface\", label: \"TypeScript Interface (pure data structure)\" },\n { value: \"class\", label: \"Entity Class (with constructor & properties)\" },\n { value: \"valueObject\", label: \"Value Object (immutable domain object with equals)\" },\n ],\n initialValue: \"interface\",\n })\n ) as any;\n\n const defaultProps: PropertyDef[] = [\n { name: \"id\", type: \"string\" },\n { name: \"createdAt\", type: \"Date\" },\n { name: \"updatedAt\", type: \"Date\" },\n ];\n\n properties = await promptProperties({\n defaults: kind === \"valueObject\" ? [{ name: \"value\", type: \"string\" }] : defaultProps,\n });\n }\n\n const s = p.spinner();\n s.start(`Generating domain model '${pc.cyan(entityName)}'...`);\n\n const options: DomainOptions = {\n name: entityName,\n feature,\n kind,\n properties,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const file = generateDomain(options);\n s.stop(\"Domain model generated successfully!\");\n\n printGeneratedFiles([file], options.dryRun);\n p.outro(pc.green(`Domain model '${entityName}' created in feature '${feature}'!`));\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { GeneratedFile, InfrastructureOptions } from \"../types/index.js\";\nimport { generateInfrastructure } from \"../core/infraGenerator.js\";\nimport { updateOrGenerateDiProvider } from \"../core/providerManager.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listDomainEntities, listDomainInterfaces, listExistingFeatures, resolveFeaturesDir } from \"../utils/project.js\";\nimport { ensureInterfacePrefix, removeInterfacePrefix, toCamelCase, toPascalCase, toStubName } from \"../utils/formatting.js\";\n\nexport async function runInfrastructureCommand(\n classNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let scope: \"feature\" | \"global\" = flags.global ? \"global\" : \"feature\";\n let feature = flags.feature?.trim();\n\n if (!flags.yes && !flags.global && !flags.feature) {\n scope = handleCancel(\n await p.select({\n message: \"Where should this infrastructure implementation be placed?\",\n options: [\n { value: \"feature\", label: \"Feature-level (features/<feature>/infrastructure)\" },\n { value: \"global\", label: \"Global / Core (infrastructure/)\" },\n ],\n initialValue: \"feature\",\n })\n ) as any;\n }\n\n if (scope === \"feature\" && !feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n if (feature) {\n feature = toCamelCase(feature);\n }\n\n let name = classNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Infrastructure class name:\",\n placeholder: \"e.g. StubUserRepository, PostgresUserRepository, S3FileStorage\",\n validate: (v) => (v && v.trim() ? undefined : \"Class name cannot be empty\"),\n })\n ).trim();\n }\n\n const className = toPascalCase(name);\n\n let kind: \"stub\" | \"concrete\" = flags.kind\n ? (flags.kind === \"stub\" ? \"stub\" : \"concrete\")\n : (className.startsWith(\"Stub\") ? \"stub\" : \"concrete\");\n let implementsInterface: string | undefined = flags.interface?.trim() || undefined;\n let registerInProvider = false;\n\n if (scope === \"feature\" && feature && !implementsInterface) {\n const interfaces = listDomainInterfaces(projectRoot, feature);\n if (!flags.yes) {\n if (interfaces.length > 0) {\n const match = interfaces.find((i) =>\n className.toLowerCase().includes(removeInterfacePrefix(i.name).toLowerCase())\n );\n const ifaceChoice = handleCancel(\n await p.select({\n message: \"Does this class implement a domain interface or abstract class?\",\n options: [\n ...interfaces.map((i) => ({ value: i.name, label: i.name })),\n { value: \"__custom__\", label: \"✏️ Enter custom interface or abstract class...\" },\n { value: \"__none__\", label: \"None / Standalone\" },\n ],\n initialValue: match?.name || interfaces[0]?.name,\n })\n );\n\n if (ifaceChoice === \"__custom__\") {\n implementsInterface = handleCancel(\n await p.text({\n message: \"Enter interface or abstract class name:\",\n placeholder: \"e.g. IUserRepository, BaseStorageAdapter\",\n validate: (v) => (v && v.trim() ? undefined : \"Name cannot be empty\"),\n })\n ).trim();\n } else if (ifaceChoice !== \"__none__\") {\n implementsInterface = ifaceChoice;\n }\n } else {\n const wantImpl = handleCancel(\n await p.confirm({\n message: \"Does this class implement a domain interface or abstract class?\",\n initialValue: false,\n })\n );\n if (wantImpl) {\n implementsInterface = handleCancel(\n await p.text({\n message: \"Enter interface or abstract class name:\",\n placeholder: \"e.g. IUserRepository, BaseStorageAdapter\",\n validate: (v) => (v && v.trim() ? undefined : \"Name cannot be empty\"),\n })\n ).trim();\n }\n }\n } else if (flags.yes && interfaces.length > 0) {\n const match = interfaces.find((i) =>\n className.toLowerCase().includes(removeInterfacePrefix(i.name).toLowerCase())\n );\n if (match) {\n implementsInterface = match.name;\n }\n }\n } else if (scope === \"global\" && !implementsInterface && !flags.yes) {\n const allInterfaces = listDomainInterfaces(projectRoot);\n if (allInterfaces.length > 0) {\n const ifaceChoice = handleCancel(\n await p.select({\n message: \"Does this class implement an interface or abstract class?\",\n options: [\n ...allInterfaces.map((i) => ({ value: i.name, label: `${i.name} (${i.feature})` })),\n { value: \"__custom__\", label: \"✏️ Enter custom interface or abstract class...\" },\n { value: \"__none__\", label: \"None / Standalone\" },\n ],\n initialValue: \"__none__\",\n })\n );\n\n if (ifaceChoice === \"__custom__\") {\n implementsInterface = handleCancel(\n await p.text({\n message: \"Enter interface or abstract class name:\",\n placeholder: \"e.g. IAuthRepository\",\n validate: (v) => (v && v.trim() ? undefined : \"Name cannot be empty\"),\n })\n ).trim();\n } else if (ifaceChoice !== \"__none__\") {\n implementsInterface = ifaceChoice;\n }\n }\n }\n\n if (!flags.yes && !flags.kind) {\n kind = handleCancel(\n await p.select({\n message: \"Select implementation kind:\",\n options: [\n { value: \"stub\", label: \"In-Memory Stub (with in-memory store and test helper methods)\" },\n { value: \"concrete\", label: \"Concrete Adapter / Service Skeleton (@MakeInjectable)\" },\n ],\n initialValue: kind,\n })\n ) as any;\n\n if (scope === \"feature\" && feature && implementsInterface) {\n registerInProvider = handleCancel(\n await p.confirm({\n message: \"Register this implementation in feature diProvider.ts?\",\n initialValue: true,\n })\n );\n }\n } else if (flags.yes && scope === \"feature\" && feature && implementsInterface) {\n registerInProvider = !flags.noProvider;\n }\n\n const s = p.spinner();\n s.start(`Generating infrastructure class '${pc.cyan(className)}'...`);\n\n const files: GeneratedFile[] = [];\n\n const options: InfrastructureOptions = {\n name: className,\n feature,\n scope,\n kind,\n implementsInterface,\n registerInProvider,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const infraFile = generateInfrastructure(options);\n files.push(infraFile);\n\n if (registerInProvider && scope === \"feature\" && feature && implementsInterface) {\n const featureDir = path.join(resolveFeaturesDir(projectRoot), feature);\n const providerFile = updateOrGenerateDiProvider(\n featureDir,\n feature,\n [\n {\n ifaceName: implementsInterface,\n implName: className,\n },\n ],\n {\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n }\n );\n files.push(providerFile);\n }\n\n s.stop(\"Infrastructure class generated successfully!\");\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`Infrastructure class '${className}' created!`));\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { GeneratedFile, InterfaceOptions } from \"../types/index.js\";\nimport { generateInterface } from \"../core/interfaceGenerator.js\";\nimport { generateInfrastructure } from \"../core/infraGenerator.js\";\nimport { updateOrGenerateDiProvider } from \"../core/providerManager.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listDomainEntities, listExistingFeatures, resolveFeaturesDir } from \"../utils/project.js\";\nimport { ensureInterfacePrefix, removeInterfacePrefix, toCamelCase, toPascalCase, toStubName } from \"../utils/formatting.js\";\n\nexport async function runInterfaceCommand(\n interfaceNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let feature = flags.feature?.trim();\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n feature = toCamelCase(feature);\n\n let name = interfaceNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Domain interface name:\",\n placeholder: \"e.g. IUserRepository, IPaymentService\",\n validate: (v) => (v && v.trim() ? undefined : \"Interface name cannot be empty\"),\n })\n ).trim();\n }\n\n const ifaceName = ensureInterfacePrefix(name);\n\n // Discover existing entities in domain\n const existingEntities = listDomainEntities(projectRoot, feature);\n const fallbackEntity = existingEntities.length > 0\n ? (existingEntities.find((e) => ifaceName.toLowerCase().includes(e.name.toLowerCase()))?.name || existingEntities[0]?.name)\n : removeInterfacePrefix(ifaceName).replace(/Repository$|Service$/, \"\");\n\n let entityName: string | undefined = flags.entity || fallbackEntity;\n\n let kind: \"abstractClass\" | \"interface\" = \"abstractClass\";\n let methodsPreset: \"crud\" | \"custom\" | \"empty\" = \"crud\";\n let generateStub = true;\n let registerInProvider = true;\n\n if (!flags.yes) {\n if (existingEntities.length > 0) {\n const selectedEntity = handleCancel(\n await p.select({\n message: \"Select domain entity associated with this interface:\",\n options: [\n ...existingEntities.map((e) => ({ value: e.name, label: e.name })),\n { value: \"__custom__\", label: \"✏️ Enter custom entity name...\" },\n ],\n initialValue: fallbackEntity,\n })\n );\n\n if (selectedEntity === \"__custom__\") {\n entityName = handleCancel(\n await p.text({\n message: \"Enter entity name:\",\n defaultValue: removeInterfacePrefix(ifaceName).replace(/Repository$|Service$/, \"\"),\n })\n ).trim();\n } else {\n entityName = selectedEntity;\n }\n }\n kind = handleCancel(\n await p.select({\n message: \"Interface definition style:\",\n options: [\n { value: \"abstractClass\", label: \"Abstract Class (Recommended - acts as DI token & type)\" },\n { value: \"interface\", label: \"TypeScript Interface (type-only)\" },\n ],\n initialValue: \"abstractClass\",\n })\n ) as any;\n\n methodsPreset = handleCancel(\n await p.select({\n message: \"Method signature preset:\",\n options: [\n { value: \"crud\", label: \"Standard CRUD (GetById, List, Create, Update, Delete)\" },\n { value: \"empty\", label: \"Empty / Minimal skeleton\" },\n ],\n initialValue: \"crud\",\n })\n ) as any;\n\n generateStub = handleCancel(\n await p.confirm({\n message: \"Auto-generate Infrastructure Stub implementation?\",\n initialValue: true,\n })\n );\n\n if (generateStub) {\n registerInProvider = handleCancel(\n await p.confirm({\n message: \"Auto-register interface & stub in feature diProvider.ts?\",\n initialValue: true,\n })\n );\n }\n }\n\n const s = p.spinner();\n s.start(`Generating interface '${pc.cyan(ifaceName)}'...`);\n\n const files: GeneratedFile[] = [];\n\n const options: InterfaceOptions = {\n name: ifaceName,\n feature,\n kind,\n entityName,\n methodsPreset,\n generateStub,\n registerInProvider,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const ifaceFile = generateInterface(options);\n files.push(ifaceFile);\n\n const stubClassName = toStubName(ifaceName);\n\n if (generateStub) {\n const stubFile = generateInfrastructure({\n name: stubClassName,\n feature,\n kind: \"stub\",\n implementsInterface: ifaceName,\n entityName,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n });\n files.push(stubFile);\n }\n\n if (registerInProvider && generateStub) {\n const featureDir = path.join(resolveFeaturesDir(projectRoot), feature);\n const providerFile = updateOrGenerateDiProvider(\n featureDir,\n feature,\n [\n {\n ifaceName,\n implName: stubClassName,\n },\n ],\n {\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n }\n );\n files.push(providerFile);\n }\n\n s.stop(\"Interface generated successfully!\");\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`Interface '${ifaceName}' created in feature '${feature}'!`));\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { HttpHandlerOptions, PropertyDef } from \"../types/index.js\";\nimport { generateHttpHandler } from \"../core/httpHandlerGenerator.js\";\nimport { handleCancel, promptProperties } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listExistingFeatures, listUseCases } from \"../utils/project.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\n\nexport async function runHttpHandlerCommand(\n handlerNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let feature = flags.feature?.trim();\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n\n feature = toCamelCase(feature);\n\n let name = handlerNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"HTTP Route Handler class name:\",\n placeholder: \"e.g. CreateUserHttp, GetUserHttp, HealthHttp\",\n validate: (v) => (v && v.trim() ? undefined : \"Handler name cannot be empty\"),\n })\n ).trim();\n }\n\n let className = toPascalCase(name);\n if (!className.endsWith(\"Http\") && !className.endsWith(\"Route\")) {\n className = `${className}Http`;\n }\n\n let method: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" = flags.method || \"get\";\n let subPath = flags.path || \"/\";\n let useCaseName: string | undefined = flags.usecase;\n let includeValidation = true;\n let validationSource: \"body\" | \"query\" | \"params\" = \"body\";\n let validationFields: PropertyDef[] = [];\n\n if (!flags.yes) {\n method = handleCancel(\n await p.select({\n message: \"HTTP Method:\",\n options: [\n { value: \"get\", label: \"GET\" },\n { value: \"post\", label: \"POST\" },\n { value: \"put\", label: \"PUT\" },\n { value: \"patch\", label: \"PATCH\" },\n { value: \"delete\", label: \"DELETE\" },\n ],\n initialValue: method,\n })\n ) as any;\n\n const defaultPath = method === \"get\" ? \"/\" : \"/\";\n subPath = handleCancel(\n await p.text({\n message: \"Route subpath (relative to feature prefix):\",\n initialValue: defaultPath,\n defaultValue: defaultPath,\n })\n ).trim();\n\n // Scan existing use cases in the feature\n const useCases = listUseCases(projectRoot, feature);\n if (useCases.length > 0) {\n const ucOptions = useCases.map((u) => ({ value: u.name, label: u.name }));\n ucOptions.push({ value: \"__none__\", label: \"None / Standalone Handler\" });\n\n const chosenUc = handleCancel(\n await p.select({\n message: \"Connect this handler to a domain Use Case?\",\n options: ucOptions,\n initialValue: ucOptions[0]?.value,\n })\n );\n\n if (chosenUc !== \"__none__\") {\n useCaseName = chosenUc;\n }\n }\n\n includeValidation = handleCancel(\n await p.confirm({\n message: \"Include Zod inbound request validation?\",\n initialValue: method !== \"delete\",\n })\n );\n\n if (includeValidation) {\n const defaultSource = method === \"get\" ? \"query\" : \"body\";\n validationSource = handleCancel(\n await p.select({\n message: \"Validation data source:\",\n options: [\n { value: \"body\", label: \"req.body (for POST / PUT / PATCH payloads)\" },\n { value: \"query\", label: \"req.query (for GET search/filter queries)\" },\n { value: \"params\", label: \"req.params (for route parameters e.g. :id)\" },\n ],\n initialValue: defaultSource,\n })\n ) as any;\n\n validationFields = await promptProperties({\n message: \"Add schema fields for validation:\",\n });\n }\n }\n\n const s = p.spinner();\n s.start(`Generating HTTP handler '${pc.cyan(className)}'...`);\n\n const options: HttpHandlerOptions = {\n name: className,\n feature,\n method,\n path: subPath,\n useCaseName,\n includeValidation,\n validationSource,\n validationFields,\n successMessage: flags.message,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const files = generateHttpHandler(options);\n s.stop(\"HTTP handler generated successfully!\");\n\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`HTTP handler '${className}' created in feature '${feature}'!`));\n}\n","import path from \"node:path\";\nimport type { GeneratedFile, InjectableOptions, MethodDef } from \"../types/index.js\";\nimport { writeFileSafely } from \"../utils/fileOperations.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\nimport { findProjectRoot, resolveFeaturesDir } from \"../utils/project.js\";\nimport {\n injectableInterfaceTemplate,\n injectableTemplate,\n renderTemplate,\n} from \"../templates/index.js\";\n\nexport function generateInjectableCode(\n className: string,\n dependencies: string[] = [],\n methods: MethodDef[] = [],\n implementsInterface?: string\n): string {\n const formattedDeps = dependencies.map((dep) => ({\n key: toCamelCase(dep),\n name: dep,\n }));\n\n const formattedMethods = methods.map((m) => {\n const isAsync = m.async !== false;\n const retType = m.returnType\n ? (isAsync ? `Promise<${m.returnType}>` : m.returnType)\n : (isAsync ? \"Promise<void>\" : \"void\");\n const params = m.params && m.params.length > 0\n ? m.params.map((p) => `${p.name}: ${p.type}`).join(\", \")\n : \"\";\n return {\n name: m.name,\n isAsync,\n params,\n returnType: retType,\n };\n });\n\n return renderTemplate(injectableTemplate, {\n className,\n implementsInterface,\n dependencies: formattedDeps,\n hasDependencies: dependencies.length > 0,\n hasMethods: formattedMethods.length > 0,\n methods: formattedMethods,\n });\n}\n\nexport function generateInjectable(options: InjectableOptions): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n const projectRoot = options.projectRoot || findProjectRoot();\n const className = toPascalCase(options.name);\n\n let targetDir = \"\";\n if (options.customPath) {\n targetDir = path.isAbsolute(options.customPath)\n ? options.customPath\n : path.join(projectRoot, options.customPath);\n } else if (options.location === \"feature-service\" && options.feature) {\n targetDir = path.join(resolveFeaturesDir(projectRoot), options.feature, \"services\");\n } else if (options.location === \"feature-transformer\" && options.feature) {\n targetDir = path.join(resolveFeaturesDir(projectRoot), options.feature, \"pxExpress\", \"transformers\");\n } else if (options.location === \"module\") {\n targetDir = path.join(projectRoot, \"modules\", className);\n } else {\n targetDir = options.feature\n ? path.join(resolveFeaturesDir(projectRoot), options.feature, \"services\")\n : path.join(projectRoot, \"shared\", className.toLowerCase());\n }\n\n const filePath = path.join(targetDir, `${className}.ts`);\n\n let ifaceName: string | undefined;\n if (options.generateInterface) {\n ifaceName = `I${className}`;\n const ifacePath = path.join(targetDir, `${ifaceName}.ts`);\n const ifaceContent = renderTemplate(injectableInterfaceTemplate, { ifaceName });\n files.push(\n writeFileSafely(ifacePath, ifaceContent, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n }\n\n const code = generateInjectableCode(\n className,\n options.dependencies || [],\n options.methods || [],\n ifaceName\n );\n\n files.push(\n writeFileSafely(filePath, code, {\n projectRoot,\n dryRun: options.dryRun,\n overwrite: options.overwrite,\n })\n );\n\n return files;\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport type { InjectableOptions } from \"../types/index.js\";\nimport { generateInjectable } from \"../core/injectableGenerator.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot, listExistingFeatures } from \"../utils/project.js\";\nimport { toCamelCase, toPascalCase } from \"../utils/formatting.js\";\n\nexport async function runInjectableCommand(\n classNameArg?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n const existingFeatures = listExistingFeatures(projectRoot);\n\n let name = classNameArg?.trim();\n if (!name) {\n name = handleCancel(\n await p.text({\n message: \"Injectable class name:\",\n placeholder: \"e.g. PasswordHasher, TokenService, UserTransformer\",\n validate: (v) => (v && v.trim() ? undefined : \"Class name cannot be empty\"),\n })\n ).trim();\n }\n\n const className = toPascalCase(name);\n\n let location: \"feature-service\" | \"feature-transformer\" | \"shared\" | \"module\" | \"custom\" = \"feature-service\";\n let feature = flags.feature?.trim();\n let customPath: string | undefined;\n\n if (!flags.yes) {\n location = handleCancel(\n await p.select({\n message: \"Select target architectural location:\",\n options: [\n { value: \"feature-service\", label: \"Feature Service (features/<feature>/services/)\" },\n { value: \"feature-transformer\", label: \"Feature Transformer (features/<feature>/pxExpress/transformers/)\" },\n { value: \"shared\", label: \"Shared Module (shared/<name>/)\" },\n { value: \"module\", label: \"Core Module (modules/<Name>/)\" },\n { value: \"custom\", label: \"Custom directory path...\" },\n ],\n initialValue: \"feature-service\",\n })\n ) as any;\n\n if (location === \"feature-service\" || location === \"feature-transformer\") {\n if (!feature) {\n if (existingFeatures.length > 0) {\n const featureOptions = existingFeatures.map((f) => ({ value: f, label: f }));\n featureOptions.push({ value: \"__custom__\", label: \"✏️ Enter custom feature name...\" });\n\n const selected = handleCancel(\n await p.select({\n message: \"Select target feature:\",\n options: featureOptions,\n })\n );\n\n if (selected === \"__custom__\") {\n feature = handleCancel(\n await p.text({\n message: \"Enter feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n } else {\n feature = selected;\n }\n } else {\n feature = handleCancel(\n await p.text({\n message: \"Enter target feature name:\",\n validate: (v) => (v && v.trim() ? undefined : \"Feature name cannot be empty\"),\n })\n ).trim();\n }\n }\n feature = toCamelCase(feature);\n } else if (location === \"custom\") {\n customPath = handleCancel(\n await p.text({\n message: \"Enter destination directory path:\",\n placeholder: \"e.g. src/services or lib/utils\",\n validate: (v) => (v && v.trim() ? undefined : \"Path cannot be empty\"),\n })\n ).trim();\n }\n }\n\n let generateInterface = false;\n if (!flags.yes) {\n generateInterface = handleCancel(\n await p.confirm({\n message: `Generate abstract class interface (I${className}) as runtime DI token?`,\n initialValue: false,\n })\n );\n }\n\n const s = p.spinner();\n s.start(`Generating injectable '${pc.cyan(className)}'...`);\n\n const options: InjectableOptions = {\n name: className,\n feature,\n location,\n customPath,\n generateInterface,\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n };\n\n const files = generateInjectable(options);\n s.stop(\"Injectable class generated successfully!\");\n\n printGeneratedFiles(files, options.dryRun);\n p.outro(pc.green(`Injectable '${className}' created successfully!`));\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { handleCancel, printBanner } from \"../utils/prompts.js\";\nimport { runFeatureCommand } from \"./feature.js\";\nimport { runSharedCommand } from \"./shared.js\";\nimport { runUseCaseCommand } from \"./usecase.js\";\nimport { runDomainCommand } from \"./domain.js\";\nimport { runInfrastructureCommand } from \"./infrastructure.js\";\nimport { runInterfaceCommand } from \"./interface.js\";\nimport { runHttpHandlerCommand } from \"./httpHandler.js\";\nimport { runInjectableCommand } from \"./injectable.js\";\n\nexport async function runInteractiveMenu(flags: Record<string, any> = {}): Promise<void> {\n printBanner();\n\n const choice = handleCancel(\n await p.select({\n message: \"What would you like to create in your architecture?\",\n options: [\n {\n value: \"feature\",\n label: \"Feature\",\n hint: \"Complete vertical slice (domain, infra, usecase, pxExpress, diProvider)\",\n },\n {\n value: \"shared\",\n label: \"Shared Module\",\n hint: \"Foundational utility or port with ports, infrastructure & diProvider\",\n },\n {\n value: \"usecase\",\n label: \"Use Case\",\n hint: \"Domain usecase with @MakeInjectable, DTOs & Vitest tests\",\n },\n {\n value: \"domain\",\n label: \"Domain Entity / Model\",\n hint: \"Zero-dependency pure TypeScript interface, class, or value object\",\n },\n {\n value: \"interface\",\n label: \"Domain Interface\",\n hint: \"Abstract class repository/service interface serving as DI token\",\n },\n {\n value: \"infrastructure\",\n label: \"Infrastructure\",\n hint: \"In-memory stub or concrete repository/client adapter\",\n },\n {\n value: \"httpHandler\",\n label: \"HTTP Handler\",\n hint: \"ExpressRoute endpoint with @MakeInjectable & Zod validation\",\n },\n {\n value: \"injectable\",\n label: \"Injectable Service\",\n hint: \"Generic @MakeInjectable class for services, transformers, or modules\",\n },\n ],\n })\n );\n\n switch (choice) {\n case \"feature\":\n await runFeatureCommand(undefined, flags);\n break;\n case \"shared\":\n await runSharedCommand(undefined, flags);\n break;\n case \"usecase\":\n await runUseCaseCommand(undefined, flags);\n break;\n case \"domain\":\n await runDomainCommand(undefined, flags);\n break;\n case \"interface\":\n await runInterfaceCommand(undefined, flags);\n break;\n case \"infrastructure\":\n await runInfrastructureCommand(undefined, flags);\n break;\n case \"httpHandler\":\n await runHttpHandlerCommand(undefined, flags);\n break;\n case \"injectable\":\n await runInjectableCommand(undefined, flags);\n break;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { runFeatureCommand } from \"./feature.js\";\nimport { runSharedCommand } from \"./shared.js\";\nimport { runUseCaseCommand } from \"./usecase.js\";\nimport { runDomainCommand } from \"./domain.js\";\nimport { runInfrastructureCommand } from \"./infrastructure.js\";\nimport { runInterfaceCommand } from \"./interface.js\";\nimport { runHttpHandlerCommand } from \"./httpHandler.js\";\nimport { runInjectableCommand } from \"./injectable.js\";\nimport { runInteractiveMenu } from \"./menu.js\";\n\nexport async function handleCreate(\n type?: string,\n name?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n if (!type) {\n await runInteractiveMenu(flags);\n return;\n }\n\n const normalizedType = type.trim();\n\n switch (normalizedType) {\n case \"feature\":\n await runFeatureCommand(name, flags);\n break;\n case \"shared\":\n await runSharedCommand(name, flags);\n break;\n case \"usecase\":\n await runUseCaseCommand(name, flags);\n break;\n case \"domain\":\n await runDomainCommand(name, flags);\n break;\n case \"infrastructure\":\n await runInfrastructureCommand(name, flags);\n break;\n case \"interface\":\n await runInterfaceCommand(name, flags);\n break;\n case \"httpHandler\":\n case \"httphandler\":\n await runHttpHandlerCommand(name, flags);\n break;\n case \"injectable\":\n await runInjectableCommand(name, flags);\n break;\n default:\n p.log.error(\n pc.red(\n `Unknown component type: \"${type}\". Allowed types: feature, shared, usecase, domain, infrastructure, interface, httpHandler, injectable.`\n )\n );\n process.exit(1);\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { execSync } from \"node:child_process\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nexport interface RegistryIndexEntry {\n name: string;\n description: string;\n version?: string;\n integrity?: string;\n [key: string]: any;\n}\n\nexport interface RegistryIndex {\n shared: RegistryIndexEntry[];\n features: RegistryIndexEntry[];\n}\n\nexport interface ModuleManifest {\n name: string;\n type: \"shared\" | \"feature\";\n description: string;\n version: string;\n integrity?: string;\n dependencies: {\n npm?: string[];\n shared?: string[];\n features?: string[];\n };\n files: string[];\n [key: string]: any;\n}\n\nexport const DEFAULT_REGISTRY_BASE =\n \"https://raw.githubusercontent.com/solid-stack-digital/mason-registry/main\";\n\n/**\n * Normalizes a registry URL or path:\n * - Converts GitHub web URLs (e.g. https://github.com/org/repo) to raw content URLs\n * - Converts Git SSH URLs (e.g. git@github.com:org/repo.git) to raw content URLs\n * - Resolves relative filesystem paths against baseDir\n */\nexport function normalizeRegistryUrl(urlOrPath: string, baseDir?: string): string {\n let trimmed = urlOrPath.trim();\n\n // 1. Git SSH URL: git@github.com:owner/repo.git\n const gitSshRegex = /^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/;\n const sshMatch = trimmed.match(gitSshRegex);\n if (sshMatch && sshMatch[1] && sshMatch[2]) {\n return `https://raw.githubusercontent.com/${sshMatch[1]}/${sshMatch[2]}/main`;\n }\n\n // 2. GitHub Web URL: https://github.com/owner/repo or https://github.com/owner/repo/tree/branch\n const githubWebRegex = /^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/tree\\/([^/]+))?\\/?$/;\n const webMatch = trimmed.match(githubWebRegex);\n if (webMatch && webMatch[1] && webMatch[2]) {\n const owner = webMatch[1];\n const repo = webMatch[2];\n const branch = webMatch[3] || \"main\";\n return `https://raw.githubusercontent.com/${owner}/${repo}/${branch}`;\n }\n\n // 3. Local relative path\n if (baseDir && (trimmed.startsWith(\"./\") || trimmed.startsWith(\"../\") || trimmed === \".\" || trimmed === \"..\")) {\n return path.resolve(baseDir, trimmed);\n }\n\n return trimmed;\n}\n\n/**\n * Searches upwards from startDir to locate a local mason-registry directory containing index.json.\n */\nexport function findLocalRegistry(startDir: string = process.cwd()): string | null {\n let current = path.resolve(startDir);\n while (true) {\n const candidate = path.join(current, \"mason-registry\");\n if (fs.existsSync(candidate) && fs.existsSync(path.join(candidate, \"index.json\"))) {\n return candidate;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return null;\n}\n\n/**\n * Resolves the active registry base URL or local directory path.\n * Checks:\n * 1. CLI override flag (--registry)\n * 2. Environment variable (MASON_REGISTRY_URL)\n * 3. Local mason.config.json\n * 4. Local package.json (\"mason\": { \"registry\": \"...\" })\n * 5. Upward directory search for local mason-registry\n * 6. Default official GitHub raw URL\n */\nexport function getRegistryBase(projectRoot?: string, override?: string): string {\n const rootDir = projectRoot ? path.resolve(projectRoot) : process.cwd();\n\n if (override && override.trim()) {\n return normalizeRegistryUrl(override.trim(), rootDir);\n }\n\n if (process.env.MASON_REGISTRY_URL && process.env.MASON_REGISTRY_URL.trim()) {\n return normalizeRegistryUrl(process.env.MASON_REGISTRY_URL.trim(), rootDir);\n }\n\n // Check mason.config.json in project root or current working directory\n const configLocations = [\n path.join(rootDir, \"mason.config.json\"),\n path.join(process.cwd(), \"mason.config.json\"),\n ];\n\n for (const configPath of configLocations) {\n if (fs.existsSync(configPath)) {\n try {\n const config = JSON.parse(fs.readFileSync(configPath, \"utf-8\"));\n if (config.registry && typeof config.registry === \"string\") {\n return normalizeRegistryUrl(config.registry.trim(), path.dirname(configPath));\n }\n } catch {\n // ignore JSON parse error in user config\n }\n }\n }\n\n // Check package.json \"mason\" field\n const pkgLocations = [\n path.join(rootDir, \"package.json\"),\n path.join(process.cwd(), \"package.json\"),\n ];\n\n for (const pkgPath of pkgLocations) {\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n if (pkg.mason?.registry && typeof pkg.mason.registry === \"string\") {\n return normalizeRegistryUrl(pkg.mason.registry.trim(), path.dirname(pkgPath));\n }\n } catch {\n // ignore\n }\n }\n }\n\n // Automatic discovery: search upward for local mason-registry workspace\n const localRegistry = findLocalRegistry(rootDir);\n if (localRegistry) {\n return localRegistry;\n }\n\n return DEFAULT_REGISTRY_BASE;\n}\n\n/**\n * Fetch raw file contents from a remote URL or local file directory.\n */\nexport async function fetchRegistryFile(registryBase: string, relPath: string): Promise<string> {\n const cleanRelPath = relPath.replace(/^\\/+/, \"\");\n\n if (registryBase.startsWith(\"http://\") || registryBase.startsWith(\"https://\")) {\n const url = `${registryBase.replace(/\\/+$/, \"\")}/${cleanRelPath}`;\n const headers: Record<string, string> = {};\n const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n\n const res = await fetch(url, { headers });\n if (!res.ok) {\n let extraHint = \"\";\n if (res.status === 404) {\n extraHint = `\\n Possible reasons:\\n • If using a private GitHub repository, ensure GITHUB_TOKEN is set in your environment.\\n • If your registry has not yet been pushed to GitHub, point to your local directory:\\n - CLI flag: mason import ... --registry /path/to/mason-registry\\n - Environment: export MASON_REGISTRY_URL=/path/to/mason-registry\\n - Config file: Create mason.config.json with { \"registry\": \"/path/to/mason-registry\" }`;\n }\n throw new Error(`Failed to fetch ${cleanRelPath} from ${url} (HTTP ${res.status}: ${res.statusText})${extraHint}`);\n }\n return await res.text();\n }\n\n // Local filesystem path or file:// URI\n let baseDir = registryBase;\n if (baseDir.startsWith(\"file://\")) {\n baseDir = fileURLToPath(baseDir);\n }\n\n const filePath = path.resolve(baseDir, cleanRelPath);\n if (!fs.existsSync(filePath)) {\n throw new Error(`Registry file not found at ${filePath}`);\n }\n\n return fs.promises.readFile(filePath, \"utf-8\");\n}\n\n/**\n * Fetches and parses master index.json from the registry.\n */\nexport async function fetchRegistryIndex(registryBase: string): Promise<RegistryIndex> {\n const content = await fetchRegistryFile(registryBase, \"index.json\");\n return JSON.parse(content) as RegistryIndex;\n}\n\n/**\n * Fetches the registry.json manifest for a given shared or feature module.\n */\nexport async function fetchModuleManifest(\n registryBase: string,\n type: \"shared\" | \"feature\",\n name: string\n): Promise<ModuleManifest> {\n const folder = type === \"shared\" ? \"shared\" : \"features\";\n const manifestPath = `${folder}/${name}/registry.json`;\n const content = await fetchRegistryFile(registryBase, manifestPath);\n return JSON.parse(content) as ModuleManifest;\n}\n\n/**\n * Computes Levenshtein distance between two strings.\n */\nexport function levenshteinDistance(a: string, b: string): number {\n const m = a.length;\n const n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));\n\n for (let i = 0; i <= m; i++) {\n dp[i]![0] = i;\n }\n for (let j = 0; j <= n; j++) {\n dp[0]![j] = j;\n }\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i]![j] = dp[i - 1]![j - 1]!;\n } else {\n dp[i]![j] = Math.min(\n dp[i - 1]![j]! + 1, // deletion\n dp[i]![j - 1]! + 1, // insertion\n dp[i - 1]![j - 1]! + 1 // substitution\n );\n }\n }\n }\n\n return dp[m]![n]!;\n}\n\n/**\n * Finds closest matching candidate string for typo correction suggestions.\n */\nexport function findClosestMatch(target: string, candidates: string[]): string | null {\n if (candidates.length === 0) return null;\n const lower = target.toLowerCase();\n\n let closest: string | null = null;\n let minDistance = Infinity;\n\n for (const candidate of candidates) {\n const candLower = candidate.toLowerCase();\n // Substring or prefix match gets top priority\n if (candLower.includes(lower) || lower.includes(candLower)) {\n return candidate;\n }\n\n const dist = levenshteinDistance(lower, candLower);\n if (dist < minDistance) {\n minDistance = dist;\n closest = candidate;\n }\n }\n\n // Only suggest if distance is reasonable (<= 3)\n if (minDistance <= 3) {\n return closest;\n }\n\n return null;\n}\n\n/**\n * Detects the package manager used in the target project.\n */\nexport function detectPackageManager(projectRoot: string): \"pnpm\" | \"yarn\" | \"bun\" | \"npm\" {\n if (fs.existsSync(path.join(projectRoot, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (fs.existsSync(path.join(projectRoot, \"yarn.lock\"))) return \"yarn\";\n if (fs.existsSync(path.join(projectRoot, \"bun.lockb\")) || fs.existsSync(path.join(projectRoot, \"bun.lock\"))) return \"bun\";\n return \"npm\";\n}\n\n/**\n * Checks which npm packages from the requested list are missing in package.json.\n */\nexport function getMissingNpmPackages(projectRoot: string, requiredPackages: string[]): string[] {\n if (!requiredPackages || requiredPackages.length === 0) return [];\n\n const pkgJsonPath = path.join(projectRoot, \"package.json\");\n if (!fs.existsSync(pkgJsonPath)) {\n return requiredPackages;\n }\n\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf-8\"));\n const installed = new Set([\n ...Object.keys(pkg.dependencies || {}),\n ...Object.keys(pkg.devDependencies || {}),\n ...Object.keys(pkg.peerDependencies || {}),\n ]);\n\n return requiredPackages.filter((p) => {\n // Handle packages with version specifier e.g. \"bcrypt@^5.0.0\"\n const nameOnly = p.startsWith(\"@\")\n ? `@${p.slice(1).split(\"@\")[0] || \"\"}`\n : p.split(\"@\")[0] || p;\n return !installed.has(nameOnly);\n });\n } catch {\n return requiredPackages;\n }\n}\n\n/**\n * Installs missing npm packages using the detected package manager.\n */\nexport function installNpmPackages(\n projectRoot: string,\n packages: string[],\n pm?: \"pnpm\" | \"yarn\" | \"bun\" | \"npm\"\n): void {\n if (!packages || packages.length === 0) return;\n\n const manager = pm || detectPackageManager(projectRoot);\n let installCmd: string;\n\n switch (manager) {\n case \"pnpm\":\n installCmd = `pnpm add ${packages.join(\" \")}`;\n break;\n case \"yarn\":\n installCmd = `yarn add ${packages.join(\" \")}`;\n break;\n case \"bun\":\n installCmd = `bun add ${packages.join(\" \")}`;\n break;\n default:\n installCmd = `npm install ${packages.join(\" \")}`;\n break;\n }\n\n p.log.info(`Installing missing dependencies with ${manager}: ${pc.cyan(packages.join(\", \"))}`);\n execSync(installCmd, {\n cwd: projectRoot,\n stdio: \"inherit\",\n });\n}\n","import { createHash } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Recursively collect all relevant source files in a directory,\n * ignoring hidden files/folders, registry.json, and test files.\n */\nexport function getAllFiles(dir: string, baseDir: string = dir): string[] {\n if (!fs.existsSync(dir)) return [];\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n const files: string[] = [];\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relPath = path.relative(baseDir, fullPath).replace(/\\\\/g, \"/\");\n\n if (entry.isDirectory()) {\n if (entry.name === \"__tests__\" || entry.name.startsWith(\".\")) {\n continue;\n }\n files.push(...getAllFiles(fullPath, baseDir));\n } else if (entry.isFile()) {\n if (\n entry.name === \"registry.json\" ||\n entry.name.endsWith(\".test.ts\") ||\n entry.name.endsWith(\".spec.ts\") ||\n entry.name.startsWith(\".\")\n ) {\n continue;\n }\n files.push(relPath);\n }\n }\n\n return files.sort();\n}\n\n/**\n * Computes a deterministic composite SHA-256 integrity hash for a directory.\n * Line endings are normalized to LF (\\n) to prevent cross-platform mismatches.\n */\nexport function computeDirectoryHash(dirPath: string, files?: string[]): string {\n if (!fs.existsSync(dirPath)) return \"\";\n\n const hash = createHash(\"sha256\");\n const fileList = (files ?? getAllFiles(dirPath)).sort();\n\n for (const relativePath of fileList) {\n const absolutePath = path.join(dirPath, relativePath);\n if (!fs.existsSync(absolutePath)) continue;\n const content = fs.readFileSync(absolutePath, \"utf8\");\n\n // Normalize CRLF to LF to prevent cross-platform false mismatches\n const normalizedContent = content.replace(/\\r\\n/g, \"\\n\");\n\n // Update running hash with relative path and normalized content\n hash.update(relativePath);\n hash.update(normalizedContent);\n }\n\n return `sha256-${hash.digest(\"hex\")}`;\n}\n","import path from \"node:path\";\nimport fs from \"node:fs\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n fetchModuleManifest,\n fetchRegistryFile,\n fetchRegistryIndex,\n findClosestMatch,\n getMissingNpmPackages,\n getRegistryBase,\n installNpmPackages,\n type ModuleManifest,\n type RegistryIndex,\n} from \"../utils/registry.js\";\nimport { findProjectRoot } from \"../utils/project.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\nimport { computeDirectoryHash } from \"../utils/integrity.js\";\n\nexport interface ImportFlags {\n overwrite?: boolean;\n dryRun?: boolean;\n yes?: boolean;\n registry?: string;\n skipInstall?: boolean;\n alias?: Record<string, string>;\n [key: string]: any;\n}\n\nexport const importPrompts = {\n select: p.select,\n text: p.text,\n};\n\n/**\n * Rewrite import strings across file content based on an alias mapping.\n * E.g. \"@/shared/hasher/\" -> \"@/shared/auth-hasher/\"\n */\nexport function rewriteImports(content: string, aliasMap: Map<string, string>): string {\n if (aliasMap.size === 0) return content;\n\n let rewritten = content;\n for (const [oldImport, newImport] of aliasMap.entries()) {\n // Strip trailing slashes to build regex that safely matches with or without trailing slash\n const rawOld = oldImport.endsWith(\"/\") ? oldImport.slice(0, -1) : oldImport;\n const rawNew = newImport.endsWith(\"/\") ? newImport.slice(0, -1) : newImport;\n\n const escaped = rawOld.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n // Match oldImport followed by a slash, quote, or end of specifier\n const regex = new RegExp(`${escaped}(?=[\\\\/'\"\\`]|$)`, \"g\");\n rewritten = rewritten.replace(regex, rawNew);\n }\n return rewritten;\n}\n\n/**\n * Determine the destination directory for a module type ('src/shared' or 'src/features')\n */\nexport function getModuleBaseDir(projectRoot: string, modType: \"shared\" | \"feature\"): string {\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n return path.join(projectRoot, \"src\", folder);\n}\n\n/**\n * Resolves the existing directory path for a module in the project, checking both src/<folder>/<name> and <folder>/<name>.\n */\nexport function getExistingModuleDir(\n projectRoot: string,\n modType: \"shared\" | \"feature\",\n modName: string\n): string | null {\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n const inSrc = path.join(projectRoot, \"src\", folder, modName);\n if (fs.existsSync(inSrc)) return inSrc;\n const inRoot = path.join(projectRoot, folder, modName);\n if (fs.existsSync(inRoot)) return inRoot;\n return null;\n}\n\n/**\n * Check whether a module already exists in the project (checking both src/<folder>/<name> and <folder>/<name>)\n */\nexport function checkModuleExists(\n projectRoot: string,\n modType: \"shared\" | \"feature\",\n modName: string\n): boolean {\n return getExistingModuleDir(projectRoot, modType, modName) !== null;\n}\n\ninterface DependencyNode {\n type: \"shared\" | \"feature\";\n name: string;\n manifest: ModuleManifest;\n}\n\ninterface ModuleResolution {\n type: \"shared\" | \"feature\";\n registryName: string;\n targetName: string;\n action: \"download\" | \"reuse\" | \"overwrite\" | \"alias\";\n manifest: ModuleManifest;\n}\n\nexport async function handleImport(\n typeArg?: string,\n nameArg?: string,\n flags: ImportFlags = {}\n): Promise<void> {\n const projectRoot = findProjectRoot();\n\n // 1. Resolve and validate type\n let type = typeArg?.trim().toLowerCase();\n if (type === \"features\") type = \"feature\";\n\n if (!type) {\n type = handleCancel(\n await importPrompts.select({\n message: \"What kind of module would you like to import?\",\n options: [\n {\n value: \"shared\",\n label: \"Shared Module\",\n hint: \"Foundational utility or port placed in src/shared\",\n },\n {\n value: \"feature\",\n label: \"Feature\",\n hint: \"Complete Clean Architecture vertical slice placed in src/features\",\n },\n ],\n })\n );\n }\n\n if (type !== \"shared\" && type !== \"feature\") {\n p.log.error(pc.red(`Invalid module type: \"${typeArg}\". Must be \"shared\" or \"feature\".`));\n process.exit(1);\n }\n\n const registryBase = getRegistryBase(projectRoot, flags.registry);\n const s = p.spinner();\n s.start(`Connecting to registry at ${pc.dim(registryBase)}...`);\n\n let index: RegistryIndex;\n try {\n index = await fetchRegistryIndex(registryBase);\n s.stop(\"Registry index loaded.\");\n } catch (err: any) {\n s.stop(pc.red(\"Failed to load registry index.\"));\n p.log.error(pc.red(err.message || String(err)));\n process.exit(1);\n }\n\n const availableList = type === \"shared\" ? index.shared : index.features;\n const candidateNames = availableList.map((m) => m.name);\n\n // 2. Resolve and validate module name\n let name = nameArg?.trim();\n\n if (!name) {\n if (availableList.length === 0) {\n p.log.warn(`No ${type} modules available in the registry.`);\n return;\n }\n\n name = handleCancel(\n await importPrompts.select({\n message: `Select a ${type} to import:`,\n options: availableList.map((item) => ({\n value: item.name,\n label: item.name,\n hint: item.description,\n })),\n })\n );\n }\n\n if (!candidateNames.includes(name)) {\n const closest = findClosestMatch(name, candidateNames);\n p.log.error(pc.red(`❌ Module '${name}' not found in the ${type} registry.`));\n if (closest) {\n p.log.info(pc.yellow(`Did you mean '${pc.cyan(closest)}'?`));\n }\n process.exit(1);\n }\n\n // 3. Phase 1: In-Memory Dependency Graph Discovery\n const nodes = new Map<string, DependencyNode>();\n\n async function discoverGraph(modType: \"shared\" | \"feature\", modName: string): Promise<void> {\n const key = `${modType}:${modName}`;\n if (nodes.has(key)) return;\n\n let manifest: ModuleManifest;\n try {\n manifest = await fetchModuleManifest(registryBase, modType, modName);\n } catch (err: any) {\n p.log.error(pc.red(`Failed to fetch manifest for ${modType} '${modName}': ${err.message}`));\n process.exit(1);\n }\n\n nodes.set(key, {\n type: modType,\n name: modName,\n manifest,\n });\n\n for (const dep of manifest.dependencies?.shared || []) {\n await discoverGraph(\"shared\", dep);\n }\n for (const dep of manifest.dependencies?.features || []) {\n await discoverGraph(\"feature\", dep);\n }\n }\n\n await discoverGraph(type as \"shared\" | \"feature\", name);\n\n // Topological sorting (dependencies before dependents)\n const orderedKeys: string[] = [];\n const visiting = new Set<string>();\n const visited = new Set<string>();\n\n function buildTopologicalOrder(key: string): void {\n if (visited.has(key)) return;\n if (visiting.has(key)) return; // Cycle break\n visiting.add(key);\n\n const node = nodes.get(key);\n if (node) {\n for (const dep of node.manifest.dependencies?.shared || []) {\n buildTopologicalOrder(`shared:${dep}`);\n }\n for (const dep of node.manifest.dependencies?.features || []) {\n buildTopologicalOrder(`feature:${dep}`);\n }\n }\n\n visiting.delete(key);\n visited.add(key);\n orderedKeys.push(key);\n }\n\n const rootKey = `${type}:${name}`;\n buildTopologicalOrder(rootKey);\n\n // 4. Phase 2: In-Memory Dependency Resolution & Deduplication\n const resolutions = new Map<string, ModuleResolution>();\n const globalAliasMap = new Map<string, string>();\n\n p.log.step(`Importing ${type}: ${pc.cyan(name)}...`);\n\n for (const key of orderedKeys) {\n const node = nodes.get(key)!;\n const { type: modType, name: registryName, manifest } = node;\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n\n // 4a. Handle root module\n if (key === rootKey) {\n const programmaticAlias =\n flags.alias?.[registryName] || flags.alias?.[`${modType}/${registryName}`];\n const targetName = programmaticAlias || registryName;\n\n if (targetName !== registryName) {\n globalAliasMap.set(`@/${folder}/${registryName}/`, `@/${folder}/${targetName}/`);\n globalAliasMap.set(`@/${folder}/${registryName}`, `@/${folder}/${targetName}`);\n }\n\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName,\n action: flags.overwrite ? \"overwrite\" : \"download\",\n manifest,\n });\n continue;\n }\n\n // 4b. Handle dependencies\n const programmaticAlias =\n flags.alias?.[registryName] || flags.alias?.[`${modType}/${registryName}`];\n\n if (programmaticAlias) {\n globalAliasMap.set(`@/${folder}/${registryName}/`, `@/${folder}/${programmaticAlias}/`);\n globalAliasMap.set(`@/${folder}/${registryName}`, `@/${folder}/${programmaticAlias}`);\n const baseDir = getModuleBaseDir(projectRoot, modType);\n const displayDest = path.relative(projectRoot, path.join(baseDir, programmaticAlias));\n p.log.step(`Importing '${registryName}' into '${displayDest}'...`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: programmaticAlias,\n action: \"alias\",\n manifest,\n });\n continue;\n }\n\n const existingDir = getExistingModuleDir(projectRoot, modType, registryName);\n\n // 1. Directory does NOT exist locally -> Download directly (no prompt)\n if (!existingDir) {\n p.log.info(` ↳ Resolving required ${modType} dependency: ${pc.cyan(registryName)}`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: registryName,\n action: \"download\",\n manifest,\n });\n continue;\n }\n\n // 2. Directory DOES exist locally -> Check integrity hash\n const entry = (modType === \"shared\" ? index.shared : index.features)?.find(\n (item) => item.name === registryName\n );\n const remoteIntegrity = manifest.integrity || entry?.integrity;\n const localHash = computeDirectoryHash(existingDir);\n\n // If localHash === remoteIntegrity -> reuse existing silently / with step log\n if (remoteIntegrity && localHash === remoteIntegrity) {\n p.log.step(`✓ ${modType}/${registryName} is up to date (reusing existing)`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: registryName,\n action: \"reuse\",\n manifest,\n });\n continue;\n }\n\n // 3. localHash !== remoteIntegrity (Drift detected!)\n if (flags.overwrite) {\n p.log.step(`Overwriting '${modType}/${registryName}' with registry version (--overwrite)...`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: registryName,\n action: \"overwrite\",\n manifest,\n });\n continue;\n }\n\n if (flags.yes) {\n p.log.info(`Using existing '${modType}/${registryName}'`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: registryName,\n action: \"reuse\",\n manifest,\n });\n continue;\n }\n\n // Prompt the user ONCE for this unique dependency\n const choice = handleCancel(\n await importPrompts.select({\n message: `Local '${modType}/${registryName}' differs from the registry version.`,\n options: [\n {\n value: \"keep_existing\",\n label: `Keep existing local version (Recommended)`,\n },\n {\n value: \"rename\",\n label: \"Import fresh copy under a new name (alias)\",\n },\n {\n value: \"overwrite\",\n label: \"Overwrite local version with registry version\",\n },\n ],\n })\n );\n\n if (choice === \"keep_existing\" || (choice as string) === \"use_existing\") {\n p.log.step(`Skipping '${modType}/${registryName}' (keeping existing)`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: registryName,\n action: \"reuse\",\n manifest,\n });\n continue;\n }\n\n if (choice === \"rename\") {\n const newName = handleCancel(\n await importPrompts.text({\n message: \"What should we name the new copy?\",\n placeholder: `${registryName}-copy`,\n validate(val) {\n const v = val?.trim();\n if (!v) return \"Name cannot be empty\";\n if (v === registryName) return `Name must be different from '${registryName}'`;\n if (!/^[a-zA-Z0-9_-]+$/.test(v)) {\n return \"Name can only contain alphanumeric characters, dashes, and underscores\";\n }\n if (checkModuleExists(projectRoot, modType, v)) {\n return `'${v}' already exists in ${folder}, please choose another name`;\n }\n },\n })\n ).trim();\n\n globalAliasMap.set(`@/${folder}/${registryName}/`, `@/${folder}/${newName}/`);\n globalAliasMap.set(`@/${folder}/${registryName}`, `@/${folder}/${newName}`);\n\n const baseDir = getModuleBaseDir(projectRoot, modType);\n const displayDest = path.relative(projectRoot, path.join(baseDir, newName));\n p.log.step(`Importing '${registryName}' into '${displayDest}'...`);\n\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: newName,\n action: \"alias\",\n manifest,\n });\n continue;\n }\n\n if (choice === \"overwrite\") {\n p.log.step(`Overwriting '${modType}/${registryName}' with registry version...`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: registryName,\n action: \"overwrite\",\n manifest,\n });\n continue;\n }\n }\n\n // 5. Phase 3: Execute File Placement & Import Rewriting\n const totalWrittenFiles: string[] = [];\n const requiredNpmPackages = new Set<string>();\n\n for (const node of nodes.values()) {\n for (const pkg of node.manifest.dependencies?.npm || []) {\n requiredNpmPackages.add(pkg);\n }\n }\n\n for (const key of orderedKeys) {\n const res = resolutions.get(key)!;\n if (res.action === \"reuse\") {\n continue;\n }\n\n const folder = res.type === \"shared\" ? \"shared\" : \"features\";\n const targetDir = path.join(getModuleBaseDir(projectRoot, res.type), res.targetName);\n const isOverwrite = Boolean(flags.overwrite || res.action === \"overwrite\");\n\n if (key !== rootKey) {\n p.log.step(\n `Importing ${res.type}: ${pc.cyan(res.targetName)}${\n res.targetName !== res.registryName ? pc.dim(` (from ${res.registryName})`) : \"\"\n }...`\n );\n }\n\n if (res.action === \"overwrite\" && !flags.dryRun) {\n const existingDir = getExistingModuleDir(projectRoot, res.type, res.targetName);\n if (existingDir && existingDir !== targetDir) {\n fs.rmSync(existingDir, { recursive: true, force: true });\n }\n if (fs.existsSync(targetDir)) {\n fs.rmSync(targetDir, { recursive: true, force: true });\n }\n }\n\n for (const file of res.manifest.files || []) {\n if (file === \"registry.json\") continue;\n\n const remoteFilePath = `${folder}/${res.registryName}/${file}`;\n const localFilePath = path.join(targetDir, file);\n\n if (fs.existsSync(localFilePath) && !isOverwrite) {\n p.log.warn(\n ` ↳ Skipping existing file: ${pc.dim(path.relative(projectRoot, localFilePath))} (use --overwrite to replace)`\n );\n continue;\n }\n\n let content = await fetchRegistryFile(registryBase, remoteFilePath);\n\n // Apply the global alias mapping to rewrite imports across all modules\n content = rewriteImports(content, globalAliasMap);\n\n if (!flags.dryRun) {\n fs.mkdirSync(path.dirname(localFilePath), { recursive: true });\n fs.writeFileSync(localFilePath, content, \"utf-8\");\n }\n\n const displayPath = path.relative(projectRoot, localFilePath);\n totalWrittenFiles.push(displayPath);\n p.log.message(` ${pc.green(\"+\")} ${displayPath}`);\n }\n }\n\n // 6. Resolve and install NPM packages\n const missingNpm = getMissingNpmPackages(projectRoot, Array.from(requiredNpmPackages));\n\n if (missingNpm.length > 0) {\n if (flags.skipInstall || flags.dryRun) {\n p.log.info(`Required npm dependencies to install: ${pc.cyan(missingNpm.join(\", \"))}`);\n } else {\n try {\n installNpmPackages(projectRoot, missingNpm);\n } catch (err: any) {\n p.log.warn(\n `Could not automatically install packages (${err.message}). Please run: npm install ${missingNpm.join(\n \" \"\n )}`\n );\n }\n }\n }\n\n if (flags.dryRun) {\n p.log.info(pc.yellow(\"Dry run complete: No files were written to disk.\"));\n } else {\n const rootRes = resolutions.get(rootKey)!;\n const baseDir = getModuleBaseDir(projectRoot, type as \"shared\" | \"feature\");\n const displayTarget = path.relative(projectRoot, path.join(baseDir, rootRes.targetName));\n p.log.success(\n pc.green(\n `Successfully imported ${type} '${name}' (${totalWrittenFiles.length} file${\n totalWrittenFiles.length === 1 ? \"\" : \"s\"\n } placed in ${displayTarget})`\n )\n );\n }\n}\n","import { cac } from \"cac\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { handleCreate } from \"./commands/create.js\";\nimport { handleImport } from \"./commands/import.js\";\nimport { findProjectRoot } from \"./utils/project.js\";\nimport { getEffectiveMode } from \"./utils/config.js\";\nimport { PromptCancelledError, handleCancel } from \"./utils/prompts.js\";\n\nexport function createCli() {\n const cli = cac(\"mason\");\n\n // Default command: interactive selection wizard\n cli\n .command(\"[...args]\", \"Interactive scaffolding and import wizard\")\n .option(\"-d, --dry-run\", \"Preview changes without writing to disk\")\n .option(\"-o, --overwrite\", \"Overwrite existing files\")\n .option(\"-y, --yes\", \"Accept defaults and skip interactive prompts\")\n .option(\"--registry\", \"Run in registry mode\")\n .action(async (args: string[], flags: Record<string, any>) => {\n if (args && args.length > 0) {\n p.log.error(\n pc.red(\n `Unknown command: \"${args.join(\" \")}\". Use --help to list available commands.`\n )\n );\n process.exit(1);\n }\n try {\n const projectRoot = findProjectRoot();\n const mode = getEffectiveMode(projectRoot, flags);\n\n if (mode === \"registry\") {\n const choice = handleCancel(\n await p.select({\n message: \"🏛️ Mason (Registry Mode): What would you like to scaffold?\",\n options: [\n {\n value: \"create_feature\",\n label: \"Initialize New Feature\",\n hint: \"Scaffold a new feature slice under features/\",\n },\n {\n value: \"create_shared\",\n label: \"Initialize New Shared Module\",\n hint: \"Scaffold a new shared utility/port under shared/\",\n },\n {\n value: \"create_usecase\",\n label: \"Create New Use Case\",\n hint: \"Add a new use case to an existing feature\",\n },\n {\n value: \"import\",\n label: \"Import from Remote Registry\",\n hint: \"Download a module from upstream\",\n },\n ],\n })\n );\n\n switch (choice) {\n case \"create_feature\":\n await handleCreate(\"feature\", undefined, flags);\n break;\n case \"create_shared\":\n await handleCreate(\"shared\", undefined, flags);\n break;\n case \"create_usecase\":\n await handleCreate(\"usecase\", undefined, flags);\n break;\n case \"import\":\n await handleImport(undefined, undefined, flags);\n break;\n }\n return;\n }\n\n const choice = handleCancel(\n await p.select({\n message: \"🧱 Mason: What would you like to do?\",\n options: [\n {\n value: \"create\",\n label: \"Create component\",\n hint: \"Scaffold a new feature, shared module, use case, domain entity, etc.\",\n },\n {\n value: \"import\",\n label: \"Import from registry\",\n hint: \"Download and link pre-built shared modules or features from the registry\",\n },\n ],\n })\n );\n\n if (choice === \"create\") {\n await handleCreate(undefined, undefined, flags);\n } else {\n await handleImport(undefined, undefined, flags);\n }\n } catch (err) {\n handleCliError(err);\n }\n });\n\n // 1. The LOCAL Scaffolding Namespace\n cli\n .command(\n \"create [type] [name]\",\n \"Scaffold local Clean Architecture components (feature, shared, usecase, domain, etc.)\"\n )\n .option(\"-d, --dry-run\", \"Preview changes without writing to disk\")\n .option(\"-o, --overwrite\", \"Overwrite existing files\")\n .option(\"-y, --yes\", \"Accept defaults and skip interactive prompts\")\n .option(\"-f, --feature <feature>\", \"Target feature name\")\n .option(\"-t, --target <dir>\", \"Override target directory\")\n .option(\"--dest <dir>\", \"Override target directory (alias for --target)\")\n .option(\"--registry\", \"Scaffold in registry mode (stamps registry.json)\")\n .option(\"--express\", \"Include Express presentation layer (pxExpress)\")\n .option(\"--no-express\", \"Skip Express presentation layer\")\n .option(\"-i, --interface <interface>\", \"Interface or abstract class to implement\")\n .option(\"-k, --kind <kind>\", \"Implementation kind ('stub' or 'concrete')\")\n .option(\"-g, --global\", \"Place in global infrastructure/ instead of feature\")\n .option(\"-m, --method <method>\", \"HTTP method (get, post, put, patch, delete)\")\n .option(\"-p, --path <path>\", \"Route subpath (e.g. /:id)\")\n .option(\"-u, --usecase <usecase>\", \"Connected use case name\")\n .option(\"--message <message>\", \"Custom success message\")\n .option(\"--domainNames <names>\", \"Comma-separated domain entity names\")\n .example(\"mason create\")\n .example(\"mason create feature users\")\n .example(\"mason create usecase PlaceOrder -f orders\")\n .example(\"mason create domain User -f users\")\n .example(\"mason create infrastructure PostgresUserRepository -f users -i IUserRepository\")\n .example(\"mason create interface IUserRepository -f users\")\n .example(\"mason create httpHandler GetUserHttp -f users -m get -p /:id\")\n .example(\"mason create injectable PasswordHasher\")\n .action(async (type?: string, name?: string, flags: Record<string, any> = {}) => {\n try {\n await handleCreate(type, name, flags);\n } catch (err) {\n handleCliError(err);\n }\n });\n\n // 2. The REMOTE Registry Namespace\n cli\n .command(\n \"import [type] [name]\",\n \"Import pre-built shared modules or features from the Solid Stack Registry\"\n )\n .option(\"-o, --overwrite\", \"Overwrite existing files\")\n .option(\"-d, --dry-run\", \"Preview changes without writing to disk\")\n .option(\"-y, --yes\", \"Accept defaults and skip interactive prompts\")\n .option(\"--registry <url>\", \"Registry base URL or local directory\")\n .option(\"--skip-install\", \"Skip automatic package manager dependency installation\")\n .example(\"mason import shared hasher\")\n .example(\"mason import feature authn\")\n .example(\"mason import shared\")\n .example(\"mason import feature\")\n .action(async (type?: string, name?: string, flags: Record<string, any> = {}) => {\n try {\n await handleImport(type, name, flags);\n } catch (err) {\n handleCliError(err);\n }\n });\n\n\n\n // Backwards compatibility shortcuts for flat commands\n const createSubtypes = [\n \"feature\",\n \"shared\",\n \"usecase\",\n \"domain\",\n \"infrastructure\",\n \"interface\",\n \"httpHandler\",\n \"injectable\",\n ];\n\n for (const subtype of createSubtypes) {\n cli\n .command(\n `${subtype} [name]`,\n `Shorthand for 'mason create ${subtype} [name]'`\n )\n .allowUnknownOptions()\n .action(async (name?: string, flags: Record<string, any> = {}) => {\n try {\n await handleCreate(subtype, name, flags);\n } catch (err) {\n handleCliError(err);\n }\n });\n }\n\n cli.help();\n cli.version(\"1.0.16\");\n\n return cli;\n}\n\nfunction handleCliError(err: unknown): void {\n if (err instanceof PromptCancelledError) {\n process.exit(0);\n }\n const message = err instanceof Error ? err.message : String(err);\n p.log.error(pc.red(`Error: ${message}`));\n process.exit(1);\n}\n\nexport async function runCli(argv: string[] = process.argv): Promise<void> {\n const cli = createCli();\n cli.parse(argv, { run: true });\n}\n","#!/usr/bin/env node\nimport { runCli } from \"./cli.js\";\n\nrunCli().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n"]}