UNPKG

vusion-api

Version:
190 lines (189 loc) 5.67 kB
import { default as TemplateHandler, TemplateOptions } from '../fs/TemplateHandler'; import ScriptHandler from '../fs/ScriptHandler'; import StyleHandler from '../fs/StyleHandler'; import PackageJSON from '../types/PackageJSON'; /** * 用于处理单/多 Vue 文件的类 * * ### 主要功能 * * #### 打开:一般分为四个阶段 * - const vueFile = new VueFile(fullPath); // 根据路径创建对象,可以为虚拟路径。 * - await vueFile.preOpen(); // 异步方法。获取 isDirectory,获取子组件、标题信息。 * - await vueFile.open(); // 异步方法。如果已经打开则不会重新打开,如果没有 preOpen 会先执行 preOpen。获取常用操作的内容块:script, template, style, api, examples, definition, package。 * - vueFile.parseAll(); // 解析全部内容块 * * #### 保存: * - await vueFile.save(); * - 如果有解析,先根据解析器 generate() 内容,再保存 * - 根据 isDirectory 判断是否保存单多文件 * * #### 另存为: * - await vueFile.saveAs(fullPath); */ export default class VueFile { fullPath: string; filePath: string; isOpen: boolean; /** * 标签名称/中划线名称 */ tagName: string; /** * import 组件名称/大驼峰名称 */ componentName: string; /** * 别名,用于信息提示等 */ alias: string; /** * 单文件读取的内容,或者 generate() 后的内容 * 为`undefined`表示未打开过 */ content: string; template: string; script: string; style: string; api: string; examples: string; definition: string; package: PackageJSON; /** * 模板处理器 * 为`undefined`表示还未解析 */ templateHandler: TemplateHandler; /** * Alias of templateHandler */ $html: TemplateHandler; /** * 脚本处理器 * 为`undefined`表示还未解析 */ scriptHandler: ScriptHandler; /** * Alias of scriptHandler */ $js: ScriptHandler; /** * 样式处理器 * 为`undefined`表示还未解析 */ styleHandler: StyleHandler; /** * Alias of styleHandler */ $css: StyleHandler; /** * API 处理器 */ /** * 文档示例处理器 */ /** * 定义处理器 */ definitionHandler: void; /** * @param filePath Vue 文件路径,在浏览器模式中仅作记录 * @param content Vue 的内容 */ constructor(filePath: string, content: string); /** * 提前打开 * 检测 VueFile 文件类型,以及子组件等 * 一般用于在列表中快速获取信息,相比直接 open 读取文件内容来说,少耗一些性能 */ preOpen(): Promise<void>; open(): Promise<void>; /** * 强制重新打开 */ forceOpen(): Promise<void>; /** * 关闭文件 */ close(): void; /** * 加载所有内容 */ protected load(): Promise<void>; /** * 预加载 * 只加载 content */ preload(): Promise<void>; loadScript(): Promise<string>; loadTemplate(): Promise<string>; loadStyle(): Promise<string>; loadAPI(): Promise<string>; loadExamples(from?: string): Promise<void>; loadDefinition(): Promise<string>; /** * 是否有模板 * @param simplify 简化模式。在此模式下,`<div></div>`视为没有模板 */ hasTemplate(simplify: boolean): boolean; /** * 是否有 JS 脚本 * @param simplify 简化模式。在此模式下,`export default {};`视为没有 JS 脚本 */ hasScript(simplify: boolean): boolean; /** * 是否有 CSS 样式 * @param simplify 简化模式。在此模式下,`.root {}`视为没有 CSS 样式 */ hasStyle(simplify: boolean): boolean; warnIfNotOpen(): void; parseAll(): void; parseTemplate(): TemplateHandler; parseScript(): ScriptHandler; parseStyle(): StyleHandler; generate(options?: TemplateOptions): string; /** * 克隆 VueFile 对象 * 克隆所有参数,但 handler 引用会被排除 */ clone(): VueFile; /** * await vueFile.save(); * 仅依赖 this.fullPath 和 this.isDirectory 两个变量 * - 如果有解析,先根据解析器生成内容,再保存 * - 根据 isDirectory 判断是否保存单多文件 */ save(): Promise<void>; /** * 另存为,保存到另一个路径 * 会克隆所有内容参数,但 handler 引用会被排除 * @param fullPath */ saveAs(fullPath: string): Promise<void>; /** * 与另一个 Vue 文件合并模板、逻辑和样式 * 两个 VueFile 必须先 parseAll() * @param that 另一个 VueFile * @param route 插入的节点路径,最后一位表示节点位置,为空表示最后,比如 /1/2/1 表示插入到根节点的第1个子节点的第2个子节点的第1个位置 * - merge(that, '') 指根节点本身 * - merge(that, '/') 指根节点本身 * - merge(that, '/0') 指第0个子节点 * - merge(that, '/2/1') 指第2个子节点的第1个子节点 * - merge(that, '/2/') 指第2个子节点的最后 */ merge(that: VueFile, route?: string | number | { line: number; character: number; }): { class: { [old: string]: string; }; }; mergeDefinition(that: VueFile): { [key: string]: { [old: string]: string; }; }; private static _splitPath; static resolveTagName(fullPath: string): string; }