index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. "use strict";
  2. exports.__esModule = true;
  3. var _keys = require("babel-runtime/core-js/object/keys");
  4. var _keys2 = _interopRequireDefault(_keys);
  5. exports.push = push;
  6. exports.hasComputed = hasComputed;
  7. exports.toComputedObjectFromClass = toComputedObjectFromClass;
  8. exports.toClassObject = toClassObject;
  9. exports.toDefineObject = toDefineObject;
  10. var _babelHelperFunctionName = require("babel-helper-function-name");
  11. var _babelHelperFunctionName2 = _interopRequireDefault(_babelHelperFunctionName);
  12. var _has = require("lodash/has");
  13. var _has2 = _interopRequireDefault(_has);
  14. var _babelTypes = require("babel-types");
  15. var t = _interopRequireWildcard(_babelTypes);
  16. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  17. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  18. function toKind(node) {
  19. if (t.isClassMethod(node) || t.isObjectMethod(node)) {
  20. if (node.kind === "get" || node.kind === "set") {
  21. return node.kind;
  22. }
  23. }
  24. return "value";
  25. }
  26. function push(mutatorMap, node, kind, file, scope) {
  27. var alias = t.toKeyAlias(node);
  28. var map = {};
  29. if ((0, _has2.default)(mutatorMap, alias)) map = mutatorMap[alias];
  30. mutatorMap[alias] = map;
  31. map._inherits = map._inherits || [];
  32. map._inherits.push(node);
  33. map._key = node.key;
  34. if (node.computed) {
  35. map._computed = true;
  36. }
  37. if (node.decorators) {
  38. var decorators = map.decorators = map.decorators || t.arrayExpression([]);
  39. decorators.elements = decorators.elements.concat(node.decorators.map(function (dec) {
  40. return dec.expression;
  41. }).reverse());
  42. }
  43. if (map.value || map.initializer) {
  44. throw file.buildCodeFrameError(node, "Key conflict with sibling node");
  45. }
  46. var key = void 0,
  47. value = void 0;
  48. if (t.isObjectProperty(node) || t.isObjectMethod(node) || t.isClassMethod(node)) {
  49. key = t.toComputedKey(node, node.key);
  50. }
  51. if (t.isObjectProperty(node) || t.isClassProperty(node)) {
  52. value = node.value;
  53. } else if (t.isObjectMethod(node) || t.isClassMethod(node)) {
  54. value = t.functionExpression(null, node.params, node.body, node.generator, node.async);
  55. value.returnType = node.returnType;
  56. }
  57. var inheritedKind = toKind(node);
  58. if (!kind || inheritedKind !== "value") {
  59. kind = inheritedKind;
  60. }
  61. if (scope && t.isStringLiteral(key) && (kind === "value" || kind === "initializer") && t.isFunctionExpression(value)) {
  62. value = (0, _babelHelperFunctionName2.default)({ id: key, node: value, scope: scope });
  63. }
  64. if (value) {
  65. t.inheritsComments(value, node);
  66. map[kind] = value;
  67. }
  68. return map;
  69. }
  70. function hasComputed(mutatorMap) {
  71. for (var key in mutatorMap) {
  72. if (mutatorMap[key]._computed) {
  73. return true;
  74. }
  75. }
  76. return false;
  77. }
  78. function toComputedObjectFromClass(obj) {
  79. var objExpr = t.arrayExpression([]);
  80. for (var i = 0; i < obj.properties.length; i++) {
  81. var prop = obj.properties[i];
  82. var val = prop.value;
  83. val.properties.unshift(t.objectProperty(t.identifier("key"), t.toComputedKey(prop)));
  84. objExpr.elements.push(val);
  85. }
  86. return objExpr;
  87. }
  88. function toClassObject(mutatorMap) {
  89. var objExpr = t.objectExpression([]);
  90. (0, _keys2.default)(mutatorMap).forEach(function (mutatorMapKey) {
  91. var map = mutatorMap[mutatorMapKey];
  92. var mapNode = t.objectExpression([]);
  93. var propNode = t.objectProperty(map._key, mapNode, map._computed);
  94. (0, _keys2.default)(map).forEach(function (key) {
  95. var node = map[key];
  96. if (key[0] === "_") return;
  97. var inheritNode = node;
  98. if (t.isClassMethod(node) || t.isClassProperty(node)) node = node.value;
  99. var prop = t.objectProperty(t.identifier(key), node);
  100. t.inheritsComments(prop, inheritNode);
  101. t.removeComments(inheritNode);
  102. mapNode.properties.push(prop);
  103. });
  104. objExpr.properties.push(propNode);
  105. });
  106. return objExpr;
  107. }
  108. function toDefineObject(mutatorMap) {
  109. (0, _keys2.default)(mutatorMap).forEach(function (key) {
  110. var map = mutatorMap[key];
  111. if (map.value) map.writable = t.booleanLiteral(true);
  112. map.configurable = t.booleanLiteral(true);
  113. map.enumerable = t.booleanLiteral(true);
  114. });
  115. return toClassObject(mutatorMap);
  116. }