vue2TemplateCompiler.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.compile = void 0;
  4. const CompilerDOM = require("@vue/compiler-dom");
  5. const Vue2TemplateCompiler = require('vue-template-compiler/build');
  6. function compile(template, options = {}) {
  7. const onError = options.onError;
  8. const onWarn = options.onWarn;
  9. options.onError = (error) => {
  10. if (error.code === 33 // :key binding allowed in v-for template child in vue 2
  11. || error.code === 29 // fix https://github.com/vuejs/language-tools/issues/1638
  12. ) {
  13. return;
  14. }
  15. if (onError) {
  16. onError(error);
  17. }
  18. else {
  19. throw error;
  20. }
  21. };
  22. const vue2Result = Vue2TemplateCompiler.compile(template, { outputSourceRange: true });
  23. for (const error of vue2Result.errors) {
  24. onError?.({
  25. code: 'vue-template-compiler',
  26. name: '',
  27. message: error.msg,
  28. loc: {
  29. source: '',
  30. start: { column: -1, line: -1, offset: error.start },
  31. end: { column: -1, line: -1, offset: error.end ?? error.start },
  32. },
  33. });
  34. }
  35. for (const error of vue2Result.tips) {
  36. onWarn?.({
  37. code: 'vue-template-compiler',
  38. name: '',
  39. message: error.msg,
  40. loc: {
  41. source: '',
  42. start: { column: -1, line: -1, offset: error.start },
  43. end: { column: -1, line: -1, offset: error.end ?? error.start },
  44. },
  45. });
  46. }
  47. return baseCompile(template, Object.assign({}, CompilerDOM.parserOptions, options, {
  48. nodeTransforms: [
  49. ...CompilerDOM.DOMNodeTransforms,
  50. ...(options.nodeTransforms || [])
  51. ],
  52. directiveTransforms: Object.assign({}, CompilerDOM.DOMDirectiveTransforms, options.directiveTransforms || {}),
  53. }));
  54. }
  55. exports.compile = compile;
  56. function baseCompile(template, options = {}) {
  57. const onError = options.onError || ((error) => { throw error; });
  58. const isModuleMode = options.mode === 'module';
  59. const prefixIdentifiers = options.prefixIdentifiers === true || isModuleMode;
  60. if (!prefixIdentifiers && options.cacheHandlers) {
  61. onError(CompilerDOM.createCompilerError(49));
  62. }
  63. if (options.scopeId && !isModuleMode) {
  64. onError(CompilerDOM.createCompilerError(50));
  65. }
  66. const ast = CompilerDOM.baseParse(template, options);
  67. const [nodeTransforms, directiveTransforms] = CompilerDOM.getBaseTransformPreset(prefixIdentifiers);
  68. // v-for > v-if in vue 2
  69. const transformIf = nodeTransforms[1];
  70. const transformFor = nodeTransforms[3];
  71. nodeTransforms[1] = transformFor;
  72. nodeTransforms[3] = transformIf;
  73. CompilerDOM.transform(ast, Object.assign({}, options, {
  74. prefixIdentifiers,
  75. nodeTransforms: [
  76. ...nodeTransforms,
  77. ...(options.nodeTransforms || []) // user transforms
  78. ],
  79. directiveTransforms: Object.assign({}, directiveTransforms, options.directiveTransforms || {} // user transforms
  80. )
  81. }));
  82. return CompilerDOM.generate(ast, Object.assign({}, options, {
  83. prefixIdentifiers
  84. }));
  85. }
  86. //# sourceMappingURL=vue2TemplateCompiler.js.map