create-fullstack-scaffold 0.4.9 → 0.4.11

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.
Files changed (139) hide show
  1. package/dist/cli/index.js +499 -100
  2. package/dist/cli/index.js.map +1 -1
  3. package/package.json +2 -2
  4. package/template/CLAUDE.md +18 -6
  5. package/template/drizzle/0004_add_merchants_products.sql +30 -0
  6. package/template/drizzle/meta/_journal.json +7 -0
  7. package/template/eslint-rules/module-boundary.js +6 -2
  8. package/template/eslint-rules/no-cross-module-service-import.js +105 -0
  9. package/template/eslint-rules/no-disable-type-safe-client.js +5 -0
  10. package/template/eslint.config.js +9 -0
  11. package/template/lint-scripts/config/project.config.ts +21 -0
  12. package/template/lint-scripts/validate-all.ts +48 -12
  13. package/template/lint-scripts/validators/index.ts +29 -0
  14. package/template/lint-scripts/validators/module-public-api.validator.ts +103 -0
  15. package/template/lint-scripts/validators/schema-uniqueness.validator.ts +147 -0
  16. package/template/modules.config.ts +2 -0
  17. package/template/package.json +2 -0
  18. package/template/playwright.config.ts +14 -0
  19. package/template/src/admin/App.tsx +40 -3
  20. package/template/src/admin/components/LanguageSwitcher.tsx +22 -0
  21. package/template/src/admin/components/NotificationDrawer.tsx +108 -38
  22. package/template/src/admin/components/StatsCard.tsx +3 -1
  23. package/template/src/admin/components/ThemeToggle.tsx +28 -0
  24. package/template/src/admin/hooks/useRoles.ts +2 -2
  25. package/template/src/admin/i18n/index.ts +18 -0
  26. package/template/src/admin/i18n/locales/en-US.json +381 -0
  27. package/template/src/admin/i18n/locales/zh-CN.json +381 -0
  28. package/template/src/admin/i18n/useLanguage.ts +21 -0
  29. package/template/src/admin/layouts/Header.tsx +37 -16
  30. package/template/src/admin/layouts/Layout.tsx +7 -3
  31. package/template/src/admin/layouts/Sidebar.tsx +70 -68
  32. package/template/src/admin/main.tsx +1 -0
  33. package/template/src/admin/pages/ContentPage.tsx +68 -56
  34. package/template/src/admin/pages/DashboardPage.tsx +82 -76
  35. package/template/src/admin/pages/DisputesPage.tsx +61 -53
  36. package/template/src/admin/pages/LoginPage.tsx +41 -33
  37. package/template/src/admin/pages/OrdersPage.tsx +69 -64
  38. package/template/src/admin/pages/PermissionsPage.tsx +10 -8
  39. package/template/src/admin/pages/PluginDashboardPage.tsx +3 -1
  40. package/template/src/admin/pages/PluginManagementPage.tsx +3 -1
  41. package/template/src/admin/pages/RegisterPage.tsx +18 -16
  42. package/template/src/admin/pages/RolesPage.tsx +51 -49
  43. package/template/src/admin/pages/SettingsPage.tsx +22 -22
  44. package/template/src/admin/pages/SystemLogsPage.tsx +32 -30
  45. package/template/src/admin/pages/TicketsPage.tsx +67 -59
  46. package/template/src/admin/pages/UsersPage.tsx +63 -53
  47. package/template/src/admin/pages/__tests__/RolesPage.test.tsx +2 -2
  48. package/template/src/admin/stores/themeStore.ts +32 -0
  49. package/template/src/cli/modules/admin/index.ts +200 -0
  50. package/template/src/cli/modules/captcha/index.ts +40 -0
  51. package/template/src/cli/modules/chat/index.ts +21 -0
  52. package/template/src/cli/modules/content/index.ts +144 -0
  53. package/template/src/cli/modules/dispute/index.ts +150 -0
  54. package/template/src/cli/modules/file/index.ts +55 -0
  55. package/template/src/cli/modules/index.ts +30 -5
  56. package/template/src/cli/modules/order/index.ts +170 -0
  57. package/template/src/cli/modules/permission/index.ts +195 -0
  58. package/template/src/cli/modules/tenant/index.ts +142 -0
  59. package/template/src/cli/modules/ticket/index.ts +167 -0
  60. package/template/src/cli/rpc/client.ts +2 -2
  61. package/template/src/client/index.css +73 -0
  62. package/template/src/merchant/App.tsx +2 -0
  63. package/template/src/merchant/components/MerchantGuard.tsx +2 -6
  64. package/template/src/merchant/components/__tests__/MerchantGuard.test.tsx +117 -0
  65. package/template/src/merchant/layouts/Header.tsx +2 -2
  66. package/template/src/merchant/pages/DashboardPage.tsx +2 -2
  67. package/template/src/merchant/pages/DisputesPage.tsx +14 -10
  68. package/template/src/merchant/pages/LoginPage.tsx +49 -0
  69. package/template/src/merchant/pages/OrdersPage.tsx +17 -10
  70. package/template/src/merchant/pages/ProductsPage.tsx +31 -8
  71. package/template/src/merchant/pages/SettingsPage.tsx +3 -7
  72. package/template/src/merchant/stores/__tests__/merchantStore.test.ts +317 -0
  73. package/template/src/merchant/stores/merchantStore.ts +24 -27
  74. package/template/src/server/db/schema/index.ts +2 -0
  75. package/template/src/server/db/schema/merchants.ts +26 -0
  76. package/template/src/server/db/schema/products.ts +25 -0
  77. package/template/src/server/db/test-setup.ts +237 -0
  78. package/template/src/server/middleware/__tests__/audit-log.test.ts +144 -0
  79. package/template/src/server/middleware/__tests__/cors.test.ts +84 -0
  80. package/template/src/server/middleware/__tests__/logger.test.ts +117 -0
  81. package/template/src/server/middleware/__tests__/rate-limit.test.ts +73 -0
  82. package/template/src/server/middleware/__tests__/realtime-env.test.ts +56 -0
  83. package/template/src/server/middleware/__tests__/tenant-isolation.test.ts +150 -0
  84. package/template/src/server/module-admin/__tests__/admin-routes.test.ts +1 -1
  85. package/template/src/server/module-admin/module.ts +4 -0
  86. package/template/src/server/module-admin/routes/admin-notification-routes.ts +3 -3
  87. package/template/src/server/module-admin/routes/user-management-routes.ts +2 -2
  88. package/template/src/server/module-auth/__tests__/auth-routes.test.ts +315 -0
  89. package/template/src/server/module-auth/__tests__/profile-routes.test.ts +83 -0
  90. package/template/src/server/module-auth/module.ts +2 -0
  91. package/template/src/server/module-content/module.ts +1 -0
  92. package/template/src/server/module-content/routes/content-routes.ts +2 -2
  93. package/template/src/server/module-dispute/module.ts +1 -0
  94. package/template/src/server/module-dispute/routes/dispute-routes.ts +2 -2
  95. package/template/src/server/module-merchant/__tests__/merchant-routes.test.ts +218 -0
  96. package/template/src/server/module-merchant/__tests__/merchant-service.test.ts +183 -0
  97. package/template/src/server/module-merchant/index.ts +10 -0
  98. package/template/src/server/module-merchant/module.ts +33 -0
  99. package/template/src/server/module-merchant/routes/merchant-routes.ts +138 -0
  100. package/template/src/server/module-merchant/services/merchant-service.ts +292 -0
  101. package/template/src/server/module-notifications/index.ts +18 -0
  102. package/template/src/server/module-notifications/module.ts +2 -0
  103. package/template/src/server/module-order/module.ts +1 -0
  104. package/template/src/server/module-order/routes/order-routes.ts +2 -2
  105. package/template/src/server/module-permission/routes/role-routes.ts +3 -3
  106. package/template/src/server/module-plugin/__tests__/admin-category-service.test.ts +181 -0
  107. package/template/src/server/module-plugin/__tests__/admin-plugin-service.test.ts +277 -0
  108. package/template/src/server/module-plugin/__tests__/admin-stats-service.test.ts +170 -0
  109. package/template/src/server/module-plugin/__tests__/plugin-review-service.test.ts +260 -0
  110. package/template/src/server/module-plugin/__tests__/plugin-seed-service.test.ts +170 -0
  111. package/template/src/server/module-plugin/module.ts +3 -0
  112. package/template/src/server/module-tenant/__tests__/tenant-routes.test.ts +142 -0
  113. package/template/src/server/module-tenant/__tests__/tenant-service.test.ts +152 -0
  114. package/template/src/server/module-tenant/module.ts +1 -0
  115. package/template/src/server/module-tenant/services/tenant-service.ts +1 -37
  116. package/template/src/server/module-ticket/module.ts +1 -0
  117. package/template/src/server/module-ticket/routes/ticket-routes.ts +2 -2
  118. package/template/src/server/module-todos/module.ts +3 -0
  119. package/template/src/server/route-registry.ts +4 -0
  120. package/template/src/server/utils/__tests__/date.test.ts +130 -0
  121. package/template/src/server/utils/__tests__/env.test.ts +25 -0
  122. package/template/src/server/utils/__tests__/generate.test.ts +82 -0
  123. package/template/src/server/utils/__tests__/id-helpers.test.ts +29 -0
  124. package/template/src/server/utils/__tests__/json.test.ts +49 -0
  125. package/template/src/server/utils/__tests__/permission-utils.test.ts +26 -0
  126. package/template/src/server/utils/__tests__/uuid.test.ts +25 -0
  127. package/template/src/shared/core/module-manifest.ts +15 -0
  128. package/template/src/shared/modules/admin/schemas.ts +1 -1
  129. package/template/src/shared/modules/content/schemas.ts +2 -2
  130. package/template/src/shared/modules/dispute/schemas.ts +2 -2
  131. package/template/src/shared/modules/index.ts +181 -1
  132. package/template/src/shared/modules/merchant/index.ts +12 -0
  133. package/template/src/shared/modules/merchant/schemas.ts +63 -0
  134. package/template/src/shared/modules/order/schemas.ts +2 -2
  135. package/template/src/shared/modules/permission/index.ts +1 -1
  136. package/template/src/shared/modules/permission/schemas.ts +1 -1
  137. package/template/src/shared/modules/role/schemas.ts +2 -2
  138. package/template/src/shared/modules/ticket/schemas.ts +2 -2
  139. package/template/src/shared/schemas/index.ts +74 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/generators/template-generator.ts","../../src/generators/file-filter.ts","../../src/generators/route-registry.ts","../../src/generators/client-navigation.ts","../../src/generators/client-app-test.ts","../../src/generators/client-navigation-test.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/generators/client-preset-ui-config.ts","../../src/generators/client-main.ts","../../src/commands/create.ts","../../src/index.ts"],"names":["moduleOrder","MODULE_EXPORTS","pkg","join","path","getPresetType","__filename","__dirname","generatedFiles","gitignorePath","ignorePatterns","excludePatterns","fileURLToPath","readFileSync","chalk"],"mappings":"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AA;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,CAAA,CAAA;AA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","file":"index.js","sourcesContent":["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?:\n | { importPath: string; exportName: string }\n | { 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 hasCli: 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 const isCliOnly = preset.id === 'cli-only'\n\n return {\n preset,\n modules,\n hasAdmin,\n hasClient: !isCliOnly,\n hasCli: 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 if (name === 'todos') {\n excludes.push('src/cli/modules/todo')\n excludes.push('src/server/__tests__/integration/todos-api.test.ts')\n }\n\n if (name === 'auth') {\n excludes.push('src/cli/modules/auth')\n }\n\n if (name === 'plugin') {\n excludes.push('src/cli/modules/plugin')\n }\n }\n\n if (!resolved.modules.has('admin')) {\n excludes.push('src/admin')\n excludes.push('admin.html')\n excludes.push('auth-inject.html')\n }\n\n // tenant/merchant HTML entries only needed when tenant module is present (saas preset)\n if (!resolved.modules.has('tenant')) {\n excludes.push('src/tenant')\n excludes.push('tenant.html')\n excludes.push('src/merchant')\n excludes.push('merchant.html')\n }\n\n if (!resolved.hasClient) {\n excludes.push('src/client')\n excludes.push('index.html')\n excludes.push('admin.html')\n excludes.push('auth-inject.html')\n excludes.push('src/admin')\n excludes.push('vite.config.ts')\n excludes.push('postcss.config.js')\n excludes.push('tailwind.config.js')\n }\n\n if (!resolved.hasClient) {\n excludes.push('src/client/components/AuthButton.tsx')\n excludes.push('src/client/components/__tests__/AuthButton.test.tsx')\n } else if (!resolved.modules.has('admin') && !resolved.modules.has('auth')) {\n excludes.push('src/client/components/AuthButton.tsx')\n excludes.push('src/client/components/__tests__/AuthButton.test.tsx')\n excludes.push('src/server/utils/auth.ts')\n }\n\n excludes.push('src/client/preset-ui-config.ts')\n\n // LoginPage/RegisterPage are excluded via the for loop above (auth clientPages)\n // when auth module is not in the preset\n\n if (!resolved.hasPermission && !resolved.modules.has('auth')) {\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.hasPermission && resolved.modules.has('auth')) {\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 excludes.push('src/server/module-auth/__tests__/auth-service.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/shared/modules/index.ts',\n 'src/shared/schemas/index.ts',\n 'src/server/middleware/index.ts',\n 'src/server/app.ts',\n 'src/cli/modules/index.ts',\n ]\n\n if (resolved.hasClient) {\n files.push(\n 'src/client/App.tsx',\n 'src/client/components/Navigation.tsx',\n 'src/client/components/index.ts',\n 'src/client/Layout.tsx',\n 'src/client/components/__tests__/App.test.tsx',\n 'src/client/components/__tests__/Navigation.test.tsx',\n 'src/client/main.tsx',\n 'src/client/preset-ui-config.ts'\n )\n }\n\n if (resolved.hasClient && resolved.modules.has('admin')) {\n files.push('src/admin/App.tsx')\n }\n\n if (resolved.hasClient && !resolved.modules.has('admin')) {\n files.push('vite.config.ts')\n }\n\n if (resolved.hasClient && resolved.modules.has('admin')) {\n // admin preset needs generated vite.config.ts to filter tenant/merchant entries\n files.push('vite.config.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 // Always generate init.ts — every preset has different seed combinations\n files.push('src/server/db/init.ts')\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 clientRouteList = Array.isArray(manifest.routes.client)\n ? manifest.routes.client\n : [manifest.routes.client]\n for (const route of clientRouteList) {\n const { importPath, exportName } = route\n imports.push(\n `import { ${exportName} } from './${moduleDir}/${importPath.replace(/^\\.\\//, '')}'`\n )\n clientRoutes.push(` .route('/api', ${exportName})`)\n }\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","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 PluginsPage: 'Package',\n CategoriesPage: 'Grid',\n SearchPage: 'Search',\n PublishPage: 'Upload',\n DeveloperDashboardPage: 'Code',\n PluginDetailPage: 'Package',\n TopicsPage: 'Hash',\n ProfilePage: 'User',\n DashboardPage: 'LayoutDashboard',\n SettingsPage: 'Settings',\n CartPage: 'ShoppingCart',\n OrdersPage: 'Package',\n}\n\nexport function generateClientNavigation(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved).filter(p => !p.route.includes(':'))\n const hasAuth = resolved.modules.has('auth')\n\n const navItems: string[] = []\n for (const page of pages) {\n const icon = ICON_MAP[page.name] || DEFAULT_ICON\n const label =\n page.name === 'TodoPage'\n ? 'Todos'\n : page.name === 'NotificationPage'\n ? 'Notifications'\n : page.name === 'WebSocketPage'\n ? 'WebSocket'\n : page.name === 'PluginsPage'\n ? 'Plugins'\n : page.name === 'CategoriesPage'\n ? 'Categories'\n : page.name === 'SearchPage'\n ? 'Search'\n : page.name === 'PublishPage'\n ? 'Publish'\n : page.name === 'DeveloperDashboardPage'\n ? 'Developer'\n : page.name === 'TopicsPage'\n ? 'Topics'\n : page.name === 'ProfilePage'\n ? 'Profile'\n : page.name === 'DashboardPage'\n ? 'Dashboard'\n : page.name === 'SettingsPage'\n ? 'Settings'\n : page.name === 'CartPage'\n ? 'Cart'\n : page.name === 'OrdersPage'\n ? 'Orders'\n : page.route.replace(/^\\//, '').charAt(0).toUpperCase() +\n page.route.replace(/^\\//, '').slice(1)\n navItems.push(` { label: '${label}', icon: '${icon}', path: '${page.route}' },`)\n }\n\n const authImport = hasAuth ? `\\nimport { useAuthStore } from '../stores/authStore'` : ''\n\n const authSection = hasAuth\n ? `\nfunction AuthSection({ style }: { style: string }) {\n const isAuthenticated = useAuthStore((state: any) => state.isAuthenticated)\n const user = useAuthStore((state: any) => state.user)\n const logout = useAuthStore((state: any) => state.logout)\n\n if (style === 'none') return null\n\n if (isAuthenticated) {\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-gray-600\">{user?.username}</span>\n <button onClick={logout} className=\"text-xs text-gray-400 hover:text-red-500\">Sign Out</button>\n </div>\n )\n }\n\n if (style === 'buttons') {\n return (\n <div className=\"flex items-center gap-2\">\n <Link\n to=\"/login\"\n className=\"px-3 py-1 text-sm bg-blue-500 text-white rounded hover:bg-blue-600\"\n >\n Sign In\n </Link>\n <Link\n to=\"/register\"\n className=\"px-3 py-1 text-sm border border-gray-300 text-gray-700 rounded hover:bg-gray-50\"\n >\n Sign Up\n </Link>\n </div>\n )\n }\n\n return (\n <Link to=\"/login\" className=\"text-sm text-gray-500 hover:text-gray-900\">\n Login\n </Link>\n )\n}\n`\n : `\nfunction AuthSection(_style: { style: string }) {\n return null\n}\n`\n\n return `import { NavLink${hasAuth ? ', Link' : ''} } from 'react-router-dom'\nimport { Rocket, Sparkles } from 'lucide-react'${authImport}\nimport type { PresetTheme, NavigationConfig, ClientNavItem } from '../preset-ui-config'\n\ninterface NavigationProps {\n preset?: string\n items?: ClientNavItem[]\n theme?: PresetTheme\n navigation?: NavigationConfig\n}\n${authSection}\nexport const Navigation: React.FC<NavigationProps> = ({\n items,\n theme,\n navigation,\n}) => {\n const navItems = navigation?.navItems === 'none' ? [] : (items ?? [])\n const primaryColor = theme?.primaryColor ?? '#6366f1'\n const logoText = theme?.logoText ?? 'Biomimic'\n const showLogo = navigation?.showLogo !== false\n const authStyle = navigation?.authStyle ?? 'none'\n\n return (\n <nav className=\"hidden md:block bg-white/80 backdrop-blur-md border-b border-gray-200 sticky top-0 z-50\" data-testid=\"app-nav\">\n <div className=\"max-w-7xl mx-auto px-4 h-16 flex items-center justify-between gap-3\">\n {showLogo && (\n <NavLink to=\"/\" className=\"flex items-center gap-2 group shrink-0\" data-testid=\"app-title\">\n <div\n className=\"w-8 h-8 rounded-lg flex items-center justify-center shadow-sm group-hover:shadow-md transition-shadow\"\n style={{ backgroundColor: primaryColor }}\n >\n <Rocket className=\"w-4 h-4 text-white\" />\n </div>\n <span className=\"text-lg font-semibold text-gray-900 tracking-tight whitespace-nowrap\">\n {logoText}\n </span>\n <Sparkles className=\"w-3.5 h-3.5 shrink-0\" style={{ color: primaryColor }} />\n </NavLink>\n )}\n\n <div className=\"flex items-center gap-0.5 overflow-x-auto flex-1 min-w-0 scrollbar-hide\">\n {navItems.map(item => (\n <NavLink\n key={item.path}\n to={item.path}\n data-testid={\\`nav-\\${item.label.toLowerCase().replace(/\\\\s+/g, '-')}-button\\`}\n className={({ isActive }: { isActive: boolean }) =>\n \\`px-3 py-1.5 rounded-lg text-sm font-medium transition-all duration-200 shrink-0 whitespace-nowrap \\${\n isActive ? 'text-white' : 'text-gray-500 hover:text-gray-900 hover:bg-gray-50'\n }\\`\n }\n style={\n (({ isActive }: { isActive: boolean }) =>\n isActive\n ? { backgroundColor: \\`\\${primaryColor}15\\`, color: primaryColor }\n : undefined) as never\n }\n >\n {item.label}\n </NavLink>\n ))}\n </div>\n\n <AuthSection style={authStyle} />\n </div>\n </nav>\n )\n}\n`\n}\n","import type { ResolvedPreset } from './template-generator'\nimport { getClientPages } from './template-generator'\n\nexport function generateClientAppTest(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved)\n\n const mocks = pages\n .map(\n p =>\n `vi.mock('@client/pages/${p.name}', () => ({\n ${p.name}: () => <div data-testid=\"${p.name.toLowerCase()}-page\">${p.name}</div>,\n}))`\n )\n .join('\\n\\n ')\n\n return `import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'\nimport { render, screen, cleanup } from '@testing-library/react'\nimport '@testing-library/jest-dom'\nimport { App } from '@client/App'\n\n ${mocks}\n\ndescribe('App Component', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n cleanup()\n })\n\n describe('Initial Render', () => {\n it('should render navigation', () => {\n render(<App />)\n expect(screen.getByTestId('app-nav')).toBeInTheDocument()\n })\n\n it('should render main content area', () => {\n render(<App />)\n expect(screen.getByTestId('app-main')).toBeInTheDocument()\n })\n\n it('should render container', () => {\n render(<App />)\n expect(screen.getByTestId('app-container')).toBeInTheDocument()\n })\n })\n\n describe('Navigation Links', () => {\n it('should render footer', () => {\n render(<App />)\n expect(screen.getByTestId('app-footer')).toBeInTheDocument()\n })\n })\n})\n`\n}\n","import type { ResolvedPreset } from './template-generator'\nimport { getClientPages } from './template-generator'\n\nconst LABEL_MAP: Record<string, string> = {\n TodoPage: 'Todos',\n NotificationPage: 'Notifications',\n WebSocketPage: 'WebSocket',\n PluginsPage: 'Plugins',\n CategoriesPage: 'Categories',\n SearchPage: 'Search',\n PublishPage: 'Publish',\n DeveloperDashboardPage: 'Developer',\n TopicsPage: 'Topics',\n ProfilePage: 'Profile',\n DashboardPage: 'Dashboard',\n SettingsPage: 'Settings',\n CartPage: 'Cart',\n OrdersPage: 'Orders',\n}\n\nexport function generateClientNavigationTest(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved).filter(p => !p.route.includes(':'))\n const firstPage = pages[0]\n\n if (!firstPage) {\n return `import { describe, it, expect } from 'vitest'\nimport { render, screen } from '@testing-library/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport { Navigation } from '../Navigation'\n\nconst renderWithRouter = (component: React.ReactNode) => {\n return render(<BrowserRouter>{component}</BrowserRouter>)\n}\n\ndescribe('Navigation', () => {\n it('should render navigation', () => {\n renderWithRouter(<Navigation />)\n expect(screen.getByTestId('app-nav')).toBeInTheDocument()\n })\n})\n`\n }\n\n const firstLabel = LABEL_MAP[firstPage.name] || firstPage.name.replace('Page', '')\n\n return `import { describe, it, expect } from 'vitest'\nimport { render, screen } from '@testing-library/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport { Navigation } from '../Navigation'\n\nconst renderWithRouter = (component: React.ReactNode) => {\n return render(<BrowserRouter>{component}</BrowserRouter>)\n}\n\ndescribe('Navigation', () => {\n it('should render navigation', () => {\n renderWithRouter(<Navigation />)\n expect(screen.getByTestId('app-nav')).toBeInTheDocument()\n })\n\n it('should render nav items', () => {\n renderWithRouter(<Navigation />)\n expect(screen.getByText('${firstLabel}')).toBeInTheDocument()\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 => ` <Route path=\"${p.route}\" element={<${p.name} />} />`\n )\n\n const defaultProtectedRoute = protectedPages.length > 0 ? protectedPages[0].route : '/'\n\n const captchaElement = resolved.hasCaptcha ? `\\n <CaptchaModal />` : ''\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<{ basePath?: string }> = ({ basePath = '/admin' }) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: '#1890ff',\n },\n }}\n >\n <BrowserRouter basename={basePath}>\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: 'todos',\n importLine: '',\n call: \"import('../module-todos/services/todo-service').then(m => m.seedTodosIfEmpty())\",\n },\n {\n module: 'order',\n importLine: '',\n call: \"import('../module-order/services/order-service').then(m => m.seedOrdersIfEmpty())\",\n },\n {\n module: 'ticket',\n importLine: '',\n call: \"import('../module-ticket/services/ticket-service').then(m => m.seedTicketsIfEmpty())\",\n },\n {\n module: 'dispute',\n importLine: '',\n call: \"import('../module-dispute/services/dispute-service').then(m => m.seedDisputesIfEmpty())\",\n },\n {\n module: 'content',\n importLine: '',\n call: \"import('../module-content/services/content-service').then(m => m.seedContentsIfEmpty())\",\n },\n {\n module: 'tenant',\n importLine: '',\n call: \"import('../module-tenant/services/tenant-service').then(m => m.seedTenantsIfEmpty())\",\n },\n {\n module: 'plugin',\n importLine: '',\n call: \"import('../module-plugin/services/plugin-seed-service').then(m => m.seedPluginsIfEmpty())\",\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(activeSeeds)\n }\n\n return generateFullDbInit(activeSeeds)\n}\n\nfunction generateMinimalDbInit(activeSeeds: SeedModule[]): string {\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 { logger } from '../utils/logger'\n\nconst log = logger.db()\n\nexport async function initializeDatabase() {\n await getDb()\n\n log.info({}, 'Initializing database...')\n\n log.info({}, 'Database initialization complete!')${seedBlock}\n}\n`\n}\n\nfunction generateFullDbInit(activeSeeds: SeedModule[]): string {\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\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 auth: {\n namedExports: [\n 'DeveloperProfileSchema',\n 'LoginSchema',\n 'RegisterSchema',\n 'TokenResponseSchema',\n 'type DeveloperProfile',\n 'type LoginInput',\n 'type RegisterInput',\n 'type TokenResponse',\n ],\n },\n plugin: {\n namedExports: [\n 'PluginSchema',\n 'PluginStatusSchema',\n 'CreatePluginSchema',\n 'UpdatePluginSchema',\n 'PluginVersionStatusSchema',\n 'VersionSchema',\n 'CategorySchema',\n 'ReviewSchema',\n 'CreateReviewSchema',\n 'MarketplaceStatsSchema',\n 'PluginListResponseSchema',\n 'AdminPluginSchema',\n 'AdminDashboardStatsSchema',\n 'PluginListQuerySchema',\n 'PluginSlugSchema',\n 'type Plugin',\n 'type PluginStatus',\n 'type CreatePluginInput',\n 'type UpdatePluginInput',\n 'type PluginVersionStatus',\n 'type Version',\n 'type Category',\n 'type Review',\n 'type CreateReviewInput',\n 'type MarketplaceStats',\n 'type PluginListResponse',\n 'type AdminPlugin',\n 'type AdminDashboardStats',\n 'type PluginListQuery',\n ],\n },\n}\n\nexport function generateSharedModulesIndex(resolved: ResolvedPreset): string {\n const lines: string[] = []\n\n const moduleOrder = [\n 'chat',\n 'todos',\n 'file',\n 'notifications',\n 'admin',\n 'permission',\n 'auth',\n 'plugin',\n ]\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 auth: {\n namedExports: [\n 'DeveloperProfileSchema',\n 'LoginSchema',\n 'RegisterSchema',\n 'TokenResponseSchema',\n 'ProfileSchema',\n 'type DeveloperProfile',\n 'type LoginInput',\n 'type RegisterInput',\n 'type TokenResponse',\n 'type Profile',\n ],\n },\n plugin: {\n namedExports: [\n 'PluginSchema',\n 'PluginStatusSchema',\n 'CreatePluginSchema',\n 'UpdatePluginSchema',\n 'PluginVersionStatusSchema',\n 'VersionSchema',\n 'CategorySchema',\n 'ReviewSchema',\n 'CreateReviewSchema',\n 'MarketplaceStatsSchema',\n 'PluginListResponseSchema',\n 'AdminPluginSchema',\n 'AdminDashboardStatsSchema',\n 'PluginListQuerySchema',\n 'PluginSlugSchema',\n 'PluginSearchQuerySchema',\n 'PluginDeleteResponseSchema',\n 'ReviewIdParamsSchema',\n 'ReviewDeleteResponseSchema',\n 'CategorySlugParamsSchema',\n 'CategoryPluginsQuerySchema',\n 'PluginListAdminSchema',\n 'AdminListQuerySchema',\n 'AdminListAllQuerySchema',\n 'RejectPluginBodySchema',\n 'BulkApproveBodySchema',\n 'BulkRejectBodySchema',\n 'BulkResponseSchema',\n 'CreateCategoryBodySchema',\n 'UpdateCategoryBodySchema',\n 'CategoryIdParamsSchema',\n 'CategoryIdResponseSchema',\n 'type Plugin',\n 'type PluginStatus',\n 'type CreatePluginInput',\n 'type UpdatePluginInput',\n 'type PluginVersionStatus',\n 'type Version',\n 'type Category',\n 'type Review',\n 'type CreateReviewInput',\n 'type MarketplaceStats',\n 'type PluginListResponse',\n 'type AdminPlugin',\n 'type AdminDashboardStats',\n 'type PluginListQuery',\n ],\n },\n admin: {\n namedExports: [\n 'SystemStatsSchema',\n 'HealthCheckSchema',\n 'RecentActivityItemSchema',\n 'RecentActivitySchema',\n 'AuthUserSchema',\n 'LoginRequestSchema',\n 'LoginResponseSchema',\n 'RegisterRequestSchema',\n 'UserSchema',\n 'UserListSchema',\n 'UpdateUserRequestSchema',\n 'CreateUserRequestSchema',\n 'ClearTodosResultSchema',\n 'SuccessSchema',\n 'DownloadTokenSchema',\n 'type SystemStats',\n 'type HealthCheck',\n 'type RecentActivityItem',\n 'type AuthUserResponse',\n 'type CreateUserRequest',\n 'type LoginRequest',\n 'type LoginResponse',\n 'type RegisterRequest',\n 'type User',\n 'type UpdateUserRequest',\n 'type ClearTodosResult',\n ],\n },\n audit: {\n namedExports: ['ResourceTypeSchema', 'ActionTypeSchema', 'AuditLogSchema', 'type AuditLogType'],\n },\n captcha: {\n namedExports: [\n 'CaptchaResponseSchema',\n 'VerifyCaptchaRequestSchema',\n 'CaptchaVerifyResponseSchema',\n 'type CaptchaResponse',\n 'type VerifyCaptchaRequest',\n 'type CaptchaVerifyResponse',\n ],\n },\n cart: {\n namedExports: [\n 'CartItemSchema',\n 'CartSummarySchema',\n 'CartResponseSchema',\n 'AddCartItemSchema',\n 'CartItemIdSchema',\n 'type CartItem',\n 'type CartSummary',\n 'type CartResponse',\n 'type AddCartItemInput',\n ],\n },\n community: {\n namedExports: [\n 'TopicStatusSchema',\n 'TopicTagSchema',\n 'TopicAuthorSchema',\n 'TopicSchema',\n 'TopicsResponseSchema',\n 'ProfileStatsSchema',\n 'ActivityTypeSchema',\n 'ProfileActivitySchema',\n 'ProfileResponseSchema',\n 'type TopicStatus',\n 'type TopicTag',\n 'type TopicAuthor',\n 'type Topic',\n 'type ProfileStats',\n 'type ActivityType',\n 'type ProfileActivity',\n 'type ProfileResponse',\n ],\n },\n content: {\n namedExports: [\n 'ContentCategorySchema',\n 'ContentStatusSchema',\n 'ContentSchema',\n 'CreateContentSchema',\n 'UpdateContentSchema',\n 'ContentListSchema',\n 'DeleteResultSchema',\n 'type ContentCategory',\n 'type ContentStatus',\n 'type Content',\n 'type CreateContentInput',\n 'type UpdateContentInput',\n 'type DeleteResult',\n ],\n },\n dashboard: {\n namedExports: [\n 'DashboardStatSchema',\n 'RevenueDataSchema',\n 'ActivityStatusSchema',\n 'ActivitySchema',\n 'DashboardResponseSchema',\n 'type DashboardStat',\n 'type RevenueData',\n 'type ActivityStatus',\n 'type Activity',\n 'type DashboardResponse',\n ],\n },\n dispute: {\n namedExports: [\n 'DisputeTypeSchema',\n 'DisputeStatusSchema',\n 'DisputeSchema',\n 'CreateDisputeSchema',\n 'UpdateDisputeSchema',\n 'ResolveDisputeSchema',\n 'DisputeListSchema',\n 'DeleteResultSchema',\n 'type DisputeType',\n 'type DisputeStatus',\n 'type Dispute',\n 'type CreateDisputeInput',\n 'type UpdateDisputeInput',\n 'type ResolveDisputeInput',\n 'type DeleteResult',\n ],\n },\n order: {\n namedExports: [\n 'OrderStatusSchema',\n 'OrderSchema',\n 'CreateOrderSchema',\n 'UpdateOrderSchema',\n 'OrderListSchema',\n 'OrderQuerySchema',\n 'DeleteResultSchema',\n 'ProcessOrderSchema',\n 'CancelOrderSchema',\n 'RemoveCartItemResponseSchema',\n 'ECommerceProductSchema',\n 'ECommerceOrderStatusSchema',\n 'ECommerceOrderSchema',\n 'ECommerceOrderListSchema',\n 'type OrderStatus',\n 'type Order',\n 'type CreateOrderInput',\n 'type UpdateOrderInput',\n 'type DeleteResult',\n 'type ProcessOrderInput',\n 'type CancelOrderInput',\n 'type OrderQueryInput',\n 'type RemoveCartItemResponse',\n 'type ECommerceProduct',\n 'type ECommerceOrderStatus',\n 'type ECommerceOrder',\n ],\n },\n permission: {\n namedExports: [\n 'RoleEnum',\n 'PermissionEnum',\n 'RoleInfoSchema',\n 'PermissionInfoSchema',\n 'UserPermissionsSchema',\n 'MenuItemSchema',\n 'PageActionSchema',\n 'PagePermissionConfigSchema',\n 'PermissionCategorySchema',\n 'RoleListSchema',\n 'PermissionListSchema',\n 'MenuConfigSchema',\n 'PagePermissionsSchema',\n 'PermissionCategoriesSchema',\n 'RoleLabelsSchema',\n 'PermissionLabelsSchema',\n 'PermissionInitSchema',\n 'type RoleType',\n 'type PermissionType',\n 'type RoleInfo',\n 'type PermissionInfo',\n 'type UserPermissions',\n 'type MenuItem',\n 'type PageAction',\n 'type PagePermissionConfig',\n 'type PermissionCategory',\n 'type PermissionInit',\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 ],\n },\n role: {\n namedExports: [\n 'RoleSchema',\n 'CreateRoleSchema',\n 'UpdateRoleSchema',\n 'UpdateRolePermissionsSchema',\n 'SuccessSchema',\n 'type RoleType',\n 'type CreateRoleType',\n 'type UpdateRoleType',\n ],\n },\n ticket: {\n namedExports: [\n 'TicketStatusSchema',\n 'TicketPrioritySchema',\n 'TicketCategorySchema',\n 'TicketReplySchema',\n 'TicketSchema',\n 'CreateTicketSchema',\n 'UpdateTicketSchema',\n 'ReplyTicketSchema',\n 'TicketListSchema',\n 'DeleteResultSchema',\n 'type TicketStatus',\n 'type TicketPriority',\n 'type TicketCategory',\n 'type TicketReply',\n 'type Ticket',\n 'type CreateTicketInput',\n 'type UpdateTicketInput',\n 'type ReplyTicketInput',\n 'type DeleteResult',\n ],\n },\n}\n\nconst ADDITIONAL_PATHS_MAP: Record<string, string[]> = {\n permission: ['role', 'audit'],\n}\n\nconst STANDALONE_SHARED_MODULES = new Set(['cart', 'community', 'dashboard'])\n\nconst moduleOrder = [\n 'chat',\n 'file',\n 'todos',\n 'notifications',\n 'auth',\n 'plugin',\n 'admin',\n 'audit',\n 'captcha',\n 'cart',\n 'community',\n 'content',\n 'dashboard',\n 'dispute',\n 'order',\n 'permission',\n 'role',\n 'ticket',\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 exportedNames = new Set<string>()\n\n for (const moduleName of moduleOrder) {\n const exports = MODULE_EXPORTS[moduleName]\n if (!exports) continue\n\n const shouldInclude = shouldIncludeModule(moduleName, resolved)\n if (!shouldInclude) continue\n\n const uniqueExports = exports.namedExports.filter(name => {\n if (exportedNames.has(name)) return false\n exportedNames.add(name)\n return true\n })\n\n if (uniqueExports.length === 0) continue\n\n const importPath = getImportPath(moduleName, resolved)\n\n moduleLines.push(\n `export {\\n ${uniqueExports.join(',\\n ')},\\n} from '../modules/${importPath}'`\n )\n }\n\n return header + moduleLines.join('\\n') + '\\n'\n}\n\nfunction shouldIncludeModule(moduleName: string, resolved: ResolvedPreset): boolean {\n if (resolved.modules.has(moduleName)) return true\n\n if (STANDALONE_SHARED_MODULES.has(moduleName)) return true\n\n for (const [parentModule, additionalPaths] of Object.entries(ADDITIONAL_PATHS_MAP)) {\n if (additionalPaths.includes(moduleName) && resolved.modules.has(parentModule)) {\n return true\n }\n }\n\n return false\n}\n\nfunction getImportPath(moduleName: string, resolved: ResolvedPreset): string {\n const manifest = resolved.modules.get(moduleName)\n if (manifest?.sharedSchemas?.path) {\n return manifest.sharedSchemas.path\n }\n return moduleName\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport function generateMiddlewareIndex(resolved: ResolvedPreset): string {\n const lines: string[] = []\n const hasAuthOrPermission = resolved.modules.has('auth') || resolved.hasPermission\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 (hasAuthOrPermission) {\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 (hasAuthOrPermission) {\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 if (resolved.modules.has('auth') && !resolved.hasPermission) {\n return generateSimplifiedAuthMiddleware()\n }\n\n return generateNoopAuthMiddleware()\n}\n\nfunction generateSimplifiedAuthMiddleware(): 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\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 log.warn({ path: c.req.path, method: c.req.method }, 'Missing auth token')\n return c.json({ success: false, error: 'Authentication required', status: 401 }, 401)\n }\n\n try {\n const jwt = await import('jsonwebtoken')\n const secretKey = process.env.AUTH_SECRET_KEY || 'dev-secret-key-change-in-production'\n const decoded = jwt.verify(token, secretKey) as {\n userId: string\n username: string\n email: string\n role: string\n }\n\n const user: AuthUser = {\n id: decoded.userId,\n username: decoded.username,\n email: decoded.email,\n role: decoded.role as UserRole,\n }\n\n c.set('authUser', user)\n log.info({ userId: user.id, path: c.req.path }, 'User authenticated')\n await next()\n } catch {\n log.warn({ path: c.req.path, method: c.req.method }, 'Invalid auth token')\n return c.json({ success: false, error: 'Invalid or expired token', status: 401 }, 401)\n }\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\nfunction generateNoopAuthMiddleware(): 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 const hasAuthOrPermission = resolved.modules.has('auth') || resolved.hasPermission\n\n if (!hasAuthOrPermission) {\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 if (resolved.modules.has('auth') && !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\nexport function getOptionalAuthUser(c: Context): AuthUser | null {\n try {\n return c.get('authUser')\n } catch {\n return null\n }\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') || resolved.modules.has('auth')) {\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(site)')\n }\n\n if (resolved.modules.has('notifications')) {\n modules.push(\"import { registerNotificationCommands } from './notification'\")\n registrations.push('registerNotificationCommands(site)')\n }\n\n if (resolved.modules.has('auth')) {\n modules.push(\"import { registerAuthCommands } from './auth'\")\n registrations.push('registerAuthCommands(site)')\n }\n\n if (resolved.modules.has('plugin')) {\n modules.push(\"import { registerPluginCommands } from './plugin'\")\n registrations.push('registerPluginCommands(site)')\n }\n\n modules.push(\"import { registerConfigCommands } from './config'\")\n registrations.push('registerConfigCommands(site)')\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 `import type { Core } from '@dyyz1993/xcli-core'\n${modules.join('\\n')}\n\n/**\n * Register all builtin CLI commands to xcli-core.\n * Each register function receives a SiteInstance for command registration.\n */\nexport function registerBuiltinCommands(app: Core) {\n const api = app.loader.getAPI()\n\n const site = api.createSite({\n name: 'local-server',\n url: 'http://localhost:3010',\n })\n\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 auth: ['bcryptjs'],\n}\n\n/** Packages needed by the admin panel UI */\nconst ADMIN_PANEL_PACKAGES = ['antd']\n\n/** Packages needed by the CLI app (xcli-core based) */\nconst CLI_PACKAGES = ['commander'] // legacy, removed from template\n\n/** Packages that are never imported (unused) */\nconst UNUSED_PACKAGES = ['lodash-es', 'chalk', 'mysql2']\n\n/** Packages only needed by the web client (React frontend) */\nconst CLIENT_PACKAGES = [\n 'react',\n 'react-dom',\n 'react-helmet-async',\n 'react-router-dom',\n 'lucide-react',\n 'zustand',\n]\n\n/** Dev packages only needed when a web client is present */\nconst CLIENT_DEV_PACKAGES = [\n '@vitejs/plugin-react',\n '@testing-library/react',\n '@testing-library/jest-dom',\n '@testing-library/dom',\n 'vite',\n 'jsdom',\n 'tailwindcss',\n '@tailwindcss/postcss',\n 'postcss',\n 'autoprefixer',\n '@playwright/test',\n 'playwright',\n '@prerenderer/renderer-jsdom',\n '@prerenderer/renderer-puppeteer',\n '@prerenderer/rollup-plugin',\n 'eventsource',\n]\n\n/** Type packages only needed when a web client is present */\nconst CLIENT_TYPE_PACKAGES = ['@types/react', '@types/react-dom']\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 only if ALL modules requiring it are absent\n const packageToModules: Record<string, string[]> = {}\n for (const [module, packages] of Object.entries(MODULE_PACKAGES)) {\n for (const pkg of packages) {\n if (!packageToModules[pkg]) packageToModules[pkg] = []\n packageToModules[pkg].push(module)\n }\n }\n\n for (const [pkg, modules] of Object.entries(packageToModules)) {\n if (!modules.some(m => resolved.modules.has(m))) {\n packagesToRemove.add(pkg)\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 legacy packages (commander was replaced by xcli-core)\n // commander is no longer in template dependencies, but guard against it\n for (const pkg of CLI_PACKAGES) {\n packagesToRemove.add(pkg)\n }\n\n // Remove client packages if no web client\n if (!resolved.hasClient) {\n for (const pkg of CLIENT_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 if (!resolved.hasClient) {\n for (const pkg of CLIENT_DEV_PACKAGES) {\n delete devDeps[pkg]\n }\n for (const pkg of CLIENT_TYPE_PACKAGES) {\n delete devDeps[pkg]\n }\n }\n result.devDependencies = devDeps\n }\n\n // Adjust scripts for cli-only preset\n if (!resolved.hasClient && result.scripts && typeof result.scripts === 'object') {\n const scripts = { ...(result.scripts as Record<string, string>) }\n\n // Override dev to start server directly instead of vite\n scripts['dev'] = 'NODE_ENV=development node --import tsx src/server/entries/node.ts'\n scripts['build'] = 'npm run build:server && npm run build:cli'\n scripts['build:all'] = 'npm run build:server && npm run build:cli'\n delete scripts['build:client']\n delete scripts['build:cloudflare']\n delete scripts['preview']\n delete scripts['dev:todo']\n delete scripts['dev:plugin']\n delete scripts['dev:ecommerce']\n delete scripts['dev:community']\n delete scripts['dev:forum']\n delete scripts['dev:saas']\n delete scripts['dev:cf']\n delete scripts['deploy:cf']\n delete scripts['test:e2e']\n delete scripts['test:e2e:ui']\n delete scripts['test:e2e:debug']\n delete scripts['test:full']\n\n result.scripts = scripts\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 // Build list of entries to remove based on missing modules\n const entriesToRemove: string[] = []\n const aliasesToRemove: string[] = []\n\n if (!resolved.modules.has('admin')) {\n entriesToRemove.push('admin')\n aliasesToRemove.push('@admin')\n }\n if (!resolved.modules.has('tenant')) {\n entriesToRemove.push('tenant', 'merchant')\n aliasesToRemove.push('@tenant', '@merchant')\n }\n\n // Remove rollupOptions input entries: \" name: path.resolve(__dirname, 'name.html'),\"\n for (const name of entriesToRemove) {\n const re = new RegExp(`^\\\\s*${name}:\\\\s*path\\\\.resolve\\\\(__dirname,\\\\s*['\"]${name}\\\\.html['\"]\\\\),\\\\s*$\\\\n?`, 'gm')\n content = content.replace(re, '')\n }\n\n // Remove path aliases: \" '@name': path.resolve(__dirname, 'src/name'),\"\n for (const alias of aliasesToRemove) {\n const escapedAlias = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const dirName = alias.replace('@', '')\n const re = new RegExp(`^\\\\s*'${escapedAlias}':\\\\s*path\\\\.resolve\\\\(__dirname,\\\\s*['\"]src\\\\/${dirName}['\"]\\\\),\\\\s*$\\\\n?`, 'gm')\n content = content.replace(re, '')\n }\n\n return content\n}\n","import type { ResolvedPreset } from './template-generator'\n\nfunction getPresetType(presetId: string): string {\n const map: Record<string, string> = {\n 'todo-app': 'todo',\n 'xbrowser-marketplace': 'plugin',\n ecommerce: 'ecommerce',\n 'fullstack-admin': 'saas',\n forum: 'community',\n minimal: 'todo',\n }\n return map[presetId] || 'todo'\n}\n\nfunction getThemeForPresetType(presetType: string): { constName: string; theme: string } {\n const themes: Record<string, { constName: string; theme: string }> = {\n todo: {\n constName: 'TODO_THEME',\n theme: `{\n primaryColor: '#6366f1',\n primaryHover: '#4f46e5',\n bgColor: '#ffffff',\n textColor: '#111827',\n secondaryBg: '#f9fafb',\n borderColor: '#e5e7eb',\n borderRadius: '12px',\n logoText: 'Biomimic',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n plugin: {\n constName: 'PLUGIN_MARKET_THEME',\n theme: `{\n primaryColor: '#3b82f6',\n primaryHover: '#2563eb',\n bgColor: '#ffffff',\n textColor: '#111827',\n secondaryBg: '#f0f9ff',\n borderColor: '#bae6fd',\n borderRadius: '12px',\n logoText: 'PluginHub',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n ecommerce: {\n constName: 'ECOMMERCE_THEME',\n theme: `{\n primaryColor: '#f59e0b',\n primaryHover: '#d97706',\n bgColor: '#ffffff',\n textColor: '#111827',\n secondaryBg: '#fffbeb',\n borderColor: '#fde68a',\n borderRadius: '12px',\n logoText: 'ShopMart',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n saas: {\n constName: 'SAAS_ADMIN_THEME',\n theme: `{\n primaryColor: '#1f2937',\n primaryHover: '#374151',\n bgColor: '#f9fafb',\n textColor: '#111827',\n secondaryBg: '#f3f4f6',\n borderColor: '#e5e7eb',\n borderRadius: '8px',\n logoText: 'AdminPanel',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n }\n return themes[presetType] || themes.todo\n}\n\ninterface LazyRoute {\n path: string\n importPath: string\n componentName: string\n label: string\n}\n\nfunction getRoutesForPreset(presetType: string, resolved: ResolvedPreset): LazyRoute[] {\n const hasModule = (m: string) => resolved.modules.has(m)\n\n const loginRoute = {\n path: '/login',\n importPath: './pages/LoginPage',\n componentName: 'LoginPage',\n label: 'Login',\n }\n const registerRoute = {\n path: '/register',\n importPath: './pages/RegisterPage',\n componentName: 'RegisterPage',\n label: 'Register',\n }\n const maybeAuthRoutes = hasModule('auth')\n ? [\n loginRoute,\n registerRoute,\n {\n path: '/profile',\n importPath: './pages/ProfilePage',\n componentName: 'ProfilePage',\n label: 'Profile',\n },\n ]\n : []\n\n switch (presetType) {\n case 'todo': {\n const routes: LazyRoute[] = [\n ...maybeAuthRoutes,\n {\n path: '/todos',\n importPath: './pages/TodoPage',\n componentName: 'TodoPage',\n label: 'Todos',\n },\n ]\n if (hasModule('notifications')) {\n routes.push({\n path: '/notifications',\n importPath: './pages/NotificationPage',\n componentName: 'NotificationPage',\n label: 'Notifications',\n })\n }\n if (hasModule('chat')) {\n routes.push({\n path: '/websocket',\n importPath: './pages/WebSocketPage',\n componentName: 'WebSocketPage',\n label: 'WebSocket',\n })\n }\n return routes\n }\n\n case 'plugin': {\n const routes: LazyRoute[] = []\n if (hasModule('plugin')) {\n routes.push(\n {\n path: '/',\n importPath: './pages/PluginsPage',\n componentName: 'PluginsPage',\n label: 'Home',\n },\n {\n path: '/plugins',\n importPath: './pages/PluginsPage',\n componentName: 'PluginsPage',\n label: 'Plugins',\n },\n {\n path: '/plugins/:slug',\n importPath: './pages/PluginDetailPage',\n componentName: 'PluginDetailPage',\n label: 'Plugin Detail',\n },\n {\n path: '/categories',\n importPath: './pages/CategoriesPage',\n componentName: 'CategoriesPage',\n label: 'Categories',\n },\n {\n path: '/search',\n importPath: './pages/SearchPage',\n componentName: 'SearchPage',\n label: 'Search',\n },\n {\n path: '/publish',\n importPath: './pages/PublishPage',\n componentName: 'PublishPage',\n label: 'Publish',\n },\n {\n path: '/developer',\n importPath: './pages/DeveloperDashboardPage',\n componentName: 'DeveloperDashboardPage',\n label: 'Developer',\n }\n )\n }\n routes.push(...maybeAuthRoutes)\n if (hasModule('notifications')) {\n routes.push({\n path: '/notifications',\n importPath: './pages/NotificationPage',\n componentName: 'NotificationPage',\n label: 'Notifications',\n })\n }\n return routes\n }\n\n case 'ecommerce': {\n const routes: LazyRoute[] = []\n if (hasModule('content')) {\n routes.push(\n {\n path: '/',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Home',\n },\n {\n path: '/products',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Products',\n },\n {\n path: '/products/:id',\n importPath: './pages/ContentDetailPage',\n componentName: 'ContentDetailPage',\n label: 'Product Detail',\n },\n {\n path: '/content',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Content',\n },\n {\n path: '/content/:id',\n importPath: './pages/ContentDetailPage',\n componentName: 'ContentDetailPage',\n label: 'Content Detail',\n }\n )\n }\n if (hasModule('order')) {\n routes.push(\n {\n path: '/cart',\n importPath: './pages/CartPage',\n componentName: 'CartPage',\n label: 'Cart',\n },\n {\n path: '/orders',\n importPath: './pages/OrdersPage',\n componentName: 'OrdersPage',\n label: 'Orders',\n }\n )\n }\n routes.push(...maybeAuthRoutes)\n return routes\n }\n\n case 'saas': {\n const routes: LazyRoute[] = []\n if (hasModule('admin')) {\n routes.push(\n {\n path: '/dashboard',\n importPath: './pages/DashboardPage',\n componentName: 'DashboardPage',\n label: 'Dashboard',\n },\n {\n path: '/settings',\n importPath: './pages/SettingsPage',\n componentName: 'SettingsPage',\n label: 'Settings',\n }\n )\n }\n routes.push(...maybeAuthRoutes)\n return routes\n }\n\n default:\n return [...maybeAuthRoutes]\n }\n}\n\nfunction getNavConfigForPreset(\n presetType: string,\n hasAuth: boolean\n): {\n desktopNav: string[]\n mobileTabs: string[]\n defaultRoute: string\n name: string\n appType: string\n layout: string\n navigationObj: string\n} {\n switch (presetType) {\n case 'todo':\n return {\n name: 'Todo App',\n appType: 'client',\n layout: 'top-nav',\n navigationObj: hasAuth\n ? \"{ visible: true, showLogo: true, showSearch: false, showCart: false, authStyle: 'buttons', navItems: 'desktop' }\"\n : \"{ visible: true, showLogo: true, showSearch: false, showCart: false, authStyle: 'none', navItems: 'desktop' }\",\n desktopNav: [\n \"{ label: 'Todos', icon: 'CheckSquare', path: '/todos' }\",\n \"{ label: 'SSE Demo', icon: 'Bell', path: '/notifications' }\",\n \"{ label: 'WebSocket', icon: 'Zap', path: '/websocket' }\",\n ],\n mobileTabs: [\n \"{ label: 'Todos', icon: 'CheckSquare', path: '/todos' }\",\n \"{ label: 'SSE', icon: 'Bell', path: '/notifications' }\",\n \"{ label: 'WS', icon: 'Zap', path: '/websocket' }\",\n ],\n defaultRoute: '/todos',\n }\n\n case 'plugin':\n return {\n name: 'Plugin Market',\n appType: 'client',\n layout: 'top-nav',\n navigationObj:\n \"{ visible: true, showLogo: true, showSearch: true, showCart: false, authStyle: 'text-link', navItems: 'desktop' }\",\n desktopNav: [\n \"{ label: 'Discover', icon: 'Compass', path: '/plugins' }\",\n \"{ label: 'Plugins', icon: 'Puzzle', path: '/plugins/list' }\",\n \"{ label: 'Categories', icon: 'Tags', path: '/categories' }\",\n \"{ label: 'Search', icon: 'Search', path: '/search' }\",\n \"{ label: 'Publish', icon: 'PlusCircle', path: '/publish' }\",\n \"{ label: 'Developer', icon: 'Code', path: '/developer' }\",\n ],\n mobileTabs: [\n \"{ label: 'Discover', icon: 'Compass', path: '/plugins' }\",\n \"{ label: 'Plugins', icon: 'Puzzle', path: '/plugins/list' }\",\n \"{ label: 'Categories', icon: 'Tags', path: '/categories' }\",\n \"{ label: 'Search', icon: 'Search', path: '/search' }\",\n \"{ label: 'My', icon: 'User', path: '/developer' }\",\n ],\n defaultRoute: '/plugins',\n }\n\n case 'ecommerce':\n return {\n name: 'E-Commerce',\n appType: 'client',\n layout: 'top-nav',\n navigationObj:\n \"{ visible: true, showLogo: true, showSearch: true, showCart: true, authStyle: 'icon', navItems: 'desktop' }\",\n desktopNav: [\n \"{ label: 'Home', icon: 'Home', path: '/' }\",\n \"{ label: 'Products', icon: 'ShoppingBag', path: '/products' }\",\n \"{ label: 'Cart', icon: 'ShoppingCart', path: '/cart' }\",\n \"{ label: 'Orders', icon: 'Package', path: '/orders' }\",\n \"{ label: 'Account', icon: 'User', path: '/content' }\",\n ],\n mobileTabs: [\n \"{ label: 'Home', icon: 'Home', path: '/' }\",\n \"{ label: 'Products', icon: 'ShoppingBag', path: '/products' }\",\n \"{ label: 'Cart', icon: 'ShoppingCart', path: '/cart' }\",\n \"{ label: 'Orders', icon: 'Package', path: '/orders' }\",\n \"{ label: 'Me', icon: 'User', path: '/content' }\",\n ],\n defaultRoute: '/',\n }\n\n case 'saas':\n return {\n name: 'SaaS Admin',\n appType: 'admin',\n layout: 'minimal',\n navigationObj:\n \"{ visible: false, showLogo: false, showSearch: false, showCart: false, authStyle: 'none', navItems: 'none' }\",\n desktopNav: [\n \"{ label: 'Dashboard', icon: 'LayoutDashboard', path: '/dashboard' }\",\n \"{ label: 'Settings', icon: 'Settings', path: '/settings' }\",\n ],\n mobileTabs: [\n \"{ label: 'Dashboard', icon: 'LayoutDashboard', path: '/dashboard' }\",\n \"{ label: 'Settings', icon: 'Settings', path: '/settings' }\",\n ],\n defaultRoute: '/dashboard',\n }\n\n default:\n return {\n name: 'App',\n appType: 'client',\n layout: 'top-nav',\n navigationObj:\n \"{ visible: true, showLogo: true, showSearch: false, showCart: false, authStyle: 'none', navItems: 'desktop' }\",\n desktopNav: [\"{ label: 'Home', icon: 'Home', path: '/' }\"],\n mobileTabs: [\"{ label: 'Home', icon: 'Home', path: '/' }\"],\n defaultRoute: '/',\n }\n }\n}\n\nfunction filterNavByModules(navItems: string[], resolved: ResolvedPreset): string[] {\n const hasModule = (path: string) => {\n if (path === '/todos') return resolved.modules.has('todos')\n if (path === '/notifications') return resolved.modules.has('notifications')\n if (path === '/websocket') return resolved.modules.has('chat')\n if (\n path.startsWith('/plugins') ||\n path === '/categories' ||\n path === '/search' ||\n path === '/publish' ||\n path === '/developer'\n )\n return resolved.modules.has('plugin')\n if (path === '/cart' || path === '/orders') return resolved.modules.has('order')\n if (path.startsWith('/content') || path === '/products' || path === '/')\n return resolved.modules.has('content')\n if (path === '/topics' || path === '/popular' || path === '/profile')\n return resolved.modules.has('content')\n if (path === '/dashboard' || path === '/settings') return resolved.modules.has('admin')\n return true\n }\n return navItems.filter(item => {\n const pathMatch = item.match(/path:\\s*'([^']+)'/)\n if (!pathMatch) return true\n return hasModule(pathMatch[1])\n })\n}\n\nexport function generatePresetUIConfig(resolved: ResolvedPreset, presetId: string): string {\n const presetType = getPresetType(presetId)\n const { constName, theme } = getThemeForPresetType(presetType)\n const hasAuth = resolved.modules.has('auth')\n const navConfig = getNavConfigForPreset(presetType, hasAuth)\n const routes = getRoutesForPreset(presetType, resolved)\n\n // Build aliases: presetId → presetType (only if they differ)\n const aliases: Record<string, string> = {}\n if (presetId !== presetType) {\n aliases[presetId] = presetType\n }\n // Also add common aliases for convenience (e.g., 'fullstack-admin' → 'saas')\n const allAliases: Record<string, string> = {\n 'todo-app': 'todo',\n 'xbrowser-marketplace': 'plugin',\n ecommerce: 'ecommerce',\n 'fullstack-admin': 'saas',\n forum: 'community',\n minimal: 'todo',\n saas: 'saas',\n }\n // Include all aliases that point to the same preset type\n for (const [alias, type] of Object.entries(allAliases)) {\n if (type === presetType && alias !== presetType) {\n aliases[alias] = presetType\n }\n }\n\n const desktopNav = filterNavByModules(navConfig.desktopNav, resolved)\n const mobileTabs = filterNavByModules(navConfig.mobileTabs, resolved)\n\n const routeDefs = routes.map(r => {\n return ` {\n path: '${r.path}',\n component: lazy(() => import('${r.importPath}').then(m => ({ default: m.${r.componentName} }))),\n label: '${r.label}',\n }`\n })\n\n return `import { lazy, type ComponentType } from 'react'\n\nexport type PresetType = '${presetType}'\n\nexport type AppType = 'client' | 'admin'\nexport type LayoutType = 'top-nav' | 'minimal'\nexport type AuthStyle = 'buttons' | 'text-link' | 'icon' | 'avatar' | 'none'\n\n// ClientNavItem is intentionally simpler than admin MenuItem (no permissions/children needed for client nav)\n// eslint-disable-next-line local-rules/prefer-shared-types\nexport interface ClientNavItem {\n label: string\n icon: string\n path: string\n}\n\nexport type TabItem = ClientNavItem\n\nexport interface NavigationConfig {\n visible: boolean\n showLogo: boolean\n showSearch: boolean\n showCart: boolean\n authStyle: AuthStyle\n navItems: 'desktop' | 'none'\n}\n\nexport interface PresetTheme {\n primaryColor: string\n primaryHover: string\n bgColor: string\n textColor: string\n secondaryBg: string\n borderColor: string\n borderRadius: string\n logoText: string\n fontFamily: string\n}\n\nexport interface RouteDef {\n path: string\n component: ComponentType<Record<string, unknown>> | null\n label: string\n}\n\nexport interface PresetUIConfig {\n id: PresetType\n name: string\n appType: AppType\n layout: LayoutType\n theme: PresetTheme\n navigation: NavigationConfig\n desktopNav: ClientNavItem[]\n mobileTabs: ClientNavItem[]\n routes: RouteDef[]\n defaultRoute: string\n}\n\nconst ${constName}: PresetTheme = ${theme}\n\n// Preset ID aliases: allows dev:xxx scripts and VITE_PRESET to use config IDs\nconst PRESET_ALIASES: Record<string, '${presetType}'> = {\n${Object.entries(aliases).map(([k, v]) => ` '${k}': '${v}',`).join('\\n')}\n}\n\nexport const PRESET_UI_CONFIGS: Record<PresetType, PresetUIConfig> = {\n ${presetType}: {\n id: '${presetType}',\n name: '${navConfig.name}',\n appType: '${navConfig.appType}',\n layout: '${navConfig.layout}',\n theme: ${constName},\n navigation: ${navConfig.navigationObj},\n desktopNav: [\n${desktopNav.map(i => ` ${i}`).join(',\\n')}\n ],\n mobileTabs: [\n${mobileTabs.map(i => ` ${i}`).join(',\\n')}\n ],\n defaultRoute: '${navConfig.defaultRoute}',\n routes: [\n${routeDefs.join(',\\n')}\n ],\n },\n}\n\nexport function getPresetUIConfig(id: string): PresetUIConfig {\n const resolvedId = PRESET_ALIASES[id] ?? (id as PresetType)\n return PRESET_UI_CONFIGS[resolvedId] ?? PRESET_UI_CONFIGS['${presetType}']\n}\n\nexport function getPresetUIConfigs(): Record<PresetType, PresetUIConfig> {\n return PRESET_UI_CONFIGS\n}\n`\n}\n","import type { ResolvedPreset } from './template-generator'\n\nfunction getPresetType(presetId: string): string {\n const map: Record<string, string> = {\n 'todo-app': 'todo',\n 'xbrowser-marketplace': 'plugin',\n ecommerce: 'ecommerce',\n 'fullstack-admin': 'saas',\n forum: 'community',\n minimal: 'todo',\n }\n return map[presetId] || 'todo'\n}\n\nexport function generateClientMain(resolved: ResolvedPreset, presetId: string): string {\n const presetType = getPresetType(presetId)\n const isSaas = presetType === 'saas'\n\n const authTokenBlock = isSaas\n ? ''\n : `\nif (preset !== 'saas') {\n try {\n const raw = localStorage.getItem('auth-token')\n const parsed = raw ? JSON.parse(raw) : null\n if (!parsed?.state?.token) {\n localStorage.setItem('auth-token', JSON.stringify({\n state: {\n token: 'user-token',\n isAuthenticated: true,\n user: { id: 'user-1', username: 'Demo User', role: 'USER' },\n loading: false,\n error: null,\n },\n version: 0,\n }))\n }\n } catch {\n localStorage.setItem('auth-token', JSON.stringify({\n state: { token: 'user-token', isAuthenticated: true, user: { id: 'user-1', username: 'Demo User', role: 'USER' }, loading: false, error: null },\n version: 0,\n }))\n }\n}\n`\n\n if (isSaas) {\n return `import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport './index.css'\n\nconst AdminApp = React.lazy(() => import('@admin/App').then(m => ({ default: m.App })))\n\nconst RootApp = () => {\n return (\n <React.Suspense fallback={<div className=\"flex items-center justify-center h-screen text-gray-400\">Loading...</div>}>\n <AdminApp basePath=\"/\" />\n </React.Suspense>\n )\n}\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n <React.StrictMode>\n <RootApp />\n </React.StrictMode>,\n)\n\nif (typeof window !== 'undefined') {\n requestAnimationFrame(() => {\n setTimeout(() => {\n document.dispatchEvent(new CustomEvent('prerender-ready'))\n }, 100)\n })\n}\n`\n }\n\n return `import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport { HelmetProvider } from 'react-helmet-async'\nimport { App as ClientApp } from './App'\nimport './index.css'\n\nconst preset = import.meta.env.VITE_PRESET || '${presetType}'\n${authTokenBlock}\nconst RootApp = () => {\n return (\n <HelmetProvider>\n <ClientApp presetId={preset} />\n </HelmetProvider>\n )\n}\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n <React.StrictMode>\n <RootApp />\n </React.StrictMode>,\n)\n\nif (typeof window !== 'undefined') {\n requestAnimationFrame(() => {\n setTimeout(() => {\n document.dispatchEvent(new CustomEvent('prerender-ready'))\n }, 100)\n })\n}\n`\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 { generateClientNavigation } from '../generators/client-navigation'\nimport { generateClientAppTest } from '../generators/client-app-test'\nimport { generateClientNavigationTest } from '../generators/client-navigation-test'\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'\nimport { generatePresetUIConfig } from '../generators/client-preset-ui-config'\nimport { generateClientMain } from '../generators/client-main'\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 if (resolved.hasClient) {\n const clientNavContent = generateClientNavigation(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/Navigation.tsx'),\n clientNavContent\n )\n\n const clientAppTestContent = generateClientAppTest(resolved)\n await fs.ensureDir(path.join(targetDir, 'src/client/components/__tests__'))\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/__tests__/App.test.tsx'),\n clientAppTestContent\n )\n\n const clientNavTestContent = generateClientNavigationTest(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/__tests__/Navigation.test.tsx'),\n clientNavTestContent\n )\n\n const presetUIConfigContent = generatePresetUIConfig(resolved, selectedPreset.id)\n await fs.writeFile(\n path.join(targetDir, 'src/client/preset-ui-config.ts'),\n presetUIConfigContent\n )\n\n const clientMainContent = generateClientMain(resolved, selectedPreset.id)\n await fs.writeFile(path.join(targetDir, 'src/client/main.tsx'), clientMainContent)\n }\n\n if (resolved.hasClient && 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 if (resolved.hasClient) {\n const clientComponentsContent = generateClientComponentsIndex(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/index.ts'),\n clientComponentsContent\n )\n }\n\n // CLI modules index is always generated (CLI is independent of admin)\n const cliModulesContent = generateCliModulesIndex(resolved)\n await fs.writeFile(path.join(targetDir, 'src/cli/modules/index.ts'), cliModulesContent)\n\n if (resolved.hasClient && 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\n if (resolved.hasClient) {\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 } else {\n console.log(chalk.white(' npm run build'))\n console.log(chalk.white(' npm start'))\n console.log('')\n console.log(chalk.cyan(' CLI usage:'))\n console.log(chalk.white(' node dist/cli/index.js config status'))\n console.log(chalk.white(' node dist/cli/index.js todo list'))\n console.log(chalk.white(' node dist/cli/index.js --help'))\n }\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 { readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport { select } from '@inquirer/prompts'\nimport { createProject, ScaffoldError } from './commands/create.js'\nimport { loadPresets } from './generators/template-generator.js'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\n\nconst rootDir =\n __dirname.endsWith(path.join('src')) || __dirname.endsWith(path.join('dist'))\n ? path.resolve(__dirname, '..')\n : path.resolve(__dirname, '..', '..')\n\nconst packageJson = JSON.parse(readFileSync(path.join(rootDir, 'package.json'), 'utf-8'))\n\nconst program = new Command()\n\nprogram\n .name('create-fullstack-scaffold')\n .description('Create a new full-stack scaffold app with Todo List example')\n .version(packageJson.version)\n .argument('[project-name]', 'Name of your project')\n .option('-c, --current-dir', 'Create project in current directory')\n .option(\n '-p, --preset <preset>',\n 'Template preset to use (fullstack-admin, todo-app, cli-only, minimal)'\n )\n .option('-o, --output-dir <path>', 'Output directory (defaults to project name)')\n .option('--dry-run', 'Show what would be generated without creating files')\n .action(\n async (\n projectName = 'my-fullstack-app',\n options: { currentDir?: boolean; preset?: string; outputDir?: string; dryRun?: boolean }\n ) => {\n console.log('')\n console.log(chalk.cyan.bold(' ╔══════════════════════════════════════════╗'))\n console.log(chalk.cyan.bold(' ║ Create Fullstack Scaffold App ║'))\n console.log(chalk.cyan.bold(' ║ React + Hono + Vite + Zustand + TS ║'))\n console.log(chalk.cyan.bold(' ╚══════════════════════════════════════════╝'))\n console.log('')\n\n let preset = options.preset\n\n if (!preset && process.stdin.isTTY) {\n const templateDir = path.join(__dirname, '../template')\n const presets = await loadPresets(templateDir)\n preset = await select({\n message: 'Choose a template preset:',\n choices: presets.map(p => ({\n value: p.id,\n name: `${p.name} — ${p.description}`,\n })),\n })\n }\n\n if (!preset) {\n preset = 'fullstack-admin'\n }\n\n try {\n await createProject({\n projectName,\n currentDir: options.currentDir ?? false,\n preset,\n outputDir: options.outputDir,\n dryRun: options.dryRun ?? false,\n })\n } catch (error) {\n if (error instanceof ScaffoldError) {\n console.error(chalk.red(` ✖ ${error.message}`))\n process.exit(1)\n }\n throw error\n }\n }\n )\n\nprogram\n .command('presets')\n .description('List available template presets')\n .action(async () => {\n const templateDir = path.join(__dirname, '../template')\n const presets = await loadPresets(templateDir)\n console.log(chalk.cyan('\\nAvailable presets:\\n'))\n for (const preset of presets) {\n console.log(` ${chalk.green(preset.id.padEnd(20))} ${preset.name}`)\n console.log(` ${' '.repeat(20)} ${preset.description}`)\n console.log(` ${' '.repeat(20)} Modules: ${preset.modules.join(', ')}`)\n console.log()\n }\n })\n\nprogram.parse()\n"]}
1
+ {"version":3,"sources":["../../src/generators/template-generator.ts","../../src/generators/file-filter.ts","../../src/generators/route-registry.ts","../../src/generators/client-navigation.ts","../../src/generators/client-app-test.ts","../../src/generators/client-navigation-test.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/generators/client-preset-ui-config.ts","../../src/generators/client-main.ts","../../src/commands/create.ts","../../src/index.ts"],"names":["moduleOrder","MODULE_EXPORTS","pkg","join","path","getPresetType","__filename","__dirname","generatedFiles","gitignorePath","ignorePatterns","excludePatterns","fileURLToPath","readFileSync","chalk"],"mappings":"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","file":"index.js","sourcesContent":["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?:\n | { importPath: string; exportName: string }\n | { 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?: {\n files: string[]\n hasSeed: boolean\n seed?: { serviceFile: string; functionName: string }\n }\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 cliModule?: { dir: string; registerFunction: string }\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 hasCli: 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 const isCliOnly = preset.id === 'cli-only'\n\n return {\n preset,\n modules,\n hasAdmin,\n hasClient: !isCliOnly,\n hasCli: 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 === 'todos') {\n excludes.push('src/server/__tests__/integration/todos-api.test.ts')\n }\n\n // Exclude CLI module dir when the server module is not in the preset\n if (manifest.cliModule) {\n excludes.push(`src/cli/modules/${manifest.cliModule.dir}`)\n }\n }\n\n if (!resolved.modules.has('admin')) {\n excludes.push('src/admin')\n excludes.push('admin.html')\n excludes.push('auth-inject.html')\n }\n\n // tenant/merchant HTML entries only needed when tenant module is present (saas preset)\n if (!resolved.modules.has('tenant')) {\n excludes.push('src/tenant')\n excludes.push('tenant.html')\n excludes.push('src/merchant')\n excludes.push('merchant.html')\n excludes.push('src/server/middleware/tenant-isolation.ts')\n excludes.push('src/server/middleware/__tests__/tenant-isolation.test.ts')\n }\n\n if (!resolved.hasClient) {\n excludes.push('src/client')\n excludes.push('index.html')\n excludes.push('admin.html')\n excludes.push('auth-inject.html')\n excludes.push('src/admin')\n excludes.push('vite.config.ts')\n excludes.push('postcss.config.js')\n excludes.push('tailwind.config.js')\n }\n\n if (!resolved.hasClient) {\n excludes.push('src/client/components/AuthButton.tsx')\n excludes.push('src/client/components/__tests__/AuthButton.test.tsx')\n } else if (!resolved.modules.has('admin') && !resolved.modules.has('auth')) {\n excludes.push('src/client/components/AuthButton.tsx')\n excludes.push('src/client/components/__tests__/AuthButton.test.tsx')\n excludes.push('src/server/utils/auth.ts')\n }\n\n excludes.push('src/client/preset-ui-config.ts')\n\n // LoginPage/RegisterPage are excluded via the for loop above (auth clientPages)\n // when auth module is not in the preset\n\n if (!resolved.hasPermission && !resolved.modules.has('auth')) {\n excludes.push('src/server/utils/permission-utils.ts')\n excludes.push('src/server/utils/__tests__/permission-utils.test.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.hasPermission && resolved.modules.has('auth')) {\n excludes.push('src/server/utils/permission-utils.ts')\n excludes.push('src/server/utils/__tests__/permission-utils.test.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 excludes.push('src/server/module-auth/__tests__/auth-service.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/shared/modules/index.ts',\n 'src/shared/schemas/index.ts',\n 'src/server/middleware/index.ts',\n 'src/server/app.ts',\n 'src/cli/modules/index.ts',\n ]\n\n if (resolved.hasClient) {\n files.push(\n 'src/client/App.tsx',\n 'src/client/components/Navigation.tsx',\n 'src/client/components/index.ts',\n 'src/client/Layout.tsx',\n 'src/client/components/__tests__/App.test.tsx',\n 'src/client/components/__tests__/Navigation.test.tsx',\n 'src/client/main.tsx',\n 'src/client/preset-ui-config.ts'\n )\n }\n\n if (resolved.hasClient && resolved.modules.has('admin')) {\n files.push('src/admin/App.tsx')\n }\n\n if (resolved.hasClient && !resolved.modules.has('admin')) {\n files.push('vite.config.ts')\n }\n\n if (resolved.hasClient && resolved.modules.has('admin')) {\n // admin preset needs generated vite.config.ts to filter tenant/merchant entries\n files.push('vite.config.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 // Always generate init.ts — every preset has different seed combinations\n files.push('src/server/db/init.ts')\n\n return files\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport interface StandaloneRoute {\n localName: string\n mountPath: string\n}\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 const usedNames = new Set<string>()\n\n for (const [name, manifest] of moduleEntries) {\n const moduleDir = `module-${name}`\n\n if (manifest.routes.client) {\n const clientRouteList = Array.isArray(manifest.routes.client)\n ? manifest.routes.client\n : [manifest.routes.client]\n for (const route of clientRouteList) {\n const { importPath, exportName } = route\n const localName = usedNames.has(exportName)\n ? `${name}${exportName.charAt(0).toUpperCase()}${exportName.slice(1)}`\n : exportName\n usedNames.add(localName)\n const importStmt =\n localName === exportName\n ? `import { ${exportName} } from './${moduleDir}/${importPath.replace(/^\\.\\//, '')}'`\n : `import { ${exportName} as ${localName} } from './${moduleDir}/${importPath.replace(\n /^\\.\\//,\n ''\n )}'`\n imports.push(importStmt)\n clientRoutes.push(` .route('/api', ${localName})`)\n }\n }\n\n if (manifest.routes.admin) {\n for (const route of manifest.routes.admin) {\n const { importPath, exportName } = route\n const localName = usedNames.has(exportName)\n ? `${name}${exportName.charAt(0).toUpperCase()}${exportName.slice(1)}`\n : exportName\n usedNames.add(localName)\n const importStmt =\n localName === exportName\n ? `import { ${exportName} } from './${moduleDir}/${importPath.replace(/^\\.\\//, '')}'`\n : `import { ${exportName} as ${localName} } from './${moduleDir}/${importPath.replace(\n /^\\.\\//,\n ''\n )}'`\n imports.push(importStmt)\n adminRoutes.push(` .route('/api', ${localName})`)\n }\n }\n // Note: standalone routes are NOT included in route-registry.\n // They are imported and mounted directly by server-app.ts generator.\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/**\n * Get standalone route info from resolved preset manifests.\n * Used by server-app.ts generator to mount standalone routes.\n */\nexport function getStandaloneRoutes(resolved: ResolvedPreset): StandaloneRoute[] {\n const routes: StandaloneRoute[] = []\n const usedNames = new Set<string>()\n\n for (const [name, manifest] of resolved.modules) {\n if (manifest.routes.standalone) {\n const { exportName, mountPath } = manifest.routes.standalone\n const localName = usedNames.has(exportName)\n ? `${name}${exportName.charAt(0).toUpperCase()}${exportName.slice(1)}`\n : exportName\n usedNames.add(localName)\n routes.push({ localName, mountPath })\n }\n }\n\n return routes\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 PluginsPage: 'Package',\n CategoriesPage: 'Grid',\n SearchPage: 'Search',\n PublishPage: 'Upload',\n DeveloperDashboardPage: 'Code',\n PluginDetailPage: 'Package',\n TopicsPage: 'Hash',\n ProfilePage: 'User',\n DashboardPage: 'LayoutDashboard',\n SettingsPage: 'Settings',\n CartPage: 'ShoppingCart',\n OrdersPage: 'Package',\n}\n\nexport function generateClientNavigation(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved).filter(p => !p.route.includes(':'))\n const hasAuth = resolved.modules.has('auth')\n\n const navItems: string[] = []\n for (const page of pages) {\n const icon = ICON_MAP[page.name] || DEFAULT_ICON\n const label =\n page.name === 'TodoPage'\n ? 'Todos'\n : page.name === 'NotificationPage'\n ? 'Notifications'\n : page.name === 'WebSocketPage'\n ? 'WebSocket'\n : page.name === 'PluginsPage'\n ? 'Plugins'\n : page.name === 'CategoriesPage'\n ? 'Categories'\n : page.name === 'SearchPage'\n ? 'Search'\n : page.name === 'PublishPage'\n ? 'Publish'\n : page.name === 'DeveloperDashboardPage'\n ? 'Developer'\n : page.name === 'TopicsPage'\n ? 'Topics'\n : page.name === 'ProfilePage'\n ? 'Profile'\n : page.name === 'DashboardPage'\n ? 'Dashboard'\n : page.name === 'SettingsPage'\n ? 'Settings'\n : page.name === 'CartPage'\n ? 'Cart'\n : page.name === 'OrdersPage'\n ? 'Orders'\n : page.route.replace(/^\\//, '').charAt(0).toUpperCase() +\n page.route.replace(/^\\//, '').slice(1)\n navItems.push(` { label: '${label}', icon: '${icon}', path: '${page.route}' },`)\n }\n\n const authImport = hasAuth ? `\\nimport { useAuthStore } from '../stores/authStore'` : ''\n\n const authSection = hasAuth\n ? `\nfunction AuthSection({ style }: { style: string }) {\n const isAuthenticated = useAuthStore((state: any) => state.isAuthenticated)\n const user = useAuthStore((state: any) => state.user)\n const logout = useAuthStore((state: any) => state.logout)\n\n if (style === 'none') return null\n\n if (isAuthenticated) {\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-gray-600\">{user?.username}</span>\n <button onClick={logout} className=\"text-xs text-gray-400 hover:text-red-500\">Sign Out</button>\n </div>\n )\n }\n\n if (style === 'buttons') {\n return (\n <div className=\"flex items-center gap-2\">\n <Link\n to=\"/login\"\n className=\"px-3 py-1 text-sm bg-blue-500 text-white rounded hover:bg-blue-600\"\n >\n Sign In\n </Link>\n <Link\n to=\"/register\"\n className=\"px-3 py-1 text-sm border border-gray-300 text-gray-700 rounded hover:bg-gray-50\"\n >\n Sign Up\n </Link>\n </div>\n )\n }\n\n return (\n <Link to=\"/login\" className=\"text-sm text-gray-500 hover:text-gray-900\">\n Login\n </Link>\n )\n}\n`\n : `\nfunction AuthSection(_style: { style: string }) {\n return null\n}\n`\n\n return `import { NavLink${hasAuth ? ', Link' : ''} } from 'react-router-dom'\nimport { Rocket, Sparkles } from 'lucide-react'${authImport}\nimport type { PresetTheme, NavigationConfig, ClientNavItem } from '../preset-ui-config'\n\ninterface NavigationProps {\n preset?: string\n items?: ClientNavItem[]\n theme?: PresetTheme\n navigation?: NavigationConfig\n}\n${authSection}\nexport const Navigation: React.FC<NavigationProps> = ({\n items,\n theme,\n navigation,\n}) => {\n const navItems = navigation?.navItems === 'none' ? [] : (items ?? [])\n const primaryColor = theme?.primaryColor ?? '#6366f1'\n const logoText = theme?.logoText ?? 'Biomimic'\n const showLogo = navigation?.showLogo !== false\n const authStyle = navigation?.authStyle ?? 'none'\n\n return (\n <nav className=\"hidden md:block bg-white/80 backdrop-blur-md border-b border-gray-200 sticky top-0 z-50\" data-testid=\"app-nav\">\n <div className=\"max-w-7xl mx-auto px-4 h-16 flex items-center justify-between gap-3\">\n {showLogo && (\n <NavLink to=\"/\" className=\"flex items-center gap-2 group shrink-0\" data-testid=\"app-title\">\n <div\n className=\"w-8 h-8 rounded-lg flex items-center justify-center shadow-sm group-hover:shadow-md transition-shadow\"\n style={{ backgroundColor: primaryColor }}\n >\n <Rocket className=\"w-4 h-4 text-white\" />\n </div>\n <span className=\"text-lg font-semibold text-gray-900 tracking-tight whitespace-nowrap\">\n {logoText}\n </span>\n <Sparkles className=\"w-3.5 h-3.5 shrink-0\" style={{ color: primaryColor }} />\n </NavLink>\n )}\n\n <div className=\"flex items-center gap-0.5 overflow-x-auto flex-1 min-w-0 scrollbar-hide\">\n {navItems.map(item => (\n <NavLink\n key={item.path}\n to={item.path}\n data-testid={\\`nav-\\${item.label.toLowerCase().replace(/\\\\s+/g, '-')}-button\\`}\n className={({ isActive }: { isActive: boolean }) =>\n \\`px-3 py-1.5 rounded-lg text-sm font-medium transition-all duration-200 shrink-0 whitespace-nowrap \\${\n isActive ? 'text-white' : 'text-gray-500 hover:text-gray-900 hover:bg-gray-50'\n }\\`\n }\n style={\n (({ isActive }: { isActive: boolean }) =>\n isActive\n ? { backgroundColor: \\`\\${primaryColor}15\\`, color: primaryColor }\n : undefined) as never\n }\n >\n {item.label}\n </NavLink>\n ))}\n </div>\n\n <AuthSection style={authStyle} />\n </div>\n </nav>\n )\n}\n`\n}\n","import type { ResolvedPreset } from './template-generator'\nimport { getClientPages } from './template-generator'\n\nexport function generateClientAppTest(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved)\n\n const mocks = pages\n .map(\n p =>\n `vi.mock('@client/pages/${p.name}', () => ({\n ${p.name}: () => <div data-testid=\"${p.name.toLowerCase()}-page\">${p.name}</div>,\n}))`\n )\n .join('\\n\\n ')\n\n return `import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'\nimport { render, screen, cleanup } from '@testing-library/react'\nimport '@testing-library/jest-dom'\nimport { App } from '@client/App'\n\n ${mocks}\n\ndescribe('App Component', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n cleanup()\n })\n\n describe('Initial Render', () => {\n it('should render navigation', () => {\n render(<App />)\n expect(screen.getByTestId('app-nav')).toBeInTheDocument()\n })\n\n it('should render main content area', () => {\n render(<App />)\n expect(screen.getByTestId('app-main')).toBeInTheDocument()\n })\n\n it('should render container', () => {\n render(<App />)\n expect(screen.getByTestId('app-container')).toBeInTheDocument()\n })\n })\n\n describe('Navigation Links', () => {\n it('should render footer', () => {\n render(<App />)\n expect(screen.getByTestId('app-footer')).toBeInTheDocument()\n })\n })\n})\n`\n}\n","import type { ResolvedPreset } from './template-generator'\nimport { getClientPages } from './template-generator'\n\nconst LABEL_MAP: Record<string, string> = {\n TodoPage: 'Todos',\n NotificationPage: 'Notifications',\n WebSocketPage: 'WebSocket',\n PluginsPage: 'Plugins',\n CategoriesPage: 'Categories',\n SearchPage: 'Search',\n PublishPage: 'Publish',\n DeveloperDashboardPage: 'Developer',\n TopicsPage: 'Topics',\n ProfilePage: 'Profile',\n DashboardPage: 'Dashboard',\n SettingsPage: 'Settings',\n CartPage: 'Cart',\n OrdersPage: 'Orders',\n}\n\nexport function generateClientNavigationTest(resolved: ResolvedPreset): string {\n const pages = getClientPages(resolved).filter(p => !p.route.includes(':'))\n const firstPage = pages[0]\n\n if (!firstPage) {\n return `import { describe, it, expect } from 'vitest'\nimport { render, screen } from '@testing-library/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport { Navigation } from '../Navigation'\n\nconst renderWithRouter = (component: React.ReactNode) => {\n return render(<BrowserRouter>{component}</BrowserRouter>)\n}\n\ndescribe('Navigation', () => {\n it('should render navigation', () => {\n renderWithRouter(<Navigation />)\n expect(screen.getByTestId('app-nav')).toBeInTheDocument()\n })\n})\n`\n }\n\n const firstLabel = LABEL_MAP[firstPage.name] || firstPage.name.replace('Page', '')\n\n return `import { describe, it, expect } from 'vitest'\nimport { render, screen } from '@testing-library/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport { Navigation } from '../Navigation'\n\nconst renderWithRouter = (component: React.ReactNode) => {\n return render(<BrowserRouter>{component}</BrowserRouter>)\n}\n\ndescribe('Navigation', () => {\n it('should render navigation', () => {\n renderWithRouter(<Navigation />)\n expect(screen.getByTestId('app-nav')).toBeInTheDocument()\n })\n\n it('should render nav items', () => {\n renderWithRouter(<Navigation />)\n expect(screen.getByText('${firstLabel}')).toBeInTheDocument()\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 => ` <Route path=\"${p.route}\" element={<${p.name} />} />`\n )\n\n const defaultProtectedRoute = protectedPages.length > 0 ? protectedPages[0].route : '/'\n\n const captchaElement = resolved.hasCaptcha ? `\\n <CaptchaModal />` : ''\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<{ basePath?: string }> = ({ basePath = '/admin' }) => {\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: '#1890ff',\n },\n }}\n >\n <BrowserRouter basename={basePath}>\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\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 // Collect seed info from manifests dynamically\n const activeSeeds: { moduleDir: string; serviceFile: string; functionName: string }[] = []\n for (const [name, manifest] of resolved.modules) {\n if (manifest.dbSchemas?.hasSeed && manifest.dbSchemas.seed) {\n activeSeeds.push({\n moduleDir: `module-${name}`,\n serviceFile: manifest.dbSchemas.seed.serviceFile,\n functionName: manifest.dbSchemas.seed.functionName,\n })\n }\n }\n\n if (!resolved.hasPermission) {\n return generateMinimalDbInit(activeSeeds)\n }\n\n return generateFullDbInit(activeSeeds)\n}\n\nfunction generateMinimalDbInit(\n activeSeeds: { moduleDir: string; serviceFile: string; functionName: string }[]\n): string {\n const seedCalls = activeSeeds\n .map(s => ` import('../${s.moduleDir}/services/${s.serviceFile}').then(m => m.${s.functionName}()),`)\n .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 { logger } from '../utils/logger'\n\nconst log = logger.db()\n\nexport async function initializeDatabase() {\n await getDb()\n\n log.info({}, 'Initializing database...')\n\n log.info({}, 'Database initialization complete!')${seedBlock}\n}\n`\n}\n\nfunction generateFullDbInit(\n activeSeeds: { moduleDir: string; serviceFile: string; functionName: string }[]\n): string {\n const seedCalls = activeSeeds\n .map(s => ` import('../${s.moduleDir}/services/${s.serviceFile}').then(m => m.${s.functionName}()),`)\n .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\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'\nimport { getStandaloneRoutes } from './route-registry'\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 standaloneRoutes = getStandaloneRoutes(resolved)\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 // Import standalone routes from their source modules (already imported via route-registry)\n // But standalone routes are NOT part of the aggregated clientApiRoutes/adminApiRoutes,\n // so we import them directly for mounting at their custom paths.\n const standaloneImportSet = new Set<string>()\n for (const [name, manifest] of resolved.modules) {\n if (manifest.routes.standalone) {\n const { importPath, exportName } = manifest.routes.standalone\n const moduleDir = `module-${name}`\n const relPath = importPath.replace(/^\\.\\//, '')\n // Check if this import is already in the route-registry (which re-exports aren't — we import directly)\n const stmt = `import { ${exportName} } from './${moduleDir}/${relPath}'`\n if (!standaloneImportSet.has(stmt)) {\n standaloneImportSet.add(stmt)\n imports.push(stmt)\n }\n }\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 // Dynamically mount standalone routes at their custom paths\n for (const sr of standaloneRoutes) {\n routes.push(`.route('${sr.mountPath}', ${sr.localName})`)\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 PermissionRoleType',\n 'type RoleInfo',\n 'type PermissionInfo',\n 'type UserPermissions',\n ],\n },\n auth: {\n namedExports: [\n 'DeveloperProfileSchema',\n 'LoginSchema',\n 'RegisterSchema',\n 'TokenResponseSchema',\n 'type DeveloperProfile',\n 'type LoginInput',\n 'type RegisterInput',\n 'type TokenResponse',\n ],\n },\n plugin: {\n namedExports: [\n 'PluginSchema',\n 'PluginStatusSchema',\n 'CreatePluginSchema',\n 'UpdatePluginSchema',\n 'PluginVersionStatusSchema',\n 'VersionSchema',\n 'CategorySchema',\n 'ReviewSchema',\n 'CreateReviewSchema',\n 'MarketplaceStatsSchema',\n 'PluginListResponseSchema',\n 'AdminPluginSchema',\n 'AdminDashboardStatsSchema',\n 'PluginListQuerySchema',\n 'PluginSlugSchema',\n 'type Plugin',\n 'type PluginStatus',\n 'type CreatePluginInput',\n 'type UpdatePluginInput',\n 'type PluginVersionStatus',\n 'type Version',\n 'type Category',\n 'type Review',\n 'type CreateReviewInput',\n 'type MarketplaceStats',\n 'type PluginListResponse',\n 'type AdminPlugin',\n 'type AdminDashboardStats',\n 'type PluginListQuery',\n ],\n },\n merchant: {\n namedExports: [\n 'ProductSchema',\n 'CreateProductSchema',\n 'UpdateProductSchema',\n 'ProductListSchema',\n 'type Product',\n 'type CreateProductInput',\n 'type UpdateProductInput',\n ],\n },\n tenant: {\n namedExports: [\n 'TenantSchema',\n 'TenantStatusSchema',\n 'TenantPlanSchema',\n 'TenantSettingsSchema',\n 'CreateTenantSchema',\n 'UpdateTenantSchema',\n 'TenantIdSchema',\n 'TenantSlugSchema',\n 'TenantListResponseSchema',\n 'TenantQuerySchema',\n 'TenantIdResponseSchema',\n 'type Tenant',\n 'type TenantStatus',\n 'type TenantPlan',\n 'type TenantSettings',\n 'type CreateTenantInput',\n 'type UpdateTenantInput',\n 'type TenantId',\n 'type TenantSlug',\n 'type TenantListResponse',\n 'type TenantQuery',\n 'type TenantIdResponse',\n ],\n },\n order: {\n namedExports: [\n 'OrderStatusSchema',\n 'OrderSchema',\n 'CreateOrderSchema',\n 'UpdateOrderSchema',\n 'OrderListSchema',\n 'OrderQuerySchema',\n 'OrderDeleteResultSchema',\n 'ProcessOrderSchema',\n 'CancelOrderSchema',\n 'RemoveCartItemResponseSchema',\n 'ECommerceProductSchema',\n 'ECommerceOrderStatusSchema',\n 'ECommerceOrderSchema',\n 'ECommerceOrderListSchema',\n 'type OrderStatus',\n 'type Order',\n 'type CreateOrderInput',\n 'type UpdateOrderInput',\n 'type OrderDeleteResult',\n 'type ProcessOrderInput',\n 'type CancelOrderInput',\n 'type OrderQueryInput',\n 'type RemoveCartItemResponse',\n 'type ECommerceProduct',\n 'type ECommerceOrderStatus',\n 'type ECommerceOrder',\n ],\n },\n ticket: {\n namedExports: [\n 'TicketStatusSchema',\n 'TicketPrioritySchema',\n 'TicketCategorySchema',\n 'TicketReplySchema',\n 'TicketSchema',\n 'CreateTicketSchema',\n 'UpdateTicketSchema',\n 'ReplyTicketSchema',\n 'TicketListSchema',\n 'TicketDeleteResultSchema',\n 'type TicketStatus',\n 'type TicketPriority',\n 'type TicketCategory',\n 'type TicketReply',\n 'type Ticket',\n 'type CreateTicketInput',\n 'type UpdateTicketInput',\n 'type ReplyTicketInput',\n 'type TicketDeleteResult',\n ],\n },\n dispute: {\n namedExports: [\n 'DisputeTypeSchema',\n 'DisputeStatusSchema',\n 'DisputeSchema',\n 'CreateDisputeSchema',\n 'UpdateDisputeSchema',\n 'ResolveDisputeSchema',\n 'DisputeListSchema',\n 'DisputeDeleteResultSchema',\n 'type DisputeType',\n 'type DisputeStatus',\n 'type Dispute',\n 'type CreateDisputeInput',\n 'type UpdateDisputeInput',\n 'type ResolveDisputeInput',\n 'type DisputeDeleteResult',\n ],\n },\n content: {\n namedExports: [\n 'ContentCategorySchema',\n 'ContentStatusSchema',\n 'ContentSchema',\n 'CreateContentSchema',\n 'UpdateContentSchema',\n 'ContentListSchema',\n 'ContentDeleteResultSchema',\n 'type ContentCategory',\n 'type ContentStatus',\n 'type Content',\n 'type CreateContentInput',\n 'type UpdateContentInput',\n 'type ContentDeleteResult',\n ],\n },\n captcha: {\n namedExports: [\n 'CaptchaResponseSchema',\n 'VerifyCaptchaRequestSchema',\n 'CaptchaVerifyResponseSchema',\n 'type CaptchaResponse',\n 'type VerifyCaptchaRequest',\n 'type CaptchaVerifyResponse',\n ],\n },\n dashboard: {\n namedExports: [\n 'DashboardStatSchema',\n 'RevenueDataSchema',\n 'ActivityStatusSchema',\n 'ActivitySchema',\n 'DashboardResponseSchema',\n 'type DashboardStat',\n 'type RevenueData',\n 'type ActivityStatus',\n 'type Activity',\n 'type DashboardResponse',\n ],\n },\n cart: {\n namedExports: [\n 'CartItemSchema',\n 'CartSummarySchema',\n 'CartResponseSchema',\n 'AddCartItemSchema',\n 'CartItemIdSchema',\n 'type CartItem',\n 'type CartSummary',\n 'type CartResponse',\n 'type AddCartItemInput',\n ],\n },\n community: {\n namedExports: [\n 'TopicStatusSchema',\n 'TopicTagSchema',\n 'TopicAuthorSchema',\n 'TopicSchema',\n 'TopicsResponseSchema',\n 'ProfileStatsSchema',\n 'ActivityTypeSchema',\n 'ProfileActivitySchema',\n 'ProfileResponseSchema',\n 'type TopicStatus',\n 'type TopicTag',\n 'type TopicAuthor',\n 'type Topic',\n 'type ProfileStats',\n 'type ActivityType',\n 'type ProfileActivity',\n 'type ProfileResponse',\n ],\n },\n audit: {\n namedExports: [\n 'ResourceTypeSchema',\n 'ActionTypeSchema',\n 'AuditLogSchema',\n 'type AuditLogType',\n ],\n },\n role: {\n namedExports: [\n 'RoleSchema',\n 'CreateRoleSchema',\n 'UpdateRoleSchema',\n 'UpdateRolePermissionsSchema',\n 'RoleSuccessSchema',\n 'type RoleDataType',\n 'type CreateRoleType',\n 'type UpdateRoleType',\n ],\n },\n}\n\nexport function generateSharedModulesIndex(resolved: ResolvedPreset): string {\n const lines: string[] = []\n\n const moduleOrder = [\n 'chat',\n 'todos',\n 'file',\n 'notifications',\n 'admin',\n 'permission',\n 'auth',\n 'plugin',\n 'merchant',\n 'tenant',\n 'order',\n 'ticket',\n 'dispute',\n 'content',\n 'captcha',\n ]\n\n // Standalone shared modules (no server module, always included if client exists)\n const standaloneModules = ['dashboard', 'cart', 'community']\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 // Export additional paths from manifests (e.g., 'role', 'audit' from permission module)\n const additionalExported = new Set<string>()\n for (const moduleName of moduleOrder) {\n if (!resolved.modules.has(moduleName)) continue\n\n const manifest = resolved.modules.get(moduleName)!\n if (manifest.sharedSchemas?.additionalPaths) {\n for (const extra of manifest.sharedSchemas.additionalPaths) {\n if (additionalExported.has(extra)) continue\n additionalExported.add(extra)\n\n const exports = MODULE_EXPORTS[extra]\n if (!exports) continue\n\n lines.push(`export {\\n ${exports.namedExports.join(',\\n ')},\\n} from './${extra}'`)\n }\n }\n }\n\n // Standalone modules (no server module backing)\n if (resolved.hasClient) {\n for (const moduleName of standaloneModules) {\n const exports = MODULE_EXPORTS[moduleName]\n if (!exports) continue\n\n lines.push(`export {\\n ${exports.namedExports.join(',\\n ')},\\n} from './${moduleName}'`)\n }\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 auth: {\n namedExports: [\n 'DeveloperProfileSchema',\n 'LoginSchema',\n 'RegisterSchema',\n 'TokenResponseSchema',\n 'ProfileSchema',\n 'type DeveloperProfile',\n 'type LoginInput',\n 'type RegisterInput',\n 'type TokenResponse',\n 'type Profile',\n ],\n },\n plugin: {\n namedExports: [\n 'PluginSchema',\n 'PluginStatusSchema',\n 'CreatePluginSchema',\n 'UpdatePluginSchema',\n 'PluginVersionStatusSchema',\n 'VersionSchema',\n 'CategorySchema',\n 'ReviewSchema',\n 'CreateReviewSchema',\n 'MarketplaceStatsSchema',\n 'PluginListResponseSchema',\n 'AdminPluginSchema',\n 'AdminDashboardStatsSchema',\n 'PluginListQuerySchema',\n 'PluginSlugSchema',\n 'PluginSearchQuerySchema',\n 'PluginDeleteResponseSchema',\n 'ReviewIdParamsSchema',\n 'ReviewDeleteResponseSchema',\n 'CategorySlugParamsSchema',\n 'CategoryPluginsQuerySchema',\n 'PluginListAdminSchema',\n 'AdminListQuerySchema',\n 'AdminListAllQuerySchema',\n 'RejectPluginBodySchema',\n 'BulkApproveBodySchema',\n 'BulkRejectBodySchema',\n 'BulkResponseSchema',\n 'CreateCategoryBodySchema',\n 'UpdateCategoryBodySchema',\n 'CategoryIdParamsSchema',\n 'CategoryIdResponseSchema',\n 'type Plugin',\n 'type PluginStatus',\n 'type CreatePluginInput',\n 'type UpdatePluginInput',\n 'type PluginVersionStatus',\n 'type Version',\n 'type Category',\n 'type Review',\n 'type CreateReviewInput',\n 'type MarketplaceStats',\n 'type PluginListResponse',\n 'type AdminPlugin',\n 'type AdminDashboardStats',\n 'type PluginListQuery',\n ],\n },\n admin: {\n namedExports: [\n 'SystemStatsSchema',\n 'HealthCheckSchema',\n 'RecentActivityItemSchema',\n 'RecentActivitySchema',\n 'AuthUserSchema',\n 'LoginRequestSchema',\n 'LoginResponseSchema',\n 'RegisterRequestSchema',\n 'UserSchema',\n 'UserListSchema',\n 'UpdateUserRequestSchema',\n 'CreateUserRequestSchema',\n 'ClearTodosResultSchema',\n 'AdminSuccessSchema',\n 'DownloadTokenSchema',\n 'type SystemStats',\n 'type HealthCheck',\n 'type RecentActivityItem',\n 'type AuthUserResponse',\n 'type CreateUserRequest',\n 'type LoginRequest',\n 'type LoginResponse',\n 'type RegisterRequest',\n 'type User',\n 'type UpdateUserRequest',\n 'type ClearTodosResult',\n ],\n },\n audit: {\n namedExports: ['ResourceTypeSchema', 'ActionTypeSchema', 'AuditLogSchema', 'type AuditLogType'],\n },\n captcha: {\n namedExports: [\n 'CaptchaResponseSchema',\n 'VerifyCaptchaRequestSchema',\n 'CaptchaVerifyResponseSchema',\n 'type CaptchaResponse',\n 'type VerifyCaptchaRequest',\n 'type CaptchaVerifyResponse',\n ],\n },\n cart: {\n namedExports: [\n 'CartItemSchema',\n 'CartSummarySchema',\n 'CartResponseSchema',\n 'AddCartItemSchema',\n 'CartItemIdSchema',\n 'type CartItem',\n 'type CartSummary',\n 'type CartResponse',\n 'type AddCartItemInput',\n ],\n },\n community: {\n namedExports: [\n 'TopicStatusSchema',\n 'TopicTagSchema',\n 'TopicAuthorSchema',\n 'TopicSchema',\n 'TopicsResponseSchema',\n 'ProfileStatsSchema',\n 'ActivityTypeSchema',\n 'ProfileActivitySchema',\n 'ProfileResponseSchema',\n 'type TopicStatus',\n 'type TopicTag',\n 'type TopicAuthor',\n 'type Topic',\n 'type ProfileStats',\n 'type ActivityType',\n 'type ProfileActivity',\n 'type ProfileResponse',\n ],\n },\n content: {\n namedExports: [\n 'ContentCategorySchema',\n 'ContentStatusSchema',\n 'ContentSchema',\n 'CreateContentSchema',\n 'UpdateContentSchema',\n 'ContentListSchema',\n 'ContentDeleteResultSchema',\n 'type ContentCategory',\n 'type ContentStatus',\n 'type Content',\n 'type CreateContentInput',\n 'type UpdateContentInput',\n 'type ContentDeleteResult',\n ],\n },\n dashboard: {\n namedExports: [\n 'DashboardStatSchema',\n 'RevenueDataSchema',\n 'ActivityStatusSchema',\n 'ActivitySchema',\n 'DashboardResponseSchema',\n 'type DashboardStat',\n 'type RevenueData',\n 'type ActivityStatus',\n 'type Activity',\n 'type DashboardResponse',\n ],\n },\n merchant: {\n namedExports: [\n 'MerchantSchema',\n 'MerchantLoginSchema',\n 'MerchantLoginResponseSchema',\n 'MerchantStatsSchema',\n 'ProductSchema',\n 'CreateProductSchema',\n 'UpdateProductSchema',\n 'ProductListSchema',\n 'ProductListResponseSchema',\n 'ProductQuerySchema',\n 'type Merchant',\n 'type MerchantLoginInput',\n 'type MerchantLoginResponse',\n 'type MerchantStats',\n 'type Product',\n 'type CreateProductInput',\n 'type UpdateProductInput',\n 'type ProductListResponse',\n 'type ProductQuery',\n ],\n },\n tenant: {\n namedExports: [\n 'TenantSchema',\n 'TenantStatusSchema',\n 'TenantPlanSchema',\n 'TenantSettingsSchema',\n 'CreateTenantSchema',\n 'UpdateTenantSchema',\n 'TenantIdSchema',\n 'TenantSlugSchema',\n 'TenantListResponseSchema',\n 'TenantQuerySchema',\n 'TenantIdResponseSchema',\n 'type Tenant',\n 'type TenantStatus',\n 'type TenantPlan',\n 'type TenantSettings',\n 'type CreateTenantInput',\n 'type UpdateTenantInput',\n 'type TenantId',\n 'type TenantSlug',\n 'type TenantListResponse',\n 'type TenantQuery',\n 'type TenantIdResponse',\n ],\n },\n dispute: {\n namedExports: [\n 'DisputeTypeSchema',\n 'DisputeStatusSchema',\n 'DisputeSchema',\n 'CreateDisputeSchema',\n 'UpdateDisputeSchema',\n 'ResolveDisputeSchema',\n 'DisputeListSchema',\n 'DisputeDeleteResultSchema',\n 'type DisputeType',\n 'type DisputeStatus',\n 'type Dispute',\n 'type CreateDisputeInput',\n 'type UpdateDisputeInput',\n 'type ResolveDisputeInput',\n 'type DisputeDeleteResult',\n ],\n },\n order: {\n namedExports: [\n 'OrderStatusSchema',\n 'OrderSchema',\n 'CreateOrderSchema',\n 'UpdateOrderSchema',\n 'OrderListSchema',\n 'OrderQuerySchema',\n 'OrderDeleteResultSchema',\n 'ProcessOrderSchema',\n 'CancelOrderSchema',\n 'RemoveCartItemResponseSchema',\n 'ECommerceProductSchema',\n 'ECommerceOrderStatusSchema',\n 'ECommerceOrderSchema',\n 'ECommerceOrderListSchema',\n 'type OrderStatus',\n 'type Order',\n 'type CreateOrderInput',\n 'type UpdateOrderInput',\n 'type OrderDeleteResult',\n 'type ProcessOrderInput',\n 'type CancelOrderInput',\n 'type OrderQueryInput',\n 'type RemoveCartItemResponse',\n 'type ECommerceProduct',\n 'type ECommerceOrderStatus',\n 'type ECommerceOrder',\n ],\n },\n permission: {\n namedExports: [\n 'RoleEnum',\n 'PermissionEnum',\n 'RoleInfoSchema',\n 'PermissionInfoSchema',\n 'UserPermissionsSchema',\n 'MenuItemSchema',\n 'PageActionSchema',\n 'PagePermissionConfigSchema',\n 'PermissionCategorySchema',\n 'RoleListSchema',\n 'PermissionListSchema',\n 'MenuConfigSchema',\n 'PagePermissionsSchema',\n 'PermissionCategoriesSchema',\n 'RoleLabelsSchema',\n 'PermissionLabelsSchema',\n 'PermissionInitSchema',\n 'type PermissionRoleType',\n 'type PermissionType',\n 'type RoleInfo',\n 'type PermissionInfo',\n 'type UserPermissions',\n 'type MenuItem',\n 'type PageAction',\n 'type PagePermissionConfig',\n 'type PermissionCategory',\n 'type PermissionInit',\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 ],\n },\n role: {\n namedExports: [\n 'RoleSchema',\n 'CreateRoleSchema',\n 'UpdateRoleSchema',\n 'UpdateRolePermissionsSchema',\n 'RoleSuccessSchema',\n 'type RoleDataType',\n 'type CreateRoleType',\n 'type UpdateRoleType',\n ],\n },\n ticket: {\n namedExports: [\n 'TicketStatusSchema',\n 'TicketPrioritySchema',\n 'TicketCategorySchema',\n 'TicketReplySchema',\n 'TicketSchema',\n 'CreateTicketSchema',\n 'UpdateTicketSchema',\n 'ReplyTicketSchema',\n 'TicketListSchema',\n 'TicketDeleteResultSchema',\n 'type TicketStatus',\n 'type TicketPriority',\n 'type TicketCategory',\n 'type TicketReply',\n 'type Ticket',\n 'type CreateTicketInput',\n 'type UpdateTicketInput',\n 'type ReplyTicketInput',\n 'type TicketDeleteResult',\n ],\n },\n}\n\nconst ADDITIONAL_PATHS_MAP: Record<string, string[]> = {\n permission: ['role', 'audit'],\n}\n\nconst STANDALONE_SHARED_MODULES = new Set(['cart', 'community', 'dashboard'])\n\nconst moduleOrder = [\n 'chat',\n 'file',\n 'todos',\n 'notifications',\n 'auth',\n 'plugin',\n 'admin',\n 'audit',\n 'captcha',\n 'cart',\n 'community',\n 'content',\n 'dashboard',\n 'dispute',\n 'merchant',\n 'order',\n 'permission',\n 'role',\n 'tenant',\n 'ticket',\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 exportedNames = new Set<string>()\n const firstSeenModule = new Map<string, string>()\n const droppedExports: { name: string; moduleName: string; originalModule: string }[] = []\n\n for (const moduleName of moduleOrder) {\n const exports = MODULE_EXPORTS[moduleName]\n if (!exports) continue\n\n const shouldInclude = shouldIncludeModule(moduleName, resolved)\n if (!shouldInclude) continue\n\n const uniqueExports = exports.namedExports.filter(name => {\n if (exportedNames.has(name)) {\n const originalModule = firstSeenModule.get(name) ?? 'unknown'\n droppedExports.push({ name, moduleName, originalModule })\n return false\n }\n exportedNames.add(name)\n firstSeenModule.set(name, moduleName)\n return true\n })\n\n if (uniqueExports.length === 0) continue\n\n const importPath = getImportPath(moduleName, resolved)\n\n moduleLines.push(\n `export {\\n ${uniqueExports.join(',\\n ')},\\n} from '../modules/${importPath}'`\n )\n }\n\n for (const { name, moduleName, originalModule } of droppedExports) {\n console.warn(\n `⚠️ Schema collision: \"${name}\" defined in both ${originalModule} and ${moduleName}. Using ${originalModule}'s version. Rename to avoid ambiguity.`\n )\n }\n\n return header + moduleLines.join('\\n') + '\\n'\n}\n\nfunction shouldIncludeModule(moduleName: string, resolved: ResolvedPreset): boolean {\n if (resolved.modules.has(moduleName)) return true\n\n if (STANDALONE_SHARED_MODULES.has(moduleName)) return true\n\n for (const [parentModule, additionalPaths] of Object.entries(ADDITIONAL_PATHS_MAP)) {\n if (additionalPaths.includes(moduleName) && resolved.modules.has(parentModule)) {\n return true\n }\n }\n\n return false\n}\n\nfunction getImportPath(moduleName: string, resolved: ResolvedPreset): string {\n const manifest = resolved.modules.get(moduleName)\n if (manifest?.sharedSchemas?.path) {\n return manifest.sharedSchemas.path\n }\n return moduleName\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport function generateMiddlewareIndex(resolved: ResolvedPreset): string {\n const lines: string[] = []\n const hasAuthOrPermission = resolved.modules.has('auth') || resolved.hasPermission\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 (hasAuthOrPermission) {\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 (hasAuthOrPermission) {\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 if (resolved.modules.has('auth') && !resolved.hasPermission) {\n return generateSimplifiedAuthMiddleware()\n }\n\n return generateNoopAuthMiddleware()\n}\n\nfunction generateSimplifiedAuthMiddleware(): 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\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 log.warn({ path: c.req.path, method: c.req.method }, 'Missing auth token')\n return c.json({ success: false, error: 'Authentication required', status: 401 }, 401)\n }\n\n try {\n const jwt = await import('jsonwebtoken')\n const secretKey = process.env.AUTH_SECRET_KEY || 'dev-secret-key-change-in-production'\n const decoded = jwt.verify(token, secretKey) as {\n userId: string\n username: string\n email: string\n role: string\n }\n\n const user: AuthUser = {\n id: decoded.userId,\n username: decoded.username,\n email: decoded.email,\n role: decoded.role as UserRole,\n }\n\n c.set('authUser', user)\n log.info({ userId: user.id, path: c.req.path }, 'User authenticated')\n await next()\n } catch {\n log.warn({ path: c.req.path, method: c.req.method }, 'Invalid auth token')\n return c.json({ success: false, error: 'Invalid or expired token', status: 401 }, 401)\n }\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\nfunction generateNoopAuthMiddleware(): 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 const hasAuthOrPermission = resolved.modules.has('auth') || resolved.hasPermission\n\n if (!hasAuthOrPermission) {\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 if (resolved.modules.has('auth') && !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\nexport function getOptionalAuthUser(c: Context): AuthUser | null {\n try {\n return c.get('authUser')\n } catch {\n return null\n }\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') || resolved.modules.has('auth')) {\n lines.push(`export { AuthButton } from './AuthButton'`)\n }\n\n return lines.join('\\n') + '\\n'\n}\n","import type { ResolvedPreset } from './template-generator'\n\n/**\n * CLI module registry: auto-discovers CLI modules from manifest declarations.\n * When a server module with `cliModule` field is included in a preset,\n * its CLI commands are auto-registered.\n *\n * To add CLI support for a new module:\n * 1. Create the CLI module at template/src/cli/modules/{dir}/index.ts\n * 2. Export a `register{Name}Commands(site: SiteInstance)` function\n * 3. Add `cliModule: { dir: '...', registerFunction: '...' }` to the module's module.ts manifest\n */\n\n// Config module is always included (manages base URL, status, etc.)\nconst ALWAYS_INCLUDED = {\n dir: 'config',\n registerFunction: 'registerConfigCommands',\n}\n\nexport function generateCliModulesIndex(resolved: ResolvedPreset): string {\n const modules: string[] = []\n const registrations: string[] = []\n\n // Auto-register CLI modules based on manifest cliModule declarations\n for (const [, manifest] of resolved.modules) {\n if (manifest.cliModule) {\n const { dir, registerFunction } = manifest.cliModule\n modules.push(`import { ${registerFunction} } from './${dir}'`)\n registrations.push(`${registerFunction}(site)`)\n }\n }\n\n // Always include config module\n modules.push(`import { ${ALWAYS_INCLUDED.registerFunction} } from './${ALWAYS_INCLUDED.dir}'`)\n registrations.push(`${ALWAYS_INCLUDED.registerFunction}(site)`)\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 `import type { Core } from '@dyyz1993/xcli-core'\n${modules.join('\\n')}\n\n/**\n * Register all builtin CLI commands to xcli-core.\n * Each register function receives a SiteInstance for command registration.\n */\nexport function registerBuiltinCommands(app: Core) {\n const api = app.loader.getAPI()\n\n const site = api.createSite({\n name: 'local-server',\n url: 'http://localhost:3010',\n })\n\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 auth: ['bcryptjs'],\n}\n\n/** Packages needed by the admin panel UI */\nconst ADMIN_PANEL_PACKAGES = ['antd']\n\n/** Packages needed by the CLI app (xcli-core based) */\nconst CLI_PACKAGES = ['commander'] // legacy, removed from template\n\n/** Packages that are never imported (unused) */\nconst UNUSED_PACKAGES = ['lodash-es', 'chalk', 'mysql2']\n\n/** Packages only needed by the web client (React frontend) */\nconst CLIENT_PACKAGES = [\n 'react',\n 'react-dom',\n 'react-helmet-async',\n 'react-router-dom',\n 'lucide-react',\n 'zustand',\n]\n\n/** Dev packages only needed when a web client is present */\nconst CLIENT_DEV_PACKAGES = [\n '@vitejs/plugin-react',\n '@testing-library/react',\n '@testing-library/jest-dom',\n '@testing-library/dom',\n 'vite',\n 'jsdom',\n 'tailwindcss',\n '@tailwindcss/postcss',\n 'postcss',\n 'autoprefixer',\n '@playwright/test',\n 'playwright',\n '@prerenderer/renderer-jsdom',\n '@prerenderer/renderer-puppeteer',\n '@prerenderer/rollup-plugin',\n 'eventsource',\n]\n\n/** Type packages only needed when a web client is present */\nconst CLIENT_TYPE_PACKAGES = ['@types/react', '@types/react-dom']\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 only if ALL modules requiring it are absent\n const packageToModules: Record<string, string[]> = {}\n for (const [module, packages] of Object.entries(MODULE_PACKAGES)) {\n for (const pkg of packages) {\n if (!packageToModules[pkg]) packageToModules[pkg] = []\n packageToModules[pkg].push(module)\n }\n }\n\n for (const [pkg, modules] of Object.entries(packageToModules)) {\n if (!modules.some(m => resolved.modules.has(m))) {\n packagesToRemove.add(pkg)\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 legacy packages (commander was replaced by xcli-core)\n // commander is no longer in template dependencies, but guard against it\n for (const pkg of CLI_PACKAGES) {\n packagesToRemove.add(pkg)\n }\n\n // Remove client packages if no web client\n if (!resolved.hasClient) {\n for (const pkg of CLIENT_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 if (!resolved.hasClient) {\n for (const pkg of CLIENT_DEV_PACKAGES) {\n delete devDeps[pkg]\n }\n for (const pkg of CLIENT_TYPE_PACKAGES) {\n delete devDeps[pkg]\n }\n }\n result.devDependencies = devDeps\n }\n\n // Adjust scripts for cli-only preset\n if (!resolved.hasClient && result.scripts && typeof result.scripts === 'object') {\n const scripts = { ...(result.scripts as Record<string, string>) }\n\n // Override dev to start server directly instead of vite\n scripts['dev'] = 'NODE_ENV=development node --import tsx src/server/entries/node.ts'\n scripts['build'] = 'npm run build:server && npm run build:cli'\n scripts['build:all'] = 'npm run build:server && npm run build:cli'\n delete scripts['build:client']\n delete scripts['build:cloudflare']\n delete scripts['preview']\n delete scripts['dev:todo']\n delete scripts['dev:plugin']\n delete scripts['dev:ecommerce']\n delete scripts['dev:community']\n delete scripts['dev:forum']\n delete scripts['dev:saas']\n delete scripts['dev:cf']\n delete scripts['deploy:cf']\n delete scripts['test:e2e']\n delete scripts['test:e2e:ui']\n delete scripts['test:e2e:debug']\n delete scripts['test:full']\n\n result.scripts = scripts\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 // Build list of entries to remove based on missing modules\n const entriesToRemove: string[] = []\n const aliasesToRemove: string[] = []\n\n if (!resolved.modules.has('admin')) {\n entriesToRemove.push('admin')\n aliasesToRemove.push('@admin')\n }\n if (!resolved.modules.has('tenant')) {\n entriesToRemove.push('tenant', 'merchant')\n aliasesToRemove.push('@tenant', '@merchant')\n }\n\n // Remove rollupOptions input entries: \" name: path.resolve(__dirname, 'name.html'),\"\n for (const name of entriesToRemove) {\n const re = new RegExp(\n `^\\\\s*${name}:\\\\s*path\\\\.resolve\\\\(__dirname,\\\\s*['\"]${name}\\\\.html['\"]\\\\),\\\\s*$\\\\n?`,\n 'gm'\n )\n content = content.replace(re, '')\n }\n\n // Remove path aliases: \" '@name': path.resolve(__dirname, 'src/name'),\"\n for (const alias of aliasesToRemove) {\n const escapedAlias = alias.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const dirName = alias.replace('@', '')\n const re = new RegExp(\n `^\\\\s*'${escapedAlias}':\\\\s*path\\\\.resolve\\\\(__dirname,\\\\s*['\"]src\\\\/${dirName}['\"]\\\\),\\\\s*$\\\\n?`,\n 'gm'\n )\n content = content.replace(re, '')\n }\n\n return content\n}\n","import type { ResolvedPreset } from './template-generator'\n\nfunction getPresetType(presetId: string): string {\n const map: Record<string, string> = {\n 'todo-app': 'todo',\n 'xbrowser-marketplace': 'plugin',\n ecommerce: 'ecommerce',\n 'fullstack-admin': 'saas',\n forum: 'community',\n minimal: 'todo',\n }\n return map[presetId] || 'todo'\n}\n\nfunction getThemeForPresetType(presetType: string): { constName: string; theme: string } {\n const themes: Record<string, { constName: string; theme: string }> = {\n todo: {\n constName: 'TODO_THEME',\n theme: `{\n primaryColor: '#6366f1',\n primaryHover: '#4f46e5',\n bgColor: '#ffffff',\n textColor: '#111827',\n secondaryBg: '#f9fafb',\n borderColor: '#e5e7eb',\n borderRadius: '12px',\n logoText: 'Biomimic',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n plugin: {\n constName: 'PLUGIN_MARKET_THEME',\n theme: `{\n primaryColor: '#3b82f6',\n primaryHover: '#2563eb',\n bgColor: '#ffffff',\n textColor: '#111827',\n secondaryBg: '#f0f9ff',\n borderColor: '#bae6fd',\n borderRadius: '12px',\n logoText: 'PluginHub',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n ecommerce: {\n constName: 'ECOMMERCE_THEME',\n theme: `{\n primaryColor: '#f59e0b',\n primaryHover: '#d97706',\n bgColor: '#ffffff',\n textColor: '#111827',\n secondaryBg: '#fffbeb',\n borderColor: '#fde68a',\n borderRadius: '12px',\n logoText: 'ShopMart',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n saas: {\n constName: 'SAAS_ADMIN_THEME',\n theme: `{\n primaryColor: '#1f2937',\n primaryHover: '#374151',\n bgColor: '#f9fafb',\n textColor: '#111827',\n secondaryBg: '#f3f4f6',\n borderColor: '#e5e7eb',\n borderRadius: '8px',\n logoText: 'AdminPanel',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n community: {\n constName: 'COMMUNITY_THEME',\n theme: `{\n primaryColor: '#f97316',\n primaryHover: '#ea580c',\n bgColor: '#ffffff',\n textColor: '#111827',\n secondaryBg: '#fff7ed',\n borderColor: '#fed7aa',\n borderRadius: '12px',\n logoText: 'CommunityHub',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n}`,\n },\n }\n return themes[presetType] || themes.todo\n}\n\ninterface LazyRoute {\n path: string\n importPath: string\n componentName: string\n label: string\n}\n\nfunction getRoutesForPreset(presetType: string, resolved: ResolvedPreset): LazyRoute[] {\n const hasModule = (m: string) => resolved.modules.has(m)\n\n const loginRoute = {\n path: '/login',\n importPath: './pages/LoginPage',\n componentName: 'LoginPage',\n label: 'Login',\n }\n const registerRoute = {\n path: '/register',\n importPath: './pages/RegisterPage',\n componentName: 'RegisterPage',\n label: 'Register',\n }\n const maybeAuthRoutes = hasModule('auth')\n ? [\n loginRoute,\n registerRoute,\n {\n path: '/profile',\n importPath: './pages/ProfilePage',\n componentName: 'ProfilePage',\n label: 'Profile',\n },\n ]\n : []\n\n switch (presetType) {\n case 'todo': {\n const routes: LazyRoute[] = [\n ...maybeAuthRoutes,\n {\n path: '/todos',\n importPath: './pages/TodoPage',\n componentName: 'TodoPage',\n label: 'Todos',\n },\n ]\n if (hasModule('notifications')) {\n routes.push({\n path: '/notifications',\n importPath: './pages/NotificationPage',\n componentName: 'NotificationPage',\n label: 'Notifications',\n })\n }\n if (hasModule('chat')) {\n routes.push({\n path: '/websocket',\n importPath: './pages/WebSocketPage',\n componentName: 'WebSocketPage',\n label: 'WebSocket',\n })\n }\n return routes\n }\n\n case 'plugin': {\n const routes: LazyRoute[] = []\n if (hasModule('plugin')) {\n routes.push(\n {\n path: '/',\n importPath: './pages/PluginsPage',\n componentName: 'PluginsPage',\n label: 'Home',\n },\n {\n path: '/plugins',\n importPath: './pages/PluginsPage',\n componentName: 'PluginsPage',\n label: 'Plugins',\n },\n {\n path: '/plugins/:slug',\n importPath: './pages/PluginDetailPage',\n componentName: 'PluginDetailPage',\n label: 'Plugin Detail',\n },\n {\n path: '/categories',\n importPath: './pages/CategoriesPage',\n componentName: 'CategoriesPage',\n label: 'Categories',\n },\n {\n path: '/search',\n importPath: './pages/SearchPage',\n componentName: 'SearchPage',\n label: 'Search',\n },\n {\n path: '/publish',\n importPath: './pages/PublishPage',\n componentName: 'PublishPage',\n label: 'Publish',\n },\n {\n path: '/developer',\n importPath: './pages/DeveloperDashboardPage',\n componentName: 'DeveloperDashboardPage',\n label: 'Developer',\n }\n )\n }\n routes.push(...maybeAuthRoutes)\n if (hasModule('notifications')) {\n routes.push({\n path: '/notifications',\n importPath: './pages/NotificationPage',\n componentName: 'NotificationPage',\n label: 'Notifications',\n })\n }\n return routes\n }\n\n case 'ecommerce': {\n const routes: LazyRoute[] = []\n if (hasModule('content')) {\n routes.push(\n {\n path: '/',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Home',\n },\n {\n path: '/products',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Products',\n },\n {\n path: '/products/:id',\n importPath: './pages/ContentDetailPage',\n componentName: 'ContentDetailPage',\n label: 'Product Detail',\n },\n {\n path: '/content',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Content',\n },\n {\n path: '/content/:id',\n importPath: './pages/ContentDetailPage',\n componentName: 'ContentDetailPage',\n label: 'Content Detail',\n }\n )\n }\n if (hasModule('order')) {\n routes.push(\n {\n path: '/cart',\n importPath: './pages/CartPage',\n componentName: 'CartPage',\n label: 'Cart',\n },\n {\n path: '/orders',\n importPath: './pages/OrdersPage',\n componentName: 'OrdersPage',\n label: 'Orders',\n }\n )\n }\n routes.push(...maybeAuthRoutes)\n return routes\n }\n\n case 'saas': {\n const routes: LazyRoute[] = []\n if (hasModule('admin')) {\n routes.push(\n {\n path: '/dashboard',\n importPath: './pages/DashboardPage',\n componentName: 'DashboardPage',\n label: 'Dashboard',\n },\n {\n path: '/settings',\n importPath: './pages/SettingsPage',\n componentName: 'SettingsPage',\n label: 'Settings',\n }\n )\n }\n routes.push(...maybeAuthRoutes)\n return routes\n }\n\n case 'community': {\n const routes: LazyRoute[] = []\n if (hasModule('content')) {\n routes.push(\n {\n path: '/',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Home',\n },\n {\n path: '/topics',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Topics',\n },\n {\n path: '/topics/:id',\n importPath: './pages/ContentDetailPage',\n componentName: 'ContentDetailPage',\n label: 'Topic Detail',\n },\n {\n path: '/popular',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Popular',\n },\n {\n path: '/content',\n importPath: './pages/ContentListPage',\n componentName: 'ContentListPage',\n label: 'Content',\n },\n {\n path: '/content/:id',\n importPath: './pages/ContentDetailPage',\n componentName: 'ContentDetailPage',\n label: 'Content Detail',\n }\n )\n }\n if (hasModule('chat')) {\n routes.push({\n path: '/websocket',\n importPath: './pages/WebSocketPage',\n componentName: 'WebSocketPage',\n label: 'WebSocket',\n })\n }\n if (hasModule('notifications')) {\n routes.push({\n path: '/notifications',\n importPath: './pages/NotificationPage',\n componentName: 'NotificationPage',\n label: 'Notifications',\n })\n }\n routes.push(...maybeAuthRoutes)\n return routes\n }\n\n default:\n return [...maybeAuthRoutes]\n }\n}\n\nfunction getNavConfigForPreset(\n presetType: string,\n hasAuth: boolean\n): {\n desktopNav: string[]\n mobileTabs: string[]\n defaultRoute: string\n name: string\n appType: string\n layout: string\n navigationObj: string\n} {\n switch (presetType) {\n case 'todo':\n return {\n name: 'Todo App',\n appType: 'client',\n layout: 'top-nav',\n navigationObj: hasAuth\n ? \"{ visible: true, showLogo: true, showSearch: false, showCart: false, authStyle: 'buttons', navItems: 'desktop' }\"\n : \"{ visible: true, showLogo: true, showSearch: false, showCart: false, authStyle: 'none', navItems: 'desktop' }\",\n desktopNav: [\n \"{ label: 'Todos', icon: 'CheckSquare', path: '/todos' }\",\n \"{ label: 'SSE Demo', icon: 'Bell', path: '/notifications' }\",\n \"{ label: 'WebSocket', icon: 'Zap', path: '/websocket' }\",\n ],\n mobileTabs: [\n \"{ label: 'Todos', icon: 'CheckSquare', path: '/todos' }\",\n \"{ label: 'SSE', icon: 'Bell', path: '/notifications' }\",\n \"{ label: 'WS', icon: 'Zap', path: '/websocket' }\",\n ],\n defaultRoute: '/todos',\n }\n\n case 'plugin':\n return {\n name: 'Plugin Market',\n appType: 'client',\n layout: 'top-nav',\n navigationObj:\n \"{ visible: true, showLogo: true, showSearch: true, showCart: false, authStyle: 'text-link', navItems: 'desktop' }\",\n desktopNav: [\n \"{ label: 'Discover', icon: 'Compass', path: '/plugins' }\",\n \"{ label: 'Plugins', icon: 'Puzzle', path: '/plugins/list' }\",\n \"{ label: 'Categories', icon: 'Tags', path: '/categories' }\",\n \"{ label: 'Search', icon: 'Search', path: '/search' }\",\n \"{ label: 'Publish', icon: 'PlusCircle', path: '/publish' }\",\n \"{ label: 'Developer', icon: 'Code', path: '/developer' }\",\n ],\n mobileTabs: [\n \"{ label: 'Discover', icon: 'Compass', path: '/plugins' }\",\n \"{ label: 'Plugins', icon: 'Puzzle', path: '/plugins/list' }\",\n \"{ label: 'Categories', icon: 'Tags', path: '/categories' }\",\n \"{ label: 'Search', icon: 'Search', path: '/search' }\",\n \"{ label: 'My', icon: 'User', path: '/developer' }\",\n ],\n defaultRoute: '/plugins',\n }\n\n case 'ecommerce':\n return {\n name: 'E-Commerce',\n appType: 'client',\n layout: 'top-nav',\n navigationObj:\n \"{ visible: true, showLogo: true, showSearch: true, showCart: true, authStyle: 'icon', navItems: 'desktop' }\",\n desktopNav: [\n \"{ label: 'Home', icon: 'Home', path: '/' }\",\n \"{ label: 'Products', icon: 'ShoppingBag', path: '/products' }\",\n \"{ label: 'Cart', icon: 'ShoppingCart', path: '/cart' }\",\n \"{ label: 'Orders', icon: 'Package', path: '/orders' }\",\n \"{ label: 'Account', icon: 'User', path: '/content' }\",\n ],\n mobileTabs: [\n \"{ label: 'Home', icon: 'Home', path: '/' }\",\n \"{ label: 'Products', icon: 'ShoppingBag', path: '/products' }\",\n \"{ label: 'Cart', icon: 'ShoppingCart', path: '/cart' }\",\n \"{ label: 'Orders', icon: 'Package', path: '/orders' }\",\n \"{ label: 'Me', icon: 'User', path: '/content' }\",\n ],\n defaultRoute: '/',\n }\n\n case 'saas':\n return {\n name: 'SaaS Admin',\n appType: 'admin',\n layout: 'minimal',\n navigationObj:\n \"{ visible: false, showLogo: false, showSearch: false, showCart: false, authStyle: 'none', navItems: 'none' }\",\n desktopNav: [\n \"{ label: 'Dashboard', icon: 'LayoutDashboard', path: '/dashboard' }\",\n \"{ label: 'Settings', icon: 'Settings', path: '/settings' }\",\n ],\n mobileTabs: [\n \"{ label: 'Dashboard', icon: 'LayoutDashboard', path: '/dashboard' }\",\n \"{ label: 'Settings', icon: 'Settings', path: '/settings' }\",\n ],\n defaultRoute: '/dashboard',\n }\n\n case 'community':\n return {\n name: 'Community Forum',\n appType: 'client',\n layout: 'top-nav',\n navigationObj:\n \"{ visible: true, showLogo: true, showSearch: true, showCart: false, authStyle: 'text-link', navItems: 'desktop' }\",\n desktopNav: [\n \"{ label: 'Home', icon: 'Home', path: '/' }\",\n \"{ label: 'Topics', icon: 'MessageSquare', path: '/topics' }\",\n \"{ label: 'Popular', icon: 'Flame', path: '/popular' }\",\n \"{ label: 'Profile', icon: 'User', path: '/profile' }\",\n \"{ label: 'Chat', icon: 'MessageCircle', path: '/websocket' }\",\n ],\n mobileTabs: [\n \"{ label: 'Home', icon: 'Home', path: '/' }\",\n \"{ label: 'Topics', icon: 'MessageSquare', path: '/topics' }\",\n \"{ label: 'Popular', icon: 'Flame', path: '/popular' }\",\n \"{ label: 'Profile', icon: 'User', path: '/profile' }\",\n \"{ label: 'Chat', icon: 'MessageCircle', path: '/websocket' }\",\n ],\n defaultRoute: '/',\n }\n\n default:\n return {\n name: 'App',\n appType: 'client',\n layout: 'top-nav',\n navigationObj:\n \"{ visible: true, showLogo: true, showSearch: false, showCart: false, authStyle: 'none', navItems: 'desktop' }\",\n desktopNav: [\"{ label: 'Home', icon: 'Home', path: '/' }\"],\n mobileTabs: [\"{ label: 'Home', icon: 'Home', path: '/' }\"],\n defaultRoute: '/',\n }\n }\n}\n\nfunction filterNavByModules(navItems: string[], resolved: ResolvedPreset): string[] {\n const hasModule = (path: string) => {\n if (path === '/todos') return resolved.modules.has('todos')\n if (path === '/notifications') return resolved.modules.has('notifications')\n if (path === '/websocket') return resolved.modules.has('chat')\n if (\n path.startsWith('/plugins') ||\n path === '/categories' ||\n path === '/search' ||\n path === '/publish' ||\n path === '/developer'\n )\n return resolved.modules.has('plugin')\n if (path === '/cart' || path === '/orders') return resolved.modules.has('order')\n if (path.startsWith('/content') || path === '/products' || path === '/')\n return resolved.modules.has('content')\n if (path === '/topics' || path === '/popular' || path === '/profile')\n return resolved.modules.has('content')\n if (path === '/dashboard' || path === '/settings') return resolved.modules.has('admin')\n return true\n }\n return navItems.filter(item => {\n const pathMatch = item.match(/path:\\s*'([^']+)'/)\n if (!pathMatch) return true\n return hasModule(pathMatch[1])\n })\n}\n\nexport function generatePresetUIConfig(resolved: ResolvedPreset, presetId: string): string {\n const presetType = getPresetType(presetId)\n const { constName, theme } = getThemeForPresetType(presetType)\n const hasAuth = resolved.modules.has('auth')\n const navConfig = getNavConfigForPreset(presetType, hasAuth)\n const routes = getRoutesForPreset(presetType, resolved)\n\n // Build aliases: presetId → presetType (only if they differ)\n const aliases: Record<string, string> = {}\n if (presetId !== presetType) {\n aliases[presetId] = presetType\n }\n // Also add common aliases for convenience (e.g., 'fullstack-admin' → 'saas')\n const allAliases: Record<string, string> = {\n 'todo-app': 'todo',\n 'xbrowser-marketplace': 'plugin',\n ecommerce: 'ecommerce',\n 'fullstack-admin': 'saas',\n forum: 'community',\n minimal: 'todo',\n saas: 'saas',\n }\n // Include all aliases that point to the same preset type\n for (const [alias, type] of Object.entries(allAliases)) {\n if (type === presetType && alias !== presetType) {\n aliases[alias] = presetType\n }\n }\n\n const desktopNav = filterNavByModules(navConfig.desktopNav, resolved)\n const mobileTabs = filterNavByModules(navConfig.mobileTabs, resolved)\n\n const routeDefs = routes.map(r => {\n return ` {\n path: '${r.path}',\n component: lazy(() => import('${r.importPath}').then(m => ({ default: m.${r.componentName} }))),\n label: '${r.label}',\n }`\n })\n\n return `import { lazy, type ComponentType } from 'react'\n\nexport type PresetType = '${presetType}'\n\nexport type AppType = 'client' | 'admin'\nexport type LayoutType = 'top-nav' | 'minimal'\nexport type AuthStyle = 'buttons' | 'text-link' | 'icon' | 'avatar' | 'none'\n\n// ClientNavItem is intentionally simpler than admin MenuItem (no permissions/children needed for client nav)\n// eslint-disable-next-line local-rules/prefer-shared-types\nexport interface ClientNavItem {\n label: string\n icon: string\n path: string\n}\n\nexport type TabItem = ClientNavItem\n\nexport interface NavigationConfig {\n visible: boolean\n showLogo: boolean\n showSearch: boolean\n showCart: boolean\n authStyle: AuthStyle\n navItems: 'desktop' | 'none'\n}\n\nexport interface PresetTheme {\n primaryColor: string\n primaryHover: string\n bgColor: string\n textColor: string\n secondaryBg: string\n borderColor: string\n borderRadius: string\n logoText: string\n fontFamily: string\n}\n\nexport interface RouteDef {\n path: string\n component: ComponentType<Record<string, unknown>> | null\n label: string\n}\n\nexport interface PresetUIConfig {\n id: PresetType\n name: string\n appType: AppType\n layout: LayoutType\n theme: PresetTheme\n navigation: NavigationConfig\n desktopNav: ClientNavItem[]\n mobileTabs: ClientNavItem[]\n routes: RouteDef[]\n defaultRoute: string\n}\n\nconst ${constName}: PresetTheme = ${theme}\n\n// Preset ID aliases: allows dev:xxx scripts and VITE_PRESET to use config IDs\nconst PRESET_ALIASES: Record<string, '${presetType}'> = {\n${Object.entries(aliases)\n .map(([k, v]) => ` '${k}': '${v}',`)\n .join('\\n')}\n}\n\nexport const PRESET_UI_CONFIGS: Record<PresetType, PresetUIConfig> = {\n ${presetType}: {\n id: '${presetType}',\n name: '${navConfig.name}',\n appType: '${navConfig.appType}',\n layout: '${navConfig.layout}',\n theme: ${constName},\n navigation: ${navConfig.navigationObj},\n desktopNav: [\n${desktopNav.map(i => ` ${i}`).join(',\\n')}\n ],\n mobileTabs: [\n${mobileTabs.map(i => ` ${i}`).join(',\\n')}\n ],\n defaultRoute: '${navConfig.defaultRoute}',\n routes: [\n${routeDefs.join(',\\n')}\n ],\n },\n}\n\nexport function getPresetUIConfig(id: string): PresetUIConfig {\n const resolvedId = PRESET_ALIASES[id] ?? (id as PresetType)\n return PRESET_UI_CONFIGS[resolvedId] ?? PRESET_UI_CONFIGS['${presetType}']\n}\n\nexport function getPresetUIConfigs(): Record<PresetType, PresetUIConfig> {\n return PRESET_UI_CONFIGS\n}\n`\n}\n","import type { ResolvedPreset } from './template-generator'\n\nfunction getPresetType(presetId: string): string {\n const map: Record<string, string> = {\n 'todo-app': 'todo',\n 'xbrowser-marketplace': 'plugin',\n ecommerce: 'ecommerce',\n 'fullstack-admin': 'saas',\n forum: 'community',\n minimal: 'todo',\n }\n return map[presetId] || 'todo'\n}\n\nexport function generateClientMain(resolved: ResolvedPreset, presetId: string): string {\n const presetType = getPresetType(presetId)\n const isSaas = presetType === 'saas'\n\n const authTokenBlock = isSaas\n ? ''\n : `\nif (preset !== 'saas') {\n try {\n const raw = localStorage.getItem('auth-token')\n const parsed = raw ? JSON.parse(raw) : null\n if (!parsed?.state?.token) {\n localStorage.setItem('auth-token', JSON.stringify({\n state: {\n token: 'user-token',\n isAuthenticated: true,\n user: { id: 'user-1', username: 'Demo User', role: 'USER' },\n loading: false,\n error: null,\n },\n version: 0,\n }))\n }\n } catch {\n localStorage.setItem('auth-token', JSON.stringify({\n state: { token: 'user-token', isAuthenticated: true, user: { id: 'user-1', username: 'Demo User', role: 'USER' }, loading: false, error: null },\n version: 0,\n }))\n }\n}\n`\n\n if (isSaas) {\n return `import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport './index.css'\n\nconst AdminApp = React.lazy(() => import('@admin/App').then(m => ({ default: m.App })))\n\nconst RootApp = () => {\n return (\n <React.Suspense fallback={<div className=\"flex items-center justify-center h-screen text-gray-400\">Loading...</div>}>\n <AdminApp basePath=\"/\" />\n </React.Suspense>\n )\n}\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n <React.StrictMode>\n <RootApp />\n </React.StrictMode>,\n)\n\nif (typeof window !== 'undefined') {\n requestAnimationFrame(() => {\n setTimeout(() => {\n document.dispatchEvent(new CustomEvent('prerender-ready'))\n }, 100)\n })\n}\n`\n }\n\n return `import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport { HelmetProvider } from 'react-helmet-async'\nimport { App as ClientApp } from './App'\nimport './index.css'\n\nconst preset = import.meta.env.VITE_PRESET || '${presetType}'\n${authTokenBlock}\nconst RootApp = () => {\n return (\n <HelmetProvider>\n <ClientApp presetId={preset} />\n </HelmetProvider>\n )\n}\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n <React.StrictMode>\n <RootApp />\n </React.StrictMode>,\n)\n\nif (typeof window !== 'undefined') {\n requestAnimationFrame(() => {\n setTimeout(() => {\n document.dispatchEvent(new CustomEvent('prerender-ready'))\n }, 100)\n })\n}\n`\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 { generateClientNavigation } from '../generators/client-navigation'\nimport { generateClientAppTest } from '../generators/client-app-test'\nimport { generateClientNavigationTest } from '../generators/client-navigation-test'\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'\nimport { generatePresetUIConfig } from '../generators/client-preset-ui-config'\nimport { generateClientMain } from '../generators/client-main'\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 if (resolved.hasClient) {\n const clientNavContent = generateClientNavigation(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/Navigation.tsx'),\n clientNavContent\n )\n\n const clientAppTestContent = generateClientAppTest(resolved)\n await fs.ensureDir(path.join(targetDir, 'src/client/components/__tests__'))\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/__tests__/App.test.tsx'),\n clientAppTestContent\n )\n\n const clientNavTestContent = generateClientNavigationTest(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/__tests__/Navigation.test.tsx'),\n clientNavTestContent\n )\n\n const presetUIConfigContent = generatePresetUIConfig(resolved, selectedPreset.id)\n await fs.writeFile(\n path.join(targetDir, 'src/client/preset-ui-config.ts'),\n presetUIConfigContent\n )\n\n const clientMainContent = generateClientMain(resolved, selectedPreset.id)\n await fs.writeFile(path.join(targetDir, 'src/client/main.tsx'), clientMainContent)\n }\n\n if (resolved.hasClient && 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 if (resolved.hasClient) {\n const clientComponentsContent = generateClientComponentsIndex(resolved)\n await fs.writeFile(\n path.join(targetDir, 'src/client/components/index.ts'),\n clientComponentsContent\n )\n }\n\n // CLI modules index is always generated (CLI is independent of admin)\n const cliModulesContent = generateCliModulesIndex(resolved)\n await fs.writeFile(path.join(targetDir, 'src/cli/modules/index.ts'), cliModulesContent)\n\n if (resolved.hasClient && 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\n if (resolved.hasClient) {\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 } else {\n console.log(chalk.white(' npm run build'))\n console.log(chalk.white(' npm start'))\n console.log('')\n console.log(chalk.cyan(' CLI usage:'))\n console.log(chalk.white(' node dist/cli/index.js config status'))\n console.log(chalk.white(' node dist/cli/index.js todo list'))\n console.log(chalk.white(' node dist/cli/index.js --help'))\n }\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 { readFileSync } from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport { select } from '@inquirer/prompts'\nimport { createProject, ScaffoldError } from './commands/create.js'\nimport { loadPresets } from './generators/template-generator.js'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\n\n// __dirname is:\n// - dev: .../create-biomimic-app/src\n// - built: .../create-biomimic-app/dist/cli\n// Both should resolve rootDir to the package root (where package.json + template/ live)\nconst rootDir =\n __dirname.endsWith(path.join('src'))\n ? path.resolve(__dirname, '..')\n : __dirname.endsWith(path.join('dist', 'cli'))\n ? path.resolve(__dirname, '..', '..')\n : path.resolve(__dirname, '..', '..')\n\nconst packageJson = JSON.parse(readFileSync(path.join(rootDir, 'package.json'), 'utf-8'))\n\nconst program = new Command()\n\nprogram\n .name('create-fullstack-scaffold')\n .description('Create a new full-stack scaffold app with Todo List example')\n .version(packageJson.version)\n .argument('[project-name]', 'Name of your project')\n .option('-c, --current-dir', 'Create project in current directory')\n .option(\n '-p, --preset <preset>',\n 'Template preset to use (fullstack-admin, todo-app, ecommerce, xbrowser-marketplace, forum, cli-only, minimal, saas)'\n )\n .option('-o, --output-dir <path>', 'Output directory (defaults to project name)')\n .option('--dry-run', 'Show what would be generated without creating files')\n .action(\n async (\n projectName = 'my-fullstack-app',\n options: { currentDir?: boolean; preset?: string; outputDir?: string; dryRun?: boolean }\n ) => {\n console.log('')\n console.log(chalk.cyan.bold(' ╔══════════════════════════════════════════╗'))\n console.log(chalk.cyan.bold(' ║ Create Fullstack Scaffold App ║'))\n console.log(chalk.cyan.bold(' ║ React + Hono + Vite + Zustand + TS ║'))\n console.log(chalk.cyan.bold(' ╚══════════════════════════════════════════╝'))\n console.log('')\n\n let preset = options.preset\n\n if (!preset && process.stdin.isTTY) {\n const templateDir = path.join(rootDir, 'template')\n const presets = await loadPresets(templateDir)\n preset = await select({\n message: 'Choose a template preset:',\n choices: presets.map(p => ({\n value: p.id,\n name: `${p.name} — ${p.description}`,\n })),\n })\n }\n\n if (!preset) {\n preset = 'fullstack-admin'\n }\n\n try {\n await createProject({\n projectName,\n currentDir: options.currentDir ?? false,\n preset,\n outputDir: options.outputDir,\n dryRun: options.dryRun ?? false,\n })\n } catch (error) {\n if (error instanceof ScaffoldError) {\n console.error(chalk.red(` ✖ ${error.message}`))\n process.exit(1)\n }\n throw error\n }\n }\n )\n\nprogram\n .command('presets')\n .description('List available template presets')\n .action(async () => {\n const templateDir = path.join(rootDir, 'template')\n const presets = await loadPresets(templateDir)\n console.log(chalk.cyan('\\nAvailable presets:\\n'))\n for (const preset of presets) {\n console.log(` ${chalk.green(preset.id.padEnd(20))} ${preset.name}`)\n console.log(` ${' '.repeat(20)} ${preset.description}`)\n console.log(` ${' '.repeat(20)} Modules: ${preset.modules.join(', ')}`)\n console.log()\n }\n })\n\nprogram.parse()\n"]}