@solid-stack/mason 1.0.24 → 1.0.26
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 +429 -272
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +426 -269
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/commands/env.d.ts +3 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/envExamples.d.ts +3 -0
- package/dist/commands/envExamples.d.ts.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/index.cjs +358 -198
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +354 -197
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/formatting.ts","../src/utils/fileOperations.ts","../src/utils/config.ts","../src/utils/project.ts","../src/utils/prompts.ts","../src/utils/registry.ts","../src/utils/integrity.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/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/commands/import.ts","../src/core/lintEngine.ts","../src/commands/lint.ts","../src/cli.ts"],"names":["path","fs","p","pc","p2","fileURLToPath","p3","execSync","createHash","Handlebars","p4","s","p5","p6","p7","p8","p9","p10","p11","generateInterface","p12","p13","p14","aliasMap","programmaticAlias","isTestFile","cac","p15","choice"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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\";\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","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/ or src/features/ or src/shared/)\n if (\n fs.existsSync(path.join(projectRoot, \"index.json\")) &&\n (fs.existsSync(path.join(projectRoot, \"features\")) ||\n fs.existsSync(path.join(projectRoot, \"shared\")) ||\n fs.existsSync(path.join(projectRoot, \"src/features\")) ||\n fs.existsSync(path.join(projectRoot, \"src/shared\")))\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 if (fs.existsSync(path.join(projectRoot, \"src/features\"))) {\n return path.join(projectRoot, \"src/features\");\n }\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 if (fs.existsSync(path.join(projectRoot, \"src/shared\"))) {\n return path.join(projectRoot, \"src/shared\");\n }\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 * 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 { 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 let res = await fetch(url, { headers });\n if (!res.ok && res.status === 404 && !cleanRelPath.startsWith(\"src/\")) {\n const srcUrl = `${registryBase.replace(/\\/+$/, \"\")}/src/${cleanRelPath}`;\n const srcRes = await fetch(srcUrl, { headers });\n if (srcRes.ok) {\n res = srcRes;\n }\n }\n\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 let filePath = path.resolve(baseDir, cleanRelPath);\n if (!fs.existsSync(filePath)) {\n const inSrcPath = path.resolve(baseDir, \"src\", cleanRelPath);\n if (fs.existsSync(inSrcPath)) {\n filePath = inSrcPath;\n } else {\n throw new Error(`Registry file not found at ${filePath}`);\n }\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.endsWith(\".test.js\") ||\n entry.name.endsWith(\".spec.js\") ||\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 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 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 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 { getConfiguredFeaturesDir, getConfiguredSharedDir, getEffectiveMode } from \"../utils/config.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> | string | string[];\n pointTo?: Record<string, string> | string | string[];\n useExisting?: Record<string, string> | string | string[];\n tests?: boolean;\n [key: string]: any;\n}\n\nexport const importPrompts = {\n select: p.select,\n text: p.text,\n confirm: p.confirm,\n};\n\n/**\n * Checks whether a given relative file path is a test file.\n */\nexport function isTestFile(filePath: string): boolean {\n const normalized = filePath.replace(/\\\\/g, \"/\");\n const parts = normalized.split(\"/\");\n const fileName = parts[parts.length - 1] || \"\";\n return (\n fileName.endsWith(\".test.ts\") ||\n fileName.endsWith(\".test.js\") ||\n fileName.endsWith(\".spec.ts\") ||\n fileName.endsWith(\".spec.js\") ||\n parts.includes(\"__tests__\")\n );\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 mode = getEffectiveMode(projectRoot);\n if (mode === \"registry\") {\n return modType === \"shared\"\n ? getConfiguredSharedDir(projectRoot)\n : getConfiguredFeaturesDir(projectRoot);\n }\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 configured dirs, 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 configuredDir = modType === \"shared\"\n ? getConfiguredSharedDir(projectRoot)\n : getConfiguredFeaturesDir(projectRoot);\n const inConfigured = path.join(configuredDir, modName);\n if (fs.existsSync(inConfigured)) return inConfigured;\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 * List all available local module names for a given type (checking configured dir, src/<folder>, and <folder>)\n */\nexport function getAvailableLocalModules(\n projectRoot: string,\n modType: \"shared\" | \"feature\"\n): string[] {\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n const configuredDir = modType === \"shared\"\n ? getConfiguredSharedDir(projectRoot)\n : getConfiguredFeaturesDir(projectRoot);\n const dirs = [\n configuredDir,\n path.join(projectRoot, \"src\", folder),\n path.join(projectRoot, folder),\n ];\n const set = new Set<string>();\n for (const dir of dirs) {\n if (fs.existsSync(dir)) {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const e of entries) {\n if (e.isDirectory() && !e.name.startsWith(\".\")) {\n set.add(e.name);\n }\n }\n } catch {}\n }\n }\n return Array.from(set).sort();\n}\n\n/**\n * Helper to parse mapping flags like { time: \"mytime\" } or \"time:mytime\" or [\"time:mytime\"]\n */\nexport function parseMappingFlags(raw: any): Record<string, string> {\n if (!raw) return {};\n if (typeof raw === \"object\" && !Array.isArray(raw)) return raw;\n const result: Record<string, string> = {};\n const entries = Array.isArray(raw) ? raw : [raw];\n for (const entry of entries) {\n if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx !== -1) {\n let key = entry.slice(0, idx).trim();\n let val = entry.slice(idx + 1).trim();\n val = val\n .replace(/^@\\/(shared|features)\\//, \"\")\n .replace(/^(src\\/)?(shared|features)\\//, \"\")\n .replace(/^\\/+|\\/+$/g, \"\")\n .trim();\n if (key && val) {\n result[key] = val;\n }\n }\n }\n }\n return result;\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 aliasMap = parseMappingFlags(flags.alias);\n const programmaticAlias =\n aliasMap[registryName] || aliasMap[`${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 aliasMap = parseMappingFlags(flags.alias);\n const pointToMap = {\n ...parseMappingFlags(flags.pointTo),\n ...parseMappingFlags(flags[\"point-to\"]),\n ...parseMappingFlags(flags.useExisting),\n ...parseMappingFlags(flags[\"use-existing\"]),\n };\n\n const programmaticPointTo =\n pointToMap[registryName] || pointToMap[`${modType}/${registryName}`];\n\n if (programmaticPointTo) {\n if (!checkModuleExists(projectRoot, modType, programmaticPointTo)) {\n p.log.error(\n pc.red(\n `Module '${programmaticPointTo}' specified in --point-to does not exist in ${folder}.`\n )\n );\n process.exit(1);\n }\n globalAliasMap.set(`@/${folder}/${registryName}/`, `@/${folder}/${programmaticPointTo}/`);\n globalAliasMap.set(`@/${folder}/${registryName}`, `@/${folder}/${programmaticPointTo}`);\n p.log.step(`Pointing '${modType}/${registryName}' to existing '${folder}/${programmaticPointTo}'`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: programmaticPointTo,\n action: \"reuse\",\n manifest,\n });\n continue;\n }\n\n const programmaticAlias =\n aliasMap[registryName] || aliasMap[`${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: \"point_existing\",\n label: `Point to another existing ${modType} module`,\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 === \"point_existing\" || (choice as string) === \"point_to_existing\") {\n const candidates = getAvailableLocalModules(projectRoot, modType).filter(\n (m) => m !== registryName\n );\n\n let chosenName: string;\n\n if (candidates.length > 0) {\n const selection = handleCancel(\n await importPrompts.select({\n message: `Select an existing ${modType} module to point to:`,\n options: [\n ...candidates.map((m) => ({\n value: m,\n label: m,\n })),\n {\n value: \"__custom__\",\n label: \"Enter name manually...\",\n },\n ],\n })\n );\n\n if (selection === \"__custom__\") {\n chosenName = handleCancel(\n await importPrompts.text({\n message: `Enter the name of the existing ${modType} module:`,\n placeholder: `my${registryName}`,\n validate(val) {\n const v = val?.trim();\n if (!v) return \"Name cannot be empty\";\n if (v === registryName) {\n return `Name must be different from '${registryName}' (or select 'Keep existing local version')`;\n }\n if (!checkModuleExists(projectRoot, modType, v)) {\n return `'${v}' does not exist in ${folder}`;\n }\n },\n })\n ).trim();\n } else {\n chosenName = selection;\n }\n } else {\n chosenName = handleCancel(\n await importPrompts.text({\n message: `Enter the name of the existing ${modType} module:`,\n placeholder: `my${registryName}`,\n validate(val) {\n const v = val?.trim();\n if (!v) return \"Name cannot be empty\";\n if (v === registryName) {\n return `Name must be different from '${registryName}' (or select 'Keep existing local version')`;\n }\n if (!checkModuleExists(projectRoot, modType, v)) {\n return `'${v}' does not exist in ${folder}`;\n }\n },\n })\n ).trim();\n }\n\n chosenName = chosenName\n .replace(/^@\\/(shared|features)\\//, \"\")\n .replace(/^(src\\/)?(shared|features)\\//, \"\")\n .replace(/^\\/+|\\/+$/g, \"\")\n .trim();\n\n globalAliasMap.set(`@/${folder}/${registryName}/`, `@/${folder}/${chosenName}/`);\n globalAliasMap.set(`@/${folder}/${registryName}`, `@/${folder}/${chosenName}`);\n\n p.log.step(`Pointing '${modType}/${registryName}' to existing '${folder}/${chosenName}'`);\n\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: chosenName,\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 // Check if any module being imported includes test files\n const hasTestFiles = Array.from(nodes.values()).some((node) =>\n node.manifest.files?.some((file) => isTestFile(file))\n );\n\n let includeTests = true;\n if (flags.tests !== undefined) {\n includeTests = Boolean(flags.tests);\n } else if (flags.yes) {\n includeTests = true;\n } else if (hasTestFiles) {\n includeTests = handleCancel(\n await importPrompts.confirm({\n message: \"Include test files?\",\n initialValue: true,\n })\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 if (!includeTests && isTestFile(file)) 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 fs from \"node:fs\";\nimport path from \"node:path\";\nimport type {\n CircularDependencyInfo,\n FeatureAuditResult,\n FeatureDependencyEvidence,\n LayerType,\n LintOptions,\n LintSummary,\n RuleCategory,\n Violation,\n} from \"../types/lint.js\";\nimport { findProjectRoot, resolveFeaturesDir, resolveSharedDir } from \"../utils/project.js\";\n\nexport class DependencyRuleError extends Error {\n public readonly violations: Violation[];\n public readonly isFailFast: boolean;\n\n constructor(message: string, violations: Violation[], isFailFast: boolean = false) {\n super(message);\n this.name = \"DependencyRuleError\";\n this.violations = violations;\n this.isFailFast = isFailFast;\n }\n}\n\nexport interface TargetInfo {\n isExternal: boolean;\n isDiFramework: boolean;\n targetFeature?: string | undefined;\n targetLayer?: LayerType | undefined;\n targetSubfolder?: string | undefined;\n targetFileName?: string | undefined;\n isTargetPort?: boolean | undefined;\n isTargetRepo?: boolean | undefined;\n targetSharedModule?: string | undefined;\n isSharedRoot?: boolean | undefined;\n isSharedPorts?: boolean | undefined;\n isSharedInfra?: boolean | undefined;\n isSharedDomain?: boolean | undefined;\n}\n\nexport function isTestFile(filePath: string, projectRoot?: string): boolean {\n const norm = (projectRoot ? path.relative(projectRoot, filePath) : filePath).replace(/\\\\/g, \"/\");\n const base = path.basename(norm);\n return (\n base.endsWith(\".test.ts\") ||\n base.endsWith(\".test.js\") ||\n base.endsWith(\".spec.ts\") ||\n base.endsWith(\".spec.js\") ||\n base.endsWith(\".d.ts\") ||\n norm.includes(\"/__tests__/\") ||\n norm.startsWith(\"__tests__/\") ||\n /(?:^|\\/)tests?\\//.test(norm)\n );\n}\n\nexport function scanDirFiles(dir: string, projectRoot?: string): string[] {\n if (!fs.existsSync(dir)) return [];\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (\n entry.name === \"node_modules\" ||\n entry.name === \"dist\" ||\n entry.name === \"__tests__\" ||\n entry.name.startsWith(\".\")\n ) {\n continue;\n }\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n files.push(...scanDirFiles(fullPath, projectRoot));\n } else if (\n entry.isFile() &&\n (entry.name.endsWith(\".ts\") || entry.name.endsWith(\".js\")) &&\n !isTestFile(fullPath, projectRoot)\n ) {\n files.push(fullPath);\n }\n }\n return files;\n}\n\nexport function classifyFile(\n fullPath: string,\n projectRoot: string\n): { feature?: string | undefined; layer?: LayerType | undefined } {\n const rel = path.relative(projectRoot, fullPath).replace(/\\\\/g, \"/\");\n const featureMatch = rel.match(/(?:^|\\/)(?:src\\/)?features\\/([^/]+)\\/([^/]+)(?:\\/.*)?$/);\n if (!featureMatch || !featureMatch[1] || !featureMatch[2]) return {};\n\n const feature = featureMatch[1];\n const subfolder = featureMatch[2];\n\n let layer: LayerType | undefined;\n if (subfolder === \"domain\" || subfolder === \"errors\") {\n layer = \"domain\";\n } else if (subfolder === \"useCases\" || subfolder === \"usecases\") {\n layer = \"useCases\";\n } else if (subfolder === \"services\") {\n layer = \"services\";\n } else if (subfolder === \"infrastructure\") {\n layer = \"infrastructure\";\n } else if (\n subfolder === \"pxExpress\" ||\n subfolder === \"presentation\" ||\n subfolder === \"handlers\" ||\n subfolder.startsWith(\"px\")\n ) {\n layer = \"presentation\";\n }\n\n return { feature, layer };\n}\n\nexport function classifyTarget(\n specifier: string,\n sourceFileAbs: string,\n projectRoot: string\n): TargetInfo {\n if (specifier === \"@solid-stack/di\" || specifier.startsWith(\"@solid-stack/di/\")) {\n return { isExternal: true, isDiFramework: true };\n }\n\n if (\n specifier.startsWith(\"node:\") ||\n [\"crypto\", \"fs\", \"path\", \"http\", \"https\", \"url\", \"os\", \"child_process\", \"stream\", \"express\", \"cors\", \"dotenv\"].includes(specifier)\n ) {\n return { isExternal: true, isDiFramework: false };\n }\n\n let resolvedRel: string | null = null;\n\n if (specifier.startsWith(\".\")) {\n const abs = path.resolve(path.dirname(sourceFileAbs), specifier);\n resolvedRel = path.relative(projectRoot, abs).replace(/\\\\/g, \"/\");\n } else if (specifier.startsWith(\"@/features/\") || specifier.startsWith(\"~/features/\")) {\n resolvedRel = specifier.replace(/^[@~]\\//, \"src/\");\n } else if (specifier.startsWith(\"@features/\")) {\n resolvedRel = \"src/\" + specifier.slice(1);\n } else if (specifier.startsWith(\"@/shared/\") || specifier.startsWith(\"~/shared/\")) {\n resolvedRel = specifier.replace(/^[@~]\\//, \"src/\");\n } else if (specifier.startsWith(\"@shared/\")) {\n resolvedRel = \"src/\" + specifier.slice(1);\n } else if (specifier.startsWith(\"@/\") || specifier.startsWith(\"~/\")) {\n resolvedRel = \"src/\" + specifier.slice(2);\n } else if (specifier.startsWith(\"features/\") || specifier.startsWith(\"shared/\")) {\n resolvedRel = specifier;\n }\n\n if (!resolvedRel) {\n return { isExternal: true, isDiFramework: false };\n }\n\n // Check features\n const featMatch = resolvedRel.match(/(?:^|\\/)(?:src\\/)?features\\/([^/]+)\\/([^/]+)(?:\\/(.*))?$/);\n if (featMatch && featMatch[1] && featMatch[2]) {\n const targetFeature = featMatch[1];\n const targetSubfolder = featMatch[2];\n const rest = featMatch[3] || \"\";\n\n let targetLayer: LayerType | undefined;\n if (targetSubfolder === \"domain\" || targetSubfolder === \"errors\") {\n targetLayer = \"domain\";\n } else if (targetSubfolder === \"useCases\" || targetSubfolder === \"usecases\") {\n targetLayer = \"useCases\";\n } else if (targetSubfolder === \"services\") {\n targetLayer = \"services\";\n } else if (targetSubfolder === \"infrastructure\") {\n targetLayer = \"infrastructure\";\n } else if (\n targetSubfolder === \"pxExpress\" ||\n targetSubfolder === \"presentation\" ||\n targetSubfolder === \"handlers\" ||\n targetSubfolder.startsWith(\"px\")\n ) {\n targetLayer = \"presentation\";\n }\n\n const basePart = rest ? path.basename(rest) : targetSubfolder;\n const targetFileName = basePart.replace(/\\.(js|ts|mjs|cjs)$/, \"\");\n const isTargetPort = /^I[A-Z]/.test(targetFileName);\n const isTargetRepo = isTargetPort && targetFileName.includes(\"Repo\");\n\n return {\n isExternal: false,\n isDiFramework: false,\n targetFeature,\n targetLayer,\n targetSubfolder,\n targetFileName,\n isTargetPort,\n isTargetRepo,\n };\n }\n\n // Check shared\n const sharedMatch = resolvedRel.match(/(?:^|\\/)(?:src\\/)?shared\\/([^/]+)(?:\\/(.*))?$/);\n if (sharedMatch) {\n const targetSharedModule = sharedMatch[1];\n const sharedRest = sharedMatch[2] || \"\";\n const isSharedRoot = !sharedRest.includes(\"/\");\n const isSharedPorts = sharedRest.startsWith(\"ports/\") || sharedRest === \"ports\";\n const isSharedInfra = sharedRest.startsWith(\"infrastructure/\") || sharedRest === \"infrastructure\";\n const isSharedDomain = sharedRest.startsWith(\"domain/\") || sharedRest === \"domain\";\n\n return {\n isExternal: false,\n isDiFramework: false,\n targetSharedModule,\n isSharedRoot,\n isSharedPorts,\n isSharedInfra,\n isSharedDomain,\n };\n }\n\n return { isExternal: true, isDiFramework: false };\n}\n\nexport interface ParsedStatement {\n specifier: string;\n line: number;\n rawCode: string;\n}\n\nexport function extractImportStatements(content: string): ParsedStatement[] {\n const statements: ParsedStatement[] = [];\n const lines = content.split(/\\r?\\n/);\n\n // Regex matching static imports, re-exports, dynamic imports, require\n const regex = /(?:import\\s+(?:type\\s+)?(?:[\\s\\w*$,{}]+\\s+from\\s+)?|export\\s+(?:type\\s+)?(?:[\\s\\w*$,{}]+\\s+from\\s+)?|import\\s*\\(|require\\s*\\()\\s*[\"']([^\"']+)[\"']/g;\n\n let match: RegExpExecArray | null;\n while ((match = regex.exec(content)) !== null) {\n const specifier = match[1]!;\n const charIndex = match.index;\n const lineNum = content.substring(0, charIndex).split(\"\\n\").length;\n const rawCode = lines[lineNum - 1]?.trim() || match[0].trim();\n\n statements.push({\n specifier,\n line: lineNum,\n rawCode,\n });\n }\n\n return statements;\n}\n\nexport class FeatureDependencyGraph {\n private edges = new Map<string, Map<string, FeatureDependencyEvidence>>();\n\n public addEdge(evidence: FeatureDependencyEvidence): {\n createsCycle: boolean;\n directPartner?: FeatureDependencyEvidence | undefined;\n cycleChain?: string[] | undefined;\n } {\n const { fromFeature, toFeature } = evidence;\n if (fromFeature === toFeature) {\n return { createsCycle: false };\n }\n\n if (!this.edges.has(fromFeature)) {\n this.edges.set(fromFeature, new Map());\n }\n this.edges.get(fromFeature)!.set(toFeature, evidence);\n\n // Check direct partner (A -> B and B -> A)\n const reverse = this.edges.get(toFeature)?.get(fromFeature);\n if (reverse) {\n return { createsCycle: true, directPartner: reverse, cycleChain: [fromFeature, toFeature, fromFeature] };\n }\n\n // Check transitive cycle\n const cycle = this.findCycleFrom(fromFeature);\n if (cycle && cycle.length > 0) {\n return { createsCycle: true, cycleChain: cycle };\n }\n\n return { createsCycle: false };\n }\n\n public getEdges(): Array<{ from: string; to: string; evidence: FeatureDependencyEvidence }> {\n const list: Array<{ from: string; to: string; evidence: FeatureDependencyEvidence }> = [];\n for (const [from, toMap] of this.edges.entries()) {\n for (const [to, ev] of toMap.entries()) {\n list.push({ from, to, evidence: ev });\n }\n }\n return list;\n }\n\n public findDirectCycles(): CircularDependencyInfo[] {\n const cycles: CircularDependencyInfo[] = [];\n const checkedPairs = new Set<string>();\n\n for (const [from, toMap] of this.edges.entries()) {\n for (const [to, evAtoB] of toMap.entries()) {\n const pairKey = [from, to].sort().join(\"<->\");\n if (checkedPairs.has(pairKey)) continue;\n\n const evBtoA = this.edges.get(to)?.get(from);\n if (evBtoA) {\n checkedPairs.add(pairKey);\n cycles.push({\n featureA: from,\n featureB: to,\n cycle: [from, to, from],\n evidenceAtoB: evAtoB,\n evidenceBtoA: evBtoA,\n });\n }\n }\n }\n\n return cycles;\n }\n\n private findCycleFrom(start: string): string[] | null {\n const visited = new Set<string>();\n const inStack = new Set<string>();\n const parent = new Map<string, string>();\n\n const dfs = (curr: string): string[] | null => {\n visited.add(curr);\n inStack.add(curr);\n\n const neighbors = this.edges.get(curr);\n if (neighbors) {\n for (const next of neighbors.keys()) {\n if (!visited.has(next)) {\n parent.set(next, curr);\n const cycle = dfs(next);\n if (cycle) return cycle;\n } else if (inStack.has(next)) {\n // Cycle detected!\n const cycle: string[] = [next];\n let p = curr;\n while (p !== next) {\n cycle.push(p);\n p = parent.get(p) || next;\n }\n cycle.push(next);\n cycle.reverse();\n return cycle;\n }\n }\n }\n\n inStack.delete(curr);\n return null;\n };\n\n return dfs(start);\n }\n}\n\nexport function discoverAllFeatures(\n projectRoot: string\n): Array<{ name: string; dir: string }> {\n const featuresBase = resolveFeaturesDir(projectRoot);\n if (!fs.existsSync(featuresBase)) return [];\n\n const entries = fs.readdirSync(featuresBase, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory() && !e.name.startsWith(\".\") && e.name !== \"__tests__\" && e.name !== \"tests\")\n .map((e) => ({\n name: e.name,\n dir: path.join(featuresBase, e.name),\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport interface ClassMethodInfo {\n name: string;\n isAsync: boolean;\n isPublic: boolean;\n line: number;\n code: string;\n}\n\nexport function extractClassMethods(content: string, className: string): ClassMethodInfo[] | null {\n // 1. Strip comments preserving newlines\n let clean = \"\";\n let inLineComment = false;\n let inBlockComment = false;\n let inString: string | null = null;\n let escaped = false;\n\n for (let i = 0; i < content.length; i++) {\n const c = content[i]!;\n const next = content[i + 1];\n\n if (inLineComment) {\n if (c === \"\\n\") {\n inLineComment = false;\n clean += \"\\n\";\n } else {\n clean += \" \";\n }\n continue;\n }\n\n if (inBlockComment) {\n if (c === \"*\" && next === \"/\") {\n inBlockComment = false;\n clean += \" \";\n i++;\n } else {\n clean += c === \"\\n\" ? \"\\n\" : \" \";\n }\n continue;\n }\n\n if (inString) {\n clean += c === \"\\n\" ? \"\\n\" : \" \";\n if (escaped) {\n escaped = false;\n } else if (c === \"\\\\\") {\n escaped = true;\n } else if (c === inString) {\n inString = null;\n }\n continue;\n }\n\n if (c === \"/\" && next === \"/\") {\n inLineComment = true;\n clean += \" \";\n i++;\n continue;\n }\n if (c === \"/\" && next === \"*\") {\n inBlockComment = true;\n clean += \" \";\n i++;\n continue;\n }\n if (c === '\"' || c === \"'\" || c === \"`\") {\n inString = c;\n clean += \" \";\n continue;\n }\n\n clean += c;\n }\n\n // 2. Find class declaration\n const classDeclRegex = new RegExp(`(?:export\\\\s+(?:default\\\\s+)?)?class\\\\s+${className}\\\\b[^{]*\\\\{`);\n const match = classDeclRegex.exec(clean);\n if (!match) return null;\n\n const classBodyStart = match.index + match[0].length - 1; // index of \"{\"\n\n // 3. Scan members inside class body\n const methods: ClassMethodInfo[] = [];\n let depth = 1;\n let parenDepth = 0;\n let atMemberStart = true;\n\n // Regex matching start of method declaration (including optional decorators):\n // [decorators] [public|private|protected|static] [async] [get|set] methodName<T>(\n const methodRegex = /^\\s*(?:@[a-zA-Z0-9_$]+(?:\\([^)]*\\))?\\s+)*(?:(public|private|protected|static)\\s+)*(?:(async)\\s+)?(?:(get|set)\\s+)?(#?[a-zA-Z0-9_$]+)\\s*(?:<[^>]+>)?\\s*\\(/;\n\n // Regex matching arrow function property:\n // [public|private|protected|static] propName = (async )?(\n const arrowRegex = /^\\s*(?:(public|private|protected|static)\\s+)?(#?[a-zA-Z0-9_$]+)\\s*=\\s*(?:async\\s*)?\\(/;\n\n for (let i = classBodyStart + 1; i < clean.length && depth > 0; i++) {\n const c = clean[i]!;\n\n if (c === \"{\") {\n depth++;\n atMemberStart = false;\n continue;\n }\n if (c === \"}\") {\n depth--;\n if (depth === 1) {\n atMemberStart = true;\n }\n continue;\n }\n\n if (depth === 1) {\n if (c === \";\") {\n atMemberStart = true;\n parenDepth = 0;\n continue;\n }\n\n if (c === \"(\") {\n parenDepth++;\n } else if (c === \")\") {\n parenDepth = Math.max(0, parenDepth - 1);\n }\n\n if (atMemberStart && parenDepth === 0) {\n // Skip whitespace\n if (/\\s/.test(c)) continue;\n\n const slice = clean.slice(i);\n\n // Check if slice starts with method\n const methodMatch = slice.match(methodRegex);\n if (methodMatch) {\n const fullMatch = methodMatch[0];\n const beforeParen = fullMatch.slice(0, fullMatch.lastIndexOf(\"(\")).trim();\n const tokens = beforeParen.split(/\\s+/).filter(Boolean);\n const rawName = tokens[tokens.length - 1] || \"\";\n const methodName = rawName.replace(/<.*$/, \"\");\n\n const controlKeywords = [\"if\", \"for\", \"while\", \"switch\", \"catch\", \"with\"];\n if (!controlKeywords.includes(methodName)) {\n const isPrivate = tokens.includes(\"private\") || tokens.includes(\"protected\") || methodName.startsWith(\"#\");\n const isAsync = tokens.includes(\"async\");\n const isPublic = !isPrivate;\n const lineNum = content.slice(0, i).split(\"\\n\").length;\n const lineCode = content.split(\"\\n\")[lineNum - 1]?.trim() || \"\";\n\n methods.push({\n name: methodName,\n isAsync,\n isPublic,\n line: lineNum,\n code: lineCode,\n });\n\n i += fullMatch.length - 1;\n parenDepth = 1;\n atMemberStart = false;\n continue;\n }\n }\n\n // Check arrow function\n const arrowMatch = slice.match(arrowRegex);\n if (arrowMatch) {\n const fullMatch = arrowMatch[0];\n const beforeEquals = fullMatch.split(\"=\")[0]!.trim();\n const tokens = beforeEquals.split(/\\s+/).filter(Boolean);\n const rawName = tokens[tokens.length - 1] || \"\";\n const isPrivate = tokens.includes(\"private\") || tokens.includes(\"protected\") || rawName.startsWith(\"#\");\n const isAsync = fullMatch.includes(\"async\");\n const isPublic = !isPrivate;\n const lineNum = content.slice(0, i).split(\"\\n\").length;\n const lineCode = content.split(\"\\n\")[lineNum - 1]?.trim() || \"\";\n\n methods.push({\n name: rawName,\n isAsync,\n isPublic,\n line: lineNum,\n code: lineCode,\n });\n\n i += fullMatch.length - 1;\n parenDepth = 1;\n atMemberStart = false;\n continue;\n }\n\n atMemberStart = false;\n }\n }\n }\n\n return methods;\n}\n\nexport function checkUseCaseShape(\n featureName: string,\n filePath: string,\n relativePath: string,\n content: string,\n addViolation: (v: Violation) => void\n): void {\n const fileName = path.basename(filePath);\n const lines = content.split(/\\r?\\n/);\n\n // 1. Must define and export a class\n const classMatch = content.match(/(?:export\\s+(?:default\\s+)?)?class\\s+([A-Za-z0-9_]+)/);\n if (!classMatch) {\n addViolation({\n feature: featureName,\n layer: \"useCases\",\n file: filePath,\n relativePath,\n line: 1,\n category: \"Use Case Shape Violation\",\n code: lines[0]?.trim() || \"\",\n ruleId: \"U_SHAPE_CLASS\",\n severity: \"error\",\n advice: `Use case file '${fileName}' must define and export a class.`,\n fixExample: {\n bad: \"// Missing class definition\",\n good: `export class ${fileName.replace(/\\.(ts|js)$/, \"\")} { ... }`,\n },\n });\n return;\n }\n\n const className = classMatch[1]!;\n let classLine = 1;\n for (let i = 0; i < lines.length; i++) {\n if (new RegExp(`(?:export\\\\s+(?:default\\\\s+)?)?class\\\\s+${className}\\\\b`).test(lines[i]!)) {\n classLine = i + 1;\n break;\n }\n }\n\n // 2. Must be decorated with @MakeInjectable\n if (!/@MakeInjectable\\b/.test(content)) {\n addViolation({\n feature: featureName,\n layer: \"useCases\",\n file: filePath,\n relativePath,\n line: classLine,\n category: \"Use Case Shape Violation\",\n code: lines[classLine - 1]?.trim() || `class ${className}`,\n ruleId: \"U_SHAPE_DECORATOR\",\n severity: \"error\",\n advice: `Use case class '${className}' in '${fileName}' must be decorated with @MakeInjectable.`,\n fixExample: {\n bad: lines[classLine - 1]?.trim() || `class ${className}`,\n good: `@MakeInjectable\\nexport class ${className} { ... }`,\n },\n });\n }\n\n // 3. Must implement an async execute method\n const hasAsyncExecute = /(?:public\\s+)?async\\s+execute\\s*(?:<[^>]+>)?\\s*\\(/.test(content);\n if (!hasAsyncExecute) {\n const hasSyncExecute = /(?:public\\s+)?execute\\s*(?:<[^>]+>)?\\s*\\(/.test(content);\n addViolation({\n feature: featureName,\n layer: \"useCases\",\n file: filePath,\n relativePath,\n line: classLine,\n category: \"Use Case Shape Violation\",\n code: lines[classLine - 1]?.trim() || `class ${className}`,\n ruleId: \"U_SHAPE_EXECUTE\",\n severity: \"error\",\n advice: hasSyncExecute\n ? `Use case class '${className}' in '${fileName}' must have an 'async execute' method (found synchronous 'execute').`\n : `Use case class '${className}' in '${fileName}' must implement an 'async execute(...)' method.`,\n fixExample: {\n bad: hasSyncExecute ? \"execute(props: ...) { ... }\" : `class ${className} { ... }`,\n good: \"async execute(props: ...): Promise<...> { ... }\",\n },\n });\n }\n\n // 4. Must have no other public methods (only constructor and async execute)\n const classMethods = extractClassMethods(content, className);\n if (classMethods) {\n const extraPublicMethods = classMethods.filter(\n (m) => m.isPublic && m.name !== \"constructor\" && m.name !== \"execute\"\n );\n for (const m of extraPublicMethods) {\n addViolation({\n feature: featureName,\n layer: \"useCases\",\n file: filePath,\n relativePath,\n line: m.line,\n category: \"Use Case Shape Violation\",\n code: m.code || `public ${m.name}(...)`,\n ruleId: \"U_SHAPE_ONLY_EXECUTE\",\n severity: \"error\",\n advice: `Use case class '${className}' in '${fileName}' has disallowed public method '${m.name}'. The only allowed public methods are constructor and async execute. Extract extra methods into their own use cases, or make them private.`,\n fixExample: {\n bad: m.code || `${m.name}(...) { ... }`,\n good: `// Extract '${m.name}' into its own dedicated Use Case, or make it private if it is internal helper logic:\\nprivate ${m.name}(...) { ... }`,\n },\n });\n }\n }\n}\n\nexport function checkServiceShape(\n featureName: string,\n filePath: string,\n relativePath: string,\n content: string,\n addViolation: (v: Violation) => void\n): void {\n const fileName = path.basename(filePath);\n const lines = content.split(/\\r?\\n/);\n\n // 1. Must define and export a class\n const classMatch = content.match(/(?:export\\s+(?:default\\s+)?)?class\\s+([A-Za-z0-9_]+)/);\n if (!classMatch) {\n addViolation({\n feature: featureName,\n layer: \"services\",\n file: filePath,\n relativePath,\n line: 1,\n category: \"Service Shape Violation\",\n code: lines[0]?.trim() || \"\",\n ruleId: \"S_SHAPE_CLASS\",\n severity: \"error\",\n advice: `Service file '${fileName}' must define and export a class.`,\n fixExample: {\n bad: \"// Missing class definition\",\n good: `export class ${fileName.replace(/\\.(ts|js)$/, \"\")} { ... }`,\n },\n });\n return;\n }\n\n const className = classMatch[1]!;\n let classLine = 1;\n for (let i = 0; i < lines.length; i++) {\n if (new RegExp(`(?:export\\\\s+(?:default\\\\s+)?)?class\\\\s+${className}\\\\b`).test(lines[i]!)) {\n classLine = i + 1;\n break;\n }\n }\n\n // 2. Must be decorated with @MakeInjectable\n if (!/@MakeInjectable\\b/.test(content)) {\n addViolation({\n feature: featureName,\n layer: \"services\",\n file: filePath,\n relativePath,\n line: classLine,\n category: \"Service Shape Violation\",\n code: lines[classLine - 1]?.trim() || `class ${className}`,\n ruleId: \"S_SHAPE_DECORATOR\",\n severity: \"error\",\n advice: `Service class '${className}' in '${fileName}' must be decorated with @MakeInjectable.`,\n fixExample: {\n bad: lines[classLine - 1]?.trim() || `class ${className}`,\n good: `@MakeInjectable\\nexport class ${className} { ... }`,\n },\n });\n }\n\n // 3. Must implement an async execute method\n const hasAsyncExecute = /(?:public\\s+)?async\\s+execute\\s*(?:<[^>]+>)?\\s*\\(/.test(content);\n if (!hasAsyncExecute) {\n const hasSyncExecute = /(?:public\\s+)?execute\\s*(?:<[^>]+>)?\\s*\\(/.test(content);\n addViolation({\n feature: featureName,\n layer: \"services\",\n file: filePath,\n relativePath,\n line: classLine,\n category: \"Service Shape Violation\",\n code: lines[classLine - 1]?.trim() || `class ${className}`,\n ruleId: \"S_SHAPE_EXECUTE\",\n severity: \"error\",\n advice: hasSyncExecute\n ? `Service class '${className}' in '${fileName}' must have an 'async execute' method (found synchronous 'execute').`\n : `Service class '${className}' in '${fileName}' must implement an 'async execute(...)' method.`,\n fixExample: {\n bad: hasSyncExecute ? \"execute(props: ...) { ... }\" : `class ${className} { ... }`,\n good: \"async execute(props: ...): Promise<...> { ... }\",\n },\n });\n }\n\n // 4. Must have no other public methods (only constructor and async execute)\n const classMethods = extractClassMethods(content, className);\n if (classMethods) {\n const extraPublicMethods = classMethods.filter(\n (m) => m.isPublic && m.name !== \"constructor\" && m.name !== \"execute\"\n );\n for (const m of extraPublicMethods) {\n addViolation({\n feature: featureName,\n layer: \"services\",\n file: filePath,\n relativePath,\n line: m.line,\n category: \"Service Shape Violation\",\n code: m.code || `public ${m.name}(...)`,\n ruleId: \"S_SHAPE_ONLY_EXECUTE\",\n severity: \"error\",\n advice: `Service class '${className}' in '${fileName}' has disallowed public method '${m.name}'. The only allowed public methods are constructor and async execute. If a service has multiple public methods, those should be on their own services instead of being cramped in a single service.`,\n fixExample: {\n bad: m.code || `${m.name}(...) { ... }`,\n good: `// Extract '${m.name}' into its own dedicated Service, or make it private if it is internal helper logic:\\nprivate ${m.name}(...) { ... }`,\n },\n });\n }\n }\n}\n\nexport function lintCodebase(options: LintOptions = {}): LintSummary {\n const startTime = Date.now();\n const projectRoot = options.projectRoot || findProjectRoot(options.targetDir || process.cwd());\n const failFast = !options.complete;\n\n const features = discoverAllFeatures(projectRoot);\n const graph = new FeatureDependencyGraph();\n\n const allViolations: Violation[] = [];\n const results: FeatureAuditResult[] = [];\n const detectedCycles: CircularDependencyInfo[] = [];\n\n const addViolation = (v: Violation) => {\n allViolations.push(v);\n const featureResult = results.find((r) => r.featureName === v.feature);\n if (featureResult) {\n featureResult.violations.push(v);\n featureResult.passed = false;\n }\n if (failFast) {\n const errorMsg =\n `Dependency rule violation detected in ${v.relativePath}:${v.line}:\\n` +\n `[${v.category}] ${v.advice}\\n` +\n `Code: ${v.code}`;\n throw new DependencyRuleError(errorMsg, [v], true);\n }\n };\n\n // Initialize result holders\n for (const feat of features) {\n results.push({\n featureName: feat.name,\n featureDir: feat.dir,\n scannedFilesCount: 0,\n passed: true,\n violations: [],\n layersChecked: [\"domain\", \"useCases\", \"services\", \"infrastructure\", \"presentation\"],\n });\n }\n\n // Scan files per feature\n for (const feat of features) {\n const featResult = results.find((r) => r.featureName === feat.name)!;\n const allFiles = scanDirFiles(feat.dir, projectRoot);\n featResult.scannedFilesCount = allFiles.length;\n\n for (const file of allFiles) {\n const relPath = path.relative(projectRoot, file).replace(/\\\\/g, \"/\");\n const { layer } = classifyFile(file, projectRoot);\n if (!layer) continue;\n\n const content = fs.readFileSync(file, \"utf-8\");\n const statements = extractImportStatements(content);\n\n const baseName = path.basename(file);\n const isBarrel = baseName === \"index.ts\" || baseName === \"index.js\";\n\n // Shape rule: Use cases must be a class decorated with @MakeInjectable and have an async execute() method\n if (layer === \"useCases\" && !isBarrel) {\n checkUseCaseShape(feat.name, file, relPath, content, addViolation);\n }\n\n // Shape rule: Services must be a class decorated with @MakeInjectable and have an execute() method\n if (layer === \"services\" && !isBarrel) {\n checkServiceShape(feat.name, file, relPath, content, addViolation);\n }\n\n // Check inline DI in Domain layer\n if (layer === \"domain\") {\n const lines = content.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const lineText = lines[i]!.trim();\n if (lineText.includes(\"@MakeInjectable\") || lineText.includes(\"public static deps =\")) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: i + 1,\n category: \"Domain Dependence Violation\",\n code: lineText,\n ruleId: \"D2_DI_DEPENDENCE\",\n severity: \"error\",\n advice: \"Domain layer must have zero DI dependence. Remove @MakeInjectable decorators and static deps declarations.\",\n fixExample: {\n bad: lineText,\n good: \"// Domain interfaces and value objects must remain plain TypeScript classes/interfaces.\",\n },\n });\n }\n }\n }\n\n // Check import statements\n for (const stmt of statements) {\n const target = classifyTarget(stmt.specifier, file, projectRoot);\n\n // 1. Feature dependency tracking and circular dependency check\n if (target.targetFeature && target.targetFeature !== feat.name) {\n const evidence: FeatureDependencyEvidence = {\n fromFeature: feat.name,\n toFeature: target.targetFeature,\n file,\n relativePath: relPath,\n line: stmt.line,\n code: stmt.rawCode,\n };\n\n const cycleResult = graph.addEdge(evidence);\n if (cycleResult.createsCycle) {\n const partner = cycleResult.directPartner;\n detectedCycles.push({\n featureA: feat.name,\n featureB: target.targetFeature,\n cycle: cycleResult.cycleChain,\n evidenceAtoB: evidence,\n evidenceBtoA: partner || evidence,\n });\n\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Circular Feature Dependency Violation\",\n code: stmt.rawCode,\n ruleId: \"C1_CIRCULAR_FEATURE_DEPENDENCY\",\n severity: \"error\",\n advice: `Circular feature dependency detected between '${feat.name}' and '${target.targetFeature}'. Dependency flow must be strictly one-way: for any two features, only one can know about the other exists. If '${feat.name}' needs to impose a side effect on '${target.targetFeature}' (or vice versa), it must do so via an event, never via a direct dependency.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Emit a Domain/Application Event (e.g. publish '${feat.name}Changed') instead of depending on '${target.targetFeature}'.`,\n },\n });\n }\n }\n\n // 2. Layer-by-layer rule validations\n if (layer === \"domain\") {\n // D1: Domain must not import outer layers\n if (target.targetLayer && [\"useCases\", \"services\", \"infrastructure\", \"presentation\"].includes(target.targetLayer)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Domain Purity Violation\",\n code: stmt.rawCode,\n ruleId: \"D1_OUTER_IMPORT\",\n severity: \"error\",\n advice: `Domain layer must not import from outer layers (${target.targetLayer}). Keep the domain core pure.`,\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Define interfaces, types, or value objects directly within the domain layer.\",\n },\n });\n }\n\n // D2: Domain zero DI dependence\n if (target.isDiFramework) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Domain Dependence Violation\",\n code: stmt.rawCode,\n ruleId: \"D2_DI_DEPENDENCE\",\n severity: \"error\",\n advice: \"Domain layer must have zero DI dependence. Domain interfaces and value objects are plain classes/types.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Remove @solid-stack/di import. Domain entities are pure TypeScript.\",\n },\n });\n }\n\n // D3: Domain shared non-domain import\n if (target.targetSharedModule && !target.isSharedDomain) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Domain Purity Violation\",\n code: stmt.rawCode,\n ruleId: \"D3_SHARED_NON_DOMAIN_IMPORT\",\n severity: \"error\",\n advice: \"Domain layer can only import pure value objects from shared/<module>/domain/*. Ports, infrastructure, and root classes must not be imported.\",\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/domain/...\";`,\n },\n });\n }\n\n // D4: Domain external runtime libraries\n if (target.isExternal && !target.isDiFramework) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Domain Purity Violation\",\n code: stmt.rawCode,\n ruleId: \"D4_EXTERNAL_LIBRARY\",\n severity: \"error\",\n advice: `Domain layer must be pure and must not depend on external runtime libraries ('${stmt.specifier}').`,\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Model pure business interfaces without external libraries.\",\n },\n });\n }\n } else if (layer === \"useCases\") {\n // U1: Intra-feature use case dependency\n if (target.targetLayer === \"useCases\" && target.targetFeature === feat.name) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Intra-Feature Violation\",\n code: stmt.rawCode,\n ruleId: \"U1_INTRA_USE_CASE\",\n severity: \"error\",\n advice: `Use cases cannot depend on other use cases of the same feature ('${feat.name}'). Extract shared business logic to a domain repository or domain service.`,\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Inject a domain interface or domain service instead of another use case.\",\n },\n });\n }\n\n // U2: Cross-feature use case dependency\n if (target.targetLayer === \"useCases\" && target.targetFeature && target.targetFeature !== feat.name) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Cross-Feature Use Case Violation\",\n code: stmt.rawCode,\n ruleId: \"U2_CROSS_FEATURE_USE_CASE\",\n severity: \"error\",\n advice: `Use cases cannot depend directly on use cases of foreign feature '${target.targetFeature}'. Treat features as separate microservices: define an interface in '${feat.name}/domain/' specifying what is needed, and implement it in '${feat.name}/infrastructure/'.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Define an interface in ${feat.name}/domain/ and implement it in ${feat.name}/infrastructure/ using '${target.targetFileName}'.`,\n },\n });\n }\n\n // U3: Direct infrastructure import\n if (target.targetLayer === \"infrastructure\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"U3_DIRECT_INFRASTRUCTURE\",\n severity: \"error\",\n advice: \"Use cases cannot import concrete infrastructure directly. Depend on Domain Ports of the same feature via DI.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Depend on the domain interface port declared in static deps.\",\n },\n });\n }\n\n // U4: Cross-feature domain ports\n if (\n target.targetLayer === \"domain\" &&\n target.targetFeature &&\n target.targetFeature !== feat.name &&\n target.isTargetPort\n ) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Cross-Feature Port Violation\",\n code: stmt.rawCode,\n ruleId: \"U4_CROSS_FEATURE_PORT\",\n severity: \"error\",\n advice: `Use cases cannot depend on domain interfaces/ports of foreign feature '${target.targetFeature}'. Define an interface in '${feat.name}/domain/' (consumer-driven port) and implement it in '${feat.name}/infrastructure/'.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Define a local interface in ${feat.name}/domain/ and implement it in ${feat.name}/infrastructure/.`,\n },\n });\n }\n\n // U5: Cross-feature services\n if (target.targetLayer === \"services\" && target.targetFeature && target.targetFeature !== feat.name) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"U5_CROSS_FEATURE_SERVICE\",\n severity: \"error\",\n advice: `Use cases cannot depend on services of foreign feature '${target.targetFeature}'.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Define an interface in ${feat.name}/domain/ and implement it in ${feat.name}/infrastructure/.`,\n },\n });\n }\n\n // U6: Shared non-root class import\n if (target.targetSharedModule && (target.isSharedPorts || target.isSharedInfra)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Shared Module Root Class Violation\",\n code: stmt.rawCode,\n ruleId: \"U6_SHARED_NON_ROOT\",\n severity: \"error\",\n advice: `Use cases can only depend on root classes of shared modules. Never import from shared ports or infrastructure directly.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/<RootClass>.js\";`,\n },\n });\n }\n } else if (layer === \"services\") {\n // S1: Use cases dependency\n if (target.targetLayer === \"useCases\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Service Intra-Feature Violation\",\n code: stmt.rawCode,\n ruleId: \"S1_USE_CASE_DEPENDENCY\",\n severity: \"error\",\n advice: \"Services cannot depend on use cases of any feature.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Inject domain repository ports directly instead of use cases.\",\n },\n });\n }\n\n // S2: Cross-feature domain ports\n if (\n target.targetLayer === \"domain\" &&\n target.targetFeature &&\n target.targetFeature !== feat.name &&\n target.isTargetPort\n ) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Service Cross-Feature Port Violation\",\n code: stmt.rawCode,\n ruleId: \"S2_CROSS_FEATURE_PORT\",\n severity: \"error\",\n advice: `Services cannot depend on domain ports of foreign feature '${target.targetFeature}'.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Define an interface in ${feat.name}/domain/ and implement it in ${feat.name}/infrastructure/.`,\n },\n });\n }\n\n // S3: Direct infrastructure\n if (target.targetLayer === \"infrastructure\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Service Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"S3_DIRECT_INFRASTRUCTURE\",\n severity: \"error\",\n advice: \"Services cannot import concrete infrastructure directly. Depend on Domain Ports via DI.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Depend on the domain interface port declared in static deps.\",\n },\n });\n }\n\n // S4: Shared non-root\n if (target.targetSharedModule && (target.isSharedPorts || target.isSharedInfra)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Shared Module Root Class Violation\",\n code: stmt.rawCode,\n ruleId: \"S4_SHARED_NON_ROOT\",\n severity: \"error\",\n advice: \"Services can only depend on root classes of shared modules. Never import from shared ports or infrastructure directly.\",\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/<RootClass>.js\";`,\n },\n });\n }\n } else if (layer === \"infrastructure\") {\n // I1: Intra-feature use case\n if (target.targetLayer === \"useCases\" && target.targetFeature === feat.name) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Adapter Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"I1_INTRA_USE_CASE\",\n severity: \"error\",\n advice: `Infrastructure adapters cannot depend on use cases of the same feature ('${feat.name}'). Adapters implement domain ports.`,\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Adapters implement domain ports and should not invoke local application use cases.\",\n },\n });\n }\n\n // I2: Shared non-root\n if (target.targetSharedModule && (target.isSharedPorts || target.isSharedInfra)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Shared Module Root Class Violation\",\n code: stmt.rawCode,\n ruleId: \"I2_SHARED_NON_ROOT\",\n severity: \"error\",\n advice: \"Infrastructure adapters can only depend on root classes of shared modules. Never import from shared ports or infrastructure directly.\",\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/<RootClass>.js\";`,\n },\n });\n }\n } else if (layer === \"presentation\") {\n // P1: Direct infrastructure\n if (target.targetLayer === \"infrastructure\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Presentation Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"P1_DIRECT_INFRASTRUCTURE\",\n severity: \"error\",\n advice: \"Presentation handlers must not import infrastructure directly. Inject Use Cases via DI.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Inject the corresponding Use Case via static deps and invoke its execute() method.\",\n },\n });\n }\n\n // P2: Direct domain repositories/ports\n if (target.targetLayer === \"domain\" && (target.isTargetRepo || target.isTargetPort)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Presentation Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"P2_DIRECT_REPOSITORY\",\n severity: \"error\",\n advice: \"Presentation handlers must not depend on domain repositories or ports directly. Inject Use Cases via DI.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Presentation layer must only orchestrate Use Cases.\",\n },\n });\n }\n\n // P3: Shared non-root\n if (target.targetSharedModule && (target.isSharedPorts || target.isSharedInfra)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Shared Module Root Class Violation\",\n code: stmt.rawCode,\n ruleId: \"P3_SHARED_NON_ROOT\",\n severity: \"error\",\n advice: \"Presentation handlers can only depend on root classes of shared modules. Never import from shared ports or infrastructure directly.\",\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/<RootClass>.js\";`,\n },\n });\n }\n\n // P4: Direct services dependency\n if (target.targetLayer === \"services\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Presentation Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"P4_DIRECT_SERVICE\",\n severity: \"error\",\n advice:\n \"Presentation handlers must not depend on services directly. They must use use cases, and use cases will then depend on the service.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Inject a Use Case via static deps instead of a Service.\",\n },\n });\n }\n }\n }\n }\n }\n\n // After complete scan, verify any additional direct cycles not already flagged\n const directCycles = graph.findDirectCycles();\n for (const c of directCycles) {\n const existing = detectedCycles.find(\n (dc) =>\n (dc.featureA === c.featureA && dc.featureB === c.featureB) ||\n (dc.featureA === c.featureB && dc.featureB === c.featureA)\n );\n if (!existing) {\n detectedCycles.push(c);\n addViolation({\n feature: c.featureA,\n file: c.evidenceAtoB.file,\n relativePath: c.evidenceAtoB.relativePath,\n line: c.evidenceAtoB.line,\n category: \"Circular Feature Dependency Violation\",\n code: c.evidenceAtoB.code,\n ruleId: \"C1_CIRCULAR_FEATURE_DEPENDENCY\",\n severity: \"error\",\n advice: `Circular feature dependency detected between '${c.featureA}' and '${c.featureB}'. Dependency flow must be strictly one-way: for any two features, only one can know about the other exists. If the unaware feature needs to impose a side effect on the other, it must do so via an event, never via a direct dependency.`,\n });\n }\n }\n\n const durationMs = Date.now() - startTime;\n const cleanFeatures = results.filter((r) => r.passed).length;\n const violatedFeatures = results.filter((r) => !r.passed).length;\n\n const summary: LintSummary = {\n totalFeatures: results.length,\n cleanFeatures,\n violatedFeatures,\n totalViolations: allViolations.length,\n durationMs,\n results,\n allViolations,\n circularDependencies: detectedCycles,\n };\n\n if (allViolations.length > 0 && options.throwOnError !== false) {\n const errorHeader = `Dependency rule audit failed with ${allViolations.length} violation(s) across ${violatedFeatures} feature(s):`;\n const compiledDetails = allViolations\n .map(\n (v, i) =>\n `${i + 1}. [${v.category}] ${v.relativePath}:${v.line}\\n` +\n ` Rule: ${v.ruleId}\\n` +\n ` Code: ${v.code}\\n` +\n ` Advice: ${v.advice}`\n )\n .join(\"\\n\\n\");\n\n throw new DependencyRuleError(`${errorHeader}\\n\\n${compiledDetails}\\n`, allViolations, false);\n }\n\n return summary;\n}\n","import pc from \"picocolors\";\nimport type { LintOptions, LintSummary, Violation } from \"../types/lint.js\";\nimport { DependencyRuleError, lintCodebase } from \"../core/lintEngine.js\";\n\nexport function formatViolation(v: Violation): string {\n const lines: string[] = [];\n\n // Clickable file location with line number\n lines.push(pc.underline(pc.cyan(v.relativePath)) + pc.dim(\":\") + pc.yellow(String(v.line)));\n\n // Code line with gutter\n const gutter = `${String(v.line).padStart(4, \" \")} | `;\n lines.push(pc.dim(gutter) + v.code);\n\n // Category and advice\n const categoryShort = v.category.replace(\" Violation\", \"\");\n lines.push(\n \" \" + pc.red(pc.bold(\"✖\")) + \" \" + pc.red(`[${categoryShort}]`) + \" \" + v.advice\n );\n\n // Actionable fix hint\n if (v.fixExample?.good) {\n lines.push(\" \" + pc.dim(\"→\") + \" \" + pc.dim(v.fixExample.good));\n }\n\n return lines.join(\"\\n\");\n}\n\nexport async function handleLint(flags: Record<string, any> = {}): Promise<LintSummary> {\n const complete = Boolean(flags.complete);\n const quiet = Boolean(flags.quiet);\n\n const options: LintOptions = {\n complete,\n quiet,\n targetDir: flags.targetDir || flags.target,\n projectRoot: flags.projectRoot,\n fixHint: flags.fixHint !== false,\n throwOnError: false,\n };\n\n try {\n const summary = lintCodebase(options);\n\n if (summary.totalViolations > 0) {\n if (!quiet) {\n console.log(\"\");\n for (const v of summary.allViolations) {\n console.log(formatViolation(v));\n console.log(\"\");\n }\n console.log(\n pc.red(\n `✖ Dependency rules check failed with ${summary.totalViolations} error${\n summary.totalViolations > 1 ? \"s\" : \"\"\n } across ${summary.violatedFeatures} feature${\n summary.violatedFeatures > 1 ? \"s\" : \"\"\n } (${summary.totalFeatures} features scanned).`\n )\n );\n console.log(\"\");\n }\n\n const errorHeader = `Dependency rule audit failed with ${summary.totalViolations} violation(s) across ${summary.violatedFeatures} feature(s):`;\n const compiledDetails = summary.allViolations\n .map(\n (v, i) =>\n `${i + 1}. [${v.category}] ${v.relativePath}:${v.line}\\n` +\n ` Code: ${v.code}\\n` +\n ` Advice: ${v.advice}`\n )\n .join(\"\\n\\n\");\n\n throw new DependencyRuleError(`${errorHeader}\\n\\n${compiledDetails}\\n`, summary.allViolations, false);\n }\n\n if (!quiet) {\n console.log(\n pc.green(\n `✔ Dependency rules verified across ${summary.totalFeatures} feature${\n summary.totalFeatures === 1 ? \"\" : \"s\"\n }.`\n )\n );\n }\n\n return summary;\n } catch (err) {\n if (err instanceof DependencyRuleError && err.isFailFast) {\n if (!quiet) {\n console.log(\"\");\n const v = err.violations[0];\n if (v) {\n console.log(formatViolation(v));\n console.log(\"\");\n }\n console.log(pc.red(`✖ Dependency rules check failed (1 error).`));\n console.log(\"\");\n }\n }\n throw err;\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 { handleLint } from \"./commands/lint.js\";\nimport { DependencyRuleError } from \"./core/lintEngine.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 .option(\"--point-to <mapping>\", \"Point a dependency to an existing local module (e.g. --point-to time:mytime)\")\n .option(\"--alias <mapping>\", \"Import a dependency fresh under an alias name (e.g. --alias time:time-mason)\")\n .option(\"--tests\", \"Include test files (use --no-tests to exclude)\")\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 value: \"lint\",\n label: \"Lint dependency rules\",\n hint: \"Scan codebase and verify Clean Architecture dependency rules\",\n },\n ],\n })\n );\n\n if (choice === \"create\") {\n await handleCreate(undefined, undefined, flags);\n } else if (choice === \"import\") {\n await handleImport(undefined, undefined, flags);\n } else if (choice === \"lint\") {\n await handleLint(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 .option(\"--point-to <mapping>\", \"Point a dependency to an existing local module (e.g. --point-to time:mytime)\")\n .option(\"--alias <mapping>\", \"Import a dependency fresh under an alias name (e.g. --alias time:time-mason)\")\n .option(\"--tests\", \"Include test files (use --no-tests to exclude)\")\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 // 3. The LINT Namespace\n cli\n .command(\n \"lint [target]\",\n \"Scan codebase and verify Clean Architecture dependency rules\"\n )\n .option(\n \"-c, --complete\",\n \"Scan entire codebase without failing fast, compiling all errors at the end\"\n )\n .option(\"-q, --quiet\", \"Suppress non-error output\")\n .example(\"mason lint\")\n .example(\"mason lint --complete\")\n .example(\"mason lint ./src\")\n .action(async (target?: string, flags: Record<string, any> = {}) => {\n try {\n await handleLint({\n ...flags,\n targetDir: target || flags.target || flags.dest,\n });\n } catch (err) {\n if (err instanceof DependencyRuleError) {\n if (process.env.VITEST) {\n throw err;\n }\n process.exit(1);\n }\n handleCliError(err);\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.19\");\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 if (process.env.VITEST) {\n throw err;\n }\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/formatting.ts","../src/utils/fileOperations.ts","../src/utils/config.ts","../src/utils/project.ts","../src/utils/prompts.ts","../src/utils/registry.ts","../src/utils/integrity.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/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/env.ts","../src/commands/envExamples.ts","../src/commands/menu.ts","../src/commands/create.ts","../src/commands/import.ts","../src/core/lintEngine.ts","../src/commands/lint.ts","../src/commands/init.ts","../src/cli.ts"],"names":["path","fs","p","pc","p2","fileURLToPath","p3","execSync","createHash","Handlebars","p4","s","p5","p6","p7","p8","p9","p10","p11","generateInterface","p12","p13","p14","p15","p16","aliasMap","programmaticAlias","isTestFile","p17","cac","p18","choice"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\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\";\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","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/ or src/features/ or src/shared/)\n if (\n fs.existsSync(path.join(projectRoot, \"index.json\")) &&\n (fs.existsSync(path.join(projectRoot, \"features\")) ||\n fs.existsSync(path.join(projectRoot, \"shared\")) ||\n fs.existsSync(path.join(projectRoot, \"src/features\")) ||\n fs.existsSync(path.join(projectRoot, \"src/shared\")))\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 if (fs.existsSync(path.join(projectRoot, \"src/features\"))) {\n return path.join(projectRoot, \"src/features\");\n }\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 if (fs.existsSync(path.join(projectRoot, \"src/shared\"))) {\n return path.join(projectRoot, \"src/shared\");\n }\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 * 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 { 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 let res = await fetch(url, { headers });\n if (!res.ok && res.status === 404 && !cleanRelPath.startsWith(\"src/\")) {\n const srcUrl = `${registryBase.replace(/\\/+$/, \"\")}/src/${cleanRelPath}`;\n const srcRes = await fetch(srcUrl, { headers });\n if (srcRes.ok) {\n res = srcRes;\n }\n }\n\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 let filePath = path.resolve(baseDir, cleanRelPath);\n if (!fs.existsSync(filePath)) {\n const inSrcPath = path.resolve(baseDir, \"src\", cleanRelPath);\n if (fs.existsSync(inSrcPath)) {\n filePath = inSrcPath;\n } else {\n throw new Error(`Registry file not found at ${filePath}`);\n }\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.endsWith(\".test.js\") ||\n entry.name.endsWith(\".spec.js\") ||\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 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 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 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\";\nimport { writeFileSafely, printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot } from \"../utils/project.js\";\n\nexport async function runEnvCommand(flags: Record<string, any> = {}): Promise<GeneratedFile[]> {\n const projectRoot = flags.cwd || flags.targetDir || findProjectRoot();\n\n const s = p.spinner();\n s.start(\"Scanning for .example environment files...\");\n\n // Find all files in the root starting with .env and ending with .example\n const files = fs.readdirSync(projectRoot);\n const exampleFiles = files\n .filter((file) => file.startsWith(\".env\") && file.endsWith(\".example\"))\n .sort();\n\n if (exampleFiles.length === 0) {\n s.stop(\"No .example files found.\");\n p.log.info(pc.yellow(`No files matching '.env*.example' were found in ${projectRoot}`));\n return [];\n }\n\n s.message(`Found ${exampleFiles.length} template(s). Generating...`);\n\n const generatedFiles: GeneratedFile[] = [];\n\n for (const exampleFile of exampleFiles) {\n const sourcePath = path.join(projectRoot, exampleFile);\n const targetFile = exampleFile.replace(/\\.example$/, \"\"); // e.g., .env.dev.example -> .env.dev\n const targetPath = path.join(projectRoot, targetFile);\n\n const content = fs.readFileSync(sourcePath, \"utf-8\");\n\n const genFile = writeFileSafely(targetPath, content, {\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n });\n\n generatedFiles.push(genFile);\n }\n\n s.stop(\"Environment files processed!\");\n\n printGeneratedFiles(generatedFiles, Boolean(flags.dryRun));\n p.outro(pc.green(\"✓ Local environment files are ready!\"));\n\n return generatedFiles;\n}\n","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\";\nimport { writeFileSafely, printGeneratedFiles } from \"../utils/fileOperations.js\";\nimport { findProjectRoot } from \"../utils/project.js\";\n\nexport async function runEnvExamplesCommand(flags: Record<string, any> = {}): Promise<GeneratedFile[]> {\n const projectRoot = flags.cwd || flags.targetDir || findProjectRoot();\n\n const s = p.spinner();\n s.start(\"Scanning for local environment files...\");\n\n // Find all local .env files (ignore .example files and directories)\n const files = fs.readdirSync(projectRoot, { withFileTypes: true });\n const envFiles = files\n .filter((dirent) => dirent.isFile() && dirent.name.startsWith(\".env\") && !dirent.name.endsWith(\".example\"))\n .map((dirent) => dirent.name)\n .sort();\n\n if (envFiles.length === 0) {\n s.stop(\"No local .env files found.\");\n p.log.info(pc.yellow(`No files matching '.env*' were found in ${projectRoot}`));\n return [];\n }\n\n s.message(`Found ${envFiles.length} local .env file(s). Generating templates...`);\n\n const generatedFiles: GeneratedFile[] = [];\n\n for (const envFile of envFiles) {\n const sourcePath = path.join(projectRoot, envFile);\n const targetFile = `${envFile}.example`; // e.g., .env.dev -> .env.dev.example\n const targetPath = path.join(projectRoot, targetFile);\n\n const content = fs.readFileSync(sourcePath, \"utf-8\");\n\n // Redact values: Preserve comments, empty lines, and keys, but strip the value after '='\n const redactedContent = content\n .split(/\\r?\\n/)\n .map((line) => {\n const trimmed = line.trim();\n // Ignore comments and completely empty lines\n if (trimmed.startsWith(\"#\") || !trimmed) return line;\n\n const eqIndex = line.indexOf(\"=\");\n if (eqIndex !== -1) {\n // Slice up to and including the '=' sign (e.g., \"DATABASE_URL=\")\n return line.substring(0, eqIndex + 1);\n }\n return line;\n })\n .join(\"\\n\");\n\n const genFile = writeFileSafely(targetPath, redactedContent, {\n projectRoot,\n dryRun: Boolean(flags.dryRun),\n overwrite: Boolean(flags.overwrite),\n });\n\n generatedFiles.push(genFile);\n }\n\n s.stop(\"Environment example templates generated!\");\n\n printGeneratedFiles(generatedFiles, Boolean(flags.dryRun));\n p.outro(pc.green(\"✓ .env*.example files are up to date and safely redacted!\"));\n\n return generatedFiles;\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\";\nimport { runEnvCommand } from \"./env.js\";\nimport { runEnvExamplesCommand } from \"./envExamples.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 value: \"env\",\n label: \"Generate Env Files\",\n hint: \"Clone .env*.example files to local .env equivalents (Setup)\",\n },\n {\n value: \"envExamples\",\n label: \"Sync Env Examples\",\n hint: \"Safely clone and redact local .env files to .example templates (Sync)\",\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 case \"env\":\n await runEnvCommand(flags);\n break;\n case \"envExamples\":\n await runEnvExamplesCommand({ ...flags, overwrite: flags.overwrite ?? true });\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 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 { getConfiguredFeaturesDir, getConfiguredSharedDir, getEffectiveMode } from \"../utils/config.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> | string | string[];\n pointTo?: Record<string, string> | string | string[];\n useExisting?: Record<string, string> | string | string[];\n tests?: boolean;\n [key: string]: any;\n}\n\nexport const importPrompts = {\n select: p.select,\n text: p.text,\n confirm: p.confirm,\n};\n\n/**\n * Checks whether a given relative file path is a test file.\n */\nexport function isTestFile(filePath: string): boolean {\n const normalized = filePath.replace(/\\\\/g, \"/\");\n const parts = normalized.split(\"/\");\n const fileName = parts[parts.length - 1] || \"\";\n return (\n fileName.endsWith(\".test.ts\") ||\n fileName.endsWith(\".test.js\") ||\n fileName.endsWith(\".spec.ts\") ||\n fileName.endsWith(\".spec.js\") ||\n parts.includes(\"__tests__\")\n );\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 mode = getEffectiveMode(projectRoot);\n if (mode === \"registry\") {\n return modType === \"shared\"\n ? getConfiguredSharedDir(projectRoot)\n : getConfiguredFeaturesDir(projectRoot);\n }\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 configured dirs, 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 configuredDir = modType === \"shared\"\n ? getConfiguredSharedDir(projectRoot)\n : getConfiguredFeaturesDir(projectRoot);\n const inConfigured = path.join(configuredDir, modName);\n if (fs.existsSync(inConfigured)) return inConfigured;\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 * List all available local module names for a given type (checking configured dir, src/<folder>, and <folder>)\n */\nexport function getAvailableLocalModules(\n projectRoot: string,\n modType: \"shared\" | \"feature\"\n): string[] {\n const folder = modType === \"shared\" ? \"shared\" : \"features\";\n const configuredDir = modType === \"shared\"\n ? getConfiguredSharedDir(projectRoot)\n : getConfiguredFeaturesDir(projectRoot);\n const dirs = [\n configuredDir,\n path.join(projectRoot, \"src\", folder),\n path.join(projectRoot, folder),\n ];\n const set = new Set<string>();\n for (const dir of dirs) {\n if (fs.existsSync(dir)) {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const e of entries) {\n if (e.isDirectory() && !e.name.startsWith(\".\")) {\n set.add(e.name);\n }\n }\n } catch {}\n }\n }\n return Array.from(set).sort();\n}\n\n/**\n * Helper to parse mapping flags like { time: \"mytime\" } or \"time:mytime\" or [\"time:mytime\"]\n */\nexport function parseMappingFlags(raw: any): Record<string, string> {\n if (!raw) return {};\n if (typeof raw === \"object\" && !Array.isArray(raw)) return raw;\n const result: Record<string, string> = {};\n const entries = Array.isArray(raw) ? raw : [raw];\n for (const entry of entries) {\n if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx !== -1) {\n let key = entry.slice(0, idx).trim();\n let val = entry.slice(idx + 1).trim();\n val = val\n .replace(/^@\\/(shared|features)\\//, \"\")\n .replace(/^(src\\/)?(shared|features)\\//, \"\")\n .replace(/^\\/+|\\/+$/g, \"\")\n .trim();\n if (key && val) {\n result[key] = val;\n }\n }\n }\n }\n return result;\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 aliasMap = parseMappingFlags(flags.alias);\n const programmaticAlias =\n aliasMap[registryName] || aliasMap[`${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 aliasMap = parseMappingFlags(flags.alias);\n const pointToMap = {\n ...parseMappingFlags(flags.pointTo),\n ...parseMappingFlags(flags[\"point-to\"]),\n ...parseMappingFlags(flags.useExisting),\n ...parseMappingFlags(flags[\"use-existing\"]),\n };\n\n const programmaticPointTo =\n pointToMap[registryName] || pointToMap[`${modType}/${registryName}`];\n\n if (programmaticPointTo) {\n if (!checkModuleExists(projectRoot, modType, programmaticPointTo)) {\n p.log.error(\n pc.red(\n `Module '${programmaticPointTo}' specified in --point-to does not exist in ${folder}.`\n )\n );\n process.exit(1);\n }\n globalAliasMap.set(`@/${folder}/${registryName}/`, `@/${folder}/${programmaticPointTo}/`);\n globalAliasMap.set(`@/${folder}/${registryName}`, `@/${folder}/${programmaticPointTo}`);\n p.log.step(`Pointing '${modType}/${registryName}' to existing '${folder}/${programmaticPointTo}'`);\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: programmaticPointTo,\n action: \"reuse\",\n manifest,\n });\n continue;\n }\n\n const programmaticAlias =\n aliasMap[registryName] || aliasMap[`${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: \"point_existing\",\n label: `Point to another existing ${modType} module`,\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 === \"point_existing\" || (choice as string) === \"point_to_existing\") {\n const candidates = getAvailableLocalModules(projectRoot, modType).filter(\n (m) => m !== registryName\n );\n\n let chosenName: string;\n\n if (candidates.length > 0) {\n const selection = handleCancel(\n await importPrompts.select({\n message: `Select an existing ${modType} module to point to:`,\n options: [\n ...candidates.map((m) => ({\n value: m,\n label: m,\n })),\n {\n value: \"__custom__\",\n label: \"Enter name manually...\",\n },\n ],\n })\n );\n\n if (selection === \"__custom__\") {\n chosenName = handleCancel(\n await importPrompts.text({\n message: `Enter the name of the existing ${modType} module:`,\n placeholder: `my${registryName}`,\n validate(val) {\n const v = val?.trim();\n if (!v) return \"Name cannot be empty\";\n if (v === registryName) {\n return `Name must be different from '${registryName}' (or select 'Keep existing local version')`;\n }\n if (!checkModuleExists(projectRoot, modType, v)) {\n return `'${v}' does not exist in ${folder}`;\n }\n },\n })\n ).trim();\n } else {\n chosenName = selection;\n }\n } else {\n chosenName = handleCancel(\n await importPrompts.text({\n message: `Enter the name of the existing ${modType} module:`,\n placeholder: `my${registryName}`,\n validate(val) {\n const v = val?.trim();\n if (!v) return \"Name cannot be empty\";\n if (v === registryName) {\n return `Name must be different from '${registryName}' (or select 'Keep existing local version')`;\n }\n if (!checkModuleExists(projectRoot, modType, v)) {\n return `'${v}' does not exist in ${folder}`;\n }\n },\n })\n ).trim();\n }\n\n chosenName = chosenName\n .replace(/^@\\/(shared|features)\\//, \"\")\n .replace(/^(src\\/)?(shared|features)\\//, \"\")\n .replace(/^\\/+|\\/+$/g, \"\")\n .trim();\n\n globalAliasMap.set(`@/${folder}/${registryName}/`, `@/${folder}/${chosenName}/`);\n globalAliasMap.set(`@/${folder}/${registryName}`, `@/${folder}/${chosenName}`);\n\n p.log.step(`Pointing '${modType}/${registryName}' to existing '${folder}/${chosenName}'`);\n\n resolutions.set(key, {\n type: modType,\n registryName,\n targetName: chosenName,\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 // Check if any module being imported includes test files\n const hasTestFiles = Array.from(nodes.values()).some((node) =>\n node.manifest.files?.some((file) => isTestFile(file))\n );\n\n let includeTests = true;\n if (flags.tests !== undefined) {\n includeTests = Boolean(flags.tests);\n } else if (flags.yes) {\n includeTests = true;\n } else if (hasTestFiles) {\n includeTests = handleCancel(\n await importPrompts.confirm({\n message: \"Include test files?\",\n initialValue: true,\n })\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 if (!includeTests && isTestFile(file)) 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 fs from \"node:fs\";\nimport path from \"node:path\";\nimport type {\n CircularDependencyInfo,\n FeatureAuditResult,\n FeatureDependencyEvidence,\n LayerType,\n LintOptions,\n LintSummary,\n RuleCategory,\n Violation,\n} from \"../types/lint.js\";\nimport { findProjectRoot, resolveFeaturesDir, resolveSharedDir } from \"../utils/project.js\";\n\nexport class DependencyRuleError extends Error {\n public readonly violations: Violation[];\n public readonly isFailFast: boolean;\n\n constructor(message: string, violations: Violation[], isFailFast: boolean = false) {\n super(message);\n this.name = \"DependencyRuleError\";\n this.violations = violations;\n this.isFailFast = isFailFast;\n }\n}\n\nexport interface TargetInfo {\n isExternal: boolean;\n isDiFramework: boolean;\n targetFeature?: string | undefined;\n targetLayer?: LayerType | undefined;\n targetSubfolder?: string | undefined;\n targetFileName?: string | undefined;\n isTargetPort?: boolean | undefined;\n isTargetRepo?: boolean | undefined;\n targetSharedModule?: string | undefined;\n isSharedRoot?: boolean | undefined;\n isSharedPorts?: boolean | undefined;\n isSharedInfra?: boolean | undefined;\n isSharedDomain?: boolean | undefined;\n}\n\nexport function isTestFile(filePath: string, projectRoot?: string): boolean {\n const norm = (projectRoot ? path.relative(projectRoot, filePath) : filePath).replace(/\\\\/g, \"/\");\n const base = path.basename(norm);\n return (\n base.endsWith(\".test.ts\") ||\n base.endsWith(\".test.js\") ||\n base.endsWith(\".spec.ts\") ||\n base.endsWith(\".spec.js\") ||\n base.endsWith(\".d.ts\") ||\n norm.includes(\"/__tests__/\") ||\n norm.startsWith(\"__tests__/\") ||\n /(?:^|\\/)tests?\\//.test(norm)\n );\n}\n\nexport function scanDirFiles(dir: string, projectRoot?: string): string[] {\n if (!fs.existsSync(dir)) return [];\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (\n entry.name === \"node_modules\" ||\n entry.name === \"dist\" ||\n entry.name === \"__tests__\" ||\n entry.name.startsWith(\".\")\n ) {\n continue;\n }\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n files.push(...scanDirFiles(fullPath, projectRoot));\n } else if (\n entry.isFile() &&\n (entry.name.endsWith(\".ts\") || entry.name.endsWith(\".js\")) &&\n !isTestFile(fullPath, projectRoot)\n ) {\n files.push(fullPath);\n }\n }\n return files;\n}\n\nexport function classifyFile(\n fullPath: string,\n projectRoot: string\n): { feature?: string | undefined; layer?: LayerType | undefined } {\n const rel = path.relative(projectRoot, fullPath).replace(/\\\\/g, \"/\");\n const featureMatch = rel.match(/(?:^|\\/)(?:src\\/)?features\\/([^/]+)\\/([^/]+)(?:\\/.*)?$/);\n if (!featureMatch || !featureMatch[1] || !featureMatch[2]) return {};\n\n const feature = featureMatch[1];\n const subfolder = featureMatch[2];\n\n let layer: LayerType | undefined;\n if (subfolder === \"domain\" || subfolder === \"errors\") {\n layer = \"domain\";\n } else if (subfolder === \"useCases\" || subfolder === \"usecases\") {\n layer = \"useCases\";\n } else if (subfolder === \"services\") {\n layer = \"services\";\n } else if (subfolder === \"infrastructure\") {\n layer = \"infrastructure\";\n } else if (\n subfolder === \"pxExpress\" ||\n subfolder === \"presentation\" ||\n subfolder === \"handlers\" ||\n subfolder.startsWith(\"px\")\n ) {\n layer = \"presentation\";\n }\n\n return { feature, layer };\n}\n\nexport function classifyTarget(\n specifier: string,\n sourceFileAbs: string,\n projectRoot: string\n): TargetInfo {\n if (specifier === \"@solid-stack/di\" || specifier.startsWith(\"@solid-stack/di/\")) {\n return { isExternal: true, isDiFramework: true };\n }\n\n if (\n specifier.startsWith(\"node:\") ||\n [\"crypto\", \"fs\", \"path\", \"http\", \"https\", \"url\", \"os\", \"child_process\", \"stream\", \"express\", \"cors\", \"dotenv\"].includes(specifier)\n ) {\n return { isExternal: true, isDiFramework: false };\n }\n\n let resolvedRel: string | null = null;\n\n if (specifier.startsWith(\".\")) {\n const abs = path.resolve(path.dirname(sourceFileAbs), specifier);\n resolvedRel = path.relative(projectRoot, abs).replace(/\\\\/g, \"/\");\n } else if (specifier.startsWith(\"@/features/\") || specifier.startsWith(\"~/features/\")) {\n resolvedRel = specifier.replace(/^[@~]\\//, \"src/\");\n } else if (specifier.startsWith(\"@features/\")) {\n resolvedRel = \"src/\" + specifier.slice(1);\n } else if (specifier.startsWith(\"@/shared/\") || specifier.startsWith(\"~/shared/\")) {\n resolvedRel = specifier.replace(/^[@~]\\//, \"src/\");\n } else if (specifier.startsWith(\"@shared/\")) {\n resolvedRel = \"src/\" + specifier.slice(1);\n } else if (specifier.startsWith(\"@/\") || specifier.startsWith(\"~/\")) {\n resolvedRel = \"src/\" + specifier.slice(2);\n } else if (specifier.startsWith(\"features/\") || specifier.startsWith(\"shared/\")) {\n resolvedRel = specifier;\n }\n\n if (!resolvedRel) {\n return { isExternal: true, isDiFramework: false };\n }\n\n // Check features\n const featMatch = resolvedRel.match(/(?:^|\\/)(?:src\\/)?features\\/([^/]+)\\/([^/]+)(?:\\/(.*))?$/);\n if (featMatch && featMatch[1] && featMatch[2]) {\n const targetFeature = featMatch[1];\n const targetSubfolder = featMatch[2];\n const rest = featMatch[3] || \"\";\n\n let targetLayer: LayerType | undefined;\n if (targetSubfolder === \"domain\" || targetSubfolder === \"errors\") {\n targetLayer = \"domain\";\n } else if (targetSubfolder === \"useCases\" || targetSubfolder === \"usecases\") {\n targetLayer = \"useCases\";\n } else if (targetSubfolder === \"services\") {\n targetLayer = \"services\";\n } else if (targetSubfolder === \"infrastructure\") {\n targetLayer = \"infrastructure\";\n } else if (\n targetSubfolder === \"pxExpress\" ||\n targetSubfolder === \"presentation\" ||\n targetSubfolder === \"handlers\" ||\n targetSubfolder.startsWith(\"px\")\n ) {\n targetLayer = \"presentation\";\n }\n\n const basePart = rest ? path.basename(rest) : targetSubfolder;\n const targetFileName = basePart.replace(/\\.(js|ts|mjs|cjs)$/, \"\");\n const isTargetPort = /^I[A-Z]/.test(targetFileName);\n const isTargetRepo = isTargetPort && targetFileName.includes(\"Repo\");\n\n return {\n isExternal: false,\n isDiFramework: false,\n targetFeature,\n targetLayer,\n targetSubfolder,\n targetFileName,\n isTargetPort,\n isTargetRepo,\n };\n }\n\n // Check shared\n const sharedMatch = resolvedRel.match(/(?:^|\\/)(?:src\\/)?shared\\/([^/]+)(?:\\/(.*))?$/);\n if (sharedMatch) {\n const targetSharedModule = sharedMatch[1];\n const sharedRest = sharedMatch[2] || \"\";\n const isSharedRoot = !sharedRest.includes(\"/\");\n const isSharedPorts = sharedRest.startsWith(\"ports/\") || sharedRest === \"ports\";\n const isSharedInfra = sharedRest.startsWith(\"infrastructure/\") || sharedRest === \"infrastructure\";\n const isSharedDomain = sharedRest.startsWith(\"domain/\") || sharedRest === \"domain\";\n\n return {\n isExternal: false,\n isDiFramework: false,\n targetSharedModule,\n isSharedRoot,\n isSharedPorts,\n isSharedInfra,\n isSharedDomain,\n };\n }\n\n return { isExternal: true, isDiFramework: false };\n}\n\nexport interface ParsedStatement {\n specifier: string;\n line: number;\n rawCode: string;\n}\n\nexport function extractImportStatements(content: string): ParsedStatement[] {\n const statements: ParsedStatement[] = [];\n const lines = content.split(/\\r?\\n/);\n\n // Regex matching static imports, re-exports, dynamic imports, require\n const regex = /(?:import\\s+(?:type\\s+)?(?:[\\s\\w*$,{}]+\\s+from\\s+)?|export\\s+(?:type\\s+)?(?:[\\s\\w*$,{}]+\\s+from\\s+)?|import\\s*\\(|require\\s*\\()\\s*[\"']([^\"']+)[\"']/g;\n\n let match: RegExpExecArray | null;\n while ((match = regex.exec(content)) !== null) {\n const specifier = match[1]!;\n const charIndex = match.index;\n const lineNum = content.substring(0, charIndex).split(\"\\n\").length;\n const rawCode = lines[lineNum - 1]?.trim() || match[0].trim();\n\n statements.push({\n specifier,\n line: lineNum,\n rawCode,\n });\n }\n\n return statements;\n}\n\nexport class FeatureDependencyGraph {\n private edges = new Map<string, Map<string, FeatureDependencyEvidence>>();\n\n public addEdge(evidence: FeatureDependencyEvidence): {\n createsCycle: boolean;\n directPartner?: FeatureDependencyEvidence | undefined;\n cycleChain?: string[] | undefined;\n } {\n const { fromFeature, toFeature } = evidence;\n if (fromFeature === toFeature) {\n return { createsCycle: false };\n }\n\n if (!this.edges.has(fromFeature)) {\n this.edges.set(fromFeature, new Map());\n }\n this.edges.get(fromFeature)!.set(toFeature, evidence);\n\n // Check direct partner (A -> B and B -> A)\n const reverse = this.edges.get(toFeature)?.get(fromFeature);\n if (reverse) {\n return { createsCycle: true, directPartner: reverse, cycleChain: [fromFeature, toFeature, fromFeature] };\n }\n\n // Check transitive cycle\n const cycle = this.findCycleFrom(fromFeature);\n if (cycle && cycle.length > 0) {\n return { createsCycle: true, cycleChain: cycle };\n }\n\n return { createsCycle: false };\n }\n\n public getEdges(): Array<{ from: string; to: string; evidence: FeatureDependencyEvidence }> {\n const list: Array<{ from: string; to: string; evidence: FeatureDependencyEvidence }> = [];\n for (const [from, toMap] of this.edges.entries()) {\n for (const [to, ev] of toMap.entries()) {\n list.push({ from, to, evidence: ev });\n }\n }\n return list;\n }\n\n public findDirectCycles(): CircularDependencyInfo[] {\n const cycles: CircularDependencyInfo[] = [];\n const checkedPairs = new Set<string>();\n\n for (const [from, toMap] of this.edges.entries()) {\n for (const [to, evAtoB] of toMap.entries()) {\n const pairKey = [from, to].sort().join(\"<->\");\n if (checkedPairs.has(pairKey)) continue;\n\n const evBtoA = this.edges.get(to)?.get(from);\n if (evBtoA) {\n checkedPairs.add(pairKey);\n cycles.push({\n featureA: from,\n featureB: to,\n cycle: [from, to, from],\n evidenceAtoB: evAtoB,\n evidenceBtoA: evBtoA,\n });\n }\n }\n }\n\n return cycles;\n }\n\n private findCycleFrom(start: string): string[] | null {\n const visited = new Set<string>();\n const inStack = new Set<string>();\n const parent = new Map<string, string>();\n\n const dfs = (curr: string): string[] | null => {\n visited.add(curr);\n inStack.add(curr);\n\n const neighbors = this.edges.get(curr);\n if (neighbors) {\n for (const next of neighbors.keys()) {\n if (!visited.has(next)) {\n parent.set(next, curr);\n const cycle = dfs(next);\n if (cycle) return cycle;\n } else if (inStack.has(next)) {\n // Cycle detected!\n const cycle: string[] = [next];\n let p = curr;\n while (p !== next) {\n cycle.push(p);\n p = parent.get(p) || next;\n }\n cycle.push(next);\n cycle.reverse();\n return cycle;\n }\n }\n }\n\n inStack.delete(curr);\n return null;\n };\n\n return dfs(start);\n }\n}\n\nexport function discoverAllFeatures(\n projectRoot: string\n): Array<{ name: string; dir: string }> {\n const featuresBase = resolveFeaturesDir(projectRoot);\n if (!fs.existsSync(featuresBase)) return [];\n\n const entries = fs.readdirSync(featuresBase, { withFileTypes: true });\n return entries\n .filter((e) => e.isDirectory() && !e.name.startsWith(\".\") && e.name !== \"__tests__\" && e.name !== \"tests\")\n .map((e) => ({\n name: e.name,\n dir: path.join(featuresBase, e.name),\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport interface ClassMethodInfo {\n name: string;\n isAsync: boolean;\n isPublic: boolean;\n line: number;\n code: string;\n}\n\nexport function extractClassMethods(content: string, className: string): ClassMethodInfo[] | null {\n // 1. Strip comments preserving newlines\n let clean = \"\";\n let inLineComment = false;\n let inBlockComment = false;\n let inString: string | null = null;\n let escaped = false;\n\n for (let i = 0; i < content.length; i++) {\n const c = content[i]!;\n const next = content[i + 1];\n\n if (inLineComment) {\n if (c === \"\\n\") {\n inLineComment = false;\n clean += \"\\n\";\n } else {\n clean += \" \";\n }\n continue;\n }\n\n if (inBlockComment) {\n if (c === \"*\" && next === \"/\") {\n inBlockComment = false;\n clean += \" \";\n i++;\n } else {\n clean += c === \"\\n\" ? \"\\n\" : \" \";\n }\n continue;\n }\n\n if (inString) {\n clean += c === \"\\n\" ? \"\\n\" : \" \";\n if (escaped) {\n escaped = false;\n } else if (c === \"\\\\\") {\n escaped = true;\n } else if (c === inString) {\n inString = null;\n }\n continue;\n }\n\n if (c === \"/\" && next === \"/\") {\n inLineComment = true;\n clean += \" \";\n i++;\n continue;\n }\n if (c === \"/\" && next === \"*\") {\n inBlockComment = true;\n clean += \" \";\n i++;\n continue;\n }\n if (c === '\"' || c === \"'\" || c === \"`\") {\n inString = c;\n clean += \" \";\n continue;\n }\n\n clean += c;\n }\n\n // 2. Find class declaration\n const classDeclRegex = new RegExp(`(?:export\\\\s+(?:default\\\\s+)?)?class\\\\s+${className}\\\\b[^{]*\\\\{`);\n const match = classDeclRegex.exec(clean);\n if (!match) return null;\n\n const classBodyStart = match.index + match[0].length - 1; // index of \"{\"\n\n // 3. Scan members inside class body\n const methods: ClassMethodInfo[] = [];\n let depth = 1;\n let parenDepth = 0;\n let atMemberStart = true;\n\n // Regex matching start of method declaration (including optional decorators):\n // [decorators] [public|private|protected|static] [async] [get|set] methodName<T>(\n const methodRegex = /^\\s*(?:@[a-zA-Z0-9_$]+(?:\\([^)]*\\))?\\s+)*(?:(public|private|protected|static)\\s+)*(?:(async)\\s+)?(?:(get|set)\\s+)?(#?[a-zA-Z0-9_$]+)\\s*(?:<[^>]+>)?\\s*\\(/;\n\n // Regex matching arrow function property:\n // [public|private|protected|static] propName = (async )?(\n const arrowRegex = /^\\s*(?:(public|private|protected|static)\\s+)?(#?[a-zA-Z0-9_$]+)\\s*=\\s*(?:async\\s*)?\\(/;\n\n for (let i = classBodyStart + 1; i < clean.length && depth > 0; i++) {\n const c = clean[i]!;\n\n if (c === \"{\") {\n depth++;\n atMemberStart = false;\n continue;\n }\n if (c === \"}\") {\n depth--;\n if (depth === 1) {\n atMemberStart = true;\n }\n continue;\n }\n\n if (depth === 1) {\n if (c === \";\") {\n atMemberStart = true;\n parenDepth = 0;\n continue;\n }\n\n if (c === \"(\") {\n parenDepth++;\n } else if (c === \")\") {\n parenDepth = Math.max(0, parenDepth - 1);\n }\n\n if (atMemberStart && parenDepth === 0) {\n // Skip whitespace\n if (/\\s/.test(c)) continue;\n\n const slice = clean.slice(i);\n\n // Check if slice starts with method\n const methodMatch = slice.match(methodRegex);\n if (methodMatch) {\n const fullMatch = methodMatch[0];\n const beforeParen = fullMatch.slice(0, fullMatch.lastIndexOf(\"(\")).trim();\n const tokens = beforeParen.split(/\\s+/).filter(Boolean);\n const rawName = tokens[tokens.length - 1] || \"\";\n const methodName = rawName.replace(/<.*$/, \"\");\n\n const controlKeywords = [\"if\", \"for\", \"while\", \"switch\", \"catch\", \"with\"];\n if (!controlKeywords.includes(methodName)) {\n const isPrivate = tokens.includes(\"private\") || tokens.includes(\"protected\") || methodName.startsWith(\"#\");\n const isAsync = tokens.includes(\"async\");\n const isPublic = !isPrivate;\n const lineNum = content.slice(0, i).split(\"\\n\").length;\n const lineCode = content.split(\"\\n\")[lineNum - 1]?.trim() || \"\";\n\n methods.push({\n name: methodName,\n isAsync,\n isPublic,\n line: lineNum,\n code: lineCode,\n });\n\n i += fullMatch.length - 1;\n parenDepth = 1;\n atMemberStart = false;\n continue;\n }\n }\n\n // Check arrow function\n const arrowMatch = slice.match(arrowRegex);\n if (arrowMatch) {\n const fullMatch = arrowMatch[0];\n const beforeEquals = fullMatch.split(\"=\")[0]!.trim();\n const tokens = beforeEquals.split(/\\s+/).filter(Boolean);\n const rawName = tokens[tokens.length - 1] || \"\";\n const isPrivate = tokens.includes(\"private\") || tokens.includes(\"protected\") || rawName.startsWith(\"#\");\n const isAsync = fullMatch.includes(\"async\");\n const isPublic = !isPrivate;\n const lineNum = content.slice(0, i).split(\"\\n\").length;\n const lineCode = content.split(\"\\n\")[lineNum - 1]?.trim() || \"\";\n\n methods.push({\n name: rawName,\n isAsync,\n isPublic,\n line: lineNum,\n code: lineCode,\n });\n\n i += fullMatch.length - 1;\n parenDepth = 1;\n atMemberStart = false;\n continue;\n }\n\n atMemberStart = false;\n }\n }\n }\n\n return methods;\n}\n\nexport function checkUseCaseShape(\n featureName: string,\n filePath: string,\n relativePath: string,\n content: string,\n addViolation: (v: Violation) => void\n): void {\n const fileName = path.basename(filePath);\n const lines = content.split(/\\r?\\n/);\n\n // 1. Must define and export a class\n const classMatch = content.match(/(?:export\\s+(?:default\\s+)?)?class\\s+([A-Za-z0-9_]+)/);\n if (!classMatch) {\n addViolation({\n feature: featureName,\n layer: \"useCases\",\n file: filePath,\n relativePath,\n line: 1,\n category: \"Use Case Shape Violation\",\n code: lines[0]?.trim() || \"\",\n ruleId: \"U_SHAPE_CLASS\",\n severity: \"error\",\n advice: `Use case file '${fileName}' must define and export a class.`,\n fixExample: {\n bad: \"// Missing class definition\",\n good: `export class ${fileName.replace(/\\.(ts|js)$/, \"\")} { ... }`,\n },\n });\n return;\n }\n\n const className = classMatch[1]!;\n let classLine = 1;\n for (let i = 0; i < lines.length; i++) {\n if (new RegExp(`(?:export\\\\s+(?:default\\\\s+)?)?class\\\\s+${className}\\\\b`).test(lines[i]!)) {\n classLine = i + 1;\n break;\n }\n }\n\n // 2. Must be decorated with @MakeInjectable\n if (!/@MakeInjectable\\b/.test(content)) {\n addViolation({\n feature: featureName,\n layer: \"useCases\",\n file: filePath,\n relativePath,\n line: classLine,\n category: \"Use Case Shape Violation\",\n code: lines[classLine - 1]?.trim() || `class ${className}`,\n ruleId: \"U_SHAPE_DECORATOR\",\n severity: \"error\",\n advice: `Use case class '${className}' in '${fileName}' must be decorated with @MakeInjectable.`,\n fixExample: {\n bad: lines[classLine - 1]?.trim() || `class ${className}`,\n good: `@MakeInjectable\\nexport class ${className} { ... }`,\n },\n });\n }\n\n // 3. Must implement an async execute method\n const hasAsyncExecute = /(?:public\\s+)?async\\s+execute\\s*(?:<[^>]+>)?\\s*\\(/.test(content);\n if (!hasAsyncExecute) {\n const hasSyncExecute = /(?:public\\s+)?execute\\s*(?:<[^>]+>)?\\s*\\(/.test(content);\n addViolation({\n feature: featureName,\n layer: \"useCases\",\n file: filePath,\n relativePath,\n line: classLine,\n category: \"Use Case Shape Violation\",\n code: lines[classLine - 1]?.trim() || `class ${className}`,\n ruleId: \"U_SHAPE_EXECUTE\",\n severity: \"error\",\n advice: hasSyncExecute\n ? `Use case class '${className}' in '${fileName}' must have an 'async execute' method (found synchronous 'execute').`\n : `Use case class '${className}' in '${fileName}' must implement an 'async execute(...)' method.`,\n fixExample: {\n bad: hasSyncExecute ? \"execute(props: ...) { ... }\" : `class ${className} { ... }`,\n good: \"async execute(props: ...): Promise<...> { ... }\",\n },\n });\n }\n\n // 4. Must have no other public methods (only constructor and async execute)\n const classMethods = extractClassMethods(content, className);\n if (classMethods) {\n const extraPublicMethods = classMethods.filter(\n (m) => m.isPublic && m.name !== \"constructor\" && m.name !== \"execute\"\n );\n for (const m of extraPublicMethods) {\n addViolation({\n feature: featureName,\n layer: \"useCases\",\n file: filePath,\n relativePath,\n line: m.line,\n category: \"Use Case Shape Violation\",\n code: m.code || `public ${m.name}(...)`,\n ruleId: \"U_SHAPE_ONLY_EXECUTE\",\n severity: \"error\",\n advice: `Use case class '${className}' in '${fileName}' has disallowed public method '${m.name}'. The only allowed public methods are constructor and async execute. Extract extra methods into their own use cases, or make them private.`,\n fixExample: {\n bad: m.code || `${m.name}(...) { ... }`,\n good: `// Extract '${m.name}' into its own dedicated Use Case, or make it private if it is internal helper logic:\\nprivate ${m.name}(...) { ... }`,\n },\n });\n }\n }\n}\n\nexport function checkServiceShape(\n featureName: string,\n filePath: string,\n relativePath: string,\n content: string,\n addViolation: (v: Violation) => void\n): void {\n const fileName = path.basename(filePath);\n const lines = content.split(/\\r?\\n/);\n\n // 1. Must define and export a class\n const classMatch = content.match(/(?:export\\s+(?:default\\s+)?)?class\\s+([A-Za-z0-9_]+)/);\n if (!classMatch) {\n addViolation({\n feature: featureName,\n layer: \"services\",\n file: filePath,\n relativePath,\n line: 1,\n category: \"Service Shape Violation\",\n code: lines[0]?.trim() || \"\",\n ruleId: \"S_SHAPE_CLASS\",\n severity: \"error\",\n advice: `Service file '${fileName}' must define and export a class.`,\n fixExample: {\n bad: \"// Missing class definition\",\n good: `export class ${fileName.replace(/\\.(ts|js)$/, \"\")} { ... }`,\n },\n });\n return;\n }\n\n const className = classMatch[1]!;\n let classLine = 1;\n for (let i = 0; i < lines.length; i++) {\n if (new RegExp(`(?:export\\\\s+(?:default\\\\s+)?)?class\\\\s+${className}\\\\b`).test(lines[i]!)) {\n classLine = i + 1;\n break;\n }\n }\n\n // 2. Must be decorated with @MakeInjectable\n if (!/@MakeInjectable\\b/.test(content)) {\n addViolation({\n feature: featureName,\n layer: \"services\",\n file: filePath,\n relativePath,\n line: classLine,\n category: \"Service Shape Violation\",\n code: lines[classLine - 1]?.trim() || `class ${className}`,\n ruleId: \"S_SHAPE_DECORATOR\",\n severity: \"error\",\n advice: `Service class '${className}' in '${fileName}' must be decorated with @MakeInjectable.`,\n fixExample: {\n bad: lines[classLine - 1]?.trim() || `class ${className}`,\n good: `@MakeInjectable\\nexport class ${className} { ... }`,\n },\n });\n }\n\n // 3. Must implement an async execute method\n const hasAsyncExecute = /(?:public\\s+)?async\\s+execute\\s*(?:<[^>]+>)?\\s*\\(/.test(content);\n if (!hasAsyncExecute) {\n const hasSyncExecute = /(?:public\\s+)?execute\\s*(?:<[^>]+>)?\\s*\\(/.test(content);\n addViolation({\n feature: featureName,\n layer: \"services\",\n file: filePath,\n relativePath,\n line: classLine,\n category: \"Service Shape Violation\",\n code: lines[classLine - 1]?.trim() || `class ${className}`,\n ruleId: \"S_SHAPE_EXECUTE\",\n severity: \"error\",\n advice: hasSyncExecute\n ? `Service class '${className}' in '${fileName}' must have an 'async execute' method (found synchronous 'execute').`\n : `Service class '${className}' in '${fileName}' must implement an 'async execute(...)' method.`,\n fixExample: {\n bad: hasSyncExecute ? \"execute(props: ...) { ... }\" : `class ${className} { ... }`,\n good: \"async execute(props: ...): Promise<...> { ... }\",\n },\n });\n }\n\n // 4. Must have no other public methods (only constructor and async execute)\n const classMethods = extractClassMethods(content, className);\n if (classMethods) {\n const extraPublicMethods = classMethods.filter(\n (m) => m.isPublic && m.name !== \"constructor\" && m.name !== \"execute\"\n );\n for (const m of extraPublicMethods) {\n addViolation({\n feature: featureName,\n layer: \"services\",\n file: filePath,\n relativePath,\n line: m.line,\n category: \"Service Shape Violation\",\n code: m.code || `public ${m.name}(...)`,\n ruleId: \"S_SHAPE_ONLY_EXECUTE\",\n severity: \"error\",\n advice: `Service class '${className}' in '${fileName}' has disallowed public method '${m.name}'. The only allowed public methods are constructor and async execute. If a service has multiple public methods, those should be on their own services instead of being cramped in a single service.`,\n fixExample: {\n bad: m.code || `${m.name}(...) { ... }`,\n good: `// Extract '${m.name}' into its own dedicated Service, or make it private if it is internal helper logic:\\nprivate ${m.name}(...) { ... }`,\n },\n });\n }\n }\n}\n\nexport function lintCodebase(options: LintOptions = {}): LintSummary {\n const startTime = Date.now();\n const projectRoot = options.projectRoot || findProjectRoot(options.targetDir || process.cwd());\n const failFast = !options.complete;\n\n const features = discoverAllFeatures(projectRoot);\n const graph = new FeatureDependencyGraph();\n\n const allViolations: Violation[] = [];\n const results: FeatureAuditResult[] = [];\n const detectedCycles: CircularDependencyInfo[] = [];\n\n const addViolation = (v: Violation) => {\n allViolations.push(v);\n const featureResult = results.find((r) => r.featureName === v.feature);\n if (featureResult) {\n featureResult.violations.push(v);\n featureResult.passed = false;\n }\n if (failFast) {\n const errorMsg =\n `Dependency rule violation detected in ${v.relativePath}:${v.line}:\\n` +\n `[${v.category}] ${v.advice}\\n` +\n `Code: ${v.code}`;\n throw new DependencyRuleError(errorMsg, [v], true);\n }\n };\n\n // Initialize result holders\n for (const feat of features) {\n results.push({\n featureName: feat.name,\n featureDir: feat.dir,\n scannedFilesCount: 0,\n passed: true,\n violations: [],\n layersChecked: [\"domain\", \"useCases\", \"services\", \"infrastructure\", \"presentation\"],\n });\n }\n\n // Scan files per feature\n for (const feat of features) {\n const featResult = results.find((r) => r.featureName === feat.name)!;\n const allFiles = scanDirFiles(feat.dir, projectRoot);\n featResult.scannedFilesCount = allFiles.length;\n\n for (const file of allFiles) {\n const relPath = path.relative(projectRoot, file).replace(/\\\\/g, \"/\");\n const { layer } = classifyFile(file, projectRoot);\n if (!layer) continue;\n\n const content = fs.readFileSync(file, \"utf-8\");\n const statements = extractImportStatements(content);\n\n const baseName = path.basename(file);\n const isBarrel = baseName === \"index.ts\" || baseName === \"index.js\";\n\n // Shape rule: Use cases must be a class decorated with @MakeInjectable and have an async execute() method\n if (layer === \"useCases\" && !isBarrel) {\n checkUseCaseShape(feat.name, file, relPath, content, addViolation);\n }\n\n // Shape rule: Services must be a class decorated with @MakeInjectable and have an execute() method\n if (layer === \"services\" && !isBarrel) {\n checkServiceShape(feat.name, file, relPath, content, addViolation);\n }\n\n // Check inline DI in Domain layer\n if (layer === \"domain\") {\n const lines = content.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const lineText = lines[i]!.trim();\n if (lineText.includes(\"@MakeInjectable\") || lineText.includes(\"public static deps =\")) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: i + 1,\n category: \"Domain Dependence Violation\",\n code: lineText,\n ruleId: \"D2_DI_DEPENDENCE\",\n severity: \"error\",\n advice: \"Domain layer must have zero DI dependence. Remove @MakeInjectable decorators and static deps declarations.\",\n fixExample: {\n bad: lineText,\n good: \"// Domain interfaces and value objects must remain plain TypeScript classes/interfaces.\",\n },\n });\n }\n }\n }\n\n // Check import statements\n for (const stmt of statements) {\n const target = classifyTarget(stmt.specifier, file, projectRoot);\n\n // 1. Feature dependency tracking and circular dependency check\n if (target.targetFeature && target.targetFeature !== feat.name) {\n const evidence: FeatureDependencyEvidence = {\n fromFeature: feat.name,\n toFeature: target.targetFeature,\n file,\n relativePath: relPath,\n line: stmt.line,\n code: stmt.rawCode,\n };\n\n const cycleResult = graph.addEdge(evidence);\n if (cycleResult.createsCycle) {\n const partner = cycleResult.directPartner;\n detectedCycles.push({\n featureA: feat.name,\n featureB: target.targetFeature,\n cycle: cycleResult.cycleChain,\n evidenceAtoB: evidence,\n evidenceBtoA: partner || evidence,\n });\n\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Circular Feature Dependency Violation\",\n code: stmt.rawCode,\n ruleId: \"C1_CIRCULAR_FEATURE_DEPENDENCY\",\n severity: \"error\",\n advice: `Circular feature dependency detected between '${feat.name}' and '${target.targetFeature}'. Dependency flow must be strictly one-way: for any two features, only one can know about the other exists. If '${feat.name}' needs to impose a side effect on '${target.targetFeature}' (or vice versa), it must do so via an event, never via a direct dependency.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Emit a Domain/Application Event (e.g. publish '${feat.name}Changed') instead of depending on '${target.targetFeature}'.`,\n },\n });\n }\n }\n\n // 2. Layer-by-layer rule validations\n if (layer === \"domain\") {\n // D1: Domain must not import outer layers\n if (target.targetLayer && [\"useCases\", \"services\", \"infrastructure\", \"presentation\"].includes(target.targetLayer)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Domain Purity Violation\",\n code: stmt.rawCode,\n ruleId: \"D1_OUTER_IMPORT\",\n severity: \"error\",\n advice: `Domain layer must not import from outer layers (${target.targetLayer}). Keep the domain core pure.`,\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Define interfaces, types, or value objects directly within the domain layer.\",\n },\n });\n }\n\n // D2: Domain zero DI dependence\n if (target.isDiFramework) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Domain Dependence Violation\",\n code: stmt.rawCode,\n ruleId: \"D2_DI_DEPENDENCE\",\n severity: \"error\",\n advice: \"Domain layer must have zero DI dependence. Domain interfaces and value objects are plain classes/types.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Remove @solid-stack/di import. Domain entities are pure TypeScript.\",\n },\n });\n }\n\n // D3: Domain shared non-domain import\n if (target.targetSharedModule && !target.isSharedDomain) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Domain Purity Violation\",\n code: stmt.rawCode,\n ruleId: \"D3_SHARED_NON_DOMAIN_IMPORT\",\n severity: \"error\",\n advice: \"Domain layer can only import pure value objects from shared/<module>/domain/*. Ports, infrastructure, and root classes must not be imported.\",\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/domain/...\";`,\n },\n });\n }\n\n // D4: Domain external runtime libraries\n if (target.isExternal && !target.isDiFramework) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Domain Purity Violation\",\n code: stmt.rawCode,\n ruleId: \"D4_EXTERNAL_LIBRARY\",\n severity: \"error\",\n advice: `Domain layer must be pure and must not depend on external runtime libraries ('${stmt.specifier}').`,\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Model pure business interfaces without external libraries.\",\n },\n });\n }\n } else if (layer === \"useCases\") {\n // U1: Intra-feature use case dependency\n if (target.targetLayer === \"useCases\" && target.targetFeature === feat.name) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Intra-Feature Violation\",\n code: stmt.rawCode,\n ruleId: \"U1_INTRA_USE_CASE\",\n severity: \"error\",\n advice: `Use cases cannot depend on other use cases of the same feature ('${feat.name}'). Extract shared business logic to a domain repository or domain service.`,\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Inject a domain interface or domain service instead of another use case.\",\n },\n });\n }\n\n // U2: Cross-feature use case dependency\n if (target.targetLayer === \"useCases\" && target.targetFeature && target.targetFeature !== feat.name) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Cross-Feature Use Case Violation\",\n code: stmt.rawCode,\n ruleId: \"U2_CROSS_FEATURE_USE_CASE\",\n severity: \"error\",\n advice: `Use cases cannot depend directly on use cases of foreign feature '${target.targetFeature}'. Treat features as separate microservices: define an interface in '${feat.name}/domain/' specifying what is needed, and implement it in '${feat.name}/infrastructure/'.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Define an interface in ${feat.name}/domain/ and implement it in ${feat.name}/infrastructure/ using '${target.targetFileName}'.`,\n },\n });\n }\n\n // U3: Direct infrastructure import\n if (target.targetLayer === \"infrastructure\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"U3_DIRECT_INFRASTRUCTURE\",\n severity: \"error\",\n advice: \"Use cases cannot import concrete infrastructure directly. Depend on Domain Ports of the same feature via DI.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Depend on the domain interface port declared in static deps.\",\n },\n });\n }\n\n // U4: Cross-feature domain ports\n if (\n target.targetLayer === \"domain\" &&\n target.targetFeature &&\n target.targetFeature !== feat.name &&\n target.isTargetPort\n ) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Cross-Feature Port Violation\",\n code: stmt.rawCode,\n ruleId: \"U4_CROSS_FEATURE_PORT\",\n severity: \"error\",\n advice: `Use cases cannot depend on domain interfaces/ports of foreign feature '${target.targetFeature}'. Define an interface in '${feat.name}/domain/' (consumer-driven port) and implement it in '${feat.name}/infrastructure/'.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Define a local interface in ${feat.name}/domain/ and implement it in ${feat.name}/infrastructure/.`,\n },\n });\n }\n\n // U5: Cross-feature services\n if (target.targetLayer === \"services\" && target.targetFeature && target.targetFeature !== feat.name) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Use Case Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"U5_CROSS_FEATURE_SERVICE\",\n severity: \"error\",\n advice: `Use cases cannot depend on services of foreign feature '${target.targetFeature}'.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Define an interface in ${feat.name}/domain/ and implement it in ${feat.name}/infrastructure/.`,\n },\n });\n }\n\n // U6: Shared non-root class import\n if (target.targetSharedModule && (target.isSharedPorts || target.isSharedInfra)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Shared Module Root Class Violation\",\n code: stmt.rawCode,\n ruleId: \"U6_SHARED_NON_ROOT\",\n severity: \"error\",\n advice: `Use cases can only depend on root classes of shared modules. Never import from shared ports or infrastructure directly.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/<RootClass>.js\";`,\n },\n });\n }\n } else if (layer === \"services\") {\n // S1: Use cases dependency\n if (target.targetLayer === \"useCases\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Service Intra-Feature Violation\",\n code: stmt.rawCode,\n ruleId: \"S1_USE_CASE_DEPENDENCY\",\n severity: \"error\",\n advice: \"Services cannot depend on use cases of any feature.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Inject domain repository ports directly instead of use cases.\",\n },\n });\n }\n\n // S2: Cross-feature domain ports\n if (\n target.targetLayer === \"domain\" &&\n target.targetFeature &&\n target.targetFeature !== feat.name &&\n target.isTargetPort\n ) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Service Cross-Feature Port Violation\",\n code: stmt.rawCode,\n ruleId: \"S2_CROSS_FEATURE_PORT\",\n severity: \"error\",\n advice: `Services cannot depend on domain ports of foreign feature '${target.targetFeature}'.`,\n fixExample: {\n bad: stmt.rawCode,\n good: `// Define an interface in ${feat.name}/domain/ and implement it in ${feat.name}/infrastructure/.`,\n },\n });\n }\n\n // S3: Direct infrastructure\n if (target.targetLayer === \"infrastructure\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Service Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"S3_DIRECT_INFRASTRUCTURE\",\n severity: \"error\",\n advice: \"Services cannot import concrete infrastructure directly. Depend on Domain Ports via DI.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Depend on the domain interface port declared in static deps.\",\n },\n });\n }\n\n // S4: Shared non-root\n if (target.targetSharedModule && (target.isSharedPorts || target.isSharedInfra)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Shared Module Root Class Violation\",\n code: stmt.rawCode,\n ruleId: \"S4_SHARED_NON_ROOT\",\n severity: \"error\",\n advice: \"Services can only depend on root classes of shared modules. Never import from shared ports or infrastructure directly.\",\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/<RootClass>.js\";`,\n },\n });\n }\n } else if (layer === \"infrastructure\") {\n // I1: Intra-feature use case\n if (target.targetLayer === \"useCases\" && target.targetFeature === feat.name) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Adapter Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"I1_INTRA_USE_CASE\",\n severity: \"error\",\n advice: `Infrastructure adapters cannot depend on use cases of the same feature ('${feat.name}'). Adapters implement domain ports.`,\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Adapters implement domain ports and should not invoke local application use cases.\",\n },\n });\n }\n\n // I2: Shared non-root\n if (target.targetSharedModule && (target.isSharedPorts || target.isSharedInfra)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Shared Module Root Class Violation\",\n code: stmt.rawCode,\n ruleId: \"I2_SHARED_NON_ROOT\",\n severity: \"error\",\n advice: \"Infrastructure adapters can only depend on root classes of shared modules. Never import from shared ports or infrastructure directly.\",\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/<RootClass>.js\";`,\n },\n });\n }\n } else if (layer === \"presentation\") {\n // P1: Direct infrastructure\n if (target.targetLayer === \"infrastructure\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Presentation Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"P1_DIRECT_INFRASTRUCTURE\",\n severity: \"error\",\n advice: \"Presentation handlers must not import infrastructure directly. Inject Use Cases via DI.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Inject the corresponding Use Case via static deps and invoke its execute() method.\",\n },\n });\n }\n\n // P2: Direct domain repositories/ports\n if (target.targetLayer === \"domain\" && (target.isTargetRepo || target.isTargetPort)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Presentation Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"P2_DIRECT_REPOSITORY\",\n severity: \"error\",\n advice: \"Presentation handlers must not depend on domain repositories or ports directly. Inject Use Cases via DI.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Presentation layer must only orchestrate Use Cases.\",\n },\n });\n }\n\n // P3: Shared non-root\n if (target.targetSharedModule && (target.isSharedPorts || target.isSharedInfra)) {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Shared Module Root Class Violation\",\n code: stmt.rawCode,\n ruleId: \"P3_SHARED_NON_ROOT\",\n severity: \"error\",\n advice: \"Presentation handlers can only depend on root classes of shared modules. Never import from shared ports or infrastructure directly.\",\n fixExample: {\n bad: stmt.rawCode,\n good: `import { ... } from \"@/shared/${target.targetSharedModule}/<RootClass>.js\";`,\n },\n });\n }\n\n // P4: Direct services dependency\n if (target.targetLayer === \"services\") {\n addViolation({\n feature: feat.name,\n layer,\n file,\n relativePath: relPath,\n line: stmt.line,\n category: \"Presentation Layer Violation\",\n code: stmt.rawCode,\n ruleId: \"P4_DIRECT_SERVICE\",\n severity: \"error\",\n advice:\n \"Presentation handlers must not depend on services directly. They must use use cases, and use cases will then depend on the service.\",\n fixExample: {\n bad: stmt.rawCode,\n good: \"// Inject a Use Case via static deps instead of a Service.\",\n },\n });\n }\n }\n }\n }\n }\n\n // After complete scan, verify any additional direct cycles not already flagged\n const directCycles = graph.findDirectCycles();\n for (const c of directCycles) {\n const existing = detectedCycles.find(\n (dc) =>\n (dc.featureA === c.featureA && dc.featureB === c.featureB) ||\n (dc.featureA === c.featureB && dc.featureB === c.featureA)\n );\n if (!existing) {\n detectedCycles.push(c);\n addViolation({\n feature: c.featureA,\n file: c.evidenceAtoB.file,\n relativePath: c.evidenceAtoB.relativePath,\n line: c.evidenceAtoB.line,\n category: \"Circular Feature Dependency Violation\",\n code: c.evidenceAtoB.code,\n ruleId: \"C1_CIRCULAR_FEATURE_DEPENDENCY\",\n severity: \"error\",\n advice: `Circular feature dependency detected between '${c.featureA}' and '${c.featureB}'. Dependency flow must be strictly one-way: for any two features, only one can know about the other exists. If the unaware feature needs to impose a side effect on the other, it must do so via an event, never via a direct dependency.`,\n });\n }\n }\n\n const durationMs = Date.now() - startTime;\n const cleanFeatures = results.filter((r) => r.passed).length;\n const violatedFeatures = results.filter((r) => !r.passed).length;\n\n const summary: LintSummary = {\n totalFeatures: results.length,\n cleanFeatures,\n violatedFeatures,\n totalViolations: allViolations.length,\n durationMs,\n results,\n allViolations,\n circularDependencies: detectedCycles,\n };\n\n if (allViolations.length > 0 && options.throwOnError !== false) {\n const errorHeader = `Dependency rule audit failed with ${allViolations.length} violation(s) across ${violatedFeatures} feature(s):`;\n const compiledDetails = allViolations\n .map(\n (v, i) =>\n `${i + 1}. [${v.category}] ${v.relativePath}:${v.line}\\n` +\n ` Rule: ${v.ruleId}\\n` +\n ` Code: ${v.code}\\n` +\n ` Advice: ${v.advice}`\n )\n .join(\"\\n\\n\");\n\n throw new DependencyRuleError(`${errorHeader}\\n\\n${compiledDetails}\\n`, allViolations, false);\n }\n\n return summary;\n}\n","import pc from \"picocolors\";\nimport type { LintOptions, LintSummary, Violation } from \"../types/lint.js\";\nimport { DependencyRuleError, lintCodebase } from \"../core/lintEngine.js\";\n\nexport function formatViolation(v: Violation): string {\n const lines: string[] = [];\n\n // Clickable file location with line number\n lines.push(pc.underline(pc.cyan(v.relativePath)) + pc.dim(\":\") + pc.yellow(String(v.line)));\n\n // Code line with gutter\n const gutter = `${String(v.line).padStart(4, \" \")} | `;\n lines.push(pc.dim(gutter) + v.code);\n\n // Category and advice\n const categoryShort = v.category.replace(\" Violation\", \"\");\n lines.push(\n \" \" + pc.red(pc.bold(\"✖\")) + \" \" + pc.red(`[${categoryShort}]`) + \" \" + v.advice\n );\n\n // Actionable fix hint\n if (v.fixExample?.good) {\n lines.push(\" \" + pc.dim(\"→\") + \" \" + pc.dim(v.fixExample.good));\n }\n\n return lines.join(\"\\n\");\n}\n\nexport async function handleLint(flags: Record<string, any> = {}): Promise<LintSummary> {\n const complete = Boolean(flags.complete);\n const quiet = Boolean(flags.quiet);\n\n const options: LintOptions = {\n complete,\n quiet,\n targetDir: flags.targetDir || flags.target,\n projectRoot: flags.projectRoot,\n fixHint: flags.fixHint !== false,\n throwOnError: false,\n };\n\n try {\n const summary = lintCodebase(options);\n\n if (summary.totalViolations > 0) {\n if (!quiet) {\n console.log(\"\");\n for (const v of summary.allViolations) {\n console.log(formatViolation(v));\n console.log(\"\");\n }\n console.log(\n pc.red(\n `✖ Dependency rules check failed with ${summary.totalViolations} error${\n summary.totalViolations > 1 ? \"s\" : \"\"\n } across ${summary.violatedFeatures} feature${\n summary.violatedFeatures > 1 ? \"s\" : \"\"\n } (${summary.totalFeatures} features scanned).`\n )\n );\n console.log(\"\");\n }\n\n const errorHeader = `Dependency rule audit failed with ${summary.totalViolations} violation(s) across ${summary.violatedFeatures} feature(s):`;\n const compiledDetails = summary.allViolations\n .map(\n (v, i) =>\n `${i + 1}. [${v.category}] ${v.relativePath}:${v.line}\\n` +\n ` Code: ${v.code}\\n` +\n ` Advice: ${v.advice}`\n )\n .join(\"\\n\\n\");\n\n throw new DependencyRuleError(`${errorHeader}\\n\\n${compiledDetails}\\n`, summary.allViolations, false);\n }\n\n if (!quiet) {\n console.log(\n pc.green(\n `✔ Dependency rules verified across ${summary.totalFeatures} feature${\n summary.totalFeatures === 1 ? \"\" : \"s\"\n }.`\n )\n );\n }\n\n return summary;\n } catch (err) {\n if (err instanceof DependencyRuleError && err.isFailFast) {\n if (!quiet) {\n console.log(\"\");\n const v = err.violations[0];\n if (v) {\n console.log(formatViolation(v));\n console.log(\"\");\n }\n console.log(pc.red(`✖ Dependency rules check failed (1 error).`));\n console.log(\"\");\n }\n }\n throw err;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { runEnvCommand } from \"./env.js\";\nimport { runEnvExamplesCommand } from \"./envExamples.js\";\nimport { handleCancel } from \"../utils/prompts.js\";\n\nexport async function handleInit(\n type?: string,\n flags: Record<string, any> = {}\n): Promise<void> {\n if (!type) {\n const choice = handleCancel(\n await p.select({\n message: \"What would you like to initialize?\",\n options: [\n {\n value: \"env\",\n label: \"Environment Files\",\n hint: \"Generate local .env files from .env*.example templates\",\n },\n {\n value: \"env-examples\",\n label: \"Sync Env Examples\",\n hint: \"Safely clone and redact local .env files to .example templates\",\n },\n ],\n })\n );\n\n if (choice === \"env\") {\n await runEnvCommand(flags);\n } else if (choice === \"env-examples\") {\n await runEnvExamplesCommand(flags);\n }\n return;\n }\n\n const normalized = type.trim().toLowerCase();\n if (normalized === \"env\") {\n await runEnvCommand(flags);\n } else if (normalized === \"env-examples\" || normalized === \"envexamples\") {\n await runEnvExamplesCommand(flags);\n } else {\n p.log.error(\n pc.red(\n `Unknown init target: \"${type}\". Allowed targets: env, env-examples.`\n )\n );\n if (process.env.VITEST) {\n throw new Error(`Unknown init target: \"${type}\". Allowed targets: env, env-examples.`);\n }\n process.exit(1);\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 { handleLint } from \"./commands/lint.js\";\nimport { handleInit } from \"./commands/init.js\";\nimport { DependencyRuleError } from \"./core/lintEngine.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 .option(\"--point-to <mapping>\", \"Point a dependency to an existing local module (e.g. --point-to time:mytime)\")\n .option(\"--alias <mapping>\", \"Import a dependency fresh under an alias name (e.g. --alias time:time-mason)\")\n .option(\"--tests\", \"Include test files (use --no-tests to exclude)\")\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 value: \"lint\",\n label: \"Lint dependency rules\",\n hint: \"Scan codebase and verify Clean Architecture dependency rules\",\n },\n {\n value: \"init\",\n label: \"Initialize environment\",\n hint: \"Generate local .env files from .env*.example templates\",\n },\n ],\n })\n );\n\n if (choice === \"create\") {\n await handleCreate(undefined, undefined, flags);\n } else if (choice === \"import\") {\n await handleImport(undefined, undefined, flags);\n } else if (choice === \"lint\") {\n await handleLint(flags);\n } else if (choice === \"init\") {\n await handleInit(\"env\", 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 .option(\"--point-to <mapping>\", \"Point a dependency to an existing local module (e.g. --point-to time:mytime)\")\n .option(\"--alias <mapping>\", \"Import a dependency fresh under an alias name (e.g. --alias time:time-mason)\")\n .option(\"--tests\", \"Include test files (use --no-tests to exclude)\")\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 // 3. The LINT Namespace\n cli\n .command(\n \"lint [target]\",\n \"Scan codebase and verify Clean Architecture dependency rules\"\n )\n .option(\n \"-c, --complete\",\n \"Scan entire codebase without failing fast, compiling all errors at the end\"\n )\n .option(\"-q, --quiet\", \"Suppress non-error output\")\n .example(\"mason lint\")\n .example(\"mason lint --complete\")\n .example(\"mason lint ./src\")\n .action(async (target?: string, flags: Record<string, any> = {}) => {\n try {\n await handleLint({\n ...flags,\n targetDir: target || flags.target || flags.dest,\n });\n } catch (err) {\n if (err instanceof DependencyRuleError) {\n if (process.env.VITEST) {\n throw err;\n }\n process.exit(1);\n }\n handleCliError(err);\n }\n });\n\n // 4. The INIT Namespace\n cli\n .command(\n \"init [type]\",\n \"Initialize project configurations and resources (e.g. 'mason init env', 'mason init env-examples')\"\n )\n .option(\"-d, --dry-run\", \"Preview changes without writing to disk\")\n .option(\"-o, --overwrite\", \"Overwrite existing files\")\n .example(\"mason init env\")\n .example(\"mason init env --overwrite\")\n .example(\"mason init env --dry-run\")\n .example(\"mason init env-examples\")\n .example(\"mason init env-examples --overwrite\")\n .example(\"mason init env-examples --dry-run\")\n .action(async (type?: string, flags: Record<string, any> = {}) => {\n try {\n await handleInit(type, flags);\n } catch (err) {\n handleCliError(err);\n }\n });\n\n // Flat shorthand for env-examples\n cli\n .command(\n \"env-examples\",\n \"Shorthand for 'mason init env-examples'\"\n )\n .option(\"-d, --dry-run\", \"Preview changes without writing to disk\")\n .option(\"-o, --overwrite\", \"Overwrite existing .env*.example files\")\n .action(async (flags: Record<string, any> = {}) => {\n try {\n await handleInit(\"env-examples\", flags);\n } catch (err) {\n handleCliError(err);\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.19\");\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 if (process.env.VITEST) {\n throw err;\n }\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"]}
|