create-fullstack-scaffold 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/rpc/client.ts","../../src/cli/utils/api.ts","../../src/cli/utils/logger.ts","../../src/cli/utils/auto-command.ts","../../src/cli/modules/todo/index.ts","../../src/cli/modules/notification/index.ts","../../src/cli/modules/config/index.ts","../../src/cli/modules/index.ts","../../src/cli/index.ts"],"names":["path","logger","program"],"mappings":"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","file":"index.js","sourcesContent":["import { hc } from 'hono/client'\n\nexport function createRPCClient(baseUrl: string) {\n return hc(baseUrl)\n}\n","import { createRPCClient } from '../rpc/client'\n\nconst DEFAULT_BASE_URL = 'http://localhost:3010'\n\nlet globalBaseUrl = process.env.BIOMIMIC_API_URL || DEFAULT_BASE_URL\n\nexport function setBaseUrl(url: string) {\n globalBaseUrl = url\n}\n\nexport function getBaseUrl(): string {\n return globalBaseUrl\n}\n\nexport function getClient() {\n return createRPCClient(globalBaseUrl)\n}\n","type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug'\n\ninterface LoggerOptions {\n verbose?: boolean\n debug?: boolean\n}\n\nclass Logger {\n private level: LogLevel = 'info'\n\n constructor(options: LoggerOptions = {}) {\n if (options.debug || process.env.BIOMIMIC_DEBUG === 'true') {\n this.level = 'debug'\n } else if (options.verbose || process.env.BIOMIMIC_VERBOSE === 'true') {\n this.level = 'info'\n }\n }\n\n setLevel(level: LogLevel) {\n this.level = level\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels: LogLevel[] = ['silent', 'error', 'warn', 'info', 'debug']\n return levels.indexOf(level) <= levels.indexOf(this.level)\n }\n\n info(message: string, ...args: unknown[]) {\n if (this.shouldLog('info')) {\n process.stdout.write(`${message}${args.length ? ' ' + args.join(' ') : ''}\\n`)\n }\n }\n\n debug(message: string, ...args: unknown[]) {\n if (this.shouldLog('debug')) {\n process.stdout.write(`[debug] ${message}${args.length ? ' ' + args.join(' ') : ''}\\n`)\n }\n }\n\n warn(message: string) {\n if (this.shouldLog('warn')) {\n process.stderr.write(`[warn] ${message}\\n`)\n }\n }\n\n error(message: string) {\n if (this.shouldLog('error')) {\n process.stderr.write(`[error] ${message}\\n`)\n }\n }\n\n success(message: string, ...args: unknown[]) {\n if (this.shouldLog('info')) {\n process.stdout.write(`✓ ${message}${args.length ? ' ' + args.join(' ') : ''}\\n`)\n }\n }\n\n fail(message: string) {\n if (this.shouldLog('error')) {\n process.stderr.write(`✗ ${message}\\n`)\n }\n }\n}\n\nlet logger: Logger | null = null\n\nexport function createLogger(options: LoggerOptions = {}): Logger {\n logger = new Logger(options)\n return logger\n}\n\nexport function getLogger(): Logger {\n if (!logger) {\n logger = new Logger()\n }\n return logger\n}\n\nexport { Logger, type LogLevel, type LoggerOptions }\n","import { Command } from 'commander'\nimport type { ZodType, ZodObject, ZodOptional } from 'zod'\nimport { getClient } from './api'\nimport { getLogger } from './logger'\n\ntype RouteConfig = {\n method: 'get' | 'post' | 'put' | 'delete' | 'patch'\n path: string\n command: string\n description: string\n params?: ZodObject<Record<string, ZodType>>\n body?: ZodType\n query?: ZodObject<Record<string, ZodType>>\n}\n\ntype CliCommandConfig = {\n name: string\n description: string\n action: (options: Record<string, unknown>, args: string[]) => Promise<void>\n options?: Array<{\n flags: string\n description: string\n required?: boolean\n defaultValue?: string\n }>\n arguments?: Array<{\n name: string\n description: string\n required?: boolean\n }>\n}\n\nfunction extractZodInfo(schema: ZodType): {\n type: 'string' | 'number' | 'boolean' | 'enum' | 'object'\n required: boolean\n enumValues?: string[]\n defaultValue?: unknown\n} {\n const def = (schema as unknown as { _def: { typeName: string } })._def\n\n if (def.typeName === 'ZodOptional') {\n const inner = (schema as ZodOptional<ZodType>)._def.innerType\n const info = extractZodInfo(inner)\n return { ...info, required: false }\n }\n\n if (def.typeName === 'ZodDefault') {\n const innerDef = (\n schema as unknown as { _def: { innerType: ZodType; defaultValue: () => unknown } }\n )._def\n const defaultValue = innerDef.defaultValue()\n const info = extractZodInfo(innerDef.innerType)\n return { ...info, required: false, defaultValue }\n }\n\n if (def.typeName === 'ZodEnum') {\n const enumValues = [...(schema as unknown as { _def: { values: string[] } })._def.values]\n return { type: 'enum', required: true, enumValues }\n }\n\n if (def.typeName === 'ZodString') return { type: 'string', required: true }\n if (def.typeName === 'ZodNumber') return { type: 'number', required: true }\n if (def.typeName === 'ZodBoolean') return { type: 'boolean', required: true }\n if (def.typeName === 'ZodObject') return { type: 'object', required: true }\n\n return { type: 'string', required: true }\n}\n\nfunction schemaToOptions(schema: ZodObject<Record<string, ZodType>>): CliCommandConfig['options'] {\n const options: CliCommandConfig['options'] = []\n const shape = schema.shape\n\n for (const [key, zodType] of Object.entries(shape)) {\n const info = extractZodInfo(zodType as ZodType)\n const longFlag = key.replace(/([A-Z])/g, '-$1').toLowerCase()\n\n let flags = `--${longFlag} <value>`\n if (info.type === 'boolean') {\n flags = `--${longFlag}`\n }\n\n let description: string = String(info.type)\n if (info.enumValues) {\n description = `${info.type} (${info.enumValues.join('|')})`\n }\n\n options.push({\n flags,\n description,\n required: info.required,\n defaultValue: info.defaultValue as string | undefined,\n })\n }\n\n return options\n}\n\nfunction pathToApiCall(client: ReturnType<typeof getClient>, _method: string, path: string) {\n const pathParts = path.split('/').filter(Boolean)\n let current: unknown = client.api\n\n for (const part of pathParts) {\n if (part.startsWith('{') && part.endsWith('}')) {\n continue\n }\n current =\n (current as Record<string, unknown>)[part] || (current as Record<string, unknown>)[`:${part}`]\n }\n\n return current as Record<\n string,\n (args: {\n param?: Record<string, string>\n query?: Record<string, string>\n json?: Record<string, unknown>\n }) => Promise<Response>\n >\n}\n\nexport function createCommandFromRoute(config: RouteConfig): CliCommandConfig {\n const options: CliCommandConfig['options'] = []\n const arguments_: CliCommandConfig['arguments'] = []\n\n if (config.params) {\n const shape = config.params.shape\n for (const [key] of Object.entries(shape)) {\n arguments_.push({\n name: key,\n description: `${key} parameter`,\n required: true,\n })\n }\n }\n\n if (config.body) {\n const bodySchema = config.body as ZodObject<Record<string, ZodType>>\n if (bodySchema.shape) {\n options.push(...(schemaToOptions(bodySchema) || []))\n }\n }\n\n if (config.query) {\n options.push(...(schemaToOptions(config.query) || []))\n }\n\n return {\n name: config.command,\n description: config.description,\n options,\n arguments: arguments_,\n action: async (opts: Record<string, unknown>, args: string[]) => {\n const logger = getLogger()\n const client = getClient()\n\n const param: Record<string, string> = {}\n if (config.params) {\n const shape = config.params.shape\n const keys = Object.keys(shape)\n keys.forEach((key, i) => {\n param[key] = args[i] || String(opts[key])\n })\n }\n\n const json: Record<string, unknown> = {}\n if (config.body && opts) {\n const bodySchema = config.body as ZodObject<Record<string, ZodType>>\n if (bodySchema.shape) {\n const shape = bodySchema.shape\n for (const key of Object.keys(shape)) {\n if (opts[key] !== undefined) {\n json[key] = opts[key]\n }\n }\n }\n }\n\n const query: Record<string, string> = {}\n if (config.query && opts) {\n const shape = config.query.shape\n for (const key of Object.keys(shape)) {\n if (opts[key] !== undefined) {\n query[key] = String(opts[key])\n }\n }\n }\n\n const apiCall = pathToApiCall(client, config.method, config.path)\n const methodCall =\n apiCall[`$${config.method.charAt(0).toUpperCase() + config.method.slice(1)}`] ||\n apiCall.$get\n\n const res = await methodCall.call(apiCall, {\n param: Object.keys(param).length > 0 ? param : undefined,\n query: Object.keys(query).length > 0 ? query : undefined,\n json: Object.keys(json).length > 0 ? json : undefined,\n })\n\n const data = await res.json()\n logger.info(JSON.stringify(data, null, 2))\n },\n }\n}\n\nexport function registerAutoCommand(program: Command, config: RouteConfig) {\n const cmd = createCommandFromRoute(config)\n\n const command = program\n .command(cmd.name)\n .description(cmd.description)\n .action(async (firstArg, opts) => {\n const args = typeof firstArg === 'string' ? [firstArg] : []\n const options = (typeof firstArg === 'object' ? firstArg : opts) || {}\n await cmd.action(options, args)\n })\n\n cmd.options?.forEach(opt => {\n if (opt.required) {\n command.requiredOption(opt.flags, opt.description, opt.defaultValue)\n } else {\n command.option(opt.flags, opt.description, opt.defaultValue)\n }\n })\n\n cmd.arguments?.forEach(arg => {\n command.argument(arg.required ? `<${arg.name}>` : `[${arg.name}]`, arg.description)\n })\n}\n\nexport { type RouteConfig, type CliCommandConfig }\n","import { Command } from 'commander'\nimport { registerAutoCommand, type RouteConfig } from '@cli/utils/auto-command'\nimport { z } from '@hono/zod-openapi'\n\nconst TodoStatusSchema = z.enum(['pending', 'in_progress', 'completed'])\n\nconst todoRoutes: RouteConfig[] = [\n {\n method: 'get',\n path: '/todos',\n command: 'list',\n description: 'List all todos',\n },\n {\n method: 'get',\n path: '/todos/{id}',\n command: 'get',\n description: 'Get a todo by ID',\n params: z.object({ id: z.string() }),\n },\n {\n method: 'post',\n path: '/todos',\n command: 'create',\n description: 'Create a new todo',\n body: z.object({\n title: z.string().min(1),\n description: z.string().optional(),\n }),\n },\n {\n method: 'put',\n path: '/todos/{id}',\n command: 'update',\n description: 'Update a todo',\n params: z.object({ id: z.string() }),\n body: z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n status: TodoStatusSchema.optional(),\n }),\n },\n {\n method: 'delete',\n path: '/todos/{id}',\n command: 'delete',\n description: 'Delete a todo',\n params: z.object({ id: z.string() }),\n },\n]\n\nexport function registerTodoCommands(program: Command) {\n const todo = program.command('todo').description('Todo management commands')\n\n for (const route of todoRoutes) {\n registerAutoCommand(todo, route)\n }\n}\n\nexport { todoRoutes }\n","import { Command } from 'commander'\nimport { getClient } from '@cli/utils/api'\nimport { getLogger } from '@cli/utils/logger'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ApiClient = any\n\nexport function registerNotificationCommands(program: Command) {\n const notification = program\n .command('notification')\n .description('Notification management commands')\n\n notification\n .command('list')\n .description('List all notifications')\n .option('--unread-only', 'Show only unread notifications')\n .option('--limit <number>', 'Limit number of results', '20')\n .action(async (options: { unreadOnly?: boolean; limit?: string }) => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n const unreadOnly = Boolean(options.unreadOnly)\n const limit = parseInt(options.limit || '20')\n\n const res = await client.api.notifications.$get({\n query: { unreadOnly: String(unreadOnly), limit: String(limit) },\n })\n const data = await res.json()\n logger.info(JSON.stringify(data, null, 2))\n })\n\n notification\n .command('create')\n .description('Create a new notification')\n .requiredOption('-t, --title <title>', 'Notification title')\n .requiredOption('-m, --message <message>', 'Notification message')\n .option('--type <type>', 'Notification type (info|warning|success|error)', 'info')\n .action(async (options: { title: string; message: string; type: string }) => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n\n const res = await client.api.notifications.$post({\n json: {\n type: options.type as 'info' | 'warning' | 'success' | 'error',\n title: options.title,\n message: options.message,\n },\n })\n const data = await res.json()\n logger.success('Notification created')\n logger.info(JSON.stringify(data, null, 2))\n })\n\n notification\n .command('unread-count')\n .description('Get unread notification count')\n .action(async () => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n const res = await client.api.notifications['unread-count'].$get()\n const data = await res.json()\n logger.info(JSON.stringify(data, null, 2))\n })\n\n notification\n .command('mark-read')\n .description('Mark a notification as read')\n .argument('<id>', 'Notification ID')\n .action(async (id: string) => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n const res = await client.api.notifications[':id'].read.$patch({ param: { id } })\n const data = await res.json()\n logger.success('Notification marked as read')\n logger.info(JSON.stringify(data, null, 2))\n })\n\n notification\n .command('delete')\n .description('Delete a notification')\n .argument('<id>', 'Notification ID')\n .action(async (id: string) => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n const res = await client.api.notifications[':id'].$delete({ param: { id } })\n const data = await res.json()\n logger.success('Notification deleted')\n logger.info(JSON.stringify(data, null, 2))\n })\n}\n","import { Command } from 'commander'\nimport { getBaseUrl, setBaseUrl, getClient } from '@cli/utils/api'\nimport { getLogger } from '@cli/utils/logger'\nimport fs from 'fs'\nimport path from 'path'\nimport os from 'os'\n\nconst CONFIG_DIR = path.join(os.homedir(), '.biomimic')\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json')\n\ninterface Config {\n baseUrl: string\n stats?: {\n totalCalls: number\n lastCallAt?: string\n commands?: Record<string, number>\n }\n [key: string]: string | number | boolean | undefined | Config['stats']\n}\n\nfunction loadConfig(): Config {\n try {\n if (fs.existsSync(CONFIG_FILE)) {\n const content = fs.readFileSync(CONFIG_FILE, 'utf-8')\n return JSON.parse(content)\n }\n } catch {\n // ignore\n }\n return { baseUrl: 'http://localhost:3010' }\n}\n\nfunction saveConfig(config: Config) {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true })\n }\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2))\n}\n\nexport function registerConfigCommands(program: Command) {\n const config = program.command('config').description('CLI configuration and service management')\n\n config\n .command('get')\n .description('Show current configuration')\n .option('-k, --key <key>', 'Get specific config key')\n .action((options: { key?: string }) => {\n const logger = getLogger()\n const cfg = loadConfig()\n\n if (options.key) {\n const value = cfg[options.key]\n logger.info(`${options.key}: ${value ?? 'not set'}`)\n } else {\n logger.info(JSON.stringify(cfg, null, 2))\n }\n })\n\n config\n .command('set')\n .description('Set configuration value')\n .option('-u, --url <url>', 'Set server URL')\n .action((options: { url?: string }) => {\n const logger = getLogger()\n const cfg = loadConfig()\n\n if (options.url) {\n cfg.baseUrl = options.url\n setBaseUrl(options.url)\n logger.success(`Server URL set to: ${options.url}`)\n }\n\n saveConfig(cfg)\n })\n\n config\n .command('url')\n .description('Show or set server URL')\n .argument('[url]', 'New server URL')\n .action((url?: string) => {\n const logger = getLogger()\n if (url) {\n const cfg = loadConfig()\n cfg.baseUrl = url\n setBaseUrl(url)\n saveConfig(cfg)\n logger.success(`Server URL set to: ${url}`)\n } else {\n logger.info(`Current server URL: ${getBaseUrl()}`)\n }\n })\n\n config\n .command('status')\n .description('Check server connection status')\n .action(async () => {\n const logger = getLogger()\n const client = getClient()\n\n try {\n type HealthClient = { health: { $get: () => Promise<Response> } }\n const res = await (client as unknown as HealthClient).health.$get()\n const data = await res.json()\n logger.success('Server is reachable')\n logger.info(JSON.stringify(data, null, 2))\n } catch (error) {\n logger.error(`Server not reachable: ${getBaseUrl()}`)\n logger.error(String(error))\n }\n })\n\n config\n .command('reset')\n .description('Reset configuration to defaults')\n .action(() => {\n const logger = getLogger()\n const defaultConfig: Config = { baseUrl: 'http://localhost:3010' }\n saveConfig(defaultConfig)\n setBaseUrl(defaultConfig.baseUrl)\n logger.success('Configuration reset to defaults')\n })\n\n config\n .command('path')\n .description('Show config file path')\n .action(() => {\n const logger = getLogger()\n logger.info(`Config file: ${CONFIG_FILE}`)\n })\n}\n\nexport { loadConfig, saveConfig, CONFIG_FILE }\n","import type { Command } from 'commander'\nimport { registerTodoCommands } from './todo'\nimport { registerNotificationCommands } from './notification'\nimport { registerConfigCommands } from './config'\n\nexport function registerModules(program: Command) {\n registerTodoCommands(program)\n registerNotificationCommands(program)\n registerConfigCommands(program)\n}\n\nexport { registerTodoCommands, registerNotificationCommands, registerConfigCommands }\n","import { program } from 'commander'\nimport { registerModules } from './modules'\nimport { setBaseUrl } from './utils/api'\nimport { createLogger } from './utils/logger'\n\nprogram\n .name('biomimic')\n .description('Biomimic CLI - RPC service & code generation tools')\n .version('0.1.0')\n .option('-v, --verbose', 'Enable verbose output')\n .option('-u, --url <url>', 'Server URL', 'http://localhost:3010')\n .hook('preAction', thisCommand => {\n const options = thisCommand.opts()\n createLogger({ verbose: options.verbose })\n if (options.url) {\n setBaseUrl(options.url)\n }\n })\n\nregisterModules(program)\n\nprogram.parse()\n"]}
1
+ {"version":3,"sources":["../../src/cli/rpc/client.ts","../../src/cli/utils/api.ts","../../src/cli/utils/logger.ts","../../src/cli/utils/auto-command.ts","../../src/cli/modules/todo/index.ts","../../src/cli/modules/notification/index.ts","../../src/cli/modules/config/index.ts","../../src/cli/modules/index.ts","../../src/generators/template-generator.ts","../../src/generators/file-filter.ts","../../src/generators/route-registry.ts","../../src/generators/client-app.ts","../../src/generators/client-navigation.ts","../../src/generators/admin-app.ts","../../src/generators/db-schema-barrel.ts","../../src/generators/db-init.ts","../../src/generators/server-app.ts","../../src/generators/shared-modules-index.ts","../../src/generators/shared-schemas-index.ts","../../src/generators/middleware-index.ts","../../src/generators/auth-middleware.ts","../../src/generators/auth-utils.ts","../../src/generators/client-components-index.ts","../../src/generators/cli-modules-index.ts","../../src/generators/package-json.ts","../../src/generators/vite-config.ts","../../src/commands/create.ts","../../src/cli/index.ts"],"names":["path","logger","program","exports","MODULE_EXPORTS","pkg","join","__filename","__dirname","fs","generatedFiles","gitignorePath","ignorePatterns","excludePatterns"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","file":"index.js","sourcesContent":["import { hc } from 'hono/client'\n\nexport function createRPCClient(baseUrl: string) {\n return hc(baseUrl)\n}\n","import { createRPCClient } from '../rpc/client'\n\nconst DEFAULT_BASE_URL = 'http://localhost:3010'\n\nlet globalBaseUrl = process.env.BIOMIMIC_API_URL || DEFAULT_BASE_URL\n\nexport function setBaseUrl(url: string) {\n globalBaseUrl = url\n}\n\nexport function getBaseUrl(): string {\n return globalBaseUrl\n}\n\nexport function getClient() {\n return createRPCClient(globalBaseUrl)\n}\n","type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug'\n\ninterface LoggerOptions {\n verbose?: boolean\n debug?: boolean\n}\n\nclass Logger {\n private level: LogLevel = 'info'\n\n constructor(options: LoggerOptions = {}) {\n if (options.debug || process.env.BIOMIMIC_DEBUG === 'true') {\n this.level = 'debug'\n } else if (options.verbose || process.env.BIOMIMIC_VERBOSE === 'true') {\n this.level = 'info'\n }\n }\n\n setLevel(level: LogLevel) {\n this.level = level\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels: LogLevel[] = ['silent', 'error', 'warn', 'info', 'debug']\n return levels.indexOf(level) <= levels.indexOf(this.level)\n }\n\n info(message: string, ...args: unknown[]) {\n if (this.shouldLog('info')) {\n process.stdout.write(`${message}${args.length ? ' ' + args.join(' ') : ''}\\n`)\n }\n }\n\n debug(message: string, ...args: unknown[]) {\n if (this.shouldLog('debug')) {\n process.stdout.write(`[debug] ${message}${args.length ? ' ' + args.join(' ') : ''}\\n`)\n }\n }\n\n warn(message: string) {\n if (this.shouldLog('warn')) {\n process.stderr.write(`[warn] ${message}\\n`)\n }\n }\n\n error(message: string) {\n if (this.shouldLog('error')) {\n process.stderr.write(`[error] ${message}\\n`)\n }\n }\n\n success(message: string, ...args: unknown[]) {\n if (this.shouldLog('info')) {\n process.stdout.write(`✓ ${message}${args.length ? ' ' + args.join(' ') : ''}\\n`)\n }\n }\n\n fail(message: string) {\n if (this.shouldLog('error')) {\n process.stderr.write(`✗ ${message}\\n`)\n }\n }\n}\n\nlet logger: Logger | null = null\n\nexport function createLogger(options: LoggerOptions = {}): Logger {\n logger = new Logger(options)\n return logger\n}\n\nexport function getLogger(): Logger {\n if (!logger) {\n logger = new Logger()\n }\n return logger\n}\n\nexport { Logger, type LogLevel, type LoggerOptions }\n","import { Command } from 'commander'\nimport type { ZodType, ZodObject, ZodOptional } from 'zod'\nimport { getClient } from './api'\nimport { getLogger } from './logger'\n\ntype RouteConfig = {\n method: 'get' | 'post' | 'put' | 'delete' | 'patch'\n path: string\n command: string\n description: string\n params?: ZodObject<Record<string, ZodType>>\n body?: ZodType\n query?: ZodObject<Record<string, ZodType>>\n}\n\ntype CliCommandConfig = {\n name: string\n description: string\n action: (options: Record<string, unknown>, args: string[]) => Promise<void>\n options?: Array<{\n flags: string\n description: string\n required?: boolean\n defaultValue?: string\n }>\n arguments?: Array<{\n name: string\n description: string\n required?: boolean\n }>\n}\n\nfunction extractZodInfo(schema: ZodType): {\n type: 'string' | 'number' | 'boolean' | 'enum' | 'object'\n required: boolean\n enumValues?: string[]\n defaultValue?: unknown\n} {\n const def = (schema as unknown as { _def: { typeName: string } })._def\n\n if (def.typeName === 'ZodOptional') {\n const inner = (schema as ZodOptional<ZodType>)._def.innerType\n const info = extractZodInfo(inner)\n return { ...info, required: false }\n }\n\n if (def.typeName === 'ZodDefault') {\n const innerDef = (\n schema as unknown as { _def: { innerType: ZodType; defaultValue: () => unknown } }\n )._def\n const defaultValue = innerDef.defaultValue()\n const info = extractZodInfo(innerDef.innerType)\n return { ...info, required: false, defaultValue }\n }\n\n if (def.typeName === 'ZodEnum') {\n const enumValues = [...(schema as unknown as { _def: { values: string[] } })._def.values]\n return { type: 'enum', required: true, enumValues }\n }\n\n if (def.typeName === 'ZodString') return { type: 'string', required: true }\n if (def.typeName === 'ZodNumber') return { type: 'number', required: true }\n if (def.typeName === 'ZodBoolean') return { type: 'boolean', required: true }\n if (def.typeName === 'ZodObject') return { type: 'object', required: true }\n\n return { type: 'string', required: true }\n}\n\nfunction schemaToOptions(schema: ZodObject<Record<string, ZodType>>): CliCommandConfig['options'] {\n const options: CliCommandConfig['options'] = []\n const shape = schema.shape\n\n for (const [key, zodType] of Object.entries(shape)) {\n const info = extractZodInfo(zodType as ZodType)\n const longFlag = key.replace(/([A-Z])/g, '-$1').toLowerCase()\n\n let flags = `--${longFlag} <value>`\n if (info.type === 'boolean') {\n flags = `--${longFlag}`\n }\n\n let description: string = String(info.type)\n if (info.enumValues) {\n description = `${info.type} (${info.enumValues.join('|')})`\n }\n\n options.push({\n flags,\n description,\n required: info.required,\n defaultValue: info.defaultValue as string | undefined,\n })\n }\n\n return options\n}\n\nfunction pathToApiCall(client: ReturnType<typeof getClient>, _method: string, path: string) {\n const pathParts = path.split('/').filter(Boolean)\n let current: unknown = client.api\n\n for (const part of pathParts) {\n if (part.startsWith('{') && part.endsWith('}')) {\n continue\n }\n current =\n (current as Record<string, unknown>)[part] || (current as Record<string, unknown>)[`:${part}`]\n }\n\n return current as Record<\n string,\n (args: {\n param?: Record<string, string>\n query?: Record<string, string>\n json?: Record<string, unknown>\n }) => Promise<Response>\n >\n}\n\nexport function createCommandFromRoute(config: RouteConfig): CliCommandConfig {\n const options: CliCommandConfig['options'] = []\n const arguments_: CliCommandConfig['arguments'] = []\n\n if (config.params) {\n const shape = config.params.shape\n for (const [key] of Object.entries(shape)) {\n arguments_.push({\n name: key,\n description: `${key} parameter`,\n required: true,\n })\n }\n }\n\n if (config.body) {\n const bodySchema = config.body as ZodObject<Record<string, ZodType>>\n if (bodySchema.shape) {\n options.push(...(schemaToOptions(bodySchema) || []))\n }\n }\n\n if (config.query) {\n options.push(...(schemaToOptions(config.query) || []))\n }\n\n return {\n name: config.command,\n description: config.description,\n options,\n arguments: arguments_,\n action: async (opts: Record<string, unknown>, args: string[]) => {\n const logger = getLogger()\n const client = getClient()\n\n const param: Record<string, string> = {}\n if (config.params) {\n const shape = config.params.shape\n const keys = Object.keys(shape)\n keys.forEach((key, i) => {\n param[key] = args[i] || String(opts[key])\n })\n }\n\n const json: Record<string, unknown> = {}\n if (config.body && opts) {\n const bodySchema = config.body as ZodObject<Record<string, ZodType>>\n if (bodySchema.shape) {\n const shape = bodySchema.shape\n for (const key of Object.keys(shape)) {\n if (opts[key] !== undefined) {\n json[key] = opts[key]\n }\n }\n }\n }\n\n const query: Record<string, string> = {}\n if (config.query && opts) {\n const shape = config.query.shape\n for (const key of Object.keys(shape)) {\n if (opts[key] !== undefined) {\n query[key] = String(opts[key])\n }\n }\n }\n\n const apiCall = pathToApiCall(client, config.method, config.path)\n const methodCall =\n apiCall[`$${config.method.charAt(0).toUpperCase() + config.method.slice(1)}`] ||\n apiCall.$get\n\n const res = await methodCall.call(apiCall, {\n param: Object.keys(param).length > 0 ? param : undefined,\n query: Object.keys(query).length > 0 ? query : undefined,\n json: Object.keys(json).length > 0 ? json : undefined,\n })\n\n const data = await res.json()\n logger.info(JSON.stringify(data, null, 2))\n },\n }\n}\n\nexport function registerAutoCommand(program: Command, config: RouteConfig) {\n const cmd = createCommandFromRoute(config)\n\n const command = program\n .command(cmd.name)\n .description(cmd.description)\n .action(async (firstArg, opts) => {\n const args = typeof firstArg === 'string' ? [firstArg] : []\n const options = (typeof firstArg === 'object' ? firstArg : opts) || {}\n await cmd.action(options, args)\n })\n\n cmd.options?.forEach(opt => {\n if (opt.required) {\n command.requiredOption(opt.flags, opt.description, opt.defaultValue)\n } else {\n command.option(opt.flags, opt.description, opt.defaultValue)\n }\n })\n\n cmd.arguments?.forEach(arg => {\n command.argument(arg.required ? `<${arg.name}>` : `[${arg.name}]`, arg.description)\n })\n}\n\nexport { type RouteConfig, type CliCommandConfig }\n","import { Command } from 'commander'\nimport { registerAutoCommand, type RouteConfig } from '@cli/utils/auto-command'\nimport { z } from '@hono/zod-openapi'\n\nconst TodoStatusSchema = z.enum(['pending', 'in_progress', 'completed'])\n\nconst todoRoutes: RouteConfig[] = [\n {\n method: 'get',\n path: '/todos',\n command: 'list',\n description: 'List all todos',\n },\n {\n method: 'get',\n path: '/todos/{id}',\n command: 'get',\n description: 'Get a todo by ID',\n params: z.object({ id: z.string() }),\n },\n {\n method: 'post',\n path: '/todos',\n command: 'create',\n description: 'Create a new todo',\n body: z.object({\n title: z.string().min(1),\n description: z.string().optional(),\n }),\n },\n {\n method: 'put',\n path: '/todos/{id}',\n command: 'update',\n description: 'Update a todo',\n params: z.object({ id: z.string() }),\n body: z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n status: TodoStatusSchema.optional(),\n }),\n },\n {\n method: 'delete',\n path: '/todos/{id}',\n command: 'delete',\n description: 'Delete a todo',\n params: z.object({ id: z.string() }),\n },\n]\n\nexport function registerTodoCommands(program: Command) {\n const todo = program.command('todo').description('Todo management commands')\n\n for (const route of todoRoutes) {\n registerAutoCommand(todo, route)\n }\n}\n\nexport { todoRoutes }\n","import { Command } from 'commander'\nimport { getClient } from '@cli/utils/api'\nimport { getLogger } from '@cli/utils/logger'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ApiClient = any\n\nexport function registerNotificationCommands(program: Command) {\n const notification = program\n .command('notification')\n .description('Notification management commands')\n\n notification\n .command('list')\n .description('List all notifications')\n .option('--unread-only', 'Show only unread notifications')\n .option('--limit <number>', 'Limit number of results', '20')\n .action(async (options: { unreadOnly?: boolean; limit?: string }) => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n const unreadOnly = Boolean(options.unreadOnly)\n const limit = parseInt(options.limit || '20')\n\n const res = await client.api.notifications.$get({\n query: { unreadOnly: String(unreadOnly), limit: String(limit) },\n })\n const data = await res.json()\n logger.info(JSON.stringify(data, null, 2))\n })\n\n notification\n .command('create')\n .description('Create a new notification')\n .requiredOption('-t, --title <title>', 'Notification title')\n .requiredOption('-m, --message <message>', 'Notification message')\n .option('--type <type>', 'Notification type (info|warning|success|error)', 'info')\n .action(async (options: { title: string; message: string; type: string }) => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n\n const res = await client.api.notifications.$post({\n json: {\n type: options.type as 'info' | 'warning' | 'success' | 'error',\n title: options.title,\n message: options.message,\n },\n })\n const data = await res.json()\n logger.success('Notification created')\n logger.info(JSON.stringify(data, null, 2))\n })\n\n notification\n .command('unread-count')\n .description('Get unread notification count')\n .action(async () => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n const res = await client.api.notifications['unread-count'].$get()\n const data = await res.json()\n logger.info(JSON.stringify(data, null, 2))\n })\n\n notification\n .command('mark-read')\n .description('Mark a notification as read')\n .argument('<id>', 'Notification ID')\n .action(async (id: string) => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n const res = await client.api.notifications[':id'].read.$patch({ param: { id } })\n const data = await res.json()\n logger.success('Notification marked as read')\n logger.info(JSON.stringify(data, null, 2))\n })\n\n notification\n .command('delete')\n .description('Delete a notification')\n .argument('<id>', 'Notification ID')\n .action(async (id: string) => {\n const logger = getLogger()\n const client = getClient() as ApiClient\n const res = await client.api.notifications[':id'].$delete({ param: { id } })\n const data = await res.json()\n logger.success('Notification deleted')\n logger.info(JSON.stringify(data, null, 2))\n })\n}\n","import { Command } from 'commander'\nimport { getBaseUrl, setBaseUrl, getClient } from '@cli/utils/api'\nimport { getLogger } from '@cli/utils/logger'\nimport fs from 'fs'\nimport path from 'path'\nimport os from 'os'\n\nconst CONFIG_DIR = path.join(os.homedir(), '.biomimic')\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json')\n\ninterface Config {\n baseUrl: string\n stats?: {\n totalCalls: number\n lastCallAt?: string\n commands?: Record<string, number>\n }\n [key: string]: string | number | boolean | undefined | Config['stats']\n}\n\nfunction loadConfig(): Config {\n try {\n if (fs.existsSync(CONFIG_FILE)) {\n const content = fs.readFileSync(CONFIG_FILE, 'utf-8')\n return JSON.parse(content)\n }\n } catch {\n // ignore\n }\n return { baseUrl: 'http://localhost:3010' }\n}\n\nfunction saveConfig(config: Config) {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true })\n }\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2))\n}\n\nexport function registerConfigCommands(program: Command) {\n const config = program.command('config').description('CLI configuration and service management')\n\n config\n .command('get')\n .description('Show current configuration')\n .option('-k, --key <key>', 'Get specific config key')\n .action((options: { key?: string }) => {\n const logger = getLogger()\n const cfg = loadConfig()\n\n if (options.key) {\n const value = cfg[options.key]\n logger.info(`${options.key}: ${value ?? 'not set'}`)\n } else {\n logger.info(JSON.stringify(cfg, null, 2))\n }\n })\n\n config\n .command('set')\n .description('Set configuration value')\n .option('-u, --url <url>', 'Set server URL')\n .action((options: { url?: string }) => {\n const logger = getLogger()\n const cfg = loadConfig()\n\n if (options.url) {\n cfg.baseUrl = options.url\n setBaseUrl(options.url)\n logger.success(`Server URL set to: ${options.url}`)\n }\n\n saveConfig(cfg)\n })\n\n config\n .command('url')\n .description('Show or set server URL')\n .argument('[url]', 'New server URL')\n .action((url?: string) => {\n const logger = getLogger()\n if (url) {\n const cfg = loadConfig()\n cfg.baseUrl = url\n setBaseUrl(url)\n saveConfig(cfg)\n logger.success(`Server URL set to: ${url}`)\n } else {\n logger.info(`Current server URL: ${getBaseUrl()}`)\n }\n })\n\n config\n .command('status')\n .description('Check server connection status')\n .action(async () => {\n const logger = getLogger()\n const client = getClient()\n\n try {\n type HealthClient = { health: { $get: () => Promise<Response> } }\n const res = await (client as unknown as HealthClient).health.$get()\n const data = await res.json()\n logger.success('Server is reachable')\n logger.info(JSON.stringify(data, null, 2))\n } catch (error) {\n logger.error(`Server not reachable: ${getBaseUrl()}`)\n logger.error(String(error))\n }\n })\n\n config\n .command('reset')\n .description('Reset configuration to defaults')\n .action(() => {\n const logger = getLogger()\n const defaultConfig: Config = { baseUrl: 'http://localhost:3010' }\n saveConfig(defaultConfig)\n setBaseUrl(defaultConfig.baseUrl)\n logger.success('Configuration reset to defaults')\n })\n\n config\n .command('path')\n .description('Show config file path')\n .action(() => {\n const logger = getLogger()\n logger.info(`Config file: ${CONFIG_FILE}`)\n })\n}\n\nexport { loadConfig, saveConfig, CONFIG_FILE }\n","import type { Command } from 'commander'\nimport { registerTodoCommands } from './todo'\nimport { registerNotificationCommands } from './notification'\nimport { registerConfigCommands } from './config'\n\nexport function registerModules(program: Command) {\n registerTodoCommands(program)\n registerNotificationCommands(program)\n registerConfigCommands(program)\n}\n\nexport { registerTodoCommands, registerNotificationCommands, registerConfigCommands }\n","import { existsSync, readdirSync, statSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nexport interface ModuleManifest {\n name: string\n description: string\n category: 'core' | 'communication' | 'business' | 'system'\n dependsOn: string[]\n routes: {\n client?: { importPath: string; exportName: string }\n admin?: { importPath: string; exportName: string }[]\n standalone?: { importPath: string; exportName: string; mountPath: string }\n }\n sharedSchemas?: { path: string; additionalPaths?: string[] }\n clientPages?: { name: string; route: string }[]\n adminPages?: {\n name: string\n route: string\n isPublic?: boolean\n requiredPermission?: string\n }[]\n dbSchemas?: { files: string[]; hasSeed: boolean }\n dependencies?: Record<string, string>\n clientStores?: string[]\n providesMiddleware?: {\n name: string\n importPath: string\n appliesTo: string\n }[]\n hasSSE?: boolean\n hasWebSocket?: boolean\n}\n\nexport interface TemplatePreset {\n id: string\n name: string\n description: string\n modules: string[]\n}\n\nexport interface ResolvedPreset {\n preset: TemplatePreset\n modules: Map<string, ModuleManifest>\n hasAdmin: boolean\n hasClient: boolean\n hasSSE: boolean\n hasWebSocket: boolean\n hasPermission: boolean\n hasCaptcha: boolean\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype TsImportFn = (id: string, opts: { parentURL: string }) => Promise<any>\n\nlet tsImportFn: TsImportFn | undefined\n\nasync function getTsImport(): Promise<TsImportFn> {\n if (tsImportFn) return tsImportFn\n const { tsImport } = await import('tsx/esm/api')\n tsImportFn = tsImport\n return tsImportFn\n}\n\nexport async function loadManifests(templateDir: string): Promise<Map<string, ModuleManifest>> {\n const tsImport = await getTsImport()\n const serverDir = join(templateDir, 'src', 'server')\n const modules = new Map<string, ModuleManifest>()\n\n const entries = readdirSync(serverDir)\n const moduleDirs = entries.filter(\n e => e.startsWith('module-') && statSync(join(serverDir, e)).isDirectory()\n )\n\n const parentURL = pathToFileURL(join(serverDir, 'dummy.ts')).href\n\n for (const dir of moduleDirs) {\n const manifestPath = join(serverDir, dir, 'module.ts')\n if (!existsSync(manifestPath)) continue\n\n try {\n const mod = await tsImport(manifestPath, { parentURL })\n const manifest: ModuleManifest = mod.default\n if (!manifest || !manifest.name) {\n console.error(`❌ Invalid manifest in ${dir}: missing name`)\n continue\n }\n modules.set(manifest.name, manifest)\n } catch (err) {\n console.error(`❌ Failed to load manifest from ${dir}:`, err)\n }\n }\n\n return modules\n}\n\nexport async function loadPresets(templateDir: string): Promise<TemplatePreset[]> {\n const configPath = join(templateDir, 'modules.config.ts')\n if (!existsSync(configPath)) {\n return [getDefaultPreset()]\n }\n\n try {\n const tsImport = await getTsImport()\n const parentURL = pathToFileURL(configPath).href\n const mod = await tsImport(configPath, { parentURL })\n if (mod.TEMPLATE_PRESETS) {\n return mod.TEMPLATE_PRESETS\n }\n } catch (err) {\n console.error('❌ Failed to load presets:', err)\n }\n\n return [getDefaultPreset()]\n}\n\nfunction getDefaultPreset(): TemplatePreset {\n return {\n id: 'fullstack-admin',\n name: 'Full Admin',\n description: 'All modules included',\n modules: [\n 'todos',\n 'chat',\n 'notifications',\n 'file',\n 'captcha',\n 'permission',\n 'admin',\n 'order',\n 'ticket',\n 'dispute',\n 'content',\n ],\n }\n}\n\nexport function resolvePreset(\n preset: TemplatePreset,\n allManifests: Map<string, ModuleManifest>\n): ResolvedPreset {\n const modules = new Map<string, ModuleManifest>()\n\n const toProcess = [...preset.modules]\n const processed = new Set<string>()\n\n while (toProcess.length > 0) {\n const name = toProcess.shift()!\n if (processed.has(name)) continue\n processed.add(name)\n\n const manifest = allManifests.get(name)\n if (manifest) {\n modules.set(name, manifest)\n for (const dep of manifest.dependsOn) {\n if (!processed.has(dep)) {\n toProcess.push(dep)\n }\n }\n }\n }\n\n let hasSSE = false\n let hasWebSocket = false\n let hasAdmin = false\n\n for (const manifest of modules.values()) {\n if (manifest.hasSSE) hasSSE = true\n if (manifest.hasWebSocket) hasWebSocket = true\n if (manifest.adminPages && manifest.adminPages.length > 0) hasAdmin = true\n if (manifest.routes.admin && manifest.routes.admin.length > 0) hasAdmin = true\n }\n\n return {\n preset,\n modules,\n hasAdmin,\n hasClient: true,\n hasSSE,\n hasWebSocket,\n hasPermission: modules.has('permission'),\n hasCaptcha: modules.has('captcha'),\n }\n}\n\nexport function getModuleDirectories(resolved: ResolvedPreset): string[] {\n const dirs: string[] = []\n for (const [name] of resolved.modules) {\n dirs.push(`module-${name}`)\n }\n return dirs\n}\n\nexport function getSharedModuleDirs(resolved: ResolvedPreset): string[] {\n const dirs: string[] = []\n for (const [, manifest] of resolved.modules) {\n if (manifest.sharedSchemas) {\n dirs.push(manifest.sharedSchemas.path)\n }\n }\n return dirs\n}\n\nexport function getDbSchemaFiles(resolved: ResolvedPreset): string[] {\n const files: string[] = []\n for (const [, manifest] of resolved.modules) {\n if (manifest.dbSchemas) {\n files.push(...manifest.dbSchemas.files)\n }\n }\n return files\n}\n\nexport function getClientPages(resolved: ResolvedPreset): { name: string; route: string }[] {\n const pages: { name: string; route: string }[] = []\n for (const [, manifest] of resolved.modules) {\n if (manifest.clientPages) {\n pages.push(...manifest.clientPages)\n }\n }\n return pages\n}\n\nexport function getAdminPages(resolved: ResolvedPreset): ModuleManifest['adminPages'] {\n const pages: ModuleManifest['adminPages'] = []\n for (const [, manifest] of resolved.modules) {\n if (manifest.adminPages) {\n pages.push(...manifest.adminPages)\n }\n }\n return pages\n}\n\nexport function getClientStores(resolved: ResolvedPreset): string[] {\n const stores: string[] = []\n for (const [, manifest] of resolved.modules) {\n if (manifest.clientStores) {\n stores.push(...manifest.clientStores)\n }\n }\n return stores\n}\n\nexport function getDefaultRoute(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved)\n if (pages.length > 0) {\n return pages[0].route\n }\n return '/'\n}\n","import type { ModuleManifest } from './template-generator'\nimport type { ResolvedPreset } from './template-generator'\n\nexport interface FileFilterRule {\n pattern: string\n action: 'include' | 'exclude'\n condition: string\n}\n\nexport function getExcludePatterns(\n resolved: ResolvedPreset,\n allManifests: Map<string, ModuleManifest>\n): string[] {\n const excludes: string[] = []\n\n for (const [name, manifest] of allManifests) {\n if (resolved.modules.has(name)) continue\n\n excludes.push(`src/server/module-${name}`)\n\n if (manifest.sharedSchemas) {\n excludes.push(`src/shared/modules/${manifest.sharedSchemas.path}`)\n if (manifest.sharedSchemas.additionalPaths) {\n for (const extra of manifest.sharedSchemas.additionalPaths) {\n excludes.push(`src/shared/modules/${extra}`)\n }\n }\n }\n\n if (manifest.dbSchemas) {\n for (const file of manifest.dbSchemas.files) {\n excludes.push(`src/server/db/schema/${file}.ts`)\n }\n }\n\n if (manifest.clientPages) {\n for (const page of manifest.clientPages) {\n excludes.push(`src/client/pages/${page.name}.tsx`)\n excludes.push(`src/client/pages/__tests__/${page.name}.test.tsx`)\n }\n }\n\n if (manifest.clientStores) {\n for (const store of manifest.clientStores) {\n excludes.push(`src/client/stores/${store}.ts`)\n excludes.push(`src/client/stores/__tests__/${store}.test.ts`)\n }\n }\n\n if (manifest.adminPages) {\n for (const page of manifest.adminPages) {\n excludes.push(`src/admin/pages/${page.name}.tsx`)\n excludes.push(`src/admin/pages/__tests__/${page.name}.test.tsx`)\n }\n }\n\n if (manifest.providesMiddleware) {\n for (const mw of manifest.providesMiddleware) {\n excludes.push(`src/server/middleware/${mw.name}.ts`)\n excludes.push(`src/server/middleware/__tests__/${mw.name}.test.ts`)\n }\n }\n\n if (name === 'notifications') {\n excludes.push('src/cli/modules/notification')\n }\n }\n\n if (!resolved.modules.has('admin')) {\n excludes.push('src/client/components/AuthButton.tsx')\n excludes.push('src/admin')\n excludes.push('admin.html')\n excludes.push('auth-inject.html')\n excludes.push('src/client/components/__tests__/AuthButton.test.tsx')\n // CLI depends on admin API - exclude when admin is not present\n excludes.push('src/cli')\n // auth.ts imports from @shared/modules/admin - generate a version without admin deps\n excludes.push('src/server/utils/auth.ts')\n }\n\n if (!resolved.hasPermission) {\n excludes.push('src/server/utils/permission-utils.ts')\n excludes.push('src/server/middleware/__tests__/auth-simple.test.ts')\n excludes.push('src/server/middleware/__tests__/auth.test.ts')\n excludes.push('src/server/middleware/__tests__/error-response-format.test.ts')\n excludes.push('src/server/utils/__tests__/auth.test.ts')\n } else if (!resolved.modules.has('admin')) {\n excludes.push('src/server/middleware/__tests__/error-response-format.test.ts')\n }\n\n if (!resolved.modules.has('captcha')) {\n excludes.push('src/server/utils/__tests__/captcha.test.ts')\n }\n\n return excludes\n}\n\nexport function getGeneratedFiles(resolved: ResolvedPreset): string[] {\n const files: string[] = [\n 'src/server/route-registry.ts',\n 'src/server/db/schema/index.ts',\n 'src/client/App.tsx',\n 'src/client/components/Navigation.tsx',\n 'src/shared/modules/index.ts',\n 'src/shared/schemas/index.ts',\n 'src/server/middleware/index.ts',\n 'src/client/components/index.ts',\n ]\n\n if (resolved.modules.has('admin')) {\n files.push('src/admin/App.tsx')\n files.push('src/cli/modules/index.ts')\n }\n\n if (!resolved.hasPermission) {\n files.push('src/server/middleware/auth.ts')\n files.push('src/server/utils/auth.ts')\n }\n\n if (!resolved.modules.has('admin') && resolved.hasPermission) {\n files.push('src/server/utils/auth.ts')\n }\n\n files.push('src/server/app.ts')\n\n if (!resolved.modules.has('admin')) {\n files.push('vite.config.ts')\n }\n\n const seedModules = ['order', 'ticket', 'dispute', 'content']\n if (seedModules.some(m => !resolved.modules.has(m)) || !resolved.hasPermission) {\n files.push('src/server/db/init.ts')\n }\n\n return files\n}\n","import type { ResolvedPreset } from \"./template-generator\";\n\nexport function generateRouteRegistry(resolved: ResolvedPreset): string {\n const imports: string[] = [\n `import { OpenAPIHono } from '@hono/zod-openapi'`,\n `import { rateLimitMiddleware } from './middleware/rate-limit'`,\n ];\n\n const clientRoutes: string[] = [];\n const adminRoutes: string[] = [];\n\n const moduleEntries = [...resolved.modules.entries()];\n\n for (const [name, manifest] of moduleEntries) {\n const moduleDir = `module-${name}`;\n\n if (manifest.routes.client) {\n const { importPath, exportName } = manifest.routes.client;\n imports.push(\n `import { ${exportName} } from './${moduleDir}/${importPath.replace(/^\\.\\//, \"\")}'`,\n );\n clientRoutes.push(` .route('/api', ${exportName})`);\n }\n\n if (manifest.routes.admin) {\n for (const route of manifest.routes.admin) {\n const { importPath, exportName } = route;\n imports.push(\n `import { ${exportName} } from './${moduleDir}/${importPath.replace(/^\\.\\//, \"\")}'`,\n );\n adminRoutes.push(` .route('/api', ${exportName})`);\n }\n }\n }\n\n let content = imports.join(\"\\n\") + \"\\n\\n\";\n\n content += `const apiRateLimit = rateLimitMiddleware({\\n`;\n content += ` windowMs: 60 * 1000,\\n`;\n content += ` max: 100,\\n`;\n content += `})\\n\\n`;\n\n if (clientRoutes.length > 0) {\n content += `// client API routes\\n`;\n content += `export const clientApiRoutes = new OpenAPIHono()\\n`;\n content += ` .use('*', apiRateLimit)\\n`;\n content += clientRoutes.join(\"\\n\") + \"\\n\\n\";\n } else {\n content += `// No client modules selected\\n`;\n content += `export const clientApiRoutes = new OpenAPIHono()\\n\\n`;\n }\n\n if (adminRoutes.length > 0) {\n content += `// admin API routes\\n`;\n content += `export const adminApiRoutes = new OpenAPIHono()\\n`;\n content += adminRoutes.join(\"\\n\") + \"\\n\\n\";\n } else {\n content += `// No admin modules selected\\n`;\n content += `export const adminApiRoutes = new OpenAPIHono()\\n\\n`;\n }\n\n content += `export type ClientApiRoutes = typeof clientApiRoutes\\n`;\n content += `export type AdminApiRoutes = typeof adminApiRoutes\\n`;\n\n return content;\n}\n","/**\n * Generates client/App.tsx content based on resolved preset\n */\nimport type { ResolvedPreset } from \"./template-generator\";\nimport { getClientPages, getDefaultRoute } from \"./template-generator\";\n\nexport function generateClientApp(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved);\n const defaultRoute = getDefaultRoute(resolved);\n\n // Build imports\n const imports = [\n `import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'`,\n `import { Layout } from './Layout'`,\n ];\n\n for (const page of pages) {\n imports.push(`import { ${page.name} } from './pages/${page.name}'`);\n }\n\n // Build routes\n const routeElements: string[] = [];\n routeElements.push(\n ` <Route path=\"/\" element={<Navigate to=\"${defaultRoute}\" replace />} />`,\n );\n\n for (const page of pages) {\n routeElements.push(\n ` <Route path=\"${page.route}\" element={<${page.name} />} />`,\n );\n }\n\n return `${imports.join(\"\\n\")}\n\nexport function App() {\n return (\n <BrowserRouter>\n <Layout>\n <Routes>\n${routeElements.join(\"\\n\")}\n </Routes>\n </Layout>\n </BrowserRouter>\n )\n}\n`;\n}\n","import type { ResolvedPreset } from './template-generator'\nimport { getClientPages } from './template-generator'\n\nconst DEFAULT_ICON = 'Circle'\n\nconst ICON_MAP: Record<string, string> = {\n TodoPage: 'CheckCircle',\n NotificationPage: 'Bell',\n WebSocketPage: 'Plug',\n ContentListPage: 'FileText',\n}\n\nexport function generateClientNavigation(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved).filter(p => !p.route.includes(':'))\n\n const iconsNeeded = new Set<string>()\n iconsNeeded.add('Rocket')\n iconsNeeded.add('Github')\n for (const page of pages) {\n const icon = ICON_MAP[page.name] || DEFAULT_ICON\n iconsNeeded.add(icon)\n }\n\n const routeKeys: string[] = []\n const routeEntries: string[] = []\n\n for (const page of pages) {\n const key = page.route.replace(/^\\//, '').replace(/\\//g, '-')\n routeKeys.push(`'${key}'`)\n const icon = ICON_MAP[page.name] || DEFAULT_ICON\n\n const label =\n key === 'todos'\n ? 'Todo List'\n : key === 'notifications'\n ? 'Notifications'\n : key === 'websocket'\n ? 'WebSocket'\n : key.charAt(0).toUpperCase() + key.slice(1)\n\n const safeKey = /^[a-zA-Z0-9_]+$/.test(key) ? key : `'${key}'`\n routeEntries.push(` ${safeKey}: { label: '${label}', icon: ${icon}, path: '${page.route}' },`)\n }\n\n const iconsStr = [...iconsNeeded].join(', ')\n\n const authButtonImport = resolved.modules.has('admin')\n ? `\\nimport { AuthButton } from './AuthButton'`\n : ''\n const authButtonElement = resolved.modules.has('admin') ? `\\n <AuthButton />` : ''\n\n return `import { NavLink } from 'react-router-dom'\nimport { ${iconsStr} } from 'lucide-react'${authButtonImport}\n\ntype RouteKey = ${routeKeys.join(' | ')}\n\nconst routes: Record<\n RouteKey,\n { label: string; icon: React.FC<{ className?: string }>; path: string }\n> = {\n${routeEntries.join('\\n')}\n}\n\nexport const Navigation: React.FC = () => {\n return (\n <nav className=\"bg-white border-b border-gray-200 sticky top-0 z-50\" data-testid=\"app-nav\">\n <div className=\"max-w-6xl mx-auto px-6 h-16 flex items-center justify-between\">\n <div className=\"flex items-center gap-8\">\n <h1\n className=\"text-xl font-bold text-gray-900 flex items-center gap-2\"\n data-testid=\"app-title\"\n >\n <Rocket className=\"w-6 h-6 text-blue-500\" />\n Biomimic App\n </h1>\n <div className=\"flex items-center gap-1\">\n {(Object.keys(routes) as RouteKey[]).map(route => {\n const Icon = routes[route].icon\n return (\n <NavLink\n key={route}\n to={routes[route].path}\n data-testid={\\`nav-\\${route}-button\\`}\n className={({ isActive }) =>\n \\`flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-colors \\${\n isActive ? 'bg-blue-50 text-blue-600' : 'text-gray-600 hover:bg-gray-100'\n }\\`\n }\n >\n <Icon className=\"w-4 h-4\" />\n {routes[route].label}\n </NavLink>\n )\n })}\n </div>\n </div>\n <div className=\"flex items-center gap-4\">${authButtonElement}\n <a\n href=\"https://github.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid=\"github-link\"\n className=\"text-gray-400 hover:text-gray-600 transition-colors\"\n >\n <Github className=\"w-5 h-5\" />\n </a>\n </div>\n </div>\n </nav>\n )\n}\n`\n}\n","/**\n * Generates admin/App.tsx content based on resolved preset\n */\nimport type { ResolvedPreset } from \"./template-generator\";\nimport { getAdminPages } from \"./template-generator\";\n\nexport function generateAdminApp(resolved: ResolvedPreset): string | null {\n if (!resolved.hasAdmin) return null;\n\n const pages = getAdminPages(resolved) ?? [];\n if (pages.length === 0) return null;\n\n // Separate public and protected pages\n const publicPages = pages.filter((p) => p.isPublic);\n const protectedPages = pages.filter((p) => !p.isPublic);\n\n // Build imports\n const imports = [\n `import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'`,\n `import { ConfigProvider } from 'antd'`,\n `import { Layout } from './layouts/Layout'`,\n ];\n\n for (const page of pages) {\n imports.push(`import { ${page.name} } from './pages/${page.name}'`);\n }\n\n // CaptchaModal only if captcha module is included\n const captchaImport = resolved.hasCaptcha ? \", CaptchaModal\" : \"\";\n imports.push(`import { ProtectedRoute${captchaImport} } from './components'`);\n\n // Build protected route elements\n const protectedRouteElements = protectedPages.map(\n (p) =>\n ` <Route path=\"${p.route}\" element={<${p.name} />} />`,\n );\n\n const defaultProtectedRoute =\n protectedPages.length > 0 ? protectedPages[0].route : \"/\";\n\n const captchaElement = resolved.hasCaptcha\n ? `\\n <CaptchaModal />`\n : \"\";\n\n const publicRouteLines = publicPages.map(\n (p) => ` <Route path=\"${p.route}\" element={<${p.name} />} />`,\n );\n\n return `${imports.join(\"\\n\")}\n\nexport const App: React.FC = () => {\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: '#1890ff',\n },\n }}\n >\n <BrowserRouter basename=\"/admin\">\n <Routes>\n${publicRouteLines.join(\"\\n\")}\n <Route\n path=\"/*\"\n element={\n <ProtectedRoute>\n <Layout>\n <Routes>\n <Route path=\"/\" element={<Navigate to=\"${defaultProtectedRoute}\" replace />} />\n${protectedRouteElements.join(\"\\n\")}\n <Route path=\"/system/monitor\" element={<div className=\"p-6\"><h2 className=\"text-xl font-semibold\">System Monitor</h2><p className=\"text-gray-500 mt-2\">Coming soon...</p></div>} />\n </Routes>\n </Layout>\n </ProtectedRoute>\n }\n />\n </Routes>${captchaElement}\n </BrowserRouter>\n </ConfigProvider>\n )\n}\n`;\n}\n","/**\n * Generates server/db/schema/index.ts barrel file based on resolved preset\n */\nimport type { ResolvedPreset } from \"./template-generator\";\nimport { getDbSchemaFiles } from \"./template-generator\";\n\nexport function generateDbSchemaBarrel(resolved: ResolvedPreset): string {\n const files = getDbSchemaFiles(resolved);\n\n const exports = files.map((f) => `export * from './${f}'`);\n\n return exports.join(\"\\n\") + \"\\n\";\n}\n","import type { ResolvedPreset } from './template-generator'\n\ninterface SeedModule {\n module: string\n importLine: string\n call: string\n}\n\nconst SEED_MODULES: SeedModule[] = [\n {\n module: 'order',\n importLine: \"import { seedOrdersIfEmpty } from '../module-order/services/order-service'\",\n call: 'seedOrdersIfEmpty()',\n },\n {\n module: 'ticket',\n importLine: \"import { seedTicketsIfEmpty } from '../module-ticket/services/ticket-service'\",\n call: 'seedTicketsIfEmpty()',\n },\n {\n module: 'dispute',\n importLine: \"import { seedDisputesIfEmpty } from '../module-dispute/services/dispute-service'\",\n call: 'seedDisputesIfEmpty()',\n },\n {\n module: 'content',\n importLine: \"import { seedContentsIfEmpty } from '../module-content/services/content-service'\",\n call: 'seedContentsIfEmpty()',\n },\n]\n\nconst INITIAL_PERMISSIONS = `const initialPermissions = [\n {\n id: 'perm_user_view',\n code: 'user:view',\n name: '查看用户',\n label: '查看用户',\n category: 'user',\n sortOrder: 1,\n },\n {\n id: 'perm_user_create',\n code: 'user:create',\n name: '创建用户',\n label: '创建用户',\n category: 'user',\n sortOrder: 2,\n },\n {\n id: 'perm_user_edit',\n code: 'user:edit',\n name: '编辑用户',\n label: '编辑用户',\n category: 'user',\n sortOrder: 3,\n },\n {\n id: 'perm_user_delete',\n code: 'user:delete',\n name: '删除用户',\n label: '删除用户',\n category: 'user',\n sortOrder: 4,\n },\n {\n id: 'perm_content_view',\n code: 'content:view',\n name: '查看内容',\n label: '查看内容',\n category: 'content',\n sortOrder: 1,\n },\n {\n id: 'perm_content_create',\n code: 'content:create',\n name: '创建内容',\n label: '创建内容',\n category: 'content',\n sortOrder: 2,\n },\n {\n id: 'perm_content_edit',\n code: 'content:edit',\n name: '编辑内容',\n label: '编辑内容',\n category: 'content',\n sortOrder: 3,\n },\n {\n id: 'perm_content_delete',\n code: 'content:delete',\n name: '删除内容',\n label: '删除内容',\n category: 'content',\n sortOrder: 4,\n },\n {\n id: 'perm_system_settings',\n code: 'system:settings',\n name: '系统设置',\n label: '系统设置',\n category: 'system',\n sortOrder: 1,\n },\n {\n id: 'perm_system_logs',\n code: 'system:logs',\n name: '系统日志',\n label: '系统日志',\n category: 'system',\n sortOrder: 2,\n },\n {\n id: 'perm_system_monitor',\n code: 'system:monitor',\n name: '系统监控',\n label: '系统监控',\n category: 'system',\n sortOrder: 3,\n },\n {\n id: 'perm_data_export',\n code: 'data:export',\n name: '数据导出',\n label: '数据导出',\n category: 'data',\n sortOrder: 1,\n },\n {\n id: 'perm_data_import',\n code: 'data:import',\n name: '数据导入',\n label: '数据导入',\n category: 'data',\n sortOrder: 2,\n },\n {\n id: 'perm_order_view',\n code: 'order:view',\n name: '查看订单',\n label: '查看订单',\n category: 'order',\n sortOrder: 1,\n },\n {\n id: 'perm_order_create',\n code: 'order:create',\n name: '创建订单',\n label: '创建订单',\n category: 'order',\n sortOrder: 2,\n },\n {\n id: 'perm_order_edit',\n code: 'order:edit',\n name: '编辑订单',\n label: '编辑订单',\n category: 'order',\n sortOrder: 3,\n },\n {\n id: 'perm_order_delete',\n code: 'order:delete',\n name: '删除订单',\n label: '删除订单',\n category: 'order',\n sortOrder: 4,\n },\n {\n id: 'perm_order_process',\n code: 'order:process',\n name: '处理订单',\n label: '处理订单',\n category: 'order',\n sortOrder: 5,\n },\n {\n id: 'perm_ticket_view',\n code: 'ticket:view',\n name: '查看工单',\n label: '查看工单',\n category: 'ticket',\n sortOrder: 1,\n },\n {\n id: 'perm_ticket_create',\n code: 'ticket:create',\n name: '创建工单',\n label: '创建工单',\n category: 'ticket',\n sortOrder: 2,\n },\n {\n id: 'perm_ticket_edit',\n code: 'ticket:edit',\n name: '编辑工单',\n label: '编辑工单',\n category: 'ticket',\n sortOrder: 3,\n },\n {\n id: 'perm_ticket_delete',\n code: 'ticket:delete',\n name: '删除工单',\n label: '删除工单',\n category: 'ticket',\n sortOrder: 4,\n },\n {\n id: 'perm_ticket_reply',\n code: 'ticket:reply',\n name: '回复工单',\n label: '回复工单',\n category: 'ticket',\n sortOrder: 5,\n },\n {\n id: 'perm_ticket_close',\n code: 'ticket:close',\n name: '关闭工单',\n label: '关闭工单',\n category: 'ticket',\n sortOrder: 6,\n },\n {\n id: 'perm_dispute_view',\n code: 'dispute:view',\n name: '查看争议',\n label: '查看争议',\n category: 'dispute',\n sortOrder: 1,\n },\n {\n id: 'perm_dispute_create',\n code: 'dispute:create',\n name: '创建争议',\n label: '创建争议',\n category: 'dispute',\n sortOrder: 2,\n },\n {\n id: 'perm_dispute_edit',\n code: 'dispute:edit',\n name: '编辑争议',\n label: '编辑争议',\n category: 'dispute',\n sortOrder: 3,\n },\n {\n id: 'perm_dispute_delete',\n code: 'dispute:delete',\n name: '删除争议',\n label: '删除争议',\n category: 'dispute',\n sortOrder: 4,\n },\n {\n id: 'perm_dispute_resolve',\n code: 'dispute:resolve',\n name: '解决争议',\n label: '解决争议',\n category: 'dispute',\n sortOrder: 5,\n },\n {\n id: 'perm_role_view',\n code: 'role:view',\n name: '查看角色',\n label: '查看角色',\n category: 'role',\n sortOrder: 1,\n },\n {\n id: 'perm_role_create',\n code: 'role:create',\n name: '创建角色',\n label: '创建角色',\n category: 'role',\n sortOrder: 2,\n },\n {\n id: 'perm_role_edit',\n code: 'role:edit',\n name: '编辑角色',\n label: '编辑角色',\n category: 'role',\n sortOrder: 3,\n },\n {\n id: 'perm_role_delete',\n code: 'role:delete',\n name: '删除角色',\n label: '删除角色',\n category: 'role',\n sortOrder: 4,\n },\n]`\n\nconst INITIAL_ROLES = `const initialRoles = [\n {\n id: 'role_super_admin',\n code: 'super_admin',\n name: '超级管理员',\n label: '超级管理员',\n isSystem: true,\n sortOrder: 1,\n },\n {\n id: 'role_customer_service',\n code: 'customer_service',\n name: '客服人员',\n label: '客服人员',\n isSystem: true,\n sortOrder: 2,\n },\n {\n id: 'role_user',\n code: 'user',\n name: '普通用户',\n label: '普通用户',\n isSystem: true,\n sortOrder: 3,\n },\n]`\n\nconst INITIAL_ROLE_PERMISSIONS = `const initialRolePermissions = [\n { roleId: 'role_super_admin', permissionId: 'perm_user_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_user_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_user_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_user_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_content_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_content_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_content_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_content_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_system_settings' },\n { roleId: 'role_super_admin', permissionId: 'perm_system_logs' },\n { roleId: 'role_super_admin', permissionId: 'perm_system_monitor' },\n { roleId: 'role_super_admin', permissionId: 'perm_data_export' },\n { roleId: 'role_super_admin', permissionId: 'perm_data_import' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_process' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_reply' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_close' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_resolve' },\n { roleId: 'role_customer_service', permissionId: 'perm_content_view' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_view' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_create' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_edit' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_delete' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_process' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_view' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_create' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_edit' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_delete' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_reply' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_close' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_view' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_create' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_edit' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_delete' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_resolve' },\n { roleId: 'role_customer_service', permissionId: 'perm_data_export' },\n { roleId: 'role_customer_service', permissionId: 'perm_system_logs' },\n { roleId: 'role_user', permissionId: 'perm_content_view' },\n { roleId: 'role_user', permissionId: 'perm_order_view' },\n]`\n\nexport function generateDbInit(resolved: ResolvedPreset): string {\n const activeSeeds = SEED_MODULES.filter(s => resolved.modules.has(s.module))\n\n if (!resolved.hasPermission) {\n return generateMinimalDbInit()\n }\n\n return generateFullDbInit(activeSeeds)\n}\n\nfunction generateMinimalDbInit(): string {\n return `import { getDb } from './driver'\nimport { logger } from '../utils/logger'\n\nconst log = logger.db()\n\nexport async function initializeDatabase() {\n await getDb()\n\n log.info({}, 'Initializing database...')\n log.info({}, 'Database initialization complete!')\n}\n`\n}\n\nfunction generateFullDbInit(activeSeeds: SeedModule[]): string {\n const seedImports = activeSeeds.map(s => s.importLine).join('\\n')\n const seedCalls = activeSeeds.map(s => ` ${s.call}(),`).join('\\n')\n\n const seedBlock =\n activeSeeds.length > 0\n ? `\n log.info({}, 'Seeding module data...')\n await Promise.all([\n${seedCalls}\n ])\n log.info({}, 'Module data seeding complete!')`\n : ''\n\n return `import { getDb } from './driver'\nimport { permissions, roles, rolePermissions } from './schema'\nimport { logger } from '../utils/logger'\n${seedImports}\n\nconst log = logger.db()\n\n${INITIAL_PERMISSIONS}\n\n${INITIAL_ROLES}\n\n${INITIAL_ROLE_PERMISSIONS}\n\nexport async function initializeDatabase() {\n const db = await getDb()\n\n log.info({}, 'Initializing database...')\n\n const existingPermissions = await db.select().from(permissions)\n if (existingPermissions.length === 0) {\n log.info({}, 'Inserting initial permissions...')\n await db.insert(permissions).values(\n initialPermissions.map(p => ({\n ...p,\n description: null,\n isActive: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n }))\n )\n }\n\n const existingRoles = await db.select().from(roles)\n if (existingRoles.length === 0) {\n log.info({}, 'Inserting initial roles...')\n await db.insert(roles).values(\n initialRoles.map(r => ({\n ...r,\n description: null,\n isActive: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n }))\n )\n }\n\n const existingRolePermissions = await db.select().from(rolePermissions)\n if (existingRolePermissions.length === 0) {\n log.info({}, 'Inserting initial role permissions...')\n await db.insert(rolePermissions).values(\n initialRolePermissions.map(rp => ({\n ...rp,\n createdAt: new Date(),\n }))\n )\n }\n\n log.info({}, 'Database initialization complete!')${seedBlock}\n}\n`\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport function generateServerApp(resolved: ResolvedPreset): string {\n const useRealtime = resolved.hasSSE || resolved.hasWebSocket\n const useAuditLog = resolved.hasPermission\n const useCaptcha = resolved.hasCaptcha\n const useFileRoutes = resolved.modules.has('file')\n\n const imports: string[] = [\n `import { OpenAPIHono } from '@hono/zod-openapi'`,\n ``,\n `import { HTTPException } from 'hono/http-exception'`,\n `import type { ContentfulStatusCode } from 'hono/utils/http-status'`,\n `import { ZodError } from 'zod'`,\n `import type { AppBindings, CreateAppOptions } from './types/bindings'`,\n `import { AppError } from './utils/app-error'`,\n `import { autoRegisterRealtime } from './core/realtime-scanner'`,\n `import { corsMiddleware, loggerMiddleware, errorHandlerMiddleware } from './middleware'`,\n ]\n\n if (useRealtime) {\n imports.push(`import { realtimeEnvMiddleware } from './middleware/realtime-env'`)\n }\n if (useAuditLog) {\n imports.push(`import { auditLogMiddleware } from './middleware/audit-log'`)\n }\n if (useCaptcha) {\n imports.push(`import { captchaMiddleware } from './middleware/captcha'`)\n }\n\n imports.push(\n `import { createModuleLoggerSync } from './utils/logger'`,\n `import { adminApiRoutes, clientApiRoutes } from './route-registry'`\n )\n\n if (useFileRoutes) {\n imports.push(`import { fileRoutes } from './module-file/routes/file-routes'`)\n }\n\n const middlewareChain: string[] = [\n `.use('*', errorHandlerMiddleware())`,\n `.use('*', loggerMiddleware())`,\n `.use('*', corsMiddleware())`,\n ]\n\n if (useRealtime) {\n middlewareChain.push(`.use('*', realtimeEnvMiddleware())`)\n }\n if (useAuditLog) {\n middlewareChain.push(`.use('/api/*', auditLogMiddleware())`)\n }\n if (useCaptcha) {\n middlewareChain.push(\n `.use(\\n '/api/admin/*',\\n captchaMiddleware({\\n maxRequests: 20,\\n windowMs: 60000,\\n })\\n )`\n )\n }\n\n const routes: string[] = [`.route('/', clientApiRoutes)`, `.route('/', adminApiRoutes)`]\n\n if (useFileRoutes) {\n routes.push(`.route('/files', fileRoutes)`)\n }\n\n const indent = ' '\n const chain = [...middlewareChain, ...routes].join(`\\n${indent}`)\n\n return `${imports.join('\\n')}\n\nexport { type AppBindings, type CreateAppOptions } from './types/bindings'\n\nexport function createApp<T extends AppBindings = AppBindings>(_options: CreateAppOptions = {}) {\n const app = new OpenAPIHono<{ Bindings: T }>()\n ${chain}\n .get('/health', async c => {\n try {\n const { getDb } = await import('./db')\n await getDb()\n return c.json({ status: 'ok', timestamp: new Date().toISOString(), db: 'connected' })\n } catch {\n return c.json({ status: 'ok', timestamp: new Date().toISOString(), db: 'not configured' })\n }\n })\n .post('/api/__test__/cleanup', async c => {\n try {\n const { cleanupTestDatabase } = await import('./db/test-setup')\n await cleanupTestDatabase()\n return c.json({ success: true as const, message: 'Database cleaned up' })\n } catch (error) {\n console.error('Error during database cleanup:', error)\n return c.json({ success: false as const, message: 'Failed to cleanup database' }, 500)\n }\n })\n\n autoRegisterRealtime(app as unknown as Parameters<typeof autoRegisterRealtime>[0])\n\n app.onError((err, c) => {\n const log = createModuleLoggerSync('api')\n c.res.headers.set('Content-Type', 'application/json')\n\n if (AppError.isAppError(err)) {\n return c.json(\n {\n success: false as const,\n error: err.message,\n status: err.statusCode,\n details: err.details,\n },\n err.statusCode as ContentfulStatusCode\n )\n }\n\n if (err instanceof HTTPException) {\n return c.json(\n { success: false as const, error: err.message, status: err.status },\n err.status as ContentfulStatusCode\n )\n }\n\n if (err instanceof ZodError) {\n const details = err.issues.map(issue => ({\n field: issue.path.join('.'),\n message: issue.message,\n }))\n return c.json(\n { success: false as const, error: 'Validation failed', status: 400, details },\n 400\n )\n }\n\n log.error({ err, path: c.req.path }, 'Unhandled error')\n return c.json(\n { success: false as const, error: err.message || 'Internal server error', status: 500 },\n 500\n )\n })\n\n return app\n}\nexport type AdminApiType = typeof adminApiRoutes\nexport type ClientApiType = typeof clientApiRoutes\nexport type AppType = ReturnType<typeof createApp>\n`\n}\n","import type { ResolvedPreset } from './template-generator'\n\nconst MODULE_EXPORTS: Record<string, { namedExports: string[]; hasTypeOnly?: boolean }> = {\n chat: {\n namedExports: ['ChatProtocolSchema', 'type ChatProtocol'],\n },\n todos: {\n namedExports: [\n 'TodoSchema',\n 'TodoStatusSchema',\n 'CreateTodoSchema',\n 'UpdateTodoSchema',\n 'TodoIdSchema',\n 'type Todo',\n 'type TodoStatus',\n 'type CreateTodoInput',\n 'type UpdateTodoInput',\n ],\n },\n files: {\n namedExports: [\n 'FileDownloadSchema',\n 'PrivateFileQuerySchema',\n 'PublicFileUrlSchema',\n 'PrivateFileUrlSchema',\n 'GenerateUrlRequestSchema',\n 'FileUrlResponseSchema',\n 'EmptySchema',\n ],\n },\n notifications: {\n namedExports: [\n 'NotificationSchema',\n 'NotificationTypeSchema',\n 'CreateNotificationSchema',\n 'NotificationListQuerySchema',\n 'SSEEventSchema',\n 'AppSSEProtocolSchema',\n 'type AppNotification',\n 'type NotificationType',\n 'type CreateNotificationInput',\n 'type NotificationListQuery',\n 'type SSEEvent',\n 'type AppSSEProtocol',\n ],\n },\n admin: {\n namedExports: [\n 'SystemStatsSchema',\n 'HealthCheckSchema',\n 'RecentActivityItemSchema',\n 'RecentActivitySchema',\n 'AuthUserSchema',\n 'ClearTodosResultSchema',\n 'type SystemStats',\n 'type HealthCheck',\n 'type RecentActivityItem',\n 'type AuthUserResponse',\n 'type ClearTodosResult',\n ],\n },\n permission: {\n namedExports: [\n 'RoleEnum',\n 'RoleInfoSchema',\n 'PermissionInfoSchema',\n 'UserPermissionsSchema',\n 'RoleListSchema',\n 'PermissionListSchema',\n 'Role',\n 'Permission',\n 'ROLE_PERMISSIONS',\n 'ROLE_LABELS',\n 'PERMISSION_LABELS',\n 'PERMISSION_CATEGORIES',\n 'getPermissionsByRole',\n 'hasPermission',\n 'hasAnyPermission',\n 'hasAllPermissions',\n 'type RoleType',\n 'type RoleInfo',\n 'type PermissionInfo',\n 'type UserPermissions',\n ],\n },\n}\n\nexport function generateSharedModulesIndex(resolved: ResolvedPreset): string {\n const lines: string[] = []\n\n const moduleOrder = ['chat', 'todos', 'file', 'notifications', 'admin', 'permission']\n\n for (const moduleName of moduleOrder) {\n if (!resolved.modules.has(moduleName)) continue\n\n const manifest = resolved.modules.get(moduleName)!\n const exportKey = manifest.sharedSchemas?.path ?? moduleName\n const exports = MODULE_EXPORTS[exportKey]\n if (!exports) continue\n\n lines.push(`export {\\n ${exports.namedExports.join(',\\n ')},\\n} from './${exportKey}'`)\n }\n\n return lines.join('\\n') + '\\n'\n}\n","import type { ResolvedPreset } from \"./template-generator\";\n\nconst MODULE_EXPORTS: Record<string, { namedExports: string[] }> = {\n chat: {\n namedExports: [\n \"ChatProtocolSchema\",\n \"WebSocketStatusSchema\",\n \"type ChatProtocol\",\n \"type WebSocketStatus\",\n ],\n },\n file: {\n namedExports: [\n \"FileDownloadSchema\",\n \"PrivateFileQuerySchema\",\n \"PublicFileUrlSchema\",\n \"PrivateFileUrlSchema\",\n \"GenerateUrlRequestSchema\",\n \"FileUrlResponseSchema\",\n \"EmptySchema\",\n \"UploadResultSchema\",\n \"UploadFileBodySchema\",\n ],\n },\n todos: {\n namedExports: [\n \"TodoSchema\",\n \"TodoStatusSchema\",\n \"CreateTodoSchema\",\n \"UpdateTodoSchema\",\n \"TodoIdSchema\",\n \"TodoIdResponseSchema\",\n \"TodoAttachmentSchema\",\n \"TodoAttachmentListSchema\",\n \"TodoWithAttachmentsSchema\",\n \"UploadFileSchema\",\n \"AttachmentIdResponseSchema\",\n \"type Todo\",\n \"type TodoStatus\",\n \"type CreateTodoInput\",\n \"type UpdateTodoInput\",\n \"type TodoIdResponse\",\n \"type TodoAttachment\",\n \"type TodoWithAttachments\",\n ],\n },\n notifications: {\n namedExports: [\n \"NotificationSchema\",\n \"NotificationTypeSchema\",\n \"CreateNotificationSchema\",\n \"NotificationListQuerySchema\",\n \"SSEEventSchema\",\n \"AppSSEProtocolSchema\",\n \"UnreadCountSchema\",\n \"NotificationIdSchema\",\n \"UnreadCountEventSchema\",\n \"type AppNotification\",\n \"type NotificationType\",\n \"type CreateNotificationInput\",\n \"type NotificationListQuery\",\n \"type SSEEvent\",\n \"type AppSSEProtocol\",\n \"type UnreadCount\",\n \"type NotificationId\",\n \"type UnreadCountEvent\",\n ],\n },\n};\n\nexport function generateSharedSchemasIndex(resolved: ResolvedPreset): string {\n const header = `// Re-export interfaces from implementation files\nexport type { WSClient, WSProtocol, WSStatus } from '../core/ws-client'\nexport type { SSEClient, SSEProtocol } from '../core/sse-client'\n\n// Re-export core\nexport {\n ApiSuccessSchema,\n ApiErrorSchema,\n ApiResponseSchema,\n type ApiSuccess,\n type ApiError,\n type ApiResponse,\n type RpcMethod,\n type EventName,\n type RpcInput,\n type RpcOutput,\n type EventPayload,\n createWSClient,\n createSSEClient,\n} from '../core'\n\n// Re-export modules\n`;\n\n const moduleLines: string[] = [];\n const moduleOrder = [\"chat\", \"file\", \"todos\", \"notifications\"];\n\n for (const moduleName of moduleOrder) {\n if (!resolved.modules.has(moduleName)) continue;\n\n const exports = MODULE_EXPORTS[moduleName];\n if (!exports) continue;\n\n const manifest = resolved.modules.get(moduleName)!;\n const importPath = manifest.sharedSchemas?.path ?? moduleName;\n\n moduleLines.push(\n `export {\\n ${exports.namedExports.join(\",\\n \")},\\n} from '../modules/${importPath}'`,\n );\n }\n\n return header + moduleLines.join(\"\\n\") + \"\\n\";\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport function generateMiddlewareIndex(resolved: ResolvedPreset): string {\n const lines: string[] = []\n\n lines.push(`export { corsMiddleware, createCorsMiddleware, type CorsOptions } from './cors'`)\n lines.push(\n `export { loggerMiddleware, createLoggerMiddleware, type LoggerOptions } from './logger'`\n )\n lines.push(\n `export {\\n errorHandlerMiddleware,\\n createErrorHandlerMiddleware,\\n type ErrorHandlerOptions,\\n} from './error-handler'`\n )\n\n if (resolved.hasPermission) {\n lines.push(\n `export {\\n authMiddleware,\\n requireSuperAdminMiddleware,\\n requireCustomerServiceMiddleware,\\n requirePermissionsMiddleware,\\n type AuthUser,\\n type AuthMiddlewareOptions,\\n} from './auth'`\n )\n }\n\n if (resolved.hasCaptcha) {\n lines.push(\n `export {\\n captchaMiddleware,\\n markCaptchaVerifiedMiddleware,\\n clearCaptchaSessionMiddleware,\\n type CaptchaConfig,\\n} from './captcha'`\n )\n }\n\n if (resolved.hasPermission) {\n lines.push(`export { permissionMiddleware } from './permission'`)\n }\n\n lines.push(`export { rateLimitMiddleware, type RateLimitOptions } from './rate-limit'`)\n\n if (resolved.hasPermission) {\n lines.push(`export { getAuthUser } from '../utils/auth'`)\n }\n\n return lines.join('\\n') + '\\n'\n}\n","import type { ResolvedPreset } from \"./template-generator\";\n\nexport function generateAuthMiddleware(_resolved: ResolvedPreset): string {\n return `import type { MiddlewareHandler } from 'hono'\nimport { createModuleLoggerSync } from '../utils/logger'\n\nexport type UserRole = 'user' | 'admin'\n\nexport interface AuthUser {\n id: string\n username: string\n email: string\n role: UserRole\n avatar?: string\n}\n\nexport interface AuthMiddlewareOptions {\n requiredRole?: UserRole\n}\n\ndeclare module 'hono' {\n interface ContextVariableMap {\n authUser: AuthUser\n }\n}\n\nconst DEV_USER: AuthUser = {\n id: 'dev-user-1',\n username: 'devuser',\n email: 'dev@example.com',\n role: 'admin',\n avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=dev',\n}\n\nfunction extractToken(authHeader: string | undefined): string | null {\n if (!authHeader) return null\n if (!authHeader.startsWith('Bearer ')) return null\n return authHeader.slice(7)\n}\n\nexport function authMiddleware(_options: AuthMiddlewareOptions = {}): MiddlewareHandler {\n const log = createModuleLoggerSync('auth')\n\n return async (c, next) => {\n const token = extractToken(c.req.header('Authorization'))\n\n if (!token) {\n c.set('authUser', { ...DEV_USER, id: 'anonymous' })\n log.info({ path: c.req.path }, 'Anonymous access')\n await next()\n return\n }\n\n c.set('authUser', DEV_USER)\n log.info({ userId: DEV_USER.id, path: c.req.path }, 'Dev user authenticated')\n await next()\n }\n}\n\nexport function requireSuperAdminMiddleware(): MiddlewareHandler {\n return authMiddleware()\n}\n\nexport function requireCustomerServiceMiddleware(): MiddlewareHandler {\n return authMiddleware()\n}\n\nexport function requirePermissionsMiddleware(): MiddlewareHandler {\n return authMiddleware()\n}\n`;\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport function generateAuthUtils(resolved: ResolvedPreset): string {\n if (!resolved.hasPermission) {\n return `import type { Context } from 'hono'\nimport type { AuthUser } from '../middleware/auth'\n\nexport function getAuthUser(c: Context): AuthUser {\n return c.get('authUser')\n}\n`\n }\n\n return `import type { Context } from 'hono'\nimport type { AuthUser } from '../middleware/auth'\nimport { Role } from '@shared/modules/permission'\n\ninterface MockUser {\n id: string\n username: string\n email: string\n role: string\n status: string\n avatar: string\n createdAt: string\n updatedAt: string\n}\n\nconst mockUsers: MockUser[] = [\n {\n id: '1',\n username: 'superadmin',\n email: 'superadmin@example.com',\n role: Role.SUPER_ADMIN,\n status: 'active',\n avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=superadmin',\n createdAt: '2024-01-01T00:00:00Z',\n updatedAt: '2024-01-01T00:00:00Z',\n },\n {\n id: '2',\n username: 'customerservice',\n email: 'customerservice@example.com',\n role: Role.CUSTOMER_SERVICE,\n status: 'active',\n avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=customerservice',\n createdAt: '2024-01-02T00:00:00Z',\n updatedAt: '2024-01-02T00:00:00Z',\n },\n {\n id: '3',\n username: 'user1',\n email: 'user1@example.com',\n role: Role.USER,\n status: 'active',\n avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=user1',\n createdAt: '2024-01-03T00:00:00Z',\n updatedAt: '2024-01-03T00:00:00Z',\n },\n]\n\nconst mockTokens: Map<string, string> = new Map([\n ['super-admin-token', '1'],\n ['customer-service-token', '2'],\n ['user-token', '3'],\n])\n\nexport function getAuthUser(c: Context): AuthUser {\n return c.get('authUser')\n}\n\nexport function verifyToken(token: string): MockUser | null {\n const userId = mockTokens.get(token)\n\n if (!userId) {\n return null\n }\n\n return mockUsers.find(u => u.id === userId) || null\n}\n\nexport function getMockUsers(): MockUser[] {\n return mockUsers\n}\n\nexport function getMockTokens(): Map<string, string> {\n return mockTokens\n}\n`\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport function generateClientComponentsIndex(resolved: ResolvedPreset): string {\n const lines: string[] = []\n\n lines.push(`export { StatusBadge, type ColorScheme } from './StatusBadge'`)\n lines.push(`export { LoadingSpinner } from './LoadingSpinner'`)\n lines.push(`export { EmptyState } from './EmptyState'`)\n\n if (resolved.modules.has('chat') || resolved.modules.has('notifications')) {\n lines.push(`export { ConnectionStatus } from './ConnectionStatus'`)\n }\n\n if (resolved.modules.has('chat')) {\n lines.push(`export { MessageCard } from './MessageCard'`)\n }\n\n if (resolved.modules.has('admin')) {\n lines.push(`export { AuthButton } from './AuthButton'`)\n }\n\n return lines.join('\\n') + '\\n'\n}\n","import type { ResolvedPreset } from \"./template-generator\";\n\nexport function generateCliModulesIndex(resolved: ResolvedPreset): string {\n const modules: string[] = [];\n const registrations: string[] = [];\n\n if (resolved.modules.has(\"todos\")) {\n modules.push(\"import { registerTodoCommands } from './todo'\");\n registrations.push(\"registerTodoCommands(program)\");\n }\n\n if (resolved.modules.has(\"notifications\")) {\n modules.push(\n \"import { registerNotificationCommands } from './notification'\",\n );\n registrations.push(\"registerNotificationCommands(program)\");\n }\n\n modules.push(\"import { registerConfigCommands } from './config'\");\n registrations.push(\"registerConfigCommands(program)\");\n\n const imports = `import type { Command } from 'commander'\\n${modules.join(\"\\n\")}`;\n const exports = modules\n .map((m) => {\n const match = m.match(/\\{ (\\w+) \\}/);\n return match ? match[1] : \"\";\n })\n .filter(Boolean);\n\n return `${imports}\n\nexport function registerModules(program: Command) {\n${registrations.map((r) => ` ${r}`).join(\"\\n\")}\n}\n\nexport { ${exports.join(\", \")} }\n`;\n}\n","/**\n * Filters package.json dependencies based on the resolved preset.\n * Removes module-specific packages that aren't needed.\n */\nimport type { ResolvedPreset } from './template-generator'\n\n/** Packages only needed by specific modules */\nconst MODULE_PACKAGES: Record<string, string[]> = {\n admin: ['bcryptjs'],\n}\n\n/** Packages needed by the admin panel UI */\nconst ADMIN_PANEL_PACKAGES = ['antd']\n\n/** Packages needed by the CLI app */\nconst CLI_PACKAGES = ['commander']\n\n/** Packages that are never imported (unused) */\nconst UNUSED_PACKAGES = ['lodash-es', 'chalk', 'mysql2']\n\n/**\n * Filter package.json dependencies for the given preset\n * Returns a new package.json object with filtered deps\n */\nexport function filterPackageJson(\n pkg: Record<string, unknown>,\n resolved: ResolvedPreset\n): Record<string, unknown> {\n const result = { ...pkg }\n\n // Collect packages to remove\n const packagesToRemove = new Set<string>(UNUSED_PACKAGES)\n\n // Remove module-specific packages\n for (const [module, packages] of Object.entries(MODULE_PACKAGES)) {\n if (!resolved.modules.has(module)) {\n for (const pkg of packages) {\n packagesToRemove.add(pkg)\n }\n }\n }\n\n // Remove admin panel packages if no admin module\n if (!resolved.modules.has('admin')) {\n for (const pkg of ADMIN_PANEL_PACKAGES) {\n packagesToRemove.add(pkg)\n }\n }\n\n // Remove CLI packages if no admin (CLI depends on admin API)\n if (!resolved.modules.has('admin')) {\n for (const pkg of CLI_PACKAGES) {\n packagesToRemove.add(pkg)\n }\n }\n\n // Filter dependencies\n if (result.dependencies && typeof result.dependencies === 'object') {\n const deps = { ...(result.dependencies as Record<string, string>) }\n for (const pkg of packagesToRemove) {\n delete deps[pkg]\n }\n result.dependencies = deps\n }\n\n // Filter devDependencies — remove admin-only test packages\n if (result.devDependencies && typeof result.devDependencies === 'object') {\n const devDeps = { ...(result.devDependencies as Record<string, string>) }\n if (!resolved.modules.has('admin')) {\n delete devDeps['@testing-library/user-event']\n }\n result.devDependencies = devDeps\n }\n\n return result\n}\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { ResolvedPreset } from './template-generator'\n\nexport function generateViteConfig(resolved: ResolvedPreset, templateDir: string): string {\n const originalPath = join(templateDir, 'vite.config.ts')\n let content = readFileSync(originalPath, 'utf-8')\n\n if (!resolved.modules.has('admin')) {\n content = content.replace(\n /,\\n\\s*admin:\\s*path\\.resolve\\(__dirname,\\s*['\"]admin\\.html['\"]\\)/,\n ''\n )\n }\n\n return content\n}\n","import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport fs from 'fs-extra'\nimport chalk from 'chalk'\nimport ora from 'ora'\nimport {\n loadManifests,\n loadPresets,\n resolvePreset,\n type ResolvedPreset,\n} from '../generators/template-generator'\nimport { getExcludePatterns, getGeneratedFiles } from '../generators/file-filter'\nimport { generateRouteRegistry } from '../generators/route-registry'\nimport { generateClientApp } from '../generators/client-app'\nimport { generateClientNavigation } from '../generators/client-navigation'\nimport { generateAdminApp } from '../generators/admin-app'\nimport { generateDbSchemaBarrel } from '../generators/db-schema-barrel'\nimport { generateDbInit } from '../generators/db-init'\nimport { generateServerApp } from '../generators/server-app'\nimport { generateSharedModulesIndex } from '../generators/shared-modules-index'\nimport { generateSharedSchemasIndex } from '../generators/shared-schemas-index'\nimport { generateMiddlewareIndex } from '../generators/middleware-index'\nimport { generateAuthMiddleware } from '../generators/auth-middleware'\nimport { generateAuthUtils } from '../generators/auth-utils'\nimport { generateClientComponentsIndex } from '../generators/client-components-index'\nimport { generateCliModulesIndex } from '../generators/cli-modules-index'\nimport { filterPackageJson } from '../generators/package-json'\nimport { generateViteConfig } from '../generators/vite-config'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\n\nconst TEMPLATE_PROJECT_NAME = 'biomimic-todo-app'\nconst TEMPLATE_DB_NAME = 'biomimic-todo-db'\n\nexport class ScaffoldError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'ScaffoldError'\n }\n}\n\nfunction validateProjectName(name: string): void {\n if (!name || name.trim().length === 0) {\n throw new ScaffoldError('Project name cannot be empty')\n }\n const validNameRegex = /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/\n if (!validNameRegex.test(name)) {\n throw new ScaffoldError(\n `Invalid project name \"${name}\". Use lowercase letters, numbers, hyphens, and underscores only.`\n )\n }\n if (name.length > 214) {\n throw new ScaffoldError('Project name must be 214 characters or less')\n }\n if (name.includes('..') || name.includes('/') || name.includes('\\\\')) {\n throw new ScaffoldError('Project name cannot contain path separators')\n }\n}\n\nfunction parseGitignore(content: string): string[] {\n const negatePatterns: string[] = []\n const includePatterns = content\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line && !line.startsWith('#'))\n .map(line => {\n if (line.startsWith('!')) {\n negatePatterns.push(line.slice(1))\n return null\n }\n return line\n })\n .filter((line): line is string => line !== null)\n .map(pattern => pattern.replace(/\\/$/, ''))\n .map(pattern => pattern.replace(/^\\*\\./, ''))\n .map(pattern => pattern.replace(/^\\/+/, ''))\n .filter(pattern => !pattern.includes('*'))\n return [...includePatterns, ...negatePatterns.map(p => `!${p}`)]\n}\n\nfunction generateDbName(projectName: string): string {\n const sanitized = projectName\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n return `${sanitized}-db`\n}\n\nasync function updateWranglerToml(targetDir: string, projectName: string): Promise<void> {\n const wranglerPath = path.join(targetDir, 'wrangler.toml')\n if (!(await fs.pathExists(wranglerPath))) {\n return\n }\n\n let content = await fs.readFile(wranglerPath, 'utf-8')\n const dbName = generateDbName(projectName)\n\n content = content.replace(\n new RegExp(`^name = \"${TEMPLATE_PROJECT_NAME}\"`, 'm'),\n `name = \"${projectName}\"`\n )\n\n content = content.replace(\n new RegExp(`database_name = \"${TEMPLATE_DB_NAME}\"`, 'g'),\n `database_name = \"${dbName}\"`\n )\n\n content = content.replace(\n /database_id = \"[^\"]+\"/,\n `database_id = \"\" # TODO: Run 'wrangler d1 create ${dbName}' and paste the ID here`\n )\n\n await fs.writeFile(wranglerPath, content)\n}\n\nasync function updatePackageJson(\n targetDir: string,\n projectName: string,\n resolved: ResolvedPreset\n): Promise<void> {\n const pkgJsonPath = path.join(targetDir, 'package.json')\n if (!(await fs.pathExists(pkgJsonPath))) {\n return\n }\n\n let pkgJson = await fs.readJson(pkgJsonPath)\n\n pkgJson = filterPackageJson(pkgJson, resolved)\n\n pkgJson.name = projectName\n\n if (pkgJson.bin) {\n delete pkgJson.bin\n }\n\n await fs.writeJson(pkgJsonPath, pkgJson, { spaces: 2 })\n}\n\nasync function updatePackageLockJson(targetDir: string, projectName: string): Promise<void> {\n const lockFilePath = path.join(targetDir, 'package-lock.json')\n if (!(await fs.pathExists(lockFilePath))) {\n return\n }\n\n const lockFile = await fs.readJson(lockFilePath)\n\n if (lockFile.name === TEMPLATE_PROJECT_NAME) {\n lockFile.name = projectName\n }\n\n if (lockFile.packages?.['']?.name === TEMPLATE_PROJECT_NAME) {\n lockFile.packages[''].name = projectName\n }\n\n await fs.writeJson(lockFilePath, lockFile, { spaces: 2 })\n}\n\nasync function updateReadme(targetDir: string, projectName: string): Promise<void> {\n const readmePath = path.join(targetDir, 'README.md')\n if (!(await fs.pathExists(readmePath))) {\n return\n }\n\n let content = await fs.readFile(readmePath, 'utf-8')\n\n content = content.replace(/^# (.+)$/m, `# ${projectName}`)\n\n await fs.writeFile(readmePath, content)\n}\n\nexport interface CreateOptions {\n projectName: string\n currentDir: boolean\n preset?: string\n outputDir?: string\n dryRun?: boolean\n}\n\nexport async function createProject(options: CreateOptions): Promise<void>\nexport async function createProject(\n projectName: string,\n useCurrentDir?: boolean,\n preset?: string\n): Promise<void>\nexport async function createProject(\n projectNameOrOptions: string | CreateOptions,\n useCurrentDir: boolean = false,\n preset?: string\n): Promise<void> {\n let projectName: string\n let currentDir: boolean\n let presetId: string | undefined\n let outputDir: string | undefined\n let dryRun: boolean\n\n if (typeof projectNameOrOptions === 'string') {\n projectName = projectNameOrOptions\n currentDir = useCurrentDir\n presetId = preset\n dryRun = false\n } else {\n projectName = projectNameOrOptions.projectName\n currentDir = projectNameOrOptions.currentDir\n presetId = projectNameOrOptions.preset\n outputDir = projectNameOrOptions.outputDir\n dryRun = projectNameOrOptions.dryRun ?? false\n }\n\n if (!currentDir) {\n validateProjectName(projectName)\n }\n\n const templateDir = path.join(__dirname, '../../template')\n let targetDir: string\n\n if (currentDir) {\n targetDir = process.cwd()\n projectName = path.basename(targetDir)\n } else if (outputDir) {\n targetDir = path.resolve(outputDir)\n if (await fs.pathExists(targetDir)) {\n throw new ScaffoldError(`Directory ${outputDir} already exists`)\n }\n } else {\n targetDir = path.resolve(process.cwd(), projectName)\n if (await fs.pathExists(targetDir)) {\n throw new ScaffoldError(`Directory ${projectName} already exists`)\n }\n }\n\n try {\n const manifestSpinner = ora('Loading module manifests...').start()\n const allManifests = await loadManifests(templateDir)\n const presets = await loadPresets(templateDir)\n\n const selectedPresetId = presetId || 'fullstack-admin'\n const selectedPreset = presets.find(p => p.id === selectedPresetId)\n if (!selectedPreset) {\n throw new ScaffoldError(\n `Unknown preset: ${selectedPresetId}. Available: ${presets.map(p => p.id).join(', ')}`\n )\n }\n\n const resolved = resolvePreset(selectedPreset, allManifests)\n manifestSpinner.succeed(\n chalk.green(`Using preset: ${selectedPreset.name} (${resolved.modules.size} modules)`)\n )\n\n if (dryRun) {\n const resolvedModuleNames = [...resolved.modules.keys()]\n const generatedFiles = getGeneratedFiles(resolved)\n\n console.log('')\n console.log(chalk.blue('📋 Dry Run - Files that would be generated:\\n'))\n for (const file of generatedFiles) {\n console.log(` ${chalk.green('✓')} ${file}`)\n }\n\n const gitignorePath = path.join(templateDir, '.gitignore')\n let ignorePatterns: string[] = []\n if (await fs.pathExists(gitignorePath)) {\n const gitignoreContent = await fs.readFile(gitignorePath, 'utf-8')\n ignorePatterns = parseGitignore(gitignoreContent)\n }\n ignorePatterns.push('node_modules', '.wrangler')\n const excludePatterns = getExcludePatterns(resolved, allManifests)\n\n let templateFileCount = 0\n const templateFiles = await fs.readdir(templateDir, { recursive: true })\n for (const file of templateFiles) {\n const relative = String(file)\n if (!relative) continue\n const negated = ignorePatterns.filter((p: string) => p.startsWith('!'))\n const gitIgnored = ignorePatterns.filter(\n (p: string) => !p.startsWith('!') && relative.startsWith(p)\n )\n if (gitIgnored.length > 0) {\n const allowed = negated.some((p: string) => relative === p.slice(1))\n if (!allowed) continue\n }\n const normalizedRelative = relative.replace(/\\\\/g, '/')\n let excluded = false\n for (const pattern of excludePatterns) {\n const normalizedPattern = pattern.replace(/\\\\/g, '/')\n if (\n normalizedRelative === normalizedPattern ||\n normalizedRelative.startsWith(normalizedPattern + '/')\n ) {\n excluded = true\n break\n }\n }\n if (!excluded) templateFileCount++\n }\n\n console.log('')\n console.log(chalk.blue('📁 Template files that would be copied:\\n'))\n console.log(` ${chalk.green('✓')} ${templateFileCount} template files`)\n console.log('')\n console.log(chalk.yellow(` Total generated files: ${generatedFiles.length}`))\n console.log(chalk.yellow(` Preset: ${selectedPreset.name}`))\n console.log(chalk.yellow(` Modules: ${resolvedModuleNames.join(', ')}`))\n console.log('')\n return\n }\n\n if (!currentDir) {\n const dirSpinner = ora('Creating project directory...').start()\n await fs.ensureDir(targetDir)\n dirSpinner.succeed(chalk.green('Project directory created'))\n }\n\n const copySpinner = ora('Copying template files...').start()\n const gitignorePath = path.join(templateDir, '.gitignore')\n let ignorePatterns: string[] = []\n if (await fs.pathExists(gitignorePath)) {\n const gitignoreContent = await fs.readFile(gitignorePath, 'utf-8')\n ignorePatterns = parseGitignore(gitignoreContent)\n }\n ignorePatterns.push('node_modules', '.wrangler')\n\n const excludePatterns = getExcludePatterns(resolved, allManifests)\n\n await fs.copy(templateDir, targetDir, {\n filter: (src: string) => {\n const relative = path.relative(templateDir, src)\n if (relative === '') return true\n\n const negated = ignorePatterns.filter(p => p.startsWith('!'))\n const gitIgnored = ignorePatterns.filter(p => !p.startsWith('!') && relative.startsWith(p))\n if (gitIgnored.length > 0) {\n const allowed = negated.some(p => relative === p.slice(1))\n if (!allowed) return false\n }\n\n const normalizedRelative = relative.replace(/\\\\/g, '/')\n for (const pattern of excludePatterns) {\n const normalizedPattern = pattern.replace(/\\\\/g, '/')\n if (\n normalizedRelative === normalizedPattern ||\n normalizedRelative.startsWith(normalizedPattern + '/')\n ) {\n return false\n }\n }\n\n return true\n },\n dereference: false,\n })\n copySpinner.succeed(chalk.green('Template files copied'))\n\n const genSpinner = ora('Generating module-specific files...').start()\n\n const routeRegistryContent = generateRouteRegistry(resolved)\n await fs.writeFile(path.join(targetDir, 'src/server/route-registry.ts'), routeRegistryContent)\n\n const dbSchemaContent = generateDbSchemaBarrel(resolved)\n await fs.writeFile(path.join(targetDir, 'src/server/db/schema/index.ts'), dbSchemaContent)\n\n const clientAppContent = generateClientApp(resolved)\n await fs.writeFile(path.join(targetDir, 'src/client/App.tsx'), clientAppContent)\n\n const clientNavContent = generateClientNavigation(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/Navigation.tsx'),\n clientNavContent\n )\n\n if (resolved.modules.has('admin')) {\n const adminAppContent = generateAdminApp(resolved)\n if (adminAppContent) {\n await fs.ensureDir(path.join(targetDir, 'src/admin'))\n await fs.writeFile(path.join(targetDir, 'src/admin/App.tsx'), adminAppContent)\n }\n }\n\n const serverAppContent = generateServerApp(resolved)\n await fs.writeFile(path.join(targetDir, 'src/server/app.ts'), serverAppContent)\n\n const generatedFiles = getGeneratedFiles(resolved)\n if (generatedFiles.includes('src/server/db/init.ts')) {\n const dbInitContent = generateDbInit(resolved)\n await fs.writeFile(path.join(targetDir, 'src/server/db/init.ts'), dbInitContent)\n }\n\n const sharedModulesContent = generateSharedModulesIndex(resolved)\n await fs.writeFile(path.join(targetDir, 'src/shared/modules/index.ts'), sharedModulesContent)\n\n const sharedSchemasContent = generateSharedSchemasIndex(resolved)\n await fs.writeFile(path.join(targetDir, 'src/shared/schemas/index.ts'), sharedSchemasContent)\n\n const middlewareIndexContent = generateMiddlewareIndex(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/server/middleware/index.ts'),\n middlewareIndexContent\n )\n\n if (generatedFiles.includes('src/server/middleware/auth.ts')) {\n const authMiddlewareContent = generateAuthMiddleware(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/server/middleware/auth.ts'),\n authMiddlewareContent\n )\n }\n\n if (generatedFiles.includes('src/server/utils/auth.ts')) {\n const authUtilsContent = generateAuthUtils(resolved)\n await fs.writeFile(path.join(targetDir, 'src/server/utils/auth.ts'), authUtilsContent)\n }\n\n const clientComponentsContent = generateClientComponentsIndex(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/index.ts'),\n clientComponentsContent\n )\n\n if (resolved.modules.has('admin')) {\n const cliModulesContent = generateCliModulesIndex(resolved)\n await fs.writeFile(path.join(targetDir, 'src/cli/modules/index.ts'), cliModulesContent)\n }\n\n if (generatedFiles.includes('vite.config.ts')) {\n const viteConfigContent = generateViteConfig(resolved, templateDir)\n await fs.writeFile(path.join(targetDir, 'vite.config.ts'), viteConfigContent)\n }\n\n genSpinner.succeed(chalk.green('Module-specific files generated'))\n\n const pkgSpinner = ora('Configuring package.json...').start()\n await updatePackageJson(targetDir, projectName, resolved)\n pkgSpinner.succeed(chalk.green('package.json configured'))\n\n const lockSpinner = ora('Configuring package-lock.json...').start()\n await updatePackageLockJson(targetDir, projectName)\n lockSpinner.succeed(chalk.green('package-lock.json configured'))\n\n const wranglerSpinner = ora('Configuring wrangler.toml...').start()\n await updateWranglerToml(targetDir, projectName)\n wranglerSpinner.succeed(chalk.green('wrangler.toml configured'))\n\n const readmeSpinner = ora('Configuring README.md...').start()\n await updateReadme(targetDir, projectName)\n readmeSpinner.succeed(chalk.green('README.md configured'))\n\n console.log('')\n console.log(chalk.green(' ✓ Project created successfully!'))\n console.log(chalk.gray(` Preset: ${selectedPreset.name}`))\n console.log(chalk.gray(` Modules: ${[...resolved.modules.keys()].join(', ')}`))\n console.log('')\n console.log(chalk.cyan(' Next steps:'))\n if (!currentDir && !outputDir) {\n console.log(chalk.white(` cd ${projectName}`))\n }\n console.log(chalk.white(' npm install'))\n console.log(chalk.white(' npm run dev'))\n console.log('')\n console.log(chalk.yellow(' ⚠️ Cloudflare Setup:'))\n console.log(\n chalk.white(` 1. Create D1 database: wrangler d1 create ${generateDbName(projectName)}`)\n )\n console.log(chalk.white(' 2. Copy the database ID to wrangler.toml'))\n console.log(chalk.white(' 3. Deploy: npm run deploy:cf'))\n console.log('')\n console.log(chalk.gray(' Happy coding! 🐟'))\n console.log('')\n } catch (error) {\n if (error instanceof ScaffoldError) throw error\n throw new ScaffoldError(`Error creating project: ${error}`)\n }\n}\n","import { program } from 'commander'\nimport { registerModules } from './modules'\nimport { setBaseUrl } from './utils/api'\nimport { createLogger } from './utils/logger'\nimport { createProject } from '../commands/create'\nimport type { CreateOptions } from '../commands/create'\n\nconst MODULE_COMMANDS = ['todo', 'notification', 'config']\n\nprogram\n .name('create-fullstack-scaffold')\n .description('Create a new fullstack scaffolded project')\n .version('0.1.1')\n .argument('[project-name]', 'Name of the project to create')\n .option('-v, --verbose', 'Enable verbose output')\n .option('-u, --url <url>', 'Server URL', 'http://localhost:3010')\n .option('-p, --preset <preset>', 'Template preset to use', 'fullstack-admin')\n .option('-d, --dry-run', 'Preview files without creating them')\n .option('--current-dir', 'Scaffold in the current directory')\n .action(async (projectName: string | undefined, cmdOptions: Record<string, unknown>) => {\n if (projectName && !MODULE_COMMANDS.includes(projectName)) {\n const isCurrentDir = cmdOptions.currentDir === true || projectName === '.'\n createLogger({ verbose: cmdOptions.verbose as boolean | undefined })\n\n const options: CreateOptions = {\n projectName: isCurrentDir ? '.' : projectName,\n currentDir: isCurrentDir,\n preset: cmdOptions.preset as string | undefined,\n dryRun: cmdOptions.dryRun as boolean | undefined,\n }\n\n await createProject(options).catch((err: Error) => {\n console.error(`Error: ${err.message}`)\n process.exit(1)\n })\n return\n }\n\n if (!projectName) {\n program.outputHelp()\n process.exit(1)\n }\n })\n\nprogram.hook('preAction', thisCommand => {\n const options = thisCommand.opts()\n createLogger({ verbose: options.verbose })\n if (options.url) {\n setBaseUrl(options.url)\n }\n})\n\nregisterModules(program)\n\nprogram.parse()\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fullstack-scaffold",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "create-fullstack-scaffold": "dist/cli/index.js"