1 | "use strict";
|
2 |
|
3 | exports.__esModule = true;
|
4 |
|
5 | var _getIterator2 = require("babel-runtime/core-js/get-iterator");
|
6 |
|
7 | var _getIterator3 = _interopRequireDefault(_getIterator2);
|
8 |
|
9 | exports.default = function (classPath) {
|
10 | classPath.assertClass();
|
11 |
|
12 | var memoisedExpressions = [];
|
13 |
|
14 | function maybeMemoise(path) {
|
15 | if (!path.node || path.isPure()) return;
|
16 |
|
17 | var uid = classPath.scope.generateDeclaredUidIdentifier();
|
18 | memoisedExpressions.push(t.assignmentExpression("=", uid, path.node));
|
19 | path.replaceWith(uid);
|
20 | }
|
21 |
|
22 | function memoiseDecorators(paths) {
|
23 | if (!Array.isArray(paths) || !paths.length) return;
|
24 |
|
25 | paths = paths.reverse();
|
26 |
|
27 | (0, _babelHelperBindifyDecorators2.default)(paths);
|
28 |
|
29 | for (var _iterator = paths, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
|
30 | var _ref;
|
31 |
|
32 | if (_isArray) {
|
33 | if (_i >= _iterator.length) break;
|
34 | _ref = _iterator[_i++];
|
35 | } else {
|
36 | _i = _iterator.next();
|
37 | if (_i.done) break;
|
38 | _ref = _i.value;
|
39 | }
|
40 |
|
41 | var path = _ref;
|
42 |
|
43 | maybeMemoise(path);
|
44 | }
|
45 | }
|
46 |
|
47 | maybeMemoise(classPath.get("superClass"));
|
48 | memoiseDecorators(classPath.get("decorators"), true);
|
49 |
|
50 | var methods = classPath.get("body.body");
|
51 | for (var _iterator2 = methods, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
|
52 | var _ref2;
|
53 |
|
54 | if (_isArray2) {
|
55 | if (_i2 >= _iterator2.length) break;
|
56 | _ref2 = _iterator2[_i2++];
|
57 | } else {
|
58 | _i2 = _iterator2.next();
|
59 | if (_i2.done) break;
|
60 | _ref2 = _i2.value;
|
61 | }
|
62 |
|
63 | var methodPath = _ref2;
|
64 |
|
65 | if (methodPath.is("computed")) {
|
66 | maybeMemoise(methodPath.get("key"));
|
67 | }
|
68 |
|
69 | if (methodPath.has("decorators")) {
|
70 | memoiseDecorators(classPath.get("decorators"));
|
71 | }
|
72 | }
|
73 |
|
74 | if (memoisedExpressions) {
|
75 | classPath.insertBefore(memoisedExpressions.map(function (expr) {
|
76 | return t.expressionStatement(expr);
|
77 | }));
|
78 | }
|
79 | };
|
80 |
|
81 | var _babelHelperBindifyDecorators = require("babel-helper-bindify-decorators");
|
82 |
|
83 | var _babelHelperBindifyDecorators2 = _interopRequireDefault(_babelHelperBindifyDecorators);
|
84 |
|
85 | var _babelTypes = require("babel-types");
|
86 |
|
87 | var t = _interopRequireWildcard(_babelTypes);
|
88 |
|
89 | 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; } }
|
90 |
|
91 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
92 |
|
93 | module.exports = exports["default"]; |
\ | No newline at end of file |