babel-schmooze-sprockets 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/bin/console +14 -0
  3. data/bin/export-external-helpers +3 -0
  4. data/bin/setup +6 -0
  5. data/bin/update-npm-deps +8 -0
  6. data/examples/myapp/Gemfile +4 -5
  7. data/examples/myapp/Gemfile.lock +69 -93
  8. data/examples/myapp/app/assets/javascripts/code/hello.es6 +5 -1
  9. data/examples/myapp/app/views/layouts/application.html.erb +1 -0
  10. data/examples/myapp/app/views/site/home.html.erb +0 -1
  11. data/lib/babel-schmooze-sprockets/babel_processor.rb +6 -4
  12. data/lib/babel-schmooze-sprockets/engine.rb +1 -4
  13. data/lib/babel-schmooze-sprockets/version.rb +1 -1
  14. data/node_modules/amdefine/package.json +8 -1
  15. data/node_modules/babel-core/node_modules/babel-runtime/package.json +9 -5
  16. data/node_modules/babel-core/node_modules/babel-traverse/.npmignore +3 -0
  17. data/node_modules/babel-core/node_modules/babel-traverse/README.md +1 -0
  18. data/node_modules/babel-core/node_modules/babel-traverse/lib/cache.js +20 -0
  19. data/node_modules/babel-core/node_modules/babel-traverse/lib/context.js +219 -0
  20. data/node_modules/babel-core/node_modules/babel-traverse/lib/hub.js +19 -0
  21. data/node_modules/babel-core/node_modules/babel-traverse/lib/index.js +250 -0
  22. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/ancestry.js +317 -0
  23. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/comments.js +55 -0
  24. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js +297 -0
  25. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/conversion.js +48 -0
  26. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/evaluation.js +406 -0
  27. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/family.js +168 -0
  28. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/index.js +245 -0
  29. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/index.js +151 -0
  30. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/inferer-reference.js +225 -0
  31. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/inferers.js +198 -0
  32. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/introspection.js +518 -0
  33. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/hoister.js +166 -0
  34. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/removal-hooks.js +64 -0
  35. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/virtual-types.js +141 -0
  36. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/modification.js +293 -0
  37. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/removal.js +72 -0
  38. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/replacement.js +302 -0
  39. data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/binding.js +105 -0
  40. data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/index.js +1222 -0
  41. data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/lib/renamer.js +154 -0
  42. data/node_modules/babel-core/node_modules/babel-traverse/lib/visitors.js +360 -0
  43. data/node_modules/babel-core/node_modules/babel-traverse/package.json +107 -0
  44. data/node_modules/babel-core/node_modules/core-js/package.json +20 -2
  45. data/node_modules/babel-core/package.json +31 -24
  46. data/node_modules/babel-generator/lib/buffer.js +69 -70
  47. data/node_modules/babel-generator/lib/generators/base.js +16 -12
  48. data/node_modules/babel-generator/lib/generators/classes.js +28 -19
  49. data/node_modules/babel-generator/lib/generators/expressions.js +76 -99
  50. data/node_modules/babel-generator/lib/generators/flow.js +178 -119
  51. data/node_modules/babel-generator/lib/generators/jsx.js +38 -29
  52. data/node_modules/babel-generator/lib/generators/methods.js +34 -25
  53. data/node_modules/babel-generator/lib/generators/modules.js +67 -40
  54. data/node_modules/babel-generator/lib/generators/statements.js +93 -76
  55. data/node_modules/babel-generator/lib/generators/template-literals.js +12 -11
  56. data/node_modules/babel-generator/lib/generators/types.js +56 -49
  57. data/node_modules/babel-generator/lib/index.js +52 -39
  58. data/node_modules/babel-generator/lib/node/index.js +12 -18
  59. data/node_modules/babel-generator/lib/node/parentheses.js +23 -27
  60. data/node_modules/babel-generator/lib/node/whitespace.js +20 -26
  61. data/node_modules/babel-generator/lib/position.js +5 -5
  62. data/node_modules/babel-generator/lib/printer.js +52 -81
  63. data/node_modules/babel-generator/lib/source-map.js +9 -11
  64. data/node_modules/babel-generator/lib/whitespace.js +13 -13
  65. data/node_modules/babel-generator/node_modules/babel-runtime/package.json +19 -6
  66. data/node_modules/babel-generator/node_modules/babel-types/.npmignore +3 -0
  67. data/node_modules/babel-generator/node_modules/babel-types/README.md +1141 -0
  68. data/node_modules/babel-generator/node_modules/babel-types/lib/constants.js +40 -0
  69. data/node_modules/babel-generator/node_modules/babel-types/lib/converters.js +378 -0
  70. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/core.js +704 -0
  71. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/es2015.js +354 -0
  72. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/experimental.js +85 -0
  73. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/flow.js +319 -0
  74. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/index.js +247 -0
  75. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/init.js +15 -0
  76. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/jsx.js +137 -0
  77. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/misc.js +21 -0
  78. data/node_modules/babel-generator/node_modules/babel-types/lib/flow.js +129 -0
  79. data/node_modules/babel-generator/node_modules/babel-types/lib/index.js +848 -0
  80. data/node_modules/babel-generator/node_modules/babel-types/lib/react.js +83 -0
  81. data/node_modules/babel-generator/node_modules/babel-types/lib/retrievers.js +123 -0
  82. data/node_modules/babel-generator/node_modules/babel-types/lib/validators.js +276 -0
  83. data/node_modules/babel-generator/node_modules/babel-types/package.json +103 -0
  84. data/node_modules/babel-generator/node_modules/core-js/package.json +10 -5
  85. data/node_modules/babel-generator/package.json +19 -16
  86. data/node_modules/babel-helpers/node_modules/babel-runtime/package.json +19 -3
  87. data/node_modules/babel-helpers/node_modules/core-js/package.json +20 -4
  88. data/node_modules/babel-helpers/package.json +8 -1
  89. data/node_modules/babel-register/node_modules/babel-runtime/package.json +19 -3
  90. data/node_modules/babel-register/node_modules/core-js/package.json +20 -4
  91. data/node_modules/babel-register/package.json +8 -1
  92. data/node_modules/balanced-match/package.json +8 -1
  93. data/node_modules/brace-expansion/package.json +19 -12
  94. data/node_modules/concat-map/package.json +9 -2
  95. data/node_modules/convert-source-map/package.json +8 -1
  96. data/node_modules/detect-indent/package.json +8 -1
  97. data/node_modules/get-stdin/package.json +8 -1
  98. data/node_modules/home-or-tmp/package.json +9 -2
  99. data/node_modules/is-finite/package.json +8 -2
  100. data/node_modules/json5/package.json +8 -1
  101. data/node_modules/minimatch/README.md +2 -9
  102. data/node_modules/minimatch/minimatch.js +15 -3
  103. data/node_modules/minimatch/package.json +29 -21
  104. data/node_modules/minimist/package.json +8 -1
  105. data/node_modules/mkdirp/node_modules/minimist/package.json +8 -1
  106. data/node_modules/mkdirp/package.json +8 -1
  107. data/node_modules/number-is-nan/package.json +8 -1
  108. data/node_modules/os-tmpdir/package.json +8 -1
  109. data/node_modules/path-exists/package.json +8 -1
  110. data/node_modules/path-is-absolute/package.json +8 -1
  111. data/node_modules/repeating/package.json +15 -11
  112. data/node_modules/shebang-regex/package.json +8 -1
  113. data/node_modules/slash/package.json +8 -1
  114. data/node_modules/source-map-support/node_modules/source-map/package.json +8 -1
  115. data/node_modules/source-map-support/package.json +8 -1
  116. data/node_modules/source-map/package.json +8 -1
  117. data/node_modules/user-home/package.json +8 -1
  118. data/package.json +1 -1
  119. metadata +54 -6
  120. data/node_modules/brace-expansion/.npmignore +0 -3
  121. data/node_modules/brace-expansion/example.js +0 -8
  122. data/node_modules/minimatch/browser.js +0 -1159
