transformRoot.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.transformRoot = void 0;
  4. const compiler_core_1 = require("@vue/compiler-core");
  5. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  6. const ast_1 = require("../ast");
  7. const types_1 = require("@babel/types");
  8. const codegen_1 = require("../codegen");
  9. const transformRoot = (node, context) => {
  10. if (node.type !== 0 /* NodeTypes.ROOT */) {
  11. return;
  12. }
  13. if (context.bindingCssVars.length) {
  14. node.children.forEach((child) => {
  15. if (child.type !== 1 /* NodeTypes.ELEMENT */) {
  16. return;
  17. }
  18. addCssVars(child, context);
  19. });
  20. }
  21. };
  22. exports.transformRoot = transformRoot;
  23. const CSS_VARS = '__cssVars()';
  24. function addCssVars(node, context) {
  25. const styleProp = (0, compiler_core_1.findProp)(node, 'style', true);
  26. if (!styleProp) {
  27. node.props.push((0, uni_cli_shared_1.createBindDirectiveNode)('style', CSS_VARS));
  28. }
  29. else {
  30. if (styleProp.exp?.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) {
  31. let expr = (0, ast_1.parseExpr)(styleProp.exp.content, context);
  32. if ((0, types_1.isArrayExpression)(expr)) {
  33. expr.elements.push((0, types_1.identifier)(CSS_VARS));
  34. }
  35. else {
  36. expr = (0, types_1.arrayExpression)([expr, (0, types_1.identifier)(CSS_VARS)]);
  37. }
  38. styleProp.exp.content = (0, codegen_1.genBabelExpr)(expr);
  39. }
  40. }
  41. }