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,83 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.isReactComponent = undefined;
5
+ exports.isCompatTag = isCompatTag;
6
+ exports.buildChildren = buildChildren;
7
+
8
+ var _index = require("./index");
9
+
10
+ var t = _interopRequireWildcard(_index);
11
+
12
+ 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; } }
13
+
14
+ var isReactComponent = exports.isReactComponent = t.buildMatchMemberExpression("React.Component");
15
+
16
+ function isCompatTag(tagName) {
17
+ return !!tagName && /^[a-z]|\-/.test(tagName);
18
+ }
19
+
20
+ function cleanJSXElementLiteralChild(child, args) {
21
+ var lines = child.value.split(/\r\n|\n|\r/);
22
+
23
+ var lastNonEmptyLine = 0;
24
+
25
+ for (var i = 0; i < lines.length; i++) {
26
+ if (lines[i].match(/[^ \t]/)) {
27
+ lastNonEmptyLine = i;
28
+ }
29
+ }
30
+
31
+ var str = "";
32
+
33
+ for (var _i = 0; _i < lines.length; _i++) {
34
+ var line = lines[_i];
35
+
36
+ var isFirstLine = _i === 0;
37
+ var isLastLine = _i === lines.length - 1;
38
+ var isLastNonEmptyLine = _i === lastNonEmptyLine;
39
+
40
+ // replace rendered whitespace tabs with spaces
41
+ var trimmedLine = line.replace(/\t/g, " ");
42
+
43
+ // trim whitespace touching a newline
44
+ if (!isFirstLine) {
45
+ trimmedLine = trimmedLine.replace(/^[ ]+/, "");
46
+ }
47
+
48
+ // trim whitespace touching an endline
49
+ if (!isLastLine) {
50
+ trimmedLine = trimmedLine.replace(/[ ]+$/, "");
51
+ }
52
+
53
+ if (trimmedLine) {
54
+ if (!isLastNonEmptyLine) {
55
+ trimmedLine += " ";
56
+ }
57
+
58
+ str += trimmedLine;
59
+ }
60
+ }
61
+
62
+ if (str) args.push(t.stringLiteral(str));
63
+ }
64
+
65
+ function buildChildren(node) {
66
+ var elems = [];
67
+
68
+ for (var i = 0; i < node.children.length; i++) {
69
+ var child = node.children[i];
70
+
71
+ if (t.isJSXText(child)) {
72
+ cleanJSXElementLiteralChild(child, elems);
73
+ continue;
74
+ }
75
+
76
+ if (t.isJSXExpressionContainer(child)) child = child.expression;
77
+ if (t.isJSXEmptyExpression(child)) continue;
78
+
79
+ elems.push(child);
80
+ }
81
+
82
+ return elems;
83
+ }
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _create = require("babel-runtime/core-js/object/create");
6
+
7
+ var _create2 = _interopRequireDefault(_create);
8
+
9
+ exports.getBindingIdentifiers = getBindingIdentifiers;
10
+ exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers;
11
+
12
+ var _index = require("./index");
13
+
14
+ var t = _interopRequireWildcard(_index);
15
+
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
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
+ /**
21
+ * Return a list of binding identifiers associated with the input `node`.
22
+ */
23
+
24
+ function getBindingIdentifiers(node, duplicates, outerOnly) {
25
+ var search = [].concat(node);
26
+ var ids = (0, _create2.default)(null);
27
+
28
+ while (search.length) {
29
+ var id = search.shift();
30
+ if (!id) continue;
31
+
32
+ var keys = t.getBindingIdentifiers.keys[id.type];
33
+
34
+ if (t.isIdentifier(id)) {
35
+ if (duplicates) {
36
+ var _ids = ids[id.name] = ids[id.name] || [];
37
+ _ids.push(id);
38
+ } else {
39
+ ids[id.name] = id;
40
+ }
41
+ continue;
42
+ }
43
+
44
+ if (t.isExportDeclaration(id)) {
45
+ if (t.isDeclaration(node.declaration)) {
46
+ search.push(node.declaration);
47
+ }
48
+ continue;
49
+ }
50
+
51
+ if (outerOnly) {
52
+ if (t.isFunctionDeclaration(id)) {
53
+ search.push(id.id);
54
+ continue;
55
+ }
56
+
57
+ if (t.isFunctionExpression(id)) {
58
+ continue;
59
+ }
60
+ }
61
+
62
+ if (keys) {
63
+ for (var i = 0; i < keys.length; i++) {
64
+ var key = keys[i];
65
+ if (id[key]) {
66
+ search = search.concat(id[key]);
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ return ids;
73
+ }
74
+
75
+ /**
76
+ * Mapping of types to their identifier keys.
77
+ */
78
+
79
+ getBindingIdentifiers.keys = {
80
+ DeclareClass: ["id"],
81
+ DeclareFunction: ["id"],
82
+ DeclareModule: ["id"],
83
+ DeclareVariable: ["id"],
84
+ InterfaceDeclaration: ["id"],
85
+ TypeAlias: ["id"],
86
+
87
+ CatchClause: ["param"],
88
+ LabeledStatement: ["label"],
89
+ UnaryExpression: ["argument"],
90
+ AssignmentExpression: ["left"],
91
+
92
+ ImportSpecifier: ["local"],
93
+ ImportNamespaceSpecifier: ["local"],
94
+ ImportDefaultSpecifier: ["local"],
95
+ ImportDeclaration: ["specifiers"],
96
+
97
+ ExportSpecifier: ["exported"],
98
+ ExportNamespaceSpecifier: ["exported"],
99
+ ExportDefaultSpecifier: ["exported"],
100
+
101
+ FunctionDeclaration: ["id", "params"],
102
+ FunctionExpression: ["id", "params"],
103
+
104
+ ClassDeclaration: ["id"],
105
+ ClassExpression: ["id"],
106
+
107
+ RestElement: ["argument"],
108
+ UpdateExpression: ["argument"],
109
+
110
+ RestProperty: ["argument"],
111
+ ObjectProperty: ["value"],
112
+
113
+ AssignmentPattern: ["left"],
114
+ ArrayPattern: ["elements"],
115
+ ObjectPattern: ["properties"],
116
+
117
+ VariableDeclaration: ["declarations"],
118
+ VariableDeclarator: ["id"]
119
+ };
120
+
121
+ function getOuterBindingIdentifiers(node, duplicates) {
122
+ return getBindingIdentifiers(node, duplicates, true);
123
+ }
@@ -0,0 +1,276 @@
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.isBinding = isBinding;
10
+ exports.isReferenced = isReferenced;
11
+ exports.isValidIdentifier = isValidIdentifier;
12
+ exports.isLet = isLet;
13
+ exports.isBlockScoped = isBlockScoped;
14
+ exports.isVar = isVar;
15
+ exports.isSpecifierDefault = isSpecifierDefault;
16
+ exports.isScope = isScope;
17
+ exports.isImmutable = isImmutable;
18
+
19
+ var _retrievers = require("./retrievers");
20
+
21
+ var _esutils = require("esutils");
22
+
23
+ var _esutils2 = _interopRequireDefault(_esutils);
24
+
25
+ var _index = require("./index");
26
+
27
+ var t = _interopRequireWildcard(_index);
28
+
29
+ var _constants = require("./constants");
30
+
31
+ 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; } }
32
+
33
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
+
35
+ /**
36
+ * Check if the input `node` is a binding identifier.
37
+ */
38
+
39
+ /* eslint indent: 0 */
40
+
41
+ function isBinding(node, parent) {
42
+ var keys = _retrievers.getBindingIdentifiers.keys[parent.type];
43
+ if (keys) {
44
+ for (var i = 0; i < keys.length; i++) {
45
+ var key = keys[i];
46
+ var val = parent[key];
47
+ if (Array.isArray(val)) {
48
+ if (val.indexOf(node) >= 0) return true;
49
+ } else {
50
+ if (val === node) return true;
51
+ }
52
+ }
53
+ }
54
+
55
+ return false;
56
+ }
57
+
58
+ /**
59
+ * Check if the input `node` is a reference to a bound variable.
60
+ */
61
+
62
+ function isReferenced(node, parent) {
63
+ switch (parent.type) {
64
+ // yes: object::NODE
65
+ // yes: NODE::callee
66
+ case "BindExpression":
67
+ return parent.object === node || parent.callee === node;
68
+
69
+ // yes: PARENT[NODE]
70
+ // yes: NODE.child
71
+ // no: parent.NODE
72
+ case "MemberExpression":
73
+ case "JSXMemberExpression":
74
+ if (parent.property === node && parent.computed) {
75
+ return true;
76
+ } else if (parent.object === node) {
77
+ return true;
78
+ } else {
79
+ return false;
80
+ }
81
+
82
+ // no: new.NODE
83
+ // no: NODE.target
84
+ case "MetaProperty":
85
+ return false;
86
+
87
+ // yes: { [NODE]: "" }
88
+ // yes: { NODE }
89
+ // no: { NODE: "" }
90
+ case "ObjectProperty":
91
+ if (parent.key === node) {
92
+ return parent.computed;
93
+ }
94
+
95
+ // no: let NODE = init;
96
+ // yes: let id = NODE;
97
+ case "VariableDeclarator":
98
+ return parent.id !== node;
99
+
100
+ // no: function NODE() {}
101
+ // no: function foo(NODE) {}
102
+ case "ArrowFunctionExpression":
103
+ case "FunctionDeclaration":
104
+ case "FunctionExpression":
105
+ for (var _iterator = parent.params, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
106
+ var _ref;
107
+
108
+ if (_isArray) {
109
+ if (_i >= _iterator.length) break;
110
+ _ref = _iterator[_i++];
111
+ } else {
112
+ _i = _iterator.next();
113
+ if (_i.done) break;
114
+ _ref = _i.value;
115
+ }
116
+
117
+ var param = _ref;
118
+
119
+ if (param === node) return false;
120
+ }
121
+
122
+ return parent.id !== node;
123
+
124
+ // no: export { foo as NODE };
125
+ // yes: export { NODE as foo };
126
+ // no: export { NODE as foo } from "foo";
127
+ case "ExportSpecifier":
128
+ if (parent.source) {
129
+ return false;
130
+ } else {
131
+ return parent.local === node;
132
+ }
133
+
134
+ // no: export NODE from "foo";
135
+ // no: export * as NODE from "foo";
136
+ case "ExportNamespaceSpecifier":
137
+ case "ExportDefaultSpecifier":
138
+ return false;
139
+
140
+ // no: <div NODE="foo" />
141
+ case "JSXAttribute":
142
+ return parent.name !== node;
143
+
144
+ // no: class { NODE = value; }
145
+ // yes: class { key = NODE; }
146
+ case "ClassProperty":
147
+ return parent.value === node;
148
+
149
+ // no: import NODE from "foo";
150
+ // no: import * as NODE from "foo";
151
+ // no: import { NODE as foo } from "foo";
152
+ // no: import { foo as NODE } from "foo";
153
+ // no: import NODE from "bar";
154
+ case "ImportDefaultSpecifier":
155
+ case "ImportNamespaceSpecifier":
156
+ case "ImportSpecifier":
157
+ return false;
158
+
159
+ // no: class NODE {}
160
+ case "ClassDeclaration":
161
+ case "ClassExpression":
162
+ return parent.id !== node;
163
+
164
+ // yes: class { [NODE]() {} }
165
+ case "ClassMethod":
166
+ case "ObjectMethod":
167
+ return parent.key === node && parent.computed;
168
+
169
+ // no: NODE: for (;;) {}
170
+ case "LabeledStatement":
171
+ return false;
172
+
173
+ // no: try {} catch (NODE) {}
174
+ case "CatchClause":
175
+ return parent.param !== node;
176
+
177
+ // no: function foo(...NODE) {}
178
+ case "RestElement":
179
+ return false;
180
+
181
+ // yes: left = NODE;
182
+ // no: NODE = right;
183
+ case "AssignmentExpression":
184
+ return parent.right === node;
185
+
186
+ // no: [NODE = foo] = [];
187
+ // yes: [foo = NODE] = [];
188
+ case "AssignmentPattern":
189
+ return parent.right === node;
190
+
191
+ // no: [NODE] = [];
192
+ // no: ({ NODE }) = [];
193
+ case "ObjectPattern":
194
+ case "ArrayPattern":
195
+ return false;
196
+ }
197
+
198
+ return true;
199
+ }
200
+
201
+ /**
202
+ * Check if the input `name` is a valid identifier name
203
+ * and isn't a reserved word.
204
+ */
205
+
206
+ function isValidIdentifier(name) {
207
+ if (typeof name !== "string" || _esutils2.default.keyword.isReservedWordES6(name, true)) {
208
+ return false;
209
+ } else {
210
+ return _esutils2.default.keyword.isIdentifierNameES6(name);
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Check if the input `node` is a `let` variable declaration.
216
+ */
217
+
218
+ function isLet(node) {
219
+ return t.isVariableDeclaration(node) && (node.kind !== "var" || node[_constants.BLOCK_SCOPED_SYMBOL]);
220
+ }
221
+
222
+ /**
223
+ * Check if the input `node` is block scoped.
224
+ */
225
+
226
+ function isBlockScoped(node) {
227
+ return t.isFunctionDeclaration(node) || t.isClassDeclaration(node) || t.isLet(node);
228
+ }
229
+
230
+ /**
231
+ * Check if the input `node` is a variable declaration.
232
+ */
233
+
234
+ function isVar(node) {
235
+ return t.isVariableDeclaration(node, { kind: "var" }) && !node[_constants.BLOCK_SCOPED_SYMBOL];
236
+ }
237
+
238
+ /**
239
+ * Check if the input `specifier` is a `default` import or export.
240
+ */
241
+
242
+ function isSpecifierDefault(specifier) {
243
+ return t.isImportDefaultSpecifier(specifier) || t.isIdentifier(specifier.imported || specifier.exported, { name: "default" });
244
+ }
245
+
246
+ /**
247
+ * Check if the input `node` is a scope.
248
+ */
249
+
250
+ function isScope(node, parent) {
251
+ if (t.isBlockStatement(node) && t.isFunction(parent, { body: node })) {
252
+ return false;
253
+ }
254
+
255
+ return t.isScopable(node);
256
+ }
257
+
258
+ /**
259
+ * Check if the input `node` is definitely immutable.
260
+ */
261
+
262
+ function isImmutable(node) {
263
+ if (t.isType(node.type, "Immutable")) return true;
264
+
265
+ if (t.isIdentifier(node)) {
266
+ if (node.name === "undefined") {
267
+ // immutable!
268
+ return true;
269
+ } else {
270
+ // no idea...
271
+ return false;
272
+ }
273
+ }
274
+
275
+ return false;
276
+ }