Blame view

天文台pc/tianwentai-ui/node_modules/@babel/plugin-transform-react-jsx-self/lib/index.js 1.54 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  "use strict";
  
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  exports.default = void 0;
  var _helperPluginUtils = require("@babel/helper-plugin-utils");
  var _core = require("@babel/core");
  const TRACE_ID = "__self";
  function getThisFunctionParent(path) {
    let scope = path.scope;
    do {
      const {
        path
      } = scope;
      if (path.isFunctionParent() && !path.isArrowFunctionExpression()) {
        return path;
      }
    } while (scope = scope.parent);
    return null;
  }
  function isDerivedClass(classPath) {
    return classPath.node.superClass !== null;
  }
  function isThisAllowed(path) {
    const parentMethodOrFunction = getThisFunctionParent(path);
    if (parentMethodOrFunction === null) {
      return true;
    }
    if (!parentMethodOrFunction.isMethod()) {
      return true;
    }
    if (parentMethodOrFunction.node.kind !== "constructor") {
      return true;
    }
    return !isDerivedClass(parentMethodOrFunction.parentPath.parentPath);
  }
  var _default = exports.default = (0, _helperPluginUtils.declare)(api => {
    api.assertVersion(7);
    const visitor = {
      JSXOpeningElement(path) {
        if (!isThisAllowed(path)) {
          return;
        }
        const node = path.node;
        const id = _core.types.jsxIdentifier(TRACE_ID);
        const trace = _core.types.thisExpression();
        node.attributes.push(_core.types.jsxAttribute(id, _core.types.jsxExpressionContainer(trace)));
      }
    };
    return {
      name: "transform-react-jsx-self",
      visitor: {
        Program(path) {
          path.traverse(visitor);
        }
      }
    };
  });
  
  //# sourceMappingURL=index.js.map