import { PagesConfig } from '@uni-helper/uni-pages-types'; export { Condition, EasyCom, GlobalStyle, PageMetaDatum, PagesConfig, SubPackage, TabBar, TabBarItem } from '@uni-helper/uni-pages-types'; import { UserUniPresetOptions } from '@uni-helper/unocss-preset-uni'; export { UserUniPresetOptions, presetUni } from '@uni-helper/unocss-preset-uni'; import { Options, ComponentResolver } from '@uni-helper/vite-plugin-uni-components'; export { ComponentInfo, ComponentResolver, Options as ComponentsOptions, ResolvedOptions as ComponentsResolvedOptions, ImportInfo, default as VitePluginUniComponents, camelCase, kebabCase, pascalCase } from '@uni-helper/vite-plugin-uni-components'; import { UserManifestConfig } from '@uni-helper/vite-plugin-uni-manifest'; import { UserOptions } from '@uni-helper/vite-plugin-uni-pages'; export { PageContext, PagePath, UserOptions as PagesPluginOptions, ResolvedOptions as PagesResolvedOptions, SubPageMetaDatum, VitePluginUniPages, definePage } from '@uni-helper/vite-plugin-uni-pages'; import { IOptions } from '@uni-ku/bundle-optimizer'; import { ConfigBase } from 'unocss'; export { ConfigBase as UnoCSSConfigBase } from 'unocss'; import { Options as Options$1 } from 'unplugin-auto-import/types'; export { Options as AutoImportOptions } from 'unplugin-auto-import/types'; import { ViteDevServer, PluginOption } from 'vite'; export { R as RootInstance } from './hooks-ezCBdo8t.js'; export { VitePluginUniLayouts } from '@uni-helper/vite-plugin-uni-layouts'; export { default as UniKuRoot } from '@uni-ku/root'; export { default as AutoImport } from 'unplugin-auto-import/vite'; import 'vue'; interface ManifestOptions { /** * minify the `manifest.json` * @default false */ minify: boolean; /** * insert newline at the end of the `manifest.json` * @default false */ insertFinalNewline: boolean; /** * Resolve configuration from this working directory. * @default process.env.VITE_ROOT_DIR */ cwd?: string; /** * Merge the manifest config with the default config. * @default false */ merge?: boolean; } /** User-facing options — all fields are optional. */ interface UserManifestOptions extends Partial { } /** * Layouts 模块底层选项(用于 overrides) */ interface LayoutsOptions { layout?: string; layoutDir?: string; cwd?: string; } /** * Root 模块底层选项(用于 overrides) */ interface RootOptions { enabledVirtualHost?: boolean; enabledGlobalRef?: boolean; rootFileName?: string; excludePages?: string | string[]; } /** * UnoCSS 模块底层选项(用于 overrides) */ interface UnoCSSOptions extends ConfigBase { } /** * 底层插件逃生口 * * 高级用户可通过此字段直接覆盖底层插件选项,优先级最高。 * 90% 场景下不需要使用此字段,请优先使用上层融合约定。 */ interface UnivaOverrides { /** @uni-helper/vite-plugin-uni-pages 完整选项 */ pages?: UserOptions; /** @uni-helper/vite-plugin-uni-layouts 完整选项 */ layouts?: LayoutsOptions; /** @uni-helper/vite-plugin-uni-components 完整选项 */ components?: Options; /** @uni-ku/root 完整选项 */ root?: RootOptions; /** unplugin-auto-import 完整选项 */ autoImport?: Options$1; /** unocss/vite 完整选项 */ unocss?: UnoCSSOptions; /** @uni-helper/vite-plugin-uni-manifest 完整选项 */ manifest?: UserManifestOptions; /** @uni-ku/bundle-optimizer 完整选项 */ optimization?: IOptions; } /** * 目录约定(相对 srcDir) */ interface UnivaDirs { /** 主包页面目录,默认 'pages' */ pages?: string; /** 手动分包列表(相对 srcDir),与自动扫描结果合并 */ subPackages?: string[]; /** 分包裹目录名(其下每个一级子目录注册为一个分包),默认 'app' */ subPackageDir?: string; /** 异步组件分包裹目录名(其下分包页面自动关闭 layout),默认 'components-async' */ componentsAsyncDir?: string; /** 布局目录,默认 'layouts' */ layouts?: string; } interface UnivaUnocss { /** 是否开启兼容模式,默认 false */ presetLegacyCompat?: boolean; uniPreset?: UserUniPresetOptions; safelist?: string[]; themeColors?: Record; } /** * 自动导入配置 */ interface UnivaImports { /** * 自动导入源,统一配置预设导入与目录扫描 * * 支持三种形式: * - 预设名(字符串):`'vue'`、`'uni-app'`、`'pinia'`、`'@vueuse/core'` * - 目录 glob(字符串):`'composables/**'`、`'stores/**'`(相对 srcDir) * - 支持 negation 前缀 `!` 排除特定路径 * - inline preset(对象):`{ from: 'wot-design-uni', imports: ['useToast'] }` * - 或命名导入映射:`{ '@fun-design/use': ['useState', 'useVModel'] }` * * 内部自动区分:含 glob 字符或路径分隔符的字符串 → 目录扫描,否则 → 预设导入。 * 对象形式统一作为 inline preset 传给 unplugin-auto-import。 */ apis?: Array>; /** * 组件自动导入源,统一配置目录扫描与第三方解析器 * * 支持两种形式: * - 目录 glob(字符串):`'components'`、`'components-biz/**'`(相对 srcDir) * - 支持 negation 前缀 `!` 排除特定路径 * - 组件解析器(resolver):按需导入第三方组件库,如 `WotResolver()` * - resolver 函数返回单个或数组均可,无需手动展开 * * 内部自动区分:字符串 → 目录扫描,其他 → resolvers。 */ components?: Array; } /** * 解析后的目录约定(字段必填,路径已归一化为相对 root 的最终形态) */ interface ResolvedUnivaDirs { /** 主包页面目录(相对 root,如 'src/pages') */ pages: string; /** 布局目录(相对 root) */ layouts: string; /** 分包目录列表(相对 root,已合并用户配置与自动扫描) */ subPackages: string[]; /** 分包裹目录名(相对 srcDir,已应用默认值) */ subPackageDir: string; /** 异步组件分包裹目录名(相对 srcDir,已应用默认值) */ componentsAsyncDir: string; } interface ResolvedUnivaUnocss { presetLegacyCompat: boolean; uniPreset: UserUniPresetOptions; safelist: string[]; themeColors: Record; } /** * 解析后的自动导入配置(字段必填,源已完成拆分、路径已拼接) */ interface ResolvedUnivaImports { /** 预设导入与 inline preset(unplugin-auto-import 的 imports) */ apiPresets: Array>; /** API 目录扫描(已含 srcDir 前缀与默认值,unplugin-auto-import 的 dirs) */ apiDirs: string[]; /** 组件目录扫描(已含 srcDir 前缀与默认值) */ componentDirs: string[]; /** 组件解析器(已扁平化) */ componentResolvers: ComponentResolver[]; } /** * Univa 统一配置接口(工程级约定) * * 用于 univa.config.ts,声明项目工程结构、自动导入约定与应用级配置。 */ interface UnivaOptions { /** 源码目录,相对 Vite root,默认 'src' */ srcDir?: string; /** 开启调试日志,默认 false */ debug?: boolean; /** 目录约定,相对 srcDir */ dirs?: UnivaDirs; /** 自动导入配置 */ imports?: UnivaImports; /** * 应用级 pages.json 配置(globalStyle / tabBar 等) * * Univa 会读取此字段自动生成 .univa/pages.ts, * 供 VitePluginUniPages 消费。 * * 注意:pages / subPackages 由目录扫描自动填充,请勿在此手写。 */ pages?: Partial; /** 应用级 manifest.json 配置 */ manifest?: Partial; unocss?: UnivaUnocss; /** 底层插件逃生口(覆盖融合层默认,高级用户使用) */ overrides?: UnivaOverrides; } /** * 解析后的完整配置(内部使用) * * resolveOptions 的产出物,所有字段均为确定值: * - 可选字段已应用默认值,下游无需 `??` 防御 * - 目录路径已归一化为相对 root 的最终形态,下游无需拼接 * * 与 UnivaOptions 的关系:不再继承/展开用户配置,显式声明全部字段。 */ interface ResolvedOptions { /** 项目根目录(Vite root,绝对路径) */ root: string; /** 是否开启调试日志 */ debug: boolean; /** 源码目录(相对 root) */ srcDir: string; /** 源码目录绝对路径 */ srcDirAbs: string; /** 目录约定(已应用默认值、自动扫描、路径归一化) */ dirs: ResolvedUnivaDirs; /** 自动导入配置(已应用默认值、源拆分、路径拼接) */ imports: ResolvedUnivaImports; /** UnoCSS 配置(已应用默认值) */ unocss: ResolvedUnivaUnocss; /** 应用级 pages.json 配置(默认 {}) */ pages: Partial; /** 应用级 manifest 配置 */ manifest?: Partial; /** 底层插件逃生口(默认 {}) */ overrides: UnivaOverrides; } /** * 插件模块生命周期 hooks * * 每个插件模块(pages/manifest/...)通过 RegisterPluginHooks 注册, * 由 UnivaContext 在配置变化时统一通知,各模块独立处理、互不影响。 */ interface UnivaPluginHooks { /** * univa.config.ts 变化并重新解析后调用 * * 模块在此回调中更新自己负责的生成文件(.univa/pages-config.ts 等), * 单个模块抛错只记录日志,不影响其他模块与构建流程。 */ onConfigUpdate?: (resolved: ResolvedOptions) => void | Promise; } /** hooks 注册器,由 UnivaContext 提供 */ type RegisterPluginHooks = (hooks: UnivaPluginHooks) => void; /** * 声明 Univa 工程级约定 * * 用于 `univa.config.ts`,声明项目工程结构、自动导入约定与应用级配置。 */ declare function defineConfig(config: UnivaOptions): UnivaOptions; /** * Univa Context * * 配置生命周期编排者:加载 → 解析 → 分发。只做编排,不实现细节: * - 加载/解析委托 config 域(loader / resolve) * - 监听 univa.config.ts 变化,通知所有注册了 onConfigUpdate 的插件模块 * - 触发 HMR 全量刷新 * * 生成文件(.univa/pages-config.ts 等)由各插件模块自治维护, * 单个模块更新失败只记录日志,不影响其他模块。 */ declare class UnivaContext { private _server; private _config?; private _configPath?; private _resolved?; private _pluginHooks; /** 项目根目录(Vite root) */ root: string; constructor(options: { root: string; }); /** * 注册插件模块 hooks * * 由各 createXxxPlugin 模块调用,配置变化时逐一通知。 */ addPluginHooks(hooks: UnivaPluginHooks): void; /** 创建 hooks 注册器(传入各插件模块) */ createHookRegistrar(): (hooks: UnivaPluginHooks) => void; /** 加载配置(初始化与热更新共用,失败回退默认约定) */ loadUserConfig(): void; /** * 解析配置 * * 加载完成后统一收口:存储原始配置 → resolveOptions 产出"全熟"配置 → 同步 debug 开关。 */ resolveConfig(userConfig: UnivaOptions, configFile?: string): void; /** 获取解析后的配置 */ get resolveUserOptions(): ResolvedOptions | undefined; /** 获取原始配置 */ get config(): UnivaOptions | undefined; /** 获取配置文件路径 */ get configPath(): string | undefined; /** * 设置 Vite 开发服务器 * * 监听配置文件变化,触发重新加载 */ setupViteServer(server: ViteDevServer): void; /** * 设置文件监听器 * * 监听 univa.config.ts 变化:重新加载配置 → 通知各插件模块 → 触发 HMR */ setupWatcher(watcher: ViteDevServer['watcher']): void; /** * 更新配置 * * 配置文件变化时:重新加载配置 → 通知所有插件模块 → 触发 HMR */ updateConfig(): Promise; /** * 通知所有插件模块配置已更新 * * 各模块独立处理(try/catch 隔离),互不影响。 */ applyPluginHooks(): Promise; /** * 触发 HMR * * 配置变化后通知浏览器刷新 */ onUpdate(): void; } /** * 创建所有 Univa 插件 * * 每个模块从 resolved options 中提取自己的约定并自行拼装底层插件选项, * 合并 overrides(优先级最高)。全部模块默认启用。 * * 需要维护生成文件的模块(pages/manifest)通过 on 注册配置更新 hooks, * 由 context 在 univa.config.ts 变化时统一通知,互不影响。 * * 所有路径均为相对 Vite root 的格式,由底层插件自行解析为绝对路径。 */ declare function createUnivaPlugins(resolved: ResolvedOptions, context: UnivaContext): PluginOption[]; /** * Univa 插件入口函数(零参数) * * 工程约定与应用配置通过 `univa.config.ts` 声明, * `.univa/pages-config.ts` 等产物由各模块自动生成与维护。 * * @example * // vite.config.ts * import { Univa } from '@univa/core' * export default defineConfig({ * plugins: [...Univa()], * }) */ declare function Univa(): PluginOption[]; export { type LayoutsOptions, type RegisterPluginHooks, type ResolvedOptions, type ResolvedUnivaDirs, type ResolvedUnivaImports, type ResolvedUnivaUnocss, type RootOptions, Univa, type UnivaDirs, type UnivaImports, type UnivaOptions, type UnivaOverrides, type UnivaPluginHooks, type UnivaUnocss, type UnoCSSOptions, createUnivaPlugins, defineConfig };