@@ -0,0 +1,168 @@
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.getStatementParent = getStatementParent;
10
+ exports.getOpposite = getOpposite;
11
+ exports.getCompletionRecords = getCompletionRecords;
12
+ exports.getSibling = getSibling;
13
+ exports.get = get;
14
+ exports._getKey = _getKey;
15
+ exports._getPattern = _getPattern;
16
+ exports.getBindingIdentifiers = getBindingIdentifiers;
17
+ exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers;
18
+
19
+ var _index = require("./index");
20
+
21
+ var _index2 = _interopRequireDefault(_index);
22
+
23
+ var _babelTypes = require("babel-types");
24
+
25
+ var t = _interopRequireWildcard(_babelTypes);
26
+
27
+ 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; } }
28
+
29
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
+
31
+ function getStatementParent() {
32
+ var path = this;
33
+
34
+ do {
35
+ if (!path.parentPath || Array.isArray(path.container) && path.isStatement()) {
36
+ break;
37
+ } else {
38
+ path = path.parentPath;
39
+ }
40
+ } while (path);
41
+
42
+ if (path && (path.isProgram() || path.isFile())) {
43
+ throw new Error("File/Program node, we can't possibly find a statement parent to this");
44
+ }
45
+
46
+ return path;
47
+ } // This file contains methods responsible for dealing with/retrieving children or siblings.
48
+
49
+ function getOpposite() {
50
+ if (this.key === "left") {
51
+ return this.getSibling("right");
52
+ } else if (this.key === "right") {
53
+ return this.getSibling("left");
54
+ }
55
+ }
56
+
57
+ function getCompletionRecords() {
58
+ var paths = [];
59
+
60
+ var add = function add(path) {
61
+ if (path) paths = paths.concat(path.getCompletionRecords());
62
+ };
63
+
64
+ if (this.isIfStatement()) {
65
+ add(this.get("consequent"));
66
+ add(this.get("alternate"));
67
+ } else if (this.isDoExpression() || this.isFor() || this.isWhile()) {
68
+ add(this.get("body"));
69
+ } else if (this.isProgram() || this.isBlockStatement()) {
70
+ add(this.get("body").pop());
71
+ } else if (this.isFunction()) {
72
+ return this.get("body").getCompletionRecords();
73
+ } else if (this.isTryStatement()) {
74
+ add(this.get("block"));
75
+ add(this.get("handler"));
76
+ add(this.get("finalizer"));
77
+ } else {
78
+ paths.push(this);
79
+ }
80
+
81
+ return paths;
82
+ }
83
+
84
+ function getSibling(key) {
85
+ return _index2.default.get({
86
+ parentPath: this.parentPath,
87
+ parent: this.parent,
88
+ container: this.container,
89
+ listKey: this.listKey,
90
+ key: key
91
+ });
92
+ }
93
+
94
+ function get(key, context) {
95
+ if (context === true) context = this.context;
96
+ var parts = key.split(".");
97
+ if (parts.length === 1) {
98
+ // "foo"
99
+ return this._getKey(key, context);
100
+ } else {
101
+ // "foo.bar"
102
+ return this._getPattern(parts, context);
103
+ }
104
+ }
105
+
106
+ function _getKey(key, context) {
107
+ var _this = this;
108
+
109
+ var node = this.node;
110
+ var container = node[key];
111
+
112
+ if (Array.isArray(container)) {
113
+ // requested a container so give them all the paths
114
+ return container.map(function (_, i) {
115
+ return _index2.default.get({
116
+ listKey: key,
117
+ parentPath: _this,
118
+ parent: node,
119
+ container: container,
120
+ key: i
121
+ }).setContext(context);
122
+ });
123
+ } else {
124
+ return _index2.default.get({
125
+ parentPath: this,
126
+ parent: node,
127
+ container: node,
128
+ key: key
129
+ }).setContext(context);
130
+ }
131
+ }
132
+
133
+ function _getPattern(parts, context) {
134
+ var path = this;
135
+ for (var _iterator = parts, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
136
+ var _ref;
137
+
138
+ if (_isArray) {
139
+ if (_i >= _iterator.length) break;
140
+ _ref = _iterator[_i++];
141
+ } else {
142
+ _i = _iterator.next();
143
+ if (_i.done) break;
144
+ _ref = _i.value;
145
+ }
146
+
147
+ var part = _ref;
148
+
149
+ if (part === ".") {
150
+ path = path.parentPath;
151
+ } else {
152
+ if (Array.isArray(path)) {
153
+ path = path[part];
154
+ } else {
155
+ path = path.get(part, context);
156
+ }
157
+ }
158
+ }
159
+ return path;
160
+ }
161
+
162
+ function getBindingIdentifiers(duplicates) {
163
+ return t.getBindingIdentifiers(this.node, duplicates);
164
+ }
165
+
166
+ function getOuterBindingIdentifiers(duplicates) {
167
+ return t.getOuterBindingIdentifiers(this.node, duplicates);
168
+ }
@@ -0,0 +1,245 @@
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
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
10
+
11
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
12
+
13
+ var _virtualTypes = require("./lib/virtual-types");
14
+
15
+ var virtualTypes = _interopRequireWildcard(_virtualTypes);
16
+
17
+ var _debug2 = require("debug");
18
+
19
+ var _debug3 = _interopRequireDefault(_debug2);
20
+
21
+ var _invariant = require("invariant");
22
+
23
+ var _invariant2 = _interopRequireDefault(_invariant);
24
+
25
+ var _index = require("../index");
26
+
27
+ var _index2 = _interopRequireDefault(_index);
28
+
29
+ var _assign = require("lodash/assign");
30
+
31
+ var _assign2 = _interopRequireDefault(_assign);
32
+
33
+ var _scope = require("../scope");
34
+
35
+ var _scope2 = _interopRequireDefault(_scope);
36
+
37
+ var _babelTypes = require("babel-types");
38
+
39
+ var t = _interopRequireWildcard(_babelTypes);
40
+
41
+ var _cache = require("../cache");
42
+
43
+ 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; } }
44
+
45
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
+
47
+ /* eslint max-len: 0 */
48
+
49
+ var _debug = (0, _debug3.default)("babel");
50
+
51
+ var NodePath = function () {
52
+ function NodePath(hub, parent) {
53
+ (0, _classCallCheck3.default)(this, NodePath);
54
+
55
+ this.parent = parent;
56
+ this.hub = hub;
57
+ this.contexts = [];
58
+ this.data = {};
59
+ this.shouldSkip = false;
60
+ this.shouldStop = false;
61
+ this.removed = false;
62
+ this.state = null;
63
+ this.opts = null;
64
+ this.skipKeys = null;
65
+ this.parentPath = null;
66
+ this.context = null;
67
+ this.container = null;
68
+ this.listKey = null;
69
+ this.inList = false;
70
+ this.parentKey = null;
71
+ this.key = null;
72
+ this.node = null;
73
+ this.scope = null;
74
+ this.type = null;
75
+ this.typeAnnotation = null;
76
+ }
77
+
78
+ NodePath.get = function get(_ref) {
79
+ var hub = _ref.hub;
80
+ var parentPath = _ref.parentPath;
81
+ var parent = _ref.parent;
82
+ var container = _ref.container;
83
+ var listKey = _ref.listKey;
84
+ var key = _ref.key;
85
+
86
+ if (!hub && parentPath) {
87
+ hub = parentPath.hub;
88
+ }
89
+
90
+ (0, _invariant2.default)(parent, "To get a node path the parent needs to exist");
91
+
92
+ var targetNode = container[key];
93
+
94
+ var paths = _cache.path.get(parent) || [];
95
+ if (!_cache.path.has(parent)) {
96
+ _cache.path.set(parent, paths);
97
+ }
98
+
99
+ var path = void 0;
100
+
101
+ for (var i = 0; i < paths.length; i++) {
102
+ var pathCheck = paths[i];
103
+ if (pathCheck.node === targetNode) {
104
+ path = pathCheck;
105
+ break;
106
+ }
107
+ }
108
+
109
+ if (!path) {
110
+ path = new NodePath(hub, parent);
111
+ paths.push(path);
112
+ }
113
+
114
+ path.setup(parentPath, container, listKey, key);
115
+
116
+ return path;
117
+ };
118
+
119
+ NodePath.prototype.getScope = function getScope(scope) {
120
+ var ourScope = scope;
121
+
122
+ // we're entering a new scope so let's construct it!
123
+ if (this.isScope()) {
124
+ ourScope = new _scope2.default(this, scope);
125
+ }
126
+
127
+ return ourScope;
128
+ };
129
+
130
+ NodePath.prototype.setData = function setData(key, val) {
131
+ return this.data[key] = val;
132
+ };
133
+
134
+ NodePath.prototype.getData = function getData(key, def) {
135
+ var val = this.data[key];
136
+ if (!val && def) val = this.data[key] = def;
137
+ return val;
138
+ };
139
+
140
+ NodePath.prototype.buildCodeFrameError = function buildCodeFrameError(msg) {
141
+ var Error = arguments.length <= 1 || arguments[1] === undefined ? SyntaxError : arguments[1];
142
+
143
+ return this.hub.file.buildCodeFrameError(this.node, msg, Error);
144
+ };
145
+
146
+ NodePath.prototype.traverse = function traverse(visitor, state) {
147
+ (0, _index2.default)(this.node, visitor, this.scope, state, this);
148
+ };
149
+
150
+ NodePath.prototype.mark = function mark(type, message) {
151
+ this.hub.file.metadata.marked.push({
152
+ type: type,
153
+ message: message,
154
+ loc: this.node.loc
155
+ });
156
+ };
157
+
158
+ NodePath.prototype.set = function set(key, node) {
159
+ t.validate(this.node, key, node);
160
+ this.node[key] = node;
161
+ };
162
+
163
+ NodePath.prototype.getPathLocation = function getPathLocation() {
164
+ var parts = [];
165
+ var path = this;
166
+ do {
167
+ var key = path.key;
168
+ if (path.inList) key = path.listKey + "[" + key + "]";
169
+ parts.unshift(key);
170
+ } while (path = path.parentPath);
171
+ return parts.join(".");
172
+ };
173
+
174
+ NodePath.prototype.debug = function debug(buildMessage) {
175
+ if (!_debug.enabled) return;
176
+ _debug(this.getPathLocation() + " " + this.type + ": " + buildMessage());
177
+ };
178
+
179
+ return NodePath;
180
+ }();
181
+
182
+ exports.default = NodePath;
183
+
184
+
185
+ (0, _assign2.default)(NodePath.prototype, require("./ancestry"));
186
+ (0, _assign2.default)(NodePath.prototype, require("./inference"));
187
+ (0, _assign2.default)(NodePath.prototype, require("./replacement"));
188
+ (0, _assign2.default)(NodePath.prototype, require("./evaluation"));
189
+ (0, _assign2.default)(NodePath.prototype, require("./conversion"));
190
+ (0, _assign2.default)(NodePath.prototype, require("./introspection"));
191
+ (0, _assign2.default)(NodePath.prototype, require("./context"));
192
+ (0, _assign2.default)(NodePath.prototype, require("./removal"));
193
+ (0, _assign2.default)(NodePath.prototype, require("./modification"));
194
+ (0, _assign2.default)(NodePath.prototype, require("./family"));
195
+ (0, _assign2.default)(NodePath.prototype, require("./comments"));
196
+
197
+ var _loop2 = function _loop2() {
198
+ if (_isArray) {
199
+ if (_i >= _iterator.length) return "break";
200
+ _ref2 = _iterator[_i++];
201
+ } else {
202
+ _i = _iterator.next();
203
+ if (_i.done) return "break";
204
+ _ref2 = _i.value;
205
+ }
206
+
207
+ var type = _ref2;
208
+
209
+ var typeKey = "is" + type;
210
+ NodePath.prototype[typeKey] = function (opts) {
211
+ return t[typeKey](this.node, opts);
212
+ };
213
+
214
+ NodePath.prototype["assert" + type] = function (opts) {
215
+ if (!this[typeKey](opts)) {
216
+ throw new TypeError("Expected node path of type " + type);
217
+ }
218
+ };
219
+ };
220
+
221
+ for (var _iterator = t.TYPES, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
222
+ var _ref2;
223
+
224
+ var _ret2 = _loop2();
225
+
226
+ if (_ret2 === "break") break;
227
+ }
228
+
229
+ var _loop = function _loop(type) {
230
+ if (type[0] === "_") return "continue";
231
+ if (t.TYPES.indexOf(type) < 0) t.TYPES.push(type);
232
+
233
+ var virtualType = virtualTypes[type];
234
+
235
+ NodePath.prototype["is" + type] = function (opts) {
236
+ return virtualType.checkPath(this, opts);
237
+ };
238
+ };
239
+
240
+ for (var type in virtualTypes) {
241
+ var _ret = _loop(type);
242
+
243
+ if (_ret === "continue") continue;
244
+ }
245
+ module.exports = exports["default"];
@@ -0,0 +1,151 @@
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.getTypeAnnotation = getTypeAnnotation;
10
+ exports._getTypeAnnotation = _getTypeAnnotation;
11
+ exports.isBaseType = isBaseType;
12
+ exports.couldBeBaseType = couldBeBaseType;
13
+ exports.baseTypeStrictlyMatches = baseTypeStrictlyMatches;
14
+ exports.isGenericType = isGenericType;
15
+
16
+ var _inferers = require("./inferers");
17
+
18
+ var inferers = _interopRequireWildcard(_inferers);
19
+
20
+ var _babelTypes = require("babel-types");
21
+
22
+ var t = _interopRequireWildcard(_babelTypes);
23
+
24
+ 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; } }
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
28
+ /**
29
+ * Infer the type of the current `NodePath`.
30
+ */
31
+
32
+ function getTypeAnnotation() {
33
+ if (this.typeAnnotation) return this.typeAnnotation;
34
+
35
+ var type = this._getTypeAnnotation() || t.anyTypeAnnotation();
36
+ if (t.isTypeAnnotation(type)) type = type.typeAnnotation;
37
+ return this.typeAnnotation = type;
38
+ }
39
+
40
+ /**
41
+ * todo: split up this method
42
+ */
43
+
44
+ function _getTypeAnnotation() {
45
+ var node = this.node;
46
+
47
+ if (!node) {
48
+ // handle initializerless variables, add in checks for loop initializers too
49
+ if (this.key === "init" && this.parentPath.isVariableDeclarator()) {
50
+ var declar = this.parentPath.parentPath;
51
+ var declarParent = declar.parentPath;
52
+
53
+ // for (let NODE in bar) {}
54
+ if (declar.key === "left" && declarParent.isForInStatement()) {
55
+ return t.stringTypeAnnotation();
56
+ }
57
+
58
+ // for (let NODE of bar) {}
59
+ if (declar.key === "left" && declarParent.isForOfStatement()) {
60
+ return t.anyTypeAnnotation();
61
+ }
62
+
63
+ return t.voidTypeAnnotation();
64
+ } else {
65
+ return;
66
+ }
67
+ }
68
+
69
+ if (node.typeAnnotation) {
70
+ return node.typeAnnotation;
71
+ }
72
+
73
+ var inferer = inferers[node.type];
74
+ if (inferer) {
75
+ return inferer.call(this, node);
76
+ }
77
+
78
+ inferer = inferers[this.parentPath.type];
79
+ if (inferer && inferer.validParent) {
80
+ return this.parentPath.getTypeAnnotation();
81
+ }
82
+ }
83
+
84
+ function isBaseType(baseName, soft) {
85
+ return _isBaseType(baseName, this.getTypeAnnotation(), soft);
86
+ }
87
+
88
+ function _isBaseType(baseName, type, soft) {
89
+ if (baseName === "string") {
90
+ return t.isStringTypeAnnotation(type);
91
+ } else if (baseName === "number") {
92
+ return t.isNumberTypeAnnotation(type);
93
+ } else if (baseName === "boolean") {
94
+ return t.isBooleanTypeAnnotation(type);
95
+ } else if (baseName === "any") {
96
+ return t.isAnyTypeAnnotation(type);
97
+ } else if (baseName === "mixed") {
98
+ return t.isMixedTypeAnnotation(type);
99
+ } else if (baseName === "void") {
100
+ return t.isVoidTypeAnnotation(type);
101
+ } else {
102
+ if (soft) {
103
+ return false;
104
+ } else {
105
+ throw new Error("Unknown base type " + baseName);
106
+ }
107
+ }
108
+ }
109
+
110
+ function couldBeBaseType(name) {
111
+ var type = this.getTypeAnnotation();
112
+ if (t.isAnyTypeAnnotation(type)) return true;
113
+
114
+ if (t.isUnionTypeAnnotation(type)) {
115
+ for (var _iterator = type.types, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
116
+ var _ref;
117
+
118
+ if (_isArray) {
119
+ if (_i >= _iterator.length) break;
120
+ _ref = _iterator[_i++];
121
+ } else {
122
+ _i = _iterator.next();
123
+ if (_i.done) break;
124
+ _ref = _i.value;
125
+ }
126
+
127
+ var type2 = _ref;
128
+
129
+ if (t.isAnyTypeAnnotation(type2) || _isBaseType(name, type2, true)) {
130
+ return true;
131
+ }
132
+ }
133
+ return false;
134
+ } else {
135
+ return _isBaseType(name, type, true);
136
+ }
137
+ }
138
+
139
+ function baseTypeStrictlyMatches(right) {
140
+ var left = this.getTypeAnnotation();
141
+ right = right.getTypeAnnotation();
142
+
143
+ if (!t.isAnyTypeAnnotation(left) && t.isFlowBaseAnnotation(left)) {
144
+ return right.type === left.type;
145
+ }
146
+ }
147
+
148
+ function isGenericType(genericName) {
149
+ var type = this.getTypeAnnotation();
150
+ return t.isGenericTypeAnnotation(type) && t.isIdentifier(type.id, { name: genericName });
151
+ }