create-fullstack-scaffold 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +34 -18
- package/dist/cli/index.js.map +1 -1
- package/package.json +2 -2
package/dist/cli/index.js
CHANGED
|
@@ -283,10 +283,7 @@ function getGeneratedFiles(resolved) {
|
|
|
283
283
|
if (!resolved.modules.has("admin") && resolved.hasPermission) {
|
|
284
284
|
files.push("src/server/utils/auth.ts");
|
|
285
285
|
}
|
|
286
|
-
|
|
287
|
-
if (seedModules.some((m) => !resolved.modules.has(m)) || !resolved.hasPermission) {
|
|
288
|
-
files.push("src/server/db/init.ts");
|
|
289
|
-
}
|
|
286
|
+
files.push("src/server/db/init.ts");
|
|
290
287
|
return files;
|
|
291
288
|
}
|
|
292
289
|
|
|
@@ -699,25 +696,35 @@ function generateDbSchemaBarrel(resolved) {
|
|
|
699
696
|
|
|
700
697
|
// src/generators/db-init.ts
|
|
701
698
|
var SEED_MODULES = [
|
|
699
|
+
{
|
|
700
|
+
module: "todos",
|
|
701
|
+
importLine: "",
|
|
702
|
+
call: "import('../module-todos/services/todo-service').then(m => m.seedTodosIfEmpty())"
|
|
703
|
+
},
|
|
702
704
|
{
|
|
703
705
|
module: "order",
|
|
704
|
-
importLine: "
|
|
705
|
-
call: "seedOrdersIfEmpty()"
|
|
706
|
+
importLine: "",
|
|
707
|
+
call: "import('../module-order/services/order-service').then(m => m.seedOrdersIfEmpty())"
|
|
706
708
|
},
|
|
707
709
|
{
|
|
708
710
|
module: "ticket",
|
|
709
|
-
importLine: "
|
|
710
|
-
call: "seedTicketsIfEmpty()"
|
|
711
|
+
importLine: "",
|
|
712
|
+
call: "import('../module-ticket/services/ticket-service').then(m => m.seedTicketsIfEmpty())"
|
|
711
713
|
},
|
|
712
714
|
{
|
|
713
715
|
module: "dispute",
|
|
714
|
-
importLine: "
|
|
715
|
-
call: "seedDisputesIfEmpty()"
|
|
716
|
+
importLine: "",
|
|
717
|
+
call: "import('../module-dispute/services/dispute-service').then(m => m.seedDisputesIfEmpty())"
|
|
716
718
|
},
|
|
717
719
|
{
|
|
718
720
|
module: "content",
|
|
719
|
-
importLine: "
|
|
720
|
-
call: "seedContentsIfEmpty()"
|
|
721
|
+
importLine: "",
|
|
722
|
+
call: "import('../module-content/services/content-service').then(m => m.seedContentsIfEmpty())"
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
module: "tenant",
|
|
726
|
+
importLine: "",
|
|
727
|
+
call: "import('../module-tenant/services/tenant-service').then(m => m.seedTenantsIfEmpty())"
|
|
721
728
|
}
|
|
722
729
|
];
|
|
723
730
|
var INITIAL_PERMISSIONS = `const initialPermissions = [
|
|
@@ -1067,11 +1074,18 @@ var INITIAL_ROLE_PERMISSIONS = `const initialRolePermissions = [
|
|
|
1067
1074
|
function generateDbInit(resolved) {
|
|
1068
1075
|
const activeSeeds = SEED_MODULES.filter((s) => resolved.modules.has(s.module));
|
|
1069
1076
|
if (!resolved.hasPermission) {
|
|
1070
|
-
return generateMinimalDbInit();
|
|
1077
|
+
return generateMinimalDbInit(activeSeeds);
|
|
1071
1078
|
}
|
|
1072
1079
|
return generateFullDbInit(activeSeeds);
|
|
1073
1080
|
}
|
|
1074
|
-
function generateMinimalDbInit() {
|
|
1081
|
+
function generateMinimalDbInit(activeSeeds) {
|
|
1082
|
+
const seedCalls = activeSeeds.map((s) => ` ${s.call},`).join("\n");
|
|
1083
|
+
const seedBlock = activeSeeds.length > 0 ? `
|
|
1084
|
+
log.info({}, 'Seeding module data...')
|
|
1085
|
+
await Promise.all([
|
|
1086
|
+
${seedCalls}
|
|
1087
|
+
])
|
|
1088
|
+
log.info({}, 'Module data seeding complete!')` : "";
|
|
1075
1089
|
return `import { getDb } from './driver'
|
|
1076
1090
|
import { logger } from '../utils/logger'
|
|
1077
1091
|
|
|
@@ -1081,13 +1095,13 @@ export async function initializeDatabase() {
|
|
|
1081
1095
|
await getDb()
|
|
1082
1096
|
|
|
1083
1097
|
log.info({}, 'Initializing database...')
|
|
1084
|
-
|
|
1098
|
+
|
|
1099
|
+
log.info({}, 'Database initialization complete!')${seedBlock}
|
|
1085
1100
|
}
|
|
1086
1101
|
`;
|
|
1087
1102
|
}
|
|
1088
1103
|
function generateFullDbInit(activeSeeds) {
|
|
1089
|
-
const
|
|
1090
|
-
const seedCalls = activeSeeds.map((s) => ` ${s.call}(),`).join("\n");
|
|
1104
|
+
const seedCalls = activeSeeds.map((s) => ` ${s.call},`).join("\n");
|
|
1091
1105
|
const seedBlock = activeSeeds.length > 0 ? `
|
|
1092
1106
|
log.info({}, 'Seeding module data...')
|
|
1093
1107
|
await Promise.all([
|
|
@@ -1097,7 +1111,6 @@ ${seedCalls}
|
|
|
1097
1111
|
return `import { getDb } from './driver'
|
|
1098
1112
|
import { permissions, roles, rolePermissions } from './schema'
|
|
1099
1113
|
import { logger } from '../utils/logger'
|
|
1100
|
-
${seedImports}
|
|
1101
1114
|
|
|
1102
1115
|
const log = logger.db()
|
|
1103
1116
|
|
|
@@ -2380,6 +2393,7 @@ function filterPackageJson(pkg, resolved) {
|
|
|
2380
2393
|
delete scripts["dev:plugin"];
|
|
2381
2394
|
delete scripts["dev:ecommerce"];
|
|
2382
2395
|
delete scripts["dev:community"];
|
|
2396
|
+
delete scripts["dev:forum"];
|
|
2383
2397
|
delete scripts["dev:saas"];
|
|
2384
2398
|
delete scripts["dev:cf"];
|
|
2385
2399
|
delete scripts["deploy:cf"];
|
|
@@ -2410,6 +2424,7 @@ function getPresetType(presetId) {
|
|
|
2410
2424
|
"xbrowser-marketplace": "plugin",
|
|
2411
2425
|
ecommerce: "ecommerce",
|
|
2412
2426
|
"fullstack-admin": "saas",
|
|
2427
|
+
forum: "community",
|
|
2413
2428
|
minimal: "todo"
|
|
2414
2429
|
};
|
|
2415
2430
|
return map[presetId] || "todo";
|
|
@@ -2894,6 +2909,7 @@ function getPresetType2(presetId) {
|
|
|
2894
2909
|
"xbrowser-marketplace": "plugin",
|
|
2895
2910
|
ecommerce: "ecommerce",
|
|
2896
2911
|
"fullstack-admin": "saas",
|
|
2912
|
+
forum: "community",
|
|
2897
2913
|
minimal: "todo"
|
|
2898
2914
|
};
|
|
2899
2915
|
return map[presetId] || "todo";
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AA2Q5B,IAAM,aAAA,GAAgB,CAAA;AAAA;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;AA2BtB,IAAM,wBAAA,GAA2B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","file":"index.js","sourcesContent":["import { 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 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.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 const seedModules = ['order', 'ticket', 'dispute', 'content']\n if (seedModules.some(m => !resolved.modules.has(m)) || !resolved.hasPermission) {\n files.push('src/server/db/init.ts')\n }\n\n return files\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport function generateRouteRegistry(resolved: ResolvedPreset): string {\n const imports: string[] = [\n `import { OpenAPIHono } from '@hono/zod-openapi'`,\n `import { rateLimitMiddleware } from './middleware/rate-limit'`,\n ]\n\n const clientRoutes: string[] = []\n const adminRoutes: string[] = []\n\n const moduleEntries = [...resolved.modules.entries()]\n\n for (const [name, manifest] of moduleEntries) {\n const moduleDir = `module-${name}`\n\n if (manifest.routes.client) {\n const 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: 'order',\n importLine: \"import { seedOrdersIfEmpty } from '../module-order/services/order-service'\",\n call: 'seedOrdersIfEmpty()',\n },\n {\n module: 'ticket',\n importLine: \"import { seedTicketsIfEmpty } from '../module-ticket/services/ticket-service'\",\n call: 'seedTicketsIfEmpty()',\n },\n {\n module: 'dispute',\n importLine: \"import { seedDisputesIfEmpty } from '../module-dispute/services/dispute-service'\",\n call: 'seedDisputesIfEmpty()',\n },\n {\n module: 'content',\n importLine: \"import { seedContentsIfEmpty } from '../module-content/services/content-service'\",\n call: 'seedContentsIfEmpty()',\n },\n]\n\nconst INITIAL_PERMISSIONS = `const initialPermissions = [\n {\n id: 'perm_user_view',\n code: 'user:view',\n name: '查看用户',\n label: '查看用户',\n category: 'user',\n sortOrder: 1,\n },\n {\n id: 'perm_user_create',\n code: 'user:create',\n name: '创建用户',\n label: '创建用户',\n category: 'user',\n sortOrder: 2,\n },\n {\n id: 'perm_user_edit',\n code: 'user:edit',\n name: '编辑用户',\n label: '编辑用户',\n category: 'user',\n sortOrder: 3,\n },\n {\n id: 'perm_user_delete',\n code: 'user:delete',\n name: '删除用户',\n label: '删除用户',\n category: 'user',\n sortOrder: 4,\n },\n {\n id: 'perm_content_view',\n code: 'content:view',\n name: '查看内容',\n label: '查看内容',\n category: 'content',\n sortOrder: 1,\n },\n {\n id: 'perm_content_create',\n code: 'content:create',\n name: '创建内容',\n label: '创建内容',\n category: 'content',\n sortOrder: 2,\n },\n {\n id: 'perm_content_edit',\n code: 'content:edit',\n name: '编辑内容',\n label: '编辑内容',\n category: 'content',\n sortOrder: 3,\n },\n {\n id: 'perm_content_delete',\n code: 'content:delete',\n name: '删除内容',\n label: '删除内容',\n category: 'content',\n sortOrder: 4,\n },\n {\n id: 'perm_system_settings',\n code: 'system:settings',\n name: '系统设置',\n label: '系统设置',\n category: 'system',\n sortOrder: 1,\n },\n {\n id: 'perm_system_logs',\n code: 'system:logs',\n name: '系统日志',\n label: '系统日志',\n category: 'system',\n sortOrder: 2,\n },\n {\n id: 'perm_system_monitor',\n code: 'system:monitor',\n name: '系统监控',\n label: '系统监控',\n category: 'system',\n sortOrder: 3,\n },\n {\n id: 'perm_data_export',\n code: 'data:export',\n name: '数据导出',\n label: '数据导出',\n category: 'data',\n sortOrder: 1,\n },\n {\n id: 'perm_data_import',\n code: 'data:import',\n name: '数据导入',\n label: '数据导入',\n category: 'data',\n sortOrder: 2,\n },\n {\n id: 'perm_order_view',\n code: 'order:view',\n name: '查看订单',\n label: '查看订单',\n category: 'order',\n sortOrder: 1,\n },\n {\n id: 'perm_order_create',\n code: 'order:create',\n name: '创建订单',\n label: '创建订单',\n category: 'order',\n sortOrder: 2,\n },\n {\n id: 'perm_order_edit',\n code: 'order:edit',\n name: '编辑订单',\n label: '编辑订单',\n category: 'order',\n sortOrder: 3,\n },\n {\n id: 'perm_order_delete',\n code: 'order:delete',\n name: '删除订单',\n label: '删除订单',\n category: 'order',\n sortOrder: 4,\n },\n {\n id: 'perm_order_process',\n code: 'order:process',\n name: '处理订单',\n label: '处理订单',\n category: 'order',\n sortOrder: 5,\n },\n {\n id: 'perm_ticket_view',\n code: 'ticket:view',\n name: '查看工单',\n label: '查看工单',\n category: 'ticket',\n sortOrder: 1,\n },\n {\n id: 'perm_ticket_create',\n code: 'ticket:create',\n name: '创建工单',\n label: '创建工单',\n category: 'ticket',\n sortOrder: 2,\n },\n {\n id: 'perm_ticket_edit',\n code: 'ticket:edit',\n name: '编辑工单',\n label: '编辑工单',\n category: 'ticket',\n sortOrder: 3,\n },\n {\n id: 'perm_ticket_delete',\n code: 'ticket:delete',\n name: '删除工单',\n label: '删除工单',\n category: 'ticket',\n sortOrder: 4,\n },\n {\n id: 'perm_ticket_reply',\n code: 'ticket:reply',\n name: '回复工单',\n label: '回复工单',\n category: 'ticket',\n sortOrder: 5,\n },\n {\n id: 'perm_ticket_close',\n code: 'ticket:close',\n name: '关闭工单',\n label: '关闭工单',\n category: 'ticket',\n sortOrder: 6,\n },\n {\n id: 'perm_dispute_view',\n code: 'dispute:view',\n name: '查看争议',\n label: '查看争议',\n category: 'dispute',\n sortOrder: 1,\n },\n {\n id: 'perm_dispute_create',\n code: 'dispute:create',\n name: '创建争议',\n label: '创建争议',\n category: 'dispute',\n sortOrder: 2,\n },\n {\n id: 'perm_dispute_edit',\n code: 'dispute:edit',\n name: '编辑争议',\n label: '编辑争议',\n category: 'dispute',\n sortOrder: 3,\n },\n {\n id: 'perm_dispute_delete',\n code: 'dispute:delete',\n name: '删除争议',\n label: '删除争议',\n category: 'dispute',\n sortOrder: 4,\n },\n {\n id: 'perm_dispute_resolve',\n code: 'dispute:resolve',\n name: '解决争议',\n label: '解决争议',\n category: 'dispute',\n sortOrder: 5,\n },\n {\n id: 'perm_role_view',\n code: 'role:view',\n name: '查看角色',\n label: '查看角色',\n category: 'role',\n sortOrder: 1,\n },\n {\n id: 'perm_role_create',\n code: 'role:create',\n name: '创建角色',\n label: '创建角色',\n category: 'role',\n sortOrder: 2,\n },\n {\n id: 'perm_role_edit',\n code: 'role:edit',\n name: '编辑角色',\n label: '编辑角色',\n category: 'role',\n sortOrder: 3,\n },\n {\n id: 'perm_role_delete',\n code: 'role:delete',\n name: '删除角色',\n label: '删除角色',\n category: 'role',\n sortOrder: 4,\n },\n]`\n\nconst INITIAL_ROLES = `const initialRoles = [\n {\n id: 'role_super_admin',\n code: 'super_admin',\n name: '超级管理员',\n label: '超级管理员',\n isSystem: true,\n sortOrder: 1,\n },\n {\n id: 'role_customer_service',\n code: 'customer_service',\n name: '客服人员',\n label: '客服人员',\n isSystem: true,\n sortOrder: 2,\n },\n {\n id: 'role_user',\n code: 'user',\n name: '普通用户',\n label: '普通用户',\n isSystem: true,\n sortOrder: 3,\n },\n]`\n\nconst INITIAL_ROLE_PERMISSIONS = `const initialRolePermissions = [\n { roleId: 'role_super_admin', permissionId: 'perm_user_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_user_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_user_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_user_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_content_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_content_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_content_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_content_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_system_settings' },\n { roleId: 'role_super_admin', permissionId: 'perm_system_logs' },\n { roleId: 'role_super_admin', permissionId: 'perm_system_monitor' },\n { roleId: 'role_super_admin', permissionId: 'perm_data_export' },\n { roleId: 'role_super_admin', permissionId: 'perm_data_import' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_order_process' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_reply' },\n { roleId: 'role_super_admin', permissionId: 'perm_ticket_close' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_view' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_create' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_edit' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_delete' },\n { roleId: 'role_super_admin', permissionId: 'perm_dispute_resolve' },\n { roleId: 'role_customer_service', permissionId: 'perm_content_view' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_view' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_create' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_edit' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_delete' },\n { roleId: 'role_customer_service', permissionId: 'perm_order_process' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_view' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_create' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_edit' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_delete' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_reply' },\n { roleId: 'role_customer_service', permissionId: 'perm_ticket_close' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_view' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_create' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_edit' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_delete' },\n { roleId: 'role_customer_service', permissionId: 'perm_dispute_resolve' },\n { roleId: 'role_customer_service', permissionId: 'perm_data_export' },\n { roleId: 'role_customer_service', permissionId: 'perm_system_logs' },\n { roleId: 'role_user', permissionId: 'perm_content_view' },\n { roleId: 'role_user', permissionId: 'perm_order_view' },\n]`\n\nexport function generateDbInit(resolved: ResolvedPreset): string {\n const activeSeeds = SEED_MODULES.filter(s => resolved.modules.has(s.module))\n\n if (!resolved.hasPermission) {\n return generateMinimalDbInit()\n }\n\n return generateFullDbInit(activeSeeds)\n}\n\nfunction generateMinimalDbInit(): string {\n return `import { getDb } from './driver'\nimport { logger } from '../utils/logger'\n\nconst log = logger.db()\n\nexport async function initializeDatabase() {\n await getDb()\n\n log.info({}, 'Initializing database...')\n log.info({}, 'Database initialization complete!')\n}\n`\n}\n\nfunction generateFullDbInit(activeSeeds: SeedModule[]): string {\n const seedImports = activeSeeds.map(s => s.importLine).join('\\n')\n const seedCalls = activeSeeds.map(s => ` ${s.call}(),`).join('\\n')\n\n const seedBlock =\n activeSeeds.length > 0\n ? `\n log.info({}, 'Seeding module data...')\n await Promise.all([\n${seedCalls}\n ])\n log.info({}, 'Module data seeding complete!')`\n : ''\n\n return `import { getDb } from './driver'\nimport { permissions, roles, rolePermissions } from './schema'\nimport { logger } from '../utils/logger'\n${seedImports}\n\nconst log = logger.db()\n\n${INITIAL_PERMISSIONS}\n\n${INITIAL_ROLES}\n\n${INITIAL_ROLE_PERMISSIONS}\n\nexport async function initializeDatabase() {\n const db = await getDb()\n\n log.info({}, 'Initializing database...')\n\n const existingPermissions = await db.select().from(permissions)\n if (existingPermissions.length === 0) {\n log.info({}, 'Inserting initial permissions...')\n await db.insert(permissions).values(\n initialPermissions.map(p => ({\n ...p,\n description: null,\n isActive: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n }))\n )\n }\n\n const existingRoles = await db.select().from(roles)\n if (existingRoles.length === 0) {\n log.info({}, 'Inserting initial roles...')\n await db.insert(roles).values(\n initialRoles.map(r => ({\n ...r,\n description: null,\n isActive: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n }))\n )\n }\n\n const existingRolePermissions = await db.select().from(rolePermissions)\n if (existingRolePermissions.length === 0) {\n log.info({}, 'Inserting initial role permissions...')\n await db.insert(rolePermissions).values(\n initialRolePermissions.map(rp => ({\n ...rp,\n createdAt: new Date(),\n }))\n )\n }\n\n log.info({}, 'Database initialization complete!')${seedBlock}\n}\n`\n}\n","import type { ResolvedPreset } from './template-generator'\n\nexport function generateServerApp(resolved: ResolvedPreset): string {\n const useRealtime = resolved.hasSSE || resolved.hasWebSocket\n const useAuditLog = resolved.hasPermission\n const useCaptcha = resolved.hasCaptcha\n const useFileRoutes = resolved.modules.has('file')\n\n const imports: string[] = [\n `import { OpenAPIHono } from '@hono/zod-openapi'`,\n ``,\n `import { HTTPException } from 'hono/http-exception'`,\n `import type { ContentfulStatusCode } from 'hono/utils/http-status'`,\n `import { ZodError } from 'zod'`,\n `import type { AppBindings, CreateAppOptions } from './types/bindings'`,\n `import { AppError } from './utils/app-error'`,\n `import { autoRegisterRealtime } from './core/realtime-scanner'`,\n `import { corsMiddleware, loggerMiddleware, errorHandlerMiddleware } from './middleware'`,\n ]\n\n if (useRealtime) {\n imports.push(`import { realtimeEnvMiddleware } from './middleware/realtime-env'`)\n }\n if (useAuditLog) {\n imports.push(`import { auditLogMiddleware } from './middleware/audit-log'`)\n }\n if (useCaptcha) {\n imports.push(`import { captchaMiddleware } from './middleware/captcha'`)\n }\n\n imports.push(\n `import { createModuleLoggerSync } from './utils/logger'`,\n `import { adminApiRoutes, clientApiRoutes } from './route-registry'`\n )\n\n if (useFileRoutes) {\n imports.push(`import { fileRoutes } from './module-file/routes/file-routes'`)\n }\n\n const middlewareChain: string[] = [\n `.use('*', errorHandlerMiddleware())`,\n `.use('*', loggerMiddleware())`,\n `.use('*', corsMiddleware())`,\n ]\n\n if (useRealtime) {\n middlewareChain.push(`.use('*', realtimeEnvMiddleware())`)\n }\n if (useAuditLog) {\n middlewareChain.push(`.use('/api/*', auditLogMiddleware())`)\n }\n if (useCaptcha) {\n middlewareChain.push(\n `.use(\\n '/api/admin/*',\\n captchaMiddleware({\\n maxRequests: 20,\\n windowMs: 60000,\\n })\\n )`\n )\n }\n\n const routes: string[] = [`.route('/', clientApiRoutes)`, `.route('/', adminApiRoutes)`]\n\n if (useFileRoutes) {\n routes.push(`.route('/files', fileRoutes)`)\n }\n\n const indent = ' '\n const chain = [...middlewareChain, ...routes].join(`\\n${indent}`)\n\n return `${imports.join('\\n')}\n\nexport { type AppBindings, type CreateAppOptions } from './types/bindings'\n\nexport function createApp<T extends AppBindings = AppBindings>(_options: CreateAppOptions = {}) {\n const app = new OpenAPIHono<{ Bindings: T }>()\n ${chain}\n .get('/health', async c => {\n try {\n const { getDb } = await import('./db')\n await getDb()\n return c.json({ status: 'ok', timestamp: new Date().toISOString(), db: 'connected' })\n } catch {\n return c.json({ status: 'ok', timestamp: new Date().toISOString(), db: 'not configured' })\n }\n })\n .post('/api/__test__/cleanup', async c => {\n try {\n const { cleanupTestDatabase } = await import('./db/test-setup')\n await cleanupTestDatabase()\n return c.json({ success: true as const, message: 'Database cleaned up' })\n } catch (error) {\n console.error('Error during database cleanup:', error)\n return c.json({ success: false as const, message: 'Failed to cleanup database' }, 500)\n }\n })\n\n autoRegisterRealtime(app as unknown as Parameters<typeof autoRegisterRealtime>[0])\n\n app.onError((err, c) => {\n const log = createModuleLoggerSync('api')\n c.res.headers.set('Content-Type', 'application/json')\n\n if (AppError.isAppError(err)) {\n return c.json(\n {\n success: false as const,\n error: err.message,\n status: err.statusCode,\n details: err.details,\n },\n err.statusCode as ContentfulStatusCode\n )\n }\n\n if (err instanceof HTTPException) {\n return c.json(\n { success: false as const, error: err.message, status: err.status },\n err.status as ContentfulStatusCode\n )\n }\n\n if (err instanceof ZodError) {\n const details = err.issues.map(issue => ({\n field: issue.path.join('.'),\n message: issue.message,\n }))\n return c.json(\n { success: false as const, error: 'Validation failed', status: 400, details },\n 400\n )\n }\n\n log.error({ err, path: c.req.path }, 'Unhandled error')\n return c.json(\n { success: false as const, error: err.message || 'Internal server error', status: 500 },\n 500\n )\n })\n\n return app\n}\nexport type AdminApiType = typeof adminApiRoutes\nexport type ClientApiType = typeof clientApiRoutes\nexport type AppType = ReturnType<typeof createApp>\n`\n}\n","import type { ResolvedPreset } from './template-generator'\n\nconst MODULE_EXPORTS: Record<string, { namedExports: string[]; hasTypeOnly?: boolean }> = {\n chat: {\n namedExports: ['ChatProtocolSchema', 'type ChatProtocol'],\n },\n todos: {\n namedExports: [\n 'TodoSchema',\n 'TodoStatusSchema',\n 'CreateTodoSchema',\n 'UpdateTodoSchema',\n 'TodoIdSchema',\n 'type Todo',\n 'type TodoStatus',\n 'type CreateTodoInput',\n 'type UpdateTodoInput',\n ],\n },\n files: {\n namedExports: [\n 'FileDownloadSchema',\n 'PrivateFileQuerySchema',\n 'PublicFileUrlSchema',\n 'PrivateFileUrlSchema',\n 'GenerateUrlRequestSchema',\n 'FileUrlResponseSchema',\n 'EmptySchema',\n ],\n },\n notifications: {\n namedExports: [\n 'NotificationSchema',\n 'NotificationTypeSchema',\n 'CreateNotificationSchema',\n 'NotificationListQuerySchema',\n 'SSEEventSchema',\n 'AppSSEProtocolSchema',\n 'type AppNotification',\n 'type NotificationType',\n 'type CreateNotificationInput',\n 'type NotificationListQuery',\n 'type SSEEvent',\n 'type AppSSEProtocol',\n ],\n },\n admin: {\n namedExports: [\n 'SystemStatsSchema',\n 'HealthCheckSchema',\n 'RecentActivityItemSchema',\n 'RecentActivitySchema',\n 'AuthUserSchema',\n 'ClearTodosResultSchema',\n 'type SystemStats',\n 'type HealthCheck',\n 'type RecentActivityItem',\n 'type AuthUserResponse',\n 'type ClearTodosResult',\n ],\n },\n permission: {\n namedExports: [\n 'RoleEnum',\n 'RoleInfoSchema',\n 'PermissionInfoSchema',\n 'UserPermissionsSchema',\n 'RoleListSchema',\n 'PermissionListSchema',\n 'Role',\n 'Permission',\n 'ROLE_PERMISSIONS',\n 'ROLE_LABELS',\n 'PERMISSION_LABELS',\n 'PERMISSION_CATEGORIES',\n 'getPermissionsByRole',\n 'hasPermission',\n 'hasAnyPermission',\n 'hasAllPermissions',\n 'type RoleType',\n 'type RoleInfo',\n 'type PermissionInfo',\n 'type UserPermissions',\n ],\n },\n 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: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 if (!resolved.modules.has('admin')) {\n content = content.replace(\n /,\\n\\s*admin:\\s*path\\.resolve\\(__dirname,\\s*['\"]admin\\.html['\"]\\)/,\n ''\n )\n }\n\n return content\n}\n","import 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 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 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\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 return PRESET_UI_CONFIGS[id as PresetType] ?? PRESET_UI_CONFIGS[Object.keys(PRESET_UI_CONFIGS)[0] as 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 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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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AA2Q5B,IAAM,aAAA,GAAgB,CAAA;AAAA;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;AA2BtB,IAAM,wBAAA,GAA2B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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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 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.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\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 if (!resolved.modules.has('admin')) {\n content = content.replace(\n /,\\n\\s*admin:\\s*path\\.resolve\\(__dirname,\\s*['\"]admin\\.html['\"]\\)/,\n ''\n )\n }\n\n return content\n}\n","import 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 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\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 return PRESET_UI_CONFIGS[id as PresetType] ?? PRESET_UI_CONFIGS[Object.keys(PRESET_UI_CONFIGS)[0] as 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-fullstack-scaffold",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"create-fullstack-scaffold": "dist/cli/index.js"
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
"react-dom": "^18.3.1",
|
|
108
108
|
"react-router-dom": "^7.13.1",
|
|
109
109
|
"ws": "^8.18.3",
|
|
110
|
+
"tsx": "^4.21.0",
|
|
110
111
|
"zod": "^4.4.3",
|
|
111
112
|
"zustand": "^5.0.2"
|
|
112
113
|
},
|
|
@@ -150,7 +151,6 @@
|
|
|
150
151
|
"tailwindcss": "^4.2.1",
|
|
151
152
|
"ts-import": "^5.0.0-beta.1",
|
|
152
153
|
"tsup": "^8.5.0",
|
|
153
|
-
"tsx": "^4.21.0",
|
|
154
154
|
"typescript": "^5.8.3",
|
|
155
155
|
"typescript-eslint": "^8.25.0",
|
|
156
156
|
"vite": "^6.2.3",
|