compile.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. exports.baseCompile = exports.getBaseTransformPreset = void 0;
  7. const fs_1 = __importDefault(require("fs"));
  8. const compiler_core_1 = require("@vue/compiler-core");
  9. const shared_1 = require("@vue/shared");
  10. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  11. const codegen_1 = require("./codegen");
  12. const transform_1 = require("./transform");
  13. const transformExpression_1 = require("./transforms/transformExpression");
  14. const transformIdentifier_1 = require("./transforms/transformIdentifier");
  15. const vIf_1 = require("./transforms/vIf");
  16. const vFor_1 = require("./transforms/vFor");
  17. const codegen_2 = require("./template/codegen");
  18. const vOn_1 = require("./transforms/vOn");
  19. const transformElement_1 = require("./transforms/transformElement");
  20. const vBind_1 = require("./transforms/vBind");
  21. const transformComponent_1 = require("./transforms/transformComponent");
  22. const vSlot_1 = require("./transforms/vSlot");
  23. const transformRoot_1 = require("./transforms/transformRoot");
  24. const transformTag_1 = require("./transforms/transformTag");
  25. const vHtml_1 = require("./transforms/vHtml");
  26. const vText_1 = require("./transforms/vText");
  27. const transformAttr_1 = require("./transforms/transformAttr");
  28. function getBaseTransformPreset({ prefixIdentifiers, skipTransformIdentifier, }) {
  29. // order is important
  30. const nodeTransforms = [
  31. transformRoot_1.transformRoot,
  32. transformAttr_1.transformAttr,
  33. transformTag_1.transformTag,
  34. vHtml_1.transformHtml,
  35. vText_1.transformText,
  36. vIf_1.transformIf,
  37. vFor_1.transformFor,
  38. vSlot_1.transformSlot,
  39. ];
  40. if (!skipTransformIdentifier) {
  41. nodeTransforms.push(transformIdentifier_1.transformIdentifier);
  42. }
  43. nodeTransforms.push(transformElement_1.transformElement);
  44. nodeTransforms.push(transformComponent_1.transformComponent);
  45. if (prefixIdentifiers) {
  46. nodeTransforms.push(transformExpression_1.transformExpression);
  47. }
  48. return [
  49. nodeTransforms,
  50. { on: vOn_1.transformOn, bind: vBind_1.transformBind },
  51. ];
  52. }
  53. exports.getBaseTransformPreset = getBaseTransformPreset;
  54. function baseCompile(template, options = {}) {
  55. const prefixIdentifiers = options.prefixIdentifiers === true || options.mode === 'module';
  56. const ast = ((0, shared_1.isString)(template) ? (0, compiler_core_1.baseParse)(template, options) : template);
  57. const [nodeTransforms, directiveTransforms] = getBaseTransformPreset({
  58. prefixIdentifiers,
  59. skipTransformIdentifier: options.skipTransformIdentifier === true,
  60. });
  61. options.hashId = genHashId(options);
  62. if (options.filename) {
  63. if (!options.filters && options.miniProgram?.filter) {
  64. options.filters = parseFilters(options.miniProgram.filter.lang, options.filename);
  65. }
  66. }
  67. const context = (0, transform_1.transform)(ast, (0, shared_1.extend)({}, options, {
  68. prefixIdentifiers,
  69. nodeTransforms: [...nodeTransforms, ...(options.nodeTransforms || [])],
  70. directiveTransforms: (0, shared_1.extend)({}, directiveTransforms, options.directiveTransforms || {}),
  71. }));
  72. const result = (0, shared_1.extend)((0, codegen_1.generate)((0, shared_1.extend)(ast, {
  73. bindingComponents: context.bindingComponents,
  74. }), options), { ast });
  75. if (options.filename && options.miniProgram?.emitFile) {
  76. const { class: clazz, directive, emitFile, event, slot, lazyElement, component, } = options.miniProgram;
  77. (0, codegen_2.generate)(ast, {
  78. class: clazz,
  79. scopeId: options.scopeId,
  80. filename: options.filename,
  81. directive,
  82. emitFile,
  83. event,
  84. slot,
  85. lazyElement,
  86. component,
  87. isBuiltInComponent: context.isBuiltInComponent,
  88. isMiniProgramComponent: context.isMiniProgramComponent,
  89. });
  90. }
  91. return result;
  92. }
  93. exports.baseCompile = baseCompile;
  94. function genHashId(options) {
  95. if (options.hashId) {
  96. return options.hashId;
  97. }
  98. if (options.scopeId) {
  99. return options.scopeId.replace('data-v-', '');
  100. }
  101. if (options.filename) {
  102. return (0, uni_cli_shared_1.hash)(options.filename);
  103. }
  104. return '';
  105. }
  106. function parseFilters(lang, filename) {
  107. filename = filename.split('?')[0];
  108. if (fs_1.default.existsSync(filename)) {
  109. return (0, uni_cli_shared_1.parseFilterNames)(lang, fs_1.default.readFileSync(filename, 'utf8'));
  110. }
  111. return [];
  112. }