| 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
 | | "use strict"; |  |   |  | Object.defineProperty(exports, "__esModule", { |  |   value: true |  | }); |  | exports.default = hoistVariables; |  |   |  | var _t = require("@babel/types"); |  |   |  | const { |  |   assignmentExpression, |  |   expressionStatement, |  |   identifier |  | } = _t; |  | const visitor = { |  |   Scope(path, state) { |  |     if (state.kind === "let") path.skip(); |  |   }, |  |   |  |   FunctionParent(path) { |  |     path.skip(); |  |   }, |  |   |  |   VariableDeclaration(path, state) { |  |     if (state.kind && path.node.kind !== state.kind) return; |  |     const nodes = []; |  |     const declarations = path.get("declarations"); |  |     let firstId; |  |   |  |     for (const declar of declarations) { |  |       firstId = declar.node.id; |  |   |  |       if (declar.node.init) { |  |         nodes.push(expressionStatement(assignmentExpression("=", declar.node.id, declar.node.init))); |  |       } |  |   |  |       for (const name of Object.keys(declar.getBindingIdentifiers())) { |  |         state.emit(identifier(name), name, declar.node.init !== null); |  |       } |  |     } |  |   |  |     if (path.parentPath.isFor({ |  |       left: path.node |  |     })) { |  |       path.replaceWith(firstId); |  |     } else { |  |       path.replaceWithMultiple(nodes); |  |     } |  |   } |  |   |  | }; |  |   |  | function hoistVariables(path, emit, kind = "var") { |  |   path.traverse(visitor, { |  |     kind, |  |     emit |  |   }); |  | } | 
 |