@kimesh/kit 0.0.1 → 0.1.0-nightly.20260119171158

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/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Hookable } from "hookable";
2
2
  import { Ignore } from "ignore";
3
- import * as vite3 from "vite";
3
+ import * as vite0 from "vite";
4
4
  import { Plugin, Plugin as VitePlugin, PluginOption, PluginOption as VitePluginOption, ResolvedConfig, UserConfig, ViteDevServer } from "vite";
5
5
  import { KimeshLayerConfig, LayerAutoImportConfig, LayerComponentConfig, LayerComposableConfig, LayerRouteConfig, ResolvedLayer, ResolvedLayer as ResolvedLayer$1, generateLayerAliases, mergeLayerConfigs, prepareLayers, resolveLayers } from "@kimesh/layers";
6
6
  import { AutoImportConfig, ImportPreset, LayerAutoImportSource as ImportSource, buildImportRegistry, generateDts, kimeshAutoImport, scanExports } from "@kimesh/auto-import";
@@ -138,7 +138,7 @@ interface KimeshHooks {
138
138
  /** Called to extend Vite config before it's resolved */
139
139
  "vite:extend": (ctx: {
140
140
  kimesh: Kimesh;
141
- config: vite3.UserConfig;
141
+ config: vite0.UserConfig;
142
142
  }) => HookResult;
143
143
  /** Called after Vite config is resolved */
144
144
  "vite:configResolved": (config: ResolvedConfig, kimesh: Kimesh) => HookResult;
@@ -448,7 +448,7 @@ interface KimeshPluginDefinition {
448
448
  * Setup function that returns Vite plugin(s)
449
449
  * @param kimesh - Kimesh context
450
450
  */
451
- setup: (kimesh: Kimesh) => vite3.PluginOption | vite3.PluginOption[];
451
+ setup: (kimesh: Kimesh) => vite0.PluginOption | vite0.PluginOption[];
452
452
  }
453
453
  interface KimeshPlugin {
454
454
  /** Plugin definition */
@@ -456,7 +456,7 @@ interface KimeshPlugin {
456
456
  /** Plugin name */
457
457
  name: string;
458
458
  /** Get Vite plugins */
459
- getPlugins: (kimesh: Kimesh) => vite3.PluginOption[];
459
+ getPlugins: (kimesh: Kimesh) => vite0.PluginOption[];
460
460
  }
461
461
  //#endregion
462
462
  //#region src/types/config.d.ts
@@ -2250,8 +2250,7 @@ interface KimeshPluginOptions {
2250
2250
  /**
2251
2251
  * Additional Vite plugins added programmatically.
2252
2252
  */
2253
- additionalPlugins?: vite3.PluginOption[];
2253
+ additionalPlugins?: vite0.PluginOption[];
2254
2254
  }
2255
2255
  //#endregion
2256
- export { type AddRuntimePluginOptions, type AutoImportConfig, type AutoImportOptions, type ComponentsConfig, DEFAULT_ALIASES, DEFAULT_IGNORE_PATTERNS, type DebugConfig, type DiscoveredPlugin, type EnvOptions, type ErrorContext, type FormattedError, type GeneratePluginsTemplateOptions, type HMRContext, type HMRWatcherOptions, type HookResult, type IgnoreOptions, type ImportPreset, type ImportSource, type Kimesh, type KimeshAlias, type KimeshAppContext, type KimeshComponent, type KimeshComponentsDir, type KimeshConfig, type KimeshHooks, type KimeshImport, type KimeshImportPreset, type KimeshImportsDir, type KimeshLayerConfig, type KimeshModule, type KimeshModuleDefaults, type KimeshModuleDefinition, type KimeshModuleInput, type KimeshModuleMeta, type KimeshModuleOptions, type KimeshOptions, type KimeshPlugin, type KimeshPluginDefinition, KimeshPluginOptions, type KimeshRegistries, type KimeshResolver, type KimeshRoute, type KimeshRouteMiddleware, type KimeshRuntimeHooks, type KimeshRuntimePlugin, type KimeshRuntimePluginDefinition, type KimeshRuntimePluginEntry, type KimeshRuntimePluginMeta, type KimeshRuntimePluginResult, type KimeshTemplate, type KimeshTypeTemplate, type KimeshViteConfig, type KimeshVitePluginEntry, type LayerAutoImportConfig, type LayerComponentConfig, type LayerComposableConfig, type LayerRouteConfig, type LayersConfig, type LoadConfigOptions, type PrepareOptions, type PrepareResult, type ResolvedLayer, type ResolvedTemplate, type RouteRule, type RuntimeConfig, type RuntimeConfigPublic, type ScanPluginsOptions, type VitePlugin, type VitePluginOption, addAlias, addBuildPlugin, addComponent, addComponentResolver, addComponentsDir, addImports, addImportsDir, addImportsPreset, addPluginsTemplate, addRuntimePlugin, addTemplate, addTypeTemplate, addVitePlugin, applyEnv, buildAliases, buildImportRegistry, createDebugLogger, createDefaultRuntimeConfig, createHMRWatcher, createIgnoreFilter, createIgnoreMatcher, createKimesh, createResolver, createTimer, debug, debugTable, defineKimeshModule, defineKimeshPlugin, defineKmConfig, envToKey, executeModule, executeModules, filterIgnored, findMatchingRules, formatConflictWarning, formatError, formatTiming, formatWarning, generateDts, generateLayerAliases, generatePluginsTemplate, generateRouteRulesManifest, getIgnorePatterns, getRedirectInfo, getRouteRule, getRuntimePlugins, hasPlugins, hasRuntimePlugin, isDebug, isDebugEnabled, keyToEnv, kimeshAutoImport, kimeshPlugin, loadConfig, matchRoutePattern, mergeLayerConfigs, mergeRouteRules, normalizeDebugConfig, normalizeModuleInput, prepare, prepareLayers, removeRuntimePlugin, resolveAlias, resolveAliasPath, resolveLayers, resolvePathFromBuild, resolvePathFromRoot, scanExports, scanPluginsDir, setDebugConfig, shouldIgnore, toTsConfigPaths, toViteAliases, tryUseKimesh, updateTemplates, useKimesh, writeTemplates };
2257
- //# sourceMappingURL=index.d.mts.map
2256
+ export { type AddRuntimePluginOptions, type AutoImportConfig, type AutoImportOptions, type ComponentsConfig, DEFAULT_ALIASES, DEFAULT_IGNORE_PATTERNS, type DebugConfig, type DiscoveredPlugin, type EnvOptions, type ErrorContext, type FormattedError, type GeneratePluginsTemplateOptions, type HMRContext, type HMRWatcherOptions, type HookResult, type IgnoreOptions, type ImportPreset, type ImportSource, type Kimesh, type KimeshAlias, type KimeshAppContext, type KimeshComponent, type KimeshComponentsDir, type KimeshConfig, type KimeshHooks, type KimeshImport, type KimeshImportPreset, type KimeshImportsDir, type KimeshLayerConfig, type KimeshModule, type KimeshModuleDefaults, type KimeshModuleDefinition, type KimeshModuleInput, type KimeshModuleMeta, type KimeshModuleOptions, type KimeshOptions, type KimeshPlugin, type KimeshPluginDefinition, KimeshPluginOptions, type KimeshRegistries, type KimeshResolver, type KimeshRoute, type KimeshRouteMiddleware, type KimeshRuntimeHooks, type KimeshRuntimePlugin, type KimeshRuntimePluginDefinition, type KimeshRuntimePluginEntry, type KimeshRuntimePluginMeta, type KimeshRuntimePluginResult, type KimeshTemplate, type KimeshTypeTemplate, type KimeshViteConfig, type KimeshVitePluginEntry, type LayerAutoImportConfig, type LayerComponentConfig, type LayerComposableConfig, type LayerRouteConfig, type LayersConfig, type LoadConfigOptions, type PrepareOptions, type PrepareResult, type ResolvedLayer, type ResolvedTemplate, type RouteRule, type RuntimeConfig, type RuntimeConfigPublic, type ScanPluginsOptions, type VitePlugin, type VitePluginOption, addAlias, addBuildPlugin, addComponent, addComponentResolver, addComponentsDir, addImports, addImportsDir, addImportsPreset, addPluginsTemplate, addRuntimePlugin, addTemplate, addTypeTemplate, addVitePlugin, applyEnv, buildAliases, buildImportRegistry, createDebugLogger, createDefaultRuntimeConfig, createHMRWatcher, createIgnoreFilter, createIgnoreMatcher, createKimesh, createResolver, createTimer, debug, debugTable, defineKimeshModule, defineKimeshPlugin, defineKmConfig, envToKey, executeModule, executeModules, filterIgnored, findMatchingRules, formatConflictWarning, formatError, formatTiming, formatWarning, generateDts, generateLayerAliases, generatePluginsTemplate, generateRouteRulesManifest, getIgnorePatterns, getRedirectInfo, getRouteRule, getRuntimePlugins, hasPlugins, hasRuntimePlugin, isDebug, isDebugEnabled, keyToEnv, kimeshAutoImport, kimeshPlugin, loadConfig, matchRoutePattern, mergeLayerConfigs, mergeRouteRules, normalizeDebugConfig, normalizeModuleInput, prepare, prepareLayers, removeRuntimePlugin, resolveAlias, resolveAliasPath, resolveLayers, resolvePathFromBuild, resolvePathFromRoot, scanExports, scanPluginsDir, setDebugConfig, shouldIgnore, toTsConfigPaths, toViteAliases, tryUseKimesh, updateTemplates, useKimesh, writeTemplates };
package/dist/index.mjs CHANGED
@@ -2791,5 +2791,4 @@ function extractModuleNames(modules) {
2791
2791
  }
2792
2792
 
2793
2793
  //#endregion
2794
- export { DEFAULT_ALIASES, DEFAULT_IGNORE_PATTERNS, addAlias, addBuildPlugin, addComponent, addComponentResolver, addComponentsDir, addImports, addImportsDir, addImportsPreset, addPluginsTemplate, addRuntimePlugin, addTemplate, addTypeTemplate, addVitePlugin, applyEnv, buildAliases, buildImportRegistry, createDebugLogger, createDefaultRuntimeConfig, createHMRWatcher, createIgnoreFilter, createIgnoreMatcher, createKimesh, createResolver, createTimer, debug, debugTable, defineKimeshModule, defineKimeshPlugin, defineKmConfig, envToKey, executeModule, executeModules, filterIgnored, findMatchingRules, formatConflictWarning, formatError, formatTiming, formatWarning, generateDts, generateLayerAliases, generatePluginsTemplate, generateRouteRulesManifest, getIgnorePatterns, getRedirectInfo, getRouteRule, getRuntimePlugins, hasPlugins, hasRuntimePlugin, isDebug, isDebugEnabled, keyToEnv, kimeshAutoImport, kimeshPlugin, loadConfig, matchRoutePattern, mergeLayerConfigs, mergeRouteRules, normalizeDebugConfig, normalizeModuleInput, prepare, prepareLayers, removeRuntimePlugin, resolveAlias, resolveAliasPath, resolveLayers, resolvePathFromBuild, resolvePathFromRoot, scanExports, scanPluginsDir, setDebugConfig, shouldIgnore, toTsConfigPaths, toViteAliases, tryUseKimesh, updateTemplates, useKimesh, writeTemplates };
2795
- //# sourceMappingURL=index.mjs.map
2794
+ export { DEFAULT_ALIASES, DEFAULT_IGNORE_PATTERNS, addAlias, addBuildPlugin, addComponent, addComponentResolver, addComponentsDir, addImports, addImportsDir, addImportsPreset, addPluginsTemplate, addRuntimePlugin, addTemplate, addTypeTemplate, addVitePlugin, applyEnv, buildAliases, buildImportRegistry, createDebugLogger, createDefaultRuntimeConfig, createHMRWatcher, createIgnoreFilter, createIgnoreMatcher, createKimesh, createResolver, createTimer, debug, debugTable, defineKimeshModule, defineKimeshPlugin, defineKmConfig, envToKey, executeModule, executeModules, filterIgnored, findMatchingRules, formatConflictWarning, formatError, formatTiming, formatWarning, generateDts, generateLayerAliases, generatePluginsTemplate, generateRouteRulesManifest, getIgnorePatterns, getRedirectInfo, getRouteRule, getRuntimePlugins, hasPlugins, hasRuntimePlugin, isDebug, isDebugEnabled, keyToEnv, kimeshAutoImport, kimeshPlugin, loadConfig, matchRoutePattern, mergeLayerConfigs, mergeRouteRules, normalizeDebugConfig, normalizeModuleInput, prepare, prepareLayers, removeRuntimePlugin, resolveAlias, resolveAliasPath, resolveLayers, resolvePathFromBuild, resolvePathFromRoot, scanExports, scanPluginsDir, setDebugConfig, shouldIgnore, toTsConfigPaths, toViteAliases, tryUseKimesh, updateTemplates, useKimesh, writeTemplates };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kimesh/kit",
3
- "version": "0.0.1",
3
+ "version": "0.1.0-nightly.20260119171158",
4
4
  "description": "Build-time engine for Kimesh framework",
5
5
  "type": "module",
6
6
  "exports": {
@@ -26,9 +26,9 @@
26
26
  "vue": "^3.5.0"
27
27
  },
28
28
  "dependencies": {
29
- "@kimesh/auto-import": "0.0.1",
30
- "@kimesh/layers": "0.0.1",
31
- "@kimesh/router-generator": "0.0.1",
29
+ "@kimesh/auto-import": "0.1.0-nightly.20260119171158",
30
+ "@kimesh/layers": "0.1.0-nightly.20260119171158",
31
+ "@kimesh/router-generator": "0.1.0-nightly.20260119171158",
32
32
  "@vitejs/plugin-vue": "^6.0.3",
33
33
  "c12": "^3.3.3",
34
34
  "consola": "^3.4.2",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/components.ts","../src/types/imports.ts","../src/types/router.ts","../src/types/hooks.ts","../src/types/runtime-plugin.ts","../src/types/kimesh.ts","../src/types/module.ts","../src/types/config.ts","../src/types/resolver.ts","../src/core/kimesh.ts","../src/core/module.ts","../src/core/plugin.ts","../src/kit/vite.ts","../src/kit/alias.ts","../src/kit/templates.ts","../src/kit/components.ts","../src/kit/imports.ts","../src/kit/resolver.ts","../src/kit/runtime-plugin.ts","../src/kit/plugin-scanner.ts","../src/kit/plugin-template.ts","../src/kit/alias-utils.ts","../src/kit/ignore-utils.ts","../src/kit/route-rules.ts","../src/kit/debug.ts","../src/vite/plugin.ts","../src/config.ts","../src/prepare.ts","../src/runtime-config.ts","../src/hmr/watcher.ts","../src/errors/formatter.ts","../src/index.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["parts","ignore","join","debug","join","isAbsolute","resolve","hasPlugins","debug","debug","join","resolve","debug","extractModuleNames","prepareLayers","generateLayerAliases","kimeshAutoImport","options","loadC12Config","resolve","join","prepareLayers","generateLayerAliases"],"sources":["../src/runtime-config.ts","../src/core/kimesh.ts","../src/core/module.ts","../src/core/plugin.ts","../src/kit/vite.ts","../src/kit/alias.ts","../src/kit/templates.ts","../src/kit/components.ts","../src/kit/imports.ts","../src/kit/resolver.ts","../src/kit/runtime-plugin.ts","../src/kit/plugin-scanner.ts","../src/kit/plugin-template.ts","../src/types/config.ts","../src/kit/alias-utils.ts","../src/kit/ignore-utils.ts","../src/kit/route-rules.ts","../src/kit/debug.ts","../src/kit/tsconfig-generator.ts","../src/kit/phase2-utils.ts","../src/vite/entry.ts","../src/vite/html.ts","../src/hmr/watcher.ts","../src/errors/formatter.ts","../src/vite/plugin.ts","../src/config.ts","../src/prepare.ts"],"sourcesContent":["/**\n * @kimesh/kit - Runtime Configuration Processing\n *\n * Utilities for processing environment variables and merging with runtime config.\n * Phase 1: Build-time only, all config is public.\n */\n\nimport { snakeCase } from \"scule\";\nimport { klona } from \"klona/json\";\nimport destr from \"destr\";\nimport type { RuntimeConfig } from \"./types/config\";\n\n/** Default environment variable prefix */\nconst ENV_PREFIX = \"KIMESH_\";\n\n/**\n * Options for environment variable processing\n */\nexport interface EnvOptions {\n /** Environment variable prefix (default: 'KIMESH_') */\n prefix?: string;\n /** Environment object to read from (default: process.env) */\n env?: Record<string, string | undefined>;\n}\n\n/**\n * Convert a config key path to environment variable name.\n *\n * @param keys - Array of keys representing the path (e.g., ['features', 'darkMode'])\n * @param prefix - Environment variable prefix (default: 'KIMESH_')\n * @returns Environment variable name (e.g., 'KIMESH_FEATURES_DARK_MODE')\n *\n * @example\n * ```ts\n * keyToEnv(['apiBase']) // => 'KIMESH_API_BASE'\n * keyToEnv(['features', 'darkMode']) // => 'KIMESH_FEATURES_DARK_MODE'\n * ```\n */\nexport function keyToEnv(keys: string[], prefix: string = ENV_PREFIX): string {\n return (\n prefix +\n keys\n .map((key) => snakeCase(key).toUpperCase())\n .join(\"_\")\n );\n}\n\n/**\n * Convert environment variable name to config key path.\n *\n * Note: This function uses a best-effort heuristic for reverse conversion.\n * Since SNAKE_CASE to camelCase is ambiguous (e.g., API_BASE could be 'apiBase' or 'apibase'),\n * this function assumes each underscore-separated segment is a word boundary.\n *\n * @param envKey - Environment variable name\n * @param prefix - Environment variable prefix (default: 'KIMESH_')\n * @returns Array of keys or null if the env var doesn't match the prefix\n *\n * @example\n * ```ts\n * envToKey('KIMESH_API_BASE') // => ['apiBase']\n * envToKey('KIMESH_FEATURES_DARK_MODE') // => ['features', 'darkMode']\n * ```\n */\nexport function envToKey(\n envKey: string,\n prefix: string = ENV_PREFIX\n): string[] | null {\n if (!envKey.startsWith(prefix)) {\n return null;\n }\n\n const rest = envKey.slice(prefix.length);\n if (!rest) {\n return null;\n }\n\n // Split by underscore and convert to camelCase\n const parts = rest.toLowerCase().split(\"_\");\n\n // Convert to camelCase words\n // Each underscore becomes a word boundary in camelCase\n return parts.reduce<string[]>((acc, part, i) => {\n if (i === 0) {\n acc.push(part);\n } else if (part) {\n // Capitalize first letter of subsequent parts for camelCase\n const last = acc[acc.length - 1];\n acc[acc.length - 1] = last + part.charAt(0).toUpperCase() + part.slice(1);\n }\n return acc;\n }, []);\n}\n\n/**\n * Check if a value at the given path exists in the config object.\n * This helps determine if an env var corresponds to an existing config key.\n */\nfunction hasConfigPath(\n config: Record<string, unknown>,\n keys: string[]\n): boolean {\n let current: unknown = config;\n for (const key of keys) {\n if (current === null || typeof current !== \"object\") {\n return false;\n }\n if (!(key in (current as Record<string, unknown>))) {\n return false;\n }\n current = (current as Record<string, unknown>)[key];\n }\n return true;\n}\n\n/**\n * Get all possible key paths from environment variable name.\n * Since SNAKE_CASE conversion is ambiguous, this generates multiple candidates.\n *\n * @param envKey - Environment variable name (without prefix)\n * @returns Array of possible key path interpretations\n */\nfunction getPossiblePaths(envKey: string): string[][] {\n const parts = envKey.toLowerCase().split(\"_\");\n const paths: string[][] = [];\n\n // Generate all possible groupings\n // For 'API_BASE_URL': ['apiBaseUrl'], ['api', 'baseUrl'], ['api', 'base', 'url']\n function generateGroupings(\n parts: string[],\n current: string[],\n start: number\n ): void {\n if (start >= parts.length) {\n paths.push([...current]);\n return;\n }\n\n // Build camelCase from start to each possible end point\n for (let end = start + 1; end <= parts.length; end++) {\n const segment = parts.slice(start, end).reduce((acc, part, i) => {\n if (i === 0) return part;\n return acc + part.charAt(0).toUpperCase() + part.slice(1);\n }, \"\");\n current.push(segment);\n generateGroupings(parts, current, end);\n current.pop();\n }\n }\n\n generateGroupings(parts, [], 0);\n return paths;\n}\n\n/**\n * Find the best matching config path for an environment variable.\n * Prioritizes existing paths in the config, falls back to single camelCase key.\n */\nfunction findBestPath(\n envKey: string,\n config: Record<string, unknown>,\n prefix: string\n): string[] | null {\n if (!envKey.startsWith(prefix)) {\n return null;\n }\n\n const rest = envKey.slice(prefix.length);\n if (!rest) {\n return null;\n }\n\n const possiblePaths = getPossiblePaths(rest);\n\n // First, try to find a path that exists in the config\n for (const path of possiblePaths) {\n if (hasConfigPath(config, path)) {\n return path;\n }\n }\n\n // Fall back to the single camelCase key (most common case)\n // This handles adding new config keys via env vars\n const parts = rest.toLowerCase().split(\"_\");\n return [\n parts.reduce((acc, part, i) => {\n if (i === 0) return part;\n return acc + part.charAt(0).toUpperCase() + part.slice(1);\n }, \"\"),\n ];\n}\n\n/**\n * Set a value at a nested path in an object, creating intermediate objects as needed.\n */\nfunction setNestedValue(\n obj: Record<string, unknown>,\n keys: string[],\n value: unknown\n): void {\n let current = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!(key in current) || typeof current[key] !== \"object\" || current[key] === null) {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n current[keys[keys.length - 1]] = value;\n}\n\n/**\n * Apply environment variables to runtime config.\n *\n * Scans the environment for `KIMESH_*` variables and overlays them onto\n * the config object. Called at build time to bake env values into the bundle.\n *\n * @param config - Base runtime config from kimesh.config.ts\n * @param opts - Options for environment processing\n * @returns Merged config with env overrides\n *\n * @example\n * ```ts\n * // Given:\n * // KIMESH_API_BASE=https://api.example.com\n * // KIMESH_DEBUG=true\n *\n * const config = applyEnv({\n * apiBase: '/api',\n * debug: false,\n * });\n *\n * // Result:\n * // { apiBase: 'https://api.example.com', debug: true }\n * ```\n */\nexport function applyEnv(\n config: Record<string, unknown>,\n opts: EnvOptions = {}\n): RuntimeConfig {\n const { prefix = ENV_PREFIX, env = process.env } = opts;\n\n // Deep clone to avoid mutations\n const result = klona(config);\n\n // Process all env vars with the prefix\n for (const [key, value] of Object.entries(env)) {\n if (value === undefined) continue;\n if (!key.startsWith(prefix)) continue;\n\n const configPath = findBestPath(key, result, prefix);\n if (!configPath || configPath.length === 0) continue;\n\n // Parse value using destr (handles booleans, numbers, JSON)\n const parsedValue = destr(value);\n\n setNestedValue(result, configPath, parsedValue);\n }\n\n return result as RuntimeConfig;\n}\n\n/**\n * Create an empty runtime config object.\n * Used as a default when no config is provided.\n */\nexport function createDefaultRuntimeConfig(): RuntimeConfig {\n return {};\n}\n","/**\n * @kimesh/kit - Core Kimesh Context Implementation\n *\n * The Kimesh class is the central context for all module operations.\n */\n\nimport { createHooks } from \"hookable\";\nimport type { Hookable } from \"hookable\";\nimport type { ResolvedLayer } from \"@kimesh/layers\";\nimport type {\n Kimesh as IKimesh,\n KimeshOptions,\n KimeshRegistries,\n KimeshHooks,\n KimeshConfig,\n} from \"../types\";\nimport { applyEnv, createDefaultRuntimeConfig } from \"../runtime-config\";\n\n/**\n * Create empty registries\n */\nfunction createEmptyRegistries(): KimeshRegistries {\n return {\n vitePlugins: [],\n aliases: [],\n templates: [],\n typeTemplates: [],\n imports: [],\n importsDirs: [],\n importsPresets: [],\n components: [],\n componentsDirs: [],\n componentResolvers: [],\n routes: [],\n routeMiddleware: [],\n runtimePlugins: [],\n };\n}\n\n/**\n * Create a new Kimesh context\n */\nexport function createKimesh(options: {\n config: KimeshConfig;\n layers: ResolvedLayer[];\n root: string;\n buildDir: string;\n dev?: boolean;\n}): IKimesh {\n const hooks = createHooks<KimeshHooks>();\n const registries = createEmptyRegistries();\n\n // Process runtime config with env var overrides\n const baseRuntimeConfig = options.config.runtimeConfig || createDefaultRuntimeConfig();\n const resolvedRuntimeConfig = applyEnv(baseRuntimeConfig);\n\n const kimeshOptions: KimeshOptions = {\n dev: options.dev ?? process.env.NODE_ENV !== \"production\",\n root: options.root,\n buildDir: options.buildDir,\n config: options.config,\n layers: options.layers,\n // Phase 1: Simple flat runtimeConfig (no public/private split)\n // This is kept for backwards compatibility and module access\n runtimeConfig: {\n public: resolvedRuntimeConfig,\n private: {},\n },\n };\n\n const kimesh: IKimesh = {\n options: kimeshOptions,\n hooks: hooks as Hookable<KimeshHooks>,\n _registries: registries,\n\n // Convenience getters\n get layers() {\n return kimeshOptions.layers;\n },\n get root() {\n return kimeshOptions.root;\n },\n get buildDir() {\n return kimeshOptions.buildDir;\n },\n\n // Hook methods\n hook(name, handler, opts) {\n return hooks.hook(name, handler as any, opts);\n },\n callHook(name, ...args) {\n return hooks.callHook(name, ...args) as Promise<void>;\n },\n hookOnce(name, handler) {\n return hooks.hookOnce(name, handler as any);\n },\n };\n\n return kimesh;\n}\n\n// ============================================================================\n// Context Storage (for useKimesh)\n// ============================================================================\n\nlet currentKimesh: IKimesh | undefined;\n\n/**\n * Set the current Kimesh context (internal use)\n */\nexport function _setKimeshContext(kimesh: IKimesh | undefined): void {\n currentKimesh = kimesh;\n}\n\n/**\n * Get the current Kimesh context\n * @throws Error if not in a Kimesh context\n */\nexport function useKimesh(): IKimesh {\n if (!currentKimesh) {\n throw new Error(\n \"[kimesh] useKimesh() called outside of Kimesh context. \" +\n \"Make sure you're calling this within a module setup function.\"\n );\n }\n return currentKimesh;\n}\n\n/**\n * Try to get the current Kimesh context\n * @returns Kimesh instance or undefined if not in context\n */\nexport function tryUseKimesh(): IKimesh | undefined {\n return currentKimesh;\n}\n","/**\n * @kimesh/kit - Module Definition & Execution\n */\n\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport consola from \"consola\";\nimport type {\n KimeshModuleDefinition,\n KimeshModule,\n KimeshModuleMeta,\n KimeshModuleInput,\n Kimesh,\n} from \"../types\";\nimport { _setKimeshContext } from \"./kimesh\";\n\n/**\n * Define a Kimesh module with full type inference\n *\n * @example\n * ```ts\n * export default defineKimeshModule<{ apiKey: string }>({\n * meta: {\n * name: \"@kimesh/analytics\",\n * configKey: \"analytics\",\n * },\n * defaults: {\n * apiKey: \"\",\n * },\n * hooks: {\n * \"ready\": (kimesh) => {\n * console.log(\"Kimesh is ready!\");\n * },\n * },\n * async setup(options, kimesh) {\n * // Module setup logic\n * },\n * });\n * ```\n */\nexport function defineKimeshModule<TOptions = Record<string, unknown>>(\n definition: KimeshModuleDefinition<TOptions>\n): KimeshModule<TOptions> {\n const meta: Required<KimeshModuleMeta> = {\n name: definition.meta?.name ?? \"anonymous-module\",\n version: definition.meta?.version ?? \"0.0.0\",\n configKey: definition.meta?.configKey ?? \"\",\n compatibility: definition.meta?.compatibility ?? {},\n };\n\n return {\n _def: definition,\n meta,\n\n async getDefaults(kimesh: Kimesh): Promise<Partial<TOptions>> {\n if (!definition.defaults) {\n return {} as Partial<TOptions>;\n }\n\n if (typeof definition.defaults === \"function\") {\n return await definition.defaults(kimesh);\n }\n\n return definition.defaults;\n },\n\n async setup(options: TOptions, kimesh: Kimesh): Promise<void> {\n // Register shorthand hooks\n if (definition.hooks) {\n for (const [hookName, handler] of Object.entries(definition.hooks)) {\n if (handler) {\n kimesh.hook(hookName as keyof typeof definition.hooks, handler as any);\n }\n }\n }\n\n // Call setup function\n if (definition.setup) {\n await definition.setup(options, kimesh);\n }\n },\n };\n}\n\n/**\n * Resolve a string module name to an actual module\n */\nasync function resolveStringModule(\n moduleName: string,\n kimesh: Kimesh\n): Promise<KimeshModule<any>> {\n try {\n // Create a require function relative to the project root\n // This handles workspace: dependencies correctly\n const requirePath = kimesh.root + \"/package.json\";\n const require = createRequire(pathToFileURL(requirePath).href);\n\n // Resolve the module path first\n let modulePath: string;\n try {\n modulePath = require.resolve(moduleName);\n consola.debug(`[Kimesh] Resolved module \"${moduleName}\" to ${modulePath}`);\n } catch (err) {\n consola.debug(`[Kimesh] Failed to resolve \"${moduleName}\" from ${requirePath}:`, err);\n throw new Error(\n `Module \"${moduleName}\" not found. Make sure it's installed in your project.`\n );\n }\n\n // Import the resolved module\n const imported = await import(pathToFileURL(modulePath).href);\n const module = imported.default || imported;\n\n // Check if it's a valid KimeshModule\n if (module && typeof module === \"object\" && \"_def\" in module) {\n return module as KimeshModule<any>;\n }\n\n // Check if it's a module definition (not wrapped with defineKimeshModule)\n if (module && typeof module === \"object\" && \"setup\" in module) {\n return defineKimeshModule(module);\n }\n\n throw new Error(\n `Module \"${moduleName}\" does not export a valid Kimesh module. ` +\n `Make sure the module uses defineKimeshModule() or exports a valid module definition.`\n );\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(`Failed to load module \"${moduleName}\": ${error}`);\n }\n}\n\n/**\n * Normalize module input (string, module, or [module, options] tuple)\n */\nexport async function normalizeModuleInput<TOptions>(\n input: KimeshModuleInput<TOptions>,\n kimesh: Kimesh\n): Promise<{ module: KimeshModule<TOptions>; options: Partial<TOptions> }> {\n // String module name\n if (typeof input === \"string\") {\n const module = await resolveStringModule(input, kimesh);\n return { module: module as KimeshModule<TOptions>, options: {} };\n }\n\n // Tuple [module, options] or [string, options]\n if (Array.isArray(input)) {\n const [moduleOrString, options] = input;\n\n if (typeof moduleOrString === \"string\") {\n const module = await resolveStringModule(moduleOrString, kimesh);\n return { module: module as KimeshModule<TOptions>, options: options ?? {} };\n }\n\n return { module: moduleOrString, options: options ?? {} };\n }\n\n // Direct module object\n return { module: input, options: {} };\n}\n\n/**\n * Execute a single module\n */\nexport async function executeModule<TOptions>(\n moduleInput: KimeshModuleInput<TOptions>,\n kimesh: Kimesh\n): Promise<void> {\n const { module, options: userOptions } = await normalizeModuleInput(moduleInput, kimesh);\n\n // Get defaults\n const defaults = await module.getDefaults(kimesh);\n\n // Get options from config if configKey is set\n const configKey = module.meta.configKey;\n const configOptions = configKey\n ? (kimesh.options.config[configKey] as Partial<TOptions>) ?? {}\n : {};\n\n // Merge options: defaults < configOptions < userOptions\n const mergedOptions = {\n ...defaults,\n ...configOptions,\n ...userOptions,\n } as TOptions;\n\n // Set context and execute\n _setKimeshContext(kimesh);\n try {\n await module.setup(mergedOptions, kimesh);\n } finally {\n _setKimeshContext(undefined);\n }\n}\n\n/**\n * Extract module name from various input formats\n */\nfunction getModuleName(input: KimeshModuleInput): string {\n if (typeof input === \"string\") {\n return input;\n }\n\n if (Array.isArray(input)) {\n const first = input[0];\n if (typeof first === \"string\") {\n return first;\n }\n return first.meta?.name ?? \"unknown\";\n }\n\n return input.meta?.name ?? \"unknown\";\n}\n\n/**\n * Execute all modules in order\n */\nexport async function executeModules(\n modules: KimeshModuleInput[],\n kimesh: Kimesh\n): Promise<void> {\n await kimesh.callHook(\"modules:before\", kimesh);\n\n for (const moduleInput of modules) {\n try {\n await executeModule(moduleInput, kimesh);\n } catch (error) {\n const moduleName = getModuleName(moduleInput);\n consola.error(`[Kimesh] Failed to execute module \"${moduleName}\":`, error);\n }\n }\n\n await kimesh.callHook(\"modules:done\", kimesh);\n}\n","/**\n * @kimesh/kit - Plugin Definition\n */\n\nimport type { PluginOption } from \"vite\";\nimport type {\n KimeshPluginDefinition,\n KimeshPlugin,\n Kimesh,\n} from \"../types\";\n\n/**\n * Define a Kimesh plugin (lightweight Vite plugin wrapper)\n *\n * @example\n * ```ts\n * export default defineKimeshPlugin({\n * name: \"@kimesh/icons\",\n * setup(kimesh) {\n * return Icons({\n * compiler: \"vue3\",\n * autoInstall: true,\n * });\n * },\n * });\n * ```\n */\nexport function defineKimeshPlugin(\n definition: KimeshPluginDefinition\n): KimeshPlugin {\n return {\n _def: definition,\n name: definition.name,\n\n getPlugins(kimesh: Kimesh): PluginOption[] {\n const result = definition.setup(kimesh);\n return Array.isArray(result) ? result : [result];\n },\n };\n}\n","/**\n * @kimesh/kit - Vite Plugin Utilities\n */\n\nimport type { Plugin, PluginOption } from \"vite\";\nimport type { Kimesh, KimeshVitePluginEntry } from \"../types\";\nimport { useKimesh } from \"../core/kimesh\";\n\nexport interface AddVitePluginOptions {\n /** Plugin enforce order */\n enforce?: \"pre\" | \"post\";\n /** Numeric order (lower = earlier) */\n order?: number;\n /** Add to beginning of plugins array */\n prepend?: boolean;\n}\n\n/**\n * Add a Vite plugin to the build\n *\n * @example\n * ```ts\n * addVitePlugin(myPlugin());\n * addVitePlugin(myPlugin(), { enforce: \"pre\" });\n * ```\n */\nexport function addVitePlugin(\n plugin: Plugin | Plugin[] | PluginOption,\n options?: AddVitePluginOptions\n): void {\n const kimesh = useKimesh();\n _addVitePlugin(kimesh, plugin, options);\n}\n\n/**\n * Internal: Add Vite plugin with explicit Kimesh context\n */\nexport function _addVitePlugin(\n kimesh: Kimesh,\n plugin: Plugin | Plugin[] | PluginOption,\n options?: AddVitePluginOptions\n): void {\n const plugins = Array.isArray(plugin) ? plugin : [plugin];\n const registry = kimesh._registries.vitePlugins;\n\n for (const p of plugins) {\n if (!p) continue;\n\n const entry: KimeshVitePluginEntry = {\n plugin: p as Plugin,\n enforce: options?.enforce,\n order: options?.order,\n meta: { name: (p as Plugin).name },\n };\n\n if (options?.prepend) {\n registry.unshift(entry);\n } else {\n registry.push(entry);\n }\n }\n}\n\n/**\n * Add a build plugin (alias for addVitePlugin with default order)\n */\nexport function addBuildPlugin(\n plugin: Plugin | Plugin[],\n options?: AddVitePluginOptions\n): void {\n addVitePlugin(plugin, options);\n}\n","/**\n * @kimesh/kit - Alias Utilities\n */\n\nimport type { Kimesh, KimeshAlias } from \"../types\";\nimport { useKimesh } from \"../core/kimesh\";\n\n/**\n * Add an alias\n *\n * @example\n * ```ts\n * addAlias(\"#my-module\", \"/path/to/module\");\n * addAlias(\"@/components\", \"./src/components\");\n * ```\n */\nexport function addAlias(find: string | RegExp, replacement: string): void {\n const kimesh = useKimesh();\n _addAlias(kimesh, find, replacement);\n}\n\n/**\n * Internal: Add alias with explicit Kimesh context\n */\nexport function _addAlias(\n kimesh: Kimesh,\n find: string | RegExp,\n replacement: string\n): void {\n const alias: KimeshAlias = { find, replacement };\n kimesh._registries.aliases.push(alias);\n}\n\n/**\n * Resolve an alias to its actual path\n */\nexport function resolveAlias(alias: string): string | undefined {\n const kimesh = useKimesh();\n return _resolveAlias(kimesh, alias);\n}\n\n/**\n * Check if an alias matches a given find pattern\n */\nfunction matchesAlias(alias: string, find: string | RegExp): boolean {\n if (typeof find === \"string\") {\n return alias === find || alias.startsWith(find + \"/\");\n }\n return find.test(alias);\n}\n\n/**\n * Internal: Resolve alias with explicit Kimesh context\n */\nexport function _resolveAlias(\n kimesh: Kimesh,\n alias: string\n): string | undefined {\n for (const entry of kimesh._registries.aliases) {\n if (matchesAlias(alias, entry.find)) {\n return alias.replace(entry.find, entry.replacement);\n }\n }\n return undefined;\n}\n","/**\n * @kimesh/kit - Template Utilities\n */\n\nimport { existsSync, mkdirSync, writeFileSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type {\n Kimesh,\n KimeshTemplate,\n KimeshTypeTemplate,\n ResolvedTemplate,\n} from \"../types\";\nimport { useKimesh } from \"../core/kimesh\";\n\n/**\n * Add a template to be generated\n *\n * @example\n * ```ts\n * addTemplate({\n * filename: \"my-config.ts\",\n * getContents: ({ kimesh }) => `export default ${JSON.stringify(config)}`,\n * });\n * ```\n */\nexport function addTemplate<TData = unknown>(\n template: KimeshTemplate<TData>\n): void {\n const kimesh = useKimesh();\n _addTemplate(kimesh, template);\n}\n\n/**\n * Internal: Add template with explicit Kimesh context\n */\nexport function _addTemplate<TData = unknown>(\n kimesh: Kimesh,\n template: KimeshTemplate<TData>\n): void {\n kimesh._registries.templates.push(template as KimeshTemplate);\n}\n\n/**\n * Add a type template (.d.ts) to be generated\n *\n * @example\n * ```ts\n * addTypeTemplate({\n * filename: \"components.d.ts\",\n * getContents: ({ kimesh }) => generateComponentTypes(kimesh),\n * });\n * ```\n */\nexport function addTypeTemplate<TData = unknown>(\n template: KimeshTypeTemplate<TData>\n): void {\n const kimesh = useKimesh();\n _addTypeTemplate(kimesh, template);\n}\n\n/**\n * Internal: Add type template with explicit Kimesh context\n */\nexport function _addTypeTemplate<TData = unknown>(\n kimesh: Kimesh,\n template: KimeshTypeTemplate<TData>\n): void {\n kimesh._registries.typeTemplates.push(template as KimeshTypeTemplate);\n}\n\n/**\n * Ensure build directory exists\n */\nfunction ensureBuildDir(kimesh: Kimesh): void {\n if (!existsSync(kimesh.buildDir)) {\n mkdirSync(kimesh.buildDir, { recursive: true });\n }\n}\n\n/**\n * Generate and write all templates\n */\nexport async function writeTemplates(kimesh: Kimesh): Promise<ResolvedTemplate[]> {\n ensureBuildDir(kimesh);\n const results: ResolvedTemplate[] = [];\n\n // Process regular templates\n for (const template of kimesh._registries.templates) {\n const resolved = await resolveTemplate(kimesh, template);\n if (resolved) {\n if (template.write !== false) {\n writeTemplate(resolved);\n }\n results.push(resolved);\n }\n }\n\n // Process type templates (always written)\n for (const template of kimesh._registries.typeTemplates) {\n const resolved = await resolveTemplate(kimesh, template);\n if (resolved) {\n writeTemplate(resolved);\n results.push(resolved);\n }\n }\n\n return results;\n}\n\n/**\n * Resolve a single template\n */\nasync function resolveTemplate<TData>(\n kimesh: Kimesh,\n template: KimeshTemplate<TData>\n): Promise<ResolvedTemplate | null> {\n let contents: string;\n\n if (template.getContents) {\n contents = await template.getContents({\n ...(template.data as TData),\n kimesh,\n });\n } else if (template.src) {\n contents = readFileSync(template.src, \"utf-8\");\n } else {\n return null;\n }\n\n const dst = join(kimesh.buildDir, template.filename);\n\n return {\n filename: template.filename,\n dst,\n contents,\n };\n}\n\n/**\n * Write a resolved template to disk\n */\nfunction writeTemplate(template: ResolvedTemplate): void {\n const dir = dirname(template.dst);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(template.dst, template.contents, \"utf-8\");\n}\n\n/**\n * Update specific templates (for HMR)\n */\nexport async function updateTemplates(\n kimesh: Kimesh,\n options?: { filter?: (t: KimeshTemplate) => boolean }\n): Promise<ResolvedTemplate[]> {\n const templates = options?.filter\n ? kimesh._registries.templates.filter(options.filter)\n : kimesh._registries.templates;\n\n const results: ResolvedTemplate[] = [];\n\n for (const template of templates) {\n const resolved = await resolveTemplate(kimesh, template);\n if (resolved && template.write !== false) {\n writeTemplate(resolved);\n results.push(resolved);\n }\n }\n\n return results;\n}\n","/**\n * @kimesh/kit - Component Utilities\n */\n\nimport type {\n Kimesh,\n KimeshComponent,\n KimeshComponentsDir,\n} from \"../types\";\nimport type { ComponentResolver } from \"unplugin-vue-components\";\nimport { useKimesh } from \"../core/kimesh\";\n\n/**\n * Add a single component\n *\n * @example\n * ```ts\n * addComponent({\n * name: \"MyButton\",\n * filePath: \"./components/MyButton.vue\",\n * });\n * ```\n */\nexport function addComponent(component: KimeshComponent): void {\n const kimesh = useKimesh();\n _addComponent(kimesh, component);\n}\n\n/**\n * Internal: Add component with explicit Kimesh context\n */\nexport function _addComponent(kimesh: Kimesh, component: KimeshComponent): void {\n kimesh._registries.components.push(component);\n}\n\n/**\n * Add a components directory\n *\n * @example\n * ```ts\n * addComponentsDir({\n * path: \"./components/ui\",\n * prefix: \"Ui\",\n * });\n * ```\n */\nexport function addComponentsDir(\n dir: KimeshComponentsDir,\n options?: { prepend?: boolean }\n): void {\n const kimesh = useKimesh();\n _addComponentsDir(kimesh, dir, options);\n}\n\n/**\n * Internal: Add components directory with explicit Kimesh context\n */\nexport function _addComponentsDir(\n kimesh: Kimesh,\n dir: KimeshComponentsDir,\n options?: { prepend?: boolean }\n): void {\n if (options?.prepend) {\n kimesh._registries.componentsDirs.unshift(dir);\n } else {\n kimesh._registries.componentsDirs.push(dir);\n }\n}\n\n/**\n * Add a component resolver\n *\n * @example\n * ```ts\n * addComponentResolver({\n * type: \"component\",\n * resolve: (name) => {\n * if (name.startsWith(\"Ui\")) {\n * return { name, from: `./components/ui/${name}.vue` };\n * }\n * },\n * });\n * ```\n */\nexport function addComponentResolver(resolver: ComponentResolver): void {\n const kimesh = useKimesh();\n _addComponentResolver(kimesh, resolver);\n}\n\n/**\n * Internal: Add component resolver with explicit Kimesh context\n */\nexport function _addComponentResolver(\n kimesh: Kimesh,\n resolver: ComponentResolver\n): void {\n kimesh._registries.componentResolvers.push(resolver);\n}\n","/**\n * @kimesh/kit - Import Utilities\n */\n\nimport type {\n Kimesh,\n KimeshImport,\n KimeshImportsDir,\n KimeshImportPreset,\n} from \"../types\";\nimport { useKimesh } from \"../core/kimesh\";\n\n/**\n * Add imports (auto-imports)\n *\n * @example\n * ```ts\n * addImports({ name: \"useAuth\", from: \"./composables/auth\" });\n * addImports([\n * { name: \"ref\", from: \"vue\" },\n * { name: \"computed\", from: \"vue\" },\n * ]);\n * ```\n */\nexport function addImports(imports: KimeshImport | KimeshImport[]): void {\n const kimesh = useKimesh();\n _addImports(kimesh, imports);\n}\n\n/**\n * Internal: Add imports with explicit Kimesh context\n */\nexport function _addImports(\n kimesh: Kimesh,\n imports: KimeshImport | KimeshImport[]\n): void {\n const importsList = Array.isArray(imports) ? imports : [imports];\n kimesh._registries.imports.push(...importsList);\n}\n\n/**\n * Add an imports directory\n *\n * @example\n * ```ts\n * addImportsDir(\"./composables\");\n * addImportsDir({ path: \"./utils\", pattern: \"use*.ts\" });\n * ```\n */\nexport function addImportsDir(\n dir: string | KimeshImportsDir,\n options?: { prepend?: boolean }\n): void {\n const kimesh = useKimesh();\n _addImportsDir(kimesh, dir, options);\n}\n\n/**\n * Internal: Add imports directory with explicit Kimesh context\n */\nexport function _addImportsDir(\n kimesh: Kimesh,\n dir: string | KimeshImportsDir,\n options?: { prepend?: boolean }\n): void {\n const dirConfig: KimeshImportsDir =\n typeof dir === \"string\" ? { path: dir } : dir;\n\n if (options?.prepend) {\n kimesh._registries.importsDirs.unshift(dirConfig);\n } else {\n kimesh._registries.importsDirs.push(dirConfig);\n }\n}\n\n/**\n * Add import presets\n *\n * @example\n * ```ts\n * addImportsPreset({ from: \"vue\", imports: [\"ref\", \"computed\", \"watch\"] });\n * ```\n */\nexport function addImportsPreset(preset: KimeshImportPreset): void {\n const kimesh = useKimesh();\n _addImportsPreset(kimesh, preset);\n}\n\n/**\n * Internal: Add import preset with explicit Kimesh context\n */\nexport function _addImportsPreset(\n kimesh: Kimesh,\n preset: KimeshImportPreset\n): void {\n kimesh._registries.importsPresets.push(preset);\n}\n","/**\n * @kimesh/kit - Resolver Utilities\n */\n\nimport { existsSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport type { Kimesh, KimeshResolver } from \"../types\";\nimport { useKimesh, tryUseKimesh } from \"../core/kimesh\";\nimport { _resolveAlias } from \"./alias\";\n\n/**\n * Create a resolver for the current module\n *\n * @example\n * ```ts\n * const resolver = createResolver(import.meta.url);\n * const runtimePath = resolver.resolve(\"./runtime\");\n * ```\n */\nexport function createResolver(base: string): KimeshResolver {\n // Handle file:// URLs (from import.meta.url)\n const baseDir = base.startsWith(\"file://\")\n ? dirname(new URL(base).pathname)\n : dirname(base);\n\n return {\n resolve(...paths: string[]): string {\n return resolve(baseDir, ...paths);\n },\n\n async resolvePath(path: string): Promise<string> {\n const resolved = resolve(baseDir, path);\n if (!existsSync(resolved)) {\n throw new Error(`Path not found: ${resolved}`);\n }\n return resolved;\n },\n\n resolveAlias(alias: string): string | undefined {\n const kimesh = tryUseKimesh();\n if (!kimesh) {\n return undefined;\n }\n return _resolveAlias(kimesh, alias);\n },\n };\n}\n\n/**\n * Resolve a path relative to project root\n */\nexport function resolvePathFromRoot(...paths: string[]): string {\n const kimesh = useKimesh();\n return resolve(kimesh.root, ...paths);\n}\n\n/**\n * Resolve a path relative to build directory\n */\nexport function resolvePathFromBuild(...paths: string[]): string {\n const kimesh = useKimesh();\n return resolve(kimesh.buildDir, ...paths);\n}\n","/**\n * @kimesh/kit - Runtime Plugin Kit Utilities\n *\n * Functions for registering runtime plugins during module setup.\n */\n\nimport { useKimesh } from \"../core/kimesh\";\nimport type { KimeshRuntimePluginEntry, AddRuntimePluginOptions } from \"../types\";\n\n/**\n * Extract plugin name from a file path\n */\nfunction extractPluginName(path: string): string {\n const match = path.match(/([^/\\\\]+?)(?:\\.[^.]+)?$/);\n if (!match) return \"anonymous\";\n\n const filename = match[1];\n const orderMatch = filename.match(/^\\d+\\.(.+)$/);\n return orderMatch ? orderMatch[1] : filename;\n}\n\n/**\n * Normalize a plugin path or entry to a standard entry format\n */\nfunction normalizeRuntimePlugin(plugin: string | KimeshRuntimePluginEntry): KimeshRuntimePluginEntry {\n if (typeof plugin === \"string\") {\n return { src: plugin, name: extractPluginName(plugin) };\n }\n return plugin;\n}\n\n/**\n * Add a runtime plugin to the Kimesh app\n *\n * @example\n * ```ts\n * addRuntimePlugin('~/plugins/analytics.ts')\n * addRuntimePlugin({ src: '~/plugins/analytics.ts', meta: { enforce: 'post' } })\n * ```\n */\nexport function addRuntimePlugin(\n plugin: string | KimeshRuntimePluginEntry,\n options: AddRuntimePluginOptions = {}\n): void {\n const kimesh = useKimesh();\n const normalized = normalizeRuntimePlugin(plugin);\n\n if (normalized.src) {\n kimesh._registries.runtimePlugins = kimesh._registries.runtimePlugins.filter(\n (p) => p.src !== normalized.src\n );\n }\n\n if (options.append) {\n kimesh._registries.runtimePlugins.push(normalized);\n } else {\n kimesh._registries.runtimePlugins.unshift(normalized);\n }\n}\n\n/**\n * Remove a runtime plugin by source path\n */\nexport function removeRuntimePlugin(src: string): void {\n const kimesh = useKimesh();\n kimesh._registries.runtimePlugins = kimesh._registries.runtimePlugins.filter((p) => p.src !== src);\n}\n\n/**\n * Check if a runtime plugin is registered\n */\nexport function hasRuntimePlugin(src: string): boolean {\n return useKimesh()._registries.runtimePlugins.some((p) => p.src === src);\n}\n\n/**\n * Get all registered runtime plugins\n */\nexport function getRuntimePlugins(): KimeshRuntimePluginEntry[] {\n return [...useKimesh()._registries.runtimePlugins];\n}\n","/**\n * @kimesh/kit - Plugin Scanner\n *\n * Scans the plugins directory for auto-discovered runtime plugins.\n */\n\nimport fg from \"fast-glob\";\nimport { basename, extname, join } from \"pathe\";\nimport { existsSync } from \"node:fs\";\n\n/**\n * Discovered plugin entry from filesystem scanning\n */\nexport interface DiscoveredPlugin {\n /** Plugin file path (absolute) */\n src: string;\n /** Plugin name derived from filename */\n name: string;\n /** Order derived from filename prefix (e.g., 01.auth.ts -> 1) */\n order?: number;\n}\n\n/**\n * Options for scanning plugins directory\n */\nexport interface ScanPluginsOptions {\n /** File extensions to scan (default: ['.ts', '.js', '.mjs']) */\n extensions?: string[];\n /** Pattern to ignore */\n ignore?: string[];\n}\n\nconst DEFAULT_EXTENSIONS = [\".ts\", \".js\", \".mjs\"];\nconst DEFAULT_IGNORE = [\"**/node_modules/**\", \"**/*.d.ts\", \"**/*.test.ts\", \"**/*.spec.ts\"];\n\n/**\n * Parse filename to extract order prefix and plugin name\n *\n * Filename conventions:\n * - `auth.ts` -> name: 'auth', order: undefined\n * - `01.auth.ts` -> name: 'auth', order: 1\n * - `10.analytics.ts` -> name: 'analytics', order: 10\n */\nfunction parsePluginFilename(filename: string): { name: string; order?: number } {\n const withoutExt = basename(filename, extname(filename));\n\n // Check for order prefix (e.g., \"01.auth\" or \"10.analytics\")\n const orderMatch = withoutExt.match(/^(\\d+)\\.(.+)$/);\n\n if (orderMatch) {\n return {\n name: orderMatch[2],\n order: parseInt(orderMatch[1], 10),\n };\n }\n\n return { name: withoutExt };\n}\n\n/**\n * Build glob pattern for plugin file scanning\n */\nfunction buildPluginGlobPattern(extensions: string[]): string {\n const normalizedExts = extensions.map((e) => (e.startsWith(\".\") ? e.slice(1) : e));\n\n if (normalizedExts.length === 1) {\n return `*.${normalizedExts[0]}`;\n }\n\n return `*.{${normalizedExts.join(\",\")}}`;\n}\n\n/**\n * Scan plugins directory for auto-discovered plugins\n *\n * @example\n * ```ts\n * const plugins = await scanPluginsDir('/app/src/plugins')\n * // Returns: [\n * // { src: '/app/src/plugins/01.auth.ts', name: 'auth', order: 1 },\n * // { src: '/app/src/plugins/02.analytics.ts', name: 'analytics', order: 2 },\n * // { src: '/app/src/plugins/utils.ts', name: 'utils', order: undefined },\n * // ]\n * ```\n */\nexport async function scanPluginsDir(\n pluginsDir: string,\n options: ScanPluginsOptions = {}\n): Promise<DiscoveredPlugin[]> {\n if (!existsSync(pluginsDir)) {\n return [];\n }\n\n const extensions = options.extensions ?? DEFAULT_EXTENSIONS;\n const ignore = options.ignore ?? DEFAULT_IGNORE;\n const pattern = buildPluginGlobPattern(extensions);\n\n const files = await fg(pattern, {\n cwd: pluginsDir,\n onlyFiles: true,\n ignore,\n absolute: false,\n });\n\n const plugins: DiscoveredPlugin[] = files.map((file: string) => {\n const { name, order } = parsePluginFilename(file);\n return {\n src: join(pluginsDir, file),\n name,\n order,\n };\n });\n\n // Sort by order (plugins with undefined order go last, then alphabetically by name)\n return plugins.sort((a, b) => {\n if (a.order === undefined && b.order === undefined) {\n return a.name.localeCompare(b.name);\n }\n if (a.order === undefined) return 1;\n if (b.order === undefined) return -1;\n return a.order - b.order;\n });\n}\n\n/**\n * Check if a directory has any plugin files\n */\nexport async function hasPlugins(\n pluginsDir: string,\n options: ScanPluginsOptions = {}\n): Promise<boolean> {\n const plugins = await scanPluginsDir(pluginsDir, options);\n return plugins.length > 0;\n}\n","/**\n * @kimesh/kit - Plugin Template Generator\n *\n * Generates the #build/plugins.mjs file that exports all runtime plugins.\n */\n\nimport { relative } from \"pathe\";\nimport type { Kimesh, KimeshRuntimePluginEntry } from \"../types\";\nimport type { DiscoveredPlugin } from \"./plugin-scanner\";\n\n/**\n * Options for generating plugins template\n */\nexport interface GeneratePluginsTemplateOptions {\n /** Auto-discovered plugins from filesystem */\n discoveredPlugins: DiscoveredPlugin[];\n /** Module-registered plugins */\n registeredPlugins: KimeshRuntimePluginEntry[];\n /** Build directory for relative path calculation */\n buildDir: string;\n}\n\n/**\n * Create a valid JavaScript variable name from plugin name\n */\nfunction toVariableName(name: string, index: number): string {\n const sanitized = name\n .replace(/[^a-zA-Z0-9_]/g, \"_\")\n .replace(/^(\\d)/, \"_$1\")\n .replace(/_+/g, \"_\");\n\n return `plugin_${sanitized}_${index}`;\n}\n\n/**\n * Generate the plugins.mjs template content\n *\n * @example Output:\n * ```js\n * // Auto-discovered plugins\n * import plugin_auth_0 from '../src/plugins/01.auth.ts'\n * import plugin_analytics_1 from '../src/plugins/02.analytics.ts'\n *\n * // Module-registered plugins\n * import plugin_icons_2 from '@kimesh/icons/runtime/plugin'\n *\n * export const plugins = [\n * plugin_auth_0,\n * plugin_analytics_1,\n * plugin_icons_2,\n * ]\n *\n * export default plugins\n * ```\n */\nexport function generatePluginsTemplate(options: GeneratePluginsTemplateOptions): string {\n const { discoveredPlugins, registeredPlugins, buildDir } = options;\n\n const imports: string[] = [];\n const pluginVars: string[] = [];\n let index = 0;\n\n // Process auto-discovered plugins first (they run before module plugins by default)\n if (discoveredPlugins.length > 0) {\n imports.push(\"// Auto-discovered plugins\");\n\n for (const plugin of discoveredPlugins) {\n const varName = toVariableName(plugin.name, index);\n const importPath = relative(buildDir, plugin.src).replace(/\\.ts$/, \"\");\n\n imports.push(`import ${varName} from '${importPath}'`);\n pluginVars.push(varName);\n index++;\n }\n }\n\n // Process module-registered plugins\n const pluginsWithSrc = registeredPlugins.filter((p) => p.src);\n if (pluginsWithSrc.length > 0) {\n if (imports.length > 0) {\n imports.push(\"\");\n }\n imports.push(\"// Module-registered plugins\");\n\n for (const plugin of pluginsWithSrc) {\n const varName = toVariableName(plugin.name || \"module\", index);\n // If src is an absolute path, make it relative to buildDir\n // If it's already a package path (starts with @), use as-is\n const importPath = plugin.src!.startsWith(\"@\") || plugin.src!.startsWith(\".\")\n ? plugin.src!\n : relative(buildDir, plugin.src!).replace(/\\.ts$/, \"\");\n\n imports.push(`import ${varName} from '${importPath}'`);\n pluginVars.push(varName);\n index++;\n }\n }\n\n // If no plugins, generate empty array\n if (pluginVars.length === 0) {\n return `/**\n * Kimesh Runtime Plugins\n * Auto-generated by @kimesh/kit - Do not edit manually\n */\n\nexport const plugins = []\n\nexport default plugins\n`;\n }\n\n const pluginsList = pluginVars.map((v) => ` ${v},`).join(\"\\n\");\n\n return `/**\n * Kimesh Runtime Plugins\n * Auto-generated by @kimesh/kit - Do not edit manually\n */\n\n${imports.join(\"\\n\")}\n\nexport const plugins = [\n${pluginsList}\n]\n\nexport default plugins\n`;\n}\n\n/**\n * Add plugins template to Kimesh registries\n */\nexport function addPluginsTemplate(\n kimesh: Kimesh,\n discoveredPlugins: DiscoveredPlugin[]\n): void {\n kimesh._registries.templates.push({\n filename: \"plugins.mjs\",\n getContents: ({ kimesh: km }) => {\n return generatePluginsTemplate({\n discoveredPlugins,\n registeredPlugins: km._registries.runtimePlugins,\n buildDir: km.buildDir,\n });\n },\n });\n}\n","/**\n * @kimesh/kit - Configuration Types\n *\n * Types for kimesh.config.ts with module augmentation support.\n */\n\nimport type {\n UserConfig as ViteUserConfig,\n PluginOption,\n} from \"vite\";\nimport type { KimeshModuleInput } from \"./module\";\nimport type { KimeshHooks } from \"./hooks\";\n\n// ============================================================================\n// Runtime Configuration\n// ============================================================================\n\n/**\n * Runtime configuration that can be overridden by environment variables.\n *\n * Values are resolved at build-time via Vite's `define` mechanism.\n * Use `KIMESH_*` environment variables to override values.\n *\n * @example\n * ```ts\n * // In kimesh.config.ts\n * runtimeConfig: {\n * apiBase: '/api', // KIMESH_API_BASE\n * debug: false, // KIMESH_DEBUG=true\n * features: {\n * darkMode: true, // KIMESH_FEATURES_DARK_MODE\n * }\n * }\n * ```\n */\nexport interface RuntimeConfig {\n [key: string]: string | number | boolean | null | undefined | RuntimeConfig;\n}\n\n// Re-export layer types for convenience\nexport type {\n KimeshLayerConfig,\n LayerRouteConfig,\n LayerComponentConfig,\n LayerComposableConfig,\n LayerAutoImportConfig,\n ResolvedLayer,\n} from \"@kimesh/layers\";\n\nexport type {\n AutoImportConfig,\n LayerAutoImportSource as ImportSource,\n ImportPreset,\n} from \"@kimesh/auto-import\";\n\n/**\n * Layer configuration in kimesh.config.ts\n */\nexport interface LayersConfig {\n /** Directories to scan for layers (default: ['layers']) */\n dirs?: string[];\n\n /** Layers to enable - 'all' | 'none' | string[] */\n enabled?: \"all\" | \"none\" | string[];\n\n /** Layers to exclude */\n excluded?: string[];\n}\n\n/**\n * Auto-import configuration in kimesh.config.ts\n */\nexport interface AutoImportOptions {\n /** Enable auto-imports (default: true) */\n enabled?: boolean;\n\n /** Directories to scan for composables */\n dirs?: string[];\n\n /** External import presets (vue, vue-router, etc.) */\n presets?: string[];\n\n /** Custom import sources */\n imports?: Array<{\n from: string;\n imports: string[];\n type?: boolean;\n }>;\n\n /** Generate .d.ts files (default: true) */\n dts?: boolean;\n}\n\n/**\n * Component auto-import configuration\n */\nexport interface ComponentsConfig {\n /** Enable component auto-imports (default: true) */\n enabled?: boolean;\n\n /** Directories to scan */\n dirs?: string[];\n\n /** Component prefix */\n prefix?: string;\n\n /** Global component registration */\n global?: boolean;\n}\n\n/**\n * Vite configuration options for Kimesh.\n */\nexport interface KimeshViteConfig\n extends Omit<ViteUserConfig, \"root\" | \"configFile\"> {\n /**\n * Additional Vite plugins.\n * These are merged AFTER Kimesh's internal plugins.\n */\n plugins?: PluginOption[];\n}\n\n// ============================================================================\n// Alias Configuration\n// ============================================================================\n\n/**\n * Default aliases provided by Kimesh.\n * Templates use placeholders: <srcDir>, <rootDir>\n * These are replaced at build time with actual paths.\n */\nexport const DEFAULT_ALIASES: Record<string, string> = {\n \"~\": \"<srcDir>\",\n \"@\": \"<srcDir>\",\n \"~~\": \"<rootDir>\",\n \"@@\": \"<rootDir>\",\n \"#build\": \"<rootDir>/.kimesh\",\n \"#app\": \"<rootDir>/.kimesh/app\",\n};\n\n// ============================================================================\n// Debug Configuration\n// ============================================================================\n\n/**\n * Debug mode configuration for detailed logging and diagnostics.\n */\nexport interface DebugConfig {\n /**\n * Log hook execution with timing information\n * @default false\n */\n hooks?: boolean;\n\n /**\n * Log module loading and setup\n * @default false\n */\n modules?: boolean;\n\n /**\n * Log layer resolution\n * @default false\n */\n layers?: boolean;\n\n /**\n * Log configuration loading and merging\n * @default false\n */\n config?: boolean;\n\n /**\n * Log Vite plugin operations\n * @default false\n */\n vite?: boolean;\n\n /**\n * Log route generation\n * @default false\n */\n routes?: boolean;\n\n /**\n * Log auto-import resolution\n * @default false\n */\n imports?: boolean;\n}\n\n// ============================================================================\n// Ignore Configuration\n// ============================================================================\n\n/**\n * Default file/folder ignore patterns\n */\nexport const DEFAULT_IGNORE_PATTERNS: string[] = [\n \"**/*.stories.{js,cts,mts,ts,jsx,tsx}\",\n \"**/*.{spec,test}.{js,cts,mts,ts,jsx,tsx}\",\n \"**/*.d.{cts,mts,ts}\",\n \"**/.{git,cache,data,output}\",\n \"**/*.sock\",\n \".kimesh\",\n \"**/node_modules\",\n \"**/-*.*\", // Files starting with - are ignored (default ignorePrefix)\n];\n\n/**\n * Options for file ignore patterns (passed to node-ignore)\n */\nexport interface IgnoreOptions {\n /**\n * Whether matching is case-insensitive\n * @default false\n */\n ignorecase?: boolean;\n}\n\n// ============================================================================\n// Route Rules Configuration\n// ============================================================================\n\n/**\n * Per-route configuration rules.\n * Keys are route patterns (supports wildcards).\n *\n * @example\n * ```ts\n * routeRules: {\n * '/admin/**': {\n * redirect: '/login',\n * },\n * '/api/**': {\n * headers: { 'Cache-Control': 'no-store' },\n * },\n * '/static/**': {\n * prerender: true,\n * },\n * }\n * ```\n */\nexport interface RouteRule {\n /**\n * Redirect to another path\n * Can be a string path or an object with statusCode\n */\n redirect?: string | { to: string; statusCode?: 301 | 302 | 307 | 308 };\n\n /**\n * Pre-render this route at build time (for static generation)\n * @default false\n */\n prerender?: boolean;\n\n /**\n * Cache configuration for this route\n */\n cache?: boolean | {\n /**\n * Cache max age in seconds\n */\n maxAge?: number;\n /**\n * Stale-while-revalidate in seconds\n */\n swr?: number;\n /**\n * Cache key modifiers\n */\n varies?: string[];\n };\n\n /**\n * Custom headers to set for this route\n */\n headers?: Record<string, string>;\n\n /**\n * CORS configuration for this route\n */\n cors?: boolean | {\n origin?: string | string[];\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n };\n\n /**\n * Custom meta data for the route\n */\n meta?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Phase 2: Directory Configuration (2.1)\n// ============================================================================\n\n/**\n * Directory configuration for Kimesh.\n * Customizes the default directory structure.\n */\nexport interface DirectoryConfig {\n /**\n * Directory for static assets\n * @default 'assets'\n */\n assets?: string;\n\n /**\n * Directory for runtime plugins\n * @default 'plugins'\n */\n plugins?: string;\n\n /**\n * Directory for public static files\n * @default 'public'\n */\n public?: string;\n\n /**\n * Directory for shared code across the app\n * @default 'shared'\n */\n shared?: string;\n}\n\n/**\n * Default directory configuration values\n */\nexport const DEFAULT_DIRECTORY_CONFIG: Required<DirectoryConfig> = {\n assets: \"assets\",\n plugins: \"plugins\",\n public: \"public\",\n shared: \"shared\",\n};\n\n// ============================================================================\n// Phase 2: Build Configuration (2.2)\n// ============================================================================\n\n/**\n * Bundle analyzer configuration options.\n */\nexport interface AnalyzeConfig {\n /**\n * Enable the bundle analyzer\n * @default false\n */\n enabled?: boolean;\n\n /**\n * Automatically open analyzer report in browser\n * @default false\n */\n openAnalyzer?: boolean;\n\n /**\n * Custom filename for the report\n * @default 'report.html'\n */\n reportFilename?: string;\n}\n\n/**\n * Build configuration for Kimesh.\n * Controls production build behavior.\n */\nexport interface BuildConfig {\n /**\n * Enable bundle analysis. Shows a visualization of bundle contents.\n *\n * @example\n * ```ts\n * build: {\n * analyze: true,\n * // or with options:\n * analyze: {\n * enabled: true,\n * openAnalyzer: false,\n * reportFilename: 'stats.html',\n * },\n * }\n * ```\n */\n analyze?: boolean | AnalyzeConfig;\n\n /**\n * Generate source maps for production builds.\n * - `true`: Generate separate source map files\n * - `'hidden'`: Generate source maps but don't reference them in bundles\n * - `'inline'`: Inline source maps into bundles\n * - `false`: No source maps\n *\n * @default false\n */\n sourcemap?: boolean | \"hidden\" | \"inline\";\n\n /**\n * Build target for esbuild/terser.\n * Specifies the JS language version to target.\n *\n * @default 'esnext'\n */\n target?: string;\n\n /**\n * Minification strategy for production builds.\n * - `true`: Use default minifier (esbuild)\n * - `'esbuild'`: Fast minification with esbuild\n * - `'terser'`: More aggressive minification with terser\n * - `false`: No minification\n *\n * @default 'esbuild'\n */\n minify?: boolean | \"esbuild\" | \"terser\";\n}\n\n/**\n * Default build configuration values\n */\nexport const DEFAULT_BUILD_CONFIG: BuildConfig = {\n analyze: false,\n sourcemap: false,\n target: \"esnext\",\n minify: \"esbuild\",\n};\n\n// ============================================================================\n// Phase 2: Enhanced Dev Server Configuration (2.3)\n// ============================================================================\n\n/**\n * HTTPS configuration options for dev server.\n */\nexport interface HttpsConfig {\n /**\n * Path to SSL key file\n */\n key?: string;\n\n /**\n * Path to SSL certificate file\n */\n cert?: string;\n}\n\n/**\n * Proxy target configuration.\n */\nexport interface ProxyOptions {\n /**\n * Target URL to proxy to\n */\n target: string;\n\n /**\n * Change the origin header to match target\n * @default true\n */\n changeOrigin?: boolean;\n\n /**\n * Rewrite the URL path\n */\n rewrite?: (path: string) => string;\n\n /**\n * Whether to proxy WebSocket connections\n * @default false\n */\n ws?: boolean;\n\n /**\n * SSL verification options\n */\n secure?: boolean;\n\n /**\n * Custom headers to send with the proxy request\n */\n headers?: Record<string, string>;\n}\n\n/**\n * CORS configuration options for dev server.\n */\nexport interface CorsOptions {\n /**\n * Allowed origins\n * @default '*'\n */\n origin?: string | string[] | boolean;\n\n /**\n * Allowed HTTP methods\n * @default ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE']\n */\n methods?: string[];\n\n /**\n * Allowed headers\n */\n allowedHeaders?: string[];\n\n /**\n * Headers exposed to the client\n */\n exposedHeaders?: string[];\n\n /**\n * Allow credentials (cookies, authorization headers)\n * @default false\n */\n credentials?: boolean;\n\n /**\n * Max age for preflight request caching (seconds)\n * @default 86400\n */\n maxAge?: number;\n}\n\n/**\n * Enhanced development server configuration.\n */\nexport interface DevServerConfig {\n /**\n * Port to listen on\n * @default 3000\n */\n port?: number;\n\n /**\n * Host to bind to.\n * - `'localhost'`: Only accessible from this machine\n * - `true` or `'0.0.0.0'`: Accessible from network\n *\n * @default 'localhost'\n */\n host?: string | boolean;\n\n /**\n * Automatically open browser when server starts\n * @default false\n */\n open?: boolean;\n\n /**\n * Enable HTTPS for dev server.\n * Set to `true` to use auto-generated certificates,\n * or provide custom key/cert paths.\n *\n * @example\n * ```ts\n * dev: {\n * https: true, // Auto-generate certificates\n * // or with custom certs:\n * https: {\n * key: './certs/localhost.key',\n * cert: './certs/localhost.crt',\n * },\n * }\n * ```\n */\n https?: boolean | HttpsConfig;\n\n /**\n * Configure proxy rules for dev server.\n * Useful for API proxying during development.\n *\n * @example\n * ```ts\n * dev: {\n * proxy: {\n * '/api': 'http://localhost:8080',\n * '/socket': {\n * target: 'ws://localhost:8081',\n * ws: true,\n * },\n * },\n * }\n * ```\n */\n proxy?: Record<string, string | ProxyOptions>;\n\n /**\n * Configure CORS for dev server.\n * Set to `true` to enable default CORS settings.\n *\n * @default false\n */\n cors?: boolean | CorsOptions;\n\n /**\n * Exit if the specified port is already in use\n * @default false\n */\n strictPort?: boolean;\n}\n\n/**\n * Default dev server configuration values\n */\nexport const DEFAULT_DEV_CONFIG: DevServerConfig = {\n port: 3000,\n host: \"localhost\",\n open: false,\n https: false,\n cors: false,\n strictPort: false,\n};\n\n// ============================================================================\n// Phase 2: TypeScript Configuration (2.4)\n// ============================================================================\n\n/**\n * TypeScript configuration options for Kimesh.\n */\nexport interface TypeScriptConfig {\n /**\n * Enable strict TypeScript mode.\n * When true, adds strict compiler options to generated tsconfig.\n *\n * @default true\n */\n strict?: boolean;\n\n /**\n * Enable type checking during development and/or build.\n * - `true`: Enable type checking during both dev and build\n * - `'build'`: Only type check during build\n * - `false`: Disable type checking\n *\n * @default false\n */\n typeCheck?: boolean | \"build\";\n\n /**\n * Additional tsconfig compiler options to merge with generated config.\n * These options will extend the auto-generated `.kimesh/tsconfig.json`.\n *\n * @example\n * ```ts\n * typescript: {\n * tsConfig: {\n * compilerOptions: {\n * experimentalDecorators: true,\n * emitDecoratorMetadata: true,\n * },\n * },\n * }\n * ```\n */\n tsConfig?: {\n compilerOptions?: Record<string, unknown>;\n include?: string[];\n exclude?: string[];\n references?: Array<{ path: string }>;\n };\n}\n\n/**\n * Default TypeScript configuration values\n */\nexport const DEFAULT_TYPESCRIPT_CONFIG: TypeScriptConfig = {\n strict: true,\n typeCheck: false,\n};\n\n// ============================================================================\n// Phase 2: Watch Configuration (2.5)\n// ============================================================================\n\n/**\n * Chokidar watch options (simplified subset).\n * @see https://github.com/paulmillr/chokidar#api\n */\nexport interface ChokidarOptions {\n /**\n * Indicates whether the process should continue as long as files are being watched\n * @default true\n */\n persistent?: boolean;\n\n /**\n * Patterns to ignore\n */\n ignored?: string | RegExp | string[] | ((path: string) => boolean);\n\n /**\n * Use polling instead of native events\n * @default false\n */\n usePolling?: boolean;\n\n /**\n * Polling interval in milliseconds (if usePolling is true)\n * @default 100\n */\n interval?: number;\n\n /**\n * Polling interval for binary files (if usePolling is true)\n * @default 300\n */\n binaryInterval?: number;\n\n /**\n * Delay in milliseconds for stabilized 'add' events\n * @default 2000\n */\n awaitWriteFinish?: boolean | {\n stabilityThreshold?: number;\n pollInterval?: number;\n };\n\n /**\n * Use file descriptor watching instead of stat polling\n * @default false\n */\n atomic?: boolean | number;\n\n /**\n * Watch depth limit (how many levels to traverse)\n * @default undefined (no limit)\n */\n depth?: number;\n}\n\n/**\n * Watchers configuration for advanced file watching control.\n */\nexport interface WatchersConfig {\n /**\n * Chokidar options for file watching\n */\n chokidar?: ChokidarOptions;\n\n /**\n * Webpack watch options (for future use if needed)\n */\n webpack?: {\n aggregateTimeout?: number;\n poll?: boolean | number;\n ignored?: string | RegExp | string[];\n };\n}\n\n// ============================================================================\n// Module Config Augmentation\n// ============================================================================\n\n/**\n * Module options interface - augmented by modules via declaration merging.\n *\n * Modules augment this interface to add their config keys.\n * The keys become available in defineKmConfig once the module is installed.\n *\n * @example\n * ```ts\n * // In @kimesh/tailwindcss/types.ts:\n * declare module '@kimesh/kit' {\n * interface KimeshModuleOptions {\n * tailwindcss?: KimeshTailwindConfig\n * }\n * }\n * ```\n */\nexport interface KimeshModuleOptions {\n // Modules augment this interface to add their config keys\n // Index signature allows dynamic access via configKey\n [key: string]: unknown;\n}\n\n// ============================================================================\n// Kimesh Configuration\n// ============================================================================\n\n/**\n * App-level configuration\n */\nexport interface AppConfig {\n /**\n * Global head configuration for the app\n * Automatically enables @kimesh/head plugin when configured\n */\n head?: {\n /** Page title */\n title?: string\n /** Title template (e.g., '%s | My App') */\n titleTemplate?: string | ((title: string) => string)\n /** Meta tags */\n meta?: Array<Record<string, string | undefined>>\n /** Link tags */\n link?: Array<Record<string, string | undefined>>\n /** Script tags */\n script?: Array<Record<string, string | boolean | undefined>>\n /** Style tags */\n style?: Array<Record<string, string | undefined>>\n /** HTML attributes */\n htmlAttrs?: Record<string, string | undefined>\n /** Body attributes */\n bodyAttrs?: Record<string, string | undefined>\n }\n}\n\n/**\n * Kimesh configuration (kimesh.config.ts)\n *\n * Module options are typed via the KimeshModuleOptions interface.\n * Modules can augment this interface to add typesafe config keys.\n */\nexport interface KimeshConfig extends KimeshModuleOptions {\n /** Application/layer name */\n name?: string;\n\n /** Base path for routes (for layers) */\n basePath?: string;\n\n // ===== Phase 1: Core Configuration Enhancement =====\n\n /**\n * Define additional aliases to access custom directories within your JavaScript and CSS.\n *\n * Aliases are automatically added to the generated TypeScript configurations\n * for full type support and path auto-complete.\n *\n * @default { \"~\": \"/<srcDir>\", \"@\": \"/<srcDir>\", \"~~\": \"/<rootDir>\", \"@@\": \"/<rootDir>\", \"#build\": \"/<rootDir>/.kimesh\" }\n *\n * @example\n * ```ts\n * import { fileURLToPath } from 'node:url'\n *\n * export default defineKmConfig({\n * alias: {\n * 'images': fileURLToPath(new URL('./assets/images', import.meta.url)),\n * 'style': fileURLToPath(new URL('./assets/style', import.meta.url)),\n * },\n * })\n * ```\n */\n alias?: Record<string, string>;\n\n /**\n * Set to `true` to enable debug mode.\n *\n * Prints out hook names and timings, logs hook arguments,\n * and provides detailed information about module loading and layer resolution.\n *\n * @default false\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * debug: true,\n * // or with specific options:\n * debug: {\n * hooks: true,\n * modules: true,\n * layers: true,\n * },\n * })\n * ```\n */\n debug?: boolean | DebugConfig;\n\n /**\n * Hooks are listeners to Kimesh events that are typically used in modules,\n * but are also available in `kimesh.config.ts`.\n *\n * Internally, hooks follow a naming pattern using colons (e.g., build:done).\n * For ease of configuration, you can structure them as an hierarchical object.\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * hooks: {\n * 'ready': (kimesh) => {\n * console.log('Kimesh is ready!')\n * },\n * 'build:done': (kimesh) => {\n * console.log('Build completed!')\n * },\n * },\n * })\n * ```\n */\n hooks?: Partial<KimeshHooks>;\n\n /**\n * Files matching glob patterns specified inside the `ignore` array\n * will be ignored in building.\n *\n * More customizable than `ignorePrefix`: allows complex patterns.\n *\n * @default [\"**\\/*.stories.{js,cts,mts,ts,jsx,tsx}\", \"**\\/*.{spec,test}.{js,cts,mts,ts,jsx,tsx}\", \"**\\/*.d.{cts,mts,ts}\", \".kimesh\"]\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * ignore: [\n * '**\\/__tests__/**',\n * '**\\/*.mock.ts',\n * 'legacy/**',\n * ],\n * })\n * ```\n */\n ignore?: string[];\n\n /**\n * Any file in routes, layouts, middleware directories will be ignored\n * during the build process if its filename starts with the prefix specified.\n *\n * @default \"-\"\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * ignorePrefix: '_', // Ignore files starting with underscore\n * })\n * ```\n */\n ignorePrefix?: string;\n\n /**\n * Pass options directly to `node-ignore` (which is used by Kimesh to ignore files).\n *\n * @see https://github.com/kaelzhang/node-ignore\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * ignoreOptions: {\n * ignorecase: false, // Case-sensitive matching\n * },\n * })\n * ```\n */\n ignoreOptions?: IgnoreOptions;\n\n /**\n * Global route rules applied to matching routes.\n *\n * Keys are route patterns (supports wildcards with **).\n * Useful for redirects, caching, and per-route configuration.\n *\n * @experimental This feature's API may change in the future.\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * routeRules: {\n * '/admin/**': {\n * redirect: '/login',\n * },\n * '/api/**': {\n * headers: { 'Cache-Control': 'no-store' },\n * cors: true,\n * },\n * '/blog/**': {\n * prerender: true,\n * },\n * },\n * })\n * ```\n */\n routeRules?: Record<string, RouteRule>;\n\n // ===== Phase 2: Directory Configuration (2.1) =====\n\n /**\n * Source directory for your application code.\n * All relative paths are resolved from this directory.\n *\n * @default 'src'\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * srcDir: 'app', // Use 'app' instead of 'src'\n * })\n * ```\n */\n srcDir?: string;\n\n /**\n * Build output directory for Kimesh's generated files.\n * Contains TypeScript configs, generated routes, and other build artifacts.\n *\n * @default '.kimesh'\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * buildDir: '.output', // Use '.output' instead of '.kimesh'\n * })\n * ```\n */\n buildDir?: string;\n\n /**\n * Directory configuration for customizing the project structure.\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * dir: {\n * assets: 'static/assets',\n * plugins: 'app/plugins',\n * public: 'public',\n * shared: 'lib/shared',\n * },\n * })\n * ```\n */\n dir?: DirectoryConfig;\n\n // ===== Phase 2: Build Configuration (2.2) =====\n\n /**\n * Build configuration for production builds.\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * build: {\n * analyze: true,\n * sourcemap: 'hidden',\n * target: 'es2022',\n * minify: 'esbuild',\n * },\n * })\n * ```\n */\n build?: BuildConfig;\n\n // ===== Phase 2: Enhanced Dev Server Configuration (2.3) =====\n\n /**\n * Enhanced development server configuration.\n * Supports HTTPS, proxy, CORS, and more.\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * dev: {\n * port: 3000,\n * host: 'localhost',\n * open: true,\n * https: true,\n * proxy: {\n * '/api': 'http://localhost:8080',\n * },\n * cors: true,\n * strictPort: false,\n * },\n * })\n * ```\n */\n dev?: DevServerConfig;\n\n // ===== Phase 2: TypeScript Configuration (2.4) =====\n\n /**\n * TypeScript configuration options.\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * typescript: {\n * strict: true,\n * typeCheck: 'build',\n * tsConfig: {\n * compilerOptions: {\n * experimentalDecorators: true,\n * },\n * },\n * },\n * })\n * ```\n */\n typescript?: TypeScriptConfig;\n\n // ===== Phase 2: Watch Configuration (2.5) =====\n\n /**\n * Additional file patterns to watch during development.\n * Uses glob patterns relative to the project root.\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * watch: [\n * './custom-dir/**\\/*',\n * './config/**\\/*.json',\n * ],\n * })\n * ```\n */\n watch?: string[];\n\n /**\n * Advanced watcher configuration.\n * Customize chokidar options for file watching.\n *\n * @example\n * ```ts\n * export default defineKmConfig({\n * watchers: {\n * chokidar: {\n * usePolling: true,\n * interval: 1000,\n * ignored: ['**\\/.git/**'],\n * },\n * },\n * })\n * ```\n */\n watchers?: WatchersConfig;\n\n // ===== Core Configuration =====\n\n /** Router configuration */\n router?: {\n /** Routes directory relative to srcDir (default: 'routes') */\n routesDir?: string;\n /** Import mode for route components */\n importMode?: \"async\" | \"sync\";\n };\n\n /** Extend from other layers (paths or package names) */\n extends?: Array<string | { name: string; path?: string }>;\n\n /** Layers configuration */\n layers?: LayersConfig;\n\n /**\n * Kimesh modules to load\n */\n modules?: KimeshModuleInput[];\n\n /**\n * App-level configuration\n * Includes head management and other app-wide settings\n */\n app?: AppConfig;\n\n /** Routes configuration (for layers) */\n routes?: {\n /** Base path for all routes */\n basePath?: string;\n /** Routes folder name */\n folder?: string;\n };\n\n /** Auto-import configuration */\n autoImport?: AutoImportOptions;\n\n /** Component auto-import configuration */\n components?: ComponentsConfig;\n\n /** Composables configuration (for layers) */\n composables?: {\n /** Directories to scan */\n dirs?: string[];\n };\n\n /** CSS files to include */\n css?: string[];\n\n /**\n * Vite configuration options.\n */\n vite?: KimeshViteConfig;\n\n /**\n * Runtime configuration with environment variable override support.\n *\n * In Phase 1, all config is client-side (build-time injection).\n * Use KIMESH_* environment variables to override values.\n *\n * @example\n * ```ts\n * runtimeConfig: {\n * apiBase: '/api', // KIMESH_API_BASE\n * debug: false, // KIMESH_DEBUG=true\n * features: {\n * darkMode: true, // KIMESH_FEATURES_DARK_MODE\n * }\n * }\n * ```\n */\n runtimeConfig?: RuntimeConfig;\n}\n\n/**\n * Define Kimesh configuration with type inference.\n */\nexport function defineKmConfig(config: KimeshConfig): KimeshConfig {\n return config;\n}\n","/**\n * @kimesh/kit - Alias Resolution Utilities\n *\n * Utilities for resolving and processing path aliases.\n */\n\nimport { resolve, isAbsolute } from \"node:path\";\nimport type { KimeshConfig, DebugConfig } from \"../types/config\";\nimport { DEFAULT_ALIASES } from \"../types/config\";\n\n/**\n * Resolve an alias path template to an actual path\n *\n * @param template - Alias path template (e.g., \"/<srcDir>/components\")\n * @param srcDir - Source directory path\n * @param rootDir - Root directory path\n * @returns Resolved absolute path\n */\nexport function resolveAliasPath(\n template: string,\n srcDir: string,\n rootDir: string\n): string {\n return template\n .replace(/<srcDir>/g, srcDir)\n .replace(/<rootDir>/g, rootDir);\n}\n\n/**\n * Build resolved aliases from config\n *\n * @param config - Kimesh configuration\n * @param srcDir - Source directory (default: rootDir/src)\n * @param rootDir - Root directory\n * @returns Resolved alias map\n */\nexport function buildAliases(\n config: KimeshConfig,\n srcDir: string,\n rootDir: string\n): Record<string, string> {\n const aliases: Record<string, string> = {};\n\n // Apply default aliases\n for (const [alias, template] of Object.entries(DEFAULT_ALIASES)) {\n aliases[alias] = resolveAliasPath(template, srcDir, rootDir);\n }\n\n // Apply user-defined aliases\n if (config.alias) {\n for (const [alias, path] of Object.entries(config.alias)) {\n // If the path is already absolute, use it directly\n // Otherwise, resolve it relative to rootDir\n aliases[alias] = isAbsolute(path) ? path : resolve(rootDir, path);\n }\n }\n\n return aliases;\n}\n\n/**\n * Convert aliases to Vite's resolve.alias format\n *\n * @param aliases - Alias map\n * @returns Array of Vite alias entries\n */\nexport function toViteAliases(\n aliases: Record<string, string>\n): Array<{ find: string | RegExp; replacement: string }> {\n return Object.entries(aliases).map(([find, replacement]) => ({\n find,\n replacement,\n }));\n}\n\n/**\n * Generate TypeScript path mappings from aliases\n *\n * @param aliases - Alias map\n * @param rootDir - Root directory for relative paths\n * @returns TypeScript compilerOptions.paths object\n */\nexport function toTsConfigPaths(\n aliases: Record<string, string>,\n rootDir: string\n): Record<string, string[]> {\n const paths: Record<string, string[]> = {};\n\n for (const [alias, absolutePath] of Object.entries(aliases)) {\n // Make path relative to rootDir for tsconfig\n const relativePath = absolutePath.startsWith(rootDir)\n ? \"./\" + absolutePath.slice(rootDir.length + 1)\n : absolutePath;\n\n // Add both exact and wildcard mappings\n paths[alias] = [relativePath];\n paths[`${alias}/*`] = [`${relativePath}/*`];\n }\n\n return paths;\n}\n\n/**\n * Normalize debug configuration to DebugConfig object\n *\n * @param debug - Debug config from KimeshConfig (boolean or DebugConfig)\n * @returns Normalized DebugConfig\n */\nexport function normalizeDebugConfig(\n debug: boolean | DebugConfig | undefined\n): DebugConfig {\n if (!debug) {\n return {};\n }\n\n if (debug === true) {\n // Enable all debug options\n return {\n hooks: true,\n modules: true,\n layers: true,\n config: true,\n vite: true,\n routes: true,\n imports: true,\n };\n }\n\n return debug;\n}\n\n/**\n * Check if a specific debug option is enabled\n *\n * @param debug - Debug config\n * @param option - Debug option to check\n * @returns Whether the option is enabled\n */\nexport function isDebugEnabled(\n debug: boolean | DebugConfig | undefined,\n option: keyof DebugConfig\n): boolean {\n if (!debug) return false;\n if (debug === true) return true;\n return !!debug[option];\n}\n","/**\n * @kimesh/kit - Ignore Patterns Utilities\n *\n * Utilities for handling file ignore patterns using node-ignore.\n */\n\nimport ignore, { type Ignore } from \"ignore\";\nimport type { KimeshConfig, IgnoreOptions } from \"../types/config\";\nimport { DEFAULT_IGNORE_PATTERNS } from \"../types/config\";\n\n/**\n * Create an ignore instance with default and custom patterns\n *\n * @param config - Kimesh configuration\n * @returns Configured ignore instance\n */\nexport function createIgnoreFilter(config: KimeshConfig): Ignore {\n const ig = ignore(config.ignoreOptions);\n\n // Add default patterns\n ig.add(DEFAULT_IGNORE_PATTERNS);\n\n // Add user-defined patterns\n if (config.ignore) {\n ig.add(config.ignore);\n }\n\n // Add prefix-based pattern\n const prefix = config.ignorePrefix ?? \"-\";\n if (prefix) {\n ig.add(`**/${prefix}*`);\n }\n\n return ig;\n}\n\n/**\n * Check if a file should be ignored\n *\n * @param ig - Ignore instance\n * @param filePath - Relative file path to check\n * @returns Whether the file should be ignored\n */\nexport function shouldIgnore(ig: Ignore, filePath: string): boolean {\n // Normalize path separators\n const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n return ig.ignores(normalizedPath);\n}\n\n/**\n * Filter an array of paths, removing ignored ones\n *\n * @param ig - Ignore instance\n * @param paths - Array of relative paths\n * @returns Array of non-ignored paths\n */\nexport function filterIgnored(ig: Ignore, paths: string[]): string[] {\n return paths.filter((p) => !shouldIgnore(ig, p));\n}\n\n/**\n * Create a simple matcher function for ignore patterns\n *\n * @param config - Kimesh configuration\n * @returns A function that returns true if a path should be ignored\n */\nexport function createIgnoreMatcher(\n config: KimeshConfig\n): (filePath: string) => boolean {\n const ig = createIgnoreFilter(config);\n return (filePath: string) => shouldIgnore(ig, filePath);\n}\n\n/**\n * Get all active ignore patterns from config\n *\n * @param config - Kimesh configuration\n * @returns Array of all ignore patterns\n */\nexport function getIgnorePatterns(config: KimeshConfig): string[] {\n const patterns: string[] = [...DEFAULT_IGNORE_PATTERNS];\n\n if (config.ignore) {\n patterns.push(...config.ignore);\n }\n\n const prefix = config.ignorePrefix ?? \"-\";\n if (prefix) {\n patterns.push(`**/${prefix}*`);\n }\n\n return patterns;\n}\n","/**\n * @kimesh/kit - Route Rules Utilities\n *\n * Utilities for handling per-route configuration rules.\n */\n\nimport type { RouteRule, KimeshConfig } from \"../types/config\";\n\n/**\n * Match a route path against a pattern\n *\n * Supports:\n * - Exact matches: `/about`\n * - Wildcards: `/admin/**` (matches `/admin/users`, `/admin/users/123`)\n * - Single segment wildcards: `/users/*` (matches `/users/123` but not `/users/123/posts`)\n *\n * @param pattern - Route pattern (e.g., `/admin/**`)\n * @param routePath - Actual route path (e.g., `/admin/users`)\n * @returns Whether the pattern matches the path\n */\nexport function matchRoutePattern(pattern: string, routePath: string): boolean {\n // Normalize paths\n const normalizedPattern = pattern.replace(/\\/+/g, \"/\").replace(/\\/$/, \"\");\n const normalizedPath = routePath.replace(/\\/+/g, \"/\").replace(/\\/$/, \"\");\n\n // Convert pattern to regex\n // First, replace wildcards with placeholders to avoid escaping\n let regexPattern = normalizedPattern\n // Replace /** with placeholder (matches base path and any sub-path)\n .replace(/\\/\\*\\*/g, \"___DOUBLE_WILDCARD___\")\n // Replace single * with placeholder\n .replace(/\\*/g, \"___SINGLE_WILDCARD___\")\n // Escape special regex characters\n .replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n // Restore double wildcard as optional match-all\n .replace(/___DOUBLE_WILDCARD___/g, \"(?:/.*)?\")\n // Restore single wildcard as single segment match\n .replace(/___SINGLE_WILDCARD___/g, \"[^/]+\");\n\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(normalizedPath);\n}\n\n/**\n * Find matching route rules for a given path\n *\n * @param routeRules - Route rules configuration\n * @param routePath - Route path to match\n * @returns Array of matching rules in order of specificity (most specific first)\n */\nexport function findMatchingRules(\n routeRules: Record<string, RouteRule>,\n routePath: string\n): Array<{ pattern: string; rule: RouteRule }> {\n const matches: Array<{ pattern: string; rule: RouteRule; specificity: number }> = [];\n\n for (const [pattern, rule] of Object.entries(routeRules)) {\n if (matchRoutePattern(pattern, routePath)) {\n // Calculate specificity (more specific = higher)\n // Exact matches have highest specificity\n // ** has lowest specificity\n let specificity = 0;\n \n if (!pattern.includes(\"*\")) {\n specificity = 1000; // Exact match\n } else if (pattern.includes(\"**\")) {\n specificity = pattern.split(\"/\").length; // Base on depth\n } else {\n specificity = pattern.split(\"/\").length * 10; // Single wildcard is more specific\n }\n\n matches.push({ pattern, rule, specificity });\n }\n }\n\n // Sort by specificity (highest first)\n matches.sort((a, b) => b.specificity - a.specificity);\n\n return matches.map(({ pattern, rule }) => ({ pattern, rule }));\n}\n\n/**\n * Merge multiple route rules into a single rule\n *\n * Later rules override earlier rules for same properties.\n *\n * @param rules - Array of route rules to merge\n * @returns Merged route rule\n */\nexport function mergeRouteRules(rules: RouteRule[]): RouteRule {\n const merged: RouteRule = {};\n\n for (const rule of rules) {\n // Handle redirect (last one wins)\n if (rule.redirect !== undefined) {\n merged.redirect = rule.redirect;\n }\n\n // Handle prerender\n if (rule.prerender !== undefined) {\n merged.prerender = rule.prerender;\n }\n\n // Handle cache\n if (rule.cache !== undefined) {\n if (typeof rule.cache === \"boolean\") {\n merged.cache = rule.cache;\n } else if (typeof merged.cache === \"object\" && typeof rule.cache === \"object\") {\n merged.cache = { ...merged.cache, ...rule.cache };\n } else {\n merged.cache = rule.cache;\n }\n }\n\n // Handle headers (merge)\n if (rule.headers) {\n merged.headers = { ...merged.headers, ...rule.headers };\n }\n\n // Handle CORS\n if (rule.cors !== undefined) {\n if (typeof rule.cors === \"boolean\") {\n merged.cors = rule.cors;\n } else if (typeof merged.cors === \"object\" && typeof rule.cors === \"object\") {\n merged.cors = { ...merged.cors, ...rule.cors };\n } else {\n merged.cors = rule.cors;\n }\n }\n\n // Handle meta (merge)\n if (rule.meta) {\n merged.meta = { ...merged.meta, ...rule.meta };\n }\n }\n\n return merged;\n}\n\n/**\n * Get the effective route rule for a path\n *\n * @param config - Kimesh configuration\n * @param routePath - Route path to get rule for\n * @returns Merged route rule or undefined if no rules match\n */\nexport function getRouteRule(\n config: KimeshConfig,\n routePath: string\n): RouteRule | undefined {\n if (!config.routeRules) {\n return undefined;\n }\n\n const matches = findMatchingRules(config.routeRules, routePath);\n \n if (matches.length === 0) {\n return undefined;\n }\n\n // Merge rules in reverse order (least specific first, most specific last)\n const rules = matches.reverse().map((m) => m.rule);\n return mergeRouteRules(rules);\n}\n\n/**\n * Check if a route should be redirected\n *\n * @param rule - Route rule\n * @returns Redirect information or undefined\n */\nexport function getRedirectInfo(rule: RouteRule): {\n to: string;\n statusCode: 301 | 302 | 307 | 308;\n} | undefined {\n if (!rule.redirect) {\n return undefined;\n }\n\n if (typeof rule.redirect === \"string\") {\n return { to: rule.redirect, statusCode: 302 };\n }\n\n return {\n to: rule.redirect.to,\n statusCode: rule.redirect.statusCode ?? 302,\n };\n}\n\n/**\n * Generate route rules manifest for build output\n *\n * @param config - Kimesh configuration\n * @returns Route rules manifest object\n */\nexport function generateRouteRulesManifest(\n config: KimeshConfig\n): Record<string, RouteRule> {\n return config.routeRules ?? {};\n}\n","/**\n * @kimesh/kit - Debug Utilities\n *\n * Utilities for debug mode logging and diagnostics.\n */\n\nimport consola from \"consola\";\nimport pc from \"picocolors\";\nimport type { DebugConfig, KimeshConfig } from \"../types/config\";\n\n// Cache for debug config to avoid repeated lookups\nlet cachedDebugConfig: DebugConfig | null = null;\n\n/**\n * Set the debug configuration\n *\n * @param config - Kimesh configuration\n */\nexport function setDebugConfig(config: KimeshConfig): void {\n if (!config.debug) {\n cachedDebugConfig = null;\n return;\n }\n\n if (config.debug === true) {\n cachedDebugConfig = {\n hooks: true,\n modules: true,\n layers: true,\n config: true,\n vite: true,\n routes: true,\n imports: true,\n };\n } else {\n cachedDebugConfig = config.debug;\n }\n}\n\n/**\n * Check if debug mode is enabled for a specific category\n *\n * @param category - Debug category to check\n * @returns Whether debug is enabled for this category\n */\nexport function isDebug(category?: keyof DebugConfig): boolean {\n if (!cachedDebugConfig) return false;\n if (!category) return true;\n return !!cachedDebugConfig[category];\n}\n\n/**\n * Debug logger that only logs when debug mode is enabled\n */\nexport const debug = {\n /**\n * Log debug message for hooks\n */\n hook(hookName: string, ...args: unknown[]): void {\n if (!isDebug(\"hooks\")) return;\n consola.debug(\n pc.gray(`[hook] ${pc.cyan(hookName)}`),\n ...args\n );\n },\n\n /**\n * Log debug message for modules\n */\n module(moduleName: string, message: string, ...args: unknown[]): void {\n if (!isDebug(\"modules\")) return;\n consola.debug(\n pc.gray(`[module] ${pc.magenta(moduleName)}: ${message}`),\n ...args\n );\n },\n\n /**\n * Log debug message for layers\n */\n layer(layerName: string, message: string, ...args: unknown[]): void {\n if (!isDebug(\"layers\")) return;\n consola.debug(\n pc.gray(`[layer] ${pc.yellow(layerName)}: ${message}`),\n ...args\n );\n },\n\n /**\n * Log debug message for config\n */\n config(message: string, ...args: unknown[]): void {\n if (!isDebug(\"config\")) return;\n consola.debug(\n pc.gray(`[config] ${message}`),\n ...args\n );\n },\n\n /**\n * Log debug message for Vite\n */\n vite(message: string, ...args: unknown[]): void {\n if (!isDebug(\"vite\")) return;\n consola.debug(\n pc.gray(`[vite] ${message}`),\n ...args\n );\n },\n\n /**\n * Log debug message for routes\n */\n route(routePath: string, message: string, ...args: unknown[]): void {\n if (!isDebug(\"routes\")) return;\n consola.debug(\n pc.gray(`[route] ${pc.green(routePath)}: ${message}`),\n ...args\n );\n },\n\n /**\n * Log debug message for imports\n */\n import(name: string, message: string, ...args: unknown[]): void {\n if (!isDebug(\"imports\")) return;\n consola.debug(\n pc.gray(`[import] ${pc.blue(name)}: ${message}`),\n ...args\n );\n },\n\n /**\n * Log timing information\n */\n timing(label: string, startTime: number): void {\n if (!cachedDebugConfig) return;\n const duration = performance.now() - startTime;\n consola.debug(\n pc.gray(`[timing] ${label}: ${pc.bold(duration.toFixed(2))}ms`)\n );\n },\n\n /**\n * Create a timing tracker\n */\n startTiming(label: string): () => void {\n const start = performance.now();\n return () => debug.timing(label, start);\n },\n};\n\n/**\n * Create a scoped debug logger for a specific module\n *\n * @param scope - Module or component name\n * @returns Scoped debug logger\n */\nexport function createDebugLogger(scope: string) {\n return {\n log(message: string, ...args: unknown[]): void {\n if (!cachedDebugConfig) return;\n consola.debug(pc.gray(`[${scope}] ${message}`), ...args);\n },\n\n info(message: string, ...args: unknown[]): void {\n if (!cachedDebugConfig) return;\n consola.info(pc.gray(`[${scope}] ${message}`), ...args);\n },\n\n warn(message: string, ...args: unknown[]): void {\n if (!cachedDebugConfig) return;\n consola.warn(`[${scope}] ${message}`, ...args);\n },\n\n error(message: string, ...args: unknown[]): void {\n // Errors are always logged\n consola.error(`[${scope}] ${message}`, ...args);\n },\n\n timing: debug.startTiming,\n };\n}\n\n/**\n * Log a debug table (formatted key-value pairs)\n *\n * @param title - Table title\n * @param data - Data to display\n */\nexport function debugTable(\n title: string,\n data: Record<string, unknown>\n): void {\n if (!cachedDebugConfig) return;\n\n consola.debug(pc.bold(pc.cyan(`\\n${title}:`)));\n \n const maxKeyLength = Math.max(...Object.keys(data).map((k) => k.length));\n \n for (const [key, value] of Object.entries(data)) {\n const paddedKey = key.padEnd(maxKeyLength);\n const formattedValue = typeof value === \"object\"\n ? JSON.stringify(value, null, 2)\n : String(value);\n \n consola.debug(pc.gray(` ${paddedKey} : ${formattedValue}`));\n }\n}\n","/**\n * @kimesh/kit - TypeScript Configuration Generator\n *\n * Auto-generates TypeScript configurations with alias path mappings.\n * Similar to Nuxt's .nuxt/tsconfig.json generation.\n */\n\nimport { writeFileSync, mkdirSync } from \"node:fs\";\nimport { join, relative } from \"pathe\";\nimport { toTsConfigPaths } from \"./alias-utils\";\n\n/**\n * Options for generating tsconfig\n */\nexport interface GenerateTsConfigOptions {\n /** Root directory of the project */\n rootDir: string;\n /** Source directory (usually rootDir/src) */\n srcDir: string;\n /** Build directory (.kimesh) */\n buildDir: string;\n /** Resolved aliases from buildAliases */\n aliases: Record<string, string>;\n /** Layer aliases */\n layerAliases?: Record<string, string>;\n /** Module-provided aliases */\n moduleAliases?: Record<string, string>;\n /** Internal Kimesh aliases (#kimesh/*) */\n internalAliases?: Record<string, string>;\n /** Include patterns */\n include?: string[];\n /** Exclude patterns */\n exclude?: string[];\n}\n\n/**\n * Generate tsconfig.json content for .kimesh directory\n *\n * This generates a tsconfig that can be extended by the project's tsconfig.json,\n * providing automatic TypeScript support for all aliases.\n *\n * @param options - Generation options\n * @returns TSConfig JSON object\n */\nexport function generateTsConfig(options: GenerateTsConfigOptions): object {\n const {\n rootDir,\n srcDir,\n buildDir,\n aliases,\n layerAliases = {},\n moduleAliases = {},\n internalAliases = {},\n include = [\"../src/**/*\", \"./**/*\"],\n exclude = [\"../node_modules\"],\n } = options;\n\n // Merge all aliases\n const allAliases: Record<string, string> = {\n ...aliases,\n ...layerAliases,\n ...moduleAliases,\n ...internalAliases,\n };\n\n // Convert to TypeScript paths format\n // Paths should be relative to the buildDir where tsconfig will be placed\n const paths: Record<string, string[]> = {};\n\n for (const [alias, absolutePath] of Object.entries(allAliases)) {\n // Calculate relative path from buildDir to the target\n const relativePath = relative(buildDir, absolutePath);\n const normalizedPath = relativePath.startsWith(\"..\") ? relativePath : \"./\" + relativePath;\n\n // Add both exact and wildcard mappings\n paths[alias] = [normalizedPath];\n paths[`${alias}/*`] = [`${normalizedPath}/*`];\n }\n\n return {\n compilerOptions: {\n target: \"ESNext\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n strict: true,\n jsx: \"preserve\",\n sourceMap: true,\n resolveJsonModule: true,\n esModuleInterop: true,\n lib: [\"ESNext\", \"DOM\"],\n skipLibCheck: true,\n noEmit: true,\n // Base URL is relative to this tsconfig location\n baseUrl: \".\",\n paths,\n },\n include,\n exclude,\n };\n}\n\n/**\n * Write generated tsconfig.json to .kimesh directory\n *\n * @param options - Generation options\n */\nexport function writeTsConfig(options: GenerateTsConfigOptions): void {\n const { buildDir } = options;\n\n // Ensure build directory exists\n mkdirSync(buildDir, { recursive: true });\n\n // Generate config\n const tsconfig = generateTsConfig(options);\n\n // Write to .kimesh/tsconfig.json\n const tsconfigPath = join(buildDir, \"tsconfig.json\");\n writeFileSync(\n tsconfigPath,\n JSON.stringify(tsconfig, null, 2),\n \"utf-8\"\n );\n}\n\n/**\n * Generate the recommended project tsconfig.json that extends the generated one\n *\n * @param buildDir - Build directory name (e.g., \".kimesh\")\n * @returns TSConfig content for project root\n */\nexport function generateProjectTsConfig(buildDir: string = \".kimesh\"): object {\n return {\n extends: `./${buildDir}/tsconfig.json`,\n compilerOptions: {\n // Project can override compiler options here\n },\n include: [\"src/**/*\", `${buildDir}/**/*`],\n exclude: [\"node_modules\"],\n };\n}\n\n/**\n * Generate the content for project tsconfig.json as a string with comments\n */\nexport function generateProjectTsConfigContent(buildDir: string = \".kimesh\"): string {\n return `{\n // This file extends the auto-generated TypeScript configuration.\n // Alias paths are automatically configured from your kimesh.config.ts.\n \"extends\": \"./${buildDir}/tsconfig.json\",\n \"compilerOptions\": {\n // You can override compiler options here\n },\n \"include\": [\n \"src/**/*\",\n \"${buildDir}/**/*\",\n \"kimesh.config.ts\"\n ],\n \"exclude\": [\n \"node_modules\"\n ]\n}\n`;\n}\n","/**\n * @kimesh/kit - Phase 2 Configuration Utilities\n *\n * Utility functions for Phase 2 configuration options:\n * - Directory resolution (2.1)\n * - Build config defaults (2.2)\n * - Dev server config merging (2.3)\n * - TypeScript config extension (2.4)\n * - Watch pattern handling (2.5)\n */\n\nimport { resolve, join, relative, isAbsolute } from \"pathe\";\nimport { defu } from \"defu\";\nimport type {\n KimeshConfig,\n DirectoryConfig,\n BuildConfig,\n DevServerConfig,\n TypeScriptConfig,\n ChokidarOptions,\n WatchersConfig,\n AnalyzeConfig,\n HttpsConfig,\n ProxyOptions,\n CorsOptions,\n DEFAULT_DIRECTORY_CONFIG,\n DEFAULT_BUILD_CONFIG,\n DEFAULT_DEV_CONFIG,\n DEFAULT_TYPESCRIPT_CONFIG,\n} from \"../types/config\";\n\n// Re-export defaults for convenience\nexport {\n DEFAULT_DIRECTORY_CONFIG,\n DEFAULT_BUILD_CONFIG,\n DEFAULT_DEV_CONFIG,\n DEFAULT_TYPESCRIPT_CONFIG,\n} from \"../types/config\";\n\n// ============================================================================\n// Phase 2.1: Directory Resolution Utilities\n// ============================================================================\n\n/**\n * Default source directory\n */\nexport const DEFAULT_SRC_DIR = \"src\";\n\n/**\n * Default build directory\n */\nexport const DEFAULT_BUILD_DIR = \".kimesh\";\n\n/**\n * Resolved directory paths after applying configuration\n */\nexport interface ResolvedDirectories {\n /** Root directory of the project */\n rootDir: string;\n /** Source directory (absolute path) */\n srcDir: string;\n /** Build directory (absolute path) */\n buildDir: string;\n /** Assets directory (absolute path, relative to srcDir) */\n assetsDir: string;\n /** Plugins directory (absolute path, relative to srcDir) */\n pluginsDir: string;\n /** Public directory (absolute path, relative to rootDir) */\n publicDir: string;\n /** Shared directory (absolute path, relative to srcDir) */\n sharedDir: string;\n}\n\n/**\n * Resolve all directory paths from configuration.\n *\n * @param config - Kimesh configuration\n * @param rootDir - Project root directory\n * @returns Resolved absolute paths for all directories\n *\n * @example\n * ```ts\n * const dirs = resolveDirectories(config, process.cwd())\n * console.log(dirs.srcDir) // '/path/to/project/src'\n * console.log(dirs.buildDir) // '/path/to/project/.kimesh'\n * ```\n */\nexport function resolveDirectories(\n config: KimeshConfig,\n rootDir: string\n): ResolvedDirectories {\n // Resolve srcDir (relative to rootDir)\n const srcDirName = config.srcDir ?? DEFAULT_SRC_DIR;\n const srcDir = isAbsolute(srcDirName)\n ? srcDirName\n : resolve(rootDir, srcDirName);\n\n // Resolve buildDir (relative to rootDir)\n const buildDirName = config.buildDir ?? DEFAULT_BUILD_DIR;\n const buildDir = isAbsolute(buildDirName)\n ? buildDirName\n : resolve(rootDir, buildDirName);\n\n // Resolve directory config with defaults\n const dirConfig: Required<DirectoryConfig> = {\n assets: config.dir?.assets ?? \"assets\",\n plugins: config.dir?.plugins ?? \"plugins\",\n public: config.dir?.public ?? \"public\",\n shared: config.dir?.shared ?? \"shared\",\n };\n\n return {\n rootDir,\n srcDir,\n buildDir,\n // Assets, plugins, shared are relative to srcDir\n assetsDir: resolve(srcDir, dirConfig.assets),\n pluginsDir: resolve(srcDir, dirConfig.plugins),\n sharedDir: resolve(srcDir, dirConfig.shared),\n // Public is relative to rootDir\n publicDir: resolve(rootDir, dirConfig.public),\n };\n}\n\n/**\n * Resolve a path relative to the source directory.\n *\n * @param srcDir - Source directory\n * @param path - Path to resolve\n * @returns Absolute path\n */\nexport function resolveFromSrc(srcDir: string, path: string): string {\n return isAbsolute(path) ? path : resolve(srcDir, path);\n}\n\n/**\n * Resolve a path relative to the build directory.\n *\n * @param buildDir - Build directory\n * @param path - Path to resolve\n * @returns Absolute path\n */\nexport function resolveFromBuild(buildDir: string, path: string): string {\n return isAbsolute(path) ? path : resolve(buildDir, path);\n}\n\n/**\n * Get relative path from build directory to source directory.\n * Useful for generating tsconfig paths.\n *\n * @param buildDir - Build directory\n * @param srcDir - Source directory\n * @returns Relative path (e.g., '../src')\n */\nexport function getRelativePathToSrc(buildDir: string, srcDir: string): string {\n return relative(buildDir, srcDir);\n}\n\n// ============================================================================\n// Phase 2.2: Build Configuration Utilities\n// ============================================================================\n\n/**\n * Normalized analyze configuration\n */\nexport interface NormalizedAnalyzeConfig {\n enabled: boolean;\n openAnalyzer: boolean;\n reportFilename: string;\n}\n\n/**\n * Normalize analyze configuration to consistent object format.\n *\n * @param analyze - Build analyze config (boolean or object)\n * @returns Normalized analyze config object\n *\n * @example\n * ```ts\n * normalizeAnalyzeConfig(true) // { enabled: true, openAnalyzer: false, reportFilename: 'report.html' }\n * normalizeAnalyzeConfig(false) // { enabled: false, openAnalyzer: false, reportFilename: 'report.html' }\n * ```\n */\nexport function normalizeAnalyzeConfig(\n analyze?: boolean | AnalyzeConfig\n): NormalizedAnalyzeConfig {\n if (typeof analyze === \"boolean\") {\n return {\n enabled: analyze,\n openAnalyzer: false,\n reportFilename: \"report.html\",\n };\n }\n\n return {\n enabled: analyze?.enabled ?? false,\n openAnalyzer: analyze?.openAnalyzer ?? false,\n reportFilename: analyze?.reportFilename ?? \"report.html\",\n };\n}\n\n/**\n * Resolved build configuration with all defaults applied\n */\nexport interface ResolvedBuildConfig {\n analyze: NormalizedAnalyzeConfig;\n sourcemap: boolean | \"hidden\" | \"inline\";\n target: string;\n minify: boolean | \"esbuild\" | \"terser\";\n}\n\n/**\n * Resolve build configuration with defaults.\n *\n * @param config - Build configuration\n * @returns Resolved build config with all defaults applied\n *\n * @example\n * ```ts\n * const buildConfig = resolveBuildConfig({ analyze: true })\n * console.log(buildConfig.target) // 'esnext'\n * ```\n */\nexport function resolveBuildConfig(config?: BuildConfig): ResolvedBuildConfig {\n return {\n analyze: normalizeAnalyzeConfig(config?.analyze),\n sourcemap: config?.sourcemap ?? false,\n target: config?.target ?? \"esnext\",\n minify: config?.minify ?? \"esbuild\",\n };\n}\n\n/**\n * Convert build config to Vite build options.\n *\n * @param config - Resolved build configuration\n * @returns Vite-compatible build options\n */\nexport function toViteBuildOptions(config: ResolvedBuildConfig): {\n target: string;\n sourcemap: boolean | \"hidden\" | \"inline\";\n minify: boolean | \"esbuild\" | \"terser\";\n} {\n return {\n target: config.target,\n sourcemap: config.sourcemap,\n minify: config.minify,\n };\n}\n\n// ============================================================================\n// Phase 2.3: Dev Server Configuration Utilities\n// ============================================================================\n\n/**\n * Normalized HTTPS configuration\n */\nexport interface NormalizedHttpsConfig {\n enabled: boolean;\n key?: string;\n cert?: string;\n}\n\n/**\n * Normalize HTTPS configuration.\n *\n * @param https - HTTPS config (boolean or object)\n * @returns Normalized HTTPS config\n */\nexport function normalizeHttpsConfig(\n https?: boolean | HttpsConfig\n): NormalizedHttpsConfig {\n if (typeof https === \"boolean\") {\n return { enabled: https };\n }\n\n if (https) {\n return {\n enabled: true,\n key: https.key,\n cert: https.cert,\n };\n }\n\n return { enabled: false };\n}\n\n/**\n * Normalized CORS configuration\n */\nexport interface NormalizedCorsConfig {\n enabled: boolean;\n origin?: string | string[] | boolean;\n methods?: string[];\n allowedHeaders?: string[];\n exposedHeaders?: string[];\n credentials?: boolean;\n maxAge?: number;\n}\n\n/**\n * Normalize CORS configuration.\n *\n * @param cors - CORS config (boolean or object)\n * @returns Normalized CORS config\n */\nexport function normalizeCorsConfig(\n cors?: boolean | CorsOptions\n): NormalizedCorsConfig {\n if (typeof cors === \"boolean\") {\n return {\n enabled: cors,\n origin: cors ? \"*\" : undefined,\n };\n }\n\n if (cors) {\n return {\n enabled: true,\n origin: cors.origin,\n methods: cors.methods,\n allowedHeaders: cors.allowedHeaders,\n exposedHeaders: cors.exposedHeaders,\n credentials: cors.credentials,\n maxAge: cors.maxAge,\n };\n }\n\n return { enabled: false };\n}\n\n/**\n * Resolved dev server configuration\n */\nexport interface ResolvedDevConfig {\n port: number;\n host: string | boolean;\n open: boolean;\n https: NormalizedHttpsConfig;\n proxy: Record<string, string | ProxyOptions>;\n cors: NormalizedCorsConfig;\n strictPort: boolean;\n}\n\n/**\n * Resolve dev server configuration with defaults.\n *\n * @param config - Dev server configuration\n * @returns Resolved dev config with all defaults applied\n */\nexport function resolveDevConfig(config?: DevServerConfig): ResolvedDevConfig {\n return {\n port: config?.port ?? 3000,\n host: config?.host ?? \"localhost\",\n open: config?.open ?? false,\n https: normalizeHttpsConfig(config?.https),\n proxy: config?.proxy ?? {},\n cors: normalizeCorsConfig(config?.cors),\n strictPort: config?.strictPort ?? false,\n };\n}\n\n/**\n * Convert dev config to Vite server options.\n *\n * @param config - Resolved dev configuration\n * @param rootDir - Project root directory (for resolving cert paths)\n * @returns Vite-compatible server options\n */\nexport function toViteServerOptions(\n config: ResolvedDevConfig,\n rootDir: string\n): {\n port: number;\n host: string | boolean;\n open: boolean;\n https?: { key: string; cert: string } | boolean;\n proxy?: Record<string, string | { target: string; changeOrigin?: boolean; rewrite?: (path: string) => string; ws?: boolean; secure?: boolean; headers?: Record<string, string> }>;\n cors?: boolean | { origin?: string | string[] | boolean; methods?: string[]; allowedHeaders?: string[]; exposedHeaders?: string[]; credentials?: boolean; maxAge?: number };\n strictPort: boolean;\n} {\n const result: ReturnType<typeof toViteServerOptions> = {\n port: config.port,\n host: config.host,\n open: config.open,\n strictPort: config.strictPort,\n };\n\n // Handle HTTPS\n if (config.https.enabled) {\n if (config.https.key && config.https.cert) {\n result.https = {\n key: isAbsolute(config.https.key)\n ? config.https.key\n : resolve(rootDir, config.https.key),\n cert: isAbsolute(config.https.cert)\n ? config.https.cert\n : resolve(rootDir, config.https.cert),\n };\n } else {\n result.https = true;\n }\n }\n\n // Handle proxy\n if (Object.keys(config.proxy).length > 0) {\n result.proxy = {};\n for (const [path, target] of Object.entries(config.proxy)) {\n if (typeof target === \"string\") {\n result.proxy[path] = {\n target,\n changeOrigin: true,\n };\n } else {\n result.proxy[path] = {\n target: target.target,\n changeOrigin: target.changeOrigin ?? true,\n rewrite: target.rewrite,\n ws: target.ws,\n secure: target.secure,\n headers: target.headers,\n };\n }\n }\n }\n\n // Handle CORS\n if (config.cors.enabled) {\n if (\n config.cors.origin ||\n config.cors.methods ||\n config.cors.allowedHeaders\n ) {\n result.cors = {\n origin: config.cors.origin,\n methods: config.cors.methods,\n allowedHeaders: config.cors.allowedHeaders,\n exposedHeaders: config.cors.exposedHeaders,\n credentials: config.cors.credentials,\n maxAge: config.cors.maxAge,\n };\n } else {\n result.cors = true;\n }\n }\n\n return result;\n}\n\n// ============================================================================\n// Phase 2.4: TypeScript Configuration Utilities\n// ============================================================================\n\n/**\n * Resolved TypeScript configuration\n */\nexport interface ResolvedTypeScriptConfig {\n strict: boolean;\n typeCheck: boolean | \"build\";\n tsConfig: {\n compilerOptions: Record<string, unknown>;\n include: string[];\n exclude: string[];\n references: Array<{ path: string }>;\n };\n}\n\n/**\n * Resolve TypeScript configuration with defaults.\n *\n * @param config - TypeScript configuration\n * @returns Resolved TypeScript config\n */\nexport function resolveTypeScriptConfig(\n config?: TypeScriptConfig\n): ResolvedTypeScriptConfig {\n return {\n strict: config?.strict ?? true,\n typeCheck: config?.typeCheck ?? false,\n tsConfig: {\n compilerOptions: config?.tsConfig?.compilerOptions ?? {},\n include: config?.tsConfig?.include ?? [],\n exclude: config?.tsConfig?.exclude ?? [],\n references: config?.tsConfig?.references ?? [],\n },\n };\n}\n\n/**\n * Generate tsconfig compiler options based on TypeScript configuration.\n *\n * @param config - Resolved TypeScript config\n * @returns Compiler options for tsconfig.json\n */\nexport function generateTsCompilerOptions(\n config: ResolvedTypeScriptConfig\n): Record<string, unknown> {\n const baseOptions: Record<string, unknown> = {\n target: \"ESNext\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n esModuleInterop: true,\n skipLibCheck: true,\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: \"preserve\",\n };\n\n // Add strict options if enabled\n if (config.strict) {\n Object.assign(baseOptions, {\n strict: true,\n noImplicitAny: true,\n strictNullChecks: true,\n strictFunctionTypes: true,\n strictBindCallApply: true,\n strictPropertyInitialization: true,\n noImplicitThis: true,\n alwaysStrict: true,\n });\n }\n\n // Merge with user-provided compiler options\n return defu(config.tsConfig.compilerOptions, baseOptions);\n}\n\n/**\n * Check if type checking should be enabled for a given phase.\n *\n * @param config - TypeScript config\n * @param phase - Current phase ('dev' or 'build')\n * @returns Whether type checking should run\n */\nexport function shouldTypeCheck(\n config: ResolvedTypeScriptConfig,\n phase: \"dev\" | \"build\"\n): boolean {\n if (config.typeCheck === true) {\n return true;\n }\n if (config.typeCheck === \"build\" && phase === \"build\") {\n return true;\n }\n return false;\n}\n\n// ============================================================================\n// Phase 2.5: Watch Configuration Utilities\n// ============================================================================\n\n/**\n * Resolved watch configuration\n */\nexport interface ResolvedWatchConfig {\n /** Additional patterns to watch */\n patterns: string[];\n /** Chokidar options */\n chokidar: ChokidarOptions;\n}\n\n/**\n * Resolve watch configuration with defaults.\n *\n * @param watch - Watch patterns array\n * @param watchers - Watchers configuration\n * @returns Resolved watch config\n */\nexport function resolveWatchConfig(\n watch?: string[],\n watchers?: WatchersConfig\n): ResolvedWatchConfig {\n return {\n patterns: watch ?? [],\n chokidar: watchers?.chokidar ?? {},\n };\n}\n\n/**\n * Build complete watch patterns including default watched directories.\n *\n * @param config - Kimesh configuration\n * @param dirs - Resolved directories\n * @returns Array of glob patterns to watch\n */\nexport function buildWatchPatterns(\n config: KimeshConfig,\n dirs: ResolvedDirectories\n): string[] {\n const patterns: string[] = [];\n\n // Add default watched directories\n patterns.push(join(dirs.srcDir, \"**/*\"));\n\n // Add custom watch patterns\n if (config.watch) {\n for (const pattern of config.watch) {\n // Resolve relative patterns from rootDir\n if (pattern.startsWith(\"./\") || pattern.startsWith(\"../\")) {\n patterns.push(resolve(dirs.rootDir, pattern));\n } else if (isAbsolute(pattern)) {\n patterns.push(pattern);\n } else {\n patterns.push(resolve(dirs.rootDir, pattern));\n }\n }\n }\n\n return patterns;\n}\n\n/**\n * Merge chokidar options with defaults.\n *\n * @param options - User-provided chokidar options\n * @returns Merged chokidar options\n */\nexport function mergeChokidarOptions(\n options?: ChokidarOptions\n): ChokidarOptions {\n const defaults: ChokidarOptions = {\n persistent: true,\n usePolling: false,\n interval: 100,\n binaryInterval: 300,\n atomic: false,\n };\n\n return defu(options ?? {}, defaults);\n}\n\n/**\n * Convert watch config to Vite watch options.\n *\n * @param config - Resolved watch configuration\n * @returns Vite-compatible watch options\n */\nexport function toViteWatchOptions(config: ResolvedWatchConfig): {\n usePolling?: boolean;\n interval?: number;\n binaryInterval?: number;\n ignored?: string | RegExp | string[] | ((path: string) => boolean);\n} {\n const merged = mergeChokidarOptions(config.chokidar);\n\n return {\n usePolling: merged.usePolling,\n interval: merged.interval,\n binaryInterval: merged.binaryInterval,\n ignored: merged.ignored,\n };\n}\n\n// ============================================================================\n// Combined Resolution Utilities\n// ============================================================================\n\n/**\n * All resolved Phase 2 configurations\n */\nexport interface ResolvedPhase2Config {\n directories: ResolvedDirectories;\n build: ResolvedBuildConfig;\n dev: ResolvedDevConfig;\n typescript: ResolvedTypeScriptConfig;\n watch: ResolvedWatchConfig;\n}\n\n/**\n * Resolve all Phase 2 configurations at once.\n *\n * @param config - Kimesh configuration\n * @param rootDir - Project root directory\n * @returns All resolved Phase 2 configs\n */\nexport function resolvePhase2Config(\n config: KimeshConfig,\n rootDir: string\n): ResolvedPhase2Config {\n const directories = resolveDirectories(config, rootDir);\n\n return {\n directories,\n build: resolveBuildConfig(config.build),\n dev: resolveDevConfig(config.dev),\n typescript: resolveTypeScriptConfig(config.typescript),\n watch: resolveWatchConfig(config.watch, config.watchers),\n };\n}\n","/**\n * Options for entry code generation\n */\nexport interface GenerateEntryOptions {\n hasContext: boolean;\n hasPlugins: boolean;\n}\n\n/**\n * Generate the entry point code for a Kimesh app\n */\nexport function generateEntryCode(options: GenerateEntryOptions): string {\n const { hasContext, hasPlugins } = options\n\n const imports = [\n `import { createKimeshApp } from '@kimesh/router-runtime'`,\n `import { routes } from '#kimesh/routes'`,\n `import App from '#kimesh/app'`,\n ]\n\n if (hasContext) {\n imports.push(`import createContext from '#kimesh/context'`)\n }\n\n if (hasPlugins) {\n imports.push(`import { plugins } from '#kimesh/plugins'`)\n }\n\n const optionLines: string[] = [\n // Always pass runtimeConfig from Vite's define\n ` runtimeConfig: __KIMESH_CONFIG__,`,\n // Pass per-layer configs for layer-aware features\n ` layersConfig: __KIMESH_LAYERS_CONFIG__,`,\n ]\n if (hasContext) {\n optionLines.push(` context: createContext(),`)\n }\n if (hasPlugins) {\n optionLines.push(` plugins,`)\n }\n\n const optionsBlock = `\\n${optionLines.join('\\n')}`\n\n // Declare global defines for TypeScript\n const configDeclaration = `declare const __KIMESH_CONFIG__: Record<string, unknown>\ndeclare const __KIMESH_LAYERS_CONFIG__: Record<string, Record<string, unknown>>`\n\n return `${imports.join('\\n')}\n\n${configDeclaration}\n\nasync function bootstrap() {\n const app = await createKimeshApp({\n rootComponent: App,\n routes,${optionsBlock}\n })\n\n app.mount('#app')\n}\n\nbootstrap()\n`\n}\n\n/**\n * Generate context type declaration file for host app\n */\nexport function generateContextTypes(): string {\n return `/* eslint-disable */\n/* prettier-ignore */\n// Auto-generated by @kimesh/kit\n// Do not edit this file manually\n\nimport type { AppContext } from '../src/app.context'\n\ndeclare module '@kimesh/router-runtime' {\n interface KimeshContext extends AppContext {}\n}\n\nexport {}\n`\n}\n\n/**\n * Generate context type declaration file for a layer\n * @param hostContextPath - Relative path from layer's .kimesh to host's app.context.ts\n */\nexport function generateLayerContextTypes(hostContextPath: string): string {\n return `/* eslint-disable */\n/* prettier-ignore */\n// Auto-generated by @kimesh/kit\n// Do not edit this file manually\n\nimport type { AppContext } from '${hostContextPath}'\n\ndeclare module '@kimesh/router-runtime' {\n interface KimeshContext extends AppContext {}\n}\n\nexport {}\n`\n}\n","/**\n * Generate the HTML template for a Kimesh app\n */\nexport function generateHtml(title: string): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${title}</title>\n</head>\n<body>\n <div id=\"app\"></div>\n <script type=\"module\" src=\"/.kimesh/entry.ts\"></script>\n</body>\n</html>`;\n}\n","/**\n * @kimesh/kit - HMR Watcher\n *\n * Unified HMR handling for layers, routes, and auto-imports.\n */\n\nimport type { ViteDevServer, ModuleNode } from \"vite\";\nimport consola from \"consola\";\nimport type { ResolvedLayer } from \"@kimesh/layers\";\n\nexport interface HMRWatcherOptions {\n /** Vite dev server instance */\n server: ViteDevServer;\n\n /** Resolved layers */\n layers: ResolvedLayer[];\n\n /** Debug mode */\n debug?: boolean;\n}\n\nexport interface HMRContext {\n /** File that changed */\n file: string;\n\n /** Type of change */\n type: \"add\" | \"change\" | \"unlink\";\n\n /** Layer this file belongs to (if any) */\n layer?: ResolvedLayer;\n\n /** Category of the file */\n category: \"route\" | \"component\" | \"composable\" | \"config\" | \"other\";\n}\n\n/**\n * Create HMR watcher for Kimesh layers\n */\nexport function createHMRWatcher(options: HMRWatcherOptions) {\n const { server, layers, debug } = options;\n\n const log = (...args: unknown[]) => {\n if (debug) {\n consola.debug(\"[kimesh:hmr]\", ...args);\n }\n };\n\n /**\n * Detect which layer a file belongs to\n */\n function detectLayer(filePath: string): ResolvedLayer | undefined {\n // Sort by path length descending to match most specific first\n const sortedLayers = [...layers].sort(\n (a, b) => b.path.length - a.path.length\n );\n\n for (const layer of sortedLayers) {\n if (filePath.startsWith(layer.path)) {\n return layer;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if path contains a directory segment (cross-platform)\n */\n function pathContains(filePath: string, segment: string): boolean {\n return filePath.includes(`/${segment}/`) || filePath.includes(`\\\\${segment}\\\\`);\n }\n\n /**\n * Detect file category based on path\n */\n function detectCategory(\n filePath: string\n ): \"route\" | \"component\" | \"composable\" | \"config\" | \"other\" {\n if (pathContains(filePath, \"routes\")) return \"route\";\n if (pathContains(filePath, \"components\")) return \"component\";\n if (pathContains(filePath, \"composables\")) return \"composable\";\n if (filePath.includes(\"kimesh.config\")) return \"config\";\n return \"other\";\n }\n\n /**\n * Handle file change\n */\n async function handleChange(\n file: string,\n type: \"add\" | \"change\" | \"unlink\"\n ): Promise<void> {\n const startTime = performance.now();\n\n const layer = detectLayer(file);\n const category = detectCategory(file);\n\n const context: HMRContext = {\n file,\n type,\n layer,\n category,\n };\n\n log(\n `File ${type}: ${file}`,\n layer ? `[${layer.name}]` : \"[app]\",\n `(${category})`\n );\n\n switch (category) {\n case \"route\":\n await handleRouteChange(context);\n break;\n\n case \"component\":\n await handleComponentChange(context);\n break;\n\n case \"composable\":\n await handleComposableChange(context);\n break;\n\n case \"config\":\n await handleConfigChange(context);\n break;\n\n default:\n // Standard Vite HMR handles other files\n break;\n }\n\n const elapsed = performance.now() - startTime;\n log(`HMR handled in ${elapsed.toFixed(1)}ms`);\n }\n\n /**\n * Handle route file change\n */\n async function handleRouteChange(context: HMRContext): Promise<void> {\n // Invalidate the virtual routes module\n const routesModule = server.moduleGraph.getModuleById(\n \"\\0virtual:kimesh-routes\"\n );\n\n if (routesModule) {\n server.moduleGraph.invalidateModule(routesModule);\n log(\"Invalidated virtual:kimesh-routes\");\n }\n\n // For route additions/deletions, full reload is needed\n if (context.type === \"add\" || context.type === \"unlink\") {\n server.ws.send({\n type: \"full-reload\",\n path: \"*\",\n });\n log(\"Triggered full reload for route structure change\");\n } else {\n // For content changes, try hot update first\n const module = server.moduleGraph.getModuleById(context.file);\n if (module) {\n server.moduleGraph.invalidateModule(module);\n\n // Send HMR update\n server.ws.send({\n type: \"update\",\n updates: [\n {\n type: \"js-update\",\n path: context.file,\n acceptedPath: context.file,\n timestamp: Date.now(),\n },\n ],\n });\n }\n }\n }\n\n /**\n * Handle component file change\n */\n async function handleComponentChange(context: HMRContext): Promise<void> {\n // Vue's HMR handles component updates automatically\n // We just need to potentially invalidate auto-import registry\n\n if (context.type === \"add\" || context.type === \"unlink\") {\n // New component added or removed - regenerate auto-imports\n const autoImportModule = server.moduleGraph.getModuleById(\n \"\\0virtual:kimesh-auto-imports\"\n );\n\n if (autoImportModule) {\n server.moduleGraph.invalidateModule(autoImportModule);\n log(\"Invalidated auto-import registry for component change\");\n }\n }\n }\n\n /**\n * Handle composable file change\n */\n async function handleComposableChange(context: HMRContext): Promise<void> {\n // Invalidate all modules that import this composable\n const module = server.moduleGraph.getModuleById(context.file);\n\n if (module) {\n // Get all importers and invalidate them\n const importers = collectImporters(module);\n\n for (const importer of importers) {\n server.moduleGraph.invalidateModule(importer);\n }\n\n server.moduleGraph.invalidateModule(module);\n\n log(`Invalidated ${importers.size + 1} modules for composable change`);\n\n // Send update\n server.ws.send({\n type: \"update\",\n updates: Array.from(importers).map((m) => ({\n type: \"js-update\" as const,\n path: m.file!,\n acceptedPath: m.file!,\n timestamp: Date.now(),\n })),\n });\n }\n\n // For additions/deletions, update auto-import registry\n if (context.type === \"add\" || context.type === \"unlink\") {\n const autoImportModule = server.moduleGraph.getModuleById(\n \"\\0virtual:kimesh-auto-imports\"\n );\n\n if (autoImportModule) {\n server.moduleGraph.invalidateModule(autoImportModule);\n }\n }\n }\n\n /**\n * Handle config file change\n */\n async function handleConfigChange(context: HMRContext): Promise<void> {\n // Config changes require full restart\n consola.info(\n `[kimesh] Config changed${\n context.layer ? ` in ${context.layer.name}` : \"\"\n }, restart required`\n );\n\n server.ws.send({\n type: \"full-reload\",\n path: \"*\",\n });\n }\n\n /**\n * Collect all modules that import a given module (recursive)\n */\n function collectImporters(\n module: ModuleNode,\n seen = new Set<ModuleNode>()\n ): Set<ModuleNode> {\n const importers = new Set<ModuleNode>();\n\n for (const importer of module.importers) {\n if (!seen.has(importer)) {\n seen.add(importer);\n importers.add(importer);\n\n // Recursively collect importers\n const nestedImporters = collectImporters(importer, seen);\n for (const nested of nestedImporters) {\n importers.add(nested);\n }\n }\n }\n\n return importers;\n }\n\n return {\n handleChange,\n detectLayer,\n detectCategory,\n };\n}\n","/**\n * @kimesh/kit - Error Formatter\n *\n * Enhanced error messages with layer context and suggestions.\n */\n\nimport pc from \"picocolors\";\nimport type { ResolvedLayer } from \"@kimesh/layers\";\n\nexport interface ErrorContext {\n /** File that caused the error */\n file?: string;\n\n /** Line number */\n line?: number;\n\n /** Column number */\n column?: number;\n\n /** Layer this error occurred in */\n layer?: ResolvedLayer;\n\n /** Code snippet */\n snippet?: string;\n}\n\nexport interface FormattedError {\n /** Error title */\n title: string;\n\n /** Error message */\n message: string;\n\n /** Location info */\n location?: string;\n\n /** Suggestions for fixing */\n suggestions?: string[];\n\n /** Full formatted output */\n formatted: string;\n}\n\n/**\n * Format an error with layer context\n */\nexport function formatError(\n error: Error,\n context?: ErrorContext\n): FormattedError {\n const title = pc.red(pc.bold(`✖ ${error.name || \"Error\"}`));\n\n let message = error.message;\n let location: string | undefined;\n const suggestions: string[] = [];\n\n // Add location info\n if (context?.file) {\n const layerInfo = context.layer\n ? pc.dim(` [${context.layer.name}]`)\n : \"\";\n\n if (context.line) {\n location = pc.cyan(\n `${context.file}:${context.line}${\n context.column ? `:${context.column}` : \"\"\n }`\n ) + layerInfo;\n } else {\n location = pc.cyan(context.file) + layerInfo;\n }\n }\n\n // Add suggestions based on error type\n if (error.message.includes(\"Cannot find module\")) {\n suggestions.push(\"Check if the import path is correct\");\n suggestions.push(\"Ensure the dependency is installed\");\n\n if (context?.layer) {\n suggestions.push(\n `Try using the layer alias: #${context.layer.name}/...`\n );\n }\n }\n\n if (error.message.includes(\"is not defined\")) {\n suggestions.push(\"Add the missing import or ensure auto-import is enabled\");\n suggestions.push(\n \"Check if the export exists in the source file\"\n );\n }\n\n if (error.message.includes(\"Duplicate route\")) {\n suggestions.push(\n \"Routes in the app take precedence over layer routes\"\n );\n suggestions.push(\n \"Use a different path or remove the conflicting route\"\n );\n }\n\n // Build formatted output\n let formatted = `\\n${title}\\n`;\n\n if (location) {\n formatted += `\\n${pc.dim(\"Location:\")} ${location}\\n`;\n }\n\n formatted += `\\n${message}\\n`;\n\n if (context?.snippet) {\n formatted += `\\n${pc.dim(\"Code:\")}\\n${context.snippet}\\n`;\n }\n\n if (suggestions.length > 0) {\n formatted += `\\n${pc.yellow(\"Suggestions:\")}\\n`;\n for (const suggestion of suggestions) {\n formatted += ` ${pc.dim(\"•\")} ${suggestion}\\n`;\n }\n }\n\n return {\n title: error.name || \"Error\",\n message,\n location,\n suggestions: suggestions.length > 0 ? suggestions : undefined,\n formatted,\n };\n}\n\n/**\n * Format a warning message\n */\nexport function formatWarning(\n message: string,\n context?: ErrorContext\n): string {\n let output = pc.yellow(pc.bold(\"⚠ Warning\"));\n\n if (context?.layer) {\n output += pc.dim(` [${context.layer.name}]`);\n }\n\n output += `\\n${message}`;\n\n if (context?.file) {\n output += pc.dim(`\\n at ${context.file}`);\n }\n\n return output;\n}\n\n/**\n * Get suggestions for resolving a conflict based on type\n */\nfunction getConflictSuggestions(\n type: \"route\" | \"import\" | \"component\",\n name: string,\n winner: string\n): string[] {\n if (type === \"route\") {\n return [\n \"Use different route paths\",\n \"Configure basePath in layer config\",\n ];\n }\n\n return [\n `Use prefixed imports: ${name} → ${winner}${capitalize(name)}`,\n `Add prefix in layer config: components.prefix: '${capitalize(winner)}'`,\n ];\n}\n\n/**\n * Format a conflict warning\n */\nexport function formatConflictWarning(\n type: \"route\" | \"import\" | \"component\",\n name: string,\n sources: Array<{ layer: string; path: string }>,\n winner: string\n): string {\n let output = pc.yellow(pc.bold(`⚠ ${capitalize(type)} Conflict`));\n output += `\\n\\n${pc.bold(name)} is defined in multiple layers:\\n`;\n\n for (const source of sources) {\n const isWinner = source.layer === winner;\n const marker = isWinner ? pc.green(\"✓\") : pc.dim(\"○\");\n const layerName = isWinner ? pc.green(source.layer) : pc.dim(source.layer);\n output += ` ${marker} ${layerName}\\n`;\n output += pc.dim(` ${source.path}\\n`);\n }\n\n output += `\\n${pc.dim(\"Using:\")} ${pc.green(winner)} (highest priority)\\n`;\n output += `\\n${pc.yellow(\"Suggestions:\")}\\n`;\n\n for (const suggestion of getConflictSuggestions(type, name, winner)) {\n output += ` ${pc.dim(\"•\")} ${suggestion}\\n`;\n }\n\n return output;\n}\n\n/**\n * Format timing info for debug\n */\nexport function formatTiming(\n operation: string,\n timeMs: number,\n details?: Record<string, unknown>\n): string {\n const color = timeMs < 50 ? pc.green : timeMs < 200 ? pc.yellow : pc.red;\n\n let output = `${pc.dim(\"[timing]\")} ${operation}: ${color(\n `${timeMs.toFixed(1)}ms`\n )}`;\n\n if (details) {\n const detailStr = Object.entries(details)\n .map(([k, v]) => `${k}=${v}`)\n .join(\", \");\n output += pc.dim(` (${detailStr})`);\n }\n\n return output;\n}\n\n/**\n * Create a timing logger\n */\nexport function createTimer(operation: string, debug = false) {\n const start = performance.now();\n\n return {\n end(details?: Record<string, unknown>) {\n const elapsed = performance.now() - start;\n\n if (debug) {\n console.log(formatTiming(operation, elapsed, details));\n }\n\n return elapsed;\n },\n };\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import {\n existsSync,\n mkdirSync,\n writeFileSync,\n readFileSync,\n realpathSync,\n} from \"node:fs\";\nimport { resolve, join, relative } from \"pathe\";\nimport type { Plugin, ViteDevServer, PluginOption, UserConfig } from \"vite\";\nimport { mergeConfig, loadEnv } from \"vite\";\nimport vue from \"@vitejs/plugin-vue\";\nimport consola from \"consola\";\nimport { defu } from \"defu\";\nimport { kimeshRouterGenerator } from \"@kimesh/router-generator\";\nimport { prepareLayers, generateLayerAliases } from \"@kimesh/layers\";\nimport type { ResolvedLayer } from \"@kimesh/layers\";\nimport { kimeshAutoImport } from \"@kimesh/auto-import\";\nimport type { LayerAutoImportSource, AutoImportPluginOptions } from \"@kimesh/auto-import\";\nimport type { KimeshConfig, KimeshViteConfig, Kimesh } from \"../types\";\nimport type { KimeshPluginOptions } from \"../index\";\nimport {\n generateEntryCode,\n generateContextTypes,\n generateLayerContextTypes,\n} from \"./entry\";\nimport { generateHtml } from \"./html\";\nimport { createHMRWatcher } from \"../hmr\";\nimport { createTimer } from \"../errors\";\nimport { createKimesh, executeModules } from \"../core\";\nimport { writeTemplates } from \"../kit/templates\";\nimport { applyEnv, createDefaultRuntimeConfig } from \"../runtime-config\";\nimport { scanPluginsDir } from \"../kit/plugin-scanner\";\nimport { addPluginsTemplate } from \"../kit/plugin-template\";\nimport { buildAliases } from \"../kit/alias-utils\";\nimport { writeTsConfig } from \"../kit/tsconfig-generator\";\nimport {\n resolveDirectories,\n resolveBuildConfig,\n resolveDevConfig,\n resolveWatchConfig,\n toViteWatchOptions,\n} from \"../kit/phase2-utils\";\n\n/**\n * Find workspace root by traversing up and looking for workspaces config\n */\nfunction findWorkspaceRoot(startDir: string): string {\n let current = startDir;\n for (let i = 0; i < 10; i++) {\n const pkgPath = join(current, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (pkg.workspaces || existsSync(join(current, \"pnpm-workspace.yaml\"))) {\n return current;\n }\n } catch {\n // Ignore parse errors\n }\n }\n const parent = resolve(current, \"..\");\n if (parent === current) break;\n current = parent;\n }\n return startDir;\n}\n\n/**\n * Shared state for passing data between plugin phases\n */\ninterface PluginState {\n resolvedLayers: ResolvedLayer[];\n root: string;\n generatedDir: string;\n /** Kimesh context instance */\n kimesh: Kimesh | null;\n /** Whether plugins were discovered/registered */\n hasPlugins: boolean;\n}\n\n/**\n * Process all configured modules using the new v2 system\n */\nasync function processModules(\n kimesh: Kimesh,\n debug: boolean\n): Promise<void> {\n const modules = kimesh.options.config.modules;\n if (!modules || modules.length === 0) {\n return;\n }\n\n const moduleTimer = createTimer(\"Module processing\", debug);\n\n try {\n await executeModules(modules, kimesh);\n moduleTimer.end({ count: modules.length });\n } catch (error) {\n moduleTimer.end({ error: true });\n consola.error(\"[Kimesh] Module processing failed:\", error);\n }\n}\n\n/**\n * Extract module names from config (filters out inline module objects)\n */\nfunction extractModuleNames(modules: KimeshConfig[\"modules\"]): string[] {\n if (!modules) {\n return [];\n }\n\n const names: string[] = [];\n for (const mod of modules) {\n if (typeof mod === \"string\") {\n names.push(mod);\n } else if (Array.isArray(mod) && typeof mod[0] === \"string\") {\n names.push(mod[0]);\n }\n }\n return names;\n}\n\n/**\n * Generate modules.ts that imports all configured modules\n * AND references their augment.d.ts files for type declarations\n */\nfunction generateModulesTypeDeclaration(\n modules: KimeshConfig[\"modules\"],\n buildDir: string\n): void {\n const moduleNames = extractModuleNames(modules);\n if (moduleNames.length === 0) {\n return;\n }\n\n const imports = moduleNames.map((name) => `import \"${name}\";`).join(\"\\n\");\n const references = moduleNames\n .map((name) => `/// <reference path=\"../node_modules/${name}/augment.d.ts\" />`)\n .join(\"\\n\");\n\n const content = `/**\n * Module type declarations - Auto-generated by Kimesh\n * This file imports all modules to enable their type augmentations.\n *\n * DO NOT EDIT - This file is regenerated when modules change.\n */\n\n${references}\n\n${imports}\n`;\n\n mkdirSync(buildDir, { recursive: true });\n writeFileSync(join(buildDir, \"modules.ts\"), content, \"utf-8\");\n}\n\n/**\n * Kimesh Vite plugin\n * Sets up Vue with Vite 8 + Rolldown + File-based routing + Layers + Auto-Import\n */\nexport function kimeshPlugin(\n options: KimeshPluginOptions = {}\n): PluginOption[] {\n const config: KimeshConfig = options.config || {};\n const debug = options.debug ?? false;\n\n // Extract user vite config\n const userViteConfig: KimeshViteConfig = config.vite || {};\n const { plugins: userPlugins = [], ...userViteOptions } = userViteConfig;\n\n // Combine user plugins from config with additional plugins from options\n const allUserPlugins: PluginOption[] = [\n ...userPlugins,\n ...(options.additionalPlugins || []),\n ];\n\n // Shared state that gets populated during config phase\n const state: PluginState = {\n resolvedLayers: [],\n root: \"\",\n generatedDir: \"\",\n kimesh: null,\n hasPlugins: false,\n };\n\n // Determine which layers to enable\n const layersConfig = {\n enabled: options.layers?.enabled ?? config.layers?.enabled ?? \"all\",\n excluded: options.layers?.excluded ?? config.layers?.excluded ?? [],\n };\n\n const mainPlugin: Plugin = {\n name: \"kimesh:main\",\n enforce: \"pre\",\n\n async config(viteConfig, { command, mode }) {\n consola.debug(`[Kimesh] Configuring for ${command} mode`);\n\n // Resolve root early\n const configRoot = viteConfig.root || process.cwd();\n state.root = configRoot;\n \n // Resolve Phase 2 directory configuration\n const resolvedDirs = resolveDirectories(config, configRoot);\n state.generatedDir = resolvedDirs.buildDir;\n\n // Resolve Phase 2 configurations\n const resolvedBuildConfig = resolveBuildConfig(config.build);\n const resolvedDevConfig = resolveDevConfig(config.dev);\n const resolvedWatchConfig = resolveWatchConfig(config.watch, config.watchers);\n\n if (debug) {\n consola.info(`[Kimesh] Resolved directories:`);\n consola.info(` - srcDir: ${resolvedDirs.srcDir}`);\n consola.info(` - buildDir: ${resolvedDirs.buildDir}`);\n consola.info(` - pluginsDir: ${resolvedDirs.pluginsDir}`);\n }\n\n // Load .env files using Vite's loadEnv utility\n // This loads KIMESH_* variables from .env, .env.local, .env.[mode], .env.[mode].local\n const envVars = loadEnv(mode, configRoot, \"KIMESH_\");\n\n // Resolve layers with timing\n const layerTimer = createTimer(\"Layer resolution\", debug);\n try {\n const result = await prepareLayers(configRoot, {\n enabled: layersConfig.enabled,\n excluded: layersConfig.excluded,\n });\n\n // prepareLayers returns ResolvedLayer[]\n state.resolvedLayers = result as ResolvedLayer[];\n\n layerTimer.end({ count: state.resolvedLayers.length });\n\n if (debug || state.resolvedLayers.length > 1) {\n consola.info(\n `[Kimesh] Resolved ${state.resolvedLayers.length} layers:`\n );\n for (const layer of state.resolvedLayers) {\n consola.info(\n ` - ${layer.name} (priority: ${layer.priority}, path: ${layer.path})`\n );\n }\n }\n } catch (error) {\n layerTimer.end({ error: true });\n consola.warn(`[Kimesh] Layer resolution failed: ${error}`);\n state.resolvedLayers = [];\n }\n\n // Generate layer aliases\n const layerAliases = generateLayerAliases(state.resolvedLayers);\n\n // Create Kimesh context\n state.kimesh = createKimesh({\n config,\n layers: state.resolvedLayers,\n root: configRoot,\n buildDir: state.generatedDir,\n dev: command === \"serve\",\n });\n\n // Process modules after layers are resolved\n await processModules(state.kimesh, debug);\n\n // Auto-register built-in plugins based on config\n // Head plugin: auto-register when app.head is configured (like Nuxt)\n if (config.app?.head) {\n const headPluginSrc = \"@kimesh/head/plugin\";\n const hasHeadPlugin = state.kimesh._registries.runtimePlugins.some(\n (p) => p.src === headPluginSrc\n );\n if (!hasHeadPlugin) {\n state.kimesh._registries.runtimePlugins.unshift({\n src: headPluginSrc,\n name: \"head\",\n });\n if (debug) {\n consola.info(\"[Kimesh] Auto-registered @kimesh/head plugin (app.head configured)\");\n }\n }\n }\n\n // Scan for auto-discovered plugins in src/plugins directory (host + layers)\n // Use resolved pluginsDir from Phase 2 configuration\n let discoveredPlugins = await scanPluginsDir(resolvedDirs.pluginsDir);\n\n // Also scan each layer's plugins directory\n for (const layer of state.resolvedLayers) {\n const layerPluginsDir = join(layer.path, \"src\", \"plugins\");\n const layerPlugins = await scanPluginsDir(layerPluginsDir);\n discoveredPlugins = discoveredPlugins.concat(layerPlugins);\n }\n\n // Add plugins template if there are any plugins (discovered or registered by modules)\n const hasRegisteredPlugins = state.kimesh._registries.runtimePlugins.length > 0;\n state.hasPlugins = discoveredPlugins.length > 0 || hasRegisteredPlugins;\n\n if (state.hasPlugins) {\n addPluginsTemplate(state.kimesh, discoveredPlugins);\n if (debug) {\n consola.info(`[Kimesh] Found ${discoveredPlugins.length} auto-discovered plugins`);\n consola.info(`[Kimesh] Found ${state.kimesh._registries.runtimePlugins.length} module-registered plugins`);\n }\n }\n\n // Generate modules.d.ts for type augmentation\n generateModulesTypeDeclaration(config.modules, state.generatedDir);\n\n // Write templates generated by modules (including plugins.mjs)\n await writeTemplates(state.kimesh);\n\n // Build user-defined aliases from config.alias\n // Use resolved srcDir from Phase 2 configuration\n const userAliases = buildAliases(config, resolvedDirs.srcDir, configRoot);\n\n // Collect module-registered aliases\n const moduleAliases: Record<string, string> = {};\n for (const alias of state.kimesh._registries.aliases) {\n if (typeof alias.find === \"string\") {\n moduleAliases[alias.find] = alias.replacement;\n }\n }\n\n // Generate internal Kimesh aliases for TypeScript\n // Use resolved buildDir and srcDir from Phase 2 configuration\n const appVuePath = resolve(resolvedDirs.srcDir, \"app.vue\");\n const internalAliases: Record<string, string> = {\n \"#kimesh/routes\": join(resolvedDirs.buildDir, \"routes.gen.ts\"),\n \"#kimesh/app\": existsSync(appVuePath)\n ? appVuePath\n : \"@kimesh/router-runtime/default-app\",\n \"#kimesh/context\": join(resolvedDirs.srcDir, \"app.context.ts\"),\n \"#kimesh/plugins\": join(resolvedDirs.buildDir, \"plugins.mjs\"),\n };\n\n // Generate TypeScript configuration with all aliases\n // This provides automatic type support for all path aliases\n writeTsConfig({\n rootDir: configRoot,\n srcDir: resolvedDirs.srcDir,\n buildDir: state.generatedDir,\n aliases: userAliases,\n layerAliases,\n moduleAliases,\n internalAliases,\n include: [\"../src/**/*\", \"./**/*\", \"../kimesh.config.ts\"],\n exclude: [\"../node_modules\"],\n });\n\n if (debug) {\n consola.info(`[Kimesh] Generated .kimesh/tsconfig.json with ${Object.keys(userAliases).length} aliases`);\n }\n\n const layerDirs = state.resolvedLayers.map((layer) => layer.path);\n const workspaceRoot = findWorkspaceRoot(configRoot);\n const workspacePackages = resolve(workspaceRoot, \"packages\");\n const nodeModules = resolve(workspaceRoot, \"node_modules\");\n\n // For production build, ensure build directory and HTML exist\n if (command === \"build\") {\n if (!existsSync(resolvedDirs.buildDir)) {\n mkdirSync(resolvedDirs.buildDir, { recursive: true });\n }\n const htmlPath = join(resolvedDirs.buildDir, \"index.html\");\n writeFileSync(\n htmlPath,\n generateHtml(config.name || \"Kimesh App\"),\n \"utf-8\"\n );\n\n // Check for context file\n const contextPath = join(resolvedDirs.srcDir, \"app.context.ts\");\n const hasContext = existsSync(contextPath);\n\n const entryPath = join(resolvedDirs.buildDir, \"entry.ts\");\n writeFileSync(entryPath, generateEntryCode({ hasContext, hasPlugins: state.hasPlugins }), \"utf-8\");\n\n // Generate context types if context file exists\n if (hasContext) {\n const contextTypesPath = join(resolvedDirs.buildDir, \"context.d.ts\");\n writeFileSync(contextTypesPath, generateContextTypes(), \"utf-8\");\n }\n }\n\n // Process runtime config with env overrides\n // Uses loaded .env variables (envVars) instead of process.env\n // Merge runtimeConfig from all layers (lowest priority first, app layer wins)\n const layerRuntimeConfigs = state.resolvedLayers\n .slice() // copy\n .sort((a, b) => b.priority - a.priority) // lowest priority first\n .map((layer) => layer.runtimeConfig)\n .filter(Boolean) as Record<string, unknown>[];\n\n // App config has highest priority (comes last in defu merge)\n const appRuntimeConfig = config.runtimeConfig || createDefaultRuntimeConfig();\n\n // Deep merge: app config on top of layer configs (backward compatible)\n const mergedRuntimeConfig = defu(appRuntimeConfig, ...layerRuntimeConfigs) as Record<string, unknown>;\n const processedRuntimeConfig = applyEnv(mergedRuntimeConfig, { env: envVars });\n\n // Build per-layer config map (for layer-aware features like $fetch)\n const layerConfigMap: Record<string, Record<string, unknown>> = {};\n for (const layer of state.resolvedLayers) {\n if (layer.runtimeConfig) {\n layerConfigMap[layer.name] = layer.runtimeConfig;\n }\n }\n\n // Kimesh's internal base config\n const kimeshBaseConfig: UserConfig = {\n define: {\n __KIMESH_DEV__: command === \"serve\",\n __KIMESH_NAME__: JSON.stringify(config.name || \"kimesh-app\"),\n __KIMESH_LAYERS__: JSON.stringify(\n state.resolvedLayers.map((l) => l.name)\n ),\n // Runtime config injection (backward compatible merged config)\n __KIMESH_CONFIG__: JSON.stringify(processedRuntimeConfig),\n // Per-layer configs (for layer-aware features)\n __KIMESH_LAYERS_CONFIG__: JSON.stringify(layerConfigMap),\n },\n resolve: {\n alias: {\n \"#kimesh/routes\": join(resolvedDirs.buildDir, \"routes.gen.ts\"),\n \"#kimesh/app\": existsSync(appVuePath)\n ? appVuePath\n : \"@kimesh/router-runtime/default-app\",\n \"#kimesh/context\": join(resolvedDirs.srcDir, \"app.context.ts\"),\n \"#kimesh/plugins\": join(resolvedDirs.buildDir, \"plugins.mjs\"),\n // Add user-defined aliases from config.alias (includes default aliases)\n ...userAliases,\n // Add layer-specific aliases\n ...layerAliases,\n // Add module-provided aliases (highest priority)\n ...moduleAliases,\n },\n },\n // Configure server with Phase 2 dev server options\n server: {\n // Basic server options from Phase 2 config\n port: resolvedDevConfig.port,\n host: resolvedDevConfig.host,\n open: resolvedDevConfig.open,\n strictPort: resolvedDevConfig.strictPort,\n fs: {\n allow: [\n configRoot,\n ...layerDirs,\n workspaceRoot,\n workspacePackages,\n nodeModules,\n ],\n },\n // Apply watch options from Phase 2 configuration\n watch: toViteWatchOptions(resolvedWatchConfig),\n },\n // Apply Phase 2 build configuration\n build: {\n target: resolvedBuildConfig.target,\n sourcemap: resolvedBuildConfig.sourcemap,\n minify: resolvedBuildConfig.minify,\n rollupOptions:\n command === \"build\"\n ? {\n input: join(resolvedDirs.buildDir, \"index.html\"),\n }\n : undefined,\n },\n };\n\n // Merge user vite options (excluding plugins, which are handled separately)\n // User options come after Kimesh's base config, allowing override\n return mergeConfig(kimeshBaseConfig, userViteOptions);\n },\n\n configResolved(resolvedConfig) {\n state.root = resolvedConfig.root;\n // Re-resolve directories using the final root (in case it changed)\n const finalDirs = resolveDirectories(config, state.root);\n state.generatedDir = finalDirs.buildDir;\n consola.debug(`[Kimesh] Config resolved, mode: ${resolvedConfig.mode}`);\n },\n\n async buildStart() {\n // Ensure generated directory exists\n if (!existsSync(state.generatedDir)) {\n mkdirSync(state.generatedDir, { recursive: true });\n }\n\n // Check for context file\n const contextPath = join(state.root, \"src\", \"app.context.ts\");\n const hasContext = existsSync(contextPath);\n\n // Generate entry.ts\n const entryPath = join(state.generatedDir, \"entry.ts\");\n writeFileSync(entryPath, generateEntryCode({ hasContext, hasPlugins: state.hasPlugins }), \"utf-8\");\n consola.debug(`[Kimesh] Generated entry file: ${entryPath}`);\n\n // Generate context types if context file exists\n if (hasContext) {\n const contextTypesPath = join(state.generatedDir, \"context.d.ts\");\n writeFileSync(contextTypesPath, generateContextTypes(), \"utf-8\");\n consola.debug(`[Kimesh] Generated context types: ${contextTypesPath}`);\n\n // Also generate context types for each layer\n for (const layer of state.resolvedLayers) {\n if (layer.isApp) continue; // Skip host app\n\n // Resolve real path (handle symlinks)\n let layerRoot = layer.path;\n try {\n layerRoot = realpathSync(layer.path);\n } catch {\n // Ignore if path doesn't exist\n }\n\n const layerKimeshDir = join(layerRoot, \".kimesh\");\n if (!existsSync(layerKimeshDir)) {\n mkdirSync(layerKimeshDir, { recursive: true });\n }\n\n // Calculate relative path from layer's .kimesh to host's app.context.ts\n const hostContextPath = relative(layerKimeshDir, contextPath).replace(\n /\\.ts$/,\n \"\"\n );\n const layerContextTypesPath = join(layerKimeshDir, \"context.d.ts\");\n writeFileSync(\n layerContextTypesPath,\n generateLayerContextTypes(hostContextPath),\n \"utf-8\"\n );\n consola.debug(\n `[Kimesh] Generated layer context types: ${layerContextTypesPath}`\n );\n }\n }\n\n // Generate index.html\n const htmlPath = join(state.generatedDir, \"index.html\");\n writeFileSync(\n htmlPath,\n generateHtml(config.name || \"Kimesh App\"),\n \"utf-8\"\n );\n consola.debug(`[Kimesh] Generated HTML file: ${htmlPath}`);\n\n // Note: Auto-import type definitions are generated by the auto-import plugin's buildStart hook\n },\n\n configureServer(server: ViteDevServer) {\n // Create HMR watcher for unified layer handling\n const hmrWatcher = createHMRWatcher({\n server,\n layers: state.resolvedLayers,\n debug,\n });\n\n // Watch layer directories for changes\n for (const layer of state.resolvedLayers) {\n if (!layer.isApp) {\n server.watcher.add(layer.path);\n consola.debug(`[Kimesh] Watching layer: ${layer.name}`);\n }\n }\n\n // Hook into Vite's watcher for enhanced HMR\n const handleWatchEvent = (event: \"change\" | \"add\" | \"unlink\") => (file: string) => {\n const layer = hmrWatcher.detectLayer(file);\n if (layer && !layer.isApp) {\n hmrWatcher.handleChange(file, event);\n }\n };\n\n server.watcher.on(\"change\", handleWatchEvent(\"change\"));\n server.watcher.on(\"add\", handleWatchEvent(\"add\"));\n server.watcher.on(\"unlink\", handleWatchEvent(\"unlink\"));\n\n // Serve generated HTML for SPA routes\n server.middlewares.use(async (req, res, next) => {\n const url = req.url || \"/\";\n\n // Skip static files and Vite internal routes\n const isStaticOrInternal =\n url.includes(\".\") ||\n url.startsWith(\"/@\") ||\n url.startsWith(\"/__\") ||\n url.startsWith(\"/node_modules\");\n\n if (isStaticOrInternal) {\n return next();\n }\n\n try {\n const html = readFileSync(join(state.generatedDir, \"index.html\"), \"utf-8\");\n const transformed = await server.transformIndexHtml(url, html);\n res.setHeader(\"Content-Type\", \"text/html\");\n res.end(transformed);\n } catch (e) {\n next(e);\n }\n });\n },\n };\n\n // Router generator plugin with lazy layer route resolution\n const routerPlugin = kimeshRouterGenerator({\n routesDir: config.router?.routesDir ?? \"routes\",\n importMode: config.router?.importMode ?? \"async\",\n debug,\n // Use a getter function to access layers after they're resolved\n getLayerRoutes: () => {\n return state.resolvedLayers\n .filter((l) => !l.isApp)\n .map((layer) => {\n const routesFolder = layer.config.routes?.folder || \"routes\";\n // Routes must always be in src/ folder\n const routesDir = join(layer.path, \"src\", routesFolder);\n\n return {\n layerName: layer.name,\n routesDir,\n layerPath: layer.path,\n basePath: layer.config.routes?.basePath,\n priority: layer.priority,\n };\n });\n },\n });\n\n // Auto-import plugin with lazy layer source resolution\n const autoImportOptions: AutoImportPluginOptions = {\n // Use a getter function to access layers after they're resolved\n getSources: (): LayerAutoImportSource[] => {\n return state.resolvedLayers.map((layer) => ({\n layer: layer.name,\n priority: layer.priority,\n layerPath: layer.path,\n config: {\n composables: {\n dirs: layer.config.composables?.dirs || [\"composables\"],\n },\n components: {\n dirs: layer.config.components?.dirs || [\"components\"],\n prefix: layer.isApp ? undefined : layer.config.components?.prefix,\n },\n utils: {\n dirs: layer.config.utils?.dirs || [\"utils\"],\n },\n stores: {\n dirs: layer.config.stores?.dirs || [\"stores\"],\n },\n presets: layer.isApp\n ? (config.autoImport?.presets as Array<\n \"vue\" | \"vue-router\" | \"tanstack-query\" | \"pinia\" | \"kimesh\"\n >) || [\"vue\", \"vue-router\", \"kimesh\"]\n : undefined,\n },\n }));\n },\n // Use getter for layers to access them after resolution\n getLayers: () => {\n return state.resolvedLayers.map((layer) => ({\n name: layer.name,\n path: layer.path,\n isApp: layer.isApp,\n }));\n },\n dts:\n config.autoImport?.dts !== false\n ? state.generatedDir || \".kimesh\"\n : false,\n debug,\n };\n const autoImportPlugin = kimeshAutoImport(autoImportOptions);\n\n // Internal plugins first, then module plugins, then user plugins\n // This order ensures Kimesh's core functionality works correctly\n // while allowing modules and user plugins to extend or modify behavior\n const internalPlugins: PluginOption[] = [\n mainPlugin,\n autoImportPlugin,\n vue(),\n routerPlugin,\n ];\n\n // Module plugins wrapper - delegates hooks to module-provided plugins\n // This pattern allows modules to add plugins during the async config hook\n // while still having them participate in the build process\n const modulePluginsWrapper: Plugin = {\n name: \"kimesh:module-plugins-wrapper\",\n\n // Delegate resolveId to all module plugins\n async resolveId(id, importer, options) {\n const modulePlugins = state.kimesh?._registries.vitePlugins ?? [];\n for (const entry of modulePlugins) {\n const plugin = entry.plugin;\n if (typeof plugin.resolveId === \"function\") {\n const result = await (plugin.resolveId as Function).call(\n this,\n id,\n importer,\n options\n );\n if (result != null) return result;\n }\n }\n return null;\n },\n\n // Delegate load to all module plugins\n async load(id, options) {\n const modulePlugins = state.kimesh?._registries.vitePlugins ?? [];\n for (const entry of modulePlugins) {\n const plugin = entry.plugin;\n if (typeof plugin.load === \"function\") {\n const result = await (plugin.load as Function).call(\n this,\n id,\n options\n );\n if (result != null) return result;\n }\n }\n return null;\n },\n\n // Delegate transform to all module plugins\n async transform(code, id, options) {\n let currentCode = code;\n const modulePlugins = state.kimesh?._registries.vitePlugins ?? [];\n for (const entry of modulePlugins) {\n const plugin = entry.plugin;\n if (typeof plugin.transform === \"function\") {\n const result = await (plugin.transform as Function).call(\n this,\n currentCode,\n id,\n options\n );\n if (result != null) {\n currentCode = typeof result === \"string\" ? result : result.code;\n }\n }\n }\n return currentCode !== code ? currentCode : null;\n },\n };\n\n return [...internalPlugins, modulePluginsWrapper, ...allUserPlugins];\n}\n","import { loadConfig as loadC12Config } from \"c12\";\nimport consola from \"consola\";\nimport type { KimeshConfig } from \"./types\";\n\nexport interface LoadConfigOptions {\n /** Project root directory */\n root?: string;\n /** Config file path */\n configFile?: string;\n}\n\n/**\n * Load kimesh.config.ts using c12\n */\nexport async function loadConfig(\n options: LoadConfigOptions = {}\n): Promise<KimeshConfig> {\n const root = options.root || process.cwd();\n\n const { config, configFile } = await loadC12Config<KimeshConfig>({\n name: \"kimesh\",\n cwd: root,\n configFile: options.configFile,\n defaultConfig: {\n name: \"kimesh-app\",\n dev: {\n port: 3000,\n host: \"localhost\",\n },\n },\n });\n\n if (configFile) {\n consola.debug(`[Kimesh] Config loaded from: ${configFile}`);\n }\n\n return config || {};\n}\n","/**\n * @kimesh/kit - Prepare Utilities\n *\n * Generates the .kimesh directory with TypeScript configurations,\n * type declarations, and other generated files needed for IDE support.\n *\n * Similar to `nuxt prepare` - run before IDE work for full type support.\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { resolve, join } from \"pathe\";\nimport consola from \"consola\";\nimport { prepareLayers, generateLayerAliases } from \"@kimesh/layers\";\nimport type { ResolvedLayer } from \"@kimesh/layers\";\nimport type { KimeshConfig } from \"./types\";\nimport { loadConfig } from \"./config\";\nimport { buildAliases } from \"./kit/alias-utils\";\nimport { writeTsConfig } from \"./kit/tsconfig-generator\";\n\n/**\n * Options for the prepare function\n */\nexport interface PrepareOptions {\n /** Root directory of the project */\n root?: string;\n /** Path to kimesh.config file */\n configFile?: string;\n /** Enable verbose logging */\n verbose?: boolean;\n}\n\n/**\n * Result of the prepare function\n */\nexport interface PrepareResult {\n /** Path to the .kimesh directory */\n buildDir: string;\n /** Number of layers resolved */\n layerCount: number;\n /** Number of aliases configured */\n aliasCount: number;\n /** Files that were generated */\n generatedFiles: string[];\n}\n\n/**\n * Prepare the .kimesh directory for TypeScript support\n *\n * This function generates all necessary files in the .kimesh directory\n * to enable TypeScript autocompletion and type checking before running\n * the dev server.\n *\n * @param options - Prepare options\n * @returns Result with generated file information\n *\n * @example\n * ```ts\n * import { prepare } from '@kimesh/kit'\n *\n * await prepare({ root: process.cwd() })\n * ```\n */\nexport async function prepare(options: PrepareOptions = {}): Promise<PrepareResult> {\n const root = resolve(options.root || process.cwd());\n const buildDir = join(root, \".kimesh\");\n const srcDir = join(root, \"src\");\n const verbose = options.verbose ?? false;\n\n const generatedFiles: string[] = [];\n\n if (verbose) {\n consola.info(`[Kimesh] Preparing project at ${root}`);\n }\n\n // Load Kimesh config\n const config = await loadConfig({\n root,\n configFile: options.configFile,\n });\n\n if (verbose) {\n consola.info(`[Kimesh] Loaded config: ${config.name || \"kimesh-app\"}`);\n }\n\n // Ensure .kimesh directory exists\n if (!existsSync(buildDir)) {\n mkdirSync(buildDir, { recursive: true });\n }\n\n // Resolve layers\n let resolvedLayers: ResolvedLayer[] = [];\n try {\n const result = await prepareLayers(root, {\n enabled: config.layers?.enabled ?? \"all\",\n excluded: config.layers?.excluded ?? [],\n });\n resolvedLayers = result as ResolvedLayer[];\n\n if (verbose) {\n consola.info(`[Kimesh] Resolved ${resolvedLayers.length} layers`);\n }\n } catch (error) {\n consola.warn(`[Kimesh] Layer resolution failed: ${error}`);\n }\n\n // Generate layer aliases\n const layerAliases = generateLayerAliases(resolvedLayers);\n\n // Build user-defined aliases from config.alias\n const userAliases = buildAliases(config, srcDir, root);\n\n // Generate internal Kimesh aliases\n const kimeshDir = resolve(root, \".kimesh\");\n const appVuePath = resolve(root, \"src/app.vue\");\n const internalAliases: Record<string, string> = {\n \"#kimesh/routes\": join(kimeshDir, \"routes.gen.ts\"),\n \"#kimesh/app\": existsSync(appVuePath)\n ? appVuePath\n : \"@kimesh/router-runtime/default-app\",\n \"#kimesh/context\": join(root, \"src\", \"app.context.ts\"),\n \"#kimesh/plugins\": join(kimeshDir, \"plugins.mjs\"),\n };\n\n // Generate TypeScript configuration\n writeTsConfig({\n rootDir: root,\n srcDir,\n buildDir,\n aliases: userAliases,\n layerAliases,\n moduleAliases: {}, // Modules not loaded in prepare\n internalAliases,\n include: [\"../src/**/*\", \"./**/*\", \"../kimesh.config.ts\"],\n exclude: [\"../node_modules\"],\n });\n generatedFiles.push(\"tsconfig.json\");\n\n if (verbose) {\n consola.success(`[Kimesh] Generated .kimesh/tsconfig.json`);\n }\n\n // Generate stub routes.gen.ts (will be regenerated by dev/build)\n const routesStubPath = join(buildDir, \"routes.gen.ts\");\n if (!existsSync(routesStubPath)) {\n const routesStub = `/**\n * Kimesh Routes - Auto-generated\n *\n * This file is a stub generated by 'km prepare'.\n * It will be populated with actual routes when running 'km dev' or 'km build'.\n *\n * DO NOT EDIT - This file is regenerated automatically.\n */\n\nimport type { RouteRecordRaw } from 'vue-router'\n\nexport const routes: RouteRecordRaw[] = []\n`;\n writeFileSync(routesStubPath, routesStub, \"utf-8\");\n generatedFiles.push(\"routes.gen.ts\");\n\n if (verbose) {\n consola.success(`[Kimesh] Generated .kimesh/routes.gen.ts (stub)`);\n }\n }\n\n // Generate stub plugins.mjs\n const pluginsStubPath = join(buildDir, \"plugins.mjs\");\n if (!existsSync(pluginsStubPath)) {\n const pluginsStub = `/**\n * Kimesh Plugins - Auto-generated\n *\n * This file is a stub generated by 'km prepare'.\n * It will be populated with actual plugins when running 'km dev' or 'km build'.\n *\n * DO NOT EDIT - This file is regenerated automatically.\n */\n\nexport default []\n`;\n writeFileSync(pluginsStubPath, pluginsStub, \"utf-8\");\n generatedFiles.push(\"plugins.mjs\");\n\n if (verbose) {\n consola.success(`[Kimesh] Generated .kimesh/plugins.mjs (stub)`);\n }\n }\n\n // Generate modules.ts for type augmentation\n const modulesPath = join(buildDir, \"modules.ts\");\n const moduleNames = extractModuleNames(config.modules);\n if (moduleNames.length > 0) {\n const imports = moduleNames.map((name) => `import \"${name}\";`).join(\"\\n\");\n const references = moduleNames\n .map((name) => `/// <reference path=\"../node_modules/${name}/augment.d.ts\" />`)\n .join(\"\\n\");\n\n const modulesContent = `/**\n * Module type declarations - Auto-generated by Kimesh\n *\n * DO NOT EDIT - This file is regenerated when modules change.\n */\n\n${references}\n\n${imports}\n`;\n writeFileSync(modulesPath, modulesContent, \"utf-8\");\n generatedFiles.push(\"modules.ts\");\n\n if (verbose) {\n consola.success(`[Kimesh] Generated .kimesh/modules.ts`);\n }\n }\n\n // Generate context.d.ts if app.context.ts exists\n const contextPath = join(root, \"src\", \"app.context.ts\");\n if (existsSync(contextPath)) {\n const contextTypesPath = join(buildDir, \"context.d.ts\");\n const contextTypes = `/**\n * Kimesh Context Types - Auto-generated\n *\n * DO NOT EDIT - This file is regenerated automatically.\n */\n\nimport type { AppContext as UserAppContext } from '../src/app.context'\n\ndeclare module '@kimesh/router-runtime' {\n interface AppContext extends UserAppContext {}\n}\n`;\n writeFileSync(contextTypesPath, contextTypes, \"utf-8\");\n generatedFiles.push(\"context.d.ts\");\n\n if (verbose) {\n consola.success(`[Kimesh] Generated .kimesh/context.d.ts`);\n }\n }\n\n // Generate auto-imports.d.ts stub\n const autoImportsPath = join(buildDir, \"auto-imports.d.ts\");\n if (!existsSync(autoImportsPath)) {\n const autoImportsStub = `/**\n * Kimesh Auto-Imports - Auto-generated\n *\n * This file is a stub generated by 'km prepare'.\n * It will be populated with actual imports when running 'km dev' or 'km build'.\n *\n * DO NOT EDIT - This file is regenerated automatically.\n */\n\nexport {}\n\ndeclare global {\n // Vue imports will be auto-detected\n const ref: typeof import('vue')['ref']\n const reactive: typeof import('vue')['reactive']\n const computed: typeof import('vue')['computed']\n const watch: typeof import('vue')['watch']\n const watchEffect: typeof import('vue')['watchEffect']\n const onMounted: typeof import('vue')['onMounted']\n const onUnmounted: typeof import('vue')['onUnmounted']\n const defineProps: typeof import('vue')['defineProps']\n const defineEmits: typeof import('vue')['defineEmits']\n const withDefaults: typeof import('vue')['withDefaults']\n\n // Vue Router imports\n const useRoute: typeof import('vue-router')['useRoute']\n const useRouter: typeof import('vue-router')['useRouter']\n}\n`;\n writeFileSync(autoImportsPath, autoImportsStub, \"utf-8\");\n generatedFiles.push(\"auto-imports.d.ts\");\n\n if (verbose) {\n consola.success(`[Kimesh] Generated .kimesh/auto-imports.d.ts (stub)`);\n }\n }\n\n // Generate components.d.ts stub\n const componentsPath = join(buildDir, \"components.d.ts\");\n if (!existsSync(componentsPath)) {\n const componentsStub = `/**\n * Kimesh Components - Auto-generated\n *\n * This file is a stub generated by 'km prepare'.\n * It will be populated with actual components when running 'km dev' or 'km build'.\n *\n * DO NOT EDIT - This file is regenerated automatically.\n */\n\nexport {}\n\ndeclare module 'vue' {\n export interface GlobalComponents {\n // Component types will be populated by auto-import\n }\n}\n`;\n writeFileSync(componentsPath, componentsStub, \"utf-8\");\n generatedFiles.push(\"components.d.ts\");\n\n if (verbose) {\n consola.success(`[Kimesh] Generated .kimesh/components.d.ts (stub)`);\n }\n }\n\n const aliasCount = Object.keys(userAliases).length +\n Object.keys(layerAliases).length +\n Object.keys(internalAliases).length;\n\n return {\n buildDir,\n layerCount: resolvedLayers.length,\n aliasCount,\n generatedFiles,\n };\n}\n\n/**\n * Extract module names from config (filters out inline module objects)\n */\nfunction extractModuleNames(modules: KimeshConfig[\"modules\"]): string[] {\n if (!modules) {\n return [];\n }\n\n const names: string[] = [];\n for (const mod of modules) {\n if (typeof mod === \"string\") {\n names.push(mod);\n } else if (Array.isArray(mod) && typeof mod[0] === \"string\") {\n names.push(mod[0]);\n }\n }\n return names;\n}\n"],"mappings":"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"}