@vtj/renderer
Version:
VTJ 是一款基于 Vue3 + Typescript 的低代码页面可视化设计器。内置低代码引擎、渲染器和代码生成器,面向前端开发者,开箱即用。 无缝嵌入本地开发工程,不改变前端开发流程和编码习惯。
174 lines (173 loc) • 6.05 kB
TypeScript
import { App, InjectionKey } from 'vue';
import { Router, RouteRecordName, RouteMeta } from 'vue-router';
import { ProjectSchema, PageFile, BlockFile, Service, BlockSchema, NodeFromPlugin, GlobalConfig, I18nConfig, EnvConfig, Base } from '@vtj/core';
import { ContextMode } from '../constants';
import { CreateRendererOptions } from '../render';
import { ProvideAdapter } from './defaults';
import { InitGlobalsOptions } from './globals';
import { MenuDataItem } from '@vtj/ui';
import { Context } from '..';
export declare const providerKey: InjectionKey<Provider>;
export interface ProviderOptions {
service: Service;
project?: Partial<ProjectSchema>;
modules?: Record<string, () => Promise<any>>;
mode?: ContextMode;
adapter?: Partial<ProvideAdapter>;
router?: Router;
dependencies?: Record<string, () => Promise<any>>;
materials?: Record<string, () => Promise<any>>;
libraryOptions?: Record<string, any>;
globals?: Record<string, any>;
materialPath?: string;
nodeEnv?: NodeEnv;
install?: (app: App) => void;
routeAppendTo?: RouteRecordName;
pageRouteName?: string;
routeMeta?: RouteMeta;
enhance?: (app: App, provider: Provider) => void;
vtjDir?: string;
vtjRawDir?: string;
enableStaticRoute?: boolean;
}
export declare enum NodeEnv {
Production = "production",
Development = "development"
}
/**
* Provider 类是应用的核心提供者,负责:
* - 管理项目配置和状态
* - 加载依赖和资源
* - 初始化路由
* - 提供全局API和服务
*/
export declare class Provider extends Base {
options: ProviderOptions;
mode: ContextMode;
globals: Record<string, any>;
modules: Record<string, () => Promise<any>>;
adapter: ProvideAdapter;
apis: Record<string, (...args: any[]) => Promise<any>>;
dependencies: Record<string, () => Promise<any>>;
materials: Record<string, () => Promise<any>>;
library: Record<string, any>;
libraryLocales: Record<string, any>;
libraryLocaleMap: Record<string, string>;
service: Service;
project: ProjectSchema | null;
components: Record<string, any>;
nodeEnv: NodeEnv;
env: Record<string, string>;
private router;
private materialPath;
private urlDslCaches;
/**
* 创建Provider实例
* @param options 配置选项
*/
constructor(options: ProviderOptions);
createMock(func: (...args: any) => any): (...args: any[]) => Promise<any>;
/**
* 加载项目配置并初始化
* 1. 从模块或服务加载项目配置
* 2. 根据运行模式加载依赖或资源
* 3. 初始化Mock数据
* 4. 创建API接口
* 5. 初始化路由(非uniapp平台)
* @param project 项目配置
*/
load(project: ProjectSchema): Promise<void>;
initMock(global?: any): void;
private loadDependencies;
private loadAssets;
private initRouter;
/**
* Vue 插件安装方法
* 1. 安装所有第三方库插件
* 2. 执行自定义安装函数(如果提供)
* 3. 安装访问适配器
* 4. 提供全局 Provider 实例
* 5. 设计模式下设置错误处理器
* 6. 执行增强函数(如果提供)
* @param app Vue 应用实例
*/
install(app: App): void;
getFile(id: string): PageFile | BlockFile | null;
getPage(id: string): PageFile | null;
getMenus(name?: string, prefix?: string): MenuDataItem[];
getHomepage(): PageFile | null;
getDsl(id: string): Promise<BlockSchema | null>;
getDslByUrl(url: string): Promise<BlockSchema | null>;
/**
* 创建 DSL 渲染器
* 1. 合并默认选项和自定义选项
* 2. 创建 DSL 加载器
* 3. 返回渲染器实例
* @param dsl 区块 DSL 配置
* @param opts 渲染选项
* @returns 渲染器实例
*/
createDslRenderer(dsl: BlockSchema, opts?: Partial<CreateRendererOptions>): {
renderer: any;
context: Context;
};
/**
* 获取渲染组件
* 1. 根据ID查找文件(页面或区块)
* 2. 如果找到文件且提供了output回调,则调用它
* 3. 尝试从模块缓存加载原始Vue组件
* 4. 如果找不到原始组件,则获取DSL并创建渲染器
* @param id 文件ID
* @param output 找到文件时的回调函数
* @returns Promise<Vue组件>
*/
getRenderComponent(id: string, output?: (file: BlockFile | PageFile) => void): Promise<any>;
/**
* 定义基于URL的异步组件
* 1. 根据URL获取DSL配置
* 2. 如果获取成功,设置组件名称
* 3. 创建并返回DSL渲染器
* @param url DSL配置URL
* @param name 可选的自定义组件名称
* @returns Vue异步组件
*/
defineUrlSchemaComponent(url: string, name?: string): any;
/**
* 定义基于插件的异步组件
* 1. 根据插件来源获取插件实例
* 2. 返回插件组件
* @param from 插件来源配置
* @returns Vue异步组件
*/
definePluginComponent(from: NodeFromPlugin): any;
/**
* 设置应用全局
* @param css
* @param win
*/
initGlobals(globals: GlobalConfig, options: Partial<InitGlobalsOptions>): void;
initI18n(app: App, libs: Record<string, any>, i18n?: I18nConfig): void;
initEnv(envConfig?: EnvConfig[]): void;
}
/**
* 创建 Provider 实例
* @param options Provider 配置选项
* @returns 包含 provider 实例和 onReady 回调的对象
*/
export declare function createProvider(options: ProviderOptions): {
provider: Provider;
onReady: (callback: () => void) => void;
};
export interface UseProviderOptions {
id?: string;
version?: string;
}
/**
* 在组件中使用 Provider 实例
* 1. 从Vue上下文中获取注入的Provider
* 2. 开发环境下检查组件版本一致性
* @param options 使用选项
* @returns Provider 实例
* @throws 如果找不到Provider会抛出错误
*/
export declare function useProvider(options?: UseProviderOptions): Provider;