transform.d.ts 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { DirectiveNode, ElementNode, Property, RootNode, ParentNode, TemplateChildNode, CompilerError, ExpressionNode, JSChildNode, CacheExpression } from '@vue/compiler-core';
  2. import { CodegenRootNode, CodegenRootScope, CodegenScope, CodegenVForScope, CodegenVForScopeInit, CodegenVIfScope, CodegenVIfScopeInit, TransformOptions } from './options';
  3. export interface ImportItem {
  4. exp: string | ExpressionNode;
  5. path: string;
  6. }
  7. export type NodeTransform = (node: RootNode | TemplateChildNode, context: TransformContext) => void | (() => void) | (() => void)[];
  8. export type DirectiveTransform = (dir: DirectiveNode, node: ElementNode, context: TransformContext, augmentor?: (ret: DirectiveTransformResult) => DirectiveTransformResult) => DirectiveTransformResult;
  9. interface DirectiveTransformResult {
  10. props: Property[];
  11. needRuntime?: boolean | symbol;
  12. }
  13. export interface ErrorHandlingOptions {
  14. onWarn?: (warning: CompilerError) => void;
  15. onError?: (error: CompilerError) => void;
  16. }
  17. export declare const enum BindingComponentTypes {
  18. SELF = "self",
  19. SETUP = "setup",
  20. UNKNOWN = "unknown"
  21. }
  22. export interface TransformContext extends Required<Omit<TransformOptions, 'filename' | 'root'>> {
  23. selfName: string | null;
  24. currentNode: RootNode | TemplateChildNode | null;
  25. parent: ParentNode | null;
  26. childIndex: number;
  27. helpers: Map<symbol, number>;
  28. components: Set<string>;
  29. imports: ImportItem[];
  30. bindingComponents: Record<string, {
  31. type: BindingComponentTypes;
  32. name: string;
  33. }>;
  34. identifiers: {
  35. [name: string]: number | undefined;
  36. };
  37. cached: number;
  38. scopes: {
  39. vFor: number;
  40. vueId: number;
  41. };
  42. scope: CodegenRootScope;
  43. currentScope: CodegenScope;
  44. currentVueId: string;
  45. vueIds: string[];
  46. inVOnce: boolean;
  47. inVFor: boolean;
  48. helper<T extends symbol>(name: T): T;
  49. removeHelper<T extends symbol>(name: T): void;
  50. helperString(name: symbol): string;
  51. replaceNode(node: TemplateChildNode): void;
  52. removeNode(node?: TemplateChildNode): void;
  53. onNodeRemoved(): void;
  54. addIdentifiers(exp: ExpressionNode | string): void;
  55. removeIdentifiers(exp: ExpressionNode | string): void;
  56. popScope(): CodegenScope | undefined;
  57. getScopeIndex(scope: CodegenScope): number;
  58. addVIfScope(initScope: CodegenVIfScopeInit): CodegenVIfScope;
  59. addVForScope(initScope: CodegenVForScopeInit): CodegenVForScope;
  60. cache<T extends JSChildNode>(exp: T, isVNode?: boolean): CacheExpression | T;
  61. isMiniProgramComponent(name: string): 'plugin' | 'component' | 'dynamicLib' | 'ext' | undefined;
  62. rootNode: TemplateChildNode | null;
  63. }
  64. export declare function isRootScope(scope: CodegenScope): scope is CodegenRootScope;
  65. export declare function isVIfScope(scope: CodegenScope): scope is CodegenVIfScope;
  66. export declare function isVForScope(scope: CodegenScope): scope is CodegenVForScope;
  67. export declare function isScopedSlotVFor({ source }: CodegenVForScope): boolean;
  68. export declare function transform(root: CodegenRootNode, options: TransformOptions): TransformContext;
  69. export declare function traverseNode(node: RootNode | TemplateChildNode, context: TransformContext): void;
  70. export declare function traverseChildren(parent: ParentNode, context: TransformContext): void;
  71. export declare function createTransformContext(rootNode: RootNode, { root, filename, isTS, inline, hashId, scopeId, filters, bindingCssVars, bindingMetadata, cacheHandlers, prefixIdentifiers, skipTransformIdentifier, renderDataSpread, nodeTransforms, directiveTransforms, miniProgram, isBuiltInComponent, isCustomElement, expressionPlugins, onError, onWarn, }: TransformOptions): TransformContext;
  72. export declare type StructuralDirectiveTransform = (node: ElementNode, dir: DirectiveNode, context: TransformContext) => void | (() => void);
  73. export declare function createStructuralDirectiveTransform(name: string | RegExp, fn: StructuralDirectiveTransform): NodeTransform;
  74. export {};