index.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { parse, ParserOptions } from './parse'
  2. import { transform, TransformOptions } from './transform'
  3. import { generate, CodegenOptions, CodegenResult } from './codegen'
  4. import { RootNode } from './ast'
  5. import { isString } from '@vue/shared'
  6. export type CompilerOptions = ParserOptions & TransformOptions & CodegenOptions
  7. export function compile(
  8. template: string | RootNode,
  9. options: CompilerOptions = {}
  10. ): CodegenResult {
  11. const ast = isString(template) ? parse(template, options) : template
  12. transform(ast, {
  13. ...options,
  14. nodeTransforms: [
  15. // TODO include built-in core transforms
  16. ...(options.nodeTransforms || []) // user transforms
  17. ],
  18. directiveTransforms: {
  19. // TODO include built-in directive transforms
  20. ...(options.directiveTransforms || {}) // user transforms
  21. }
  22. })
  23. return generate(ast, options)
  24. }
  25. // Also expose lower level APIs & types
  26. export { parse, ParserOptions, TextModes } from './parse'
  27. export {
  28. transform,
  29. createStructuralDirectiveTransform,
  30. TransformOptions,
  31. TransformContext,
  32. NodeTransform as Transform,
  33. StructuralDirectiveTransform
  34. } from './transform'
  35. export {
  36. generate,
  37. CodegenOptions,
  38. CodegenContext,
  39. CodegenResult
  40. } from './codegen'
  41. export { ErrorCodes, CompilerError, createCompilerError } from './errors'
  42. export * from './ast'
  43. // debug
  44. export { prepareElementForCodegen } from './transforms/element'